Files
test2/release.sh
pi-farm 7bc6c7ed6c
All checks were successful
Docker Build Smart Logic / Build amd64 & arm64 (push) Successful in 25s
fix release.sh
2026-02-09 19:53:35 +01:00

88 lines
1.7 KiB
Bash
Executable File

#!/usr/bin/env bash
set -e
VERSION="$1"
if [ -z "$VERSION" ]; then
echo "Usage: ./release.sh <semver>"
exit 1
fi
if ! [[ "$VERSION" =~ ^[0-9]+.[0-9]+.[0-9]+$ ]]; then
echo "Version must be SemVer: X.Y.Z"
exit 1
fi
TAG="v$VERSION"
echo "=== Release $TAG ==="
sedi() {
if sed --version >/dev/null 2>&1; then
sed -i "$@"
else
sed -i '' "$@"
fi
}
BRANCH=$(git rev-parse --abbrev-ref HEAD)
[ "$BRANCH" = "main" ] || { echo "Not on main"; exit 1; }
git diff --quiet || { echo "Working tree not clean"; exit 1; }
git fetch origin
LOCAL=$(git rev-parse main)
REMOTE=$(git rev-parse origin/main)
[ "$LOCAL" = "$REMOTE" ] || { echo "main not in sync"; exit 1; }
git rev-parse "$TAG" >/dev/null 2>&1 && { echo "Tag exists locally"; exit 1; }
git ls-remote --tags origin | grep -q "refs/tags/$TAG" && { echo "Tag exists remote"; exit 1; }
[ -f versions.env ] || { echo "versions.env missing"; exit 1; }
echo "Updating versions.env"
if grep -q "^APP_VERSION=" versions.env; then
sedi "s/^APP_VERSION=.*/APP_VERSION=$VERSION/" versions.env
else
echo "APP_VERSION=$VERSION" >> versions.env
fi
if [ -f CHANGELOG.md ]; then
echo "Updating CHANGELOG.md"
LAST_TAG=$(git describe --tags --abbrev=0 2>/dev/null || true)
if [ -n "$LAST_TAG" ]; then
git log $LAST_TAG..HEAD --pretty=format:"- %s" > NOTES.tmp
else
git log --pretty=format:"- %s" > NOTES.tmp
fi
DATE=$(date +%Y-%m-%d)
{
echo "## $VERSION - $DATE"
cat NOTES.tmp
echo
cat CHANGELOG.md
} > CHANGELOG.new
mv CHANGELOG.new CHANGELOG.md
rm NOTES.tmp
git add CHANGELOG.md
fi
git add versions.env
git commit -m "release: $VERSION"
git push origin main
echo "Main pushed → edge build"
git tag -a "$TAG" -m "Release $TAG"
git push origin "$TAG"
echo "Tag pushed → release build"
echo "=== Release complete ==="