Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 21 additions & 1 deletion .github/workflows/deployments.yml
Original file line number Diff line number Diff line change
Expand Up @@ -869,6 +869,26 @@ jobs:
environment: ghcr-deployment
run_validation: false # validation runs in the Validation workflow

realtime_binaries:
Comment thread
mitchdz marked this conversation as resolved.
name: Create CUDA Quantum Realtime installer
needs: metadata
if: >-
needs.metadata.outputs.create_packages == 'true'
&& ! inputs.devcontainer_only
strategy:
matrix:
platform: [amd64, arm64]
cuda_version: ["12.6", "13.0"]
fail-fast: false
uses: ./.github/workflows/realtime_prebuilt_binaries.yml
secrets:
DOCKERHUB_USERNAME: ${{ secrets.DOCKERHUB_USERNAME }}
DOCKERHUB_READONLY_TOKEN: ${{ secrets.DOCKERHUB_READONLY_TOKEN }}
with:
platform: ${{ matrix.platform }}
cuda_version: ${{ matrix.cuda_version }}
environment: ghcr-deployment

macos_ci:
name: macOS CI
needs: metadata
Expand All @@ -884,7 +904,7 @@ jobs:
# Deployments; this job is the opt-in path for manual dispatches.
trigger_validation:
name: Trigger Validation
needs: [summary, python_wheels, binaries]
needs: [summary, python_wheels, binaries, realtime_binaries]
if: inputs.run_validation_after
runs-on: ubuntu-latest
permissions:
Expand Down
71 changes: 70 additions & 1 deletion .github/workflows/validation.yml
Original file line number Diff line number Diff line change
Expand Up @@ -632,6 +632,61 @@ jobs:
retention-days: 1
if-no-files-found: error

realtime_artifacts:
name: Realtime installers
needs: metadata
runs-on: ubuntu-latest
permissions:
actions: read

outputs:
has_realtime_installers: ${{ steps.fetch.outputs.has_realtime_installers }}

steps:
- name: Fetch realtime installers from Deployments run
id: fetch
run: |
retry() { for n in 1 2 3; do "$@" && return 0; [ $n -lt 3 ] && sleep $((15*n*n)); done; return 1; }
artifacts_url="${{ needs.metadata.outputs.artifacts_url }}"
if [ -z "$artifacts_url" ]; then
echo "No artifacts URL available."
echo "has_realtime_installers=false" >> $GITHUB_OUTPUT
exit 0
fi

artifacts=$(retry gh api $artifacts_url --paginate -q '.artifacts[] | {name: .name, url: .archive_download_url}')

has_realtime_installers=false
mkdir -p installers

while IFS= read -r artifact; do
name=$(echo "$artifact" | jq -r '.name')
url=$(echo "$artifact" | jq -r '.url')

if [[ "$name" == install_cuda_quantum_realtime_* ]]; then
echo "Downloading realtime installer: $name"
retry gh api "$url" > "${name}.zip"
unzip "${name}.zip" -d installers/
rm "${name}.zip"
has_realtime_installers=true
fi
done <<< "$(echo "$artifacts" | jq -c '.')"

echo "has_realtime_installers=$has_realtime_installers" >> $GITHUB_OUTPUT
env:
GH_TOKEN: ${{ github.token }}

# Re-upload under a single name so create_release can pull them with one
# download step (they are built in Deployments, i.e. a different run).
- name: Upload realtime installers
if: steps.fetch.outputs.has_realtime_installers == 'true'
uses: actions/upload-artifact@v7
with:
name: realtime-installers
path: installers/
retention-days: 1
if-no-files-found: error

installer_validation:
name: Installer validation
needs: [metadata, cudaq_installers]
Expand Down Expand Up @@ -1049,7 +1104,7 @@ jobs:
name: CUDA-Q Release (draft)
# Validation jobs stay in needs so the draft runs after them, but the if:
# does not require them to pass.
needs: [metadata, cudaq_installers, cudaq_wheels, cudaq_metapackages, macos_artifacts, release_image_validation, debug_image_validation, installer_validation, wheel_validation_piponly, metapackage_validation_conda, metapackage_validation_macos]
needs: [metadata, cudaq_installers, cudaq_wheels, cudaq_metapackages, macos_artifacts, realtime_artifacts, release_image_validation, debug_image_validation, installer_validation, wheel_validation_piponly, metapackage_validation_conda, metapackage_validation_macos]
# Draft on a requested release title; tolerate validation flakes but require
# the build jobs (nothing to attach otherwise).
if: >-
Expand Down Expand Up @@ -1078,6 +1133,13 @@ jobs:
pattern: '*-wheels'
path: wheelhouse

- name: Download CUDA-Q Realtime installer
if: needs.realtime_artifacts.outputs.has_realtime_installers == 'true'
uses: actions/download-artifact@v8
with:
name: realtime-installers
path: installers

- name: Download CUDA-Q metapackages
uses: actions/download-artifact@v8
with:
Expand Down Expand Up @@ -1128,6 +1190,13 @@ jobs:
rel_notes+="<br/>:warning: Created despite one or more validation failures; review the Validation run before publishing."
fi

# Realtime installers are built in Deployments, so a gap there would
# otherwise cut a release without them and go unnoticed.
if [ "${{ needs.realtime_artifacts.outputs.has_realtime_installers }}" != "true" ]; then
echo "::warning::No realtime installers found in the deployment run."
rel_notes+="<br/>:warning: No realtime installers were attached; check the Deployments run."
fi

gh release create $release_id --title $release_id -R ${{ github.repository }} \
--target $github_commit --draft $prerelease \
--generate-notes --notes-start-tag $latest_tag --notes "$rel_notes"
Expand Down
Loading