# 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?}"

  black:
    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 black
        run: |
          python3 -m pip install black==23.3
      - name: Check if modified files are formatted
        run: |
          # The filter lowercase `d` means to exclude deleted files.
          git diff "${GITHUB_BASE_REF?}" --name-only --diff-filter=d \
            -- '*.py' ':!third_party' \
            | xargs --no-run-if-empty black --check --diff --verbose
      - name: Instructions for fixing the above linting errors
        if: failure()
        run: |
          printf "You can fix formatting by running 'black' on the modified python files:\n"
          printf "  git diff ${GITHUB_BASE_REF?} --name-only -- '*.py' ':!third_party' | xargs black\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'
