From f13b9dbdd7de74c80907991dea180527bb544644 Mon Sep 17 00:00:00 2001 From: per1234 Date: Thu, 10 Oct 2024 19:06:29 -0700 Subject: [PATCH 1/3] Use more meaningful variable names in release workflows GitHub Actions workflows are used to automatically generate beta tester and production builds of the project. A separate build is generated for each of the target host types. This is done using a job matrix, which creates a parallel run of the workflow job for each target. The matrix defines variables that provide the data that is specific to each job. The variable names used previously did not clearly communicate their nature: - The variable for the task name was named "os" - The variables for the build filename components used the term "artifact", which is ambiguous in this context where the term is otherwise used to refer to the completely unrelated workflow artifacts These variable names made it very difficult for anyone not intimately familiar with the workings of the workflow to understand its code. --- .github/workflows/publish-go-tester-task.yml | 22 ++++++++-------- .../release-go-crosscompile-task.yml | 26 +++++++++---------- 2 files changed, 24 insertions(+), 24 deletions(-) diff --git a/.github/workflows/publish-go-tester-task.yml b/.github/workflows/publish-go-tester-task.yml index daff0a8..3131721 100644 --- a/.github/workflows/publish-go-tester-task.yml +++ b/.github/workflows/publish-go-tester-task.yml @@ -79,7 +79,7 @@ jobs: build: needs: package-name-prefix - name: Build ${{ matrix.os.name }} + name: Build ${{ matrix.os.artifact-name }} runs-on: ubuntu-latest permissions: contents: read @@ -89,31 +89,31 @@ jobs: os: - task: Windows_32bit path: "*Windows_32bit.zip" - name: Windows_X86-32 + artifact-name: Windows_X86-32 - task: Windows_64bit path: "*Windows_64bit.zip" - name: Windows_X86-64 + artifact-name: Windows_X86-64 - task: Linux_32bit path: "*Linux_32bit.tar.gz" - name: Linux_X86-32 + artifact-name: Linux_X86-32 - task: Linux_64bit path: "*Linux_64bit.tar.gz" - name: Linux_X86-64 + artifact-name: Linux_X86-64 - task: Linux_ARMv6 path: "*Linux_ARMv6.tar.gz" - name: Linux_ARMv6 + artifact-name: Linux_ARMv6 - task: Linux_ARMv7 path: "*Linux_ARMv7.tar.gz" - name: Linux_ARMv7 + artifact-name: Linux_ARMv7 - task: Linux_ARM64 path: "*Linux_ARM64.tar.gz" - name: Linux_ARM64 + artifact-name: Linux_ARM64 - task: macOS_64bit path: "*macOS_64bit.tar.gz" - name: macOS_64 + artifact-name: macOS_64 - task: macOS_ARM64 path: "*macOS_ARM64.tar.gz" - name: macOS_ARM64 + artifact-name: macOS_ARM64 steps: - name: Checkout repository @@ -141,7 +141,7 @@ jobs: uses: actions/upload-artifact@v3 with: path: ${{ env.DIST_DIR }}/${{ matrix.os.path }} - name: ${{ matrix.os.name }} + name: ${{ matrix.os.artifact-name }} checksums: needs: diff --git a/.github/workflows/release-go-crosscompile-task.yml b/.github/workflows/release-go-crosscompile-task.yml index c38ac25..d3872fe 100644 --- a/.github/workflows/release-go-crosscompile-task.yml +++ b/.github/workflows/release-go-crosscompile-task.yml @@ -26,7 +26,7 @@ jobs: strategy: matrix: - os: + task: - Windows_32bit - Windows_64bit - Linux_32bit @@ -45,7 +45,7 @@ jobs: - name: Create changelog # Avoid creating the same changelog for each os - if: matrix.os == 'Windows_32bit' + if: matrix.task == 'Windows_32bit' uses: arduino/create-changelog@v1 with: tag-regex: '^[0-9]+\.[0-9]+\.[0-9]+.*$' @@ -65,7 +65,7 @@ jobs: version: 3.x - name: Build - run: task dist:${{ matrix.os }} + run: task dist:${{ matrix.task }} - name: Upload artifacts uses: actions/upload-artifact@v3 @@ -75,7 +75,7 @@ jobs: path: ${{ env.DIST_DIR }} notarize-macos: - name: Notarize ${{ matrix.artifact.name }} + name: Notarize ${{ matrix.build.folder-suffix }} runs-on: macos-latest needs: create-release-artifacts permissions: @@ -86,11 +86,11 @@ jobs: strategy: matrix: - artifact: - - name: darwin_amd64 - path: "macOS_64bit.tar.gz" - - name: darwin_arm64 - path: "macOS_ARM64.tar.gz" + build: + - folder-suffix: darwin_amd64 + package-suffix: "macOS_64bit.tar.gz" + - folder-suffix: darwin_arm64 + package-suffix: "macOS_ARM64.tar.gz" steps: - name: Checkout repository @@ -136,7 +136,7 @@ jobs: run: | cat > "${{ env.GON_CONFIG_PATH }}" <> $GITHUB_ENV From aa6d936cf8b296ded75846d214f2c976531abae6 Mon Sep 17 00:00:00 2001 From: per1234 Date: Thu, 10 Oct 2024 20:12:11 -0700 Subject: [PATCH 2/3] Use environment variable to define build folder name in release workflow Multiple commands in the release workflow include the path of the folder that contains the build output. Previously, the complex folder name was specified redundantly in each instance. The readability and maintainability of the workflow is improved by using an environment variable to define the folder name in a single place, then referencing that environment variable in each of the individual commands that use the path. --- .github/workflows/release-go-crosscompile-task.yml | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/.github/workflows/release-go-crosscompile-task.yml b/.github/workflows/release-go-crosscompile-task.yml index d3872fe..0b93684 100644 --- a/.github/workflows/release-go-crosscompile-task.yml +++ b/.github/workflows/release-go-crosscompile-task.yml @@ -93,6 +93,11 @@ jobs: package-suffix: "macOS_ARM64.tar.gz" steps: + - name: Set environment variables + run: | + # See: https://docs.github.com/actions/writing-workflows/choosing-what-your-workflow-does/workflow-commands-for-github-actions#setting-an-environment-variable + echo "BUILD_FOLDER=${{ env.PROJECT_NAME }}_osx_${{ matrix.build.folder-suffix }}" >> "$GITHUB_ENV" + - name: Checkout repository uses: actions/checkout@v4 @@ -136,7 +141,7 @@ jobs: run: | cat > "${{ env.GON_CONFIG_PATH }}" <> $GITHUB_ENV From ee03454a98621c61e0dba824ab95bb919dc08be4 Mon Sep 17 00:00:00 2001 From: per1234 Date: Thu, 10 Oct 2024 20:16:24 -0700 Subject: [PATCH 3/3] Move definition of package filename to dedicated step in release workflow The package filename is referenced in multiple places in the release workflow. In order to avoid code duplication, it is defined once as an environment variable, then that variable referenced in each of the instances where the filename is needed. Previously, this was done by first defining and referencing a shell environment variable at the point of the first usage, then defining a workflow environment variable and referencing that in the second usage. The maintainability and readability of the workflow is improved by using a single workflow environment variable, defined in the step dedicated to defining such variables, then referencing it consistently in all usages. --- .github/workflows/release-go-crosscompile-task.yml | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/.github/workflows/release-go-crosscompile-task.yml b/.github/workflows/release-go-crosscompile-task.yml index 0b93684..4a94fed 100644 --- a/.github/workflows/release-go-crosscompile-task.yml +++ b/.github/workflows/release-go-crosscompile-task.yml @@ -97,6 +97,8 @@ jobs: run: | # See: https://docs.github.com/actions/writing-workflows/choosing-what-your-workflow-does/workflow-commands-for-github-actions#setting-an-environment-variable echo "BUILD_FOLDER=${{ env.PROJECT_NAME }}_osx_${{ matrix.build.folder-suffix }}" >> "$GITHUB_ENV" + TAG="${GITHUB_REF/refs\/tags\//}" + echo "PACKAGE_FILENAME=${{ env.PROJECT_NAME }}_${TAG}_${{ matrix.build.package-suffix }}" >> $GITHUB_ENV - name: Checkout repository uses: actions/checkout@v4 @@ -171,12 +173,9 @@ jobs: # GitHub's upload/download-artifact actions don't preserve file permissions, # so we need to add execution permission back until the action is made to do this. chmod +x "${{ env.BUILD_FOLDER }}/${{ env.PROJECT_NAME }}" - TAG="${GITHUB_REF/refs\/tags\//}" - PACKAGE_FILENAME="${{ env.PROJECT_NAME }}_${TAG}_${{ matrix.build.package-suffix }}" - tar -czvf "$PACKAGE_FILENAME" \ + tar -czvf "${{ env.PACKAGE_FILENAME }}" \ -C "${{ env.BUILD_FOLDER }}/" "${{ env.PROJECT_NAME }}" \ -C ../../ LICENSE.txt - echo "PACKAGE_FILENAME=$PACKAGE_FILENAME" >> $GITHUB_ENV - name: Upload artifact uses: actions/upload-artifact@v3