2727 type : boolean
2828 required : true
2929 description : Enable or disable running pip_audit to check installed packages for vulnerabilities
30- outputs :
31- artifacts-sha256 :
32- value : ${{ jobs.build.outputs.artifacts-sha256 }}
33- description : The hash of the artifacts
3430permissions :
3531 contents : read
3632env :
37- ARTIFACT_OS : ubuntu-latest # The default OS for release.
38- ARTIFACT_PYTHON : ' 3.13' # The default Python version for release.
33+ RELEASE_OS_X86_64 : ubuntu-24.04 # Default OS for x86_64-compatible release artifacts.
34+ RELEASE_OS_ARM64 : ubuntu-24.04-arm # Default OS for ARM64-compatible release artifacts.
35+ RELEASE_PYTHON_VERSION : ' 3.13' # Default Python version used for release artifacts.
3936
4037jobs :
4138 build :
4239 # Uncomment the following to disable checks and tests for Draft pull requests.
4340 # if: github.event.pull_request.draft == false
44- outputs :
45- artifacts-sha256 : ${{ steps.compute-hash.outputs.artifacts-sha256 }}
4641 name : Build Python ${{ matrix.python }} on ${{ matrix.os }}
4742 runs-on : ${{ matrix.os }}
4843 strategy :
4944 fail-fast : false
5045 matrix :
5146 # It is recommended to pin a Runner version specifically:
5247 # https://docs.github.com/en/actions/using-github-hosted-runners/about-github-hosted-runners
53- # os: [ubuntu-24.04, ubuntu-24.04-arm, macos-latest, windows-latest]
54- os : [ubuntu-24.04, ubuntu-24.04-arm]
48+ os : [ubuntu-24.04, ubuntu-24.04-arm, macos-latest, windows-latest]
5549 python : ['3.10', '3.11', '3.12', '3.13']
5650
51+ outputs :
52+ arch-env : ${{ steps.set-arch-env.outputs.arch_env }}
53+
5754 steps :
5855
56+ # Create a GitHub Actions environment variable that maps a matrix.os value to a more descriptive environment
57+ # value (e.g., ubuntu-x86-64 or ubuntu-arm64).
58+ - name : Determine architecture label
59+ id : set-arch-env
60+ run : |
61+ if [[ "${{ matrix.os }}" == "ubuntu-24.04" ]]; then
62+ echo "arch_env=ubuntu-x86-64" >> "$GITHUB_OUTPUT"
63+ elif [[ "${{ matrix.os }}" == "ubuntu-24.04-arm" ]]; then
64+ echo "arch_env=ubuntu-arm64" >> "$GITHUB_OUTPUT"
65+ else
66+ echo "arch_env=unknown" >> "$GITHUB_OUTPUT"
67+ fi
68+
69+ - name : Test the env variable
70+ run : echo "Architecture-specific value ${{ steps.set-arch-env.outputs.arch_env }}"
71+
5972 - name : Harden Runner
6073 uses : step-security/harden-runner@c6295a65d1254861815972266d5933fd6e532bdf # v2.11.1
6174 with :
@@ -99,24 +112,33 @@ jobs:
99112 HYPOTHESIS_PROFILE : github
100113
101114 # Generate the requirements.txt that contains the hash digests of the dependencies and
102- # generate the SBOM using CyclonDX SBOM generator.
115+ # generate the SBOM using CyclonDX SBOM generator for the release Python version and
116+ # supported release OS targets.
103117 - name : Generate requirements.txt and SBOM
104- if : matrix.python == env.ARTIFACT_PYTHON
118+ if : >
119+ matrix.python == env.RELEASE_PYTHON_VERSION &&
120+ (matrix.os == env.RELEASE_OS_X86_64 || matrix.os == env.RELEASE_OS_ARM64)
105121 run : make requirements sbom
106122
107123 # Remove the old requirements.txt file (which includes _all_ packages) and generate a
108- # new one for the package and its actual and required dependencies only.
124+ # new one for the package and its actual and required dependencies only. Run this step
125+ # for the release Python version and supported release OS targets only.
109126 - name : Prune packages and generate required requirements.txt
110- if : matrix.python == env.ARTIFACT_PYTHON
127+ if : >
128+ matrix.python == env.RELEASE_PYTHON_VERSION &&
129+ (matrix.os == env.RELEASE_OS_X86_64 || matrix.os == env.RELEASE_OS_ARM64)
111130 run : |
112131 rm requirements.txt
113132 make prune requirements
114133
115134 # Find the paths to the artifact files that will be included in the release, compute
116135 # the SHA digest for all the release files and encode them using Base64, and export it
117- # from this job.
136+ # from this job. Run this step for the release Python version and supported release
137+ # OS targets only.
118138 - name : Compute package hash
119- if : matrix.python == env.ARTIFACT_PYTHON
139+ if : >
140+ matrix.python == env.RELEASE_PYTHON_VERSION &&
141+ (matrix.os == env.RELEASE_OS_X86_64 || matrix.os == env.RELEASE_OS_ARM64)
120142 id : compute-hash
121143 shell : bash
122144 run : |
@@ -131,15 +153,28 @@ jobs:
131153 sha256sum --version
132154 DIGEST=$(sha256sum "$TARBALL_PATH" "$WHEEL_PATH" "$REQUIREMENTS_PATH" "$SBOM_PATH" "$HTML_DOCS_PATH" "$MARKDOWN_DOCS_PATH" "$BUILD_EPOCH_PATH" | base64 -w0)
133155 echo "Digest of artifacts is $DIGEST."
134- echo "artifacts-sha256= $DIGEST" >> "$GITHUB_OUTPUT"
156+ echo "$DIGEST" > artifacts-sha256-file-${{ steps.set-arch-env.outputs.arch_env }}
135157
136- # For now only generate artifacts for the specified OS and Python version in env variables.
137158 # Currently reusable workflows do not support setting strategy property from the caller workflow.
159+ # Run this step for the release Python version and supported release OS targets only.
138160 - name : Upload the package artifact for debugging and release
139- if : matrix.python == env.ARTIFACT_PYTHON
161+ if : >
162+ matrix.python == env.RELEASE_PYTHON_VERSION &&
163+ (matrix.os == env.RELEASE_OS_X86_64 || matrix.os == env.RELEASE_OS_ARM64)
140164 uses : actions/upload-artifact@6f51ac03b9356f520e9adb1b1b7802705f340c2b # v4.5.0
141165 with :
142- name : artifact -${{ matrix.os }}-python-${{ matrix.python }}
143- path : dist
166+ name : artifacts -${{ steps.set-arch-env.outputs.arch_env }}
167+ path : ./ dist*/
144168 if-no-files-found : error
145169 retention-days : 7
170+
171+ # Run this step for the release Python version and supported release OS targets only.
172+ - name : Upload artifacts-sha256
173+ if : >
174+ matrix.python == env.RELEASE_PYTHON_VERSION &&
175+ (matrix.os == env.RELEASE_OS_X86_64 || matrix.os == env.RELEASE_OS_ARM64)
176+ uses : actions/upload-artifact@6f51ac03b9356f520e9adb1b1b7802705f340c2b # v4.5.0
177+ with :
178+ name : artifacts-sha256-file-${{ steps.set-arch-env.outputs.arch_env }}
179+ path : artifacts-sha256-file-${{ steps.set-arch-env.outputs.arch_env }}
180+ retention-days : 7
0 commit comments