From 1b15973c9eea0ee67de8893561ddfdbf47fbf876 Mon Sep 17 00:00:00 2001 From: sylyx Date: Wed, 3 Jun 2026 15:50:06 +0200 Subject: [PATCH] =?UTF-8?q?release.sh:=20web-ext=207.x=20f=C3=BCr=20ATN-AP?= =?UTF-8?q?I=20v4=20pinnen=20+=20--xpi-Modus?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - web-ext fest auf 7.x via npx (ab 8.x spricht es nur AMO-v5 → ATN gibt 404) - korrekter Flag --api-url-prefix für ATN-API v4 - neuer --xpi-Modus: bereits signiertes XPI veröffentlichen (Gitea-Release + updates.json + push), ohne erneut zu signieren. Nötig, weil ATN das signierte XPI nicht über die API zurückgibt – Download aus dem ATN-Entwicklerbereich. Co-Authored-By: Claude Opus 4.8 --- scripts/release.sh | 77 +++++++++++++++++++++++++++++----------------- 1 file changed, 48 insertions(+), 29 deletions(-) diff --git a/scripts/release.sh b/scripts/release.sh index cbcf3cf..3b218ca 100755 --- a/scripts/release.sh +++ b/scripts/release.sh @@ -15,11 +15,25 @@ # GITEA_BASE, GITEA_OWNER, GITEA_REPO, REPO_DIR # # Aufruf: -# scripts/release.sh # nutzt die Version aus manifest.json -# scripts/release.sh 0.9.0 # setzt zuerst diese Version in manifest.json +# scripts/release.sh # signiert via ATN, nutzt Version aus manifest.json +# scripts/release.sh 0.9.0 # setzt zuerst diese Version, dann signieren +# scripts/release.sh --xpi # bereits signiertes XPI veröffentlichen +# scripts/release.sh --xpi 0.9.0 +# +# Hinweis ATN: addons.thunderbird.net gibt das signierte XPI nicht zuverlässig über +# die API zurück. In der Praxis: einmal mit dem Skript hochladen (legt die Version an), +# das signierte XPI aus dem ATN-Entwicklerbereich herunterladen, dann mit --xpi +# veröffentlichen. Der --xpi-Modus überspringt das Signieren komplett. # set -euo pipefail +# --- Argumente: optional vorsigniertes XPI (--xpi) -------------------------- +PRESIGNED="" +if [ "${1:-}" = "--xpi" ]; then + PRESIGNED="${2:-}"; shift 2 + [ -n "$PRESIGNED" ] && [ -f "$PRESIGNED" ] || { echo "FEHLER: --xpi braucht eine existierende Datei." >&2; exit 1; } +fi + SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" # .env (falls vorhanden) laden – liefert die Secrets, ohne sie ins Repo zu schreiben. @@ -39,18 +53,18 @@ need() { command -v "$1" >/dev/null 2>&1 || die "'$1' nicht gefunden. Bitte inst # --- Vorbedingungen ----------------------------------------------------------- need node; need curl; need git -# web-ext: global installiert bevorzugen, sonst per npx (kein globales Install nötig). -if command -v web-ext >/dev/null 2>&1; then - WEBEXT="web-ext" -else - need npx - WEBEXT="npx --yes web-ext" -fi [ -f "$MANIFEST" ] || die "manifest.json nicht gefunden ($MANIFEST). Ggf. REPO_DIR setzen." [ -f "$UPDATES" ] || die "updates.json nicht gefunden ($UPDATES)." -: "${ATN_API_KEY:?ATN_API_KEY fehlt (scripts/.env oder Umgebung)}" -: "${ATN_API_SECRET:?ATN_API_SECRET fehlt}" -: "${GITEA_TOKEN:?GITEA_TOKEN fehlt}" +: "${GITEA_TOKEN:?GITEA_TOKEN fehlt (scripts/.env oder Umgebung)}" +if [ -z "$PRESIGNED" ]; then + # web-ext: ATN nutzt die Signing-API v4. Das geht nur mit web-ext 7.x – ab 8.x + # spricht web-ext ausschließlich die AMO-v5-API und ATN antwortet mit 404. + # Daher fest auf 7.x via npx (kein globales Install nötig); per WEBEXT_CMD überschreibbar. + need npx + WEBEXT="${WEBEXT_CMD:-npx --yes web-ext@^7}" + : "${ATN_API_KEY:?ATN_API_KEY fehlt (scripts/.env oder Umgebung)}" + : "${ATN_API_SECRET:?ATN_API_SECRET fehlt}" +fi # --- Version setzen / lesen --------------------------------------------------- if [ "${1:-}" ]; then @@ -86,23 +100,28 @@ echo "Release $VERSION (Add-on $ADDON_ID)" echo " Gitea : $GITEA_BASE/$GITEA_OWNER/$GITEA_REPO (Branch $BRANCH)" echo " Asset : $UPDATE_LINK" -# --- 1) Signieren (zuerst – schlägt hier fehl, bevor irgendwas gepusht wird) --- -echo "→ Signiere bei addons.thunderbird.net (unlisted) …" -rm -f "$ARTIFACTS"/*.xpi 2>/dev/null || true -$WEBEXT sign \ - --channel=unlisted \ - --api-url-prefix="https://addons.thunderbird.net/api/v4" \ - --api-key="$ATN_API_KEY" \ - --api-secret="$ATN_API_SECRET" \ - --source-dir="$REPO_DIR" \ - --artifacts-dir="$ARTIFACTS" \ - --ignore-files "web-ext-artifacts/**" "scripts/**" "docs/**" "*.md" "*.xpi" \ - ".git/**" ".gitignore" "*.env" ".env" - -SIGNED="$(ls -t "$ARTIFACTS"/*.xpi 2>/dev/null | head -1)" -[ -n "${SIGNED:-}" ] && [ -f "$SIGNED" ] || die "Kein signiertes XPI in $ARTIFACTS gefunden." -cp -f "$SIGNED" "$ARTIFACTS/$XPI_NAME" -echo "✓ Signiert: $ARTIFACTS/$XPI_NAME" +# --- 1) XPI besorgen: entweder bereits signiert (--xpi) oder via ATN signieren -- +mkdir -p "$ARTIFACTS" +if [ -n "$PRESIGNED" ]; then + echo "→ Nutze vorsigniertes XPI: $PRESIGNED" + cp -f "$PRESIGNED" "$ARTIFACTS/$XPI_NAME" +else + echo "→ Signiere bei addons.thunderbird.net (unlisted) …" + rm -f "$ARTIFACTS"/*.xpi 2>/dev/null || true + $WEBEXT sign \ + --channel=unlisted \ + --api-url-prefix="https://addons.thunderbird.net/api/v4" \ + --api-key="$ATN_API_KEY" \ + --api-secret="$ATN_API_SECRET" \ + --source-dir="$REPO_DIR" \ + --artifacts-dir="$ARTIFACTS" \ + --ignore-files "web-ext-artifacts/**" "scripts/**" "docs/**" "*.md" "*.xpi" \ + ".git/**" ".gitignore" "*.env" ".env" + SIGNED="$(ls -t "$ARTIFACTS"/*.xpi 2>/dev/null | head -1)" + [ -n "${SIGNED:-}" ] && [ -f "$SIGNED" ] || die "Kein signiertes XPI in $ARTIFACTS gefunden." + cp -f "$SIGNED" "$ARTIFACTS/$XPI_NAME" +fi +echo "✓ XPI bereit: $ARTIFACTS/$XPI_NAME" # --- 2) updates.json patchen -------------------------------------------------- node -e 'const fs=require("fs");