# Copyright 2022 The IREE Authors
#
# Licensed under the Apache License v2.0 with LLVM Exceptions.
# See https://llvm.org/LICENSE.txt for license information.
# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception

name: CI

# A few notes:
#
# Variables:
# GitHub actions don't have variables or even support normal yaml anchors (they
# are specially disabled because...reasons?):
# See https://github.com/github-community/community/discussions/4501
# https://github.community/t/support-for-yaml-anchors/16128/92
# https://github.com/actions/runner/issues/1182
# Neither does it have any contexts that are available everywhere. The
# top-level `env` field is available in many places, but not all. We already
# have a "setup" job that every other job depends on, so we leverage that
# for variables that every other job can use, since that *is* available in all
# sub-fields of the job.
# See https://docs.github.com/en/actions/learn-github-actions/contexts#context-availability
# and https://github.com/community/community/discussions/27370
#
# Runner label ordering:
# - self-hosted always has to be listed first in a runs-on block:
# https://docs.github.com/en/actions/hosting-your-own-runners/using-self-hosted-runners-in-a-workflow

on:
  workflow_dispatch:
  pull_request:
  push:
    branches:
      - main

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

env:
  # This needs to be in env instead of the outputs of setup because it contains
  # the run attempt and we want that to be the current attempt, not whatever
  # attempt the setup step last ran in.
  GCS_URL: https://storage.googleapis.com/iree-github-actions-${{ github.event_name == 'pull_request' && 'presubmit' || 'postsubmit' }}-artifacts/${{ github.run_id }}/${{ github.run_attempt }}

