fix release.sh
All checks were successful
Docker Build Smart Logic / Build amd64 & arm64 (push) Successful in 25s
All checks were successful
Docker Build Smart Logic / Build amd64 & arm64 (push) Successful in 25s
This commit is contained in:
151
release.sh
151
release.sh
@@ -5,16 +5,9 @@ VERSION="$1"
|
|||||||
|
|
||||||
if [ -z "$VERSION" ]; then
|
if [ -z "$VERSION" ]; then
|
||||||
echo "Usage: ./release.sh <semver>"
|
echo "Usage: ./release.sh <semver>"
|
||||||
echo "Example: ./release.sh 1.4.0"
|
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# -----------------------------
|
|
||||||
|
|
||||||
# SemVer validation
|
|
||||||
|
|
||||||
# -----------------------------
|
|
||||||
|
|
||||||
if ! [[ "$VERSION" =~ ^[0-9]+.[0-9]+.[0-9]+$ ]]; then
|
if ! [[ "$VERSION" =~ ^[0-9]+.[0-9]+.[0-9]+$ ]]; then
|
||||||
echo "Version must be SemVer: X.Y.Z"
|
echo "Version must be SemVer: X.Y.Z"
|
||||||
exit 1
|
exit 1
|
||||||
@@ -24,12 +17,6 @@ TAG="v$VERSION"
|
|||||||
|
|
||||||
echo "=== Release $TAG ==="
|
echo "=== Release $TAG ==="
|
||||||
|
|
||||||
# -----------------------------
|
|
||||||
|
|
||||||
# portable sed
|
|
||||||
|
|
||||||
# -----------------------------
|
|
||||||
|
|
||||||
sedi() {
|
sedi() {
|
||||||
if sed --version >/dev/null 2>&1; then
|
if sed --version >/dev/null 2>&1; then
|
||||||
sed -i "$@"
|
sed -i "$@"
|
||||||
@@ -38,173 +25,63 @@ sed -i '' "$@"
|
|||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
# -----------------------------
|
|
||||||
|
|
||||||
# Branch check
|
|
||||||
|
|
||||||
# -----------------------------
|
|
||||||
|
|
||||||
BRANCH=$(git rev-parse --abbrev-ref HEAD)
|
BRANCH=$(git rev-parse --abbrev-ref HEAD)
|
||||||
if [ "$BRANCH" != "main" ]; then
|
[ "$BRANCH" = "main" ] || { echo "Not on main"; exit 1; }
|
||||||
echo "Not on main branch"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
# -----------------------------
|
git diff --quiet || { echo "Working tree not clean"; exit 1; }
|
||||||
|
|
||||||
# Working tree clean?
|
|
||||||
|
|
||||||
# -----------------------------
|
|
||||||
|
|
||||||
if ! git diff --quiet; then
|
|
||||||
echo "Working tree not clean — commit first"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
# -----------------------------
|
|
||||||
|
|
||||||
# Sync with remote
|
|
||||||
|
|
||||||
# -----------------------------
|
|
||||||
|
|
||||||
git fetch origin
|
git fetch origin
|
||||||
|
|
||||||
LOCAL=$(git rev-parse main)
|
LOCAL=$(git rev-parse main)
|
||||||
REMOTE=$(git rev-parse origin/main)
|
REMOTE=$(git rev-parse origin/main)
|
||||||
|
|
||||||
if [ "$LOCAL" != "$REMOTE" ]; then
|
[ "$LOCAL" = "$REMOTE" ] || { echo "main not in sync"; exit 1; }
|
||||||
echo "Local main not in sync with origin/main"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
# -----------------------------
|
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; }
|
||||||
|
|
||||||
# Tag already exists?
|
[ -f versions.env ] || { echo "versions.env missing"; exit 1; }
|
||||||
|
|
||||||
# -----------------------------
|
|
||||||
|
|
||||||
if git rev-parse "$TAG" >/dev/null 2>&1; then
|
|
||||||
echo "Tag already exists locally"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
if git ls-remote --tags origin | grep -q "refs/tags/$TAG"; then
|
|
||||||
echo "Tag already exists on remote"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
# -----------------------------
|
|
||||||
|
|
||||||
# versions.env update
|
|
||||||
|
|
||||||
# -----------------------------
|
|
||||||
|
|
||||||
if [ ! -f versions.env ]; then
|
|
||||||
echo "versions.env not found"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo "Updating versions.env"
|
echo "Updating versions.env"
|
||||||
|
|
||||||
if grep -q "^APP_VERSION=" versions.env; then
|
if grep -q "^APP_VERSION=" versions.env; then
|
||||||
sedi "s/^APP_VERSION=.*/APP_VERSION=${VERSION}/" versions.env
|
sedi "s/^APP_VERSION=.*/APP_VERSION=$VERSION/" versions.env
|
||||||
else
|
else
|
||||||
echo "APP_VERSION=${VERSION}" >> versions.env
|
echo "APP_VERSION=$VERSION" >> versions.env
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# -----------------------------
|
|
||||||
|
|
||||||
# CHANGELOG generation
|
|
||||||
|
|
||||||
# -----------------------------
|
|
||||||
|
|
||||||
if [ -f CHANGELOG.md ]; then
|
if [ -f CHANGELOG.md ]; then
|
||||||
echo "Updating CHANGELOG.md"
|
echo "Updating CHANGELOG.md"
|
||||||
|
|
||||||
LAST_TAG=$(git describe --tags --abbrev=0 2>/dev/null || true)
|
LAST_TAG=$(git describe --tags --abbrev=0 2>/dev/null || true)
|
||||||
|
|
||||||
if [ -n "$LAST_TAG" ]; then
|
if [ -n "$LAST_TAG" ]; then
|
||||||
git log $LAST_TAG..HEAD --pretty=format:"- %s" > RELEASE_NOTES.tmp
|
git log $LAST_TAG..HEAD --pretty=format:"- %s" > NOTES.tmp
|
||||||
else
|
else
|
||||||
git log --pretty=format:"- %s" > RELEASE_NOTES.tmp
|
git log --pretty=format:"- %s" > NOTES.tmp
|
||||||
fi
|
fi
|
||||||
|
|
||||||
DATE=$(date +%Y-%m-%d)
|
DATE=$(date +%Y-%m-%d)
|
||||||
|
|
||||||
{
|
{
|
||||||
echo "## $VERSION - $DATE"
|
echo "## $VERSION - $DATE"
|
||||||
cat RELEASE_NOTES.tmp
|
cat NOTES.tmp
|
||||||
echo
|
echo
|
||||||
cat CHANGELOG.md
|
cat CHANGELOG.md
|
||||||
} > CHANGELOG.new
|
} > CHANGELOG.new
|
||||||
|
|
||||||
mv CHANGELOG.new CHANGELOG.md
|
mv CHANGELOG.new CHANGELOG.md
|
||||||
rm RELEASE_NOTES.tmp
|
rm NOTES.tmp
|
||||||
|
|
||||||
git add CHANGELOG.md
|
git add CHANGELOG.md
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# -----------------------------
|
|
||||||
|
|
||||||
# Commit version bump
|
|
||||||
|
|
||||||
# -----------------------------
|
|
||||||
|
|
||||||
git add versions.env
|
git add versions.env
|
||||||
git commit -m "release: $VERSION"
|
git commit -m "release: $VERSION"
|
||||||
|
|
||||||
# -----------------------------
|
|
||||||
|
|
||||||
# Push main → edge build
|
|
||||||
|
|
||||||
# -----------------------------
|
|
||||||
|
|
||||||
git push origin main
|
git push origin main
|
||||||
echo "Main pushed — edge build will run"
|
echo "Main pushed → edge build"
|
||||||
|
|
||||||
# -----------------------------
|
|
||||||
|
|
||||||
# Create annotated tag
|
|
||||||
|
|
||||||
# -----------------------------
|
|
||||||
|
|
||||||
git tag -a "$TAG" -m "Release $TAG"
|
git tag -a "$TAG" -m "Release $TAG"
|
||||||
|
|
||||||
# -----------------------------
|
|
||||||
|
|
||||||
# Push tag → release build
|
|
||||||
|
|
||||||
# -----------------------------
|
|
||||||
|
|
||||||
git push origin "$TAG"
|
git push origin "$TAG"
|
||||||
echo "Tag pushed — release build triggered"
|
|
||||||
|
|
||||||
# -----------------------------
|
|
||||||
|
|
||||||
# Optional CI wait
|
|
||||||
|
|
||||||
# -----------------------------
|
|
||||||
|
|
||||||
if [ -n "$GITEA_TOKEN" ]; then
|
|
||||||
echo "Checking CI status..."
|
|
||||||
|
|
||||||
URL=$(git config --get remote.origin.url)
|
|
||||||
REPO=$(basename "$URL" .git)
|
|
||||||
OWNER=$(basename "$(dirname "$URL")")
|
|
||||||
|
|
||||||
for i in {1..30}; do
|
|
||||||
STATUS=$(curl -s
|
|
||||||
-H "Authorization: token $GITEA_TOKEN"
|
|
||||||
"[https://git.pi-farm.de/api/v1/repos/$OWNER/$REPO/actions/runs](https://git.pi-farm.de/api/v1/repos/$OWNER/$REPO/actions/runs)"
|
|
||||||
| jq -r '.workflow_runs[0].status // empty')
|
|
||||||
|
|
||||||
```
|
|
||||||
echo "CI status: $STATUS"
|
|
||||||
[ "$STATUS" = "success" ] && break
|
|
||||||
sleep 5
|
|
||||||
```
|
|
||||||
|
|
||||||
done
|
|
||||||
fi
|
|
||||||
|
|
||||||
|
echo "Tag pushed → release build"
|
||||||
echo "=== Release complete ==="
|
echo "=== Release complete ==="
|
||||||
|
|||||||
Reference in New Issue
Block a user