# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements.  See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership.  The ASF licenses this file
# to you 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
#
#     http://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: License Eye Header
description: A full-featured license tool to check and fix license headers and dependencies' licenses.
branding:
  icon: book
  color: orange
inputs:
  log:
    description: The level of log, for example, "debug" or "info"
    required: false
    default: info
  config:
    description: The configuration file, for example, ".licenserc.yaml"
    required: false
    default: .licenserc.yaml
  token:
    description: |
      The token that license eye uses when it needs to comment on the pull request.
      Set to empty ("") to disable commenting on pull request.
    required: false
    default: ${{ github.token }}
  mode:
    description: |
      Which mode License Eye should be run in. Choices are `check` or `fix`. The
      default value is `check`.
    required: false
    default: check
runs:
  using: "composite"
  steps:
    - name: Set up Go 1.18
      uses: actions/setup-go@v2
      with:
        go-version: 1.18
    - if: runner.os == 'Linux'
      uses: actions/cache@v3
      with:
        path: |
          ~/.cache/go-build
          ~/go/pkg/mod
        key: license-eye-${{ runner.os }}-go-${{ hashFiles(format('{0}/{1}', github.action_path, 'go.sum')) }}
        restore-keys: license-eye-${{ runner.os }}-go-
    - if: runner.os == 'macOS'
      uses: actions/cache@v3
      with:
        path: |
          ~/Library/Caches/go-build
          ~/go/pkg/mod
        key: license-eye-${{ runner.os }}-go-${{ hashFiles(format('{0}/{1}', github.action_path, 'go.sum')) }}
        restore-keys: license-eye-${{ runner.os }}-go-
    - if: runner.os == 'Windows'
      uses: actions/cache@v3
      with:
        path: |
          ~\AppData\Local\go-build
          ~\go\pkg\mod
        key: license-eye-${{ runner.os }}-go-${{ hashFiles(format('{0}/{1}', github.action_path, 'go.sum')) }}
        restore-keys: license-eye-${{ runner.os }}-go-
    - shell: bash
      run: make -C $GITHUB_ACTION_PATH install
    - shell: bash
      env:
        GITHUB_TOKEN: ${{ inputs.token }}
      run: license-eye -v ${{ inputs.log }} -c ${{ inputs.config }} header ${{ inputs.mode }}
