ci: Job desktop ueberspringt den Bau, wenn der Desktop-Stand unveraendert ist — Pakete aus dem Zwischenspeicher

- Neues Skript .gitea/scripts/desktop-stamp.sh (Unterbefehle stamp/check):
  Stempel aus Version + letztem Commit an den Desktop-Pfaden, Pruefung eines
  restaurierten desktop-dist/ gegen Manifest, Kanal, Groesse und sha256
- ci.yml Job desktop: stamp -> actions/cache/restore (Stempel-Schluessel,
  nur main) -> check -> 13 Bau-Schritte mit if: steps.reuse.outputs.reuse,
  Stempel-Save vor unveraenderter Uebergabe an publish; quality/test/publish
  und on: unveraendert (js-yaml-Tiefenvergleich gegen 38c1400)

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-09-17 14:26:49 +02:00
parent 29db4c01c0
commit 8c4aaa51fa
2 changed files with 218 additions and 0 deletions
+56
View File
@@ -9,6 +9,11 @@
# in der Pipeline. `tauri.conf.json`/`Cargo.toml` bleiben dabei immer rein
# numerisch (X.Y.Z), weil NSIS' Windows-Ressourcenfelder das verlangen; die
# Beta-Kennzeichnung lebt ausschliesslich im Dateinamen-Suffix.
# quick-260917-jdh: Job `desktop` ueberspringt den Bau auf `main`, wenn zum
# Stempel (Version aus dem letzten Freigabe-Tag + letzter Commit an den
# Desktop-Pfaden, siehe .gitea/scripts/desktop-stamp.sh) bereits fertige
# Pakete im Zwischenspeicher des Runners liegen; Tags v* bauen immer neu;
# `publish` bleibt unveraendert.
name: Tessera CI/CD
on:
@@ -78,17 +83,46 @@ jobs:
with:
fetch-depth: 0
# Die folgenden drei Schritte stehen bewusst vor setup-node/apt/rustup:
# Sie sollen beim Ueberspringen (Desktop-Stand unveraendert) gar nicht
# erst die teuren Werkzeuge installieren (quick-260917-jdh).
- name: Desktop-Stempel berechnen
id: stamp
run: sh .gitea/scripts/desktop-stamp.sh stamp
- name: Fertige Pakete zum Stempel suchen
id: stamp-cache
if: steps.stamp.outputs.skip_allowed == 'true'
uses: actions/cache/restore@v4
with:
path: desktop-dist
key: desktop-dist-stamp-${{ steps.stamp.outputs.stamp }}
# Bewusst OHNE restore-keys: act_runner sucht auch zum Hauptschluessel
# per Praefix -- ein aelterer Stand darf nie als Treffer gelten.
- name: Gefundene Pakete pruefen
id: reuse
env:
CACHE_HIT: ${{ steps.stamp-cache.outputs.cache-hit }}
STAMP_VERSION: ${{ steps.stamp.outputs.version }}
STAMP_SHA7: ${{ steps.stamp.outputs.sha7 }}
run: sh .gitea/scripts/desktop-stamp.sh check
- uses: actions/setup-node@v4
if: steps.reuse.outputs.reuse != 'true'
with:
node-version: 24
- name: Enable pnpm via corepack
if: steps.reuse.outputs.reuse != 'true'
run: corepack enable && corepack prepare pnpm@9.15.0 --activate
- name: Install dependencies
if: steps.reuse.outputs.reuse != 'true'
run: pnpm install --frozen-lockfile
- name: Systemabhaengigkeiten
if: steps.reuse.outputs.reuse != 'true'
run: |
sudo apt-get update
sudo apt-get install -y --no-install-recommends \
@@ -98,12 +132,14 @@ jobs:
lld llvm clang nsis
- name: Rust-Toolchain
if: steps.reuse.outputs.reuse != 'true'
run: |
curl -sSf https://sh.rustup.rs | sh -s -- -y --profile minimal --default-toolchain stable
echo "$HOME/.cargo/bin" >> "$GITHUB_PATH"
"$HOME/.cargo/bin/rustup" component add clippy
- name: Cargo-Zwischenspeicher
if: steps.reuse.outputs.reuse != 'true'
uses: actions/cache@v4
with:
path: |
@@ -118,33 +154,53 @@ jobs:
restore-keys: desktop-cargo-
- name: Windows-Werkzeuge
if: steps.reuse.outputs.reuse != 'true'
run: |
rustup target add x86_64-pc-windows-msvc
command -v cargo-xwin >/dev/null 2>&1 || cargo install --locked cargo-xwin
- name: Version setzen
if: steps.reuse.outputs.reuse != 'true'
run: sh .gitea/scripts/desktop-version.sh
- name: Rust pruefen
if: steps.reuse.outputs.reuse != 'true'
working-directory: apps/desktop/src-tauri
run: |
cargo check
cargo clippy
- name: Alte Bundles entfernen
if: steps.reuse.outputs.reuse != 'true'
run: |
rm -rf apps/desktop/src-tauri/target/release/bundle
rm -rf apps/desktop/src-tauri/target/x86_64-pc-windows-msvc/release/bundle
- name: Linux-AppImage bauen
if: steps.reuse.outputs.reuse != 'true'
run: pnpm --filter @tessera/desktop exec tauri build --bundles appimage
- name: Windows-Installer bauen (Cross-Bau)
if: steps.reuse.outputs.reuse != 'true'
run: pnpm --filter @tessera/desktop exec tauri build --runner cargo-xwin --target x86_64-pc-windows-msvc --bundles nsis
- name: Pakete einsammeln
if: steps.reuse.outputs.reuse != 'true'
run: sh .gitea/scripts/desktop-collect.sh --require linux,windows
- name: Pakete unter dem Stempel ablegen
# Nur nach echtem Bau und nur auf main -- Tag-Pakete tragen keinen
# Beta-Suffix und duerfen nie unter einem Stempel liegen. Ein bereits
# vorhandener Schluessel loest bei actions/cache/save nur eine Info
# aus, keinen Fehler.
if: steps.reuse.outputs.reuse != 'true' && steps.stamp.outputs.skip_allowed == 'true'
uses: actions/cache/save@v4
with:
path: desktop-dist
key: desktop-dist-stamp-${{ steps.stamp.outputs.stamp }}
# Laeuft in beiden Faellen: im Skip-Fall sichert er den restaurierten
# Stand unter dem neuen SHA, deshalb muss `publish` nichts wissen.
- name: Uebergabe an publish
uses: actions/cache/save@v4
with: