Local Build and Deploy / deploy (push) Successful in 1m23s
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.
93 lines
2.7 KiB
YAML
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
|