Skip to content

Commit 41c65e5

Browse files
committed
Use unique artifact names with meta-checksum for reliable downloads
Implement globally unique artifact names by querying artifacts with meta-checksum suffixes. This addresses GitHub Actions artifact storage inconsistencies where REST API serves different content than stored. Changes to release.yml: 1. Extended check-all-workflows job to query artifact names dynamically - Added outputs for all 9 artifact names with meta-checksums - Implemented findArtifact() helper to query by prefix - Queries artifacts from wheels, wheels-docker, wheels-arm64 workflows 2. Updated all artifact download steps to use dynamic names: - macOS wheels: artifact_macos_wheels - Windows wheels: artifact_windows_wheels - Source distribution: artifact_source_dist - Linux no-NVX: artifact_linux_no_nvx - Manylinux x86_64: artifact_manylinux_x86_64 - ARM64 CP311/313, PyPy Bookworm/Trixie: artifact_arm64_* This ensures each artifact is uniquely identified by its content hash, preventing corruption during inter-workflow artifact transfers. Example artifact name: source-distribution-0015f69100b26bc41f0bef55211f1f97c3b94f68f3bfd9febcecd7934473ab26 Bumped .cicd submodule to 32fe4ce (wamp-proto/wamp-cicd): - upload-artifact-verified: Appends meta-checksum to artifact names - Enables globally unique artifact identification
1 parent aff0e16 commit 41c65e5

File tree

2 files changed

+84
-23
lines changed

2 files changed

+84
-23
lines changed

.cicd

.github/workflows/release.yml

Lines changed: 83 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,16 @@ jobs:
2020
wheels_arm64_run_id: ${{ steps.check.outputs.wheels_arm64_run_id }}
2121
wstest_run_id: ${{ steps.check.outputs.wstest_run_id }}
2222
main_run_id: ${{ steps.check.outputs.main_run_id }}
23+
# Dynamic artifact names (with meta-checksum suffixes)
24+
artifact_macos_wheels: ${{ steps.check.outputs.artifact_macos_wheels }}
25+
artifact_windows_wheels: ${{ steps.check.outputs.artifact_windows_wheels }}
26+
artifact_source_dist: ${{ steps.check.outputs.artifact_source_dist }}
27+
artifact_linux_no_nvx: ${{ steps.check.outputs.artifact_linux_no_nvx }}
28+
artifact_manylinux_x86_64: ${{ steps.check.outputs.artifact_manylinux_x86_64 }}
29+
artifact_arm64_cp311: ${{ steps.check.outputs.artifact_arm64_cp311 }}
30+
artifact_arm64_cp313: ${{ steps.check.outputs.artifact_arm64_cp313 }}
31+
artifact_arm64_pypy_bookworm: ${{ steps.check.outputs.artifact_arm64_pypy_bookworm }}
32+
artifact_arm64_pypy_trixie: ${{ steps.check.outputs.artifact_arm64_pypy_trixie }}
2333

