mirror of
https://codeberg.org/Tilo-K/diff-highlighter.git
synced 2026-07-03 16:23:02 +00:00
89 lines
2.9 KiB
YAML
89 lines
2.9 KiB
YAML
name: release
|
|
|
|
on:
|
|
push:
|
|
tags:
|
|
- "*"
|
|
|
|
permissions:
|
|
contents: write
|
|
|
|
jobs:
|
|
release:
|
|
runs-on: self-hosted-x64
|
|
|
|
container:
|
|
image: node:22-bookworm
|
|
steps:
|
|
- uses: https://data.forgejo.org/actions/checkout@v4
|
|
with:
|
|
fetch-depth: 0
|
|
|
|
- name: Verify tag is on main
|
|
run: |
|
|
set -euo pipefail
|
|
git fetch origin main
|
|
tag_commit="$(git rev-list -n 1 "$GITHUB_REF_NAME")"
|
|
git merge-base --is-ancestor "$tag_commit" origin/main
|
|
|
|
- name: Install release tools
|
|
run: |
|
|
apt-get update
|
|
apt-get install -y --no-install-recommends ca-certificates curl zip
|
|
|
|
- run: npm ci
|
|
- run: npm run build
|
|
|
|
- name: Zip dist
|
|
run: zip -r "diff-highlighter-${GITHUB_REF_NAME}.zip" dist
|
|
|
|
- name: Generate release notes
|
|
env:
|
|
API_URL: ${{ github.server_url }}/api/v1
|
|
REPOSITORY: ${{ github.repository }}
|
|
TAG_NAME: ${{ github.ref_name }}
|
|
TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
run: |
|
|
set -euo pipefail
|
|
|
|
curl --fail-with-body -sS \
|
|
-H "Authorization: token ${TOKEN}" \
|
|
"${API_URL}/repos/${REPOSITORY}/releases?limit=1" \
|
|
-o releases.json
|
|
|
|
previous_tag="$(node -e "const fs = require('fs'); const releases = JSON.parse(fs.readFileSync('releases.json', 'utf8')); console.log(releases[0]?.tag_name ?? '')")"
|
|
|
|
if [ -n "${previous_tag}" ] && git rev-parse --verify --quiet "${previous_tag}^{commit}" >/dev/null; then
|
|
git log --format='- %s' -n 20 "${previous_tag}..${TAG_NAME}" > release-notes.md
|
|
else
|
|
git log --format='- %s' -n 20 "${TAG_NAME}" > release-notes.md
|
|
fi
|
|
|
|
- name: Create Forgejo release
|
|
env:
|
|
API_URL: ${{ github.server_url }}/api/v1
|
|
REPOSITORY: ${{ github.repository }}
|
|
TAG_NAME: ${{ github.ref_name }}
|
|
TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
run: |
|
|
set -euo pipefail
|
|
asset="diff-highlighter-${TAG_NAME}.zip"
|
|
|
|
node -e "const fs = require('fs'); const payload = { tag_name: process.env.TAG_NAME, name: process.env.TAG_NAME, body: fs.readFileSync('release-notes.md', 'utf8').trim() }; fs.writeFileSync('release.json.payload', JSON.stringify(payload));"
|
|
|
|
curl --fail-with-body -sS \
|
|
-H "Authorization: token ${TOKEN}" \
|
|
-H "Content-Type: application/json" \
|
|
-X POST \
|
|
-d @release.json.payload \
|
|
"${API_URL}/repos/${REPOSITORY}/releases" \
|
|
-o release.json
|
|
|
|
release_id="$(node -e "const fs = require('fs'); console.log(JSON.parse(fs.readFileSync('release.json', 'utf8')).id)")"
|
|
|
|
curl --fail-with-body -sS \
|
|
-H "Authorization: token ${TOKEN}" \
|
|
-X POST \
|
|
-F "attachment=@${asset}" \
|
|
"${API_URL}/repos/${REPOSITORY}/releases/${release_id}/assets?name=${asset}"
|