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

# ********************************************************************
# This script used to check the dependencies are all in our exception.
# This will not check the license legality
# ********************************************************************

# Used to store the tmp files.
decompress_conf='build/tmp'
# store all dependencies from our binary jar.
all_dependencies_txt='tools/dependency-check/all-dependencies.txt'
# store all our known dependencies
known_third_party_dependencies_txt='tools/dependency-check/known-dependencies.txt'

# Below files is generated by this script.
# store all EventMesh self module's name.
self_modules_txt='tools/dependency-check/self-modules.txt'
# store all third part dependencies
third_party_dependencies_txt='tools/dependency-check/third-party-dependencies.txt'

mkdir $decompress_conf || true
tar -zxf build/incubator-eventmesh*.tar.gz -C $decompress_conf

./gradlew printProjects | grep '.jar' > "$self_modules_txt"

find "$decompress_conf" -name "*.jar" -exec basename {} \; | uniq | sort > "$all_dependencies_txt"

grep -wvf "$self_modules_txt" "$all_dependencies_txt" | uniq | sort > "$third_party_dependencies_txt"

# If the check is success it will return 0
sort "$known_third_party_dependencies_txt" | diff - "$third_party_dependencies_txt"

compareCode=$?
if [ $compareCode -eq 0 ]
then
  echo "Dependencies check success"
else
  echo "Dependencies check failed, please check if you add unknown dependencies"
  exit $compareCode
fi
