release.sh: web-ext 7.x für ATN-API v4 pinnen + --xpi-Modus
- 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 <noreply@anthropic.com>
This commit is contained in:
parent
0ca212dd4c
commit
1b15973c9e
@ -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 <datei.xpi> # bereits signiertes XPI veröffentlichen
|
||||
# scripts/release.sh --xpi <datei.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,10 +100,15 @@ 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 \
|
||||
# --- 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" \
|
||||
@ -98,11 +117,11 @@ $WEBEXT sign \
|
||||
--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"
|
||||
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");
|
||||
|
||||
Loading…
Reference in New Issue
Block a user