# Copyright 2019 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

# Keep this in sync with build_tools/scripts/lint.sh

name: Lint

on: [pull_request]

jobs:
  bazel_to_cmake:
    runs-on: ubuntu-20.04
    steps:
      - name: Checking out repository
        uses: actions/checkout@8f4b7f84864484a7bf31766abe9204da3cbe65b3 # v3.5.0
      - name: Running bazel_to_cmake for IREE core
        run: ./build_tools/bazel_to_cmake/bazel_to_cmake.py --verbosity=2
      - name: Running bazel_to_cmake for IREE TF Integration Tests
        run: ./build_tools/bazel_to_cmake/bazel_to_cmake.py --root_dir=integrations/tensorflow/e2e --verbosity=2
      - name: Checking Diff
        run: |
          # Make sure to pick up new files that have been added.
          git add -A
          git diff HEAD --exit-code

  buildifier:
    runs-on: ubuntu-20.04
    steps:
      - name: Checking out repository
        uses: actions/checkout@8f4b7f84864484a7bf31766abe9204da3cbe65b3 # v3.5.0
      - name: Fetching Base Branch
        # We have to explicitly fetch the base branch as well
        run: git fetch --no-tags --prune --depth=1 origin "${GITHUB_BASE_REF?}:${GITHUB_BASE_REF?}"
      - name: Downloading Buildifier
        run: |
          mkdir -p "${HOME?}/bin"
          wget https://github.com/bazelbuild/buildtools/releases/download/4.0.1/buildifier -O "${HOME?}/bin/buildifier"
          chmod +x "${HOME?}/bin/buildifier"
          echo "${HOME?}/bin" >> $GITHUB_PATH
      - name: Running buildifier on changed files
        run: |
          # Fail if the script fails (unfixable lint warnings) or it creates a
          # diff (fixable lint warnings or formatting).
          EXIT_CODE=0
          ./build_tools/scripts/run_buildifier.sh "${GITHUB_BASE_REF?}" || EXIT_CODE=1
          git diff --exit-code
          exit "${EXIT_CODE?}"

  yapf:
    runs-on: ubuntu-20.04
    steps:
      - name: Checking out repository
        uses: actions/checkout@8f4b7f84864484a7bf31766abe9204da3cbe65b3 # v3.5.0
      - name: Setting up python
        uses: actions/setup-python@d27e3f3d7c64b4bbf8e4abfb9b63b83e846e0435 # v4.5.0
      - name: Fetching Base Branch
        # We have to explicitly fetch the base branch as well
        run: git fetch --no-tags --prune --depth=1 origin "${GITHUB_BASE_REF?}:${GITHUB_BASE_REF?}"
      - name: Install yapf
        run: |
          python3 -m pip install yapf==0.30.0
      - name: Run format_diff.py with yapf
        run: |
          git diff -U0 "${GITHUB_BASE_REF?}" | python3 third_party/format_diff/format_diff.py yapf -i
          git diff --exit-code
      - name: Instructions for fixing the above linting errors
        if: failure()
        run: |
          printf "You can fix the lint errors above by running\n"
          printf "  git diff -U0 "${GITHUB_BASE_REF?}" | python3 third_party/format_diff/format_diff.py yapf -i\n"

  pytype:
    runs-on: ubuntu-20.04
    steps:
      - name: Checking out repository
        uses: actions/checkout@8f4b7f84864484a7bf31766abe9204da3cbe65b3 # v3.5.0
      - name: Setting up python
        uses: actions/setup-python@d27e3f3d7c64b4bbf8e4abfb9b63b83e846e0435 # v4.5.0
      - name: Fetching Base Branch
        # We have to explicitly fetch the base branch as well
        run: git fetch --no-tags --prune --depth=1 origin "${GITHUB_BASE_REF?}:${GITHUB_BASE_REF?}"
      - name: Install pytype
        run: python3 -m pip install pytype
      - name: Run pytype on changed files
        run: ./build_tools/pytype/check_diff.sh "${GITHUB_BASE_REF?}"

  clang-format:
    runs-on: ubuntu-20.04
    steps:
      - name: Installing dependencies
        run: |
          wget https://raw.githubusercontent.com/llvm-mirror/clang/master/tools/clang-format/git-clang-format -O /tmp/git-clang-format
          chmod +x /tmp/git-clang-format
      - name: Checking out repository
        uses: actions/checkout@8f4b7f84864484a7bf31766abe9204da3cbe65b3 # v3.5.0
      - name: Fetching Base Branch
        # We have to explicitly fetch the base branch as well
        run: git fetch --no-tags --prune --depth=1 origin "${GITHUB_BASE_REF?}:${GITHUB_BASE_REF?}"
      - name: Running clang-format on changed source files
        run: |
          /tmp/git-clang-format "${GITHUB_BASE_REF?}" --binary=clang-format-12 --style=file
          git diff --exit-code

  tabs:
    runs-on: ubuntu-20.04
    steps:
      - name: Checking out repository
        uses: actions/checkout@8f4b7f84864484a7bf31766abe9204da3cbe65b3 # v3.5.0
      - name: Fetching Base Branch
        # We have to explicitly fetch the base branch as well
        run: git fetch --no-tags --prune --depth=1 origin "${GITHUB_BASE_REF?}:${GITHUB_BASE_REF?}"
      - name: Checking tabs
        run: ./build_tools/scripts/check_tabs.sh "${GITHUB_BASE_REF?}"

  yamllint:
    runs-on: ubuntu-20.04
    steps:
      - name: Checking out repository
        uses: actions/checkout@8f4b7f84864484a7bf31766abe9204da3cbe65b3 # v3.5.0
      - name: Fetching Base Branch
        # We have to explicitly fetch the base branch as well
        run: git fetch --no-tags --prune --depth=1 origin "${GITHUB_BASE_REF?}:${GITHUB_BASE_REF?}"
      - name: yamllint
        run: ./build_tools/scripts/run_yamllint.sh "${GITHUB_BASE_REF?}"

  markdownlint:
    runs-on: ubuntu-20.04
    steps:
      - name: Checking out repository
        uses: actions/checkout@8f4b7f84864484a7bf31766abe9204da3cbe65b3 # v3.5.0
      - name: Downloading markdownlint
        run: npm install -g markdownlint-cli
      - name: Running markdownlint
        run: ./build_tools/scripts/run_markdownlint.sh

  path_lengths:
    runs-on: ubuntu-20.04
    steps:
      - name: Checking out repository
        uses: actions/checkout@8f4b7f84864484a7bf31766abe9204da3cbe65b3 # v3.5.0
      - name: Running check_path_lengths
        run: ./build_tools/scripts/check_path_lengths.py

  generated_cmake_files:
    runs-on: ubuntu-20.04
    steps:
      - name: Checking out repository
        uses: actions/checkout@8f4b7f84864484a7bf31766abe9204da3cbe65b3 # v3.5.0
      - name: Generating CMake files
        run: |
          ./build_tools/scripts/generate_cmake_files.sh
      - name: Checking Diff
        run: |
          # Make sure to run build_tools/scripts/generate_cmake_files.sh and
          # pick up new files that have been added.
          git add -A
          git diff HEAD --exit-code

  build_file_names:
    runs-on: ubuntu-20.04
    steps:
      - name: Checking out repository
        uses: actions/checkout@8f4b7f84864484a7bf31766abe9204da3cbe65b3 # v3.5.0
      - name: Check BUILD files are not named BUILD (prefer BUILD.bazel)
        run: exit $(git ls-files '**/BUILD' | wc -l)
      - name: Instructions for fixing the above linting error
        if: failure()
        run: |
          echo "failure: found files named BUILD. Please rename the following files to BUILD.bazel:"
          git ls-files '**/BUILD'