2434
steps:
2535
- name: Check all required workflows completed
@@ -88,6 +98,57 @@ jobs:
8898
core.setOutput('wstest_run_id', latestRuns['wstest']?.id || '');
8999
core.setOutput('main_run_id', latestRuns['main']?.id || '');
90100
101+
// Query artifact names with meta-checksum suffixes
102+
if (allComplete) {
103+
console.log('');
104+
console.log('─────────────────────────────────────────────────');
105+
console.log('🔍 Querying unique artifact names');
106+
console.log('─────────────────────────────────────────────────');
107+
108+
// Helper function to find artifact by prefix
109+
async function findArtifact(runId, prefix) {
110+
if (!runId) return '';
111+
try {
112+
const { data: artifacts } = await github.rest.actions.listWorkflowRunArtifacts({
113+
owner: context.repo.owner,
114+
repo: context.repo.repo,
115+
run_id: runId
116+
});
117+
const artifact = artifacts.artifacts.find(a => a.name.startsWith(prefix + '-'));
118+
if (artifact) {
119+
console.log(` ✅ ${prefix.padEnd(45)} → ${artifact.name}`);
120+
return artifact.name;
121+
} else {
122+
console.log(` ⚠️ ${prefix.padEnd(45)} → NOT FOUND`);
123+
return '';
124+
}
125+
} catch (error) {
126+
console.log(` ❌ ${prefix.padEnd(45)} → ERROR: ${error.message}`);
127+
return '';
128+
}
129+
}
130+
131+
// Query artifacts from wheels workflow
132+
const wheelsRunId = latestRuns['wheels']?.id;
133+
core.setOutput('artifact_macos_wheels', await findArtifact(wheelsRunId, 'wheels-macos-arm64'));
134+
core.setOutput('artifact_windows_wheels', await findArtifact(wheelsRunId, 'wheels-windows-x86_64'));
135+
core.setOutput('artifact_source_dist', await findArtifact(wheelsRunId, 'source-distribution'));
136+
core.setOutput('artifact_linux_no_nvx', await findArtifact(wheelsRunId, 'linux-wheels-no-nvx'));
137+
138+
// Query artifacts from wheels-docker workflow
139+
const wheelsDockerRunId = latestRuns['wheels-docker']?.id;
140+
core.setOutput('artifact_manylinux_x86_64', await findArtifact(wheelsDockerRunId, 'artifacts-manylinux_2_34_x86_64'));
141+
142+
// Query artifacts from wheels-arm64 workflow
143+
const wheelsArm64RunId = latestRuns['wheels-arm64']?.id;
144+
core.setOutput('artifact_arm64_cp311', await findArtifact(wheelsArm64RunId, 'artifacts-arm64-cpython-3.11-manylinux_2_28_aarch64'));
145+
core.setOutput('artifact_arm64_cp313', await findArtifact(wheelsArm64RunId, 'artifacts-arm64-cpython-3.13-manylinux_2_28_aarch64'));
146+
core.setOutput('artifact_arm64_pypy_bookworm', await findArtifact(wheelsArm64RunId, 'artifacts-arm64-pypy-3.11-bookworm-manylinux_2_36_aarch64'));
147+
core.setOutput('artifact_arm64_pypy_trixie', await findArtifact(wheelsArm64RunId, 'artifacts-arm64-pypy-3.11-trixie-manylinux_2_38_aarch64'));
148+
149+
console.log('─────────────────────────────────────────────────');
150+
}
151+
91152
identifiers:
92153
needs: check-all-workflows
93154
if: needs.check-all-workflows.outputs.all_complete == 'true'
@@ -125,7 +186,7 @@ jobs:
125186
- name: Download and verify macOS wheels with retry logic
126187
uses: wamp-proto/wamp-cicd/actions/download-artifact-verified@main
127188
with:
128-
name: wheels-macos-arm64
189+
name: ${{ needs.check-all-workflows.outputs.artifact_macos_wheels }}
129190
path: dist/
130191
run-id: ${{ needs.check-all-workflows.outputs.wheels_run_id }}
131192
github-token: ${{ secrets.GITHUB_TOKEN }}
@@ -136,7 +197,7 @@ jobs:
136197
- name: Download and verify Windows wheels with retry logic
137198
uses: wamp-proto/wamp-cicd/actions/download-artifact-verified@main
138199
with:
139-
name: wheels-windows-x86_64
200+
name: ${{ needs.check-all-workflows.outputs.artifact_windows_wheels }}
140201
path: dist/
141202
run-id: ${{ needs.check-all-workflows.outputs.wheels_run_id }}
142203
github-token: ${{ secrets.GITHUB_TOKEN }}
@@ -147,7 +208,7 @@ jobs:
147208
- name: Download and verify source distribution with retry logic
148209
uses: wamp-proto/wamp-cicd/actions/download-artifact-verified@main
149210
with:
150-
name: source-distribution
211+
name: ${{ needs.check-all-workflows.outputs.artifact_source_dist }}
151212
path: dist/
152213
run-id: ${{ needs.check-all-workflows.outputs.wheels_run_id }}
153214
github-token: ${{ secrets.GITHUB_TOKEN }}
@@ -331,7 +392,7 @@ jobs:
331392
- name: Download and verify Linux wheels without NVX with retry logic
332393
uses: wamp-proto/wamp-cicd/actions/download-artifact-verified@main
333394
with:
334-
name: linux-wheels-no-nvx
395+
name: ${{ needs.check-all-workflows.outputs.artifact_linux_no_nvx }}
335396
path: dist/
336397
run-id: ${{ needs.check-all-workflows.outputs.wheels_run_id }}
337398
github-token: ${{ secrets.GITHUB_TOKEN }}
@@ -342,7 +403,7 @@ jobs:
342403
- name: Download and verify manylinux x86_64 artifacts with retry logic
343404
uses: wamp-proto/wamp-cicd/actions/download-artifact-verified@main
344405
with:
345-
name: artifacts-manylinux_2_34_x86_64
406+
name: ${{ needs.check-all-workflows.outputs.artifact_manylinux_x86_64 }}
346407
path: wheelhouse/
347408
run-id: ${{ needs.check-all-workflows.outputs.wheels_docker_run_id }}
348409
github-token: ${{ secrets.GITHUB_TOKEN }}
@@ -353,7 +414,7 @@ jobs:
353414
- name: Download and verify ARM64 CPython 3.11 artifacts with retry logic
354415
uses: wamp-proto/wamp-cicd/actions/download-artifact-verified@main
355416
with:
356-
name: artifacts-arm64-cpython-3.11-manylinux_2_28_aarch64
417+
name: ${{ needs.check-all-workflows.outputs.artifact_arm64_cp311 }}
357418
path: wheelhouse-arm64/
358419
run-id: ${{ needs.check-all-workflows.outputs.wheels_arm64_run_id }}
359420
github-token: ${{ secrets.GITHUB_TOKEN }}
@@ -364,7 +425,7 @@ jobs:
364425
- name: Download and verify ARM64 CPython 3.13 artifacts with retry logic
365426
uses: wamp-proto/wamp-cicd/actions/download-artifact-verified@main
366427
with:
367-
name: artifacts-arm64-cpython-3.13-manylinux_2_28_aarch64
428+
name: ${{ needs.check-all-workflows.outputs.artifact_arm64_cp313 }}
368429
path: wheelhouse-arm64/
369430
run-id: ${{ needs.check-all-workflows.outputs.wheels_arm64_run_id }}
370431
github-token: ${{ secrets.GITHUB_TOKEN }}
@@ -375,7 +436,7 @@ jobs:
375436
- name: Download and verify ARM64 PyPy 3.11 Bookworm artifacts with retry logic
376437
uses: wamp-proto/wamp-cicd/actions/download-artifact-verified@main
377438
with:
378-
name: artifacts-arm64-pypy-3.11-bookworm-manylinux_2_36_aarch64
439+
name: ${{ needs.check-all-workflows.outputs.artifact_arm64_pypy_bookworm }}
379440
path: wheelhouse-arm64/
380441
run-id: ${{ needs.check-all-workflows.outputs.wheels_arm64_run_id }}
381442
github-token: ${{ secrets.GITHUB_TOKEN }}
@@ -386,7 +447,7 @@ jobs:
386447
- name: Download and verify ARM64 PyPy 3.11 Trixie artifacts with retry logic
387448
uses: wamp-proto/wamp-cicd/actions/download-artifact-verified@main
388449
with:
389-
name: artifacts-arm64-pypy-3.11-trixie-manylinux_2_38_aarch64
450+
name: ${{ needs.check-all-workflows.outputs.artifact_arm64_pypy_trixie }}
390451
path: wheelhouse-arm64/
391452
run-id: ${{ needs.check-all-workflows.outputs.wheels_arm64_run_id }}
392453
github-token: ${{ secrets.GITHUB_TOKEN }}
@@ -855,7 +916,7 @@ jobs:
855916
- name: Download and verify macOS wheels with retry logic
856917
uses: wamp-proto/wamp-cicd/actions/download-artifact-verified@main
857918
with:
858-
name: wheels-macos-arm64
919+
name: ${{ needs.check-all-workflows.outputs.artifact_macos_wheels }}
859920
path: dist/
860921
run-id: ${{ needs.check-all-workflows.outputs.wheels_run_id }}
861922
github-token: ${{ secrets.GITHUB_TOKEN }}
@@ -866,7 +927,7 @@ jobs:
866927
- name: Download and verify Windows wheels with retry logic
867928
uses: wamp-proto/wamp-cicd/actions/download-artifact-verified@main
868929
with:
869-
name: wheels-windows-x86_64
930+
name: ${{ needs.check-all-workflows.outputs.artifact_windows_wheels }}
870931
path: dist/
871932
run-id: ${{ needs.check-all-workflows.outputs.wheels_run_id }}
872933
github-token: ${{ secrets.GITHUB_TOKEN }}
@@ -877,7 +938,7 @@ jobs:
877938
- name: Download and verify source distribution with retry logic
878939
uses: wamp-proto/wamp-cicd/actions/download-artifact-verified@main
879940
with:
880-
name: source-distribution
941+
name: ${{ needs.check-all-workflows.outputs.artifact_source_dist }}
881942
path: dist/
882943
run-id: ${{ needs.check-all-workflows.outputs.wheels_run_id }}
883944
github-token: ${{ secrets.GITHUB_TOKEN }}
@@ -1061,7 +1122,7 @@ jobs:
10611122
- name: Download and verify Linux wheels without NVX with retry logic
10621123
uses: wamp-proto/wamp-cicd/actions/download-artifact-verified@main
10631124
with:
1064-
name: linux-wheels-no-nvx
1125+
name: ${{ needs.check-all-workflows.outputs.artifact_linux_no_nvx }}
10651126
path: dist/
10661127
run-id: ${{ needs.check-all-workflows.outputs.wheels_run_id }}
10671128
github-token: ${{ secrets.GITHUB_TOKEN }}
@@ -1072,7 +1133,7 @@ jobs:
10721133
- name: Download and verify manylinux x86_64 artifacts with retry logic
10731134
uses: wamp-proto/wamp-cicd/actions/download-artifact-verified@main
10741135
with:
1075-
name: artifacts-manylinux_2_34_x86_64
1136+
name: ${{ needs.check-all-workflows.outputs.artifact_manylinux_x86_64 }}
10761137
path: wheelhouse/
10771138
run-id: ${{ needs.check-all-workflows.outputs.wheels_docker_run_id }}
10781139
github-token: ${{ secrets.GITHUB_TOKEN }}
@@ -1083,7 +1144,7 @@ jobs:
10831144
- name: Download and verify ARM64 CPython 3.11 artifacts with retry logic
10841145
uses: wamp-proto/wamp-cicd/actions/download-artifact-verified@main
10851146
with:
1086-
name: artifacts-arm64-cpython-3.11-manylinux_2_28_aarch64
1147+
name: ${{ needs.check-all-workflows.outputs.artifact_arm64_cp311 }}
10871148
path: wheelhouse-arm64/
10881149
run-id: ${{ needs.check-all-workflows.outputs.wheels_arm64_run_id }}
10891150
github-token: ${{ secrets.GITHUB_TOKEN }}
@@ -1094,7 +1155,7 @@ jobs:
10941155
- name: Download and verify ARM64 CPython 3.13 artifacts with retry logic
10951156
uses: wamp-proto/wamp-cicd/actions/download-artifact-verified@main
10961157
with:
1097-
name: artifacts-arm64-cpython-3.13-manylinux_2_28_aarch64
1158+
name: ${{ needs.check-all-workflows.outputs.artifact_arm64_cp313 }}
10981159
path: wheelhouse-arm64/
10991160
run-id: ${{ needs.check-all-workflows.outputs.wheels_arm64_run_id }}
11001161
github-token: ${{ secrets.GITHUB_TOKEN }}
@@ -1105,7 +1166,7 @@ jobs:
11051166
- name: Download and verify ARM64 PyPy 3.11 Bookworm artifacts with retry logic
11061167
uses: wamp-proto/wamp-cicd/actions/download-artifact-verified@main
11071168
with:
1108-
name: artifacts-arm64-pypy-3.11-bookworm-manylinux_2_36_aarch64
1169+
name: ${{ needs.check-all-workflows.outputs.artifact_arm64_pypy_bookworm }}
11091170
path: wheelhouse-arm64/
11101171
run-id: ${{ needs.check-all-workflows.outputs.wheels_arm64_run_id }}
11111172
github-token: ${{ secrets.GITHUB_TOKEN }}
@@ -1116,7 +1177,7 @@ jobs:
11161177
- name: Download and verify ARM64 PyPy 3.11 Trixie artifacts with retry logic
11171178
uses: wamp-proto/wamp-cicd/actions/download-artifact-verified@main
11181179
with:
1119-
name: artifacts-arm64-pypy-3.11-trixie-manylinux_2_38_aarch64
1180+
name: ${{ needs.check-all-workflows.outputs.artifact_arm64_pypy_trixie }}
11201181
path: wheelhouse-arm64/
11211182
run-id: ${{ needs.check-all-workflows.outputs.wheels_arm64_run_id }}
11221183
github-token: ${{ secrets.GITHUB_TOKEN }}
@@ -1602,7 +1663,7 @@ jobs:
16021663
- name: Download and verify macOS wheels with retry logic
16031664
uses: wamp-proto/wamp-cicd/actions/download-artifact-verified@main
16041665
with:
1605-
name: wheels-macos-arm64
1666+
name: ${{ needs.check-all-workflows.outputs.artifact_macos_wheels }}
16061667
path: dist/
16071668
run-id: ${{ needs.check-all-workflows.outputs.wheels_run_id }}
16081669
github-token: ${{ secrets.GITHUB_TOKEN }}
@@ -1613,7 +1674,7 @@ jobs:
16131674
- name: Download and verify Windows wheels with retry logic
16141675
uses: wamp-proto/wamp-cicd/actions/download-artifact-verified@main
16151676
with:
1616-
name: wheels-windows-x86_64
1677+
name: ${{ needs.check-all-workflows.outputs.artifact_windows_wheels }}
16171678
path: dist/
16181679
run-id: ${{ needs.check-all-workflows.outputs.wheels_run_id }}
16191680
github-token: ${{ secrets.GITHUB_TOKEN }}
@@ -1624,7 +1685,7 @@ jobs:
16241685
- name: Download and verify source distribution with retry logic
16251686
uses: wamp-proto/wamp-cicd/actions/download-artifact-verified@main
16261687
with:
1627-
name: source-distribution
1688+
name: ${{ needs.check-all-workflows.outputs.artifact_source_dist }}
16281689
path: dist/
16291690
run-id: ${{ needs.check-all-workflows.outputs.wheels_run_id }}
16301691
github-token: ${{ secrets.GITHUB_TOKEN }}
@@ -1808,7 +1869,7 @@ jobs:
18081869
- name: Download and verify Linux wheels without NVX with retry logic
18091870
uses: wamp-proto/wamp-cicd/actions/download-artifact-verified@main
18101871
with:
1811-
name: linux-wheels-no-nvx
1872+
name: ${{ needs.check-all-workflows.outputs.artifact_linux_no_nvx }}
18121873
path: dist/
18131874
run-id: ${{ needs.check-all-workflows.outputs.wheels_run_id }}
18141875
github-token: ${{ secrets.GITHUB_TOKEN }}

0 commit comments

Comments
 (0)