Skip to content

Update dcmqi

Update dcmqi #3

Workflow file for this run

name: Update dcmqi
on:
schedule:
- cron: "0 9 * * 1" # Every Monday at 9am UTC
workflow_dispatch:
permissions:
contents: write
pull-requests: write
jobs:
check-update:
name: Check for new dcmqi release
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- name: Check for update and open PR
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
set -euo pipefail
# Get current version from dcmqiUrls.cmake
current_version=$(grep 'set(version' dcmqiUrls.cmake | sed 's/set(version "\(.*\)")/\1/')
echo "Current version: $current_version"
# Get latest upstream release (skip drafts and prereleases)
latest_tag=$(gh api repos/QIICR/dcmqi/releases/latest --jq '.tag_name')
latest_version="${latest_tag#v}"
echo "Latest upstream version: $latest_version"
if [ "$current_version" = "$latest_version" ]; then
echo "Already up-to-date at v$current_version"
exit 0
fi
echo "Update available: v$current_version -> v$latest_version"
# Check if a PR already exists for this version
existing_pr=$(gh pr list --search "dcmqi v$latest_version" --json number --jq '.[0].number // empty')
if [ -n "$existing_pr" ]; then
echo "PR #$existing_pr already exists for v$latest_version"
exit 0
fi
# Get asset list
assets=$(gh api "repos/QIICR/dcmqi/releases/tags/$latest_tag" --jq '.assets[].name')
echo "Assets: $assets"
# Download assets and compute checksums
declare -A checksums
for asset in $assets; do
echo "Downloading $asset..."
url="https://github.com/QIICR/dcmqi/releases/download/$latest_tag/$asset"
sha256=$(curl -sL "$url" | sha256sum | awk '{print $1}')
checksums["$asset"]="$sha256"
echo " SHA256: $sha256"
done
# Determine macOS asset pattern
has_mac_split=false
for asset in $assets; do
case "$asset" in
*-mac-arm64*) has_mac_split=true ;;
esac
done
# Generate dcmqiUrls.cmake
{
echo '# Checksums computed from assets associated with the dcmqi GitHub release'
echo ''
echo "set(version \"$latest_version\")"
echo ''
# Linux
linux_file="dcmqi-${latest_version}-linux.tar.gz"
echo "set(linux_filename \"$linux_file\")"
echo "set(linux_sha256 \"${checksums[$linux_file]}\")"
echo ''
# macOS
if [ "$has_mac_split" = true ]; then
mac_arm64_file="dcmqi-${latest_version}-mac-arm64.tar.gz"
mac_x86_64_file="dcmqi-${latest_version}-mac-x86_64.tar.gz"
echo "set(macos_arm64_filename \"$mac_arm64_file\")"
echo "set(macos_arm64_sha256 \"${checksums[$mac_arm64_file]}\")"
echo ''
echo "set(macos_x86_64_filename \"$mac_x86_64_file\")"
echo "set(macos_x86_64_sha256 \"${checksums[$mac_x86_64_file]}\")"
else
mac_file="dcmqi-${latest_version}-mac.tar.gz"
echo "set(macos_filename \"$mac_file\")"
echo "set(macos_sha256 \"${checksums[$mac_file]}\")"
fi
echo ''
# Windows
win_file="dcmqi-${latest_version}-win64.zip"
echo "set(win64_filename \"$win_file\")"
echo "set(win64_sha256 \"${checksums[$win_file]}\")"
echo ''
echo ''
# Platform detection
echo 'cmake_host_system_information(RESULT is_64bit QUERY IS_64BIT)'
echo ''
echo 'set(archive "linux")'
echo ''
echo 'if(APPLE)'
if [ "$has_mac_split" = true ]; then
echo ' if(CMAKE_SYSTEM_PROCESSOR STREQUAL "arm64")'
echo ' set(archive "macos_arm64")'
echo ' else()'
echo ' set(archive "macos_x86_64")'
echo ' endif()'
else
echo ' set(archive "macos")'
fi
echo 'endif()'
echo ''
echo 'if(WIN32)'
echo ' if(is_64bit AND NOT (${CMAKE_SYSTEM_PROCESSOR} STREQUAL "ARM64"))'
echo ' set(archive "win64")'
echo ' endif()'
echo 'endif()'
echo ''
echo 'if(NOT DEFINED "${archive}_filename")'
echo ' message(FATAL_ERROR "Failed to determine which archive to download: '"'"'${archive}_filename'"'"' variable is not defined")'
echo 'endif()'
echo ''
echo 'if(NOT DEFINED "${archive}_sha256")'
echo ' message(FATAL_ERROR "Could you make sure variable '"'"'${archive}_sha256'"'"' is defined ?")'
echo 'endif()'
echo ''
echo 'set(dcmqi_archive_filename "${${archive}_filename}")'
echo 'set(dcmqi_archive_sha256 "${${archive}_sha256}")'
echo ''
echo 'set(dcmqi_archive_url "https://github.com/QIICR/dcmqi/releases/download/v${version}/${dcmqi_archive_filename}")'
} > dcmqiUrls.cmake
# Configure git and create branch
git config user.name "github-actions[bot]"
git config user.email "github-actions[bot]@users.noreply.github.com"
branch="dcmqi-v${latest_version}"
git checkout -b "$branch"
git add dcmqiUrls.cmake
git commit -m "feat: update dcmqi from version v$current_version to v$latest_version"
git push origin "$branch"
gh pr create \
--title "feat: update dcmqi from v$current_version to v$latest_version" \
--body "## Summary
- Updates packaged dcmqi binaries from v$current_version to v$latest_version
- SHA256 checksums computed from downloaded release assets
**Upstream release:** https://github.com/QIICR/dcmqi/releases/tag/$latest_tag
---
*This PR was automatically created by the update-dcmqi workflow.*"