blob: 9518e722e38bbfc2676eb5855dde1cd07ee851fb [file] [log] [blame]
#!/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.
#
# requires:
# node js license-checker to generate the list of deps of this project in the format used by brooklyn
# (https://github.com/davglass/license-checker)
# jq to process json (https://stedolan.github.io/jq/)
# node js json2yaml to output yaml for merging (https://www.npmjs.com/package/json2yaml)
if [ "$1" == "--help" ] ; then
echo Computes NodeJS dependencies and outputs metadata files in `config/license-`
echo Works in current directory, or takes target directory as single argument.
exit 0
fi
EXCLUDE_DEPS=brooklyn
BASE_DIR=$(pushd $(dirname $0) > /dev/null ; pwd -P ; popd > /dev/null)
if [ ! -z "$1" ] ; then pushd $1 > /dev/null ; fi
OUTDIR=.
if [ -d $OUTDIR/config ] ; then OUTDIR=$OUTDIR/config ; fi
TEMPFILE=$OUTDIR/license-dependencies.json.tmp
license-checker --production --json --customPath $BASE_DIR/compute-nodejs-license-dependencies.format.json > $TEMPFILE
cp $BASE_DIR/parts/yaml-asf-header $OUTDIR/license-inclusions-binary-autogenerated-js-license-checker.yaml
cat $TEMPFILE | jq 'keys | .[]' | awk '{ print "- id: "$0 }' | \
grep -v "id: \"${EXCLUDE_DEPS}-" >> $OUTDIR/license-inclusions-binary-autogenerated-js-license-checker.yaml
# a few things to note:
# * we exclude keys with null/empty values in jq
# * if homepage and repo are the same, or homepage is autogen with #readme appended, we drop homepage
# ("unique" changes the order, which we don't want)
# * json2yaml prepends --- to the file and " " on every line, which we don't want
cp $BASE_DIR/parts/yaml-asf-header $OUTDIR/license-metadata-autogenerated-js.yaml
cat $TEMPFILE | jq 'to_entries |
map({ id: .key } +
.value | {
id, name: (.name + " (NodeJS module)"), version, description,
url: ([ (select(.homepage != .repository+"#readme" and .homepage != .repository) | .homepage), .repository ]
| map(select(length > 0))),
organization: (. | { name: .publisher, email: .email, url: .url } | with_entries(select((.value | length) > 0)) ),
license: .licenses,
copyright_by: .copyright, license_text: .licenseText }
| with_entries(select((.value | length) > 0)) )' \
| json2yaml | grep -v ^--- | sed 's/^ //' \
>> $OUTDIR/license-metadata-autogenerated-js.yaml
rm $TEMPFILE
echo Reported $(wc $OUTDIR/license-inclusions-binary-autogenerated-js-license-checker.yaml | awk '{print $1}') JS dependencies for $(basename $(pwd))
if [ ! -z "$1" ] ; then popd > /dev/null ; fi