# 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
    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 variable from ci.yml. The variable 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. It 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"
        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"
        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}"
