mirror of
https://github.com/actions/versions-package-tools.git
synced 2025-12-10 03:13:23 +00:00
Migrate tools CI to GA
This commit is contained in:
@@ -2,10 +2,8 @@
|
||||
.SYNOPSIS
|
||||
Create commit with all unstaged changes in repository and create pull-request
|
||||
|
||||
.PARAMETER RepositoryOwner
|
||||
Required parameter. The organization which tool repository belongs
|
||||
.PARAMETER RepositoryName
|
||||
Optional parameter. The name of tool repository
|
||||
.PARAMETER RepositoryFullName
|
||||
Required parameter. The owner and repository name. For example, 'actions/versions-package-tools'
|
||||
.PARAMETER AccessToken
|
||||
Required parameter. PAT Token to authorize
|
||||
.PARAMETER BranchName
|
||||
@@ -18,8 +16,7 @@ Required parameter. The title of pull-request
|
||||
Required parameter. The description of pull-request
|
||||
#>
|
||||
param (
|
||||
[Parameter(Mandatory)] [string] $RepositoryOwner,
|
||||
[Parameter(Mandatory)] [string] $RepositoryName,
|
||||
[Parameter(Mandatory)] [string] $RepositoryFullName,
|
||||
[Parameter(Mandatory)] [string] $AccessToken,
|
||||
[Parameter(Mandatory)] [string] $BranchName,
|
||||
[Parameter(Mandatory)] [string] $CommitMessage,
|
||||
@@ -46,11 +43,11 @@ function Update-PullRequest {
|
||||
|
||||
$updatedPullRequest = $GitHubApi.UpdatePullRequest($Title, $Body, $BranchName, $PullRequest.number)
|
||||
|
||||
if (($updatedPullRequest -eq $null) -or ($updatedPullRequest.html_url -eq $null)) {
|
||||
Write-Host "##vso[task.logissue type=error;] Unexpected error occurs while updating pull request."
|
||||
if (($null -eq $updatedPullRequest) -or ($null -eq $updatedPullRequest.html_url)) {
|
||||
Write-Host "Unexpected error occurs while updating pull request."
|
||||
exit 1
|
||||
}
|
||||
Write-host "##[section] Pull request updated: $($updatedPullRequest.html_url)"
|
||||
Write-host "Pull request updated: $($updatedPullRequest.html_url)"
|
||||
}
|
||||
|
||||
function Create-PullRequest {
|
||||
@@ -67,12 +64,12 @@ function Create-PullRequest {
|
||||
|
||||
$createdPullRequest = $GitHubApi.CreateNewPullRequest($Title, $Body, $BranchName)
|
||||
|
||||
if (($createdPullRequest -eq $null) -or ($createdPullRequest.html_url -eq $null)) {
|
||||
Write-Host "##vso[task.logissue type=error;] Unexpected error occurs while creating pull request."
|
||||
if (($null -eq $createdPullRequest) -or ($null -eq $createdPullRequest.html_url)) {
|
||||
Write-Host "Unexpected error occurs while creating pull request."
|
||||
exit 1
|
||||
}
|
||||
|
||||
Write-host "##[section] Pull request created: $($createdPullRequest.html_url)"
|
||||
Write-host "Pull request created: $($createdPullRequest.html_url)"
|
||||
}
|
||||
|
||||
Write-Host "Configure local git preferences"
|
||||
@@ -87,8 +84,9 @@ Git-CommitAllChanges -Message $CommitMessage
|
||||
Write-Host "Push branch: $BranchName"
|
||||
Git-PushBranch -Name $BranchName -Force $true
|
||||
|
||||
$gitHubApi = Get-GitHubApi -AccountName $RepositoryOwner -ProjectName $RepositoryName -AccessToken $AccessToken
|
||||
$pullRequest = $gitHubApi.GetPullRequest($BranchName, $RepositoryOwner)
|
||||
$gitHubApi = Get-GitHubApi -RepositoryFullName $RepositoryFullName -AccessToken $AccessToken
|
||||
$repositoryOwner = $RepositoryFullName.Split('/')[0]
|
||||
$pullRequest = $gitHubApi.GetPullRequest($BranchName, $repositoryOwner)
|
||||
|
||||
if ($pullRequest.Count -gt 0) {
|
||||
Write-Host "Update pull request"
|
||||
|
||||
@@ -5,15 +5,13 @@ The module that contains a bunch of methods to interact with GitHub API V3
|
||||
class GitHubApi
|
||||
{
|
||||
[string] $BaseUrl
|
||||
[string] $RepoOwner
|
||||
[object] $AuthHeader
|
||||
|
||||
GitHubApi(
|
||||
[string] $AccountName,
|
||||
[string] $ProjectName,
|
||||
[string] $RepositoryFullName,
|
||||
[string] $AccessToken
|
||||
) {
|
||||
$this.BaseUrl = $this.BuildBaseUrl($AccountName, $ProjectName)
|
||||
$this.BaseUrl = $this.BuildBaseUrl($RepositoryFullName)
|
||||
$this.AuthHeader = $this.BuildAuth($AccessToken)
|
||||
}
|
||||
|
||||
@@ -27,8 +25,8 @@ class GitHubApi
|
||||
}
|
||||
}
|
||||
|
||||
[string] hidden BuildBaseUrl([string]$RepositoryOwner, [string]$RepositoryName) {
|
||||
return "https://api.github.com/repos/$RepositoryOwner/$RepositoryName"
|
||||
[string] hidden BuildBaseUrl([string]$RepositoryFullName) {
|
||||
return "https://api.github.com/repos/$RepositoryFullName"
|
||||
}
|
||||
|
||||
[object] CreateNewPullRequest([string]$Title, [string]$Body, [string]$BranchName){
|
||||
@@ -82,6 +80,35 @@ class GitHubApi
|
||||
return $releases
|
||||
}
|
||||
|
||||
[void] DispatchWorkflow([string]$EventType) {
|
||||
$url = "dispatches"
|
||||
$body = @{
|
||||
event_type = $EventType
|
||||
} | ConvertTo-Json
|
||||
|
||||
$this.InvokeRestMethod($url, 'POST', $null, $body)
|
||||
}
|
||||
|
||||
[object] GetWorkflowRuns([string]$WorkflowFileName) {
|
||||
$url = "actions/workflows/$WorkflowFileName/runs"
|
||||
return $this.InvokeRestMethod($url, 'GET', $null, $null)
|
||||
}
|
||||
|
||||
[object] GetWorkflowRunJobs([string]$WorkflowRunId) {
|
||||
$url = "actions/runs/$WorkflowRunId/jobs"
|
||||
return $this.InvokeRestMethod($url, 'GET', $null, $null)
|
||||
}
|
||||
|
||||
[void] CreateWorkflowDispatch([string]$WorkflowFileName, [string]$Ref, [object]$Inputs) {
|
||||
$url = "actions/workflows/${WorkflowFileName}/dispatches"
|
||||
$body = @{
|
||||
ref = $Ref
|
||||
inputs = $Inputs
|
||||
} | ConvertTo-Json
|
||||
|
||||
$this.InvokeRestMethod($url, 'POST', $null, $body)
|
||||
}
|
||||
|
||||
[string] hidden BuildUrl([string]$Url, [string]$RequestParams) {
|
||||
if ([string]::IsNullOrEmpty($RequestParams)) {
|
||||
return "$($this.BaseUrl)/$($Url)"
|
||||
@@ -117,10 +144,9 @@ class GitHubApi
|
||||
|
||||
function Get-GitHubApi {
|
||||
param (
|
||||
[string] $AccountName,
|
||||
[string] $ProjectName,
|
||||
[string] $RepositoryFullName,
|
||||
[string] $AccessToken
|
||||
)
|
||||
|
||||
return [GitHubApi]::New($AccountName, $ProjectName, $AccessToken)
|
||||
return [GitHubApi]::New($RepositoryFullName, $AccessToken)
|
||||
}
|
||||
91
github/run-ci-builds.ps1
Normal file
91
github/run-ci-builds.ps1
Normal file
@@ -0,0 +1,91 @@
|
||||
<#
|
||||
.SYNOPSIS
|
||||
Trigger runs on the workflow_dispatch event to build and upload tool packages
|
||||
|
||||
.PARAMETER RepositoryFullName
|
||||
Required parameter. The owner and repository name. For example, 'actions/versions-package-tools'
|
||||
.PARAMETER AccessToken
|
||||
Required parameter. PAT Token to authorize
|
||||
.PARAMETER WorkflowFileName
|
||||
Required parameter. The name of workflow file that will be triggered
|
||||
.PARAMETER WorkflowDispatchRef
|
||||
Required parameter. The reference of the workflow run. The reference can be a branch, tag, or a commit SHA.
|
||||
.PARAMETER ToolVersions
|
||||
Required parameter. List of tool versions to build and upload
|
||||
.PARAMETER PublishReleases
|
||||
Required parameter. Whether to publish releases, true or false
|
||||
#>
|
||||
|
||||
param (
|
||||
[Parameter(Mandatory)] [string] $RepositoryFullName,
|
||||
[Parameter(Mandatory)] [string] $AccessToken,
|
||||
[Parameter(Mandatory)] [string] $WorkflowFileName,
|
||||
[Parameter(Mandatory)] [string] $WorkflowDispatchRef,
|
||||
[Parameter(Mandatory)] [string] $ToolVersions,
|
||||
[Parameter(Mandatory)] [string] $PublishReleases
|
||||
)
|
||||
|
||||
Import-Module (Join-Path $PSScriptRoot "github-api.psm1")
|
||||
|
||||
function Get-WorkflowRunLink {
|
||||
param(
|
||||
[Parameter(Mandatory)] [object] $GitHubApi,
|
||||
[Parameter(Mandatory)] [string] $WorkflowFileName,
|
||||
[Parameter(Mandatory)] [string] $ToolVersion
|
||||
)
|
||||
|
||||
$listWorkflowRuns = $GitHubApi.GetWorkflowRuns($WorkflowFileName).workflow_runs | Sort-Object -Property 'run_number' -Descending
|
||||
|
||||
foreach ($workflowRun in $listWorkflowRuns) {
|
||||
$workflowRunJob = $gitHubApi.GetWorkflowRunJobs($workflowRun.id).jobs | Select-Object -First 1
|
||||
|
||||
if ($workflowRunJob.name -match $ToolVersion) {
|
||||
return $workflowRun.html_url
|
||||
}
|
||||
}
|
||||
|
||||
return $null
|
||||
}
|
||||
|
||||
function Queue-Builds {
|
||||
param (
|
||||
[Parameter(Mandatory)] [object] $GitHubApi,
|
||||
[Parameter(Mandatory)] [string] $ToolVersions,
|
||||
[Parameter(Mandatory)] [string] $WorkflowFileName,
|
||||
[Parameter(Mandatory)] [string] $WorkflowDispatchRef,
|
||||
[Parameter(Mandatory)] [string] $PublishReleases
|
||||
)
|
||||
|
||||
$inputs = @{
|
||||
PUBLISH_RELEASES = $PublishReleases
|
||||
}
|
||||
|
||||
$ToolVersions.Split(',') | ForEach-Object {
|
||||
$version = $_.Trim()
|
||||
$inputs.VERSION = $version
|
||||
|
||||
Write-Host "Queue build for $version..."
|
||||
$GitHubApi.CreateWorkflowDispatch($WorkflowFileName, $WorkflowDispatchRef, $inputs)
|
||||
|
||||
Start-Sleep -s 10
|
||||
$workflowRunLink = Get-WorkflowRunLink -GitHubApi $GitHubApi `
|
||||
-WorkflowFileName $WorkflowFileName `
|
||||
-ToolVersion $version
|
||||
|
||||
if (-not $workflowRunLink) {
|
||||
Write-Host "Could not find build for $version..."
|
||||
exit 1
|
||||
}
|
||||
|
||||
Write-Host "Link to the build: $workflowRunLink"
|
||||
}
|
||||
}
|
||||
|
||||
$gitHubApi = Get-GitHubApi -RepositoryFullName $RepositoryFullName -AccessToken $AccessToken
|
||||
|
||||
Write-Host "Versions to build: $ToolVersions"
|
||||
Queue-Builds -GitHubApi $gitHubApi `
|
||||
-ToolVersions $ToolVersions `
|
||||
-WorkflowFileName $WorkflowFileName `
|
||||
-WorkflowDispatchRef $WorkflowDispatchRef `
|
||||
-PublishReleases $PublishReleases
|
||||
Reference in New Issue
Block a user