From 305ac2a2f272fe3da6a14c27b245460be431f643 Mon Sep 17 00:00:00 2001 From: Andrey Fedorov Date: Tue, 11 Aug 2026 14:19:36 -0400 Subject: [PATCH 1/3] Emit the arm64 Linux asset into the generated URL data dcmqi v1.5.7 publishes dcmqi--linux-arm64.tar.gz. The generator probes for it rather than assuming it, the same way it already probes for the per-architecture macOS split, so this workflow keeps working against releases that predate either asset. dcmqiArchive.cmake already resolves linux_arm64; this only supplies the data. Co-Authored-By: Claude Opus 5 --- .github/workflows/update-dcmqi.yml | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/.github/workflows/update-dcmqi.yml b/.github/workflows/update-dcmqi.yml index 4d1058b..fa63545 100644 --- a/.github/workflows/update-dcmqi.yml +++ b/.github/workflows/update-dcmqi.yml @@ -76,11 +76,15 @@ jobs: exit 1 fi - # Determine macOS asset pattern + # Which optional assets does this release publish? Both are probed rather than + # assumed, so this workflow keeps working against older releases: the macOS split + # into per-architecture archives arrived in dcmqi v1.5.1, arm64 Linux in v1.5.7. has_mac_split=false + has_linux_arm64=false for asset in $assets; do case "$asset" in *-mac-arm64*) has_mac_split=true ;; + *-linux-arm64*) has_linux_arm64=true ;; esac done @@ -104,6 +108,13 @@ jobs: echo "set(linux_sha256 \"${checksums[$linux_file]}\")" echo '' + if [ "$has_linux_arm64" = true ]; then + linux_arm64_file="dcmqi-${latest_version}-linux-arm64.tar.gz" + echo "set(linux_arm64_filename \"$linux_arm64_file\")" + echo "set(linux_arm64_sha256 \"${checksums[$linux_arm64_file]}\")" + echo '' + fi + # macOS if [ "$has_mac_split" = true ]; then mac_arm64_file="dcmqi-${latest_version}-mac-arm64.tar.gz" From 05a4c4fd0e893abc9bb6dec9b23492bd1b0e4c3b Mon Sep 17 00:00:00 2001 From: Andrey Fedorov Date: Tue, 11 Aug 2026 14:30:28 -0400 Subject: [PATCH 2/3] Update packaged dcmqi to v1.5.7 Same set of files the update-dcmqi workflow would touch, generated by replaying its emitter against the real v1.5.7 assets; binaries.txt and the pyproject scripts are unchanged, since the release ships the same seven tools. v1.5.7 is the first release with an arm64 Linux package, so the generated data now carries linux_arm64_filename/_sha256 as well. All five checksums were computed locally and agree with the digests GitHub reports for the assets. Co-Authored-By: Claude Opus 5 --- README.md | 2 +- dcmqiUrls.cmake | 21 ++++++++++++--------- 2 files changed, 13 insertions(+), 10 deletions(-) diff --git a/README.md b/README.md index b9c808a..91bf190 100644 --- a/README.md +++ b/README.md @@ -32,7 +32,7 @@ configuration defined in the `pyproject.toml` file. ## Packaged dcmqi version This package wraps the official -[dcmqi v1.5.6](https://github.com/QIICR/dcmqi/releases/tag/v1.5.6) release. +[dcmqi v1.5.7](https://github.com/QIICR/dcmqi/releases/tag/v1.5.7) release. ## Platforms diff --git a/dcmqiUrls.cmake b/dcmqiUrls.cmake index 506df90..3a4f997 100644 --- a/dcmqiUrls.cmake +++ b/dcmqiUrls.cmake @@ -3,16 +3,19 @@ # Generated by .github/workflows/update-dcmqi.yml -- do not edit by hand. # Which of these assets a build uses is decided in dcmqiArchive.cmake. -set(version "1.5.6") +set(version "1.5.7") -set(linux_filename "dcmqi-1.5.6-linux.tar.gz") -set(linux_sha256 "eb2743e5c24dec38aafe06612b18d200516f39b8f0d62592a926ca6e8cfb5187") +set(linux_filename "dcmqi-1.5.7-linux.tar.gz") +set(linux_sha256 "7c4f525a122ae5782b1cf7730d8deb9f7d43e218af13104377b615adbced2ddd") -set(macos_arm64_filename "dcmqi-1.5.6-mac-arm64.tar.gz") -set(macos_arm64_sha256 "20965b3afcd1d2a878fd3e09e3ee44de655e350d6fe43f9663c93348610f662e") +set(linux_arm64_filename "dcmqi-1.5.7-linux-arm64.tar.gz") +set(linux_arm64_sha256 "dcc605e05eafd6fc92981a16f5ca755f10b1ccceaad0cb2f4343930054ebe3ad") -set(macos_x86_64_filename "dcmqi-1.5.6-mac-x86_64.tar.gz") -set(macos_x86_64_sha256 "6678f2a60547c3a14a9f0376932217c3faee28158b6805c3b89d303df0640747") +set(macos_arm64_filename "dcmqi-1.5.7-mac-arm64.tar.gz") +set(macos_arm64_sha256 "ec17425d3eaa7b58db0924138569508c833e9774ef48052ca85d3e5a1b6cf9b9") -set(win64_filename "dcmqi-1.5.6-win64.zip") -set(win64_sha256 "72f4bf6bc6b265e5843c42436267fb59a8079ca765095f218300d019f9e15e3d") +set(macos_x86_64_filename "dcmqi-1.5.7-mac-x86_64.tar.gz") +set(macos_x86_64_sha256 "3d9b88d3e628c3fbcb78f704d08cf438835e248c00601c234002d103c94410ca") + +set(win64_filename "dcmqi-1.5.7-win64.zip") +set(win64_sha256 "dfa86a419ab1ef4af1fbac20720d498a7ffd9f5a7f7f7dd1ad4ac9c138c6b791") From c1cd59f227f728898f74841b4ee532acba0c583c Mon Sep 17 00:00:00 2001 From: Andrey Fedorov Date: Tue, 11 Aug 2026 14:30:41 -0400 Subject: [PATCH 3/3] Build an arm64 Linux wheel Closes the last gap in issue #44: dcmqi v1.5.7 publishes an arm64 Linux package, so there is finally an archive to wrap. The job runs on a native arm64 runner rather than QEMU, which nothing here needs -- no code is compiled, the wheel only repackages the upstream archive. The manylinux image is pinned to manylinux_2_28 for aarch64 because that is the container dcmqi builds its arm64 package in, and its binaries need glibc 2.28. An older image would fail the auditwheel repair rather than mistag the wheel, but pinning ties the wheel's floor to how the binaries were actually built. Co-Authored-By: Claude Opus 5 --- .github/workflows/cd.yml | 13 +++++++++++++ README.md | 1 + 2 files changed, 14 insertions(+) diff --git a/.github/workflows/cd.yml b/.github/workflows/cd.yml index 9cfba59..bf7648e 100644 --- a/.github/workflows/cd.yml +++ b/.github/workflows/cd.yml @@ -92,6 +92,14 @@ jobs: skip: "*musllinux*" arch: "x86_64" + # Native arm64 runner rather than QEMU on an x86_64 one: nothing is compiled here + # -- the wheel just repackages an upstream archive -- so emulation would buy + # nothing and cost a lot. musllinux is skipped for the same reason as above: the + # dcmqi binaries are linked against glibc. + - os: ubuntu-24.04-arm + skip: "*musllinux*" + arch: "aarch64" + # cibuildwheel's "auto" on Windows means AMD64 *and* x86, but dcmqi publishes no # 32-bit binaries. The win32 wheel it produced could therefore only ever contain # the 64-bit ones, so the architecture is pinned rather than probed. @@ -122,6 +130,11 @@ jobs: CIBW_ARCHS: "${{ matrix.arch }}" CIBW_SKIP: ${{ matrix.skip }} CIBW_ENVIRONMENT_MACOS: "MACOSX_DEPLOYMENT_TARGET=13.0" + # dcmqi builds its arm64 Linux package in manylinux_2_28_aarch64, and its binaries + # need glibc 2.28. Repairing them against an older image would fail rather than + # mistag, but pinning keeps the wheel's floor tied to how the binaries were built + # instead of to whatever cibuildwheel currently defaults to. + CIBW_MANYLINUX_AARCH64_IMAGE: "manylinux_2_28" - name: Upload wheels uses: actions/upload-artifact@v7 diff --git a/README.md b/README.md index 91bf190..64f6d1f 100644 --- a/README.md +++ b/README.md @@ -41,6 +41,7 @@ The following platforms are supported by the binary wheels: | OS | Arch | | ----------- | ---------------- | | Linux Intel | manylinux 64-bit | +| Linux Arm | manylinux arm64 | | macOS 13+ | Apple Silicon | | macOS 15+ | Intel | | Windows | 64-bit |