feat(ci): add release workflow
This commit is contained in:
73
.gitea/scripts/create-release.sh
Normal file
73
.gitea/scripts/create-release.sh
Normal file
@@ -0,0 +1,73 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
TAG="$GITHUB_REF_NAME"
|
||||
VERSION="${TAG#v}"
|
||||
DATE=$(date +%Y-%m-%d)
|
||||
|
||||
echo "🚀 Creating release for $TAG (safe mode)"
|
||||
|
||||
# -------------------------------------------------------------------
|
||||
# 1. Extract release notes from annotated tag
|
||||
# -------------------------------------------------------------------
|
||||
|
||||
NOTES=$(git tag -l "$TAG" --format='%(contents)')
|
||||
|
||||
if [ -z "$NOTES" ]; then
|
||||
echo "❌ Tag message is empty"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
git checkout main
|
||||
|
||||
# -------------------------------------------------------------------
|
||||
# 2. Update all package.json versions
|
||||
# -------------------------------------------------------------------
|
||||
|
||||
echo "🔧 Updating package.json versions to $VERSION"
|
||||
|
||||
find . -name package.json -not -path "*/node_modules/*" | while read -r file; do
|
||||
jq --arg v "$VERSION" '.version = $v' "$file" >"$file.tmp"
|
||||
mv "$file.tmp" "$file"
|
||||
done
|
||||
|
||||
# -------------------------------------------------------------------
|
||||
# 3. Update CHANGELOG.md (prepend)
|
||||
# -------------------------------------------------------------------
|
||||
|
||||
{
|
||||
echo "## $TAG ($DATE)"
|
||||
echo ""
|
||||
echo "$NOTES"
|
||||
echo ""
|
||||
echo "---"
|
||||
echo ""
|
||||
cat CHANGELOG.md 2>/dev/null || true
|
||||
} >CHANGELOG.tmp
|
||||
|
||||
mv CHANGELOG.tmp CHANGELOG.md
|
||||
|
||||
# -------------------------------------------------------------------
|
||||
# 4. Create release commit
|
||||
# -------------------------------------------------------------------
|
||||
|
||||
git config user.name "release-bot"
|
||||
git config user.email "release-bot@ci"
|
||||
|
||||
git add CHANGELOG.md $(find . -name package.json -not -path "*/node_modules/*")
|
||||
|
||||
# Skip commit if nothing changed
|
||||
if git diff --cached --quiet; then
|
||||
echo "No changes to commit for release $TAG"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
git commit -m "chore(release): $TAG"
|
||||
|
||||
# -------------------------------------------------------------------
|
||||
# 5. Push changes
|
||||
# -------------------------------------------------------------------
|
||||
|
||||
git push origin main
|
||||
|
||||
echo "✅ Release commit for $TAG created successfully (tag untouched)"
|
||||
Reference in New Issue
Block a user