From 56dd4b5ae508893b257f427aa55c10a97f15b976 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Janiszewski?= Date: Tue, 17 Sep 2024 14:45:38 +0200 Subject: [PATCH] Rework how version is obtained In previous approach version would be set in each job individually, potentially leading to divergence. The new approach sets the version in first step as job output, which is then consumed by all the other jobs in the workflow. --- .github/workflows/ci.yml | 78 ++++++++++++++++++++-------------------- 1 file changed, 39 insertions(+), 39 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 34367e5f..af985792 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -3,20 +3,32 @@ on: [push, pull_request] env: VCPKG_COMMIT_HASH: 68d349964cb4e8da561fd849d9491e6ba11c5681 jobs: - createrelease: - name: createrelease + get_version: + name: Get version runs-on: ubuntu-latest - if: startsWith(github.ref, 'refs/tags/v') + outputs: + version: ${{ steps.get_version.outputs.version }} steps: - name: Check out code uses: actions/checkout@v4 - name: Get the version id: get_version - run: echo "version=${GITHUB_REF/refs\/tags\/v/}" >> $GITHUB_ENV + run: | + # check if git ref matches a tag + if [[ "$GITHUB_REF" =~ "refs/tags/v" ]]; then + TAG=${GITHUB_REF/refs\/tags\/v/} + echo setting output to tag $TAG + echo "version=$TAG" >> "$GITHUB_OUTPUT" + else + # set version to sha1 of the commit + echo setting output to $GITHUB_SHA + echo "version=$GITHUB_SHA" >> $GITHUB_OUTPUT + fi + echo Output: \"$GITHUB_OUTPUT\" windows: name: Windows runs-on: windows-latest - needs: createrelease + needs: get_version if: always() strategy: fail-fast: false @@ -28,11 +40,6 @@ jobs: steps: - name: Checkout uses: actions/checkout@v4 - - name: Get the version - if: startsWith(github.ref, 'refs/tags/v') - run: | - chcp 65001 #set code page to utf-8 - echo ("version=" + $env:GITHUB_REF.replace('refs/tags/v', '')) >> $env:GITHUB_ENV - uses: lukka/get-cmake@latest - name: Install vcpkg and packages uses: lukka/run-vcpkg@v11 @@ -46,27 +53,27 @@ jobs: - name: Zip stuff run: | pushd ${{ github.workspace }}/vcpkg/installed/${{ matrix.triplet }}/${{ matrix.triplet }} - 7z a -tzip -mx9 -mtc=off ../../openrct2-libs-v${{ env.version }}-${{ matrix.triplet }}.zip "*" + 7z a -tzip -mx9 -mtc=off ../../openrct2-libs-v${{ needs.get_version.outputs.version }}-${{ matrix.triplet }}.zip "*" popd - name: Export checksum info for release notes run: | pushd ${{ github.workspace }}/vcpkg - sha1sum installed/openrct2-libs-v${{ env.version }}-${{ matrix.triplet }}.zip > ../openrct2-libs-v${{ env.version }}-${{ matrix.triplet }}.zip.sha1 + sha1sum installed/openrct2-libs-v${{ needs.get_version.outputs.version }}-${{ matrix.triplet }}.zip > ../openrct2-libs-v${{ needs.get_version.outputs.version }}-${{ matrix.triplet }}.zip.sha1 popd - name: Upload zipped libraries as artifact uses: actions/upload-artifact@v4 with: - name: openrct2-libs-v${{ env.version }}-${{ matrix.triplet }}.zip - path: ${{ github.workspace }}/vcpkg/installed/openrct2-libs-v${{ env.version }}-${{ matrix.triplet }}.zip + name: openrct2-libs-v${{ needs.get_version.outputs.version }}-${{ matrix.triplet }}.zip + path: ${{ github.workspace }}/vcpkg/installed/openrct2-libs-v${{ needs.get_version.outputs.version }}-${{ matrix.triplet }}.zip - name: Upload sha1 as artifact uses: actions/upload-artifact@v4 with: - name: openrct2-libs-v${{ env.version }}-${{ matrix.triplet }}.zip.sha1 - path: ${{ github.workspace }}/openrct2-libs-v${{ env.version }}-${{ matrix.triplet }}.zip.sha1 + name: openrct2-libs-v${{ needs.get_version.outputs.version }}-${{ matrix.triplet }}.zip.sha1 + path: ${{ github.workspace }}/openrct2-libs-v${{ needs.get_version.outputs.version }}-${{ matrix.triplet }}.zip.sha1 macos-build: name: macOS runs-on: macos-14 - needs: createrelease + needs: get_version if: always() strategy: fail-fast: false @@ -78,9 +85,6 @@ jobs: # needed for vcpkg.json - name: Checkout uses: actions/checkout@v4 - - name: Get the version - if: startsWith(github.ref, 'refs/tags/v') - run: echo "version=${GITHUB_REF/refs\/tags\/v/}" >> $GITHUB_ENV - name: Install prerequisites shell: bash run: | @@ -100,47 +104,43 @@ jobs: - name: Zip stuff run: | pushd ${{ github.workspace }}/vcpkg/installed/${{ matrix.triplet }} - zip -rXy ../openrct2-libs-v${{ env.version }}-${{ matrix.triplet }}-macos-dylibs.zip * -x '*/.*' + zip -rXy ../openrct2-libs-v${{ needs.get_version.outputs.version }}-${{ matrix.triplet }}-macos-dylibs.zip * -x '*/.*' - name: Upload zip as artifact uses: actions/upload-artifact@v4 with: - name: openrct2-libs-v${{ env.version }}-${{ matrix.triplet }}-macos-dylibs.zip - path: ${{ github.workspace }}/vcpkg/installed/openrct2-libs-v${{ env.version }}-${{ matrix.triplet }}-macos-dylibs.zip + name: openrct2-libs-v${{ needs.get_version.outputs.version }}-${{ matrix.triplet }}-macos-dylibs.zip + path: ${{ github.workspace }}/vcpkg/installed/openrct2-libs-v${{ needs.get_version.outputs.version }}-${{ matrix.triplet }}-macos-dylibs.zip macos-package: name: macOS package universal library runs-on: macos-14 - needs: macos-build + needs: [macos-build, get_version] if: always() steps: - name: Checkout uses: actions/checkout@v4 - - name: Get the version - if: startsWith(github.ref, 'refs/tags/v') - run: echo "version=${GITHUB_REF/refs\/tags\/v/}" >> $GITHUB_ENV - name: Download All Artifacts uses: actions/download-artifact@v4 with: pattern: openrct2-libs-v*-macos-dylibs.zip - name: Create Universal Library + env: + version: ${{ needs.get_version.outputs.version }} run: | - unzip -qo openrct2-libs-v${{ env.version }}-arm64-osx-openrct2-macos-dylibs.zip/openrct2-libs-v${{ env.version }}-arm64-osx-openrct2-macos-dylibs.zip - unzip -qo openrct2-libs-v${{ env.version }}-x64-osx-openrct2-macos-dylibs.zip/openrct2-libs-v${{ env.version }}-x64-osx-openrct2-macos-dylibs.zip + unzip -qo openrct2-libs-v${{ needs.get_version.outputs.version }}-arm64-osx-openrct2-macos-dylibs.zip/openrct2-libs-v${{ needs.get_version.outputs.version }}-arm64-osx-openrct2-macos-dylibs.zip + unzip -qo openrct2-libs-v${{ needs.get_version.outputs.version }}-x64-osx-openrct2-macos-dylibs.zip/openrct2-libs-v${{ needs.get_version.outputs.version }}-x64-osx-openrct2-macos-dylibs.zip ./macos_build.sh - name: Upload zip as artifact uses: actions/upload-artifact@v4 with: - name: openrct2-libs-v${{ env.version }}-universal-macos-dylibs.zip - path: openrct2-libs-v${{ env.version }}-universal-macos-dylibs.zip + name: openrct2-libs-v${{ needs.get_version.outputs.version }}-universal-macos-dylibs.zip + path: openrct2-libs-v${{ needs.get_version.outputs.version }}-universal-macos-dylibs.zip release: name: Release runs-on: ubuntu-latest - needs: [windows, macos-package] + needs: [windows, macos-package, get_version] if: startsWith(github.ref, 'refs/tags/v') steps: - - name: Get the version - if: startsWith(github.ref, 'refs/tags/v') - run: echo "version=${GITHUB_REF/refs\/tags\/v/}" >> $GITHUB_ENV - name: Download artifacts uses: actions/download-artifact@v4 with: @@ -149,11 +149,11 @@ jobs: run: | ls -lR pushd ${{ github.workspace }} - sha1sum openrct2-libs-v${{ env.version }}-*.zip > openrct2-libs-v${{ env.version }}-sha1sums.txt + sha1sum openrct2-libs-v${{ needs.get_version.outputs.version }}-*.zip > openrct2-libs-v${{ needs.get_version.outputs.version }}-sha1sums.txt popd - name: Create release notes run: | - echo "Release notes for version ${{ env.version }}" > release_notes.txt + echo "Release notes for version ${{ needs.get_version.outputs.version }}" > release_notes.txt echo "" >> release_notes.txt echo "SHA1 checksums:" >> release_notes.txt echo "\`\`\`" >> release_notes.txt @@ -164,6 +164,6 @@ jobs: uses: softprops/action-gh-release@v2 with: files: | - openrct2-libs-v${{ env.version }}-sha1sums.txt - openrct2-libs-v${{ env.version }}-*.zip + openrct2-libs-v${{ needs.get_version.outputs.version }}-sha1sums.txt + openrct2-libs-v${{ needs.get_version.outputs.version }}-*.zip body_path: release_notes.txt