name: Kernel-Checker

on: [push, pull_request]

jobs:
  kernel-checker:
    name: FreeRTOS Kernel Header Checks
    runs-on: ubuntu-20.04
    steps:
      # Install python 3
      - name: Tool Setup
        uses: actions/setup-python@v3
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

      # There is shared code, hosted by FreeRTOS/FreeRTOS, with deps needed by header checker
      - name: Checkout FreeRTOS Tools
        uses: actions/checkout@v3
        with:
          repository: FreeRTOS/FreeRTOS
          sparse-checkout: '.github'
          ref:  main
          path: tools

      # Checkout user pull request changes
      - name: Checkout Pull Request
        uses: actions/checkout@v3
        with:
          path: inspect

      # Collect all affected files
      - name: Collecting changed files
        uses: lots0logs/gh-action-get-changed-files@2.2.2
        with:
          token: ${{ secrets.GITHUB_TOKEN }}

      # Run checks
      - env:
          bashPass: \033[32;1mPASSED -
          bashInfo: \033[33;1mINFO -
          bashFail: \033[31;1mFAILED -
          bashEnd:  \033[0m
          stepName: Check File Headers
        name: ${{ env.stepName }}
        shell: bash
        run: |
          # ${{ env.stepName }}
          echo -e "::group::${{ env.bashInfo }} Install Dependencies ${{ env.bashEnd }}"

          # Copy the common tools from the FreeRTOS/FreeRTOS repo.
          mv tools/.github/scripts/common inspect/.github/scripts

          # Install the necessary python dependencies
          pip install -r inspect/.github/scripts/common/requirements.txt
          cd inspect

          echo -e "::group::${{ env.bashInfo }} ${{ env.stepName }} ${{ env.bashEnd }}"

          # Use the python script to check the copyright header of modified files.
          .github/scripts/kernel_checker.py --json ${HOME}/files_modified.json ${HOME}/files_added.json ${HOME}/files_renamed.json
          exitStatus=$?
          echo -e "::endgroup::"

          if [ $exitStatus -eq 0 ]; then
            echo -e "${{ env.bashPass }} ${{ env.stepName }} ${{ env.bashEnd }}"
          else
            echo -e "${{ env.bashFail }} ${{ env.stepName }} ${{ env.bashEnd }}"
          fi
          exit $exitStatus
