Skip to content

Commit aff0e16

Browse files
committed
Replace pattern-based downloads with individual verified downloads
This comprehensive change replaces all pattern-based artifact downloads with individual verified downloads across all three release jobs: release-development, release-nightly, and release-stable. Changes: 1. **Pattern-based downloads removed:** - `pattern: artifacts-*` with `merge-multiple: true` - `pattern: artifacts-arm64-*` with `merge-multiple: true` These patterns caused CHECKSUMS.sha256 files from different artifacts to overwrite each other, leading to checksum mismatches and corruption detection failures (issue #1735, #1714). 2. **Individual verified downloads added:** **wheels-docker workflow:** - artifacts-manylinux_2_34_x86_64 **wheels-arm64 workflow:** - artifacts-arm64-cpython-3.11-manylinux_2_28_aarch64 - artifacts-arm64-cpython-3.13-manylinux_2_28_aarch64 - artifacts-arm64-pypy-3.11-bookworm-manylinux_2_36_aarch64 - artifacts-arm64-pypy-3.11-trixie-manylinux_2_38_aarch64 All use `download-artifact-verified@main` action with cryptographic chain-of-custody verification (SHA256 meta-checksum + individual file checksums). 3. **Retry settings updated globally:** - Changed from `max-attempts: 3, retry-delay: 60` - To `max-attempts: 5, retry-delay: 30` - Applied to all verified downloads (macOS, Windows, source-distribution, Linux wheels, manylinux wheels, ARM64 wheels) - Faster retry cycles with more attempts for better reliability 4. **Single-source-of-truth enforced:** - Default `overwrite: false` in download-artifact-verified action - Each file must be generated in exactly ONE workflow/artifact - Prevents silent corruption from file overwrites - Configuration errors now fail fast with clear error messages **Benefits:** - Eliminates checksum file corruption from pattern downloads - Each artifact downloaded independently with full verification - Clear failure modes when artifacts contain duplicate files - Better retry performance (5 × 30s vs 3 × 60s) - Comprehensive chain-of-custody for all release artifacts **Testing:** Ready for testing in next release workflow run. The verified download action will catch any corruption during artifact transfer and retry automatically. Related: #1735 (pattern download corruption) Related: #1714 (corrupted v25.10.1 on PyPI)
1 parent 4ff716e commit aff0e16

File tree

1 file changed

+153
-48
lines changed

1 file changed

+153
-48
lines changed

.github/workflows/release.yml

Lines changed: 153 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -129,8 +129,8 @@ jobs:
129129
path: dist/
130130
run-id: ${{ needs.check-all-workflows.outputs.wheels_run_id }}
131131
github-token: ${{ secrets.GITHUB_TOKEN }}
132-
max-attempts: 3
133-
retry-delay: 60
132+
max-attempts: 5
133+
retry-delay: 30
134134
continue-on-error: true
135135

136136
- name: Download and verify Windows wheels with retry logic
@@ -140,8 +140,8 @@ jobs:
140140
path: dist/
141141
run-id: ${{ needs.check-all-workflows.outputs.wheels_run_id }}
142142
github-token: ${{ secrets.GITHUB_TOKEN }}
143-
max-attempts: 3
144-
retry-delay: 60
143+
max-attempts: 5
144+
retry-delay: 30
145145
continue-on-error: true
146146

147147
- name: Download and verify source distribution with retry logic
@@ -151,8 +151,8 @@ jobs:
151151
path: dist/
152152
run-id: ${{ needs.check-all-workflows.outputs.wheels_run_id }}
153153
github-token: ${{ secrets.GITHUB_TOKEN }}
154-
max-attempts: 3
155-
retry-delay: 60
154+
max-attempts: 5
155+
retry-delay: 30
156156
continue-on-error: true
157157

158158
- name: Debug - List downloaded files
@@ -335,28 +335,63 @@ jobs:
335335
path: dist/
336336
run-id: ${{ needs.check-all-workflows.outputs.wheels_run_id }}
337337
github-token: ${{ secrets.GITHUB_TOKEN }}
338-
max-attempts: 3
339-
retry-delay: 60
338+
max-attempts: 5
339+
retry-delay: 30
340340
continue-on-error: true
341341

342-
- name: Download manylinux wheel artifacts (from wheels-docker workflow)
343-
uses: actions/download-artifact@v4
342+
- name: Download and verify manylinux x86_64 artifacts with retry logic
343+
uses: wamp-proto/wamp-cicd/actions/download-artifact-verified@main
344344
with:
345-
pattern: artifacts-*
346-
merge-multiple: true
345+
name: artifacts-manylinux_2_34_x86_64
347346
path: wheelhouse/
348347
run-id: ${{ needs.check-all-workflows.outputs.wheels_docker_run_id }}
349348
github-token: ${{ secrets.GITHUB_TOKEN }}
349+
max-attempts: 5
350+
retry-delay: 30
350351
continue-on-error: true
351352

352-
- name: Download ARM64 wheel artifacts (from wheels-arm64 workflow)
353-
uses: actions/download-artifact@v4
353+
- name: Download and verify ARM64 CPython 3.11 artifacts with retry logic
354+
uses: wamp-proto/wamp-cicd/actions/download-artifact-verified@main
354355
with:
355-
pattern: artifacts-arm64-*
356-
merge-multiple: true
356+
name: artifacts-arm64-cpython-3.11-manylinux_2_28_aarch64
357357
path: wheelhouse-arm64/
358358
run-id: ${{ needs.check-all-workflows.outputs.wheels_arm64_run_id }}
359359
github-token: ${{ secrets.GITHUB_TOKEN }}
360+
max-attempts: 5
361+
retry-delay: 30
362+
continue-on-error: true
363+
364+
- name: Download and verify ARM64 CPython 3.13 artifacts with retry logic
365+
uses: wamp-proto/wamp-cicd/actions/download-artifact-verified@main
366+
with:
367+
name: artifacts-arm64-cpython-3.13-manylinux_2_28_aarch64
368+
path: wheelhouse-arm64/
369+
run-id: ${{ needs.check-all-workflows.outputs.wheels_arm64_run_id }}
370+
github-token: ${{ secrets.GITHUB_TOKEN }}
371+
max-attempts: 5
372+
retry-delay: 30
373+
continue-on-error: true
374+
375+
- name: Download and verify ARM64 PyPy 3.11 Bookworm artifacts with retry logic
376+
uses: wamp-proto/wamp-cicd/actions/download-artifact-verified@main
377+
with:
378+
name: artifacts-arm64-pypy-3.11-bookworm-manylinux_2_36_aarch64
379+
path: wheelhouse-arm64/
380+
run-id: ${{ needs.check-all-workflows.outputs.wheels_arm64_run_id }}
381+
github-token: ${{ secrets.GITHUB_TOKEN }}
382+
max-attempts: 5
383+
retry-delay: 30
384+
continue-on-error: true
385+
386+
- name: Download and verify ARM64 PyPy 3.11 Trixie artifacts with retry logic
387+
uses: wamp-proto/wamp-cicd/actions/download-artifact-verified@main
388+
with:
389+
name: artifacts-arm64-pypy-3.11-trixie-manylinux_2_38_aarch64
390+
path: wheelhouse-arm64/
391+
run-id: ${{ needs.check-all-workflows.outputs.wheels_arm64_run_id }}
392+
github-token: ${{ secrets.GITHUB_TOKEN }}
393+
max-attempts: 5
394+
retry-delay: 30
360395
continue-on-error: true
361396

362397
- name: Download wstest conformance summary
@@ -824,8 +859,8 @@ jobs:
824859
path: dist/
825860
run-id: ${{ needs.check-all-workflows.outputs.wheels_run_id }}
826861
github-token: ${{ secrets.GITHUB_TOKEN }}
827-
max-attempts: 3
828-
retry-delay: 60
862+
max-attempts: 5
863+
retry-delay: 30
829864
continue-on-error: true
830865

831866
- name: Download and verify Windows wheels with retry logic
@@ -835,8 +870,8 @@ jobs:
835870
path: dist/
836871
run-id: ${{ needs.check-all-workflows.outputs.wheels_run_id }}
837872
github-token: ${{ secrets.GITHUB_TOKEN }}
838-
max-attempts: 3
839-
retry-delay: 60
873+
max-attempts: 5
874+
retry-delay: 30
840875
continue-on-error: true
841876

842877
- name: Download and verify source distribution with retry logic
@@ -846,8 +881,8 @@ jobs:
846881
path: dist/
847882
run-id: ${{ needs.check-all-workflows.outputs.wheels_run_id }}
848883
github-token: ${{ secrets.GITHUB_TOKEN }}
849-
max-attempts: 3
850-
retry-delay: 60
884+
max-attempts: 5
885+
retry-delay: 30
851886
continue-on-error: true
852887

853888
- name: Debug - List downloaded files
@@ -1030,28 +1065,63 @@ jobs:
10301065
path: dist/
10311066
run-id: ${{ needs.check-all-workflows.outputs.wheels_run_id }}
10321067
github-token: ${{ secrets.GITHUB_TOKEN }}
1033-
max-attempts: 3
1034-
retry-delay: 60
1068+
max-attempts: 5
1069+
retry-delay: 30
10351070
continue-on-error: true
10361071

1037-
- name: Download manylinux wheel artifacts (from wheels-docker workflow)
1038-
uses: actions/download-artifact@v4
1072+
- name: Download and verify manylinux x86_64 artifacts with retry logic
1073+
uses: wamp-proto/wamp-cicd/actions/download-artifact-verified@main
10391074
with:
1040-
pattern: artifacts-*
1041-
merge-multiple: true
1075+
name: artifacts-manylinux_2_34_x86_64
10421076
path: wheelhouse/
10431077
run-id: ${{ needs.check-all-workflows.outputs.wheels_docker_run_id }}
10441078
github-token: ${{ secrets.GITHUB_TOKEN }}
1079+
max-attempts: 5
1080+
retry-delay: 30
10451081
continue-on-error: true
10461082

1047-
- name: Download ARM64 wheel artifacts (from wheels-arm64 workflow)
1048-
uses: actions/download-artifact@v4
1083+
- name: Download and verify ARM64 CPython 3.11 artifacts with retry logic
1084+
uses: wamp-proto/wamp-cicd/actions/download-artifact-verified@main
10491085
with:
1050-
pattern: artifacts-arm64-*
1051-
merge-multiple: true
1086+
name: artifacts-arm64-cpython-3.11-manylinux_2_28_aarch64
1087+
path: wheelhouse-arm64/
1088+
run-id: ${{ needs.check-all-workflows.outputs.wheels_arm64_run_id }}
1089+
github-token: ${{ secrets.GITHUB_TOKEN }}
1090+
max-attempts: 5
1091+
retry-delay: 30
1092+
continue-on-error: true
1093+
1094+
- name: Download and verify ARM64 CPython 3.13 artifacts with retry logic
1095+
uses: wamp-proto/wamp-cicd/actions/download-artifact-verified@main
1096+
with:
1097+
name: artifacts-arm64-cpython-3.13-manylinux_2_28_aarch64
10521098
path: wheelhouse-arm64/
10531099
run-id: ${{ needs.check-all-workflows.outputs.wheels_arm64_run_id }}
10541100
github-token: ${{ secrets.GITHUB_TOKEN }}
1101+
max-attempts: 5
1102+
retry-delay: 30
1103+
continue-on-error: true
1104+
1105+
- name: Download and verify ARM64 PyPy 3.11 Bookworm artifacts with retry logic
1106+
uses: wamp-proto/wamp-cicd/actions/download-artifact-verified@main
1107+
with:
1108+
name: artifacts-arm64-pypy-3.11-bookworm-manylinux_2_36_aarch64
1109+
path: wheelhouse-arm64/
1110+
run-id: ${{ needs.check-all-workflows.outputs.wheels_arm64_run_id }}
1111+
github-token: ${{ secrets.GITHUB_TOKEN }}
1112+
max-attempts: 5
1113+
retry-delay: 30
1114+
continue-on-error: true
1115+
1116+
- name: Download and verify ARM64 PyPy 3.11 Trixie artifacts with retry logic
1117+
uses: wamp-proto/wamp-cicd/actions/download-artifact-verified@main
1118+
with:
1119+
name: artifacts-arm64-pypy-3.11-trixie-manylinux_2_38_aarch64
1120+
path: wheelhouse-arm64/
1121+
run-id: ${{ needs.check-all-workflows.outputs.wheels_arm64_run_id }}
1122+
github-token: ${{ secrets.GITHUB_TOKEN }}
1123+
max-attempts: 5
1124+
retry-delay: 30
10551125
continue-on-error: true
10561126

10571127
- name: Download wstest conformance summary
@@ -1536,8 +1606,8 @@ jobs:
15361606
path: dist/
15371607
run-id: ${{ needs.check-all-workflows.outputs.wheels_run_id }}
15381608
github-token: ${{ secrets.GITHUB_TOKEN }}
1539-
max-attempts: 3
1540-
retry-delay: 60
1609+
max-attempts: 5
1610+
retry-delay: 30
15411611
continue-on-error: true
15421612

15431613
- name: Download and verify Windows wheels with retry logic
@@ -1547,8 +1617,8 @@ jobs:
15471617
path: dist/
15481618
run-id: ${{ needs.check-all-workflows.outputs.wheels_run_id }}
15491619
github-token: ${{ secrets.GITHUB_TOKEN }}
1550-
max-attempts: 3
1551-
retry-delay: 60
1620+
max-attempts: 5
1621+
retry-delay: 30
15521622
continue-on-error: true
15531623

15541624
- name: Download and verify source distribution with retry logic
@@ -1558,8 +1628,8 @@ jobs:
15581628
path: dist/
15591629
run-id: ${{ needs.check-all-workflows.outputs.wheels_run_id }}
15601630
github-token: ${{ secrets.GITHUB_TOKEN }}
1561-
max-attempts: 3
1562-
retry-delay: 60
1631+
max-attempts: 5
1632+
retry-delay: 30
15631633
continue-on-error: true
15641634

15651635
- name: Debug - List downloaded files
@@ -1742,28 +1812,63 @@ jobs:
17421812
path: dist/
17431813
run-id: ${{ needs.check-all-workflows.outputs.wheels_run_id }}
17441814
github-token: ${{ secrets.GITHUB_TOKEN }}
1745-
max-attempts: 3
1746-
retry-delay: 60
1815+
max-attempts: 5
1816+
retry-delay: 30
17471817
continue-on-error: true
17481818

1749-
- name: Download manylinux wheels with NVX (from wheels-docker)
1750-
uses: actions/download-artifact@v4
1819+
- name: Download and verify manylinux x86_64 artifacts with retry logic
1820+
uses: wamp-proto/wamp-cicd/actions/download-artifact-verified@main
17511821
with:
1752-
pattern: artifacts-*
1753-
merge-multiple: true
1822+
name: artifacts-manylinux_2_34_x86_64
17541823
path: dist/
17551824
run-id: ${{ needs.check-all-workflows.outputs.wheels_docker_run_id }}
17561825
github-token: ${{ secrets.GITHUB_TOKEN }}
1826+
max-attempts: 5
1827+
retry-delay: 30
17571828
continue-on-error: true
17581829

1759-
- name: Download ARM64 wheels with NVX (from wheels-arm64)
1760-
uses: actions/download-artifact@v4
1830+
- name: Download and verify ARM64 CPython 3.11 artifacts with retry logic
1831+
uses: wamp-proto/wamp-cicd/actions/download-artifact-verified@main
17611832
with:
1762-
pattern: artifacts-arm64-*
1763-
merge-multiple: true
1833+
name: artifacts-arm64-cpython-3.11-manylinux_2_28_aarch64
1834+
path: dist/
1835+
run-id: ${{ needs.check-all-workflows.outputs.wheels_arm64_run_id }}
1836+
github-token: ${{ secrets.GITHUB_TOKEN }}
1837+
max-attempts: 5
1838+
retry-delay: 30
1839+
continue-on-error: true
1840+
1841+
- name: Download and verify ARM64 CPython 3.13 artifacts with retry logic
1842+
uses: wamp-proto/wamp-cicd/actions/download-artifact-verified@main
1843+
with:
1844+
name: artifacts-arm64-cpython-3.13-manylinux_2_28_aarch64
1845+
path: dist/
1846+
run-id: ${{ needs.check-all-workflows.outputs.wheels_arm64_run_id }}
1847+
github-token: ${{ secrets.GITHUB_TOKEN }}
1848+
max-attempts: 5
1849+
retry-delay: 30
1850+
continue-on-error: true
1851+
1852+
- name: Download and verify ARM64 PyPy 3.11 Bookworm artifacts with retry logic
1853+
uses: wamp-proto/wamp-cicd/actions/download-artifact-verified@main
1854+
with:
1855+
name: artifacts-arm64-pypy-3.11-bookworm-manylinux_2_36_aarch64
1856+
path: dist/
1857+
run-id: ${{ needs.check-all-workflows.outputs.wheels_arm64_run_id }}
1858+
github-token: ${{ secrets.GITHUB_TOKEN }}
1859+
max-attempts: 5
1860+
retry-delay: 30
1861+
continue-on-error: true
1862+
1863+
- name: Download and verify ARM64 PyPy 3.11 Trixie artifacts with retry logic
1864+
uses: wamp-proto/wamp-cicd/actions/download-artifact-verified@main
1865+
with:
1866+
name: artifacts-arm64-pypy-3.11-trixie-manylinux_2_38_aarch64
17641867
path: dist/
17651868
run-id: ${{ needs.check-all-workflows.outputs.wheels_arm64_run_id }}
17661869
github-token: ${{ secrets.GITHUB_TOKEN }}
1870+
max-attempts: 5
1871+
retry-delay: 30
17671872
continue-on-error: true
17681873

17691874
- name: Force file system sync (post-download, pre-verification)

0 commit comments

Comments
 (0)