From 9c2b5973972a7c5716ad9251a94350d28da3d4f2 Mon Sep 17 00:00:00 2001 From: Marcus Kida Date: Mon, 6 Jul 2026 18:54:21 +0200 Subject: [PATCH] Add scripts/forgejo-release.sh to publish a release + attach firmware Co-Authored-By: Claude Opus 4.8 (1M context) --- scripts/forgejo-release.sh | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 scripts/forgejo-release.sh diff --git a/scripts/forgejo-release.sh b/scripts/forgejo-release.sh new file mode 100644 index 0000000..ea83752 --- /dev/null +++ b/scripts/forgejo-release.sh @@ -0,0 +1,37 @@ +#!/usr/bin/env bash +# +# Create a Forgejo release for a tag and attach the built firmware binary. +# +# Requires a Forgejo API token in the FORGEJO_TOKEN env var +# (Forgejo -> Settings -> Applications -> Generate New Token, scope: write:repository). +# The release notes are taken from the matching "## " section of CHANGELOG.md. +# +# Usage: FORGEJO_TOKEN=xxxxx scripts/forgejo-release.sh v0.1.0 +# +set -euo pipefail + +TAG="${1:?usage: FORGEJO_TOKEN=... $0 }" +VER="${TAG#v}" +API="https://git.dk1da.de/api/v1/repos/DK1DA/FreeTRX" +BIN="MDUV380_firmware/build/OpenMDUV380.bin" +: "${FORGEJO_TOKEN:?set FORGEJO_TOKEN (Forgejo -> Settings -> Applications, scope write:repository)}" + +cd "$(dirname "${BASH_SOURCE[0]}")/.." +[ -f "$BIN" ] || { echo "Missing $BIN - run ./build-firmware.sh first"; exit 1; } + +# Release body = the CHANGELOG section for this version. +NOTES="$(awk -v v="## ${VER}" '$0==v{f=1} f&&/^## /&&$0!=v{exit} f{print}' CHANGELOG.md)" +[ -n "$NOTES" ] || NOTES="FreeTRX ${TAG}" + +# Create the release (JSON body built safely via python). +BODY="$(python3 -c 'import json,sys; print(json.dumps({"tag_name":sys.argv[1],"name":"FreeTRX "+sys.argv[1],"body":sys.argv[2],"draft":False,"prerelease":False}))' "$TAG" "$NOTES")" +RESP="$(curl -fsS -X POST "$API/releases" -H "Authorization: token $FORGEJO_TOKEN" -H "Content-Type: application/json" -d "$BODY")" +ID="$(printf '%s' "$RESP" | python3 -c 'import json,sys; print(json.load(sys.stdin).get("id",""))')" +[ -n "$ID" ] || { echo "Failed to create release:"; echo "$RESP"; exit 1; } +echo "Created release $TAG (id=$ID)" + +# Attach the firmware binary. +curl -fsS -X POST "$API/releases/$ID/assets?name=OpenMDUV380.bin" \ + -H "Authorization: token $FORGEJO_TOKEN" -F "attachment=@$BIN" >/dev/null +echo "Attached $BIN" +echo "Done -> https://git.dk1da.de/DK1DA/FreeTRX/releases/tag/$TAG"