Files
derek.holloway 7502bf64a4
CodeQL / Analyze (actions) (push) Canceled after 0s
CodeQL / Analyze (python) (push) Canceled after 0s
pre-commit / pre-commit (push) Canceled after 0s
Multi-Arch CI / setup (push) Canceled after 0s
Publish build_manylinux_x86_64 images / publish_build_manylinux_x86_64 (push) Canceled after 0s
Setup (Multi-Arch) / setup (push) Canceled after 0s
Multi-Arch CI / Linux::${{ fromJSON(needs.setup.outputs.linux_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubi10 image / publish_no_rocm_image_ubi10 (push) Canceled after 0s
Multi-Arch CI / Windows::${{ fromJSON(needs.setup.outputs.windows_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Multi-Arch CI / Manifest Diff (push) Canceled after 0s
TheRock Manifest Diff Report / Generate Manifest Diff Report (push) Canceled after 0s
Multi-Arch CI / CI Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_ocl_rt images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_rocgdb images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Unit Tests / Unit Tests :: ubuntu-24.04 (push) Canceled after 0s
Unit Tests / Unit Tests :: windows-2022 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_media (push) Canceled after 0s
Unit Tests / Unit Tests Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_openmpi (push) Canceled after 0s
Flatten subprojects into a single base monorepo
2026-09-02 16:34:47 -07:00

568 lines
24 KiB
YAML

# Pytest corpus checks for emulation/rocjitsu/.
#
# Fast smoke tests for rocjitsu. This is likely going to be added to TheRock
# tests, but it is currently a stopgap solution. It allows developers to
# quickly check that their changes to rocjitsu didn't break gfx1250 emulation.
name: "rocjitsu-test-corpus"
on:
pull_request:
paths:
- "emulation/rocjitsu/**"
- ".github/scripts/rocjitsu_corpus_translation_comment*.py"
- ".github/workflows/rocjitsu-*.yml"
push:
branches:
- develop
paths:
- "emulation/rocjitsu/**"
- ".github/workflows/rocjitsu-*.yml"
workflow_dispatch:
inputs:
corpus_repository:
description: "Repository containing the rocjitsu pytest corpus"
default: "ROCm/rocjitsu-test-corpus"
required: true
corpus_ref:
description: "Branch, tag, or SHA containing the gfx1250 corpus suites"
# Last updated on 2026/07/29.
default: "42944a3ff37490441dcd0f1838e289a419af082d"
required: true
legacy_corpus_ref:
description: "Branch, tag, or SHA for the existing corpus tests"
# TODO: Drop this pin once the workflow's ROCm SDK includes the gfx1250
# rocBLAS and hipBLASLt libraries required by the latest corpus.
# Last updated on 2026/07/17.
default: "aa54cc86c9ebff3eb840743b36ff8d9b3b2d43c4"
required: true
concurrency:
# Preserve every non-PR run, including manual reruns of one develop commit.
# This intentionally prevents back-to-back develop pushes from cancelling
# the full lane so each can publish. PR updates still supersede old revisions.
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.run_id }}
cancel-in-progress: true
permissions:
contents: read
env:
ROCJITSU_SOURCE_DIR: ${{ github.workspace }}/rocm-systems/emulation/rocjitsu
ROCJITSU_BUILD_DIR: ${{ github.workspace }}/build
ROCJITSU_CORPUS_DIR: ${{ github.workspace }}/rocjitsu-test-corpus
ROCJITSU_DBT_CORPUS_DIR: ${{ github.workspace }}/rocjitsu-dbt-test-corpus
ROCJITSU_DBT_VENV: ${{ github.workspace }}/gfx1250-dbt-venv-${{ github.run_id }}-${{ github.run_attempt }}
ROCJITSU_HSACO_CORPUS: ${{ github.workspace }}/gfx1250-packaged-hsacos-${{ github.run_id }}-${{ github.run_attempt }}
ROCJITSU_DBT_CORPUS_REF: 42944a3ff37490441dcd0f1838e289a419af082d
ROCJITSU_DBT_SHA_FRAGMENTS: ${{ github.workspace }}/gfx1250-dbt-sha-pairs-${{ github.run_id }}-${{ github.run_attempt }}/fragments
ROCJITSU_DBT_SHA_MANIFEST: ${{ github.workspace }}/gfx1250-dbt-sha-pairs-${{ github.run_id }}-${{ github.run_attempt }}/gfx1250-b0-a0-sha-pairs.json
ROCM_SDK_VERSION: 7.15.0a20260728
UV_VERSION: 0.9.26
jobs:
test:
runs-on: azure-linux-scale-rocm
name: test (${{ matrix.name }})
container:
image: ghcr.io/rocm/no_rocm_image_ubuntu24_04@sha256:4150afe4759d14822f0e3f8930e1124f26e11f68b5c7b91ec9a02b20b1ebbb98
options: --user 0:0
env:
DEBIAN_FRONTEND: noninteractive
continue-on-error: ${{ matrix.allow_failure }}
strategy:
fail-fast: false
matrix:
include:
- name: release
allow_failure: false
# 20,000 verified objects completed in 148.97s locally; 20 minutes
# leaves substantial runner headroom while this release-only gate lands.
verify_dbt_idempotence: 1
dbt_timeout: 60
dbt_memory_limit_mib: 4096
dbt_job_timeout: 20
test_regex: ''
build_type: Release
enable_asan: 0
enable_ubsan: 0
enable_tsan: 0
enable_expensive_checks: 0
sanitizer_runtime: STATIC
- name: asan-ubsan
allow_failure: true
# Keep the first corpus gate on the fastest lane. Focused second-pass
# paths remain covered by the sanitizer test suite.
verify_dbt_idempotence: 0
dbt_timeout: 180
dbt_memory_limit_mib: 4096
dbt_job_timeout: 30
test_regex: ''
build_type: RelWithDebInfo
enable_asan: 1
enable_ubsan: 1
enable_tsan: 0
enable_expensive_checks: 1
sanitizer_runtime: SHARED
- name: tsan
allow_failure: false
verify_dbt_idempotence: 0
dbt_timeout: 30
dbt_memory_limit_mib: 4096
dbt_job_timeout: 20
run_static_asan_launch: true
test_regex: ''
build_type: RelWithDebInfo
enable_asan: 0
enable_ubsan: 0
enable_tsan: 1
enable_expensive_checks: 0
sanitizer_runtime: SHARED
- name: asan-ubsan-gcc
allow_failure: true
verify_dbt_idempotence: 0
# GCC's combined sanitizers need additional headroom on the largest
# packaged code objects.
dbt_timeout: 180
dbt_memory_limit_mib: 8192
dbt_job_timeout: 30
test_regex: ''
build_type: RelWithDebInfo
enable_asan: 1
enable_ubsan: 1
enable_tsan: 0
enable_expensive_checks: 1
sanitizer_runtime: SHARED
c_compiler: gcc
cxx_compiler: g++
steps:
- name: Install base dependencies
run: |
apt-get update
apt-get install -y --no-install-recommends \
build-essential \
ca-certificates \
cmake \
git \
libclang-rt-dev \
libdrm-dev \
ninja-build \
clang
- name: Checkout rocm-systems
uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
with:
path: rocm-systems
sparse-checkout: |
emulation/rocjitsu
.github
shared/machine-readable-isa/isa
- name: Checkout rocjitsu corpus
if: matrix.name == 'release'
uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
with:
repository: ${{ github.event.inputs.corpus_repository || 'ROCm/rocjitsu-test-corpus' }}
# Last updated on 2026/07/17.
ref: ${{ github.event.inputs.legacy_corpus_ref || 'aa54cc86c9ebff3eb840743b36ff8d9b3b2d43c4' }}
path: rocjitsu-test-corpus
- name: Checkout gfx1250 corpus
if: matrix.enable_tsan == 0
uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
with:
repository: ${{ github.event.inputs.corpus_repository || 'ROCm/rocjitsu-test-corpus' }}
# Last updated on 2026/07/29.
ref: ${{ github.event.inputs.corpus_ref || env.ROCJITSU_DBT_CORPUS_REF }}
path: rocjitsu-dbt-test-corpus
- name: Set up Python
uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0
with:
python-version: "3.12"
- name: Set up uv
uses: astral-sh/setup-uv@c771a70e6277c0a99b617c7a806ffedaca235ff9 # v9.0.0
with:
version: ${{ env.UV_VERSION }}
- name: Test DBT SHA-pair tooling
if: matrix.name == 'release'
run: |
python3 \
"${ROCJITSU_SOURCE_DIR}/tests/corpus/test-record-gfx1250-dbt-sha-pairs.py"
python3 \
"${GITHUB_WORKSPACE}/rocm-systems/.github/scripts/test-rocjitsu-corpus-translation-comment.py"
- name: Install ROCm SDK
run: |
uv pip install --system --prerelease allow \
--index-url https://rocm.nightlies.amd.com/whl-multi-arch/ \
"rocm[devel,libraries]==${ROCM_SDK_VERSION}"
ROCM_LIB="$(rocm-sdk path --root)"/lib
echo "LD_LIBRARY_PATH=${ROCM_LIB}:${LD_LIBRARY_PATH:-}" >> "${GITHUB_ENV}"
- name: Build rocjitsu
id: build_rocjitsu
working-directory: ${{ env.ROCJITSU_SOURCE_DIR }}
shell: bash
run: |
ROCMINFO=RocminfoTest
RCCL_DAEMON=RcclDaemonTest
EXCLUDED_TESTS="${ROCMINFO}|${RCCL_DAEMON}"
ASAN_UBSAN_EXCLUDED_TESTS=(
"HsaTest\.InitSucceeded"
"HsaTest\.GpuAgentFound"
"Cdna4ToCdna3SimulatedDispatchTest\..*"
"Cdna4ToCdna3DbtGuestTest\..*"
"HipMemcpyTest\.RoundTripFloat"
"HipMemcpyTest\.RoundTripInt"
"HipMemcpyTest\.DeviceToDevice"
"HipVectorAddTest\.CorrectResult"
"DaemonTest\.HipVectorAdd"
"DaemonTest\.HipMemcpyRoundTripFloat"
"DaemonTest\.HipMemcpyRoundTripInt"
"DaemonTest\.HipMemcpyDeviceToDevice"
"DaemonTest\.TwoIndependentClients"
"DaemonTest\.LoggingPlugin"
"BfeRegressionTest\.ThreadIdxY"
"LoggingTest\.dispatch_logged"
"ProfiledPluginTest\.hook_profile_output"
"CvtNarrow\.AllTests"
"RaceTest\..*"
)
TSAN_EXCLUDED_TESTS=(
"${ASAN_UBSAN_EXCLUDED_TESTS[@]}"
# This test has a five-second wall-clock assertion that becomes
# load-sensitive at the TSan job's CI-level parallelism.
"DaemonApi\.FullListenerQueueDoesNotBlockOrRemoveSocket"
)
TEST_REGEX="${{ matrix.test_regex }}"
CMAKE_CONFIG_FLAGS=()
if [[ "${{ matrix.enable_asan }}" == "1" && "${{ matrix.enable_ubsan }}" == "1" ]]; then
EXCLUDED_TESTS="${EXCLUDED_TESTS}|$(IFS='|'; echo "${ASAN_UBSAN_EXCLUDED_TESTS[*]}")"
CMAKE_CONFIG_FLAGS+=(
-DCMAKE_C_FLAGS_RELWITHDEBINFO="-O2 -g"
-DCMAKE_CXX_FLAGS_RELWITHDEBINFO="-O2 -g"
)
fi
if [[ "${{ matrix.enable_tsan }}" == "1" ]]; then
EXCLUDED_TESTS="${EXCLUDED_TESTS}|$(IFS='|'; echo "${TSAN_EXCLUDED_TESTS[*]}")"
fi
if [[ -n "${{ matrix.c_compiler }}" ]]; then
CMAKE_CONFIG_FLAGS+=(-DCMAKE_C_COMPILER="${{ matrix.c_compiler }}")
fi
if [[ -n "${{ matrix.cxx_compiler }}" ]]; then
CMAKE_CONFIG_FLAGS+=(-DCMAKE_CXX_COMPILER="${{ matrix.cxx_compiler }}")
fi
CXXFLAGS=""
if [[ -z "${{ matrix.cxx_compiler }}" || "${{ matrix.cxx_compiler }}" == *clang* ]]; then
CXXFLAGS="-Wno-error=unknown-warning-option -Wno-error=nested-anon-types"
fi
ROCM_PATH=`rocm-sdk path --root` \
cmake -B "${ROCJITSU_BUILD_DIR}" -G Ninja \
-DCMAKE_BUILD_TYPE="${{ matrix.build_type }}" \
-DCMAKE_C_FLAGS="${CFLAGS:-}" \
-DCMAKE_CXX_FLAGS="${CXXFLAGS:-}" \
"${CMAKE_CONFIG_FLAGS[@]}" \
-DRJ_ENABLE_ASAN=${{ matrix.enable_asan }} \
-DRJ_ENABLE_UBSAN=${{ matrix.enable_ubsan }} \
-DRJ_ENABLE_TSAN=${{ matrix.enable_tsan }} \
-DRJ_ENABLE_EXPENSIVE_CHECKS=${{ matrix.enable_expensive_checks }} \
-DRJ_SANITIZER_RUNTIME=${{ matrix.sanitizer_runtime }}
# Set a conservative number of workers to avoid OOM and excessive system load.
WORKERS="$(( ($(nproc) + 1) / 2 ))"
cmake --build "${ROCJITSU_BUILD_DIR}" -j "${WORKERS}"
CTEST_SELECTION=()
if [[ -n "${TEST_REGEX}" ]]; then
CTEST_SELECTION=(-R "${TEST_REGEX}")
fi
ctest --test-dir "${ROCJITSU_BUILD_DIR}" \
"${CTEST_SELECTION[@]}" \
-E "${EXCLUDED_TESTS}" \
--output-on-failure \
-j "${WORKERS}"
echo "${ROCJITSU_BUILD_DIR}/tools/rocjitsu" >> "${GITHUB_PATH}"
echo "CXXFLAGS=" >> "${GITHUB_ENV}"
- name: Test static ASan launcher preload
if: matrix.run_static_asan_launch
working-directory: ${{ env.ROCJITSU_SOURCE_DIR }}
shell: bash
run: |
STATIC_ASAN_BUILD_DIR="${ROCJITSU_BUILD_DIR}-asan-static-launch-preload"
CXXFLAGS="-Wno-error=unknown-warning-option -Wno-error=nested-anon-types"
ROCM_PATH="$(rocm-sdk path --root)" \
cmake -B "${STATIC_ASAN_BUILD_DIR}" -G Ninja \
-DCMAKE_BUILD_TYPE=RelWithDebInfo \
-DCMAKE_CXX_FLAGS="${CXXFLAGS}" \
-DRJ_ENABLE_ASAN=1 \
-DRJ_ENABLE_UBSAN=0 \
-DRJ_ENABLE_TSAN=0 \
-DRJ_ENABLE_EXPENSIVE_CHECKS=0 \
-DRJ_SANITIZER_RUNTIME=STATIC
cmake --build "${STATIC_ASAN_BUILD_DIR}" \
--target launch_preload_test
ctest --test-dir "${STATIC_ASAN_BUILD_DIR}" \
-R '^LaunchPreloadTest\.' \
--output-on-failure
- name: Install corpus test dependencies
if: matrix.name == 'release'
working-directory: ${{ env.ROCJITSU_CORPUS_DIR }}
run: |
uv pip install --system -r requirements.txt
uv pip install --system --prerelease allow \
--index-url https://rocm.nightlies.amd.com/whl-multi-arch/ \
"rocm-sdk-device-gfx942==${ROCM_SDK_VERSION}" \
"rocm-sdk-device-gfx950==${ROCM_SDK_VERSION}"
rocm-sdk init
- name: Run amdisa tests
if: matrix.name == 'release'
working-directory: ${{ env.ROCJITSU_SOURCE_DIR }}
run: |
uv pip install --system -e lib/python
python -m pytest lib/python/amdisa/tests
- name: Run corpus tests
if: matrix.name == 'release'
working-directory: ${{ env.ROCJITSU_CORPUS_DIR }}
shell: bash
env:
ROCJITSU_ROOT: ${{ env.ROCJITSU_SOURCE_DIR }}
ROCJITSU_BUILD: ${{ env.ROCJITSU_BUILD_DIR }}
run: |
ROCM_PATH="$(rocm-sdk path --root)"
export ROCM_PATH
export ROCJITSU_SOURCE_DIR
corpus_test_status=0
WORKERS="$(nproc)"
if (( WORKERS > 16 )); then
WORKERS=16
fi
corpus_test_flags=(
--workers "${WORKERS}" \
--soft-timeout 15 \
--hard-timeout 30 \
--rerun-failed \
)
bash "${ROCJITSU_SOURCE_DIR}/tests/corpus/run-corpus-tests.sh" "${corpus_test_flags[@]}" || corpus_test_status=$?
exit "${corpus_test_status}"
- name: Compare plain and translated gfx1250 simulator runs
if: ${{ !cancelled() && matrix.name == 'release' && steps.build_rocjitsu.outcome == 'success' }}
timeout-minutes: 45
working-directory: ${{ env.ROCJITSU_DBT_CORPUS_DIR }}
shell: bash
env:
ROCJITSU_SEMANTIC_TIMEOUT_SECONDS: 120
run: |
ROCM_PATH="$(rocm-sdk path --root)"
export ROCM_PATH
LAUNCHER="${ROCJITSU_BUILD_DIR}/tools/rocjitsu/rocjitsu"
CONFIG="${ROCJITSU_SOURCE_DIR}/configs/gfx1250.json"
HOTSWAP="${ROCJITSU_BUILD_DIR}/lib/rocjitsu/src/rocjitsu/hooks/libhsa_hotswap_rocjitsu.so"
test -f "${HOTSWAP}"
# Disable ROCr's built-in mechanism in both legs. Load the branch-built
# hook explicitly so the candidate leg qualifies this checkout. Keep
# every env option before the shared NAME=VALUE assignment.
COMMON_UNSETS="-u LD_PRELOAD -u HSA_HOTSWAP_ENABLE"
COMMON_HOTSWAP_ENV="HSA_HOTSWAP_DISABLE=1"
PLAIN_WRAPPER="env ${COMMON_UNSETS} -u HSA_TOOLS_LIB -u HSA_TOOLS_DISABLE_REGISTER -u HSA_HOTSWAP_VERBOSE ${COMMON_HOTSWAP_ENV} ${LAUNCHER} --config ${CONFIG} --"
TRANSLATED_WRAPPER="env ${COMMON_UNSETS} ${COMMON_HOTSWAP_ENV} HSA_TOOLS_DISABLE_REGISTER=1 HSA_TOOLS_LIB=${HOTSWAP} HSA_HOTSWAP_VERBOSE=1 ${LAUNCHER} --config ${CONFIG} --"
python3 "${ROCJITSU_SOURCE_DIR}/tests/corpus/test-validate-gfx1250-semantic-translations.py"
python3 -m pytest tests/test_corpus.py \
--target gfx1250 \
--suite semantics \
--run-tests-config "${ROCJITSU_SOURCE_DIR}/tests/corpus/gfx1250_b0_a0_semantic_tests.json" \
--run-wrapper "${PLAIN_WRAPPER}" \
--comparison-run-wrapper "${TRANSLATED_WRAPPER}" \
--comparison-required-stderr "[hsa-hotswap-rj] eager translation " \
--comparison-required-stderr "outcome=translated" \
--comparison-required-stderr "translation_status=0 status=0" \
--artifact-directory .pytest-artifacts/gfx1250-semantic-qualification \
--timeout "${ROCJITSU_SEMANTIC_TIMEOUT_SECONDS}" \
-q \
--tb=short
python3 "${ROCJITSU_SOURCE_DIR}/tests/corpus/validate-gfx1250-semantic-translations.py" \
--translator "${ROCJITSU_BUILD_DIR}/tools/rj_dbt_translate" \
--selection "${ROCJITSU_SOURCE_DIR}/tests/corpus/gfx1250_b0_a0_semantic_tests.json" \
--expectations "${ROCJITSU_SOURCE_DIR}/tests/corpus/gfx1250_b0_a0_semantic_rewrites.json" \
--artifact-directory .pytest-artifacts/gfx1250-semantic-qualification \
--expected-runtime-translations 2
- name: Upload gfx1250 semantic qualification logs
if: ${{ always() && matrix.name == 'release' }}
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
with:
name: gfx1250-semantic-qualification-${{ matrix.name }}
path: |
${{ env.ROCJITSU_DBT_CORPUS_DIR }}/.pytest-artifacts/gfx1250-semantic-qualification/**/logs
${{ env.ROCJITSU_DBT_CORPUS_DIR }}/.pytest-artifacts/gfx1250-semantic-qualification/translation-diffs
if-no-files-found: ignore
retention-days: 7
- name: Extract pinned gfx1250 packaged HSACOs
id: extract_dbt
if: ${{ !cancelled() && matrix.enable_tsan == 0 && steps.build_rocjitsu.outcome == 'success' }}
timeout-minutes: 10
working-directory: ${{ env.ROCJITSU_DBT_CORPUS_DIR }}
shell: bash
run: |
uv venv --python 3.12 "${ROCJITSU_DBT_VENV}"
uv pip install \
--python "${ROCJITSU_DBT_VENV}/bin/python" \
"pytest>=5.4.1" \
"pytest-xdist>=1.32.0"
uv pip install \
--python "${ROCJITSU_DBT_VENV}/bin/python" \
-r "${ROCJITSU_SOURCE_DIR}/tests/corpus/dbt/requirements-gfx1250-dbt.txt"
"${ROCJITSU_DBT_VENV}/bin/rocm-sdk" init
DBT_ROCM_PATH="$("${ROCJITSU_DBT_VENV}/bin/rocm-sdk" path --root)"
LD_LIBRARY_PATH="${DBT_ROCM_PATH}/lib${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}" \
"${ROCJITSU_DBT_VENV}/bin/python" \
scripts/extract_gfx1250_hsacos.py \
--environment "${ROCJITSU_DBT_VENV}" \
--destination "${ROCJITSU_HSACO_CORPUS}"
- name: Run gfx1250 DBT corpus tests
id: run_dbt
if: ${{ !cancelled() && matrix.enable_tsan == 0 && steps.extract_dbt.outcome == 'success' }}
timeout-minutes: ${{ matrix.dbt_job_timeout }}
working-directory: ${{ env.ROCJITSU_DBT_CORPUS_DIR }}
shell: bash
run: |
DBT_ROCM_PATH="$("${ROCJITSU_DBT_VENV}/bin/rocm-sdk" path --root)"
DBT_TRANSLATOR_BINARY="${ROCJITSU_BUILD_DIR}/tools/rj_dbt_translate"
DBT_TRANSLATOR="${DBT_TRANSLATOR_BINARY}"
if [[ "${{ matrix.verify_dbt_idempotence }}" == "1" ]]; then
DBT_TRANSLATOR="${RUNNER_TEMP}/rj_dbt_translate-verify-idempotence"
printf '#!/usr/bin/env bash\nexec %q --verify-idempotence "$@"\n' \
"${DBT_TRANSLATOR_BINARY}" \
> "${DBT_TRANSLATOR}"
chmod +x "${DBT_TRANSLATOR}"
fi
DBT_WORKERS="$(nproc)"
if (( DBT_WORKERS > 16 )); then
DBT_WORKERS=16
fi
"${ROCJITSU_DBT_VENV}/bin/python" -m pytest tests/test_corpus.py \
--target gfx1250 \
--suite dbt \
--dbt-corpus "${ROCJITSU_HSACO_CORPUS}" \
--dbt-translator "${DBT_TRANSLATOR}" \
--dbt-llvm-objdump "${DBT_ROCM_PATH}/lib/llvm/bin/llvm-objdump" \
--dbt-package-lock "${ROCJITSU_SOURCE_DIR}/tests/corpus/dbt/gfx1250_20260726_package_lock.json" \
--dbt-expected-failures "${ROCJITSU_SOURCE_DIR}/tests/corpus/dbt/gfx1250_b0_a0_expected_failures.json" \
--dbt-expected-rewrites "${ROCJITSU_SOURCE_DIR}/tests/corpus/dbt/gfx1250_b0_a0_expected_rewrites.json" \
--dbt-allow-incomplete-corpus \
--dbt-timeout "${{ matrix.dbt_timeout }}" \
--dbt-memory-limit-mib "${{ matrix.dbt_memory_limit_mib }}" \
--artifact-directory .pytest-artifacts/gfx1250-dbt \
-n "${DBT_WORKERS}" \
--durations=0 \
-q \
-rxX \
--tb=short
- name: Collect gfx1250 B0-to-A0 SHA pairs
id: collect_dbt_sha_pairs
if: >-
matrix.name == 'release' &&
steps.run_dbt.outcome == 'success' &&
(github.event_name == 'pull_request' ||
(github.ref == 'refs/heads/develop' &&
(github.event_name == 'push' ||
(github.event_name == 'workflow_dispatch' &&
github.event.inputs.corpus_repository == 'ROCm/rocjitsu-test-corpus' &&
github.event.inputs.corpus_ref == env.ROCJITSU_DBT_CORPUS_REF))))
timeout-minutes: 15
working-directory: ${{ env.ROCJITSU_DBT_CORPUS_DIR }}
shell: bash
run: |
DBT_WORKERS="$(nproc)"
if (( DBT_WORKERS > 16 )); then
DBT_WORKERS=16
fi
python3 \
"${ROCJITSU_SOURCE_DIR}/tests/corpus/record-gfx1250-dbt-sha-pairs.py" \
collect \
--translator "${ROCJITSU_BUILD_DIR}/tools/rj_dbt_translate" \
--corpus "${ROCJITSU_HSACO_CORPUS}" \
--input-manifest "${ROCJITSU_HSACO_CORPUS}/manifests/SHA256SUMS" \
--expected-failures "${ROCJITSU_SOURCE_DIR}/tests/corpus/dbt/gfx1250_b0_a0_expected_failures.json" \
--fragments "${ROCJITSU_DBT_SHA_FRAGMENTS}" \
--workers "${DBT_WORKERS}" \
--timeout "${{ matrix.dbt_timeout }}"
- name: Finalize gfx1250 B0-to-A0 SHA pairs
id: finalize_dbt_sha_pairs
if: matrix.name == 'release' && steps.collect_dbt_sha_pairs.outcome == 'success'
timeout-minutes: 2
working-directory: ${{ env.ROCJITSU_DBT_CORPUS_DIR }}
shell: bash
run: |
python3 \
"${ROCJITSU_SOURCE_DIR}/tests/corpus/record-gfx1250-dbt-sha-pairs.py" \
finalize \
--fragments "${ROCJITSU_DBT_SHA_FRAGMENTS}" \
--output "${ROCJITSU_DBT_SHA_MANIFEST}" \
--input-manifest "${ROCJITSU_HSACO_CORPUS}/manifests/SHA256SUMS" \
--expected-failures "${ROCJITSU_SOURCE_DIR}/tests/corpus/dbt/gfx1250_b0_a0_expected_failures.json" \
--expected-rewrites "${ROCJITSU_SOURCE_DIR}/tests/corpus/dbt/gfx1250_b0_a0_expected_rewrites.json" \
--package-lock "${ROCJITSU_SOURCE_DIR}/tests/corpus/dbt/gfx1250_20260726_package_lock.json" \
--source-commit "${GITHUB_SHA}" \
--corpus-commit "$(git rev-parse HEAD)" \
--rocm-sdk-version "${ROCM_SDK_VERSION}"
- name: Upload develop gfx1250 B0-to-A0 SHA pairs
if: >-
matrix.name == 'release' &&
steps.finalize_dbt_sha_pairs.outcome == 'success' &&
github.event_name != 'pull_request'
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
with:
name: gfx1250-b0-a0-sha-pairs
path: ${{ env.ROCJITSU_DBT_SHA_MANIFEST }}
if-no-files-found: error
retention-days: 45
# PR jobs intentionally have no write token. They publish only data here;
# the trusted workflow_run job downloads it and maintains the PR comment.
- name: Upload PR gfx1250 B0-to-A0 SHA pairs
if: >-
matrix.name == 'release' &&
steps.finalize_dbt_sha_pairs.outcome == 'success' &&
github.event_name == 'pull_request'
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
with:
name: gfx1250-b0-a0-sha-pairs-candidate
path: ${{ env.ROCJITSU_DBT_SHA_MANIFEST }}
if-no-files-found: error
retention-days: 7
# Debugging aid only. The pinned extraction is reproducible, so retain
# translator logs but never upload the extracted HSACOs.
- name: Upload gfx1250 DBT diagnostic logs
if: always() && matrix.enable_tsan == 0
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
with:
name: gfx1250-dbt-logs-${{ matrix.name }}
path: ${{ env.ROCJITSU_DBT_CORPUS_DIR }}/.pytest-artifacts/gfx1250-dbt
if-no-files-found: ignore
retention-days: 7