a6ffe05150
- Neuer CI-Job desktop nach test, laeuft auf main und bei Tags v* (Systemabhaengigkeiten,
Rust-Toolchain per rustup, Cargo-Zwischenspeicher, Version setzen, cargo check/clippy,
alte Bundles entfernen, Linux-AppImage bauen, desktop-collect.sh --require linux,
Uebergabe per actions/cache/save mit Schluessel desktop-dist-${{ gitea.sha }})
- publish haengt jetzt an desktop (needs: desktop) statt an test, holt die Pakete per
actions/cache/restore mit fail-on-cache-miss: true und prueft das Manifest hart
- publish-images.sh bricht im echten Baupfad ohne desktop-dist/manifest.json ab
(zweites Netz gegen einen Cache-Fehlschlag, D-08/Pitfall 1)
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
80 lines
2.8 KiB
Bash
Executable File
80 lines
2.8 KiB
Bash
Executable File
#!/bin/sh
|
|
# publish-images.sh -- Abbilder je Auslieferungskanal bauen und veroeffentlichen
|
|
# (quick-260914-ku1).
|
|
#
|
|
# Kanalmodell:
|
|
# refs/heads/main -> Kanal beta, Etiketten beta + latest (latest = Alias, entfaellt spaeter)
|
|
# refs/tags/v* -> Kanal live, Etiketten live + vX.Y.Z
|
|
# alles andere -> nichts zu tun (Exit 0, kein Bau, kein Push)
|
|
#
|
|
# Der Zweig `live` OHNE Tag wird von der Pipeline geprueft, aber nicht veroeffentlicht:
|
|
# auf `live` ist jeder auslieferbare Stand ein Tag. Ein ungetaggter Merge darf das
|
|
# `live`-Etikett nicht ueberschreiben, sonst waere der Tag nicht mehr die Wahrheit.
|
|
#
|
|
# Die Entscheidung haengt allein an GITHUB_REF, damit sie lokal ohne Runner pruefbar ist:
|
|
# GITHUB_REF=refs/tags/v1.2.3 sh .gitea/scripts/publish-images.sh --print-plan
|
|
#
|
|
# Versionsstempel: APP_VERSION aus `git describe --tags --always` (ohne Tag: kurzer SHA),
|
|
# APP_COMMIT, APP_BUILD_TIME -- als --build-arg in beide Dockerfiles. Braucht im Checkout
|
|
# die volle Historie samt Tags (fetch-depth: 0 im Workflow).
|
|
#
|
|
# Dieses Skript kennt kein Secret und gibt keines aus; der Registry-Login bleibt im Workflow.
|
|
#
|
|
# Phase 18 (18-02): Die Desktop-Pakete kommen aus dem vorgeschalteten Job `desktop`
|
|
# und werden per actions/cache als desktop-dist/ uebergeben; das Dockerfile der API
|
|
# kopiert desktop-dist/ ins Abbild. Ohne desktop-dist/manifest.json bricht dieses
|
|
# Skript im echten Baupfad hart ab -- zweites Netz gegen Pitfall 1 (Cache-Fehlschlag),
|
|
# der Workflow selbst prueft es bereits vor diesem Schritt.
|
|
set -eu
|
|
|
|
REGISTRY="${REGISTRY:-localhost:3002/schalli/tessera-ctl}"
|
|
REF="${GITHUB_REF:-}"
|
|
|
|
case "$REF" in
|
|
refs/tags/v*)
|
|
APP_CHANNEL=live
|
|
TAGS="live ${REF#refs/tags/}"
|
|
;;
|
|
refs/heads/main)
|
|
APP_CHANNEL=beta
|
|
TAGS="beta latest"
|
|
;;
|
|
*)
|
|
echo "Kein Veroeffentlichungs-Anlass fuer '$REF' (nur main und Tags v*): nichts zu tun."
|
|
exit 0
|
|
;;
|
|
esac
|
|
|
|
APP_VERSION="$(git describe --tags --always)"
|
|
APP_COMMIT="$(git rev-parse --short HEAD)"
|
|
APP_BUILD_TIME="$(date -u +%Y-%m-%dT%H:%M:%SZ)"
|
|
|
|
echo "Tessera $APP_VERSION ($APP_CHANNEL) $APP_COMMIT $APP_BUILD_TIME -> Etiketten: $TAGS"
|
|
|
|
if [ "${1:-}" = "--print-plan" ]; then
|
|
for IMG in web api; do
|
|
for TAG in $TAGS; do
|
|
echo "push $REGISTRY/$IMG:$TAG"
|
|
done
|
|
done
|
|
exit 0
|
|
fi
|
|
|
|
if [ ! -f desktop-dist/manifest.json ]; then
|
|
echo "desktop-dist/manifest.json fehlt -- kein Abbild ohne Desktop-Pakete (Pitfall 1)." >&2
|
|
exit 1
|
|
fi
|
|
|
|
for IMG in web api; do
|
|
docker build -t "$REGISTRY/$IMG:$APP_CHANNEL" \
|
|
--build-arg APP_VERSION="$APP_VERSION" \
|
|
--build-arg APP_CHANNEL="$APP_CHANNEL" \
|
|
--build-arg APP_COMMIT="$APP_COMMIT" \
|
|
--build-arg APP_BUILD_TIME="$APP_BUILD_TIME" \
|
|
-f "apps/$IMG/Dockerfile" .
|
|
for TAG in $TAGS; do
|
|
docker tag "$REGISTRY/$IMG:$APP_CHANNEL" "$REGISTRY/$IMG:$TAG"
|
|
docker push "$REGISTRY/$IMG:$TAG"
|
|
done
|
|
done
|