27
27
type : boolean
28
28
required : true
29
29
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
34
30
permissions :
35
31
contents : read
36
32
env :
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.
39
36
40
37
jobs :
41
38
build :
42
39
# Uncomment the following to disable checks and tests for Draft pull requests.
43
40
# if: github.event.pull_request.draft == false
44
- outputs :
45
- artifacts-sha256 : ${{ steps.compute-hash.outputs.artifacts-sha256 }}
46
41
name : Build Python ${{ matrix.python }} on ${{ matrix.os }}
47
42
runs-on : ${{ matrix.os }}
48
43
strategy :
49
44
fail-fast : false
50
45
matrix :
51
46
# It is recommended to pin a Runner version specifically:
52
47
# 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]
55
49
python : ['3.10', '3.11', '3.12', '3.13']
56
50
51
+ outputs :
52
+ arch-env : ${{ steps.set-arch-env.outputs.arch_env }}
53
+
57
54
steps :
58
55
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
+
59
72
- name : Harden Runner
60
73
uses : step-security/harden-runner@c6295a65d1254861815972266d5933fd6e532bdf # v2.11.1
61
74
with :
@@ -99,24 +112,33 @@ jobs:
99
112
HYPOTHESIS_PROFILE : github
100
113
101
114
# 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.
103
117
- 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)
105
121
run : make requirements sbom
106
122
107
123
# 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.
109
126
- 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)
111
130
run : |
112
131
rm requirements.txt
113
132
make prune requirements
114
133
115
134
# Find the paths to the artifact files that will be included in the release, compute
116
135
# 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.
118
138
- 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)
120
142
id : compute-hash
121
143
shell : bash
122
144
run : |
@@ -131,15 +153,28 @@ jobs:
131
153
sha256sum --version
132
154
DIGEST=$(sha256sum "$TARBALL_PATH" "$WHEEL_PATH" "$REQUIREMENTS_PATH" "$SBOM_PATH" "$HTML_DOCS_PATH" "$MARKDOWN_DOCS_PATH" "$BUILD_EPOCH_PATH" | base64 -w0)
133
155
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 }}
135
157
136
- # For now only generate artifacts for the specified OS and Python version in env variables.
137
158
# 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.
138
160
- 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)
140
164
uses : actions/upload-artifact@6f51ac03b9356f520e9adb1b1b7802705f340c2b # v4.5.0
141
165
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*/
144
168
if-no-files-found : error
145
169
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