From e997e9e9347a9aaa23ed1176c3f5a5e60eb480ad Mon Sep 17 00:00:00 2001 From: MaksimZhukov Date: Tue, 6 Dec 2022 18:59:40 +0100 Subject: [PATCH] Update workflows to use reusable ones --- .github/workflows/build-go-packages.yml | 163 ++---------------------- .github/workflows/create-pr.yml | 33 +---- .github/workflows/get-go-versions.yml | 96 +------------- .github/workflows/validate-manifest.yml | 47 ++----- 4 files changed, 33 insertions(+), 306 deletions(-) diff --git a/.github/workflows/build-go-packages.yml b/.github/workflows/build-go-packages.yml index 778cb66..83054d9 100644 --- a/.github/workflows/build-go-packages.yml +++ b/.github/workflows/build-go-packages.yml @@ -1,15 +1,17 @@ name: Generate Go package +run-name: Generate Go ${{ inputs.VERSION || '1.19.0' }} on: workflow_dispatch: inputs: VERSION: description: 'Go version to build and upload' required: true - default: '1.15.0' + default: '1.19.0' PUBLISH_RELEASES: description: 'Whether to publish releases' + type: boolean required: true - default: 'false' + default: false pull_request: paths-ignore: - 'versions-manifest.json' @@ -18,153 +20,12 @@ on: branches: - 'main' -env: - VERSION: ${{ github.event.inputs.VERSION || '1.15.3' }} -defaults: - run: - shell: pwsh - jobs: - build_go: - name: Build Go ${{ github.event.inputs.VERSION || '1.15.3' }} [${{ matrix.platform }}] - runs-on: ubuntu-latest - env: - ARTIFACT_NAME: go-${{ github.event.inputs.VERSION || '1.15.3' }}-${{ matrix.platform }}-x64 - strategy: - fail-fast: false - matrix: - platform: [linux, darwin, win32] - steps: - - uses: actions/checkout@v2 - with: - submodules: true - - - name: Build Go ${{ env.VERSION }} - run: | - ./builders/build-go.ps1 -Version $env:VERSION ` - -Platform ${{ matrix.platform }} - - - name: Publish artifact - uses: actions/upload-artifact@v2 - with: - name: ${{ env.ARTIFACT_NAME }} - path: ${{ runner.temp }}/artifact - - test_go: - name: Test Go ${{ github.event.inputs.VERSION || '1.15.3' }} [${{ matrix.platform }}] - needs: build_go - runs-on: ${{ matrix.os }} - env: - ARTIFACT_NAME: go-${{ github.event.inputs.VERSION || '1.15.3' }}-${{ matrix.platform }}-x64 - strategy: - fail-fast: false - matrix: - include: - - os: ubuntu-latest - platform: linux - - os: macos-latest - platform: darwin - - os: windows-latest - platform: win32 - steps: - - uses: actions/checkout@v2 - with: - submodules: true - - - name: Fully cleanup the toolcache directory before testing - run: ./helpers/clean-toolcache.ps1 -ToolName "go" - - - name: Download artifact - uses: actions/download-artifact@v2 - with: - path: ${{ runner.temp }} - - - name: Extract files - run: | - if ('${{ matrix.platform }}' -eq 'win32') { - $artifactName = "${{ env.ARTIFACT_NAME }}.zip" - 7z.exe x "$artifactName" -y | Out-Null - } else { - $artifactName = "${{ env.ARTIFACT_NAME }}.tar.gz" - tar -xzf $artifactName - } - working-directory: ${{ runner.temp }}/${{ env.ARTIFACT_NAME }} - - - name: Apply build artifact to the local machine - run: | - if ('${{ matrix.platform }}' -eq 'win32') { powershell ./setup.ps1 } else { sh ./setup.sh } - working-directory: ${{ runner.temp }}/${{ env.ARTIFACT_NAME }} - - - name: Setup Go ${{ env.VERSION }} - uses: actions/setup-go@v2.1.3 - with: - go-version: ${{ env.VERSION }} - - - name: Wait for the logs - run: | - Write-Host "Fake step that do nothing" - Write-Host "We need it because log of previous step 'Setup Go' is not available here yet." - Write-Host "In testing step (Go.Tests.ps1) we analyze build log of 'Setup Go' task" - Write-Host "to determine if Go.js version was consumed from cache and was downloaded" - for ($i = 0; $i -lt 200; $i++) { Get-Random } - - - name: Run tests - run: | - Install-Module Pester -Force -Scope CurrentUser - Import-Module Pester - Invoke-Pester -Script ./Go.Tests.ps1 -EnableExit - working-directory: ./tests - - publish_release: - name: Publish release - if: github.event_name == 'workflow_dispatch' && github.event.inputs.PUBLISH_RELEASES == 'true' - needs: test_go - runs-on: ubuntu-latest - steps: - - uses: actions/download-artifact@v2 - - - name: Publish Release ${{ env.VERSION }} - id: create_release - uses: actions/create-release@v1 - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - with: - tag_name: ${{ env.VERSION }}-${{ github.run_id }} - release_name: ${{ env.VERSION }} - body: | - Go ${{ env.VERSION }} - - - name: Upload release assets - uses: actions/github-script@v2 - with: - github-token: ${{ secrets.GITHUB_TOKEN }} - script: | - const fs = require('fs'); - for (let artifactDir of fs.readdirSync('.')) { - let artifactName = fs.readdirSync(`${artifactDir}`)[0]; - console.log(`Upload ${artifactName} asset`); - github.repos.uploadReleaseAsset({ - owner: context.repo.owner, - repo: context.repo.repo, - release_id: ${{ steps.create_release.outputs.id }}, - name: artifactName, - data: fs.readFileSync(`./${artifactDir}/${artifactName}`) - }); - } - - trigger_pr: - name: Trigger "Create Pull Request" workflow - needs: publish_release - runs-on: ubuntu-latest - steps: - - name: Trigger "Create Pull Request" workflow - uses: actions/github-script@v3 - with: - github-token: ${{ secrets.PERSONAL_TOKEN }} - script: | - github.actions.createWorkflowDispatch({ - owner: context.repo.owner, - repo: context.repo.repo, - workflow_id: 'create-pr.yml', - ref: 'main' - }); + go: + name: Go + uses: actions/versions-package-tools/.github/workflows/build-tool-packages.yml@main + with: + tool-name: "go" + tool-version: ${{ inputs.VERSION || '1.19.0' }} + publish-release: ${{ inputs.PUBLISH_RELEASES || false }} + secrets: inherit \ No newline at end of file diff --git a/.github/workflows/create-pr.yml b/.github/workflows/create-pr.yml index 020e600..bd69cb2 100644 --- a/.github/workflows/create-pr.yml +++ b/.github/workflows/create-pr.yml @@ -2,32 +2,9 @@ name: Create Pull Request on: workflow_dispatch: -defaults: - run: - shell: pwsh - jobs: - create_pr: - name: Create Pull Request - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v2 - with: - submodules: true - - - name: Create versions-manifest.json - run: | - ./helpers/packages-generation/manifest-generator.ps1 -RepositoryFullName "$env:GITHUB_REPOSITORY" ` - -GitHubAccessToken "${{secrets.GITHUB_TOKEN}}" ` - -OutputFile "./versions-manifest.json" ` - -ConfigurationFile "./config/go-manifest-config.json" - - name: Create GitHub PR - run: | - $formattedDate = Get-Date -Format "MM/dd/yyyy" - ./helpers/github/create-pull-request.ps1 ` - -RepositoryFullName "$env:GITHUB_REPOSITORY" ` - -AccessToken "${{secrets.GITHUB_TOKEN}}" ` - -BranchName "update-versions-manifest-file" ` - -CommitMessage "Update versions-manifest" ` - -PullRequestTitle "[versions-manifest] Update for release from ${formattedDate}" ` - -PullRequestBody "Update versions-manifest.json for release from ${formattedDate}" \ No newline at end of file + create-pr: + uses: actions/versions-package-tools/.github/workflows/create-pr-to-update-manifest.yml@main + with: + tool-name: "go" + secrets: inherit \ No newline at end of file diff --git a/.github/workflows/get-go-versions.yml b/.github/workflows/get-go-versions.yml index 2a06926..f404765 100644 --- a/.github/workflows/get-go-versions.yml +++ b/.github/workflows/get-go-versions.yml @@ -4,94 +4,10 @@ on: - cron: '0 3,15 * * *' workflow_dispatch: -env: - TOOL_NAME: "Go" -defaults: - run: - shell: pwsh - jobs: - find_new_versions: - name: Find new versions - runs-on: ubuntu-latest - outputs: - versions_output: ${{ steps.Get_new_versions.outputs.TOOL_VERSIONS }} - steps: - - uses: actions/checkout@v2 - with: - submodules: true - - - id: Get_new_versions - name: Get new versions - run: ./helpers/get-new-tool-versions/get-new-tool-versions.ps1 -ToolName ${{ env.TOOL_NAME }} - - check_new_versions: - name: Check new versions - runs-on: ubuntu-latest - needs: find_new_versions - env: - TOOL_VERSIONS: ${{needs.find_new_versions.outputs.versions_output}} - steps: - - uses: actions/checkout@v2 - with: - submodules: true - - - name: Check Versions - if: env.TOOL_VERSIONS == '' - run: | - Write-Host "No new versions were found" - Import-Module "./helpers/github/github-api.psm1" - $gitHubApi = Get-GitHubApi -RepositoryFullName "$env:GITHUB_REPOSITORY" ` - -AccessToken "${{ secrets.PERSONAL_TOKEN }}" - - $gitHubApi.CancelWorkflow("$env:GITHUB_RUN_ID") - Start-Sleep -Seconds 60 - - - name: Send Slack notification - run: | - $pipelineUrl = "$env:GITHUB_SERVER_URL/$env:GITHUB_REPOSITORY/actions/runs/$env:GITHUB_RUN_ID" - $message = "The following versions of '${{ env.TOOL_NAME }}' are available to upload: ${{ env.TOOL_VERSIONS }}\nLink to the pipeline: $pipelineUrl" - ./helpers/get-new-tool-versions/send-slack-notification.ps1 -Url "${{ secrets.SLACK_CHANNEL_URL }}" ` - -ToolName "${{ env.TOOL_NAME }}" ` - -ImageUrl "https://golang.org/lib/godoc/images/footer-gopher.jpg" ` - -Text "$message" - - trigger_builds: - name: Trigger builds - runs-on: ubuntu-latest - needs: [find_new_versions, check_new_versions] - env: - TOOL_VERSIONS: ${{needs.find_new_versions.outputs.versions_output}} - environment: Get Available Tools Versions - Publishing Approval - steps: - - uses: actions/checkout@v2 - with: - submodules: true - - - name: Trigger "Build go packages" workflow - run: - ./helpers/github/run-ci-builds.ps1 -RepositoryFullName "$env:GITHUB_REPOSITORY" ` - -AccessToken "${{ secrets.PERSONAL_TOKEN }}" ` - -WorkflowFileName "build-go-packages.yml" ` - -WorkflowDispatchRef "main" ` - -ToolVersions "${{ env.TOOL_VERSIONS }}" ` - -PublishReleases "true" - - check_build: - name: Check build for failures - runs-on: ubuntu-latest - needs: [find_new_versions, check_new_versions, trigger_builds] - if: failure() - steps: - - uses: actions/checkout@v2 - with: - submodules: true - - - name: Send Slack notification if build fails - run: | - $pipelineUrl = "$env:GITHUB_SERVER_URL/$env:GITHUB_REPOSITORY/actions/runs/$env:GITHUB_RUN_ID" - $message = "The build of the '${{ env.TOOL_NAME }}' detection pipeline failed :progress-error:\nLink to the pipeline: $pipelineUrl" - ./helpers/get-new-tool-versions/send-slack-notification.ps1 -Url "${{ secrets.SLACK_CHANNEL_URL }}" ` - -ToolName "${{ env.TOOL_NAME }}" ` - -Text "$message" ` - -ImageUrl "https://golang.org/lib/godoc/images/footer-gopher.jpg" + get-new-go-versions: + uses: actions/versions-package-tools/.github/workflows/get-new-tool-versions.yml@main + with: + tool-name: "Go" + image-url: "https://go.dev/images/gopher-footer.jpg" + secrets: inherit \ No newline at end of file diff --git a/.github/workflows/validate-manifest.yml b/.github/workflows/validate-manifest.yml index 6f70a31..1427e88 100644 --- a/.github/workflows/validate-manifest.yml +++ b/.github/workflows/validate-manifest.yml @@ -1,48 +1,21 @@ name: Validate manifest - on: +# The GITHUB_TOKEN secret is used to create a PR +# The pull_request event will not be triggered by it +# That's one of the reasons we need the schedule to validate the versions-manifest.json file schedule: - cron: '0 8,20 * * *' - + workflow_dispatch: pull_request: branches: - main paths: - 'versions-manifest.json' -env: - TOOL_NAME: "Go" - -defaults: - run: - shell: pwsh - jobs: - validation: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v2 - with: - submodules: true - - - name: Validate python-versions manifest - run: .\helpers\packages-generation\manifest-validator.ps1 -ManifestPath '.\versions-manifest.json' - - check_build: - name: Check validation for failures - runs-on: ubuntu-latest - needs: [validation] - if: failure() - steps: - - uses: actions/checkout@v2 - with: - submodules: true - - - name: Send Slack notification if validation fails - run: | - $pipelineUrl = "$env:GITHUB_SERVER_URL/$env:GITHUB_REPOSITORY/actions/runs/$env:GITHUB_RUN_ID" - $message = "The validation of go-versions manifest failed. \nLink to the pipeline: $pipelineUrl" - .\helpers\get-new-tool-versions\send-slack-notification.ps1 -Url "${{ secrets.SLACK_CHANNEL_URL }}" ` - -ToolName "${{ env.TOOL_NAME }}" ` - -Text "$message" ` - -ImageUrl "https://golang.org/lib/godoc/images/footer-gopher.jpg" + manifest: + uses: actions/versions-package-tools/.github/workflows/validate-manifest.yml@main + with: + tool-name: "Go" + image-url: "https://go.dev/images/gopher-footer.jpg" + secrets: inherit \ No newline at end of file