From 8cbec84389781d013a4fae3a97e44843a0e5fd6f Mon Sep 17 00:00:00 2001 From: welpo Date: Sat, 30 Dec 2023 15:32:49 +0100 Subject: [PATCH] =?UTF-8?q?=F0=9F=91=B7=20chore(release):=20add=20release?= =?UTF-8?q?=20preparation=20script?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- release | 43 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 release diff --git a/release b/release new file mode 100644 index 0000000..40ae116 --- /dev/null +++ b/release @@ -0,0 +1,43 @@ +#!/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"