Files
EpicNext-Cms/.gitea/workflows/release.yaml
T
Workflow config file is invalid. Please check your config file: go-yaml load error in scanner (while scanning a simple key) at L49.C1-L51.C1: could not find expected ':'
openhands 15ed8ffbf0
Local Build and Deploy / deploy (push) Successful in 1m23s
fix: generate release changelog from full local repo
Shallow clone (depth 1) only has one commit, so git log was empty.
Now generates changelog from the bare repo before cloning, and uses
Python to build the JSON payload for proper multiline escaping.
2026-07-20 15:11:59 +02:00

93 lines
2.7 KiB
YAML

name: Create Release
on:
push:
tags:
- "v*"
jobs:
release:
runs-on: shell
steps:
- name: Checkout, build & release
env:
VERSION: ${{ gitea.ref_name }}
GITEA_API: ${{ gitea.api_url }}
GITEA_REPO: ${{ gitea.repository }}
run: |
set -e
REPO="/docker/gitea/gitea/git/repositories/remco/epicnext-cms.git"
# ── Generate changelog ────────────────────────────────────────
PREV_TAG="$(git -C "$REPO" tag --sort=-creatordate | head -2 | tail -1 || echo '')"
if [ -n "$PREV_TAG" ]; then
RANGE="${PREV_TAG}..${VERSION}"
git -C "$REPO" log --oneline --no-decorate "${RANGE}" > /tmp/changelog.txt 2>/dev/null || \
git -C "$REPO" log --oneline --no-decorate -30 > /tmp/changelog.txt
else
git -C "$REPO" log --oneline --no-decorate -30 > /tmp/changelog.txt
fi
echo "=== Changelog ==="
cat /tmp/changelog.txt
# ── Build ─────────────────────────────────────────────────────
SRC="/tmp/epicnext-release"
rm -rf "$SRC"
git clone --branch "${VERSION}" --depth 1 "$REPO" "$SRC"
cd "$SRC"
if [ -f /var/www/atom-nexst/.env ]; then
cp /var/www/atom-nexst/.env "$SRC/.env"
fi
pnpm install --frozen-lockfile
pnpm prisma:generate
export SKIP_ENV_VALIDATION=1
pnpm build
# ── Create release (Python handles JSON properly) ─────────────
python3 << 'PYEOF'
import json, os, urllib.request
version = os.environ['VERSION']
api = os.environ['GITEA_API']
repo = os.environ['GITEA_REPO']
token = "${{ secrets.GITEA_TOKEN }}"
with open('/tmp/changelog.txt') as f:
notes = f.read()
body = f"""## EpicNext-CMS {version}
### Changes
{notes}
---
*Automated release from Gitea Actions*
"""
payload = json.dumps({
'tag_name': version,
'name': version,
'body': body,
'draft': False,
'prerelease': False,
}).encode('utf-8')
req = urllib.request.Request(
f'{api}/repos/{repo}/releases',
data=payload,
headers={
'Authorization': f'token {token}',
'Content-Type': 'application/json',
},
method='POST',
)
try:
resp = urllib.request.urlopen(req)
result = json.loads(resp.read().decode('utf-8'))
print(f"Release created: {result.get('html_url', result.get('id', '?'))}")
except urllib.error.HTTPError as e:
print(f"API error {e.code}: {e.read().decode('utf-8')}")
raise
PYEOF