#!/bin/bash # # Copyright (C) 2018 Pawel Krupa (@paulfantom) - All Rights Reserved # Permission to copy and modify is granted under the MIT license # # Script to automatically do a couple of things: # - generate a new tag according to semver (https://semver.org/) # - generate CHANGELOG.md by using https://github.com/skywinder/github-changelog-generator # - sync CHANGELOG with GitHub releases by using https://github.com/mattbrictson/chandler # # Tags are generated by searching for a keyword in last commit message. Keywords are: # - [patch] or [fix] to bump patch number # - [minor], [feature] or [feat] to bump minor number # - [major] or [breaking change] to bump major number # All keywords MUST be surrounded with square braces. # # Script uses git mechanisms for locking, so it can be used in parallel builds # # Requirements: # - GH_TOKEN variable set with GitHub token. Access level: repo.public_repo # - docker # - git-semver python package (pip install git-semver) # Exit when latest commit is tagged [[ $(git tag --points-at) ]] && exit 0 # Some basic variables GIT_MAIL="andrea.tosy@gmail.com" GIT_USER="atosatto" ORGANIZATION=$(echo "$TRAVIS_REPO_SLUG" | awk -F '/' '{print $1}') PROJECT=$(echo "$TRAVIS_REPO_SLUG" | awk -F '/' '{print $2}') GALAXY_URL="https://galaxy.ansible.com/${ORGANIZATION}/${PROJECT#ansible-}" # Git config git config --global user.email "${GIT_MAIL}" git config --global user.name "${GIT_USER}" GIT_URL=$(git config --get remote.origin.url) GIT_URL=${GIT_URL#*//} # Generate TAG GIT_TAG=none echo "Last commit message: $TRAVIS_COMMIT_MESSAGE" case "${TRAVIS_COMMIT_MESSAGE}" in *"[patch]"*|*"[fix]"* ) GIT_TAG=$(git semver --next-patch) ;; *"[minor]"*|*"[feat]"*|*"[feature]"* ) GIT_TAG=$(git semver --next-minor) ;; *"[major]"*|*"[breaking change]"* ) GIT_TAG=$(git semver --next-major) ;; *) echo "Keyword not detected. Doing nothing" ;; esac if [ "$GIT_TAG" != "none" ]; then echo "Assigning new tag: $GIT_TAG" git tag "$GIT_TAG" -a -m "Automatic tag generation for travis build no. $TRAVIS_BUILD_NUMBER" git push "https://${GH_TOKEN}:@${GIT_URL}" --tags || exit 0 fi # Generate CHANGELOG.md git checkout master git pull docker run -it --rm -v "$(pwd)":/usr/local/src/your-app ferrarimarco/github-changelog-generator:1.14.3 \ -u "${ORGANIZATION}" -p "${PROJECT}" --token "${GH_TOKEN}" \ --release-url "${GALAXY_URL}" \ --unreleased-label "**Next release**" --no-compare-link git add CHANGELOG.md git commit -m '[ci skip] Automatic changelog update' git push "https://${GH_TOKEN}:@${GIT_URL}" || exit 0 # Sync changelog to github releases if [ "$GIT_TAG" != "none" ]; then docker run -e CHANDLER_GITHUB_API_TOKEN="${GH_TOKEN}" -v "$(pwd)":/chandler -ti whizark/chandler push "${GIT_TAG}" fi