diff --git a/.build/generate_changelog.sh b/.build/generate_changelog.sh new file mode 100755 index 00000000..58867c20 --- /dev/null +++ b/.build/generate_changelog.sh @@ -0,0 +1,54 @@ +#!/usr/bin/env bash + +FILENAME='CHANGELOG.md' + +# get the latest git tags +releases="$(git tag --sort=-creatordate | grep -Ev '(alpha|beta|rc)')" +release_latest=$(printf '%s' "$releases" | awk 'NR==1') +release_secondlatest=$(printf '%s' "$releases" | awk 'NR==2') + +echo "release_latest: ${release_latest}" +echo "release_secondlatest: ${release_secondlatest}" + +# delete generated line (or it will be added multiple times) +sed -i '/This Changelog was automatically generated by/d' "$FILENAME" + +# delete trailing empty lines +sed -i -e :a -e '/^\n*$/{$d;N;};/\n$/ba' "$FILENAME" + +# determine correct tag to go back to +if [[ $TRAVIS_TAG == $release_latest ]]; then + echo "release build" + gittag=${release_secondlatest} +elif [[ ! -z $TRAVIS_TAG ]]; then + echo "beta elease" + gittag=${release_latest} +else + echo "merge into master or develop" + gittag=${release_latest} +fi +echo "gittag: ${gittag}" + +# find the line the tag starts on, and subtract 1 +tagline=$(grep -n "^## \[\?$gittag\]\?" "$FILENAME" | awk '{print $1}' FS=':' | head -1) +echo "tagline: ${tagline}" +[[ ! -z $tagline ]] && sed -i "1,$(expr $tagline - 1)d" "$FILENAME" + +# generate the changelog +docker run -it --rm -v "$(pwd)":/usr/local/src/your-app ferrarimarco/github-changelog-generator -t $GITHUB_TOKEN --since-tag $gittag + +# Put back our link (instead of the broken one) +sed -i 's!https://pypi.org/project/jrnl/HEAD/!https://github.com/jrnl-org/jrnl/!' "$FILENAME" + +BRANCH=$TRAVIS_BRANCH +if [[ $TRAVIS_BRANCH == $TRAVIS_TAG ]]; then + BRANCH='master' +fi + +git config --global user.email "jrnl.bot@gmail.com" +git config --global user.name "Jrnl Bot" +git checkout $BRANCH +git add "$FILENAME" +git commit -m "Updating changelog [ci skip]" +git push https://${GITHUB_TOKEN}@github.com/jrnl-org/jrnl.git $BRANCH + diff --git a/.github_changelog_generator b/.github_changelog_generator new file mode 100644 index 00000000..983e4119 --- /dev/null +++ b/.github_changelog_generator @@ -0,0 +1,11 @@ +project=jrnl +user=jrnl-org +base=CHANGELOG.md +issues=false +issues-wo-labels=false +include-labels=bug,enhancement,documentation,build,deprecated +release-url=https://pypi.org/project/jrnl/%s/ +add-sections={ "build": { "prefix": "**Build:**", "labels": ["build"]}, "docs": { "prefix": "**Updated documentation:**", "labels": ["documentation"]}} +exclude-tags-regex=(alpha|beta|rc) +verbose=false + diff --git a/.travis.yml b/.travis.yml index e493c534..0fd39b6e 100644 --- a/.travis.yml +++ b/.travis.yml @@ -114,16 +114,28 @@ jobs: env: - TZ=America/Edmonton + # Changelog for Unreleased changes + - stage: Update Changelog + if: (tag IS present) OR (branch = develop AND type NOT IN (pull_request)) + install: + - echo 'Skipping install' + script: + - ./.build/generate_changelog.sh + - stage: Deploy - if: branch = master AND tag IS present + if: tag IS present before_deploy: - - poetry config http-basic.pypi "$PYPI_USER" "$PYPI_PASS" + - poetry config pypi-token.pypi "$PYPI_TOKEN" - poetry version "$TRAVIS_TAG" - echo __version__ = \"$TRAVIS_TAG\" > jrnl/__version__.py - poetry build deploy: - provider: script script: poetry publish + skip_cleanup: true + on: + branch: master + tags: true after_deploy: - git config --global user.email "jrnl.bot@gmail.com" - git config --global user.name "Jrnl Bot"