Merge pull request #13 from actions/v-nibyko/move-go-ci
Migrate go-versions CI to GitHub Actions
This commit is contained in:
		
						commit
						5b3b061dd1
					
				
							
								
								
									
										163
									
								
								.github/workflows/build-go-packages.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										163
									
								
								.github/workflows/build-go-packages.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @ -0,0 +1,163 @@ | |||||||
|  | name: Generate Go package | ||||||
|  | on: | ||||||
|  |   workflow_dispatch: | ||||||
|  |     inputs: | ||||||
|  |       VERSION: | ||||||
|  |         description: 'Go version to build and upload' | ||||||
|  |         required: true | ||||||
|  |         default: '1.15.0' | ||||||
|  |       PUBLISH_RELEASES: | ||||||
|  |         description: 'Whether to publish releases' | ||||||
|  |         required: true | ||||||
|  |         default: 'false' | ||||||
|  | 
 | ||||||
|  | env: | ||||||
|  |   VERSION: ${{ github.event.inputs.VERSION }} | ||||||
|  | defaults: | ||||||
|  |   run: | ||||||
|  |     shell: pwsh | ||||||
|  | 
 | ||||||
|  | jobs: | ||||||
|  |   build_go: | ||||||
|  |     name: Build Go ${{ github.event.inputs.VERSION }} [${{ matrix.platform }}] | ||||||
|  |     runs-on: ubuntu-latest | ||||||
|  |     env:  | ||||||
|  |       ARTIFACT_NAME: go-${{ github.event.inputs.VERSION }}-${{ 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 }} [${{ matrix.platform }}] | ||||||
|  |     needs: build_go | ||||||
|  |     runs-on: ${{ matrix.os }} | ||||||
|  |     env:  | ||||||
|  |       ARTIFACT_NAME: go-${{ github.event.inputs.VERSION }}-${{ 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.1 | ||||||
|  |       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.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' | ||||||
|  |           }); | ||||||
							
								
								
									
										33
									
								
								.github/workflows/create-pr.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										33
									
								
								.github/workflows/create-pr.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @ -0,0 +1,33 @@ | |||||||
|  | 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}" | ||||||
| @ -29,22 +29,20 @@ Here are a few things you can do that will increase the likelihood of your pull | |||||||
| ### Directory structure | ### Directory structure | ||||||
| ``` | ``` | ||||||
| 
 | 
 | ||||||
| ├── azure-pipelines/ | ├── .github/ | ||||||
| |   └──templates/ | |   └──workflows/ | ||||||
| ├── builders/ | ├── builders/ | ||||||
| ├── helpers/ | ├── helpers/ | ||||||
| ├── installers/ | ├── installers/ | ||||||
| └── tests/ | └── tests/ | ||||||
|     └──sources/ |     └──sources/ | ||||||
| ``` | ``` | ||||||
| - `azure-pipelines*` - contains global YAML definitions for build pipelines. Reusable templates for specific jobs are located in `templates` subfolder. | - `.github/workflows` - contains repository workflow files. | ||||||
| - `builders` - contains Go builder classes and functions. | - `builders` - contains Go builder classes and functions. | ||||||
| - `helpers` - contains global helper functions and functions. | - `helpers` - contains global helper classes and functions. | ||||||
| - `installers` - contains installation script templates. | - `installers` - contains installation script templates. | ||||||
| - `tests` - contains test scripts. Required tests sources are located in `sources` subfolder. | - `tests` - contains test scripts. Required tests sources are located in `sources` subfolder. | ||||||
| 
 | 
 | ||||||
| \* _We use Azure Pipelines because there are a few features that Actions is still missing, we'll move to Actions as soon as possible_. |  | ||||||
| 
 |  | ||||||
| ## Resources | ## Resources | ||||||
| 
 | 
 | ||||||
| - [How to Contribute to Open Source](https://opensource.guide/how-to-contribute/) | - [How to Contribute to Open Source](https://opensource.guide/how-to-contribute/) | ||||||
|  | |||||||
| @ -1,65 +0,0 @@ | |||||||
| name: $(date:yyyyMMdd)$(rev:.r)-Go-$(VERSION) |  | ||||||
| trigger: none |  | ||||||
| pr: |  | ||||||
|   autoCancel: true |  | ||||||
|   branches: |  | ||||||
|     include: |  | ||||||
|     - main |  | ||||||
|   paths: |  | ||||||
|     exclude: |  | ||||||
|     - versions-manifest.json |  | ||||||
| 
 |  | ||||||
| stages: |  | ||||||
| - stage: Build_Go_Darwin |  | ||||||
|   dependsOn: [] |  | ||||||
|   variables: |  | ||||||
|     Platform: darwin |  | ||||||
|     Architecture: x64 |  | ||||||
|   jobs: |  | ||||||
|   - template: /azure-pipelines/templates/build-job.yml |  | ||||||
| 
 |  | ||||||
| - stage: Test_Go_Darwin |  | ||||||
|   condition: succeeded() |  | ||||||
|   dependsOn: Build_Go_Darwin |  | ||||||
|   variables: |  | ||||||
|     VmImage: macOS-latest |  | ||||||
|     Platform: darwin |  | ||||||
|     Architecture: x64 |  | ||||||
|   jobs: |  | ||||||
|   - template: /azure-pipelines/templates/test-job.yml |  | ||||||
| 
 |  | ||||||
| - stage: Build_Go_Linux |  | ||||||
|   dependsOn: [] |  | ||||||
|   variables: |  | ||||||
|     Platform: linux |  | ||||||
|     Architecture: x64 |  | ||||||
|   jobs: |  | ||||||
|   - template: /azure-pipelines/templates/build-job.yml |  | ||||||
| 
 |  | ||||||
| - stage: Test_Go_Linux |  | ||||||
|   condition: succeeded() |  | ||||||
|   dependsOn: Build_Go_Linux |  | ||||||
|   variables: |  | ||||||
|     VmImage: ubuntu-latest |  | ||||||
|     Platform: linux |  | ||||||
|     Architecture: x64 |  | ||||||
|   jobs: |  | ||||||
|   - template: /azure-pipelines/templates/test-job.yml |  | ||||||
| 
 |  | ||||||
| - stage: Build_Go_Windows |  | ||||||
|   dependsOn: [] |  | ||||||
|   variables: |  | ||||||
|     Platform: win32 |  | ||||||
|     Architecture: x64 |  | ||||||
|   jobs: |  | ||||||
|   - template: /azure-pipelines/templates/build-job.yml |  | ||||||
| 
 |  | ||||||
| - stage: Test_Go_Windows |  | ||||||
|   condition: succeeded() |  | ||||||
|   dependsOn: Build_Go_Windows |  | ||||||
|   variables: |  | ||||||
|     VmImage: windows-latest |  | ||||||
|     Platform: win32 |  | ||||||
|     Architecture: x64 |  | ||||||
|   jobs: |  | ||||||
|   - template: /azure-pipelines/templates/test-job.yml |  | ||||||
| @ -1,21 +0,0 @@ | |||||||
| jobs: |  | ||||||
| - job: Build_Go |  | ||||||
|   timeoutInMinutes: 90 |  | ||||||
|   pool: |  | ||||||
|     name: Azure Pipelines |  | ||||||
|     vmImage: ubuntu-latest |  | ||||||
|   steps: |  | ||||||
|   - checkout: self |  | ||||||
|      |  | ||||||
|   - task: PowerShell@2 |  | ||||||
|     displayName: 'Build Go $(Version)' |  | ||||||
|     inputs: |  | ||||||
|       targetType: filePath |  | ||||||
|       filePath: './builders/build-go.ps1' |  | ||||||
|       arguments: '-Version $(Version) -Platform $(Platform) -Architecture $(Architecture)' |  | ||||||
| 
 |  | ||||||
|   - task: PublishPipelineArtifact@1 |  | ||||||
|     displayName: 'Publish Artifact: Go $(Version)' |  | ||||||
|     inputs: |  | ||||||
|       targetPath: '$(Build.ArtifactStagingDirectory)'  |  | ||||||
|       artifactName: 'go-$(Version)-$(Platform)-$(Architecture)' |  | ||||||
| @ -1,75 +0,0 @@ | |||||||
| jobs: |  | ||||||
| - job: Test_Go |  | ||||||
|   pool:  |  | ||||||
|     name: Azure Pipelines |  | ||||||
|     vmImage: $(VmImage) |  | ||||||
|   steps: |  | ||||||
|   - checkout: self |  | ||||||
|     submodules: true |  | ||||||
| 
 |  | ||||||
|   - task: PowerShell@2 |  | ||||||
|     displayName: Fully cleanup the toolcache directory before testing |  | ||||||
|     inputs: |  | ||||||
|       targetType: filePath |  | ||||||
|       filePath: helpers/clean-toolcache.ps1 |  | ||||||
|       arguments: -ToolName "go" |  | ||||||
| 
 |  | ||||||
|   - task: DownloadPipelineArtifact@2 |  | ||||||
|     inputs: |  | ||||||
|       source: 'current' |  | ||||||
|       artifact: 'go-$(Version)-$(Platform)-$(Architecture)' |  | ||||||
|       path: $(Build.ArtifactStagingDirectory) |  | ||||||
| 
 |  | ||||||
|   - task: ExtractFiles@1 |  | ||||||
|     inputs: |  | ||||||
|       archiveFilePatterns: '$(Build.ArtifactStagingDirectory)/go-$(Version)-$(Platform)-$(Architecture).*' |  | ||||||
|       destinationFolder: $(Build.BinariesDirectory) |  | ||||||
|       cleanDestinationFolder: false |  | ||||||
| 
 |  | ||||||
|   - task: PowerShell@2 |  | ||||||
|     displayName: 'Apply build artifact to the local machines' |  | ||||||
|     inputs: |  | ||||||
|       targetType: inline |  | ||||||
|       script: | |  | ||||||
|         if ("$(Platform)" -match 'win32') { powershell ./setup.ps1 } else { sh ./setup.sh } |  | ||||||
|       workingDirectory: '$(Build.BinariesDirectory)' |  | ||||||
| 
 |  | ||||||
|   - task: GoTool@0 |  | ||||||
|     inputs: |  | ||||||
|       version: '$(Version)' |  | ||||||
| 
 |  | ||||||
|   - task: PowerShell@2 |  | ||||||
|     displayName: 'Wait for the logs' |  | ||||||
|     inputs: |  | ||||||
|       targetType: inline |  | ||||||
|       script: | |  | ||||||
|          Write-Host "Fake step that do nothing" |  | ||||||
|          Write-Host "We need it because log of previous step 'Use Go' is not available here yet." |  | ||||||
|          Write-Host "In testing step (Go.Tests.ps1) we analyze build log of 'GoTool' task" |  | ||||||
|          Write-Host "to determine if Go version was consumed from cache and was downloaded" |  | ||||||
| 
 |  | ||||||
|   - task: PowerShell@2 |  | ||||||
|     displayName: 'Run tests' |  | ||||||
|     inputs: |  | ||||||
|       TargetType: inline |  | ||||||
|       script: | |  | ||||||
|         Install-Module Pester -Force -Scope CurrentUser -RequiredVersion 4.10.1 |  | ||||||
|         Import-Module Pester |  | ||||||
|         $pesterParams = @{ |  | ||||||
|           Path="./Go.Tests.ps1"; |  | ||||||
|           Parameters=@{ |  | ||||||
|             Version="$(Version)"; |  | ||||||
|           } |  | ||||||
|         } |  | ||||||
|         Invoke-Pester -Script $pesterParams -OutputFile "$(Build.SourcesDirectory)/tests/test_results.xml" -OutputFormat NUnitXml |  | ||||||
|       workingDirectory: '$(Build.SourcesDirectory)/tests' |  | ||||||
| 
 |  | ||||||
|   - task: PublishTestResults@2 |  | ||||||
|     displayName: 'Publish test results' |  | ||||||
|     inputs: |  | ||||||
|       testResultsFiles: '*.xml' |  | ||||||
|       testResultsFormat: NUnit |  | ||||||
|       searchFolder: 'tests' |  | ||||||
|       failTaskOnFailedTests: true |  | ||||||
|       testRunTitle: "Go $(Version)-$(Platform)" |  | ||||||
|     condition: always() |  | ||||||
| @ -16,10 +16,13 @@ class GoBuilder { | |||||||
|     The architecture with which Go should be built. |     The architecture with which Go should be built. | ||||||
| 
 | 
 | ||||||
|     .PARAMETER TempFolderLocation |     .PARAMETER TempFolderLocation | ||||||
|     The location of temporary files that will be used during Go package generation. Using system BUILD_STAGINGDIRECTORY variable value. |     The location of temporary files that will be used during Go package generation. | ||||||
| 
 | 
 | ||||||
|     .PARAMETER ArtifactLocation |     .PARAMETER WorkFolderLocation | ||||||
|     The location of generated Go artifact. Using system environment BUILD_BINARIESDIRECTORY variable value. |     The location of installation files. | ||||||
|  | 
 | ||||||
|  |     .PARAMETER ArtifactFolderLocation | ||||||
|  |     The location of generated Go artifact. | ||||||
| 
 | 
 | ||||||
|     .PARAMETER InstallationTemplatesLocation |     .PARAMETER InstallationTemplatesLocation | ||||||
|     The location of installation script template. Using "installers" folder from current repository. |     The location of installation script template. Using "installers" folder from current repository. | ||||||
| @ -40,9 +43,8 @@ class GoBuilder { | |||||||
|         $this.Architecture = $architecture |         $this.Architecture = $architecture | ||||||
| 
 | 
 | ||||||
|         $this.TempFolderLocation = [IO.Path]::GetTempPath() |         $this.TempFolderLocation = [IO.Path]::GetTempPath() | ||||||
|         $this.WorkFolderLocation = $env:BUILD_BINARIESDIRECTORY |         $this.WorkFolderLocation = Join-Path $env:RUNNER_TEMP "binaries" | ||||||
|         $this.ArtifactFolderLocation = $env:BUILD_STAGINGDIRECTORY |         $this.ArtifactFolderLocation = Join-Path $env:RUNNER_TEMP "artifact" | ||||||
|          |  | ||||||
| 
 | 
 | ||||||
|         $this.InstallationTemplatesLocation = Join-Path -Path $PSScriptRoot -ChildPath "../installers" |         $this.InstallationTemplatesLocation = Join-Path -Path $PSScriptRoot -ChildPath "../installers" | ||||||
|     } |     } | ||||||
| @ -95,6 +97,10 @@ class GoBuilder { | |||||||
|         Generates Go artifact from downloaded binaries. |         Generates Go artifact from downloaded binaries. | ||||||
|         #> |         #> | ||||||
| 
 | 
 | ||||||
|  |         Write-Host "Create WorkFolderLocation and ArtifactFolderLocation folders" | ||||||
|  |         New-Item -Path $this.WorkFolderLocation -ItemType "directory" | ||||||
|  |         New-Item -Path $this.ArtifactFolderLocation -ItemType "directory" | ||||||
|  | 
 | ||||||
|         Write-Host "Download Go $($this.Version) [$($this.Architecture)] executable..." |         Write-Host "Download Go $($this.Version) [$($this.Architecture)] executable..." | ||||||
|         $binariesArchivePath = $this.Download() |         $binariesArchivePath = $this.Download() | ||||||
| 
 | 
 | ||||||
|  | |||||||
							
								
								
									
										2
									
								
								helpers
									
									
									
									
									
								
							
							
								
								
								
								
								
								
									
									
								
							
						
						
									
										2
									
								
								helpers
									
									
									
									
									
								
							| @ -1 +1 @@ | |||||||
| Subproject commit 68072bedefb41436c6b70ddfa9adb8e631a3b6cf | Subproject commit 3b38e3de4c5e4bc75f5dee12b5bb8dbffe35c562 | ||||||
| @ -1,20 +1,22 @@ | |||||||
| param ( |  | ||||||
|     [version] [Parameter (Mandatory = $true)] [ValidateNotNullOrEmpty()] |  | ||||||
|     $Version |  | ||||||
| ) |  | ||||||
| 
 |  | ||||||
| Import-Module (Join-Path $PSScriptRoot "../helpers/pester-extensions.psm1") | Import-Module (Join-Path $PSScriptRoot "../helpers/pester-extensions.psm1") | ||||||
| Import-Module (Join-Path $PSScriptRoot "../helpers/common-helpers.psm1") | Import-Module (Join-Path $PSScriptRoot "../helpers/common-helpers.psm1") | ||||||
| 
 | 
 | ||||||
|  | BeforeAll { | ||||||
|  |     Set-Location -Path "source" | ||||||
|  |     $sourceLocation = Get-Location | ||||||
|  | 
 | ||||||
|     function Get-UseGoLogs { |     function Get-UseGoLogs { | ||||||
|     $logsFolderPath = Join-Path -Path $env:AGENT_HOMEDIRECTORY -ChildPath "_diag" | Join-Path -ChildPath "pages" |         # GitHub Windows images don't have `HOME` variable | ||||||
|  |         $homeDir = $env:HOME ?? $env:HOMEDRIVE | ||||||
|  |         $logsFolderPath = Join-Path -Path $homeDir -ChildPath "runners/*/_diag/pages" -Resolve | ||||||
| 
 | 
 | ||||||
|         $useGoLogFile = Get-ChildItem -Path $logsFolderPath | Where-Object { |         $useGoLogFile = Get-ChildItem -Path $logsFolderPath | Where-Object { | ||||||
|             $logContent = Get-Content $_.Fullname -Raw |             $logContent = Get-Content $_.Fullname -Raw | ||||||
|         return $logContent -match "GoTool" |             return $logContent -match "setup-go@v" | ||||||
|         } | Select-Object -First 1 |         } | Select-Object -First 1 | ||||||
|         return $useGoLogFile.Fullname |         return $useGoLogFile.Fullname | ||||||
|     } |     } | ||||||
|  | } | ||||||
| 
 | 
 | ||||||
| Describe "Go" { | Describe "Go" { | ||||||
|     It "is available" { |     It "is available" { | ||||||
| @ -22,6 +24,7 @@ Describe "Go" { | |||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     It "version is correct" { |     It "version is correct" { | ||||||
|  |         [version]$Version = $env:VERSION | ||||||
|         $versionOutput = Invoke-Expression -Command "go version" |         $versionOutput = Invoke-Expression -Command "go version" | ||||||
|         $finalVersion = $Version.ToString(3) |         $finalVersion = $Version.ToString(3) | ||||||
|         If ($Version.Build -eq "0"){ |         If ($Version.Build -eq "0"){ | ||||||
| @ -33,7 +36,10 @@ Describe "Go" { | |||||||
|     It "is used from tool-cache" { |     It "is used from tool-cache" { | ||||||
|         $goPath = (Get-Command "go").Path |         $goPath = (Get-Command "go").Path | ||||||
|         $goPath | Should -Not -BeNullOrEmpty |         $goPath | Should -Not -BeNullOrEmpty | ||||||
|         $expectedPath = Join-Path -Path $env:AGENT_TOOLSDIRECTORY -ChildPath "go" |          | ||||||
|  |         # GitHub Windows images don't have `AGENT_TOOLSDIRECTORY` variable | ||||||
|  |         $toolcacheDir = $env:AGENT_TOOLSDIRECTORY ?? $env:RUNNER_TOOL_CACHE | ||||||
|  |         $expectedPath = Join-Path -Path $toolcacheDir -ChildPath "go" | ||||||
|         $goPath.startsWith($expectedPath) | Should -BeTrue -Because "'$goPath' is not started with '$expectedPath'" |         $goPath.startsWith($expectedPath) | Should -BeTrue -Because "'$goPath' is not started with '$expectedPath'" | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
| @ -42,11 +48,9 @@ Describe "Go" { | |||||||
|         $useGoLogFile = Get-UseGoLogs |         $useGoLogFile = Get-UseGoLogs | ||||||
|         $useGoLogFile | Should -Exist |         $useGoLogFile | Should -Exist | ||||||
|         $useGoLogContent = Get-Content $useGoLogFile -Raw |         $useGoLogContent = Get-Content $useGoLogFile -Raw | ||||||
|         $useGoLogContent | Should -Match "Found tool in cache" |         $useGoLogContent | Should -Match "Found in cache" | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     Set-Location -Path "source" |  | ||||||
|     $sourceLocation = Get-Location |  | ||||||
| 
 | 
 | ||||||
|     It "Run simple code" { |     It "Run simple code" { | ||||||
|         $simpleLocation = Join-Path -Path $sourceLocation -ChildPath "simple" |         $simpleLocation = Join-Path -Path $sourceLocation -ChildPath "simple" | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 MaksimZhukov
						MaksimZhukov