# 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

# Workflow for running in-tree samples against releases periodically.

name: samples

on:
  schedule:
    # Weekdays at 13:00 UTC = 05:00 PST / 06:00 PDT. No one should be dealing
    # with this on weekends.
    - cron: "5 4 * * 1-5"
  workflow_dispatch:

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:
  colab:
    if: ${{ github.repository_owner == 'iree-org' || github.event_name != 'schedule' }}
    runs-on: ubuntu-24.04
    steps:
      - name: "Checking out repository"
        uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
      - name: "Setting up Python"
        uses: actions/setup-python@0b93645e9fea7318ecaed2b359559ac225c90a2b # v5.3.0
        with:
          python-version: "3.11"
      - name: "Testing Colab Notebooks"
        run: ./samples/colab/test_notebooks.py

  samples:
    if: ${{ github.repository_owner == 'iree-org' || github.event_name != 'schedule' }}
    runs-on: ubuntu-24.04
    env:
      CC: clang
      CXX: clang++
    steps:
      - name: "Checking out repository"
        uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
      - name: "Checking out runtime submodules"
        run: ./build_tools/scripts/git/update_runtime_submodules.sh
      - name: "Installing build dependencies"
        run: sudo apt update && sudo apt install -y ninja-build
      - name: "Setting up Python"
        uses: actions/setup-python@0b93645e9fea7318ecaed2b359559ac225c90a2b # v5.3.0
        with:
          python-version: "3.11"
      - name: "Testing Samples"
        run: ./build_tools/testing/test_samples.sh

  web:
    if: ${{ github.repository_owner == 'iree-org' || github.event_name != 'schedule' }}
    runs-on: ubuntu-24.04
    env:
      VENV_DIR: ${{ github.workspace }}/.venv
      CC: clang
      CXX: clang++
    defaults:
      run:
        shell: bash
    steps:
      - name: "Check out repository"
        uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
      - name: "Mark git safe.directory"
        run: git config --global --add safe.directory '*'
      - name: "Check out runtime submodules"
        run: ./build_tools/scripts/git/update_runtime_submodules.sh
      - name: "Installing build dependencies"
        run: sudo apt update && sudo apt install -y ninja-build
      - uses: actions/setup-python@0b93645e9fea7318ecaed2b359559ac225c90a2b # v5.3.0
        with:
          python-version: "3.11"
      - name: "Setup Python venv"
        run: |
          python3 -m venv ${VENV_DIR}
          source ${VENV_DIR}/bin/activate
          python3 -m pip install \
            --find-links https://iree.dev/pip-release-links.html \
            --upgrade \
            --pre \
            iree-base-compiler \
            iree-base-runtime
      - name: "Setup emsdk"
        uses: mymindstorm/setup-emsdk@6ab9eb1bda2574c4ddb79809fc9247783eaf9021 # v14
        with:
          version: 3.1.74
      - name: "Test experimental web samples"
        env:
          HOST_TOOLS_BINARY_DIR: ${{ env.VENV_DIR }}/bin
          IREE_EMPSCRIPTEN_BUILD_DIR: build-emscripten
        run: |
          source ${VENV_DIR}/bin/activate
          ./experimental/web/build_and_test_samples.sh ${HOST_TOOLS_BINARY_DIR}

  # Aggregate job status and alerting on failures.
  samples_summary:
    if: always()
    needs:
      - colab
      - samples
      - web
    uses: ./.github/workflows/workflow_summary.yml
    secrets: inherit
    with:
      jobs-json: ${{ toJson(needs) }}
