name: TheRock CI on: push: branches: - develop - release/therock-* pull_request: types: - opened - synchronize - reopened - labeled workflow_dispatch: inputs: projects: type: string description: "Insert space-separated list of projects to test or 'all' to test all projects. ex: 'projects/clr projects/rocminfo'" linux_amdgpu_families: type: string description: "Insert comma-separated list of Linux GPU families to build and test. ex: gfx94X, gfx950" default: "" windows_amdgpu_families: type: string description: "Insert comma-separated list of Windows GPU families to build and test. ex: gfx1151" default: "" permissions: contents: read concurrency: # A PR number if a pull request and otherwise the commit hash. This cancels # queued and in-progress runs for the same PR (presubmit) or commit # (postsubmit). The workflow name is prepended to avoid conflicts between # different workflows. group: ${{ github.workflow }}-${{ github.event.number || github.sha }} cancel-in-progress: true jobs: setup: name: "Setup" runs-on: ubuntu-24.04 env: # The commit being checked out is the merge commit for a PR. Its first # parent will be the tip of the base branch. BASE_REF: HEAD^ outputs: linux_projects: ${{ steps.linux_projects.outputs.projects }} windows_projects: ${{ steps.windows_projects.outputs.projects }} run_linux_rccl_ci: ${{ steps.linux_projects.outputs.run_linux_rccl_ci }} run_mi455_test: ${{ steps.linux_projects.outputs.run_mi455_test }} test_type: ${{ steps.linux_projects.outputs.test_type }} package_version: ${{ steps.rocm_package_version.outputs.rocm_package_version }} linux_package_targets: ${{ steps.configure_linux.outputs.package_targets }} windows_package_targets: ${{ steps.configure_windows.outputs.package_targets }} linux_build_runs_on: ${{ steps.linux_projects.outputs.build_runs_on }} windows_build_runs_on: ${{ steps.windows_projects.outputs.build_runs_on }} steps: - name: Checkout code uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 with: sparse-checkout: .github sparse-checkout-cone-mode: true fetch-depth: 2 - name: Set up Python uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5.6.0 with: python-version: "3.12" - name: Install python dependencies run: | python -m pip install --upgrade pip pip install pydantic pytest requests - name: Run TheRock CI unit tests run: python -m pytest .github/scripts/tests/therock_configure_ci_test.py - name: Checkout TheRock repository uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 with: repository: "ROCm/TheRock" path: TheRock ref: release/therock-10.0 - name: Checkout CI config uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 with: repository: ROCm/therock-ci-config ref: main path: ci-config continue-on-error: true - name: Detect changed subtrees id: detect if: github.event_name == 'pull_request' env: GH_TOKEN: ${{ github.token }} run: | python .github/scripts/pr_detect_changed_subtrees.py \ --repo "${{ github.repository }}" \ --pr "${{ github.event.pull_request.number }}" \ --config ".github/repos-config.json" - name: Set PR_LABELS variable with labels assigned to pull request if: ${{ github.event.pull_request }} env: GITHUB_TOKEN: ${{ github.token }} PR_NUMBER: ${{ github.event.number }} run: | echo "PR_LABELS=$(gh pr view ${PR_NUMBER} --json labels)" >> $GITHUB_ENV - name: Determine Linux projects to run id: linux_projects env: SUBTREES: ${{ steps.detect.outputs.subtrees }} PROJECTS: ${{ inputs.projects }} PLATFORM: "linux" run: | python .github/scripts/therock_configure_ci.py - name: Determine Windows projects to run id: windows_projects env: SUBTREES: ${{ steps.detect.outputs.subtrees }} PROJECTS: ${{ inputs.projects }} PLATFORM: "windows" run: | python .github/scripts/therock_configure_ci.py - name: Compute package version id: rocm_package_version run: | python TheRock/build_tools/compute_rocm_package_version.py --release-type=dev - name: Fetch Linux targets for build and test env: THEROCK_PACKAGE_PLATFORM: "linux" AMDGPU_FAMILIES: ${{ inputs.linux_amdgpu_families || 'gfx94X, gfx950' }} CI_CONFIG_PATH: ci-config id: configure_linux run: python ./TheRock/build_tools/github_actions/fetch_package_targets.py - name: Fetch Windows targets for build and test env: THEROCK_PACKAGE_PLATFORM: "windows" AMDGPU_FAMILIES: ${{ inputs.windows_amdgpu_families || 'gfx1151' }} CI_CONFIG_PATH: ci-config id: configure_windows run: python ./TheRock/build_tools/github_actions/fetch_package_targets.py therock-ci-linux: name: Linux (${{ matrix.projects.projects_to_test }} | ${{ matrix.target_bundle.amdgpu_family }}) permissions: contents: read id-token: write needs: setup if: ${{ needs.setup.outputs.linux_projects != '[]' }} strategy: fail-fast: false matrix: projects: ${{ fromJSON(needs.setup.outputs.linux_projects) }} target_bundle: ${{ fromJSON(needs.setup.outputs.linux_package_targets) }} uses: ./.github/workflows/therock-ci-linux.yml secrets: inherit with: cmake_options: ${{ matrix.projects.cmake_options }} projects_to_test: ${{ matrix.projects.projects_to_test }} test_type: ${{ needs.setup.outputs.test_type }} package_version: ${{ needs.setup.outputs.package_version }} amdgpu_families: ${{ matrix.target_bundle.amdgpu_family }} test_runs_on: ${{ matrix.target_bundle.test_machine }} build_runs_on: ${{ needs.setup.outputs.linux_build_runs_on }} # TEMPORARY: MI455 (gfx125X) Build - Blocking job (included in summary) # Separated from therock-ci-linux matrix so MI455 tests can depend only on this # build, not on other families' tests which may take longer. # TODO: Remove this separate job once MI455 test infrastructure is stable and # we have sufficient MI455 machine capacity to run tests without blocking PRs. therock-build-linux-mi455: name: Linux MI455 Build (gfx125X-dcgpu) permissions: contents: read id-token: write needs: setup if: ${{ needs.setup.outputs.linux_projects != '[]' && needs.setup.outputs.run_mi455_test == 'true' }} uses: ./.github/workflows/therock-build-linux.yml secrets: inherit with: package_version: ${{ needs.setup.outputs.package_version }} amdgpu_families: gfx125X-dcgpu build_runs_on: ${{ needs.setup.outputs.linux_build_runs_on }} # TEMPORARY: MI455 (gfx125X) Test - Non-blocking job (excluded from summary) # This job is intentionally excluded from therock_ci_summary to avoid blocking PRs. # MI455 machines are limited, so jobs may queue for extended periods. By keeping # tests separate, PRs can still merge while MI455 tests run or wait in queue. # TODO: Remove this separate job once MI455 test infrastructure is stable and # we have sufficient MI455 machine capacity to run tests without blocking PRs. therock-test-linux-mi455: name: Linux MI455 Test needs: [setup, therock-build-linux-mi455] if: ${{ needs.setup.outputs.run_mi455_test == 'true' }} uses: ./.github/workflows/therock-test-packages.yml with: projects_to_test: "hip-tests, rocrtst" amdgpu_families: gfx125X-dcgpu # MI455 machine is down - disabled until back online (was: linux-mi455-gpu-rocm) test_runs_on: "" platform: linux artifact_run_id: ${{ github.run_id }} therock-rccl-ci-linux: name: TheRock RCCL CI Linux needs: setup if: ${{ needs.setup.outputs.run_linux_rccl_ci == 'true' }} permissions: contents: read id-token: write strategy: fail-fast: false matrix: amdgpu_family: [gfx94X-dcgpu, gfx950-dcgpu] uses: ./.github/workflows/therock-rccl-ci-linux.yml secrets: inherit with: amdgpu_families: ${{ matrix.amdgpu_family }} artifact_group: ${{ matrix.amdgpu_family }} package_version: ${{ needs.setup.outputs.package_version }} cmake_options: > -DTHEROCK_ENABLE_ALL=OFF -DTHEROCK_BUILD_TESTING=ON -DTHEROCK_BUNDLE_SYSDEPS=ON -DTHEROCK_ENABLE_COMM_LIBS=ON -DTHEROCK_ENABLE_ROCPROFV3=ON -DTHEROCK_ENABLE_MPI=ON therock-ci-windows: name: Windows (${{ matrix.projects.projects_to_test }} | ${{ matrix.target_bundle.amdgpu_family }}) permissions: contents: read id-token: write needs: setup if: ${{ needs.setup.outputs.windows_projects != '[]' }} strategy: fail-fast: false matrix: projects: ${{ fromJSON(needs.setup.outputs.windows_projects) }} target_bundle: ${{ fromJSON(needs.setup.outputs.windows_package_targets) }} uses: ./.github/workflows/therock-ci-windows.yml secrets: inherit with: cmake_options: ${{ matrix.projects.cmake_options }} projects_to_test: ${{ matrix.projects.projects_to_test }} test_type: ${{ needs.setup.outputs.test_type }} package_version: ${{ needs.setup.outputs.package_version }} amdgpu_families: ${{ matrix.target_bundle.amdgpu_family }} test_runs_on: ${{ matrix.target_bundle.test_machine }} build_runs_on: ${{ needs.setup.outputs.windows_build_runs_on }} therock_ci_summary: name: TheRock CI Summary if: always() needs: - setup - therock-ci-linux - therock-build-linux-mi455 - therock-rccl-ci-linux - therock-ci-windows runs-on: ubuntu-24.04 steps: - name: Output failed jobs run: | echo '${{ toJson(needs) }}' FAILED_JOBS="$(echo '${{ toJson(needs) }}' \ | jq --raw-output \ 'map_values(select(.result!="success" and .result!="skipped")) | keys | join(",")' \ )" if [[ "${FAILED_JOBS}" != "" ]]; then echo "The following jobs failed: ${FAILED_JOBS}" exit 1 fi