Skip to content

Instantly share code, notes, and snippets.

@peveuve
Forked from camfou/npm_release.sh
Last active December 23, 2016 15:45
Show Gist options
  • Save peveuve/b68c3c289afea6cc3c2c451c0327e9de to your computer and use it in GitHub Desktop.
Save peveuve/b68c3c289afea6cc3c2c451c0327e9de to your computer and use it in GitHub Desktop.
#!/usr/bin/env bash
shopt -s nocasematch
set -e
set -o pipefail
FIX_BRANCH_PATTERN="fix_*"
FEATURE_BRANCH_PATTERN="feature_*"
MASTER_BRANCH="master"
CI_SKIP="[ci skip]"
echo "Travis Pull Request : " ${TRAVIS_PULL_REQUEST}
if [[ ${TRAVIS_PULL_REQUEST} != 'false' ]]; then
echo "Detect pull request. Ignore release task (Done on PR Branch)"
exit 0
fi
###################################################################################################
### Configure workspace
###################################################################################################
if [ -n "$GIT_USER_EMAIL" ] && [ -n "$GIT_USER_NAME" ];
then
echo "Configure git with username" ${GIT_USER_NAME} "and email" ${GIT_USER_EMAIL}
git config --global user.name ${GIT_USER_NAME}
git config --global user.email ${GIT_USER_EMAIL}
else
echo ERROR:"Ignore git configuration (Empty GIT_USER_EMAIL or/and GIT_USER_NAME variables)"
exit 1
fi
npm config set loglevel warn
npm config set git-tag-version false
git checkout ${TRAVIS_BRANCH}
NPM_PACKAGE_NAME=$(node -p -e "require('./package.json').name")
NPM_PACKAGE_VERSION=$(node -p -e "require('./package.json').version")
echo "-----------------------------------"
echo "--- Package info"
echo "-----------------------------------"
echo "Name : " ${NPM_PACKAGE_NAME}
echo "Version : " ${NPM_PACKAGE_VERSION}
echo "Branch : " ${TRAVIS_BRANCH}
###################################################################################################
### Prepare release infos
###################################################################################################
if [ -n "$UPDATE_DEP_MESSAGE" ]; then
RELEASE_MESSAGE="$UPDATE_DEP_MESSAGE"
else
RELEASE_MESSAGE="$(git log --first-parent --format=%B -n 1)"
fi
if [ -z "$RELEASE_TYPE" ]; then
if [[ ${TRAVIS_BRANCH} == ${FIX_BRANCH_PATTERN} ]]; then
RELEASE_TYPE="patch"
else
RELEASE_TYPE="minor"
fi
fi
RELEASE_VERSION=`semver ${NPM_PACKAGE_VERSION} -i ${RELEASE_TYPE}`
if [[ ${TRAVIS_BRANCH} != ${MASTER_BRANCH} && ${TRAVIS_BRANCH} != ${FIX_BRANCH_PATTERN} ]]; then
SHORT_HASH="$(git rev-parse --short ${TRAVIS_COMMIT})"
RELEASE_VERSION=${RELEASE_VERSION}-${SHORT_HASH}
fi
RELEASE_TAG="version-${RELEASE_VERSION}"
RELEASE_MESSAGE=$(echo ${RELEASE_MESSAGE} | sed ':a;N;$!ba;s/\n/ /g')
echo "-----------------------------------"
echo "--- Release info"
echo "-----------------------------------"
echo "Type :" ${RELEASE_TYPE}
echo "Version :" ${RELEASE_VERSION}
echo "Tag :" ${RELEASE_TAG}
echo "Message :" ${RELEASE_MESSAGE}
###################################################################################################
### Publish release
###################################################################################################
if [[ ${TRAVIS_BRANCH} == ${MASTER_BRANCH} ]]; then
npm version ${RELEASE_VERSION}
if [ -n "$UPDATE_DEP_NAME" ] && [ -n "$UPDATE_DEP_VERSION" ] && [ -n "$UPDATE_DEP_MESSAGE" ];
then
echo "Should update ${UPDATE_DEP_NAME} to ${UPDATE_DEP_VERSION}"
sed -i "s|\(\"$UPDATE_DEP_NAME\"\s*:\s*\) \".*\"|\1 \"$UPDATE_DEP_VERSION\"|g" package.json
npm install
npm run test
fi
git add package.json
git commit -m "${RELEASE_MESSAGE} - ${CI_SKIP}"
git pull --rebase
git push origin ${TRAVIS_BRANCH}
npm publish
git tag ${RELEASE_TAG} -a -m "Version ${RELEASE_VERSION}"
git push origin ${RELEASE_TAG}
fi
###################################################################################################
### Push image to Docker Hub
###################################################################################################
if [[ $DEPLOY_DOCKER_HUB -eq 1 ]]; then
docker build -t clubmed/digital-api:latest -f DockerfileTest .
docker login -u ${DOCKER_HUB_ID} -p ${DOCKER_HUB_PWD}
if [[ ${TRAVIS_BRANCH} == ${MASTER_BRANCH} ]]; then
docker tag clubmed/digital-api:latest clubmed/digital-api:${RELEASE_VERSION}
docker push clubmed/digital-api:${RELEASE_VERSION}
elif [[ ${TRAVIS_BRANCH} == ${FEATURE_BRANCH_PATTERN} ]]; then
docker tag clubmed/digital-api:latest clubmed/digital-api:${TRAVIS_BRANCH}
docker push clubmed/digital-api:${TRAVIS_BRANCH}
fi
fi
###################################################################################################
### Ask related dependencies build
###################################################################################################
GITHUB_RELATED_PROJECTS=($GITHUB_RELATED_NAMES)
echo "Related projects :" ${GITHUB_RELATED_PROJECTS}
if [[ ${TRAVIS_BRANCH} == ${MASTER_BRANCH} ]]; then
for GITHUB_REPO_NAME in "${GITHUB_RELATED_PROJECTS[@]}"
do
echo "Update related dependency :" ${GITHUB_REPO_NAME}
body="{
\"request\": {
\"message\":\"Update related dependency\",
\"branch\":\"${TRAVIS_BRANCH}\",
\"config\": {
\"env\": {
\"matrix\": [
\"RELEASE_TYPE=${RELEASE_TYPE} UPDATE_DEP_VERSION=${RELEASE_VERSION} UPDATE_DEP_NAME=${NPM_PACKAGE_NAME} UPDATE_DEP_MESSAGE=${RELEASE_MESSAGE}\"
]
}
}
}}";
curl -s -X POST \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-H "Travis-API-Version: 3" \
-H "Authorization: token ${TRAVIS_TOKEN}" \
-d "$body" \
https://api.travis-ci.com/repo/${GITHUB_ORGANIZATION_NAME}%2F${GITHUB_REPO_NAME}/requests
done
else
echo "Do not update related dependencies if current branch is not default"
fi
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment