# Copyright 2019 Google LLC
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#      https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

name: Bazel Build

on:
  push:
    branches:
      - master

jobs:
  linux:
    runs-on: ubuntu-18.04
    env:
      CXX: clang++
      CC: clang
      PYTHON_BIN: /usr/bin/python3
      # Install the version of Bazel that is required by our .bazelversion file.
      BAZEL_VERSION: 2.1.0
    steps:
      - name: Installing bazel
        run: |
          # https://docs.bazel.build/versions/master/install-ubuntu.html
          sudo apt-get install unzip zip
          wget https://github.com/bazelbuild/bazel/releases/download/${BAZEL_VERSION?}/bazel-${BAZEL_VERSION?}-installer-linux-x86_64.sh
          chmod +x bazel-${BAZEL_VERSION?}-installer-linux-x86_64.sh
          ./bazel-${BAZEL_VERSION?}-installer-linux-x86_64.sh --user
          rm bazel-${BAZEL_VERSION?}-installer-linux-x86_64.sh
          echo "::add-path::${HOME?}/bin"
      - name: Installing dependencies
        run: |
          sudo apt-get update
          sudo apt-get install clang libsdl2-dev python3 python3-pip python3-setuptools
          # Update pip before using it so it picks up the latest versions of our dependencies.
          sudo python3 -m pip install --upgrade pip
          sudo python3 -m pip install numpy tf-nightly
      - name: Checking out repository
        uses: actions/checkout@v2
      - name: Initializing submodules
        run: ./scripts/git/submodule_versions.py init
      - name: Building and testing with bazel
        run: |
          # Build and test everything not explicitly marked as excluded from CI
          # (using the tag "noga"="No GitHub Actions") or which uses vulkan at
          # runtime.
          # Note that somewhat contrary to its name `bazel test` will also build
          # any non-test targets specified.
          # We use `bazel query //...` piped to `bazel test` rather than the
          # simpler `bazel test //...` because the latter excludes targets
          # tagged "manual". The "manual" tag allows targets to be excluded from
          # human wildcard builds, but we want them built by CI unless they are
          # excluded with "noga".
          bazel query '//...' | xargs bazel test --build_tag_filters="-noga" --test_tag_filters="-noga,-driver=vulkan" --test_env=IREE_VULKAN_DISABLE=1 --test_env=IREE_DEFAULT_BACKENDS="tf,iree_vmla" --define=iree_tensorflow=true --test_output=errors --keep_going
