You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
|
|
#!/usr/bin/env bash
|
|
|
|
|
# Bash script to prepare a release using git-cliff.
|
|
|
|
|
# Inspired by https://github.com/orhun/git-cliff/blob/main/release.sh
|
|
|
|
|
|
|
|
|
|
if [ "$#" -ne 1 ]; then
|
|
|
|
|
echo "A version tag is required."
|
|
|
|
|
echo "Example: bash $0 1.5.0"
|
|
|
|
|
exit 1
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
VERSION_TAG=$1
|
|
|
|
|
|
|
|
|
|
# Update CHANGELOG.
|
|
|
|
|
git cliff --tag "$VERSION_TAG" -o CHANGELOG.md
|
|
|
|
|
|
|
|
|
|
# Add all changes and commit.
|
|
|
|
|
git add -A
|
|
|
|
|
git commit -m "🔖 chore(release): prepare for $VERSION_TAG"
|
|
|
|
|
|
|
|
|
|
# Template for the tag description.
|
|
|
|
|
export GIT_CLIFF_TEMPLATE="\
|
|
|
|
|
{% for group, commits in commits | group_by(attribute=\"group\") %}\
|
|
|
|
|
{{ group | striptags | trim | upper_first }}\
|
|
|
|
|
{% for commit in commits %}\
|
|
|
|
|
- {% if commit.breaking %}(**‼️BREAKING‼️**) {% endif %}{{ commit.message | upper_first }} ({{ commit.id | truncate(length=7, end=\"\") }})\
|
|
|
|
|
{% endfor %}\
|
|
|
|
|
{% endfor %}"
|
|
|
|
|
|
|
|
|
|
# Generate the tag description.
|
|
|
|
|
changelog=$(git cliff --tag "$VERSION_TAG" --unreleased --strip all)
|
|
|
|
|
|
|
|
|
|
# Create a signed and annotated tag.
|
|
|
|
|
git tag -s -a "$VERSION_TAG" -m "Release $VERSION_TAG" -m "$changelog"
|
|
|
|
|
|
|
|
|
|
echo "Most recent commit:"
|
|
|
|
|
git log -1
|
|
|
|
|
echo
|
|
|
|
|
echo "Information for tag $VERSION_TAG:"
|
|
|
|
|
git show $VERSION_TAG
|
|
|
|
|
echo
|
|
|
|
|
|
|
|
|
|
echo "Release $VERSION_TAG is ready. Don't forget to push the changes and the tag:"
|
|
|
|
|
echo "git push && git push --tags"
|