#!/bin/bash
# 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.

set -e
set -u
set -o pipefail

cleanup()
{
  rm -rf /tmp/$$.*
}
trap cleanup 0


echo "Check file types..."
python3 tvm/tests/lint/check_file_type.py

echo "Check ASF license header..."
java -jar /bin/apache-rat.jar -E tvm/tests/lint/rat-excludes  -d . | (grep "== File" > /tmp/$$.apache-rat.txt || true)
if grep --quiet -E "File" /tmp/$$.apache-rat.txt; then
    echo "Need to add ASF header to the following files."
    echo "----------------File List----------------"
    cat /tmp/$$.apache-rat.txt
    echo "-----------------------------------------"
    echo "Use the following steps to add the headers:"
    echo "- Create file_list.txt in your text editor"
    echo "- Copy paste the above content in file-list into file_list.txt"
    echo "- python3 tests/lint/add_asf_header.py file_list.txt"
    exit 1
fi
