Skip to content

ci: add native GitHub Actions pipeline + nSpect/scan GitLab trigger#1841

Open
nv-nmailhot wants to merge 5 commits into
mainfrom
nmailhot/nixl-ci-nspect-pipeline
Open

ci: add native GitHub Actions pipeline + nSpect/scan GitLab trigger#1841
nv-nmailhot wants to merge 5 commits into
mainfrom
nmailhot/nixl-ci-nspect-pipeline

Conversation

@nv-nmailhot

@nv-nmailhot nv-nmailhot commented Jun 26, 2026

Copy link
Copy Markdown
Contributor

Add the nixl GitHub Actions CI that replaces the GitLab build pipeline (runs on the velonix AWS runners):

  • version: compute release/dev version (pyproject on release/** builds)
  • build: matrix of manylinux wheel builds (cu12/cu13, x86/arm) + the runtime container, images pushed to ECR, dist/ extracted as artifacts
  • upload-x86-wheels / upload-arm-wheels / upload-crates: release-only uploads to internal Artifactory (JFrog CLI / cargo), manual-approval environment
  • trigger-gitlab-nspect: on release/** builds, triggers the nixl-ci GitLab pipeline that runs nSpect registration + wheel scans (NSPECT-WO64-8O3P)

Follow-on to #1832 (INFINIA wheel build). Pushing the built container to the Artifactory docker registry is a separate follow-up PR.

What?

Describe what this PR is doing.

Why?

Justification for the PR. If there is an existing issue/bug, please reference it. For
bug fixes, the 'Why?' and 'What?' can be merged into a single item.

How?

It is optional, but for complex PRs, please provide information about the design,
architecture, approach, etc.

Summary by CodeRabbit

  • New Features
    • Added a GitHub Actions CI workflow for pull requests, pushes to main and release branches, plus manual release-build dispatch (including optional security scanning).
    • Release builds now generate a version artifact, build/push multi-architecture container images, and publish wheels to Artifactory; crates are published with an auto “release-candidate” version suffix.
    • On release branch pushes, the workflow triggers the related GitLab pipeline and summarizes results in the run output.
  • Bug Fixes
    • Improved the manylinux liburing build/install to compile and install only the needed library components for the environment.
  • Chores
    • Added repository runner-label configuration to keep workflow runner labels recognized by actionlint.

Add the nixl GitHub Actions CI that replaces the GitLab build pipeline (runs on
the velonix AWS runners):
- version: compute release/dev version (pyproject on release/** builds)
- build: matrix of manylinux wheel builds (cu12/cu13, x86/arm) + the runtime
  container, images pushed to ECR, dist/ extracted as artifacts
- upload-x86-wheels / upload-arm-wheels / upload-crates: release-only uploads to
  internal Artifactory (JFrog CLI / cargo), manual-approval environment
- trigger-gitlab-nspect: on release/** builds, triggers the nixl-ci GitLab
  pipeline that runs nSpect registration + wheel scans (NSPECT-WO64-8O3P)

Follow-on to #1832 (INFINIA wheel build). Pushing the built container to the
Artifactory docker registry is a separate follow-up PR.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@coderabbitai

coderabbitai Bot commented Jun 26, 2026

Copy link
Copy Markdown

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Enterprise

Run ID: c39e5dbf-4de8-49c1-94a2-e512b5af2f0f

📥 Commits

Reviewing files that changed from the base of the PR and between cf6eb8c and 0816b58.

📒 Files selected for processing (1)
  • .github/workflows/ci.yml

📝 Walkthrough

Walkthrough

Adds a GitHub Actions CI workflow, actionlint runner-label config, and a manylinux liburing build adjustment. The workflow computes a version, builds and pushes matrix Docker images, uploads wheel artifacts, publishes release wheels and crates, and triggers a GitLab pipeline on release-branch pushes.

Changes

GitHub Actions CI migration

Layer / File(s) Summary
Runner labels and workflow entry
.github/actionlint.yaml, .github/workflows/ci.yml
Actionlint runner labels and the workflow triggers, concurrency, permissions, and RELEASE_BUILD environment are defined.
Version job
.github/workflows/ci.yml
The version job checks out the repository, computes a release or development VERSION string, writes version.txt, and uploads the artifact.
Build matrix and manylinux liburing step
.github/workflows/ci.yml, contrib/Dockerfile.manylinux
The build job runs the variant matrix, builds and pushes images to ECR, extracts wheel artifacts, validates dist, uploads per-variant artifacts, and changes the manylinux liburing install step to use src-only build targets.
Wheel release uploads
.github/workflows/ci.yml
The release jobs download wheel artifacts and upload x86 and ARM wheels to JFrog Artifactory with release metadata and container cleanup.
Crate release publishing
.github/workflows/ci.yml
The release job rewrites Cargo.toml with an rc version suffix, runs cargo check, and publishes crates to the sparse registry with the cargo token.
GitLab scan trigger
.github/workflows/ci.yml
Release branch pushes trigger the GitLab pipeline, parse the response, write the job summary, and set ENABLE_WHEEL_SCAN from workflow input.

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~45 minutes

Possibly related PRs

  • ai-dynamo/nixl#1814: This PR touches the same GitHub Actions workflow and actionlint runner-label setup, but in the opposite direction.
  • ai-dynamo/nixl#1832: This PR also changes contrib/Dockerfile.manylinux around the liburing build/install path.

Suggested reviewers

  • brminich
  • ovidiusm
  • dynamo-ops

Poem

A bunny hops where workflows gleam,
Versions tagged in a tidy stream.
Wheels in the burrow, crates in tow,
A GitLab scan gets a friendly hello.
Thump-thump — the CI moonlight shines 🌙🐇

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Title check ✅ Passed The title clearly summarizes the main change: a native GitHub Actions CI pipeline plus the GitLab nSpect/scan trigger.
Description check ✅ Passed The description covers What/Why/How at a high level and includes the key workflow components and follow-up context.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch nmailhot/nixl-ci-nspect-pipeline

Comment @coderabbitai help to get the list of available commands.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 5

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In @.github/workflows/ci.yml:
- Around line 34-37: The workflow input security_scan is defined in the dispatch
inputs but never consumed, so it has no effect. Update the ci.yml workflow so
the security_scan value is actually wired into trigger-gitlab-nspect or a
relevant job condition/GitLab variable mapping, using the existing security_scan
input symbol consistently; if it is not intended to control anything, remove the
input instead.
- Around line 198-206: The wheel upload jobs are missing the manual release
approval gate, so they can publish on release branch pushes without the intended
protection. Update the wheel upload workflows in the upload-x86-wheels and the
other wheel upload job blocks so they use the same release environment gating as
upload-crates, ensuring Artifactory uploads only proceed after approval. Keep
the existing release_build/ref conditions, but add the release environment
protection consistently to each wheel publish job.
- Around line 25-27: The workflow currently triggers on tag pushes but the
release gating logic in the CI jobs still treats those runs as dev builds, so
tagged releases skip the release-only path. Update the workflow logic in the CI
configuration so tag refs are handled consistently with release events by either
removing the tag trigger from the push section or making RELEASE_BUILD and the
related versioning/job conditions recognize refs/tags/v* in the same way as
release branches. Use the existing CI workflow conditions and release/version
computation blocks to align the behavior across all affected jobs.
- Line 21: The CI workflow is currently allowing pull_request runs to execute
publishing jobs on IRSA-enabled self-hosted runners, which exposes registry and
infrastructure access to PR-controlled code. Update the workflow logic in the CI
job definitions and publishing steps so that jobs like the ones tied to the
current workflow, Docker/ECR publish, and release actions only run on trusted
events such as push/tag/release, or route pull request validation to isolated
non-publishing runners. Use the existing job names and publish-related steps in
the workflow to gate or split the execution paths.
- Line 68: The workflow still uses mutable action tags, so update every
remaining uses entry in the CI workflow to an immutable full commit SHA instead
of refs like actions/checkout@v4 or setup-node@v2. Locate the affected steps in
the ci workflow and replace each action version pin with the corresponding
commit hash so the workflow is locked to exact revisions.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Enterprise

Run ID: f2a9c564-591d-48ee-9549-198125506d42

📥 Commits

Reviewing files that changed from the base of the PR and between d058c5c and cc82961.

📒 Files selected for processing (2)
  • .github/actionlint.yaml
  • .github/workflows/ci.yml

Comment thread .github/workflows/ci.yml
Comment thread .github/workflows/ci.yml Outdated
Comment thread .github/workflows/ci.yml
Comment thread .github/workflows/ci.yml
outputs:
version: ${{ steps.compute.outputs.version }}
steps:
- uses: actions/checkout@v4

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🔒 Security & Privacy | 🟠 Major | ⚡ Quick win

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
set -euo pipefail

# Check whether the referenced actions are tag-pinned or already SHA-pinned in other workflow files.
rg -n 'uses:\s*[^@]+@v[0-9]+|uses:\s*[^@]+@[0-9a-f]{7,40}' .github/workflows -S

Repository: ai-dynamo/nixl

Length of output: 1603


Pin the workflow actions to immutable SHAs. The @v4/@v2 refs in .github/workflows/ci.yml are mutable; update the remaining uses: entries in this file to full commit SHAs.

🧰 Tools
🪛 zizmor (1.26.1)

[error] 68-68: unpinned action reference (unpinned-uses): action is not pinned to a hash (required by blanket policy)

(unpinned-uses)

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In @.github/workflows/ci.yml at line 68, The workflow still uses mutable action
tags, so update every remaining uses entry in the CI workflow to an immutable
full commit SHA instead of refs like actions/checkout@v4 or setup-node@v2.
Locate the affected steps in the ci workflow and replace each action version pin
with the corresponding commit hash so the workflow is locked to exact revisions.

Source: Linters/SAST tools

Comment thread .github/workflows/ci.yml
nv-nmailhot and others added 2 commits June 26, 2026 15:34
liburing 2.14's examples (zcrx.c) include linux/udmabuf.h, which isn't in the
manylinux_2_28 (EL8) kernel headers, so a full `make` fails the build. Build and
install only the library (make -C src) — that's all the wheel/INFINIA link needs.
Fixes the manylinux build regression from the 2.6->2.14 bump in #1832.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- Remove the push: tags: ['v*'] trigger: release is gated on release/** branches,
  so tag pushes only produced a dev-version build that skipped the release jobs.
- Gate version/build with a same-repo guard so untrusted fork-PR code does not run
  on the self-hosted IRSA-backed builders (which have ECR write + publish). Push,
  workflow_dispatch, and same-repo (collaborator) PRs still run.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@nv-nmailhot nv-nmailhot requested a review from a team as a code owner June 26, 2026 22:34
Fold the sw-dynamo container push into this PR so #1841 carries the full set:
native build + nSpect/scan trigger, the liburing manylinux fix, the CodeRabbit
fixes, and the release-gated runtime-container push to
artifactory.nvidia.com/sw-dynamo-nixl-docker-local (reusing ARTIFACTORY_URL +
ARTIFACTORY_PYPI_TOKEN, docker login as nmailhot). Push path verified green via
the reachability test.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 3

♻️ Duplicate comments (1)
.github/workflows/ci.yml (1)

207-208: 🗄️ Data Integrity & Integration | 🟠 Major | 🏗️ Heavy lift

Put the runtime container publish behind the release approval gate.

This Artifactory push runs inside build, which is not protected by the release environment in the provided context. Split this into a release-only publish job with environment: release, or otherwise apply the same approval gate before docker push.

Also applies to: 236-238

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In @.github/workflows/ci.yml around lines 207 - 208, The runtime container
publish step is currently running in the build flow without the protected
release approval gate. Move the Artifactory push logic out of the existing build
job into a separate release-only publish job in the workflow, and set that job
to use the release environment so approval is required before any docker push
occurs. Use the existing “Push runtime container to Artifactory” step and the
related publish steps around the referenced build/push flow as the anchors when
splitting the job.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In @.github/workflows/ci.yml:
- Around line 21-22: The runtime-container publish path is still tied to a
personal Artifactory user and a PyPI-scoped token, so update the Docker
login/push steps in the CI workflow to use Docker-specific service-account
secrets instead. Replace the hard-coded nmailhot username and the reused
ARTIFACTORY_PYPI_TOKEN with dedicated Docker credentials referenced by the
publish job, and make sure the affected runtime-container and related push steps
use those new secret names consistently.
- Around line 234-238: The Docker publish step leaves Artifactory credentials
behind after docker login, so update the CI step to always clean up the registry
auth once pushing is done. In the workflow block that computes AF_HOST and
AF_IMAGE and then runs docker login/tag/push, add a trap or equivalent cleanup
so docker logout is executed regardless of success or failure, ensuring
self-hosted runners do not retain credentials.
- Around line 216-232: The publish tag is recomputing UCX_SHA from the floating
UCX_REF instead of reusing the exact UCX commit used during the build. Update
the CI workflow so the build step captures the resolved UCX commit and passes it
through as an output/env value, then have the publish/tagging logic use that
stored commit when constructing TAG and related properties. Use the existing
UCX_REF, UCX_SHA, and tag assembly block as the anchor for this change.

---

Duplicate comments:
In @.github/workflows/ci.yml:
- Around line 207-208: The runtime container publish step is currently running
in the build flow without the protected release approval gate. Move the
Artifactory push logic out of the existing build job into a separate
release-only publish job in the workflow, and set that job to use the release
environment so approval is required before any docker push occurs. Use the
existing “Push runtime container to Artifactory” step and the related publish
steps around the referenced build/push flow as the anchors when splitting the
job.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Enterprise

Run ID: c84197eb-32f3-4c5b-9caa-797fb92bb195

📥 Commits

Reviewing files that changed from the base of the PR and between 06afb36 and cf6eb8c.

📒 Files selected for processing (1)
  • .github/workflows/ci.yml

Comment thread .github/workflows/ci.yml
Comment on lines +21 to +22
# (The runtime-container push reuses ARTIFACTORY_URL + ARTIFACTORY_PYPI_TOKEN — same
# sw-dynamo project as the wheel upload — with docker login as user 'nmailhot'.)

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🔒 Security & Privacy | 🟠 Major | ⚡ Quick win

Use Docker-scoped service-account credentials.

The runtime Docker publish path hard-codes nmailhot and reuses ARTIFACTORY_PYPI_TOKEN. Move both username and token to Docker-specific service-account secrets to avoid personal credential coupling and over-broad token scope.

Suggested change
-          ARTIFACTORY_TOKEN: ${{ secrets.ARTIFACTORY_PYPI_TOKEN }}
-          AF_USERNAME: nmailhot
+          ARTIFACTORY_TOKEN: ${{ secrets.ARTIFACTORY_DOCKER_TOKEN }}
+          AF_USERNAME: ${{ secrets.ARTIFACTORY_DOCKER_USERNAME }}

Also applies to: 210-214

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In @.github/workflows/ci.yml around lines 21 - 22, The runtime-container publish
path is still tied to a personal Artifactory user and a PyPI-scoped token, so
update the Docker login/push steps in the CI workflow to use Docker-specific
service-account secrets instead. Replace the hard-coded nmailhot username and
the reused ARTIFACTORY_PYPI_TOKEN with dedicated Docker credentials referenced
by the publish job, and make sure the affected runtime-container and related
push steps use those new secret names consistently.

Comment thread .github/workflows/ci.yml
Comment on lines +216 to +232
UCX_REF: v1.21.x
BASE_IMAGE_TAG: ${{ matrix.base_image_tag }}
ARCH: ${{ matrix.arch }}
RELEASE_VERSION: ${{ needs.version.outputs.version }}
run: |
set -e
# 8-char nixl + UCX commit SHAs (matches the Jenkins tag scheme).
NIXL_SHA="$(git rev-parse --short=8 HEAD)"
if [[ "$UCX_REF" =~ ^[a-f0-9]{8,40}$ ]]; then
UCX_SHA="${UCX_REF:0:8}"
else
UCX_SHA="$(git ls-remote https://github.com/openucx/ucx.git "$UCX_REF" | head -n1 | cut -c1-8)"
fi
[ -n "$UCX_SHA" ] || { echo "ERROR: could not resolve UCX_REF=$UCX_REF"; exit 1; }
# Suffix = release version (mirrors the Jenkins TAG_SUFFIX, e.g. -v1.0.1-rc2).
SUFFIX="${RELEASE_VERSION:+-v${RELEASE_VERSION}}"
TAG="${BASE_IMAGE_TAG}-nixl-${NIXL_SHA}-ucx-${UCX_SHA}-${ARCH}${SUFFIX}"

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🗄️ Data Integrity & Integration | 🟡 Minor | ⚡ Quick win

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
set -euo pipefail

# Check whether the runtime build consumes UCX_REF/UCX_SHA or only the publish step does.
rg -n -C3 'UCX_REF|UCX_SHA|UCX_VERSION|openucx|ucx' .github/workflows contrib

Repository: ai-dynamo/nixl

Length of output: 20243


🏁 Script executed:

#!/bin/bash
set -euo pipefail

# Inspect the CI workflow around the build and publish steps.
sed -n '160,250p' .github/workflows/ci.yml

printf '\n--- Dockerfile.manylinux UCX section ---\n'
sed -n '445,460p' contrib/Dockerfile.manylinux

printf '\n--- Dockerfile UCX section ---\n'
sed -n '176,190p' contrib/Dockerfile

Repository: ai-dynamo/nixl

Length of output: 6463


Use the UCX commit from the build for the publish tag
UCX_SHA is resolved from the floating v1.21.x ref during publish, while the image was already built earlier from whatever commit that ref pointed to at build time. Pass the resolved commit through the build and reuse it here, otherwise the ucx-<sha> tag/properties can describe a different UCX revision than the image contains.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In @.github/workflows/ci.yml around lines 216 - 232, The publish tag is
recomputing UCX_SHA from the floating UCX_REF instead of reusing the exact UCX
commit used during the build. Update the CI workflow so the build step captures
the resolved UCX commit and passes it through as an output/env value, then have
the publish/tagging logic use that stored commit when constructing TAG and
related properties. Use the existing UCX_REF, UCX_SHA, and tag assembly block as
the anchor for this change.

Comment thread .github/workflows/ci.yml
Comment on lines +234 to +238
AF_HOST="$(printf '%s' "$ARTIFACTORY_URL" | sed -E 's#^https?://##; s#/.*##')"
AF_IMAGE="${AF_HOST}/${AF_REPO}/nixl:${TAG}"
echo "$ARTIFACTORY_TOKEN" | docker login "$AF_HOST" -u "$AF_USERNAME" --password-stdin
docker tag "$IMAGE_NAME" "$AF_IMAGE"
docker push "$AF_IMAGE"

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🔒 Security & Privacy | 🟠 Major | ⚡ Quick win

Clean up Docker registry credentials after the push.

docker login writes the Artifactory token to Docker config, but the step never logs out. Add a trap so self-hosted runners do not retain publish credentials after success or failure.

Suggested change
           AF_HOST="$(printf '%s' "$ARTIFACTORY_URL" | sed -E 's#^https?://##; s#/.*##')"
           AF_IMAGE="${AF_HOST}/${AF_REPO}/nixl:${TAG}"
+          trap 'docker logout "$AF_HOST" >/dev/null 2>&1 || true' EXIT
           echo "$ARTIFACTORY_TOKEN" | docker login "$AF_HOST" -u "$AF_USERNAME" --password-stdin
           docker tag "$IMAGE_NAME" "$AF_IMAGE"
           docker push "$AF_IMAGE"
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
AF_HOST="$(printf '%s' "$ARTIFACTORY_URL" | sed -E 's#^https?://##; s#/.*##')"
AF_IMAGE="${AF_HOST}/${AF_REPO}/nixl:${TAG}"
echo "$ARTIFACTORY_TOKEN" | docker login "$AF_HOST" -u "$AF_USERNAME" --password-stdin
docker tag "$IMAGE_NAME" "$AF_IMAGE"
docker push "$AF_IMAGE"
AF_HOST="$(printf '%s' "$ARTIFACTORY_URL" | sed -E 's#^https?://##; s#/.*##')"
AF_IMAGE="${AF_HOST}/${AF_REPO}/nixl:${TAG}"
trap 'docker logout "$AF_HOST" >/dev/null 2>&1 || true' EXIT
echo "$ARTIFACTORY_TOKEN" | docker login "$AF_HOST" -u "$AF_USERNAME" --password-stdin
docker tag "$IMAGE_NAME" "$AF_IMAGE"
docker push "$AF_IMAGE"
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In @.github/workflows/ci.yml around lines 234 - 238, The Docker publish step
leaves Artifactory credentials behind after docker login, so update the CI step
to always clean up the registry auth once pushing is done. In the workflow block
that computes AF_HOST and AF_IMAGE and then runs docker login/tag/push, add a
trap or equivalent cleanup so docker logout is executed regardless of success or
failure, ensuring self-hosted runners do not retain credentials.

…scan)

- Add the manual-approval 'release' environment to upload-x86-wheels and
  upload-arm-wheels (previously only upload-crates/trigger had it, so wheel
  uploads published to Artifactory without the approval gate).
- Wire the security_scan workflow_dispatch input into the GitLab trigger's
  ENABLE_WHEEL_SCAN variable (was hardcoded true / input was dead). Defaults
  true on release/** pushes; on workflow_dispatch it honors the input.

(SHA-pinning of actions intentionally not changed — consistent with the prior
decision on #1803.)

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@copy-pr-bot copy-pr-bot Bot deployed to SWX_AWS June 27, 2026 00:28 Active
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant