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
|
# GITEA_BASE, GITEA_OWNER, GITEA_REPO, REPO_DIR
|
||||||
#
|
#
|
||||||
# Aufruf:
|
# Aufruf:
|
||||||
# scripts/release.sh # nutzt die Version aus manifest.json
|
# scripts/release.sh # signiert via ATN, nutzt Version aus manifest.json
|
||||||
# scripts/release.sh 0.9.0 # setzt zuerst diese Version in 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
|
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)"
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||||
|
|
||||||
# .env (falls vorhanden) laden – liefert die Secrets, ohne sie ins Repo zu schreiben.
|
# .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 -----------------------------------------------------------
|
# --- Vorbedingungen -----------------------------------------------------------
|
||||||
need node; need curl; need git
|
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 "$MANIFEST" ] || die "manifest.json nicht gefunden ($MANIFEST). Ggf. REPO_DIR setzen."
|
||||||
[ -f "$UPDATES" ] || die "updates.json nicht gefunden ($UPDATES)."
|
[ -f "$UPDATES" ] || die "updates.json nicht gefunden ($UPDATES)."
|
||||||
|
: "${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_KEY:?ATN_API_KEY fehlt (scripts/.env oder Umgebung)}"
|
||||||
: "${ATN_API_SECRET:?ATN_API_SECRET fehlt}"
|
: "${ATN_API_SECRET:?ATN_API_SECRET fehlt}"
|
||||||
: "${GITEA_TOKEN:?GITEA_TOKEN fehlt}"
|
fi
|
||||||
|
|
||||||
# --- Version setzen / lesen ---------------------------------------------------
|
# --- Version setzen / lesen ---------------------------------------------------
|
||||||
if [ "${1:-}" ]; then
|
if [ "${1:-}" ]; then
|
||||||
@ -86,7 +100,12 @@ echo "Release $VERSION (Add-on $ADDON_ID)"
|
|||||||
echo " Gitea : $GITEA_BASE/$GITEA_OWNER/$GITEA_REPO (Branch $BRANCH)"
|
echo " Gitea : $GITEA_BASE/$GITEA_OWNER/$GITEA_REPO (Branch $BRANCH)"
|
||||||
echo " Asset : $UPDATE_LINK"
|
echo " Asset : $UPDATE_LINK"
|
||||||
|
|
||||||
# --- 1) Signieren (zuerst – schlägt hier fehl, bevor irgendwas gepusht wird) ---
|
# --- 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) …"
|
echo "→ Signiere bei addons.thunderbird.net (unlisted) …"
|
||||||
rm -f "$ARTIFACTS"/*.xpi 2>/dev/null || true
|
rm -f "$ARTIFACTS"/*.xpi 2>/dev/null || true
|
||||||
$WEBEXT sign \
|
$WEBEXT sign \
|
||||||
@ -98,11 +117,11 @@ $WEBEXT sign \
|
|||||||
--artifacts-dir="$ARTIFACTS" \
|
--artifacts-dir="$ARTIFACTS" \
|
||||||
--ignore-files "web-ext-artifacts/**" "scripts/**" "docs/**" "*.md" "*.xpi" \
|
--ignore-files "web-ext-artifacts/**" "scripts/**" "docs/**" "*.md" "*.xpi" \
|
||||||
".git/**" ".gitignore" "*.env" ".env"
|
".git/**" ".gitignore" "*.env" ".env"
|
||||||
|
|
||||||
SIGNED="$(ls -t "$ARTIFACTS"/*.xpi 2>/dev/null | head -1)"
|
SIGNED="$(ls -t "$ARTIFACTS"/*.xpi 2>/dev/null | head -1)"
|
||||||
[ -n "${SIGNED:-}" ] && [ -f "$SIGNED" ] || die "Kein signiertes XPI in $ARTIFACTS gefunden."
|
[ -n "${SIGNED:-}" ] && [ -f "$SIGNED" ] || die "Kein signiertes XPI in $ARTIFACTS gefunden."
|
||||||
cp -f "$SIGNED" "$ARTIFACTS/$XPI_NAME"
|
cp -f "$SIGNED" "$ARTIFACTS/$XPI_NAME"
|
||||||
echo "✓ Signiert: $ARTIFACTS/$XPI_NAME"
|
fi
|
||||||
|
echo "✓ XPI bereit: $ARTIFACTS/$XPI_NAME"
|
||||||
|
|
||||||
# --- 2) updates.json patchen --------------------------------------------------
|
# --- 2) updates.json patchen --------------------------------------------------
|
||||||
node -e 'const fs=require("fs");
|
node -e 'const fs=require("fs");
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user