# Jobs are organized into groups and topologically sorted by dependencies
jobs:
  setup:
    uses: ./.github/workflows/setup.yml

  ################################### Basic ####################################
  # Jobs that build all of IREE "normally"
  ##############################################################################
  build_all:
    needs: setup
    if: contains(fromJson(needs.setup.outputs.enabled-jobs), 'build_all')
    uses: ./.github/workflows/build_all.yml
    with:
      runner-group: ${{ needs.setup.outputs.runner-group }}
      runner-env: ${{ needs.setup.outputs.runner-env }}
      write-caches: ${{ needs.setup.outputs.write-caches }}
      run-tests: true

  build_test_all_arm64:
    needs: setup
    if: contains(fromJson(needs.setup.outputs.enabled-jobs), 'build_test_all_arm64')
    runs-on:
      - self-hosted # must come first
      - runner-group=${{ needs.setup.outputs.runner-group }}
      - environment=${{ needs.setup.outputs.runner-env }}
      - arm64
      - os-family=Linux
    env:
      BUILD_DIR: build-arm64
    steps:
      - name: "Checking out repository"
        uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c # v3.3.0
        with:
          submodules: true
      - name: "Building IREE"
        env:
          IREE_WRITE_REMOTE_CCACHE: ${{ needs.setup.outputs.write-caches }}
        run: |
          ./build_tools/github_actions/docker_run.sh \
            --env "IREE_CCACHE_GCP_TOKEN=$(gcloud auth application-default print-access-token)" \
            --env "IREE_WRITE_REMOTE_CCACHE=${IREE_WRITE_REMOTE_CCACHE}" \
            --env "CCACHE_NAMESPACE=gcr.io/iree-oss/base-arm64@sha256:9daa1cdbbf12da8527319ece76a64d06219e04ecb99a4cff6e6364235ddf6c59" \
            --env "IREE_BUILD_SETUP_PYTHON_VENV=${BUILD_DIR}/.venv" \
            gcr.io/iree-oss/base-arm64@sha256:9daa1cdbbf12da8527319ece76a64d06219e04ecb99a4cff6e6364235ddf6c59 \
            ./build_tools/cmake/build_all.sh \
            "${BUILD_DIR}"
      - name: "Testing IREE"
        run: |
          ./build_tools/github_actions/docker_run.sh \
            --env "IREE_ARM_SME_QEMU_AARCH64_BIN=/usr/bin/qemu-aarch64" \
            gcr.io/iree-oss/base-arm64@sha256:9daa1cdbbf12da8527319ece76a64d06219e04ecb99a4cff6e6364235ddf6c59 \
            ./build_tools/cmake/ctest_all.sh \
            "${BUILD_DIR}"

  # Disabled since
  #   * windows-2022 is too slow
  #   * windows-2022-64core is too expensive (and takes ~8 minutes just to checkout the repo)
  #   * we don't have self-hosted Windows runners with enough cores yet
  # build_test_all_windows:
  #   needs: setup
  #   if: contains(fromJson(needs.setup.outputs.enabled-jobs), 'build_test_all_windows')
  #   # TODO(saienduri): switch to self-hosted
  #   runs-on: windows-2022
  #   defaults:
  #     run:
  #       shell: bash
  #   env:
  #     BUILD_DIR: build-windows
  #   steps:
  #     - name: "Checking out repository"
  #       uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c # v3.3.0
  #       with:
  #         submodules: true
  #     - id: "gcp-auth"
  #       name: "Authenticating to Google Cloud"
  #       if: needs.setup.outputs.write-caches == 1
  #       uses: "google-github-actions/auth@v1"
  #       with:
  #         token_format: "access_token"
  #         credentials_json: "${{ secrets.IREE_OSS_GITHUB_RUNNER_BASIC_TRUST_SERVICE_ACCOUNT_KEY }}"
  #         create_credentials_file: false
  #     - name: "Setting up Python"
  #       uses: actions/setup-python@d27e3f3d7c64b4bbf8e4abfb9b63b83e846e0435 # v4.5.0
  #       with:
  #         python-version: "3.10" # Needs pybind >= 2.10.1 for Python >= 3.11
  #     - name: "Installing Python packages"
  #       run: |
  #         python3 -m venv .venv
  #         .venv/Scripts/activate.bat
  #         python3 -m pip install -r runtime/bindings/python/iree/runtime/build_requirements.txt
  #     - name: "Installing requirements"
  #       run: choco install ccache --yes
  #     - name: "Configuring MSVC"
  #       uses: ilammy/msvc-dev-cmd@7315a94840631165970262a99c72cfb48a65d25d # v1.12.0
  #     # Finally: build and run tests.
  #     - name: "Building IREE"
  #       env:
  #         IREE_WRITE_REMOTE_CCACHE: ${{ needs.setup.outputs.write-caches }}
  #         IREE_CCACHE_GCP_TOKEN: ${{ steps.gcp-auth.outputs.access_token }}
  #         CCACHE_NAMESPACE: github-windows-2022
  #       run: ./build_tools/cmake/build_all.sh "${BUILD_DIR}"
  #     - name: "Testing IREE"
  #       run: ./build_tools/cmake/ctest_all.sh "${BUILD_DIR}"

  build_test_all_macos_arm64:
    needs: setup
    if: contains(fromJson(needs.setup.outputs.enabled-jobs), 'build_test_all_macos_arm64')
    runs-on:
      - ${{ github.repository == 'iree-org/iree' && 'self-hosted' || 'macos-12' }} # must come first
      - runner-group=postsubmit
      - os-family=macOS
    env:
      BUILD_DIR: build-macos
    steps:
      - name: "Checking out repository"
        uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c # v3.3.0
      - name: "Updating git submodules"
        run: git submodule update --init --jobs 8 --depth 1
      - name: "Installing Python packages"
        run: |
          python3 -m venv .venv
          source .venv/bin/activate
          python3 -m pip install -r runtime/bindings/python/iree/runtime/build_requirements.txt
      - name: "Building IREE"
        env:
          IREE_READ_REMOTE_CCACHE: 0
          IREE_WRITE_REMOTE_CCACHE: 0
          IREE_READ_LOCAL_CCACHE: 1
          IREE_WRITE_LOCAL_CCACHE: ${{ needs.setup.outputs.write-caches }}
          # We'll remove the GITHUB_WORKSPACE directory after the job.
          # Persist the cache by storing in the parent directory.
          CCACHE_DIR: ${{ github.workspace }}/../.ccache
          CCACHE_MAXSIZE: 30G
        run: |
          source .venv/bin/activate
          bash ./build_tools/cmake/build_all.sh "${BUILD_DIR}"
      - name: "Testing IREE"
        run: |
          source .venv/bin/activate
          IREE_METAL_DISABLE=0 bash ./build_tools/cmake/ctest_all.sh "${BUILD_DIR}"

  build_test_all_macos_x86_64:
    needs: setup
    if: contains(fromJson(needs.setup.outputs.enabled-jobs), 'build_test_all_macos_x86_64')
    runs-on: macos-13-xl
    env:
      BUILD_DIR: build-macos
    defaults:
      run:
        shell: bash
    steps:
      - name: "Checking out repository"
        uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c # v3.3.0
      - id: "gcp-auth"
        name: "Authenticating to Google Cloud"
        if: needs.setup.outputs.write-caches == 1
        uses: "google-github-actions/auth@v1"
        with:
          token_format: "access_token"
          credentials_json: "${{ secrets.IREE_OSS_GITHUB_RUNNER_BASIC_TRUST_SERVICE_ACCOUNT_KEY }}"
          create_credentials_file: false
      - name: "Updating git submodules"
        run: git submodule update --init --jobs 8 --depth 1
      # There are multiple versions of Xcode and SDKs installed on the macOS runner.
      # Select the latest Xcode app to enable using Metal offline toolchain.
      - name: "Update Xcode command line tools path"
        run: |
          sudo xcode-select --switch /Applications/Xcode.app/Contents/Developer
          xcrun metal --version
          xcrun metallib --version
      - name: "Setting up Python"
        uses: actions/setup-python@d27e3f3d7c64b4bbf8e4abfb9b63b83e846e0435 # v4.5.0
        with:
          python-version: "3.10"
          cache: "pip"
      - name: "Installing Python packages"
        run: pip install -r runtime/bindings/python/iree/runtime/build_requirements.txt
      - name: "Installing requirements"
        # We need coreutils for `realpath` used in scripts.
        # We need bash because the default one on macOS is fairly old and lacks
        # features we use in scripts.
        run: brew install ninja ccache coreutils bash
      # Finally: build and run tests.
      - name: "Building IREE"
        env:
          IREE_WRITE_REMOTE_CCACHE: ${{ needs.setup.outputs.write-caches }}
          IREE_CCACHE_GCP_TOKEN: ${{ steps.gcp-auth.outputs.access_token }}
          CCACHE_NAMESPACE: github-macos-12-xl
        run: bash ./build_tools/cmake/build_all.sh "${BUILD_DIR}"
      - name: "Testing IREE"
        run: bash ./build_tools/cmake/ctest_all.sh "${BUILD_DIR}"

  build_test_all_bazel:
    needs: setup
    if: contains(fromJson(needs.setup.outputs.enabled-jobs), 'build_test_all_bazel')
    runs-on:
      - self-hosted # must come first
      - runner-group=${{ needs.setup.outputs.runner-group }}
      - environment=${{ needs.setup.outputs.runner-env }}
      - cpu
      - os-family=Linux
    steps:
      - name: "Checking out repository"
        uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c # v3.3.0
        with:
          submodules: true
      - name: "Building with Bazel"
        env:
          IREE_WRITE_REMOTE_BAZEL_CACHE: ${{ needs.setup.outputs.write-caches }}
        run: |
          ./build_tools/github_actions/docker_run.sh \
            --env "IREE_WRITE_REMOTE_BAZEL_CACHE=${IREE_WRITE_REMOTE_BAZEL_CACHE}" \
            gcr.io/iree-oss/base-bleeding-edge@sha256:c5f28883e6c570c20128fb37d7af3a00a25df3ce4e2b3a24c3a8dcd183182a27 \
            ./build_tools/bazel/build_test_all.sh

  test_nvidia_gpu:
    needs: [setup, build_all]
    if: contains(fromJson(needs.setup.outputs.enabled-jobs), 'test_nvidia_gpu')
    env:
      BUILD_DIR: build-tests
      INSTALL_DIR: ${{ needs.build_all.outputs.install-dir }}
      INSTALL_DIR_ARCHIVE: ${{ needs.build_all.outputs.install-dir-archive }}
      INSTALL_DIR_GCS_URL: ${{ needs.build_all.outputs.install-dir-gcs-url }}
      IREE_CPU_DISABLE: 1
      IREE_VULKAN_DISABLE: 0
      IREE_CUDA_DISABLE: 0
      IREE_HIP_DISABLE: 1
    runs-on:
      - self-hosted # must come first
      - runner-group=${{ needs.setup.outputs.runner-group }}
      - environment=${{ needs.setup.outputs.runner-env }}
      - gpu
      - os-family=Linux
    steps:
      - name: "Checking out repository"
        uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c # v3.3.0
      - name: "Checking out runtime submodules"
        run: ./build_tools/scripts/git/update_runtime_submodules.sh
      - name: Querying GPU information
        run: |
          ./build_tools/scripts/check_cuda.sh
          ./build_tools/scripts/check_vulkan.sh
      - name: "Downloading install dir archive"
        run: wget "${INSTALL_DIR_GCS_URL}" -O "${INSTALL_DIR_ARCHIVE}"
      - name: "Extracting install directory"
        run: tar -xf "${INSTALL_DIR_ARCHIVE}"
      - name: "Building tests"
        run: |
          ./build_tools/github_actions/docker_run.sh \
              --env IREE_CPU_DISABLE \
              --env IREE_VULKAN_DISABLE \
              --env IREE_CUDA_DISABLE \
              --env IREE_HIP_DISABLE \
              gcr.io/iree-oss/nvidia@sha256:82fa00b5cdda1b35634796cd0f88cb5d6d22d80328b94bfb51e5f2820598ba23 \
              ./build_tools/pkgci/build_tests_using_package.sh ${INSTALL_DIR}
      - name: "Running GPU tests"
        env:
          IREE_CTEST_LABEL_REGEX: ^requires-gpu|^driver=vulkan$|^driver=cuda$
          IREE_NVIDIA_SM80_TESTS_DISABLE: 1
          IREE_MULTI_DEVICE_TESTS_DISABLE: 1
        run: |
          ./build_tools/github_actions/docker_run.sh \
              --env IREE_VULKAN_DISABLE \
              --env IREE_CUDA_DISABLE \
              --env IREE_HIP_DISABLE \
              --env IREE_CTEST_LABEL_REGEX \
              --env IREE_NVIDIA_SM80_TESTS_DISABLE \
              --env IREE_MULTI_DEVICE_TESTS_DISABLE \
              --env IREE_VULKAN_F16_DISABLE=0 \
              --env IREE_NVIDIA_GPU_TESTS_DISABLE=0 \
              --env CTEST_PARALLEL_LEVEL=2 \
              --env NVIDIA_DRIVER_CAPABILITIES=all \
              --gpus all \
              gcr.io/iree-oss/nvidia@sha256:82fa00b5cdda1b35634796cd0f88cb5d6d22d80328b94bfb51e5f2820598ba23 \
              bash -euo pipefail -c \
                "./build_tools/scripts/check_cuda.sh
                ./build_tools/scripts/check_vulkan.sh
                ./build_tools/cmake/ctest_all.sh ${BUILD_DIR}"

  test_nvidia_a100:
    needs: [setup, build_all]
    if: contains(fromJson(needs.setup.outputs.enabled-jobs), 'test_nvidia_a100')
    env:
      BUILD_DIR: build-tests
      INSTALL_DIR: ${{ needs.build_all.outputs.install-dir }}
      INSTALL_DIR_ARCHIVE: ${{ needs.build_all.outputs.install-dir-archive }}
      INSTALL_DIR_GCS_URL: ${{ needs.build_all.outputs.install-dir-gcs-url }}
      IREE_CPU_DISABLE: 1
      IREE_VULKAN_DISABLE: 0
      IREE_CUDA_DISABLE: 0
      IREE_HIP_DISABLE: 1
    runs-on:
      - self-hosted # must come first
      - runner-group=${{ needs.setup.outputs.runner-group }}
      - environment=${{ needs.setup.outputs.runner-env }}
      - a100
      - os-family=Linux
    steps:
      - name: "Checking out repository"
        uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c # v3.3.0
      - name: "Checking out runtime submodules"
        run: ./build_tools/scripts/git/update_runtime_submodules.sh
      - name: Querying GPU information
        run: |
          ./build_tools/scripts/check_cuda.sh
          ./build_tools/scripts/check_vulkan.sh
      - name: "Downloading install dir archive"
        run: wget "${INSTALL_DIR_GCS_URL}" -O "${INSTALL_DIR_ARCHIVE}"
      - name: "Extracting install directory"
        run: tar -xf "${INSTALL_DIR_ARCHIVE}"
      - name: "Building tests"
        run: |
          ./build_tools/github_actions/docker_run.sh \
              --env IREE_CPU_DISABLE \
              --env IREE_VULKAN_DISABLE \
              --env IREE_CUDA_DISABLE \
              --env IREE_HIP_DISABLE \
              gcr.io/iree-oss/nvidia@sha256:82fa00b5cdda1b35634796cd0f88cb5d6d22d80328b94bfb51e5f2820598ba23 \
              ./build_tools/pkgci/build_tests_using_package.sh ${INSTALL_DIR}
      - name: "Running GPU tests"
        env:
          IREE_CTEST_LABEL_REGEX: ^requires-gpu-sm80|^requires-gpu|^driver=vulkan$|^driver=cuda$
          IREE_NVIDIA_SM80_TESTS_DISABLE: 0
          IREE_MULTI_DEVICE_TESTS_DISABLE: 1
        run: |
          ./build_tools/github_actions/docker_run.sh \
              --env IREE_VULKAN_DISABLE \
              --env IREE_CUDA_DISABLE \
              --env IREE_HIP_DISABLE \
              --env IREE_CTEST_LABEL_REGEX \
              --env IREE_NVIDIA_SM80_TESTS_DISABLE \
              --env IREE_MULTI_DEVICE_TESTS_DISABLE \
              --env IREE_VULKAN_F16_DISABLE=0 \
              --env IREE_NVIDIA_GPU_TESTS_DISABLE=0 \
              --env CTEST_PARALLEL_LEVEL=4 \
              --env NVIDIA_DRIVER_CAPABILITIES=all \
              --gpus all \
              gcr.io/iree-oss/nvidia@sha256:82fa00b5cdda1b35634796cd0f88cb5d6d22d80328b94bfb51e5f2820598ba23 \
              bash -euo pipefail -c \
                "./build_tools/scripts/check_cuda.sh
                ./build_tools/scripts/check_vulkan.sh
                ./build_tools/cmake/ctest_all.sh ${BUILD_DIR}"

  test_amd_mi250:
    needs: [setup, build_all]
    if: contains(fromJson(needs.setup.outputs.enabled-jobs), 'test_amd_mi250')
    env:
      BUILD_DIR: build-tests
      INSTALL_DIR: ${{ needs.build_all.outputs.install-dir }}
      INSTALL_DIR_ARCHIVE: ${{ needs.build_all.outputs.install-dir-archive }}
      INSTALL_DIR_GCS_URL: ${{ needs.build_all.outputs.install-dir-gcs-url }}
      IREE_CPU_DISABLE: 1
      IREE_VULKAN_DISABLE: 1
      IREE_CUDA_DISABLE: 1
      IREE_HIP_DISABLE: 0
      IREE_HIP_TEST_TARGET_CHIP: "gfx90a"
    runs-on: nodai-amdgpu-mi250-x86-64
    steps:
      - name: "Checking out repository"
        uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c # v3.3.0
      - name: "Checking out runtime submodules"
        run: ./build_tools/scripts/git/update_runtime_submodules.sh
      - name: "Downloading install dir archive"
        run: wget "${INSTALL_DIR_GCS_URL}" -O "${INSTALL_DIR_ARCHIVE}"
      - name: "Extracting install directory"
        run: tar -xf "${INSTALL_DIR_ARCHIVE}"
      - name: "Building tests"
        run: |
          ./build_tools/pkgci/build_tests_using_package.sh ${INSTALL_DIR}
      - name: "Running GPU tests"
        env:
          IREE_CTEST_LABEL_REGEX: ^requires-gpu|^driver=hip$
          IREE_NVIDIA_SM80_TESTS_DISABLE: 1
          IREE_MULTI_DEVICE_TESTS_DISABLE: 0
          IREE_AMD_RDNA3_TESTS_DISABLE: 1
          IREE_NVIDIA_GPU_TESTS_DISABLE: 0
          IREE_CUDA_DISABLE: 1
          IREE_CPU_DISABLE: 1
          IREE_HIP_DISABLE: 0
        run: |
          ./build_tools/cmake/ctest_all.sh ${BUILD_DIR}

  # TODO(saienduri): re-enable when iree/hal/drivers/hip/dynamic_symbols_test is fixed
  # test_amd_w7900:
  #   needs: [setup, build_all]
  #   if: contains(fromJson(needs.setup.outputs.enabled-jobs), 'test_amd_w7900')
  #   env:
  #     BUILD_DIR: build-tests
  #     INSTALL_DIR: ${{ needs.build_all.outputs.install-dir }}
  #     INSTALL_DIR_ARCHIVE: ${{ needs.build_all.outputs.install-dir-archive }}
  #     INSTALL_DIR_GCS_URL: ${{ needs.build_all.outputs.install-dir-gcs-url }}
  #     IREE_CPU_DISABLE: 1
  #     IREE_VULKAN_DISABLE: 0
  #     IREE_CUDA_DISABLE: 1
  #     IREE_HIP_DISABLE: 0
  #     IREE_HIP_TEST_TARGET_CHIP: "gfx1100"
  #   runs-on: nodai-amdgpu-w7900-x86-64
  #   steps:
  #     - name: "Checking out repository"
  #       uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c # v3.3.0
  #     - name: "Checking out runtime submodules"
  #       run: ./build_tools/scripts/git/update_runtime_submodules.sh
  #     - name: "Downloading install dir archive"
  #       run: wget "${INSTALL_DIR_GCS_URL}" -O "${INSTALL_DIR_ARCHIVE}"
  #     - name: "Extracting install directory"
  #       run: tar -xf "${INSTALL_DIR_ARCHIVE}"
  #     - name: "Building tests"
  #       run: |
  #         ./build_tools/pkgci/build_tests_using_package.sh ${INSTALL_DIR}
  #     - name: "Running GPU tests"
  #       env:
  #         IREE_CTEST_LABEL_REGEX: ^requires-gpu|^driver=vulkan$|^driver=hip$
  #         IREE_AMD_RDNA3_TESTS_DISABLE: 0
  #         IREE_NVIDIA_GPU_TESTS_DISABLE: 0
  #         IREE_NVIDIA_SM80_TESTS_DISABLE: 1
  #         IREE_MULTI_DEVICE_TESTS_DISABLE: 0
  #         IREE_CUDA_DISABLE: 1
  #         IREE_CPU_DISABLE: 1
  #         IREE_HIP_DISABLE: 0
  #       run: |
  #         ./build_tools/cmake/ctest_all.sh ${BUILD_DIR}

  ################################## Subsets ###################################
  # Jobs that build some subset of IREE
  ##############################################################################
  build_test_runtime:
    needs: setup
    if: contains(fromJson(needs.setup.outputs.enabled-jobs), 'build_test_runtime')
    runs-on: ubuntu-20.04
    env:
      BUILD_DIR: build-runtime
    steps:
      - name: "Checking out repository"
        uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c # v3.3.0
      - name: "Checking out runtime submodules"
        run: ./build_tools/scripts/git/update_runtime_submodules.sh
      - name: "Building runtime"
        run: |
          ./build_tools/github_actions/docker_run.sh \
            --env "BUILD_PRESET=test" \
            gcr.io/iree-oss/base@sha256:dc314b4fe30fc1315742512891357bffed4d1b62ffcb46258b1e0761c737b446 \
            ./build_tools/cmake/build_runtime.sh \
            "${BUILD_DIR}"
      - name: "Testing runtime"
        run: |
          ./build_tools/github_actions/docker_run.sh \
            gcr.io/iree-oss/base@sha256:dc314b4fe30fc1315742512891357bffed4d1b62ffcb46258b1e0761c737b446 \
            ./build_tools/cmake/ctest_all.sh \
            "${BUILD_DIR}"

  build_test_runtime_arm64:
    needs: setup
    if: contains(fromJson(needs.setup.outputs.enabled-jobs), 'build_test_runtime_arm64')
    runs-on:
      - self-hosted # must come first
      - runner-group=${{ needs.setup.outputs.runner-group }}
      - environment=${{ needs.setup.outputs.runner-env }}
      - arm64
      - os-family=Linux
    env:
      BUILD_DIR: build-runtime-arm64
    steps:
      - name: "Checking out repository"
        uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c # v3.3.0
      - name: "Checking out runtime submodules"
        run: ./build_tools/scripts/git/update_runtime_submodules.sh
      - name: "Building runtime"
        run: |
          ./build_tools/github_actions/docker_run.sh \
            --env "BUILD_PRESET=test" \
            gcr.io/iree-oss/base-arm64@sha256:9daa1cdbbf12da8527319ece76a64d06219e04ecb99a4cff6e6364235ddf6c59 \
            ./build_tools/cmake/build_runtime.sh \
            "${BUILD_DIR}"
      - name: "Testing runtime"
        run: |
          ./build_tools/github_actions/docker_run.sh \
            gcr.io/iree-oss/base-arm64@sha256:9daa1cdbbf12da8527319ece76a64d06219e04ecb99a4cff6e6364235ddf6c59 \
            ./build_tools/cmake/ctest_all.sh \
            "${BUILD_DIR}"

  build_test_runtime_windows:
    needs: setup
    if: contains(fromJson(needs.setup.outputs.enabled-jobs), 'build_test_runtime_windows')
    runs-on: windows-2022
    defaults:
      run:
        shell: bash
    env:
      BUILD_DIR: build-runtime-windows
    steps:
      - name: "Checking out repository"
        uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c # v3.3.0
      - name: "Checking out runtime submodules"
        run: ./build_tools/scripts/git/update_runtime_submodules.sh
      - name: "Configuring MSVC"
        uses: ilammy/msvc-dev-cmd@7315a94840631165970262a99c72cfb48a65d25d # v1.12.0
      - name: "Installing Python requirements"
        run: pip install -r ./runtime/bindings/python/iree/runtime/build_requirements.txt
      - name: "Building runtime"
        env:
          BUILD_PRESET: "test"
        run: ./build_tools/cmake/build_runtime.sh "${BUILD_DIR}"
      - name: "Testing runtime"
        run: ./build_tools/cmake/ctest_all.sh "${BUILD_DIR}"

  ############################### Configurations ###############################
  # Jobs that build IREE in some non-default configuration
  ##############################################################################
  python_release_packages:
    needs: setup
    if: contains(fromJson(needs.setup.outputs.enabled-jobs), 'python_release_packages')
    runs-on:
      - self-hosted # must come first
      - runner-group=${{ needs.setup.outputs.runner-group }}
      - environment=${{ needs.setup.outputs.runner-env }}
      - cpu
      - os-family=Linux
    steps:
      - name: Prefetch Docker
        run: |
          docker pull ghcr.io/nod-ai/manylinux_x86_64:main &
      - name: "Checking out repository"
        uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c # v3.3.0
        with:
          submodules: true
      - name: "Setting up Python"
        uses: actions/setup-python@d27e3f3d7c64b4bbf8e4abfb9b63b83e846e0435 # v4.5.0
        with:
          python-version: "3.9"
      - name: Wait for docker pull
        run: |
          wait
      - name: Build runtime wheels (Linux)
        shell: bash
        env:
          packages: "iree-runtime"
          output_dir: "${{ github.workspace }}/bindist"
          # Note when upgrading: Build just one Python version synced to our
          # minimum.
          override_python_versions: cp39-cp39
        run: |
          output_dir="$PWD" ./build_tools/python_deploy/build_linux_packages.sh
      - name: Validate runtime wheel (Linux)
        shell: bash
        run: |
          pip install --upgrade pip
          pip install --no-index -f $PWD -v iree-runtime
          echo "Testing default runtime:"
          python -m iree.runtime._package_test
          echo "Testing tracy runtime:"
          # GH runners don't expose the TSC but we want to make sure the basic packaging
          # works, so override the check with TRACY_NO_INVARIANT_CHECK=1 (per instructions
          # if this is left off).
          TRACY_NO_INVARIANT_CHECK=1 IREE_PY_RUNTIME=tracy \
            python -m iree.runtime._package_test
      # Note that it is just a trade-off decision to have this serialized
      # as a separate step vs parallelized as a separate job. The runtime
      # build is fast, pays the clone/docker overhead and provides early
      # signal (since it runs in just a couple of minutes).
      - name: Build compiler wheels (Linux)
        shell: bash
        env:
          packages: "iree-compiler"
          # Note when upgrading: Build just one Python version synced to our
          # minimum.
          override_python_versions: cp39-cp39
        run: |
          output_dir="$PWD" ./build_tools/python_deploy/build_linux_packages.sh
      - name: Validate compiler wheel (Linux)
        shell: bash
        run: |
          pip install --upgrade pip
          # Pre-fetch optional deps that iree-compiler needs (but we constrain that
          # to not consult a package index).
          pip install onnx>=1.15.0
          pip install --no-index -f $PWD -v iree-compiler[onnx]
          echo "Testing default compiler:"
          python -m iree.compiler._package_test
  asan:
    needs: setup
    if: contains(fromJson(needs.setup.outputs.enabled-jobs), 'asan')
    runs-on:
      - self-hosted # must come first
      - runner-group=${{ needs.setup.outputs.runner-group }}
      - environment=${{ needs.setup.outputs.runner-env }}
      - cpu
      - os-family=Linux
    steps:
      - name: "Checking out repository"
        uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c # v3.3.0
        with:
          submodules: true
      - name: "Building and testing with AddressSanitizer"
        env:
          IREE_WRITE_REMOTE_CCACHE: ${{ needs.setup.outputs.write-caches }}
        run: |
          # Note that this uses the latest version of the clang compiler, etc.
          # This gives us access to the latest features and validates that IREE
          # builds using the latest versions.
          ./build_tools/github_actions/docker_run.sh \
            --env "IREE_CCACHE_GCP_TOKEN=$(gcloud auth application-default print-access-token)" \
            --env "IREE_WRITE_REMOTE_CCACHE=${IREE_WRITE_REMOTE_CCACHE}" \
            --env "CCACHE_NAMESPACE=base-bleeding-edge@sha256:14200dacca3a0f3a66f8aa87c6f64729b83a2eeb403b689c24204074ad157418" \
            gcr.io/iree-oss/base-bleeding-edge@sha256:c5f28883e6c570c20128fb37d7af3a00a25df3ce4e2b3a24c3a8dcd183182a27 \
            ./build_tools/cmake/build_and_test_asan.sh

  tsan:
    needs: setup
    if: contains(fromJson(needs.setup.outputs.enabled-jobs), 'tsan')
    runs-on:
      - self-hosted # must come first
      - runner-group=${{ needs.setup.outputs.runner-group }}
      - environment=${{ needs.setup.outputs.runner-env }}
      - cpu
      - os-family=Linux
    steps:
      - name: "Checking out repository"
        uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c # v3.3.0
        with:
          submodules: true
      - name: "Building and testing with ThreadSanitizer"
        env:
          IREE_WRITE_REMOTE_CCACHE: ${{ needs.setup.outputs.write-caches }}
        run: |
          ./build_tools/github_actions/docker_run.sh \
            --env "IREE_CCACHE_GCP_TOKEN=$(gcloud auth application-default print-access-token)" \
            --env "IREE_WRITE_REMOTE_CCACHE=${IREE_WRITE_REMOTE_CCACHE}" \
            --env "CCACHE_NAMESPACE=gcr.io/iree-oss/base@sha256:dc314b4fe30fc1315742512891357bffed4d1b62ffcb46258b1e0761c737b446" \
            gcr.io/iree-oss/base@sha256:dc314b4fe30fc1315742512891357bffed4d1b62ffcb46258b1e0761c737b446 \
            ./build_tools/cmake/build_and_test_tsan.sh

  small_runtime:
    needs: setup
    if: contains(fromJson(needs.setup.outputs.enabled-jobs), 'small_runtime')
    runs-on: ubuntu-20.04
    env:
      BUILD_DIR: build-runtime
    steps:
      - name: "Checking out repository"
        uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c # v3.3.0
      - name: "Checking out runtime submodules"
        run: ./build_tools/scripts/git/update_runtime_submodules.sh
      - name: "Building size-optimized runtime"
        run: |
          ./build_tools/github_actions/docker_run.sh \
            gcr.io/iree-oss/base@sha256:dc314b4fe30fc1315742512891357bffed4d1b62ffcb46258b1e0761c737b446 \
            ./build_tools/cmake/build_runtime_small.sh \
            "${BUILD_DIR}"
      - name: "Testing runtime"
        run: |
          ./build_tools/github_actions/docker_run.sh \
            gcr.io/iree-oss/base@sha256:dc314b4fe30fc1315742512891357bffed4d1b62ffcb46258b1e0761c737b446 \
            ./build_tools/cmake/ctest_all.sh \
            "${BUILD_DIR}"

  gcc:
    needs: setup
    if: contains(fromJson(needs.setup.outputs.enabled-jobs), 'gcc')
    runs-on:
      - self-hosted # must come first
      - runner-group=${{ needs.setup.outputs.runner-group }}
      - environment=${{ needs.setup.outputs.runner-env }}
      - cpu
      - os-family=Linux
    env:
      BUILD_DIR: build-gcc
    steps:
      - name: "Checking out repository"
        uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c # v3.3.0
        with:
          submodules: true
      - name: "Building IREE with gcc"
        env:
          IREE_WRITE_REMOTE_CCACHE: ${{ needs.setup.outputs.write-caches }}
        run: |
          ./build_tools/github_actions/docker_run.sh \
            --env CC=/usr/bin/gcc-9 \
            --env CXX=/usr/bin/g++-9 \
            --env CMAKE_BUILD_TYPE=Release \
            --env "IREE_TARGET_BACKEND_WEBGPU_SPIRV=OFF" \
            --env "IREE_CCACHE_GCP_TOKEN=$(gcloud auth application-default print-access-token)" \
            --env "IREE_WRITE_REMOTE_CCACHE=${IREE_WRITE_REMOTE_CCACHE}" \
            --env "CCACHE_NAMESPACE=gcr.io/iree-oss/base@sha256:dc314b4fe30fc1315742512891357bffed4d1b62ffcb46258b1e0761c737b446" \
            --env "IREE_BUILD_SETUP_PYTHON_VENV=${BUILD_DIR}/.venv" \
            gcr.io/iree-oss/base@sha256:dc314b4fe30fc1315742512891357bffed4d1b62ffcb46258b1e0761c737b446 \
            ./build_tools/cmake/build_all.sh \
            "${BUILD_DIR}"

  tracing:
    needs: setup
    if: contains(fromJson(needs.setup.outputs.enabled-jobs), 'tracing')
    runs-on:
      - self-hosted # must come first
      - runner-group=${{ needs.setup.outputs.runner-group }}
      - environment=${{ needs.setup.outputs.runner-env }}
      - cpu
      - os-family=Linux
    env:
      BUILD_DIR: build-tracing
    steps:
      - name: "Checking out repository"
        uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c # v3.3.0
        with:
          submodules: true
      - name: "Building IREE with tracing enabled"
        env:
          IREE_WRITE_REMOTE_CCACHE: ${{ needs.setup.outputs.write-caches }}
        run: |
          # TODO(#11394): Enable Web GPU
          ./build_tools/github_actions/docker_run.sh \
            --env "IREE_CCACHE_GCP_TOKEN=$(gcloud auth application-default print-access-token)" \
            --env "IREE_WRITE_REMOTE_CCACHE=${IREE_WRITE_REMOTE_CCACHE}" \
            --env "CCACHE_NAMESPACE=gcr.io/iree-oss/base@sha256:dc314b4fe30fc1315742512891357bffed4d1b62ffcb46258b1e0761c737b446" \
            gcr.io/iree-oss/base@sha256:dc314b4fe30fc1315742512891357bffed4d1b62ffcb46258b1e0761c737b446 \
            ./build_tools/cmake/build_tracing.sh \
            "${BUILD_DIR}"

  debug:
    needs: setup
    if: contains(fromJson(needs.setup.outputs.enabled-jobs), 'debug')
    runs-on:
      - self-hosted # must come first
      - runner-group=${{ needs.setup.outputs.runner-group }}
      - environment=${{ needs.setup.outputs.runner-env }}
      - cpu
      - os-family=Linux
    env:
      BUILD_DIR: build-debug
    steps:
      - name: "Checking out repository"
        uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c # v3.3.0
        with:
          submodules: true
      - name: "Building IREE in Debug configuration"
        env:
          IREE_WRITE_REMOTE_CCACHE: ${{ needs.setup.outputs.write-caches }}
        run: |
          ./build_tools/github_actions/docker_run.sh \
            --env "IREE_CCACHE_GCP_TOKEN=$(gcloud auth application-default print-access-token)" \
            --env "IREE_WRITE_REMOTE_CCACHE=${IREE_WRITE_REMOTE_CCACHE}" \
            --env "CMAKE_BUILD_TYPE=Debug" \
            --env "CCACHE_NAMESPACE=gcr.io/iree-oss/base@sha256:dc314b4fe30fc1315742512891357bffed4d1b62ffcb46258b1e0761c737b446" \
            --env "IREE_BUILD_SETUP_PYTHON_VENV=${BUILD_DIR}/.venv" \
            gcr.io/iree-oss/base@sha256:dc314b4fe30fc1315742512891357bffed4d1b62ffcb46258b1e0761c737b446 \
            ./build_tools/cmake/build_all.sh \
            "${BUILD_DIR}"

  byo_llvm:
    needs: setup
    if: contains(fromJson(needs.setup.outputs.enabled-jobs), 'byo_llvm')
    runs-on:
      - self-hosted # must come first
      - runner-group=${{ needs.setup.outputs.runner-group }}
      - environment=${{ needs.setup.outputs.runner-env }}
      - cpu
      - os-family=Linux
    steps:
      - name: "Checking out repository"
        uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c # v3.3.0
        with:
          submodules: true
      - name: "Building and testing with bring-your-own-LLVM"
        env:
          IREE_WRITE_REMOTE_CCACHE: ${{ needs.setup.outputs.write-caches }}
        run: |
          ./build_tools/github_actions/docker_run.sh \
            --env "IREE_CCACHE_GCP_TOKEN=$(gcloud auth application-default print-access-token)" \
            --env "IREE_WRITE_REMOTE_CCACHE=${IREE_WRITE_REMOTE_CCACHE}" \
            --env "CCACHE_NAMESPACE=gcr.io/iree-oss/base@sha256:dc314b4fe30fc1315742512891357bffed4d1b62ffcb46258b1e0761c737b446" \
            gcr.io/iree-oss/base@sha256:dc314b4fe30fc1315742512891357bffed4d1b62ffcb46258b1e0761c737b446 \
            ./build_tools/cmake/build_and_test_byo_llvm.sh

  ############################## Crosscompilation ##############################
  # Jobs that cross-compile IREE for other platforms
  ##############################################################################

  cross_compile_and_test:
    needs: [setup, build_all]
    if: contains(fromJson(needs.setup.outputs.enabled-jobs), 'cross_compile_and_test')
    runs-on:
      - self-hosted # must come first
      - runner-group=${{ needs.setup.outputs.runner-group }}
      - environment=${{ needs.setup.outputs.runner-env }}
      - cpu
      - os-family=Linux
    strategy:
      matrix:
        target:
          - platform: linux
            arch: riscv_64
            abi: lp64d
            docker_image: "gcr.io/iree-oss/riscv@sha256:62e87bad3405d691ddba6f9be0ef44eeb60461a467c8d86f0842c81a1f97da79"
            build_script: "./build_tools/cmake/build_riscv.sh"
            test_script: "./build_tools/cmake/test_riscv.sh"
          - platform: linux
            arch: riscv_32
            abi: ilp32d
            docker_image: "gcr.io/iree-oss/riscv@sha256:62e87bad3405d691ddba6f9be0ef44eeb60461a467c8d86f0842c81a1f97da79"
            build_script: "./build_tools/cmake/build_riscv.sh"
            test_script: "./build_tools/cmake/test_riscv.sh"
          - platform: generic
            arch: riscv_32
            abi: ilp32
            docker_image: "gcr.io/iree-oss/riscv@sha256:62e87bad3405d691ddba6f9be0ef44eeb60461a467c8d86f0842c81a1f97da79"
            build_script: "./build_tools/cmake/build_riscv.sh"
            test_script: "./tests/riscv32/smoke.sh"
          - platform: emscripten
            arch: wasm32
            abi: wasm32
            docker_image: "gcr.io/iree-oss/emscripten@sha256:2dd4c52f1bb499ab365aad0111fe5538b685d88af38636b409b0cf6a576ab214"
            build_script: "./build_tools/cmake/build_runtime_emscripten.sh"
            # No test script

    env:
      PLATFORM: ${{ matrix.target.platform }}
      ARCH: ${{ matrix.target.arch }}
      ABI: ${{ matrix.target.abi }}
      DOCKER_IMAGE: ${{ matrix.target.docker_image }}
      BUILD_SCRIPT: ${{ matrix.target.build_script }}
      TEST_SCRIPT: ${{ matrix.target.test_script }}
      INSTALL_DIR: ${{ needs.build_all.outputs.install-dir }}
      INSTALL_DIR_ARCHIVE: ${{ needs.build_all.outputs.install-dir-archive }}
      INSTALL_DIR_GCS_ARTIFACT: ${{ needs.build_all.outputs.install-dir-gcs-artifact }}
      TARGET_BUILD_DIR: build-${{ matrix.target.platform }}-${{ matrix.target.arch }}
      IREE_WRITE_REMOTE_CCACHE: ${{ needs.setup.outputs.write-caches }}
    steps:
      - name: "Checking out repository"
        uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c # v3.3.0
      - name: "Checking out runtime submodules"
        run: ./build_tools/scripts/git/update_runtime_submodules.sh
      - name: "Downloading install dir archive"
        run: gcloud storage cp "${INSTALL_DIR_GCS_ARTIFACT}" "${INSTALL_DIR_ARCHIVE}"
      - name: "Extracting install directory"
        run: tar -xf "${INSTALL_DIR_ARCHIVE}"
      - name: "Build cross-compiling target"
        run: |
          ./build_tools/github_actions/docker_run.sh \
            --env "IREE_CCACHE_GCP_TOKEN=$(gcloud auth application-default print-access-token)" \
            --env "IREE_WRITE_REMOTE_CCACHE=${IREE_WRITE_REMOTE_CCACHE}" \
            --env "CCACHE_NAMESPACE=${DOCKER_IMAGE}" \
            --env "IREE_TARGET_PLATFORM=${PLATFORM}" \
            --env "IREE_TARGET_ARCH=${ARCH}" \
            --env "IREE_TARGET_ABI=${ABI}" \
            --env "IREE_TARGET_BUILD_DIR=${TARGET_BUILD_DIR}" \
            --env "BUILD_PRESET=test" \
            --env "IREE_HOST_BIN_DIR=${INSTALL_DIR}/bin" \
            "${DOCKER_IMAGE}" \
            "${BUILD_SCRIPT}"
      - name: "Test cross-compiling target"
        if: matrix.target.test_script
        run: |
          ./build_tools/github_actions/docker_run.sh \
            --env "IREE_TARGET_PLATFORM=${PLATFORM}" \
            --env "IREE_TARGET_ARCH=${ARCH}" \
            --env "IREE_TARGET_BUILD_DIR=${TARGET_BUILD_DIR}" \
            --env "BUILD_PRESET=test" \
            "${DOCKER_IMAGE}" \
            "${TEST_SCRIPT}"

  # Android cross-compilation and test is separated from cross_compile_and_test
  # because some tests need to run on physical devices instead of emulators. And
  # we need a fine-control on which tests only run on postsubmit as some devices
  # are not scalable (while we want to test with Android emulator on ARM VMs on
  # presubmit), which requires dynamic matrix generation (because "if" condition
  # can't access matrix variable to skip certain matrix jobs for presubmit).
  build_and_test_android:
    needs: [setup, build_all]
    if: contains(fromJson(needs.setup.outputs.enabled-jobs), 'build_and_test_android')
    uses: ./.github/workflows/build_and_test_android.yml
    with:
      runner-group: ${{ needs.setup.outputs.runner-group }}
      runner-env: ${{ needs.setup.outputs.runner-env }}
      write-caches: ${{ needs.setup.outputs.write-caches }}
      is-pr: ${{ fromJson(needs.setup.outputs.is-pr) }}
      install-dir: ${{ needs.build_all.outputs.install-dir }}
      install-dir-archive: ${{ needs.build_all.outputs.install-dir-archive }}
      install-dir-gcs-artifact: ${{ needs.build_all.outputs.install-dir-gcs-artifact }}

  ##############################################################################

  # Depends on all the other jobs to provide a single anchor that indicates the
  # final status. Status reporting will become more sophisticated in the future
  # and we can hopefully avoid the need to explicitly list every single job...
  summary:
    # Even if you have an explicit if condition, you still need to override
    # GitHub's default behavior of not running if any dependencies failed.
    if: always()
    runs-on: ubuntu-20.04
    needs:
      - setup

      # Basic
      - build_all
      - build_test_all_bazel

      # Platforms
      - build_test_all_arm64
      # - build_test_all_windows
      - build_test_all_macos_arm64
      - build_test_all_macos_x86_64

      # Accelerators
      - test_nvidia_gpu
      - test_nvidia_a100
      - test_amd_mi250
      # - test_amd_w7900

      # Subsets
      - build_test_runtime
      - build_test_runtime_arm64
      - build_test_runtime_windows

      # Configurations
      - python_release_packages
      - asan
      - tsan
      - small_runtime
      - gcc
      - tracing
      - debug
      - byo_llvm

      # Crosscompilation
      - cross_compile_and_test
      - build_and_test_android
    steps:
      - name: "Checking out repository"
        uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c # v3.3.0
      - name: Getting failed jobs
        id: failed_jobs
        run: |
          echo '${{ toJson(needs) }}'
          FAILED_JOBS="$(echo '${{ toJson(needs) }}' \
            | jq --raw-output \
            'map_values(select(.result!="success" and .result!="skipped")) | keys | join(",")' \
          )"
          echo "failed-jobs=${FAILED_JOBS}" >> $GITHUB_OUTPUT
          if [[ "${FAILED_JOBS}" != "" ]]; then
            echo "The following jobs failed: ${FAILED_JOBS}"
            exit 1
          fi
      - name: Posting to Discord
        uses: sarisia/actions-status-discord@61114b793b460ee85fe38ad3fccc78c7ead38d55 # v1.11.1
        if: failure() && github.ref_name == 'main'
        with:
          webhook: ${{ secrets.DISCORD_WEBHOOK }}
          description: "The following jobs failed: ${{ steps.failed_jobs.outputs.failed-jobs }}"
          url: "${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}/attempts/${{ github.run_attempt }}"
