From 32d3e1865792c57510ce69e502bffffc8bc9cdd9 Mon Sep 17 00:00:00 2001 From: Michael Wilson Date: Mon, 7 Jul 2025 02:26:26 +0000 Subject: [PATCH] chore(dev): create release script --- create-release.sh | 80 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 80 insertions(+) create mode 100755 create-release.sh diff --git a/create-release.sh b/create-release.sh new file mode 100755 index 00000000..6e864412 --- /dev/null +++ b/create-release.sh @@ -0,0 +1,80 @@ +#!/bin/bash + +set -e + +DRY_RUN=false +if [[ "$1" == "--dry-run" || "$1" == "-d" ]]; then + DRY_RUN=true + echo "Running in DRY-RUN mode - no changes will be pushed" +fi + +echo "Starting automated release process..." + +echo "Fetching latest tags from remote..." +git fetch --tags + +LATEST_TAG=$(git describe --tags --abbrev=0 2>/dev/null || echo "v1.0.0") +echo "Latest tag found: $LATEST_TAG" + +if [[ $LATEST_TAG =~ ^v([0-9]+)\.([0-9]+)\.([0-9]+)$ ]]; then + MAJOR=${BASH_REMATCH[1]} + MINOR=${BASH_REMATCH[2]} + PATCH=${BASH_REMATCH[3]} +else + echo "Error: Could not parse version from tag $LATEST_TAG" + echo "Expected format: v1.0.x (e.g., v1.0.322)" + exit 1 +fi + +NEW_PATCH=$((PATCH + 1)) +NEW_TAG="v$MAJOR.$MINOR.$NEW_PATCH" + +echo "New version will be: $NEW_TAG" + +echo "Generating changelog with git-cliff..." +npx git-cliff -o CHANGELOG.md -t "$NEW_TAG" + +if ! git diff --quiet CHANGELOG.md; then + echo "Changelog updated successfully" + + git add CHANGELOG.md + + COMMIT_MSG="release: $NEW_TAG" + echo "Committing changelog with message: $COMMIT_MSG" + + if [ "$DRY_RUN" = true ]; then + git commit -m "$COMMIT_MSG" + + echo "Creating tag locally: $NEW_TAG" + git tag "$NEW_TAG" + + echo "DRY-RUN: Would push commit to remote" + echo "DRY-RUN: Would push tag to remote" + else + git commit -m "$COMMIT_MSG" + + echo "Pushing commit to remote..." + git push origin $(git branch --show-current) + + echo "Creating and pushing tag: $NEW_TAG" + git tag "$NEW_TAG" + git push origin tag "$NEW_TAG" + fi + + echo "Release $NEW_TAG completed successfully!" + echo "Summary:" + echo " - Previous version: $LATEST_TAG" + echo " - New version: $NEW_TAG" + echo " - Changelog updated: Yes" + if [ "$DRY_RUN" = true ]; then + echo " - Commit pushed: (dry-run)" + echo " - Tag created and pushed: (dry-run)" + else + echo " - Commit pushed: Yes" + echo " - Tag created and pushed: Yes" + fi +else + echo "No changes detected in CHANGELOG.md" + echo "This might indicate that there are no new commits since the last release." + exit 1 +fi \ No newline at end of file