From 2a63432c878852543d8bbc62863dc9b5daf5c76c Mon Sep 17 00:00:00 2001 From: Veera Rajasekhar Reddy Gopu Date: Thu, 30 Apr 2026 22:34:09 +0000 Subject: [PATCH 01/18] CI: auto-trigger AITER prebuilt upload on 3rdparty/aiter updates --- .github/scripts/aiter_prebuild_upload.sh | 108 +++++++++++++++++++- .github/workflows/aiter-prebuilt-upload.yml | 36 +++++-- .github/workflows/rocm-ci-dispatch.yml | 48 ++++++++- .github/workflows/rocm-ci.yml | 16 +++ .github/workflows/rocm-wheels-build.yml | 17 ++- 5 files changed, 213 insertions(+), 12 deletions(-) diff --git a/.github/scripts/aiter_prebuild_upload.sh b/.github/scripts/aiter_prebuild_upload.sh index 473ef1c75..62e66ca76 100755 --- a/.github/scripts/aiter_prebuild_upload.sh +++ b/.github/scripts/aiter_prebuild_upload.sh @@ -7,8 +7,112 @@ set -euo pipefail # Inputs for upload (optional): # NVTE_AITER_PREBUILT_BASE_URL - base URL for prebuilts # NVTE_AITER_PREBUILT_UPLOAD_TOKEN - bearer token for Artifactory -# Optional flag: -# --build : build aiter libs before packaging/uploading; default is package-only. +# Optional flags: +# --preflight --upload +# Validate upload path: Artifactory ping, then HEAD on the probe URL with the bearer token. +# Use in CI before uploading prebuilts. +# --preflight --download +# Validate download path: same ping, then HEAD on the probe URL without credentials. +# Matches what CMake file(DOWNLOAD) sees when fetching prebuilts (no token). +# --build : build AITER libs before packaging/uploading; default is package-only. + +_aiter_set_artifactory_check_urls() { + if [[ -z "${NVTE_AITER_PREBUILT_BASE_URL:-}" ]]; then + echo "Missing vars.NVTE_AITER_PREBUILT_BASE_URL" >&2 + exit 1 + fi + local BASE="${NVTE_AITER_PREBUILT_BASE_URL%/}" + local ROOT_PREFIX="${BASE%%/artifactory/*}" + _AITER_ARTIFACTORY_SYSTEM_PING_URL="${ROOT_PREFIX}/artifactory/api/system/ping" + _AITER_PREBUILT_BASE_ACCESS_PROBE_URL="${BASE}/__aiter_repo_access_probe_not_a_real_artifact" +} + +_aiter_curl_artifactory_system_ping() { + echo "[AITER-PREBUILT] Preflight: GET ${_AITER_ARTIFACTORY_SYSTEM_PING_URL} ..." + curl -fsS --connect-timeout 25 --max-time 60 "${_AITER_ARTIFACTORY_SYSTEM_PING_URL}" >/dev/null +} + +_aiter_check_artifactory_upload() { + _aiter_set_artifactory_check_urls + if [[ -z "${NVTE_AITER_PREBUILT_UPLOAD_TOKEN:-}" ]]; then + echo "Missing secrets.AITER_ARTIFACTORY_TOKEN" >&2 + exit 1 + fi + _aiter_curl_artifactory_system_ping + echo "[AITER-PREBUILT] Preflight (upload): HEAD ${_AITER_PREBUILT_BASE_ACCESS_PROBE_URL} (authenticated) ..." + local code + code="$(curl -sS -o /dev/null -w "%{http_code}" --connect-timeout 25 --max-time 90 \ + -H "Authorization: Bearer ${NVTE_AITER_PREBUILT_UPLOAD_TOKEN}" \ + -I "${_AITER_PREBUILT_BASE_ACCESS_PROBE_URL}" || true)" + case "${code}" in + 404|200) + echo "[AITER-PREBUILT] Preflight OK (upload; HTTP ${code})." + ;; + 401) + echo "Preflight: HTTP 401 - invalid or expired token." >&2 + exit 1 + ;; + 403) + echo "Preflight: HTTP 403 - token cannot access this repository path." >&2 + exit 1 + ;; + 000|'') + echo "Preflight: no HTTP response for HEAD probe." >&2 + exit 1 + ;; + *) + echo "Preflight: unexpected HTTP ${code} for HEAD ${_AITER_PREBUILT_BASE_ACCESS_PROBE_URL}." >&2 + exit 1 + ;; + esac +} + +_aiter_check_artifactory_download() { + _aiter_set_artifactory_check_urls + _aiter_curl_artifactory_system_ping + echo "[AITER-PREBUILT] Preflight (download): HEAD ${_AITER_PREBUILT_BASE_ACCESS_PROBE_URL} (anonymous; CMake file(DOWNLOAD)) ..." + local code + code="$(curl -sS -o /dev/null -w "%{http_code}" --connect-timeout 25 --max-time 90 \ + -I "${_AITER_PREBUILT_BASE_ACCESS_PROBE_URL}" || true)" + case "${code}" in + 404|200) + echo "[AITER-PREBUILT] Preflight OK (download; HTTP ${code})." + ;; + 401) + echo "Preflight: HTTP 401 - anonymous read denied (CMake download may fail)." >&2 + exit 1 + ;; + 403) + echo "Preflight: HTTP 403 - anonymous access forbidden for this path." >&2 + exit 1 + ;; + 000|'') + echo "Preflight: no HTTP response for HEAD probe." >&2 + exit 1 + ;; + *) + echo "Preflight: unexpected HTTP ${code} for HEAD ${_AITER_PREBUILT_BASE_ACCESS_PROBE_URL}." >&2 + exit 1 + ;; + esac +} + +if [[ "${1:-}" == "--preflight" ]]; then + shift + case "${1:-}" in + --upload) + _aiter_check_artifactory_upload + ;; + --download) + _aiter_check_artifactory_download + ;; + *) + echo "Usage: $(basename "$0") --preflight --upload | --preflight --download" >&2 + exit 1 + ;; + esac + exit 0 +fi # Derive ROCm version and aiter commit -> cache key ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)" diff --git a/.github/workflows/aiter-prebuilt-upload.yml b/.github/workflows/aiter-prebuilt-upload.yml index a45350a79..c7b5d4b6d 100644 --- a/.github/workflows/aiter-prebuilt-upload.yml +++ b/.github/workflows/aiter-prebuilt-upload.yml @@ -10,10 +10,19 @@ on: description: "Docker image" required: false default: "" + workflow_call: + inputs: + docker_image: + description: "Docker image URI from rocm-ci select_image.outputs.image-tag" + required: true + type: string jobs: upload: runs-on: build-only-te + env: + NVTE_AITER_PREBUILT_BASE_URL: ${{ vars.NVTE_AITER_PREBUILT_BASE_URL }} + NVTE_AITER_PREBUILT_UPLOAD_TOKEN: ${{ secrets.AITER_ARTIFACTORY_TOKEN }} steps: - name: Checkout source uses: actions/checkout@v6 @@ -22,9 +31,27 @@ jobs: submodules: recursive fetch-depth: 0 + # Fails early if the prebuilt artifact URL is unreachable or upload credentials are invalid + - name: Validate prebuilt upload to Artifactory + run: | + set -euo pipefail + bash .github/scripts/aiter_prebuild_upload.sh --preflight --upload + - name: Resolve docker image id: cfg run: | + set -euo pipefail + EVENT="${{ github.event_name }}" + if [ "$EVENT" = "workflow_call" ]; then + IMAGE="${{ inputs.docker_image }}" + if [ -z "$IMAGE" ]; then + echo "workflow_call requires non-empty docker_image." >&2 + exit 1 + fi + echo "Using docker_image from caller." + echo "image=${IMAGE}" >> "$GITHUB_OUTPUT" + exit 0 + fi IMAGE="${{ inputs.docker_image }}" if [ -z "$IMAGE" ]; then IMAGE="${{ vars.DEV_DOCKER_IMAGE }}" @@ -33,7 +60,7 @@ jobs: echo "No docker image provided and vars.DEV_DOCKER_IMAGE is empty." >&2 exit 1 fi - echo "image=${IMAGE}" >> $GITHUB_OUTPUT + echo "image=${IMAGE}" >> "$GITHUB_OUTPUT" - name: Pull docker image run: docker pull ${{ steps.cfg.outputs.image }} @@ -50,19 +77,12 @@ jobs: ${{ steps.cfg.outputs.image }} - name: Build and upload aiter prebuilt - env: - NVTE_AITER_PREBUILT_BASE_URL: https://compute-artifactory.amd.com:5000/artifactory/rocm-generic-local/te-ci/aiter-prebuilts - NVTE_AITER_PREBUILT_UPLOAD_TOKEN: ${{ secrets.AITER_ARTIFACTORY_TOKEN }} run: | docker exec \ -e NVTE_AITER_PREBUILT_BASE_URL=${NVTE_AITER_PREBUILT_BASE_URL} \ -e NVTE_AITER_PREBUILT_UPLOAD_TOKEN=${NVTE_AITER_PREBUILT_UPLOAD_TOKEN} \ te-aiter-upload bash -c "$(cat <<'EOF' set -ex - if [ -z "${NVTE_AITER_PREBUILT_UPLOAD_TOKEN}" ]; then - echo "Missing secrets.AITER_ARTIFACTORY_TOKEN" >&2 - exit 1 - fi export HIP_PATH="" git config --global --add safe.directory '*' bash .github/scripts/aiter_prebuild_upload.sh --build diff --git a/.github/workflows/rocm-ci-dispatch.yml b/.github/workflows/rocm-ci-dispatch.yml index e679ece46..2dac3d216 100644 --- a/.github/workflows/rocm-ci-dispatch.yml +++ b/.github/workflows/rocm-ci-dispatch.yml @@ -12,6 +12,51 @@ permissions: contents: read jobs: + # To determine whether to upload AITER prebuilt to Artifactory + aiter_upload_trigger: + name: PR - set trigger_aiter_upload + runs-on: ubuntu-latest + outputs: + trigger_aiter_upload: ${{ steps.set.outputs.trigger_aiter_upload }} + steps: + - uses: actions/checkout@v6 + with: + fetch-depth: 0 + + - uses: dorny/paths-filter@v3 + id: paths + if: github.event.action == 'synchronize' + with: + filters: | + aiter: + - '3rdparty/aiter/**' + + - name: Detect skip_aiter_upload label + id: skip_label + uses: actions/github-script@v8 + with: + script: | + const labels = context.payload.pull_request?.labels || []; + const skip = labels.some((l) => l.name === 'skip_aiter_upload'); + core.setOutput('skip', skip ? 'true' : 'false'); + + - id: set + run: | + set -euo pipefail + if [ '${{ github.event.action }}' != "synchronize" ]; then + echo "trigger_aiter_upload=false" >> "$GITHUB_OUTPUT" + exit 0 + fi + if [ '${{ steps.skip_label.outputs.skip }}' = 'true' ]; then + echo "trigger_aiter_upload=false" >> "$GITHUB_OUTPUT" + exit 0 + fi + if [ "${{ steps.paths.outputs.aiter }}" = "true" ]; then + echo "trigger_aiter_upload=true" >> "$GITHUB_OUTPUT" + else + echo "trigger_aiter_upload=false" >> "$GITHUB_OUTPUT" + fi + determine_level: runs-on: ubuntu-latest outputs: @@ -53,9 +98,10 @@ jobs: # - A commit was pushed with existing ci-level label(s) # - The PR was reopened or opened with existing ci-level label(s) if: ${{ needs.determine_level.outputs.test_level != '' }} - needs: determine_level + needs: [determine_level, aiter_upload_trigger] name: CI Level ${{ needs.determine_level.outputs.test_level }} uses: ./.github/workflows/rocm-ci.yml secrets: inherit with: test_level: ${{ needs.determine_level.outputs.test_level }} + trigger_aiter_upload: ${{ needs.aiter_upload_trigger.outputs.trigger_aiter_upload == 'true' }} diff --git a/.github/workflows/rocm-ci.yml b/.github/workflows/rocm-ci.yml index 5e0ae242c..51414a461 100644 --- a/.github/workflows/rocm-ci.yml +++ b/.github/workflows/rocm-ci.yml @@ -26,6 +26,11 @@ on: required: false default: false type: boolean + trigger_aiter_upload: + description: 'True when 3rdparty/aiter changed on the PR (set by rocm-ci-dispatch)' + required: false + default: false + type: boolean workflow_dispatch: inputs: test_level: @@ -99,8 +104,19 @@ jobs: echo "Selected image: $IMAGE_TO_USE" echo "image-tag=$IMAGE_TO_USE" >> $GITHUB_OUTPUT + upload_aiter_prebuilt: + name: Build and upload AITER prebuilt + needs: select_image + if: ${{ (github.event_name == 'workflow_call' && inputs.trigger_aiter_upload == 'true') }} + uses: ./.github/workflows/aiter-prebuilt-upload.yml + with: + docker_image: ${{ needs.select_image.outputs.image-tag }} + secrets: inherit + build: # Delegate wheel building to the reusable workflow on dev. It produces a core .whl plus framework .tar.gz sdists under artifact name `te-rocm-wheels`. + needs: [select_image, upload_aiter_prebuilt] + if: always() && needs.select_image.result == 'success' && (needs.upload_aiter_prebuilt.result == 'skipped' || needs.upload_aiter_prebuilt.result == 'success') uses: ./.github/workflows/rocm-wheels-build.yml secrets: inherit diff --git a/.github/workflows/rocm-wheels-build.yml b/.github/workflows/rocm-wheels-build.yml index c1a8ea087..ba93ecbbf 100644 --- a/.github/workflows/rocm-wheels-build.yml +++ b/.github/workflows/rocm-wheels-build.yml @@ -76,6 +76,8 @@ jobs: build-rocm-wheels: name: Build ROCm Docker image and TransformerEngine wheels runs-on: build-only-te + env: + NVTE_AITER_PREBUILT_BASE_URL: ${{ vars.NVTE_AITER_PREBUILT_BASE_URL }} steps: - name: Checkout repository @@ -89,6 +91,19 @@ jobs: 3rdparty/QoLA \ 3rdparty/hipify_torch + # Verify this runner can reach Artifactory for anonymous prebuilt downloads (informational; does not fail CI). + - name: Artifactory reachability from build runner + if: ${{ inputs.use_prebuilt_aiter }} + continue-on-error: true + run: | + set -euo pipefail + if bash .github/scripts/aiter_prebuild_upload.sh --preflight --download; then + echo "::notice::build-only-te can reach prebuilt Artifactory for downloads." + exit 0 + fi + echo "::warning::Prebuilt Artifactory check failed on build-only-te - see script output above." + exit 1 + - name: Derive Docker image tag id: set-tag run: | @@ -187,7 +202,7 @@ jobs: # The container writes all wheels and logs under /wheelhouse. - name: Build TransformerEngine wheels run: | - NVTE_AITER_PREBUILT_BASE_URL="https://compute-artifactory.amd.com:5000/artifactory/rocm-generic-local/te-ci/aiter-prebuilts" + set -euo pipefail docker run --rm \ --env LOCAL_TREE_BUILD=1 \ --env NVTE_SKIP_SUBMODULE_CHECKS_DURING_BUILD=1 \ From 8cb05ea095769be93d3af29737ed0c99f0a7ae3c Mon Sep 17 00:00:00 2001 From: Veera Rajasekhar Reddy Gopu Date: Thu, 30 Apr 2026 23:05:43 +0000 Subject: [PATCH 02/18] Updated step names --- .github/workflows/rocm-ci-dispatch.yml | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) diff --git a/.github/workflows/rocm-ci-dispatch.yml b/.github/workflows/rocm-ci-dispatch.yml index 2dac3d216..4699edd80 100644 --- a/.github/workflows/rocm-ci-dispatch.yml +++ b/.github/workflows/rocm-ci-dispatch.yml @@ -13,16 +13,11 @@ permissions: jobs: # To determine whether to upload AITER prebuilt to Artifactory - aiter_upload_trigger: - name: PR - set trigger_aiter_upload + aiter_prebuilt_upload_trigger: runs-on: ubuntu-latest outputs: trigger_aiter_upload: ${{ steps.set.outputs.trigger_aiter_upload }} steps: - - uses: actions/checkout@v6 - with: - fetch-depth: 0 - - uses: dorny/paths-filter@v3 id: paths if: github.event.action == 'synchronize' @@ -40,7 +35,8 @@ jobs: const skip = labels.some((l) => l.name === 'skip_aiter_upload'); core.setOutput('skip', skip ? 'true' : 'false'); - - id: set + - name: Set aiter upload trigger from paths and labels + id: set run: | set -euo pipefail if [ '${{ github.event.action }}' != "synchronize" ]; then @@ -98,10 +94,10 @@ jobs: # - A commit was pushed with existing ci-level label(s) # - The PR was reopened or opened with existing ci-level label(s) if: ${{ needs.determine_level.outputs.test_level != '' }} - needs: [determine_level, aiter_upload_trigger] + needs: [determine_level, aiter_prebuilt_upload_trigger] name: CI Level ${{ needs.determine_level.outputs.test_level }} uses: ./.github/workflows/rocm-ci.yml secrets: inherit with: test_level: ${{ needs.determine_level.outputs.test_level }} - trigger_aiter_upload: ${{ needs.aiter_upload_trigger.outputs.trigger_aiter_upload == 'true' }} + trigger_aiter_upload: ${{ needs.aiter_prebuilt_upload_trigger.outputs.trigger_aiter_upload == 'true' }} From 52be5b1f95d1604acbaef56fb1ba8c60e4c9d20e Mon Sep 17 00:00:00 2001 From: Veera Rajasekhar Reddy Gopu Date: Thu, 30 Apr 2026 23:22:43 +0000 Subject: [PATCH 03/18] Added logs to rocm-ci-dispatch.yml --- .github/workflows/rocm-ci-dispatch.yml | 27 +++++++++++++++++++++----- 1 file changed, 22 insertions(+), 5 deletions(-) diff --git a/.github/workflows/rocm-ci-dispatch.yml b/.github/workflows/rocm-ci-dispatch.yml index 4699edd80..2eefb045a 100644 --- a/.github/workflows/rocm-ci-dispatch.yml +++ b/.github/workflows/rocm-ci-dispatch.yml @@ -10,6 +10,7 @@ on: permissions: contents: read + pull-requests: read jobs: # To determine whether to upload AITER prebuilt to Artifactory @@ -18,7 +19,8 @@ jobs: outputs: trigger_aiter_upload: ${{ steps.set.outputs.trigger_aiter_upload }} steps: - - uses: dorny/paths-filter@v3 + - name: Detect PR changes under 3rdparty/aiter + uses: dorny/paths-filter@v3 id: paths if: github.event.action == 'synchronize' with: @@ -33,24 +35,39 @@ jobs: script: | const labels = context.payload.pull_request?.labels || []; const skip = labels.some((l) => l.name === 'skip_aiter_upload'); + core.info(`skip_aiter_upload label : ${skip}`); core.setOutput('skip', skip ? 'true' : 'false'); - - name: Set aiter upload trigger from paths and labels + - name: Set trigger_aiter_upload from paths and labels id: set run: | set -euo pipefail - if [ '${{ github.event.action }}' != "synchronize" ]; then + ACTION='${{ github.event.action }}' + echo "PR action=${ACTION}" + + if [ "$ACTION" != "synchronize" ]; then echo "trigger_aiter_upload=false" >> "$GITHUB_OUTPUT" + echo "Not synchronize - trigger_aiter_upload = false" exit 0 fi - if [ '${{ steps.skip_label.outputs.skip }}' = 'true' ]; then + + SKIP='${{ steps.skip_label.outputs.skip }}' + echo "skip_aiter_upload label : ${SKIP}" + + if [ "$SKIP" = 'true' ]; then echo "trigger_aiter_upload=false" >> "$GITHUB_OUTPUT" + echo "skip_aiter_upload label set - trigger_aiter_upload = false" exit 0 fi - if [ "${{ steps.paths.outputs.aiter }}" = "true" ]; then + + AITER_PATHS='${{ steps.paths.outputs.aiter }}' + + if [ "$AITER_PATHS" = "true" ]; then echo "trigger_aiter_upload=true" >> "$GITHUB_OUTPUT" + echo "3rdparty/aiter changed on PR - trigger_aiter_upload = true" else echo "trigger_aiter_upload=false" >> "$GITHUB_OUTPUT" + echo "No 3rdparty/aiter changes on PR - trigger_aiter_upload = false" fi determine_level: From 7be4b09e346bd4c6241290627040d4ff0e641586 Mon Sep 17 00:00:00 2001 From: Veera Rajasekhar Reddy Gopu Date: Fri, 1 May 2026 15:34:46 +0000 Subject: [PATCH 04/18] Updated preflight checks --- .github/scripts/aiter_prebuild_upload.sh | 60 ++++++--------------- .github/workflows/aiter-prebuilt-upload.yml | 11 ++-- .github/workflows/rocm-ci-dispatch.yml | 2 +- .github/workflows/rocm-wheels-build.yml | 8 +-- 4 files changed, 30 insertions(+), 51 deletions(-) diff --git a/.github/scripts/aiter_prebuild_upload.sh b/.github/scripts/aiter_prebuild_upload.sh index 62e66ca76..4f039264e 100755 --- a/.github/scripts/aiter_prebuild_upload.sh +++ b/.github/scripts/aiter_prebuild_upload.sh @@ -32,6 +32,20 @@ _aiter_curl_artifactory_system_ping() { curl -fsS --connect-timeout 25 --max-time 60 "${_AITER_ARTIFACTORY_SYSTEM_PING_URL}" >/dev/null } +_aiter_preflight_head_ok() { + local mode=$1 + local code=$2 + case "${code}" in + 404|200) + echo "[AITER-PREBUILT] Preflight ${mode}: HTTP ${code} (success)" + ;; + *) + echo "[AITER-PREBUILT] Preflight ${mode}: HTTP ${code} (failed)" >&2 + exit 1 + ;; + esac +} + _aiter_check_artifactory_upload() { _aiter_set_artifactory_check_urls if [[ -z "${NVTE_AITER_PREBUILT_UPLOAD_TOKEN:-}" ]]; then @@ -44,57 +58,17 @@ _aiter_check_artifactory_upload() { code="$(curl -sS -o /dev/null -w "%{http_code}" --connect-timeout 25 --max-time 90 \ -H "Authorization: Bearer ${NVTE_AITER_PREBUILT_UPLOAD_TOKEN}" \ -I "${_AITER_PREBUILT_BASE_ACCESS_PROBE_URL}" || true)" - case "${code}" in - 404|200) - echo "[AITER-PREBUILT] Preflight OK (upload; HTTP ${code})." - ;; - 401) - echo "Preflight: HTTP 401 - invalid or expired token." >&2 - exit 1 - ;; - 403) - echo "Preflight: HTTP 403 - token cannot access this repository path." >&2 - exit 1 - ;; - 000|'') - echo "Preflight: no HTTP response for HEAD probe." >&2 - exit 1 - ;; - *) - echo "Preflight: unexpected HTTP ${code} for HEAD ${_AITER_PREBUILT_BASE_ACCESS_PROBE_URL}." >&2 - exit 1 - ;; - esac + _aiter_preflight_head_ok upload "${code}" } _aiter_check_artifactory_download() { _aiter_set_artifactory_check_urls _aiter_curl_artifactory_system_ping - echo "[AITER-PREBUILT] Preflight (download): HEAD ${_AITER_PREBUILT_BASE_ACCESS_PROBE_URL} (anonymous; CMake file(DOWNLOAD)) ..." + echo "[AITER-PREBUILT] Preflight (download): HEAD ${_AITER_PREBUILT_BASE_ACCESS_PROBE_URL} (anonymous) ..." local code code="$(curl -sS -o /dev/null -w "%{http_code}" --connect-timeout 25 --max-time 90 \ -I "${_AITER_PREBUILT_BASE_ACCESS_PROBE_URL}" || true)" - case "${code}" in - 404|200) - echo "[AITER-PREBUILT] Preflight OK (download; HTTP ${code})." - ;; - 401) - echo "Preflight: HTTP 401 - anonymous read denied (CMake download may fail)." >&2 - exit 1 - ;; - 403) - echo "Preflight: HTTP 403 - anonymous access forbidden for this path." >&2 - exit 1 - ;; - 000|'') - echo "Preflight: no HTTP response for HEAD probe." >&2 - exit 1 - ;; - *) - echo "Preflight: unexpected HTTP ${code} for HEAD ${_AITER_PREBUILT_BASE_ACCESS_PROBE_URL}." >&2 - exit 1 - ;; - esac + _aiter_preflight_head_ok download "${code}" } if [[ "${1:-}" == "--preflight" ]]; then diff --git a/.github/workflows/aiter-prebuilt-upload.yml b/.github/workflows/aiter-prebuilt-upload.yml index c7b5d4b6d..7ee13a919 100644 --- a/.github/workflows/aiter-prebuilt-upload.yml +++ b/.github/workflows/aiter-prebuilt-upload.yml @@ -31,11 +31,16 @@ jobs: submodules: recursive fetch-depth: 0 - # Fails early if the prebuilt artifact URL is unreachable or upload credentials are invalid - - name: Validate prebuilt upload to Artifactory + # Verify this runner can reach Artifactory for uploads + - name: "Preflight: Artifactory upload reachability" run: | set -euo pipefail - bash .github/scripts/aiter_prebuild_upload.sh --preflight --upload + if bash .github/scripts/aiter_prebuild_upload.sh --preflight --upload; then + echo "::notice::Preflight upload reachability succeeded" + exit 0 + fi + echo "::error::Preflight upload reachability failed" + exit 1 - name: Resolve docker image id: cfg diff --git a/.github/workflows/rocm-ci-dispatch.yml b/.github/workflows/rocm-ci-dispatch.yml index 2eefb045a..7b1718608 100644 --- a/.github/workflows/rocm-ci-dispatch.yml +++ b/.github/workflows/rocm-ci-dispatch.yml @@ -20,7 +20,7 @@ jobs: trigger_aiter_upload: ${{ steps.set.outputs.trigger_aiter_upload }} steps: - name: Detect PR changes under 3rdparty/aiter - uses: dorny/paths-filter@v3 + uses: dorny/paths-filter@v4 id: paths if: github.event.action == 'synchronize' with: diff --git a/.github/workflows/rocm-wheels-build.yml b/.github/workflows/rocm-wheels-build.yml index ba93ecbbf..afaf5024f 100644 --- a/.github/workflows/rocm-wheels-build.yml +++ b/.github/workflows/rocm-wheels-build.yml @@ -91,17 +91,17 @@ jobs: 3rdparty/QoLA \ 3rdparty/hipify_torch - # Verify this runner can reach Artifactory for anonymous prebuilt downloads (informational; does not fail CI). - - name: Artifactory reachability from build runner + # Verify this runner can reach Artifactory for anonymous prebuilt downloads + - name: "Preflight: Artifactory download reachability" if: ${{ inputs.use_prebuilt_aiter }} continue-on-error: true run: | set -euo pipefail if bash .github/scripts/aiter_prebuild_upload.sh --preflight --download; then - echo "::notice::build-only-te can reach prebuilt Artifactory for downloads." + echo "::notice::Preflight download reachability succeeded" exit 0 fi - echo "::warning::Prebuilt Artifactory check failed on build-only-te - see script output above." + echo "::warning::Preflight download reachability failed" exit 1 - name: Derive Docker image tag From db63c5323cb727188f56c6391ad3b942ae5a2625 Mon Sep 17 00:00:00 2001 From: Veera Rajasekhar Reddy Gopu Date: Fri, 1 May 2026 15:45:37 +0000 Subject: [PATCH 05/18] test aiter trigger --- .github/workflows/rocm-ci-dispatch.yml | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/.github/workflows/rocm-ci-dispatch.yml b/.github/workflows/rocm-ci-dispatch.yml index 7b1718608..c387d12dc 100644 --- a/.github/workflows/rocm-ci-dispatch.yml +++ b/.github/workflows/rocm-ci-dispatch.yml @@ -24,9 +24,11 @@ jobs: id: paths if: github.event.action == 'synchronize' with: + # Include gitlink path: submodule bumps appear as `3rdparty/aiter`, not under **. filters: | aiter: - '3rdparty/aiter/**' + - '3rdparty/aiter' - name: Detect skip_aiter_upload label id: skip_label @@ -62,7 +64,7 @@ jobs: AITER_PATHS='${{ steps.paths.outputs.aiter }}' - if [ "$AITER_PATHS" = "true" ]; then + if [ "$AITER_PATHS" = "false" ]; then echo "trigger_aiter_upload=true" >> "$GITHUB_OUTPUT" echo "3rdparty/aiter changed on PR - trigger_aiter_upload = true" else @@ -117,4 +119,4 @@ jobs: secrets: inherit with: test_level: ${{ needs.determine_level.outputs.test_level }} - trigger_aiter_upload: ${{ needs.aiter_prebuilt_upload_trigger.outputs.trigger_aiter_upload == 'true' }} + trigger_aiter_upload: ${{ needs.aiter_prebuilt_upload_trigger.outputs.trigger_aiter_upload }} From d6cf20827ff8dc12e368cb44efec33eb1e40c586 Mon Sep 17 00:00:00 2001 From: Veera Rajasekhar Reddy Gopu Date: Fri, 1 May 2026 17:11:54 +0000 Subject: [PATCH 06/18] Test --- .github/workflows/rocm-ci-dispatch.yml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/workflows/rocm-ci-dispatch.yml b/.github/workflows/rocm-ci-dispatch.yml index c387d12dc..b4e8ce146 100644 --- a/.github/workflows/rocm-ci-dispatch.yml +++ b/.github/workflows/rocm-ci-dispatch.yml @@ -47,11 +47,11 @@ jobs: ACTION='${{ github.event.action }}' echo "PR action=${ACTION}" - if [ "$ACTION" != "synchronize" ]; then - echo "trigger_aiter_upload=false" >> "$GITHUB_OUTPUT" - echo "Not synchronize - trigger_aiter_upload = false" - exit 0 - fi + # if [ "$ACTION" != "synchronize" ]; then + # echo "trigger_aiter_upload=false" >> "$GITHUB_OUTPUT" + # echo "Not synchronize - trigger_aiter_upload = false" + # exit 0 + # fi SKIP='${{ steps.skip_label.outputs.skip }}' echo "skip_aiter_upload label : ${SKIP}" From ad5c877635e4f44545fea4a20775971ff1f6e680 Mon Sep 17 00:00:00 2001 From: Veera Rajasekhar Reddy Gopu Date: Fri, 1 May 2026 17:13:55 +0000 Subject: [PATCH 07/18] Test --- .github/workflows/rocm-ci-dispatch.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/rocm-ci-dispatch.yml b/.github/workflows/rocm-ci-dispatch.yml index b4e8ce146..8ad2ac0ed 100644 --- a/.github/workflows/rocm-ci-dispatch.yml +++ b/.github/workflows/rocm-ci-dispatch.yml @@ -119,4 +119,4 @@ jobs: secrets: inherit with: test_level: ${{ needs.determine_level.outputs.test_level }} - trigger_aiter_upload: ${{ needs.aiter_prebuilt_upload_trigger.outputs.trigger_aiter_upload }} + trigger_aiter_upload: ${{ needs.aiter_prebuilt_upload_trigger.outputs.trigger_aiter_upload == 'true' }} From 340ad7c5e87d3b3cfad7a3c4d2b59a245e9ab6a4 Mon Sep 17 00:00:00 2001 From: Veera Rajasekhar Reddy Gopu Date: Fri, 1 May 2026 17:17:37 +0000 Subject: [PATCH 08/18] Test --- .github/workflows/rocm-ci-dispatch.yml | 12 ++++++------ .github/workflows/rocm-ci.yml | 2 +- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/.github/workflows/rocm-ci-dispatch.yml b/.github/workflows/rocm-ci-dispatch.yml index 8ad2ac0ed..c270cde64 100644 --- a/.github/workflows/rocm-ci-dispatch.yml +++ b/.github/workflows/rocm-ci-dispatch.yml @@ -47,11 +47,11 @@ jobs: ACTION='${{ github.event.action }}' echo "PR action=${ACTION}" - # if [ "$ACTION" != "synchronize" ]; then - # echo "trigger_aiter_upload=false" >> "$GITHUB_OUTPUT" - # echo "Not synchronize - trigger_aiter_upload = false" - # exit 0 - # fi + if [ "$ACTION" != "synchronize" ]; then + echo "trigger_aiter_upload=false" >> "$GITHUB_OUTPUT" + echo "Not synchronize - trigger_aiter_upload = false" + exit 0 + fi SKIP='${{ steps.skip_label.outputs.skip }}' echo "skip_aiter_upload label : ${SKIP}" @@ -64,7 +64,7 @@ jobs: AITER_PATHS='${{ steps.paths.outputs.aiter }}' - if [ "$AITER_PATHS" = "false" ]; then + if [ "$AITER_PATHS" = "true" ]; then echo "trigger_aiter_upload=true" >> "$GITHUB_OUTPUT" echo "3rdparty/aiter changed on PR - trigger_aiter_upload = true" else diff --git a/.github/workflows/rocm-ci.yml b/.github/workflows/rocm-ci.yml index 51414a461..cc95bbac7 100644 --- a/.github/workflows/rocm-ci.yml +++ b/.github/workflows/rocm-ci.yml @@ -107,7 +107,7 @@ jobs: upload_aiter_prebuilt: name: Build and upload AITER prebuilt needs: select_image - if: ${{ (github.event_name == 'workflow_call' && inputs.trigger_aiter_upload == 'true') }} + if: ${{ github.event_name == 'workflow_call' && inputs.trigger_aiter_upload }} uses: ./.github/workflows/aiter-prebuilt-upload.yml with: docker_image: ${{ needs.select_image.outputs.image-tag }} From bbd549b2543bd56ad90a450b79b56374198718c1 Mon Sep 17 00:00:00 2001 From: Veera Rajasekhar Reddy Gopu Date: Fri, 1 May 2026 17:34:32 +0000 Subject: [PATCH 09/18] Test --- .github/workflows/aiter-prebuilt-upload.yml | 4 ++++ .github/workflows/rocm-ci-dispatch.yml | 6 ++++++ .github/workflows/rocm-ci.yml | 4 +++- .github/workflows/rocm-wheels-build.yml | 5 +++++ 4 files changed, 18 insertions(+), 1 deletion(-) diff --git a/.github/workflows/aiter-prebuilt-upload.yml b/.github/workflows/aiter-prebuilt-upload.yml index 7ee13a919..9665236b9 100644 --- a/.github/workflows/aiter-prebuilt-upload.yml +++ b/.github/workflows/aiter-prebuilt-upload.yml @@ -17,6 +17,10 @@ on: required: true type: string +concurrency: + group: te-rocm-${{ github.event.pull_request.number && format('pr-{0}', github.event.pull_request.number) || github.ref }} + cancel-in-progress: true + jobs: upload: runs-on: build-only-te diff --git a/.github/workflows/rocm-ci-dispatch.yml b/.github/workflows/rocm-ci-dispatch.yml index c270cde64..8c2d51971 100644 --- a/.github/workflows/rocm-ci-dispatch.yml +++ b/.github/workflows/rocm-ci-dispatch.yml @@ -12,6 +12,12 @@ permissions: contents: read pull-requests: read +# One in-flight run per PR: new pushes cancel earlier dispatch + nested workflows that +# share the same concurrency group (see rocm-ci.yml, rocm-wheels-build.yml). +concurrency: + group: te-rocm-${{ github.event.pull_request.number && format('pr-{0}', github.event.pull_request.number) || github.ref }} + cancel-in-progress: true + jobs: # To determine whether to upload AITER prebuilt to Artifactory aiter_prebuilt_upload_trigger: diff --git a/.github/workflows/rocm-ci.yml b/.github/workflows/rocm-ci.yml index cc95bbac7..e2c6c4c02 100644 --- a/.github/workflows/rocm-ci.yml +++ b/.github/workflows/rocm-ci.yml @@ -46,8 +46,10 @@ on: type: boolean default: false +# Match rocm-ci-dispatch / wheel workflows: PR number keys the group so superseding pushes +# cancel reliably (reusable workflows + refs/pull/merge were easy to mismatch vs workflow name + ref). concurrency: - group: ${{ github.workflow }}-${{ github.ref }} + group: te-rocm-${{ github.event.pull_request.number && format('pr-{0}', github.event.pull_request.number) || github.ref }} cancel-in-progress: true env: diff --git a/.github/workflows/rocm-wheels-build.yml b/.github/workflows/rocm-wheels-build.yml index afaf5024f..c54660e9d 100644 --- a/.github/workflows/rocm-wheels-build.yml +++ b/.github/workflows/rocm-wheels-build.yml @@ -70,6 +70,11 @@ env: DOCKER_IMAGE_NAME: te-rocm-manylinux-x86 MANYLINUX_PLATFORM: manylinux_2_28_x86_64 +# Same group as rocm-ci / dispatch so a new PR push cancels this nested workflow too. +concurrency: + group: te-rocm-${{ github.event.pull_request.number && format('pr-{0}', github.event.pull_request.number) || github.ref }} + cancel-in-progress: true + # ───────────────────────────────────────────────────────────────────────────── jobs: From b1e4da40b87e8687f284c8e342b1a60656b0064b Mon Sep 17 00:00:00 2001 From: Veera Rajasekhar Reddy Gopu Date: Fri, 1 May 2026 17:47:42 +0000 Subject: [PATCH 10/18] Test --- .github/workflows/aiter-prebuilt-upload.yml | 4 ---- .github/workflows/rocm-ci-dispatch.yml | 5 ----- .github/workflows/rocm-ci.yml | 4 ++-- .github/workflows/rocm-wheels-build.yml | 6 ++---- 4 files changed, 4 insertions(+), 15 deletions(-) diff --git a/.github/workflows/aiter-prebuilt-upload.yml b/.github/workflows/aiter-prebuilt-upload.yml index 9665236b9..7ee13a919 100644 --- a/.github/workflows/aiter-prebuilt-upload.yml +++ b/.github/workflows/aiter-prebuilt-upload.yml @@ -17,10 +17,6 @@ on: required: true type: string -concurrency: - group: te-rocm-${{ github.event.pull_request.number && format('pr-{0}', github.event.pull_request.number) || github.ref }} - cancel-in-progress: true - jobs: upload: runs-on: build-only-te diff --git a/.github/workflows/rocm-ci-dispatch.yml b/.github/workflows/rocm-ci-dispatch.yml index 8c2d51971..8f3828989 100644 --- a/.github/workflows/rocm-ci-dispatch.yml +++ b/.github/workflows/rocm-ci-dispatch.yml @@ -12,11 +12,6 @@ permissions: contents: read pull-requests: read -# One in-flight run per PR: new pushes cancel earlier dispatch + nested workflows that -# share the same concurrency group (see rocm-ci.yml, rocm-wheels-build.yml). -concurrency: - group: te-rocm-${{ github.event.pull_request.number && format('pr-{0}', github.event.pull_request.number) || github.ref }} - cancel-in-progress: true jobs: # To determine whether to upload AITER prebuilt to Artifactory diff --git a/.github/workflows/rocm-ci.yml b/.github/workflows/rocm-ci.yml index e2c6c4c02..4a7c2b6be 100644 --- a/.github/workflows/rocm-ci.yml +++ b/.github/workflows/rocm-ci.yml @@ -46,8 +46,8 @@ on: type: boolean default: false -# Match rocm-ci-dispatch / wheel workflows: PR number keys the group so superseding pushes -# cancel reliably (reusable workflows + refs/pull/merge were easy to mismatch vs workflow name + ref). +# Single concurrency anchor for this PR/branch pipeline. Nested reusable workflows +# (rocm-wheels-build, aiter-prebuilt-upload) must NOT reuse this group or GitHub deadlocks. concurrency: group: te-rocm-${{ github.event.pull_request.number && format('pr-{0}', github.event.pull_request.number) || github.ref }} cancel-in-progress: true diff --git a/.github/workflows/rocm-wheels-build.yml b/.github/workflows/rocm-wheels-build.yml index c54660e9d..98f76f039 100644 --- a/.github/workflows/rocm-wheels-build.yml +++ b/.github/workflows/rocm-wheels-build.yml @@ -70,10 +70,8 @@ env: DOCKER_IMAGE_NAME: te-rocm-manylinux-x86 MANYLINUX_PLATFORM: manylinux_2_28_x86_64 -# Same group as rocm-ci / dispatch so a new PR push cancels this nested workflow too. -concurrency: - group: te-rocm-${{ github.event.pull_request.number && format('pr-{0}', github.event.pull_request.number) || github.ref }} - cancel-in-progress: true +# No workflow-level concurrency: rocm-ci.yml already gates PRs; sharing the same group +# with a parent reusable workflow causes GitHub deadlock detection. # ───────────────────────────────────────────────────────────────────────────── jobs: From e89a52690642607221d09ba58e61a8c78b4cdb93 Mon Sep 17 00:00:00 2001 From: Veera Rajasekhar Reddy Gopu Date: Sat, 2 May 2026 00:13:48 +0000 Subject: [PATCH 11/18] test --- .github/workflows/rocm-ci.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/workflows/rocm-ci.yml b/.github/workflows/rocm-ci.yml index 4a7c2b6be..62d18ef66 100644 --- a/.github/workflows/rocm-ci.yml +++ b/.github/workflows/rocm-ci.yml @@ -47,7 +47,6 @@ on: default: false # Single concurrency anchor for this PR/branch pipeline. Nested reusable workflows -# (rocm-wheels-build, aiter-prebuilt-upload) must NOT reuse this group or GitHub deadlocks. concurrency: group: te-rocm-${{ github.event.pull_request.number && format('pr-{0}', github.event.pull_request.number) || github.ref }} cancel-in-progress: true From 6c22df8c3ee7e162bde2b4ec434e2650cee500d4 Mon Sep 17 00:00:00 2001 From: Veera Rajasekhar Reddy Gopu Date: Sat, 2 May 2026 00:16:57 +0000 Subject: [PATCH 12/18] test --- .github/workflows/rocm-ci.yml | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/.github/workflows/rocm-ci.yml b/.github/workflows/rocm-ci.yml index 62d18ef66..6cee69304 100644 --- a/.github/workflows/rocm-ci.yml +++ b/.github/workflows/rocm-ci.yml @@ -53,6 +53,9 @@ concurrency: env: TEST_LEVEL: ${{ (github.event_name == 'push' && '3') || inputs.test_level || '1' }} + # When 'true', skips wheel build + sGPU/mGPU jobs so only select_image + optional AITER upload run. + # Set back to 'false' before merging (restore full ROCm CI). + AITER_FLOW_TEST_ONLY: 'true' jobs: select_image: @@ -117,12 +120,13 @@ jobs: build: # Delegate wheel building to the reusable workflow on dev. It produces a core .whl plus framework .tar.gz sdists under artifact name `te-rocm-wheels`. needs: [select_image, upload_aiter_prebuilt] - if: always() && needs.select_image.result == 'success' && (needs.upload_aiter_prebuilt.result == 'skipped' || needs.upload_aiter_prebuilt.result == 'success') + if: ${{ env.AITER_FLOW_TEST_ONLY != 'true' && always() && needs.select_image.result == 'success' && (needs.upload_aiter_prebuilt.result == 'skipped' || needs.upload_aiter_prebuilt.result == 'success') }} uses: ./.github/workflows/rocm-wheels-build.yml secrets: inherit sgpu_tests: name: sGPU Tests (${{ matrix.arch_label }}) + if: ${{ env.AITER_FLOW_TEST_ONLY != 'true' }} needs: [select_image, build] timeout-minutes: 360 runs-on: ${{ matrix.arch_label == 'mi30x' && 'linux-te-mi30x-4' || 'linux-te-mi35x-4' }} @@ -324,6 +328,7 @@ jobs: mgpu_tests: name: mGPU ${{ matrix.framework == 'pytorch' && 'Torch' || 'JAX' }} (${{ matrix.arch_label }}) + if: ${{ env.AITER_FLOW_TEST_ONLY != 'true' }} needs: [select_image, build] timeout-minutes: 360 runs-on: ${{ matrix.arch_label == 'mi30x' && 'linux-te-mi30x-8' || 'linux-te-mi35x-8' }} From 6bee5e75b701013a2cb6d6248bf060478b1c9190 Mon Sep 17 00:00:00 2001 From: Veera Rajasekhar Reddy Gopu Date: Sat, 2 May 2026 00:19:41 +0000 Subject: [PATCH 13/18] test --- .github/workflows/rocm-ci-dispatch.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/rocm-ci-dispatch.yml b/.github/workflows/rocm-ci-dispatch.yml index 8f3828989..f2776830c 100644 --- a/.github/workflows/rocm-ci-dispatch.yml +++ b/.github/workflows/rocm-ci-dispatch.yml @@ -6,7 +6,8 @@ name: PR Automatic CI on: pull_request: - types: [ labeled, synchronize, reopened ] + # Include opened: push-only types miss PR creation (first commit uses synchronize only after push). + types: [ opened, labeled, synchronize, reopened ] permissions: contents: read From 845c7226e6c679419792b69d74351c30719b6920 Mon Sep 17 00:00:00 2001 From: Veera Rajasekhar Reddy Gopu Date: Sat, 2 May 2026 00:23:01 +0000 Subject: [PATCH 14/18] test --- .github/workflows/rocm-ci-dispatch.yml | 2 ++ .github/workflows/rocm-ci.yml | 19 +++++++++++++------ 2 files changed, 15 insertions(+), 6 deletions(-) diff --git a/.github/workflows/rocm-ci-dispatch.yml b/.github/workflows/rocm-ci-dispatch.yml index f2776830c..88ea979e1 100644 --- a/.github/workflows/rocm-ci-dispatch.yml +++ b/.github/workflows/rocm-ci-dispatch.yml @@ -122,3 +122,5 @@ jobs: with: test_level: ${{ needs.determine_level.outputs.test_level }} trigger_aiter_upload: ${{ needs.aiter_prebuilt_upload_trigger.outputs.trigger_aiter_upload == 'true' }} + # true = select_image + optional AITER upload only (skip wheels/GPU). Keep false on default branch. + aiter_flow_test_only: true diff --git a/.github/workflows/rocm-ci.yml b/.github/workflows/rocm-ci.yml index 6cee69304..154c80883 100644 --- a/.github/workflows/rocm-ci.yml +++ b/.github/workflows/rocm-ci.yml @@ -31,6 +31,11 @@ on: required: false default: false type: boolean + aiter_flow_test_only: + description: 'Skip wheel build + GPU tests (AITER path validation only). Cannot use env in job if; use this input.' + required: false + default: false + type: boolean workflow_dispatch: inputs: test_level: @@ -45,6 +50,10 @@ on: description: 'DEBUG: Use config.json from current source branch instead of dev' type: boolean default: false + aiter_flow_test_only: + description: 'Skip wheel build + GPU tests (AITER path validation only)' + type: boolean + default: false # Single concurrency anchor for this PR/branch pipeline. Nested reusable workflows concurrency: @@ -53,9 +62,6 @@ concurrency: env: TEST_LEVEL: ${{ (github.event_name == 'push' && '3') || inputs.test_level || '1' }} - # When 'true', skips wheel build + sGPU/mGPU jobs so only select_image + optional AITER upload run. - # Set back to 'false' before merging (restore full ROCm CI). - AITER_FLOW_TEST_ONLY: 'true' jobs: select_image: @@ -120,13 +126,14 @@ jobs: build: # Delegate wheel building to the reusable workflow on dev. It produces a core .whl plus framework .tar.gz sdists under artifact name `te-rocm-wheels`. needs: [select_image, upload_aiter_prebuilt] - if: ${{ env.AITER_FLOW_TEST_ONLY != 'true' && always() && needs.select_image.result == 'success' && (needs.upload_aiter_prebuilt.result == 'skipped' || needs.upload_aiter_prebuilt.result == 'success') }} + # job.if cannot use env.* — use inputs.aiter_flow_test_only; push runs skip that input (full CI). + if: ${{ (github.event_name == 'push' || inputs.aiter_flow_test_only != true) && always() && needs.select_image.result == 'success' && (needs.upload_aiter_prebuilt.result == 'skipped' || needs.upload_aiter_prebuilt.result == 'success') }} uses: ./.github/workflows/rocm-wheels-build.yml secrets: inherit sgpu_tests: name: sGPU Tests (${{ matrix.arch_label }}) - if: ${{ env.AITER_FLOW_TEST_ONLY != 'true' }} + if: ${{ github.event_name == 'push' || inputs.aiter_flow_test_only != true }} needs: [select_image, build] timeout-minutes: 360 runs-on: ${{ matrix.arch_label == 'mi30x' && 'linux-te-mi30x-4' || 'linux-te-mi35x-4' }} @@ -328,7 +335,7 @@ jobs: mgpu_tests: name: mGPU ${{ matrix.framework == 'pytorch' && 'Torch' || 'JAX' }} (${{ matrix.arch_label }}) - if: ${{ env.AITER_FLOW_TEST_ONLY != 'true' }} + if: ${{ github.event_name == 'push' || inputs.aiter_flow_test_only != true }} needs: [select_image, build] timeout-minutes: 360 runs-on: ${{ matrix.arch_label == 'mi30x' && 'linux-te-mi30x-8' || 'linux-te-mi35x-8' }} From 75f2f21cadc89955833fde3850cfe61e1fdb4d6d Mon Sep 17 00:00:00 2001 From: Veera Rajasekhar Reddy Gopu Date: Sat, 2 May 2026 00:25:49 +0000 Subject: [PATCH 15/18] test --- .github/workflows/rocm-ci-dispatch.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/rocm-ci-dispatch.yml b/.github/workflows/rocm-ci-dispatch.yml index 88ea979e1..b2a6c1735 100644 --- a/.github/workflows/rocm-ci-dispatch.yml +++ b/.github/workflows/rocm-ci-dispatch.yml @@ -66,7 +66,7 @@ jobs: AITER_PATHS='${{ steps.paths.outputs.aiter }}' - if [ "$AITER_PATHS" = "true" ]; then + if [ "$AITER_PATHS" = "false" ]; then echo "trigger_aiter_upload=true" >> "$GITHUB_OUTPUT" echo "3rdparty/aiter changed on PR - trigger_aiter_upload = true" else From 2f340644cd92f39340f09b688236172a0ce54319 Mon Sep 17 00:00:00 2001 From: Veera Rajasekhar Reddy Gopu Date: Sat, 2 May 2026 00:31:38 +0000 Subject: [PATCH 16/18] test --- .github/workflows/rocm-ci.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/rocm-ci.yml b/.github/workflows/rocm-ci.yml index 154c80883..74a6f7d58 100644 --- a/.github/workflows/rocm-ci.yml +++ b/.github/workflows/rocm-ci.yml @@ -117,7 +117,8 @@ jobs: upload_aiter_prebuilt: name: Build and upload AITER prebuilt needs: select_image - if: ${{ github.event_name == 'workflow_call' && inputs.trigger_aiter_upload }} + # Skipped when this is false. Accept boolean true and string 'true' (workflow_call coercion varies). + if: ${{ github.event_name == 'workflow_call' && (inputs.trigger_aiter_upload == true || inputs.trigger_aiter_upload == 'true') }} uses: ./.github/workflows/aiter-prebuilt-upload.yml with: docker_image: ${{ needs.select_image.outputs.image-tag }} From bf4c965731da842c5e08186606345d650167da29 Mon Sep 17 00:00:00 2001 From: Veera Rajasekhar Reddy Gopu Date: Sat, 2 May 2026 00:34:34 +0000 Subject: [PATCH 17/18] test --- .github/workflows/rocm-ci.yml | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/.github/workflows/rocm-ci.yml b/.github/workflows/rocm-ci.yml index 74a6f7d58..7ee76e397 100644 --- a/.github/workflows/rocm-ci.yml +++ b/.github/workflows/rocm-ci.yml @@ -71,6 +71,14 @@ jobs: outputs: image-tag: ${{ steps.select-image.outputs.image-tag }} steps: + - name: Debug — event_name and inputs (AITER upload job gate) + run: | + echo "github.event_name=${{ github.event_name }}" + echo "inputs.trigger_aiter_upload=${{ inputs.trigger_aiter_upload }}" + echo "inputs.aiter_flow_test_only=${{ inputs.aiter_flow_test_only }}" + echo "upload_aiter_prebuilt would run if: workflow_call && (trigger true as bool or string)" + echo "check_expression workflow_call=$([[ '${{ github.event_name }}' == 'workflow_call' ]] && echo yes || echo no)" + - name: Checkout repository uses: actions/checkout@v6 with: From e658cbf7e557e8aa3673df6ad9a995ac929ad212 Mon Sep 17 00:00:00 2001 From: Veera Rajasekhar Reddy Gopu Date: Sat, 2 May 2026 00:46:24 +0000 Subject: [PATCH 18/18] test --- .github/workflows/rocm-ci.yml | 13 +++---------- 1 file changed, 3 insertions(+), 10 deletions(-) diff --git a/.github/workflows/rocm-ci.yml b/.github/workflows/rocm-ci.yml index 7ee76e397..3c964d32f 100644 --- a/.github/workflows/rocm-ci.yml +++ b/.github/workflows/rocm-ci.yml @@ -71,14 +71,6 @@ jobs: outputs: image-tag: ${{ steps.select-image.outputs.image-tag }} steps: - - name: Debug — event_name and inputs (AITER upload job gate) - run: | - echo "github.event_name=${{ github.event_name }}" - echo "inputs.trigger_aiter_upload=${{ inputs.trigger_aiter_upload }}" - echo "inputs.aiter_flow_test_only=${{ inputs.aiter_flow_test_only }}" - echo "upload_aiter_prebuilt would run if: workflow_call && (trigger true as bool or string)" - echo "check_expression workflow_call=$([[ '${{ github.event_name }}' == 'workflow_call' ]] && echo yes || echo no)" - - name: Checkout repository uses: actions/checkout@v6 with: @@ -125,8 +117,9 @@ jobs: upload_aiter_prebuilt: name: Build and upload AITER prebuilt needs: select_image - # Skipped when this is false. Accept boolean true and string 'true' (workflow_call coercion varies). - if: ${{ github.event_name == 'workflow_call' && (inputs.trigger_aiter_upload == true || inputs.trigger_aiter_upload == 'true') }} + # Gate on inputs only: reusable runs from PR may report github.event_name as pull_request, not workflow_call. + # push-triggered runs leave inputs.trigger_aiter_upload unset/false (default). + if: ${{ inputs.trigger_aiter_upload == true || inputs.trigger_aiter_upload == 'true' }} uses: ./.github/workflows/aiter-prebuilt-upload.yml with: docker_image: ${{ needs.select_image.outputs.image-tag }}