diff --git a/.github/workflows/build-tool-packages.yml b/.github/workflows/build-tool-packages.yml index 4f41466..0266195 100644 --- a/.github/workflows/build-tool-packages.yml +++ b/.github/workflows/build-tool-packages.yml @@ -25,118 +25,117 @@ defaults: run: shell: pwsh -# Fix for windows arm64 7z file issue. More details at https://github.com/nodejs/node/issues/52231 -jobs: - build: - name: Build ${{ inputs.tool-name }} ${{ inputs.tool-version }} [${{ matrix.platform }}] [${{ matrix.architecture }}] - runs-on: ${{ matrix.os }} - env: - ARTIFACT_NAME: ${{ inputs.tool-name }}-${{ inputs.tool-version }}-${{ matrix.platform }}-${{ matrix.architecture }} - strategy: - fail-fast: false - matrix: - include: - - os: ubuntu-latest - platform: linux - architecture: x64 - - os: ubuntu-latest - platform: darwin - architecture: x64 - - os: ubuntu-latest - platform: win32 - architecture: x64 - - os: ubuntu-latest - platform: linux - architecture: arm64 - - os: ubuntu-latest - platform: darwin - architecture: arm64 - - - steps: - - uses: actions/checkout@v4 - with: - submodules: true - - name: Build ${{ inputs.tool-name }} ${{ inputs.tool-version }} - run: | - ./builders/build-${{ inputs.tool-name }}.ps1 -Version ${{ inputs.tool-version }} ` - -Platform ${{ matrix.platform }} ` - -Architecture ${{ matrix.architecture }} - - - name: Publish artifact - uses: actions/upload-artifact@v3 - with: - name: ${{ env.ARTIFACT_NAME }} - path: ${{ runner.temp }}/artifact +jobs: - build-arm: + build: name: Build ${{ inputs.tool-name }} ${{ inputs.tool-version }} [${{ matrix.platform }}] [${{ matrix.architecture }}] - runs-on: windows-latest - if: (inputs.tool-name == 'go') || (inputs.tool-name == 'node' && inputs['tool-version'] > '20.0.0') + runs-on: ubuntu-latest env: ARTIFACT_NAME: ${{ inputs.tool-name }}-${{ inputs.tool-version }}-${{ matrix.platform }}-${{ matrix.architecture }} + excludewinarm: ${{ !(inputs.tool-name == 'node' && inputs['tool-version'] < '20.0.0' && matrix.architecture == 'arm64' && matrix.platform == 'win32') }} strategy: fail-fast: false matrix: - include: - - os: windows-latest - platform: win32 - architecture: arm64 + platform: [linux, darwin, win32] + architecture: [x64, arm64] - steps: - - uses: actions/checkout@v4 + - name: checkout + if: env.excludewinarm == 'true' + uses: actions/checkout@v4 with: submodules: true - name: Build ${{ inputs.tool-name }} ${{ inputs.tool-version }} + if: env.excludewinarm == 'true' run: | ./builders/build-${{ inputs.tool-name }}.ps1 -Version ${{ inputs.tool-version }} ` -Platform ${{ matrix.platform }} ` -Architecture ${{ matrix.architecture }} - - name: Publish artifact - uses: actions/upload-artifact@v3 + if: env.excludewinarm == 'true' + uses: actions/upload-artifact@v4 with: name: ${{ env.ARTIFACT_NAME }} path: ${{ runner.temp }}/artifact test: - name: Test ${{ inputs.tool-name }} ${{ inputs.tool-version }} [${{ matrix.platform }}] + name: Test ${{ inputs.tool-name }} ${{ inputs.tool-version }} [${{ matrix.platform }}] [${{ matrix.architecture }}] needs: build runs-on: ${{ matrix.os }} env: - ARTIFACT_NAME: ${{ inputs.tool-name }}-${{ inputs.tool-version }}-${{ matrix.platform }}-${{ matrix.arch }} + ARTIFACT_NAME: ${{ inputs.tool-name }}-${{ inputs.tool-version }}-${{ matrix.platform }}-${{ matrix.architecture }} + excludewinarm: ${{ !(inputs.tool-name == 'node' && inputs['tool-version'] < '20.0.0' && matrix.architecture == 'arm64' && matrix.platform == 'win32') }} + RUNNER_TYPE: ${{ matrix.runner_type }} strategy: fail-fast: false matrix: include: - os: ubuntu-latest platform: linux - arch: x64 - - os: macos-latest + architecture: x64 + - os: macos-13 platform: darwin - arch: arm64 + architecture: x64 - os: windows-latest platform: win32 - arch: x64 + architecture: x64 + - os: setup-actions-ubuntu-arm64-2-core + platform: linux + architecture: arm64 + runner_type: self-hosted + - os: macos-latest + platform: darwin + architecture: arm64 + - os: setup-actions-windows-arm64-4-core + platform: win32 + architecture: arm64 + runner_type: self-hosted steps: - - uses: actions/checkout@v3 + - name: Setup Environment on Windows ARM64 Runner + if: matrix.os == 'setup-actions-windows-arm64-4-core' + shell: powershell + run: | + # Install Chocolatey + Set-ExecutionPolicy Bypass -Scope Process -Force + [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072 + iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1')) + echo "C:\ProgramData\Chocolatey\bin" | Out-File -Append -FilePath $env:GITHUB_PATH -Encoding utf8 + + # Install PowerShell + choco install powershell-core -y + echo "C:\Program Files\PowerShell\7" | Out-File -Append -FilePath $env:GITHUB_PATH -Encoding utf8 + + # Install Git + choco install git -y + echo "C:\Program Files\Git\cmd" | Out-File -Append -FilePath $env:GITHUB_PATH -Encoding utf8 + + + # Install 7-Zip + choco install 7zip -y + echo "C:\ProgramData\chocolatey\bin" | Out-File -Append -FilePath $env:GITHUB_PATH -Encoding utf8 + - name: checkout + if: env.excludewinarm == 'true' + uses: actions/checkout@v4 with: submodules: true - name: Fully cleanup the toolcache directory before testing + if: env.excludewinarm == 'true' run: ./helpers/clean-toolcache.ps1 -ToolName "${{ inputs.tool-name }}" - name: Download artifact - uses: actions/download-artifact@v3 + if: env.excludewinarm == 'true' + uses: actions/download-artifact@v4 with: - path: ${{ runner.temp }} + name: ${{ env.ARTIFACT_NAME }} + path: ${{ runner.temp }}/${{ env.ARTIFACT_NAME }} - name: Extract files + if: env.excludewinarm == 'true' run: | if ('${{ matrix.platform }}' -eq 'win32') { if ('${{ inputs.tool-name }}' -eq 'node') { @@ -156,23 +155,28 @@ jobs: working-directory: ${{ runner.temp }}/${{ env.ARTIFACT_NAME }} - name: Apply build artifact to the local machine + if: env.excludewinarm == 'true' run: | - if ('${{ matrix.platform }}' -eq 'win32') { powershell ./setup.ps1 } else { sh ./setup.sh } + if ('${{ matrix.platform }}' -eq 'win32') { powershell ./setup.ps1 } + else { + sh ./setup.sh + } working-directory: ${{ runner.temp }}/${{ env.ARTIFACT_NAME }} - name: Setup Node.js ${{ inputs.tool-version }} - if: inputs.tool-name == 'node' - uses: actions/setup-node@v3 + if: env.excludewinarm == 'true' && inputs.tool-name == 'node' + uses: actions/setup-node@v4 with: node-version: ${{ inputs.tool-version }} - name: Setup Go ${{ inputs.tool-version }} if: inputs.tool-name == 'go' - uses: actions/setup-go@v3 + uses: actions/setup-go@v5 with: go-version: ${{ inputs.tool-version }} - name: Wait for the logs + if: env.excludewinarm == 'true' run: | Write-Host "Fake step that does nothing" Write-Host "We need it because log from the previous step 'Setup ${{ inputs.tool-name }}' is not available here yet." @@ -181,10 +185,11 @@ jobs: for ($i = 0; $i -lt 200; $i++) { Get-Random } - name: Run tests + if: env.excludewinarm == 'true' env: VERSION: ${{ inputs.tool-version }} run: | - Install-Module Pester -Force -Scope CurrentUser + Install-Module Pester -Force -Scope CurrentUser -SkipPublisherCheck Import-Module Pester $toolName = (Get-Culture).TextInfo.ToTitleCase("${{ inputs.tool-name }}") Invoke-Pester -Script ./$toolName.Tests.ps1 -EnableExit @@ -196,7 +201,7 @@ jobs: needs: test runs-on: ubuntu-latest steps: - - uses: actions/download-artifact@v3 + - uses: actions/download-artifact@v4 - name: Generate release body id: generate-release-body @@ -232,7 +237,7 @@ jobs: } - name: Upload release assets - uses: actions/github-script@v6 + uses: actions/github-script@v7 with: github-token: ${{ secrets.GITHUB_TOKEN }} script: | @@ -256,7 +261,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Trigger "Create Pull Request" workflow - uses: actions/github-script@v6 + uses: actions/github-script@v7 with: github-token: ${{ secrets.GITHUB_TOKEN }} script: |