# 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 building IREE. It is designed to be called from a parent workflow.
# The concurrency of this workflow is controlled by the caller's job.

name: Build All

on:
  workflow_call:
    inputs:
      runner-group:
        required: true
        type: string
      runner-env:
        required: true
        type: string
      write-caches:
        required: true
        type: string
      run-tests:
        required: true
        type: boolean
    outputs:
      install-dir:
        description: Local install directory path.
        value: ${{ jobs.build_all.outputs.install-dir }}
      install-dir-archive:
        description: Name of the zipped install directory.
        value: ${{ jobs.build_all.outputs.install-dir-archive }}
      install-dir-gcs-artifact:
        description: GCS path to the uploaded install archive.
        value: ${{ jobs.build_all.outputs.install-dir-gcs-artifact }}
      install-dir-gcs-url:
        description: GCS URL of the uploaded install archive.
        value: ${{ jobs.build_all.outputs.install-dir-gcs-url }}

permissions:
  contents: read

env:
  # This duplicates the variables from other workflows. The variables need 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. They therefore can't be passed in via inputs because the
  # env context isn't available there.
  GCS_DIR: gs://iree-github-actions-${{ github.event_name == 'pull_request' && 'presubmit' || 'postsubmit' }}-artifacts/${{ github.run_id }}/${{ github.run_attempt }}
  GCS_URL: https://storage.googleapis.com/iree-github-actions-${{ github.event_name == 'pull_request' && 'presubmit' || 'postsubmit' }}-artifacts/${{ github.run_id }}/${{ github.run_attempt }}

jobs:
  build_all:
    runs-on:
      - self-hosted # must come first
      - runner-group=${{ inputs.runner-group }}
      - environment=${{ inputs.runner-env }}
      - cpu
      - os-family=Linux
    env:
      BUILD_DIR: full-build-dir
      INSTALL_DIR: full-build-dir/install
    outputs:
      install-dir: ${{ env.INSTALL_DIR }}
      # Pass the install directory as output for other jobs to use.
      # TODO(#16203): replace this with iree-dist packages
      #   The install directory provides a similar set of files and existing
      #   jobs are already configured to use the build directory, so this is
      #   an intermediate step towards a fully package-based CI setup.
      install-dir-archive: ${{ steps.install-archive.outputs.install-dir-archive }}
      install-dir-gcs-artifact: ${{ steps.install-upload.outputs.install-dir-gcs-artifact }}
      install-dir-gcs-url: ${{ steps.install-upload.outputs.install-dir-gcs-url }}
    steps:
      - name: "Checking out repository"
        uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c # v3.3.0
        with:
          submodules: true
      - name: "Building IREE"
        env:
          IREE_WRITE_REMOTE_CCACHE: ${{ inputs.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" \
            --env "IREE_BUILD_SETUP_PYTHON_VENV=${BUILD_DIR}/.venv" \
            gcr.io/iree-oss/base@sha256:dc314b4fe30fc1315742512891357bffed4d1b62ffcb46258b1e0761c737b446 \
            ./build_tools/cmake/build_all.sh "${BUILD_DIR}"
      # TODO(scotttodd): trim build/tests to exclude integration tests (tests/ folder, check tests)
      #                  that coverage should move to a test_cpu job (matrix with test_gpu?)
      - name: "Testing IREE"
        if: inputs.run-tests
        run: |
          ./build_tools/github_actions/docker_run.sh \
            gcr.io/iree-oss/base@sha256:dc314b4fe30fc1315742512891357bffed4d1b62ffcb46258b1e0761c737b446 \
            ./build_tools/cmake/ctest_all.sh "${BUILD_DIR}"
      - name: "Testing iree-dialects"
        if: inputs.run-tests
        run: |
          ./build_tools/github_actions/docker_run.sh \
            gcr.io/iree-oss/base@sha256:dc314b4fe30fc1315742512891357bffed4d1b62ffcb46258b1e0761c737b446 \
            ./build_tools/cmake/test_iree_dialects.sh "${BUILD_DIR}"

      # TODO(#16203): If this (or iree-dist) is small enough, just use GitHub
      #   artifacts instead of `tar` commands and GCS
      - name: "Creating install dir archive"
        id: install-archive
        env:
          INSTALL_DIR_ARCHIVE: install_dir.tar.zst
        run: |
          tar -I 'zstd -T0' \
            -cf ${INSTALL_DIR_ARCHIVE} ${INSTALL_DIR}
          echo "install-dir-archive=${INSTALL_DIR_ARCHIVE}" >> "${GITHUB_OUTPUT}"
      - name: "Uploading install dir archive"
        id: install-upload
        env:
          INSTALL_DIR_ARCHIVE: ${{ steps.install-archive.outputs.install-dir-archive }}
          INSTALL_DIR_GCS_ARTIFACT: ${{ env.GCS_DIR }}/${{ steps.install-archive.outputs.install-dir-archive }}
          INSTALL_DIR_GCS_URL: ${{ env.GCS_URL }}/${{ steps.install-archive.outputs.install-dir-archive }}
        run: |
          gcloud storage cp "${INSTALL_DIR_ARCHIVE}" "${INSTALL_DIR_GCS_ARTIFACT}"
          echo "install-dir-gcs-artifact=${INSTALL_DIR_GCS_ARTIFACT}" >> "${GITHUB_OUTPUT}"
          echo "install-dir-gcs-url=${INSTALL_DIR_GCS_URL}" >> "${GITHUB_OUTPUT}"
