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
568 lines
24 KiB
YAML
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
|