#!/bin/bash # ============================================================================= # VibeTunnel Release Changelog Fixer # ============================================================================= # # This script updates existing GitHub releases to show only their own changelog # instead of the cumulative changelog history. # # USAGE: # ./scripts/fix-release-changelogs.sh [--dry-run] # # OPTIONS: # --dry-run Show what would be changed without actually updating # # ============================================================================= set -euo pipefail # Get script directory SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" PROJECT_ROOT="$(dirname "$SCRIPT_DIR")" # Colors for output RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' NC='\033[0m' # No Color # Check for dry-run mode DRY_RUN=false if [[ "${1:-}" == "--dry-run" ]]; then DRY_RUN=true echo -e "${YELLOW}DRY RUN MODE - No changes will be made${NC}" fi # Find changelog file - try multiple locations CHANGELOG_PATH="" if [[ -f "$PROJECT_ROOT/../CHANGELOG.md" ]]; then CHANGELOG_PATH="$PROJECT_ROOT/../CHANGELOG.md" elif [[ -f "$PROJECT_ROOT/CHANGELOG.md" ]]; then CHANGELOG_PATH="$PROJECT_ROOT/CHANGELOG.md" elif [[ -f "$SCRIPT_DIR/../../CHANGELOG.md" ]]; then CHANGELOG_PATH="$SCRIPT_DIR/../../CHANGELOG.md" elif [[ -f "CHANGELOG.md" ]]; then CHANGELOG_PATH="$(pwd)/CHANGELOG.md" else echo -e "${RED}ā Error: CHANGELOG.md not found${NC}" echo "Searched in:" echo " - $PROJECT_ROOT/../CHANGELOG.md" echo " - $PROJECT_ROOT/CHANGELOG.md" echo " - $SCRIPT_DIR/../../CHANGELOG.md" echo " - $(pwd)/CHANGELOG.md" exit 1 fi echo "š Using changelog: $CHANGELOG_PATH" # Function to extract and format changelog for a specific version generate_release_notes() { local version="$1" local changelog_html="" # Use the existing changelog-to-html.sh script if [[ -x "$SCRIPT_DIR/changelog-to-html.sh" ]]; then changelog_html=$("$SCRIPT_DIR/changelog-to-html.sh" "$version" "$CHANGELOG_PATH" 2>/dev/null || echo "") fi # If we got HTML content, format it nicely for GitHub if [[ -n "$changelog_html" ]] && [[ "$changelog_html" != *"Latest version of VibeTunnel"* ]]; then # Convert HTML back to Markdown for GitHub (basic conversion) echo "$changelog_html" | \ sed 's/