From 56c1125ef2228128bc20a41aff5ee7a0ed3f1197 Mon Sep 17 00:00:00 2001 From: "alexei.dolgolyov" Date: Thu, 26 Mar 2026 00:43:18 +0300 Subject: [PATCH] ci: add Gitea release workflow --- .gitea/workflows/release.yml | 67 ++++++++++++++++++++++++++++++++++++ 1 file changed, 67 insertions(+) create mode 100644 .gitea/workflows/release.yml diff --git a/.gitea/workflows/release.yml b/.gitea/workflows/release.yml new file mode 100644 index 0000000..c846bee --- /dev/null +++ b/.gitea/workflows/release.yml @@ -0,0 +1,67 @@ +name: Release + +on: + push: + tags: + - 'v*' + +jobs: + release: + runs-on: ubuntu-latest + steps: + - name: Fetch RELEASE_NOTES.md only + uses: actions/checkout@v4 + with: + sparse-checkout: RELEASE_NOTES.md + sparse-checkout-cone-mode: false + + - name: Create Gitea release + env: + DEPLOY_TOKEN: ${{ secrets.DEPLOY_TOKEN }} + run: | + TAG="${{ gitea.ref_name }}" + VERSION="${TAG#v}" + BASE_URL="${{ gitea.server_url }}/api/v1/repos/${{ gitea.repository }}" + + # Detect pre-release (alpha/beta/rc) + IS_PRE="false" + if echo "$TAG" | grep -qE '(alpha|beta|rc)'; then + IS_PRE="true" + fi + + # Read release notes if present + if [ -f RELEASE_NOTES.md ]; then + export RELEASE_NOTES=$(cat RELEASE_NOTES.md) + echo "Found RELEASE_NOTES.md" + else + export RELEASE_NOTES="" + echo "No RELEASE_NOTES.md found" + fi + + BODY_JSON=$(python3 -c " + import json, os + notes = os.environ.get('RELEASE_NOTES', '') + print(json.dumps(notes.strip())) + ") + + # Create release via Gitea API + RELEASE=$(curl -s -X POST "$BASE_URL/releases" \ + -H "Authorization: token $DEPLOY_TOKEN" \ + -H "Content-Type: application/json" \ + -d "{ + \"tag_name\": \"$TAG\", + \"name\": \"$VERSION\", + \"body\": $BODY_JSON, + \"draft\": false, + \"prerelease\": $IS_PRE + }") + + # Fallback: if release already exists for this tag, reuse it + RELEASE_ID=$(echo "$RELEASE" | python3 -c "import sys,json; print(json.load(sys.stdin)['id'])" 2>/dev/null) + if [ -z "$RELEASE_ID" ]; then + echo "::warning::Release already exists for tag $TAG — reusing existing release" + RELEASE=$(curl -s "$BASE_URL/releases/tags/$TAG" \ + -H "Authorization: token $DEPLOY_TOKEN") + RELEASE_ID=$(echo "$RELEASE" | python3 -c "import sys,json; print(json.load(sys.stdin)['id'])") + fi + echo "Created release $RELEASE_ID for $TAG"