|
#!/bin/bash -e
|
|
|
|
NPM_MODULE_NAME=$1
|
|
VERSION=${2:-auto}
|
|
STRATEGY=$3
|
|
TITO_TAG=foreman-nightly-nonscl-rhel7
|
|
DISTRO=${TITO_TAG##*-}
|
|
BASE_DIR=${4:-foreman}
|
|
|
|
PACKAGE_NAME=nodejs-$NPM_MODULE_NAME
|
|
PACKAGE_DIR=packages/$BASE_DIR/$PACKAGE_NAME
|
|
|
|
ROOT=$(git rev-parse --show-toplevel)
|
|
|
|
program_exists() {
|
|
which "$@" &> /dev/null
|
|
}
|
|
|
|
ensure_program() {
|
|
if !(program_exists $1); then
|
|
echo "$1 is not installed - you can install it with"
|
|
if [[ $1 == "npm2pm" ]] ; then
|
|
echo "sudo npm install npm2rpm"
|
|
else
|
|
echo "sudo yum install $1"
|
|
fi
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
generate_npm_package() {
|
|
echo -n "Making directory..."
|
|
if [[ $UPDATE == true ]] ; then
|
|
sed -n '/%changelog/,$p' $PACKAGE_DIR/*.spec > OLD_CHANGELOG
|
|
git rm -r $PACKAGE_DIR
|
|
fi
|
|
mkdir $PACKAGE_DIR
|
|
echo "FINISHED"
|
|
echo -n "Creating specs and downloading sources..."
|
|
npm2rpm -n $NPM_MODULE_NAME -v $VERSION -s $STRATEGY
|
|
echo "FINISHED"
|
|
echo -n "Copying specs..."
|
|
cp npm2rpm/SPECS/* $PACKAGE_DIR
|
|
if [[ $UPDATE == true ]]; then
|
|
echo "Restoring changelogs..."
|
|
cat OLD_CHANGELOG >> $PACKAGE_DIR/*.spec
|
|
sed -i '/^%changelog/,/^%changelog/{0,//!d}' $PACKAGE_DIR/*.spec
|
|
rm OLD_CHANGELOG
|
|
CHANGELOG="- Update to $VERSION"
|
|
else
|
|
CHANGELOG="- Add $PACKAGE_NAME generated by npm2rpm using the $STRATEGY strategy"
|
|
fi
|
|
echo "$CHANGELOG" | $ROOT/add_changelog.sh $PACKAGE_DIR/*.spec ${VERSION}-1
|
|
echo "FINISHED"
|
|
echo -n "Copying sources..."
|
|
cp npm2rpm/SOURCES/* $PACKAGE_DIR
|
|
echo "FINISHED"
|
|
rm -r npm2rpm
|
|
|
|
if [ "$STRATEGY" = "bundle" ]; then
|
|
echo -e "Adding npmjs cache binary... - "
|
|
git add $PACKAGE_DIR/*-registry.npmjs.org.tgz
|
|
echo "FINISHED"
|
|
fi
|
|
echo -e "Adding spec to git... - "
|
|
git add $PACKAGE_DIR/*.spec
|
|
echo "FINISHED"
|
|
echo -e "Annexing sources... - "
|
|
git annex add $PACKAGE_DIR/*.tgz
|
|
echo "FINISHED"
|
|
}
|
|
|
|
add_to_tito_props() {
|
|
# Get tito.props whitelists and add node package
|
|
original_locale=$LC_COLLATE
|
|
export LC_COLLATE=en_GB
|
|
local current_whitelist=$(crudini --get rel-eng/tito.props $TITO_TAG whitelist)
|
|
local whitelist=$(echo "$current_whitelist $PACKAGE_NAME" | tr " " "\n" | sort -u)
|
|
crudini --set rel-eng/tito.props $TITO_TAG whitelist "$whitelist"
|
|
export LC_COLLATE=$original_locale
|
|
git add rel-eng/tito.props
|
|
}
|
|
|
|
add_npm_to_comps() {
|
|
local comps_scl="nonscl"
|
|
local comps_package="${PACKAGE_NAME}"
|
|
local comps_file="foreman"
|
|
|
|
./add_to_comps.rb comps/comps-${comps_file}-${DISTRO}.xml $comps_package $comps_scl
|
|
./comps_doc.sh
|
|
git add comps/
|
|
}
|
|
|
|
# Main script
|
|
|
|
if [[ -z $NPM_MODULE_NAME ]]; then
|
|
echo "This script adds a new npm package based on the module found on npmjs.org"
|
|
echo -e "\nUsage:\n$0 NPM_MODULE_NAME VERSION STRATEGY \n"
|
|
exit 1
|
|
fi
|
|
|
|
ensure_program crudini
|
|
ensure_program npm2rpm
|
|
|
|
if [[ $VERSION == "auto" ]] ; then
|
|
ensure_program curl
|
|
ensure_program jq
|
|
|
|
VERSION=$(curl -s https://api.npms.io/v2/package/$NPM_MODULE_NAME | jq -r .collected.metadata.version)
|
|
|
|
if [[ $VERSION == "null" ]] ; then
|
|
echo "Could not determine the version for $NPM_MODULE_NAME"
|
|
exit 1
|
|
fi
|
|
fi
|
|
|
|
if [[ -z $STRATEGY ]] ; then
|
|
ensure_program curl
|
|
ensure_program jq
|
|
|
|
DEPENDENCIES=$(curl -s https://api.npms.io/v2/package/$NPM_MODULE_NAME | jq -r '.collected.metadata.dependencies|length')
|
|
if [[ $DEPENDENCIES -gt 2 ]] ; then
|
|
STRATEGY="bundle"
|
|
else
|
|
STRATEGY="single"
|
|
fi
|
|
echo "Found $DEPENDENCIES dependencies - using $STRATEGY strategy"
|
|
fi
|
|
|
|
if [ -f "$PACKAGE_DIR"/*.spec ]; then
|
|
echo -n "Detected update..."
|
|
UPDATE=true
|
|
else
|
|
UPDATE=false
|
|
fi
|
|
|
|
generate_npm_package
|
|
if [[ $UPDATE == true ]] ; then
|
|
git commit -m "Bump $PACKAGE_NAME to $VERSION"
|
|
else
|
|
echo -n "Setting tito props..."
|
|
add_to_tito_props
|
|
echo "FINISHED"
|
|
echo -e "Updating comps... - "
|
|
add_npm_to_comps
|
|
echo "FINISHED"
|
|
git commit -m "Add $PACKAGE_NAME package"
|
|
fi
|
|
echo "Done! Now review the generated file and send a pull request"
|