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)"
|
||||||
@@ -1,60 +0,0 @@
|
|||||||
name: 🏗️ Build and Deploy
|
|
||||||
|
|
||||||
on:
|
|
||||||
push:
|
|
||||||
branches: ["*"]
|
|
||||||
|
|
||||||
env:
|
|
||||||
PNPM_CACHE_FOLDER: ~/.pnpm-store
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
build_and_deploy:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
container: jimfx/nodes:latest
|
|
||||||
steps:
|
|
||||||
- name: 📑 Checkout Code
|
|
||||||
uses: actions/checkout@v4
|
|
||||||
|
|
||||||
- name: 💾 Setup pnpm Cache
|
|
||||||
uses: actions/cache@v4
|
|
||||||
with:
|
|
||||||
path: ${{ env.PNPM_CACHE_FOLDER }}
|
|
||||||
key: ${{ runner.os }}-pnpm-${{ hashFiles('**/pnpm-lock.yaml') }}
|
|
||||||
restore-keys: |
|
|
||||||
${{ runner.os }}-pnpm-
|
|
||||||
|
|
||||||
- name: 📦 Install Dependencies
|
|
||||||
run: pnpm install --frozen-lockfile --store-dir ${{ env.PNPM_CACHE_FOLDER }}
|
|
||||||
|
|
||||||
- name: 🧹 Run Linter
|
|
||||||
run: pnpm lint
|
|
||||||
|
|
||||||
- name: 🎨 Check Formatting
|
|
||||||
run: pnpm format:check
|
|
||||||
|
|
||||||
- name: 🧬 Type Check
|
|
||||||
run: pnpm check
|
|
||||||
|
|
||||||
- name: 🛠️ Build Site
|
|
||||||
run: pnpm run build:deploy
|
|
||||||
|
|
||||||
- name: 🔑 Configure rclone
|
|
||||||
if: github.ref == 'refs/heads/main'
|
|
||||||
run: |
|
|
||||||
echo "$SSH_PRIVATE_KEY" > /tmp/id_rsa
|
|
||||||
chmod 600 /tmp/id_rsa
|
|
||||||
mkdir -p ~/.config/rclone
|
|
||||||
echo -e "[sftp-remote]\ntype = sftp\nhost = ${SSH_HOST}\nuser = ${SSH_USER}\nport = ${SSH_PORT}\nkey_file = /tmp/id_rsa" > ~/.config/rclone/rclone.conf
|
|
||||||
env:
|
|
||||||
SSH_PRIVATE_KEY: ${{ secrets.SSH_PRIVATE_KEY }}
|
|
||||||
SSH_HOST: ${{ vars.SSH_HOST }}
|
|
||||||
SSH_PORT: ${{ vars.SSH_PORT }}
|
|
||||||
SSH_USER: ${{ vars.SSH_USER }}
|
|
||||||
|
|
||||||
- name: 🚀 Deploy Changed Files via rclone
|
|
||||||
if: github.ref == 'refs/heads/main'
|
|
||||||
run: |
|
|
||||||
echo "Uploading the rest"
|
|
||||||
rclone sync --update -v --progress --exclude _astro/** --stats 2s --stats-one-line ./app/build/ sftp-remote:${REMOTE_DIR} --transfers 4
|
|
||||||
env:
|
|
||||||
REMOTE_DIR: ${{ vars.REMOTE_DIR }}
|
|
||||||
53
.gitea/workflows/release.yaml
Normal file
53
.gitea/workflows/release.yaml
Normal file
@@ -0,0 +1,53 @@
|
|||||||
|
name: 🚀 Release
|
||||||
|
|
||||||
|
env:
|
||||||
|
PNPM_CACHE_FOLDER: ~/.pnpm-store
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
release:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
container: jimfx/nodes:latest
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: 📑 Checkout Code
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
fetch-depth: 0
|
||||||
|
token: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
|
||||||
|
- name: 💾 Setup pnpm Cache
|
||||||
|
uses: actions/cache@v4
|
||||||
|
with:
|
||||||
|
path: ${{ env.PNPM_CACHE_FOLDER }}
|
||||||
|
key: ${{ runner.os }}-pnpm-${{ hashFiles('**/pnpm-lock.yaml') }}
|
||||||
|
restore-keys: |
|
||||||
|
${{ runner.os }}-pnpm-
|
||||||
|
|
||||||
|
- name: 📦 Install Dependencies
|
||||||
|
run: pnpm install --frozen-lockfile --store-dir ${{ env.PNPM_CACHE_FOLDER }}
|
||||||
|
|
||||||
|
- name: 🧹 Lint
|
||||||
|
run: pnpm lint
|
||||||
|
|
||||||
|
- name: 🎨 Format Check
|
||||||
|
run: pnpm format:check
|
||||||
|
|
||||||
|
- name: 🧬 Type Check
|
||||||
|
run: pnpm check
|
||||||
|
|
||||||
|
- name: 🛠️ Build
|
||||||
|
run: pnpm build:deploy
|
||||||
|
|
||||||
|
- name: 🚀 Create Release Commit
|
||||||
|
if: github.ref_type == 'tag'
|
||||||
|
run: ./.gitea/scripts/create-release.sh
|
||||||
|
|
||||||
|
- name: 🏷️ Create Gitea Release
|
||||||
|
if: github.ref_type == 'tag'
|
||||||
|
uses: akkuman/gitea-release-action@v1
|
||||||
|
with:
|
||||||
|
tag_name: ${{ github.ref_name }}
|
||||||
|
release_name: Release ${{ github.ref_name }}
|
||||||
|
body_path: CHANGELOG.md
|
||||||
|
draft: false
|
||||||
|
prerelease: false
|
||||||
Reference in New Issue
Block a user