4.2 Release Automation

#!/bin/bash
# release.sh - Automated release script

set -e

# Check arguments
if [ $# -lt 1 ]; then
    echo "Usage: $0 <version> [--dry-run]"
    exit 1
fi

VERSION=$1
DRY_RUN=false

if [ "$2" = "--dry-run" ]; then
    DRY_RUN=true
fi

# Update version
sed -i "s/VERSION = .*/VERSION = $VERSION/" Makefile

# Update changelog
git log --pretty=format:"- %s (%h)" $(git describe --tags --abbrev=0)..HEAD > CHANGELOG.tmp
cat CHANGELOG.md | head -n 5 > CHANGELOG.new
cat CHANGELOG.tmp >> CHANGELOG.new
mv CHANGELOG.new CHANGELOG.md
rm CHANGELOG.tmp

# Build
make clean
make release

# Create packages
mkdir -p release/d3tui-$VERSION
cp d3tui.elf release/d3tui-$VERSION/
cp d3tui.cdi release/d3tui-$VERSION/  # P0: INVALID - Use ISO only
cp README.md release/d3tui-$VERSION/
cp CHANGELOG.md release/d3tui-$VERSION/
cp LICENSE release/d3tui-$VERSION/

# Create tarball
tar -czf release/d3tui-$VERSION.tar.gz -C release d3tui-$VERSION

# Create Git tag
git tag -a v$VERSION -m "Release v$VERSION"

if [ "$DRY_RUN" = false ]; then
    # Push to Forgejo
    git push origin main
    git push origin v$VERSION

    # Upload to release server
    scp release/d3tui-$VERSION.tar.gz user@releases.from.house:/path/to/releases/
fi

echo "Release v$VERSION prepared successfully"