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"