# Copyright 2023 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: PkgCI

on:
  workflow_dispatch:
  pull_request:
  push:
    branches:
      - main
      # Experimental branches can also get packages and tests automatically.
      - exppkg-*
      # Short term feature branches:
      - sdxl

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:
    uses: ./.github/workflows/setup.yml

  build_packages:
    name: Build Packages
    needs: setup
    if: contains(fromJson(needs.setup.outputs.enabled-jobs), 'build_packages')
    uses: ./.github/workflows/pkgci_build_packages.yml
    with:
      package_version: 0.dev1

  # Package sanity checks.
  unit_test:
    name: Unit Test
    needs: [setup, build_packages]
    if: contains(fromJson(needs.setup.outputs.enabled-jobs), 'unit_test')
    uses: ./.github/workflows/pkgci_unit_test.yml

  # Tests for large programs.
  regression_test:
    name: Regression Test
    needs: [setup, build_packages]
    if: contains(fromJson(needs.setup.outputs.enabled-jobs), 'regression_test')
    uses: ./.github/workflows/pkgci_regression_test.yml

  ########################### Hardware/accelerators ###########################
  # Jobs that run unit tests on special hardware platforms or accelerators
  #############################################################################

  test_amd_mi250:
    name: Test AMD MI250
    needs: [setup, build_packages]
    if: contains(fromJson(needs.setup.outputs.enabled-jobs), 'test_amd_mi250')
    uses: ./.github/workflows/pkgci_test_amd_mi250.yml

  test_amd_mi300:
    name: Test AMD MI300
    needs: [setup, build_packages]
    if: contains(fromJson(needs.setup.outputs.enabled-jobs), 'test_amd_mi300')
    uses: ./.github/workflows/pkgci_test_amd_mi300.yml

  test_amd_w7900:
    name: Test AMD W7900
    needs: [setup, build_packages]
    if: contains(fromJson(needs.setup.outputs.enabled-jobs), 'test_amd_w7900')
    uses: ./.github/workflows/pkgci_test_amd_w7900.yml

  # TODO(#18238): migrate to new runner cluster
  # test_nvidia_t4:
  #   name: Test NVIDIA T4
  #   needs: [setup, build_packages]
  #   if: contains(fromJson(needs.setup.outputs.enabled-jobs), 'test_nvidia_t4')
  #   uses: ./.github/workflows/pkgci_test_nvidia_t4.yml

  test_android:
    name: Test Android
    needs: [setup, build_packages]
    if: contains(fromJson(needs.setup.outputs.enabled-jobs), 'test_android')
    uses: ./.github/workflows/pkgci_test_android.yml
    with:
      write-caches: ${{ needs.setup.outputs.write-caches }}

  test_riscv64:
    name: Test RISC-V 64
    needs: [setup, build_packages]
    if: contains(fromJson(needs.setup.outputs.enabled-jobs), 'test_riscv64')
    uses: ./.github/workflows/pkgci_test_riscv64.yml
    with:
      write-caches: ${{ needs.setup.outputs.write-caches }}

  ################################# Frameworks ################################
  # Jobs that test machine learning frameworks or their Python APIs
  #############################################################################

  test_onnx:
    name: Test ONNX
    needs: [setup, build_packages]
    if: contains(fromJson(needs.setup.outputs.enabled-jobs), 'test_onnx')
    uses: ./.github/workflows/pkgci_test_onnx.yml

  test_tensorflow:
    name: Test TensorFlow
    needs: [setup, build_packages]
    if: contains(fromJson(needs.setup.outputs.enabled-jobs), 'test_tensorflow')
    uses: ./.github/workflows/pkgci_test_tensorflow.yml
