# 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

  regression_test_cpu:
    name: Regression Test CPU
    needs: [setup, build_packages]
    if: contains(fromJson(needs.setup.outputs.enabled-jobs), 'regression_test_cpu')
    uses: ./.github/workflows/pkgci_regression_test_cpu.yml

  regression_test_amdgpu_vulkan:
    name: Regression Test AMDGPU-Vulkan
    needs: [setup, build_packages]
    if: contains(fromJson(needs.setup.outputs.enabled-jobs), 'regression_test_amdgpu_vulkan')
    uses: ./.github/workflows/pkgci_regression_test_amdgpu_vulkan.yml

  regression_test_amdgpu_rocm:
    name: Regression Test AMDGPU-ROCm
    needs: [setup, build_packages]
    if: contains(fromJson(needs.setup.outputs.enabled-jobs), 'regression_test_amdgpu_rocm')
    uses: ./.github/workflows/pkgci_regression_test_amdgpu_rocm.yml

  regression_test_nvidiagpu_vulkan:
    name: Regression Test NVIDIAGPU-Vulkan
    needs: [setup, build_packages]
    if: contains(fromJson(needs.setup.outputs.enabled-jobs), 'regression_test_nvidiagpu_vulkan')
    uses: ./.github/workflows/pkgci_regression_test_nvidiagpu_vulkan.yml

  regression_test_nvidiagpu_cuda:
    name: Regression Test NVIDIAGPU-CUDA
    needs: [setup, build_packages]
    if: contains(fromJson(needs.setup.outputs.enabled-jobs), 'regression_test_nvidiagpu_cuda')
    uses: ./.github/workflows/pkgci_regression_test_nvidiagpu_cuda.yml

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