mirror of
https://codeberg.org/Tilo-K/diff-highlighter.git
synced 2026-07-03 08:13:02 +00:00
fix: add release build
This commit is contained in:
87
.forgejo/workflows/release.yml
Normal file
87
.forgejo/workflows/release.yml
Normal file
@@ -0,0 +1,87 @@
|
||||
name: release
|
||||
|
||||
on:
|
||||
push:
|
||||
tags:
|
||||
- "*"
|
||||
|
||||
permissions:
|
||||
contents: write
|
||||
|
||||
jobs:
|
||||
release:
|
||||
runs-on: codeberg-medium
|
||||
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}"
|
||||
Reference in New Issue
Block a user