name: Check License

env:
  EXPECTED_LICENSE_FILENAME: LICENSE
  # SPDX identifier: https://spdx.org/licenses/
  EXPECTED_LICENSE_TYPE: MIT

# See: https://docs.github.com/en/free-pro-team@latest/actions/reference/events-that-trigger-workflows
on:
  push:
    paths:
      - ".github/workflows/check-license.yml"
      # See: https://github.com/licensee/licensee/blob/master/docs/what-we-look-at.md#detecting-the-license-file
      - "COPYING*"
      - "LICENCE*"
      - "LICENSE*"
  pull_request:
    paths:
      - ".github/workflows/check-license.yml"
      - "COPYING*"
      - "LICENCE*"
      - "LICENSE*"
  workflow_dispatch:
  repository_dispatch:

jobs:
  check-license:
    runs-on: ubuntu-latest

    steps:
      - name: Checkout local repository
        uses: actions/checkout@v2

      - name: Install Ruby
        uses: ruby/setup-ruby@v1
        with:
          ruby-version: ruby # Install latest version

      - name: Install licensee
        run: gem install licensee

      - name: Check license file
        run: |
          # See: https://github.com/licensee/licensee
          LICENSEE_OUTPUT="$(licensee detect --json --confidence=100)"

          DETECTED_LICENSE_FILE="$(echo "$LICENSEE_OUTPUT" | jq .matched_files[0].filename | tr --delete '\r')"
          echo "Detected license file: $DETECTED_LICENSE_FILE"
          if [ "$DETECTED_LICENSE_FILE" != "\"$EXPECTED_LICENSE_FILENAME\"" ]; then
            echo "ERROR: detected license file doesn't match expected: $EXPECTED_LICENSE_FILENAME"
            exit 1
          fi

          DETECTED_LICENSE_TYPE="$(echo "$LICENSEE_OUTPUT" | jq .matched_files[0].matched_license | tr --delete '\r')"
          echo "Detected license type: $DETECTED_LICENSE_TYPE"
          if [ "$DETECTED_LICENSE_TYPE" != "\"$EXPECTED_LICENSE_TYPE\"" ]; then
            echo "ERROR: detected license type doesn't match expected $EXPECTED_LICENSE_TYPE"
            exit 1
          fi

Add CI workflow to check the license file
Add CI workflow to check the license file

Whenever one of the recognized license file names are modified in the repository, the workflow runs to check whether the
license can be recognized and whether it is of the expected type.
