Project

General

Profile

Download (3.83 KB) Statistics
| Branch: | Tag: | Revision:
#!/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"
(5-5/14)