|
| 1 | +#!/bin/bash |
| 2 | +# Helper script to update changelog and footer links |
| 3 | +# |
| 4 | +# Usage: |
| 5 | +# ./bin/update-changelog.sh 2.23.0 # Prepare release 2.23.0 (before tagging) |
| 6 | + |
| 7 | +set -e |
| 8 | + |
| 9 | +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" |
| 10 | +PROJECT_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)" |
| 11 | + |
| 12 | +cd "$PROJECT_ROOT" |
| 13 | + |
| 14 | +# Get the version argument if provided |
| 15 | +NEW_VERSION="$1" |
| 16 | + |
| 17 | +echo "🔄 Updating changelog..." |
| 18 | + |
| 19 | +# Get the latest tag |
| 20 | +LATEST_TAG=$(git describe --tags --abbrev=0 2>/dev/null || echo "") |
| 21 | + |
| 22 | +if [ -n "$NEW_VERSION" ]; then |
| 23 | + # Releasing a specific version - generate for unreleased commits |
| 24 | + echo "📝 Preparing release ${NEW_VERSION}" |
| 25 | + |
| 26 | + # Generate unreleased changelog |
| 27 | + git cliff --unreleased --tag $NEW_VERSION --prepend CHANGELOG.md |
| 28 | + |
| 29 | + # Replace [Unreleased] with the version and today's date |
| 30 | + TODAY=$(date +%Y-%m-%d) |
| 31 | + CLEAN_VERSION=$(echo "$NEW_VERSION" | sed 's/^v//') |
| 32 | + VERSION_ANCHOR=$(echo "$CLEAN_VERSION" | sed 's/\./_/g') |
| 33 | + |
| 34 | + # Replace the Unreleased section header with the version header |
| 35 | + sed -i "s/## \[Unreleased\]\[unreleased\]/<a id=\"${VERSION_ANCHOR}\"><\/a>\n\n## [${CLEAN_VERSION}] - ${TODAY}/" CHANGELOG.md |
| 36 | + |
| 37 | + # Remove trailing whitespace |
| 38 | + sed -i 's/[[:space:]]*$//' CHANGELOG.md |
| 39 | + |
| 40 | + echo "✅ Added version section for ${CLEAN_VERSION}" |
| 41 | + |
| 42 | + # Update LATEST_TAG to the new version for footer processing |
| 43 | + LATEST_TAG="v${CLEAN_VERSION}" |
| 44 | +else |
| 45 | + # No version specified - just update unreleased |
| 46 | + echo "📝 Updating unreleased commits" |
| 47 | + git cliff --unreleased --prepend CHANGELOG.md |
| 48 | +fi |
| 49 | + |
| 50 | +# Update footer links |
| 51 | +if [ -n "$NEW_VERSION" ]; then |
| 52 | + # We're preparing a release - update footer for the new version |
| 53 | + CLEAN_VERSION=$(echo "$NEW_VERSION" | sed 's/^v//') |
| 54 | + PREV_TAG=$(git describe --tags --abbrev=0 2>/dev/null || echo "") |
| 55 | + |
| 56 | + if [ -n "$PREV_TAG" ]; then |
| 57 | + # Replace or add the version link |
| 58 | + if grep -q "^\[${CLEAN_VERSION}\]:" CHANGELOG.md; then |
| 59 | + sed -i "s|^\[${CLEAN_VERSION}\]:.*|[${CLEAN_VERSION}]: https://github.com/deltachat/deltachat-desktop/compare/${PREV_TAG}...v${CLEAN_VERSION}|" CHANGELOG.md |
| 60 | + else |
| 61 | + # Add new version link at the top of the footer |
| 62 | + if grep -q "^\[unreleased\]:" CHANGELOG.md; then |
| 63 | + sed -i "/^\[unreleased\]:/a [${CLEAN_VERSION}]: https://github.com/deltachat/deltachat-desktop/compare/${PREV_TAG}...v${CLEAN_VERSION}" CHANGELOG.md |
| 64 | + else |
| 65 | + # No links yet, add before the generated comment |
| 66 | + if grep -q "<!-- generated by git-cliff -->" CHANGELOG.md; then |
| 67 | + sed -i "/<!-- generated by git-cliff -->/i [${CLEAN_VERSION}]: https://github.com/deltachat/deltachat-desktop/compare/${PREV_TAG}...v${CLEAN_VERSION}\n" CHANGELOG.md |
| 68 | + fi |
| 69 | + fi |
| 70 | + fi |
| 71 | + |
| 72 | + # Update unreleased link to point from new version |
| 73 | + if grep -q "^\[unreleased\]:" CHANGELOG.md; then |
| 74 | + sed -i "s|^\[unreleased\]:.*|[unreleased]: https://github.com/deltachat/deltachat-desktop/compare/v${CLEAN_VERSION}...HEAD|" CHANGELOG.md |
| 75 | + else |
| 76 | + # Add unreleased link |
| 77 | + if grep -q "^\[${CLEAN_VERSION}\]:" CHANGELOG.md; then |
| 78 | + sed -i "/^\[${CLEAN_VERSION}\]:/i [unreleased]: https://github.com/deltachat/deltachat-desktop/compare/v${CLEAN_VERSION}...HEAD" CHANGELOG.md |
| 79 | + fi |
| 80 | + fi |
| 81 | + echo "✅ Updated footer links for ${CLEAN_VERSION}" |
| 82 | + fi |
| 83 | +elif [ -n "$LATEST_TAG" ]; then |
| 84 | + # No new version - just update unreleased link |
| 85 | + if grep -q "^\[unreleased\]:" CHANGELOG.md; then |
| 86 | + sed -i "s|^\[unreleased\]:.*|[unreleased]: https://github.com/deltachat/deltachat-desktop/compare/${LATEST_TAG}...HEAD|" CHANGELOG.md |
| 87 | + echo "✅ Updated [unreleased] link" |
| 88 | + fi |
| 89 | +fi |
| 90 | + |
| 91 | +echo "✅ Changelog updated!" |
0 commit comments