2026-06-05 22:39:40 +00:00
#!/bin/bash
# release.sh — One-command release driver for gostations (modeled on grokkit)
# Usage: ./release.sh v2.0.0
#
# This will:
# - Create the git tag (so downstream CI/release can see it)
# - Help generate/update CHANGELOG (via grokkit if available)
# - Commit the changes
# - Push tag + commit
# - Print suggested Gitea release notes body
set -euo pipefail
VERSION = " ${ 1 :- } "
if [ [ -z " $VERSION " || ! " $VERSION " = ~ ^v[ 0-9] +\. [ 0-9] +\. [ 0-9] +( \. [ 0-9] +) ? ] ] ; then
echo " ❌ Usage: $0 vX.Y.Z "
echo " Example: $0 v2.0.0 "
exit 1
fi
echo " 🚀 Starting release process for gostations $VERSION ... "
# Safety check: clean working tree
if [ [ -n $( git status --porcelain) ] ] ; then
echo "❌ Working tree is dirty. Commit or stash changes first."
exit 1
fi
# Final human confirmation
echo ""
echo "This will:"
echo " 1. Create git tag $VERSION "
echo " 2. (If grokkit available) Run grokkit changelog + commit for CHANGELOG.md"
echo " 3. Push the commit + tag"
echo " 4. Print ready-to-paste text for the Gitea release page"
echo ""
read -p " Proceed with release $VERSION ? (y/N) " -n 1 -r
echo
if [ [ ! $REPLY = ~ ^[ Yy] $ ] ] ; then
echo "Aborted."
exit 1
fi
# 1. Create the tag early (CI release workflow triggers on tag)
echo " 🏷️ Creating tag $VERSION ... "
git tag " $VERSION "
# 2. Changelog / release prep (best effort using grokkit if present on PATH)
if command -v grokkit >/dev/null 2>& 1; then
echo "📝 Generating/updating CHANGELOG.md via grokkit..."
grokkit changelog --version " $VERSION " || echo "⚠️ grokkit changelog returned non-zero (continuing)"
if [ [ -n $( git status --porcelain -- CHANGELOG.md) ] ] ; then
echo "📦 Committing changelog changes via grokkit..."
git add CHANGELOG.md
grokkit commit || echo "⚠️ grokkit commit may need manual follow-up"
fi
else
echo "ℹ ️ grokkit not found on PATH. Skipping automated changelog."
echo " You can manually edit CHANGELOG.md before the next steps if desired."
echo " Then run: git add CHANGELOG.md && git commit -m 'chore(release): $VERSION ' "
fi
# 3. Push (tag was created earlier; push any new commit + tags)
echo "📤 Pushing commit (if any) + tag..."
git push || true
git push --tags
# 4. Print nice release notes for Gitea
echo ""
echo " ✅ Release $VERSION pushed! "
echo ""
echo "📋 Copy-paste the following into the Gitea release notes body:"
echo "------------------------------------------------------------"
make -s release-notes VERSION = " $VERSION " || cat <<EOF
## gostations ${VERSION}
New major release: full modern TUI ( Bubble Tea) is now the default.
- Two-stage UI: station browser → dedicated playback view ( Winamp-inspired)
- Live stream metadata display
- Playback controls: skip, volume ( ↑/↓ + vertical bar) , mute, play/pause, stop ( returns to list)
- mpv JSON IPC for responsive controls + metadata ( no terminal takeover)
- Favorites ( ★) management in both TUI and CLI ( fav list/add/del [ index] )
- Server-side search on ENTER while filtering
- Legacy wmenu UI still available via --legacy ( for now)
- All previous CLI subcommands ( find, play, fav) preserved
See the commit history and updated README for details.
EOF
echo "------------------------------------------------------------"
echo ""
2026-06-06 07:28:28 +00:00
echo "🎉 Tag pushed! The Gitea Actions 'Release' workflow should now be running (triggered by the tag push)."
echo " It will build cross-platform tarballs, checksums, copy install scripts, and auto-create the release + upload assets via the API."
echo " Monitor the run in the Actions tab for tag $VERSION . The new error handling will make any create/upload issues visible in logs (with API response). "
echo " Once green, the release with packages should appear on the Releases page."