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
+ shell : bash
61
+ run : |
62
+ if [[ "${{ matrix.os }}" == "ubuntu-24.04" ]]; then
63
+ echo "arch_env=ubuntu-x86-64" >> "$GITHUB_OUTPUT"
64
+ elif [[ "${{ matrix.os }}" == "ubuntu-24.04-arm" ]]; then
65
+ echo "arch_env=ubuntu-arm64" >> "$GITHUB_OUTPUT"
66
+ else
67
+ echo "arch_env=unknown" >> "$GITHUB_OUTPUT"
68
+ fi
69
+
70
+ - name : Test the env variable
71
+ run : echo "Architecture-specific value ${{ steps.set-arch-env.outputs.arch_env }}"
72
+
59
73
- name : Harden Runner
60
74
uses : step-security/harden-runner@c6295a65d1254861815972266d5933fd6e532bdf # v2.11.1
61
75
with :
@@ -99,24 +113,33 @@ jobs:
99
113
HYPOTHESIS_PROFILE : github
100
114
101
115
# Generate the requirements.txt that contains the hash digests of the dependencies and
102
- # generate the SBOM using CyclonDX SBOM generator.
116
+ # generate the SBOM using CyclonDX SBOM generator for the release Python version and
117
+ # supported release OS targets.
103
118
- name : Generate requirements.txt and SBOM
104
- if : matrix.python == env.ARTIFACT_PYTHON
119
+ if : >
120
+ matrix.python == env.RELEASE_PYTHON_VERSION &&
121
+ (matrix.os == env.RELEASE_OS_X86_64 || matrix.os == env.RELEASE_OS_ARM64)
105
122
run : make requirements sbom
106
123
107
124
# 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.
125
+ # new one for the package and its actual and required dependencies only. Run this step
126
+ # for the release Python version and supported release OS targets only.
109
127
- name : Prune packages and generate required requirements.txt
110
- if : matrix.python == env.ARTIFACT_PYTHON
128
+ if : >
129
+ matrix.python == env.RELEASE_PYTHON_VERSION &&
130
+ (matrix.os == env.RELEASE_OS_X86_64 || matrix.os == env.RELEASE_OS_ARM64)
111
131
run : |
112
132
rm requirements.txt
113
133
make prune requirements
114
134
115
135
# Find the paths to the artifact files that will be included in the release, compute
116
136
# the SHA digest for all the release files and encode them using Base64, and export it
117
- # from this job.
137
+ # from this job. Run this step for the release Python version and supported release
138
+ # OS targets only.
118
139
- name : Compute package hash
119
- if : matrix.python == env.ARTIFACT_PYTHON
140
+ if : >
141
+ matrix.python == env.RELEASE_PYTHON_VERSION &&
142
+ (matrix.os == env.RELEASE_OS_X86_64 || matrix.os == env.RELEASE_OS_ARM64)
120
143
id : compute-hash
121
144
shell : bash
122
145
run : |
@@ -131,15 +154,28 @@ jobs:
131
154
sha256sum --version
132
155
DIGEST=$(sha256sum "$TARBALL_PATH" "$WHEEL_PATH" "$REQUIREMENTS_PATH" "$SBOM_PATH" "$HTML_DOCS_PATH" "$MARKDOWN_DOCS_PATH" "$BUILD_EPOCH_PATH" | base64 -w0)
133
156
echo "Digest of artifacts is $DIGEST."
134
- echo "artifacts-sha256= $DIGEST" >> "$GITHUB_OUTPUT"
157
+ echo "$DIGEST" > artifacts-sha256-file-${{ steps.set-arch-env.outputs.arch_env }}
135
158
136
- # For now only generate artifacts for the specified OS and Python version in env variables.
137
159
# Currently reusable workflows do not support setting strategy property from the caller workflow.
160
+ # Run this step for the release Python version and supported release OS targets only.
138
161
- name : Upload the package artifact for debugging and release
139
- if : matrix.python == env.ARTIFACT_PYTHON
162
+ if : >
163
+ matrix.python == env.RELEASE_PYTHON_VERSION &&
164
+ (matrix.os == env.RELEASE_OS_X86_64 || matrix.os == env.RELEASE_OS_ARM64)
140
165
uses : actions/upload-artifact@6f51ac03b9356f520e9adb1b1b7802705f340c2b # v4.5.0
141
166
with :
142
- name : artifact -${{ matrix.os }}-python-${{ matrix.python }}
143
- path : dist
167
+ name : artifacts -${{ steps.set-arch-env.outputs.arch_env }}
168
+ path : ./ dist*/
144
169
if-no-files-found : error
145
170
retention-days : 7
171
+
172
+ # Run this step for the release Python version and supported release OS targets only.
173
+ - name : Upload artifacts-sha256
174
+ if : >
175
+ matrix.python == env.RELEASE_PYTHON_VERSION &&
176
+ (matrix.os == env.RELEASE_OS_X86_64 || matrix.os == env.RELEASE_OS_ARM64)
177
+ uses : actions/upload-artifact@6f51ac03b9356f520e9adb1b1b7802705f340c2b # v4.5.0
178
+ with :
179
+ name : artifacts-sha256-file-${{ steps.set-arch-env.outputs.arch_env }}
180
+ path : artifacts-sha256-file-${{ steps.set-arch-env.outputs.arch_env }}
181
+ retention-days : 7
0 commit comments