Manifeste fuer die Distributionskanaele von l8db. Das Publizieren ist bewusst manuell - hier liegen nur die Vorlagen, die pro Release aktualisiert und in das jeweilige Zielrepo kopiert werden.
| Kanal | Datei(en) | Artefakt | Zielrepo |
|---|---|---|---|
| Homebrew (macOS) | homebrew/l8db.rb |
l8db_<version>_universal.dmg |
Leon-Achteresch/homebrew-tap |
| winget (Windows) | winget/*.yaml |
l8db_<version>_x64_en-US.msi |
microsoft/winget-pkgs (PR) |
| AUR (Arch Linux) | aur/PKGBUILD, aur/.SRCINFO |
l8db_<version>_amd64.deb |
aur.archlinux.org/l8db-bin.git |
| Flatpak (Linux) | flatpak/com.leon.l8db.yml |
l8db_<version>_amd64.deb |
flathub/com.leon.l8db (PR) |
src-tauri/tauri.conf.json:productName: "l8db",identifier: "com.leon.l8db",bundle.targets: "all",createUpdaterArtifacts: true..github/workflows/release.yml: Tagsv<version>, Release-Namel8db v<version>, Matrixmacos-15mituniversal-apple-darwin,windows-2025mitx86_64-pc-windows-msvcundubuntu-22.04mitx86_64-unknown-linux-gnu. Die stabile SemVer-Version steht vor dem Build im gemergten Release-PR.- Tauri-Namensschema daraus:
- macOS:
l8db_<version>_universal.dmg(plusl8db.appim DMG) - Windows:
l8db_<version>_x64_en-US.msi(WiX) undl8db_<version>_x64-setup.exe(NSIS) - Linux:
l8db_<version>_amd64.deb,l8db_<version>_amd64.AppImage
- macOS:
- Updater: Der finale Verifikationsjob erzeugt
latest.jsoneinmal aus den geprueften Signaturen. Der Windows-Eintrag zeigt auf das NSIS-Setup.latest.jsonist nur fuer den In-App-Updater, nicht fuer diese Kanaele.
Die exakten Namen vor dem ersten Publizieren einmal gegen ein echtes Release pruefen:
gh release view v0.1.x --repo Leon-Achteresch/l8db --json assets --jq '.assets[].name'
Alle Manifeste enthalten 000...0-Platzhalter (64 Nullen). Sie muessen pro Release durch die
echten Hashes ersetzt werden.
Ohne Download, direkt aus den Release-Metadaten (GitHub liefert seit 2025 pro Asset ein
digest-Feld):
gh api repos/Leon-Achteresch/l8db/releases/tags/v0.1.7 \
--jq '.assets[] | "\(.digest // "kein digest") \(.name)"'Mit Download (immer moeglich, unabhaengig vom digest-Feld):
gh release download v0.1.7 --repo Leon-Achteresch/l8db --dir /tmp/l8db-0.1.7
shasum -a 256 /tmp/l8db-0.1.7/* # macOS
sha256sum /tmp/l8db-0.1.7/* # Linux
certutil -hashfile l8db_0.1.7_x64_en-US.msi SHA256 # WindowsAutomatisch patchen (siehe unten): scripts/update-packaging.mjs.
| Datei | Felder |
|---|---|
homebrew/l8db.rb |
version, sha256 (DMG) |
winget/LeonAchteresch.l8db.yaml |
PackageVersion |
winget/LeonAchteresch.l8db.installer.yaml |
PackageVersion, InstallerUrl, InstallerSha256, ReleaseDate, ggf. ProductCode |
winget/LeonAchteresch.l8db.locale.en-US.yaml |
PackageVersion, ReleaseNotesUrl |
aur/PKGBUILD |
pkgver, pkgrel=1, sha256sums (deb + LICENSE) |
aur/.SRCINFO |
wird aus dem PKGBUILD generiert |
flatpak/com.leon.l8db.yml |
url und sha256 der deb-Quelle |
Einmalig: Repo Leon-Achteresch/homebrew-tap anlegen (der Name muss mit homebrew- beginnen)
mit Ordner Casks/.
Pro Release:
# 1. Version/sha256 aktualisieren (manuell oder per Script)
node scripts/update-packaging.mjs --release release.json --metadata release-metadata.json
# 2. In den Tap kopieren
cp packaging/homebrew/l8db.rb ../homebrew-tap/Casks/l8db.rb
# 3. Lokal pruefen
brew audit --cask --new ../homebrew-tap/Casks/l8db.rb
brew style ../homebrew-tap/Casks/l8db.rb
brew install --cask ../homebrew-tap/Casks/l8db.rb
brew uninstall --cask l8db
# 4. Committen und pushenEndnutzer: brew tap Leon-Achteresch/tap && brew install --cask l8db
Mit Homebrew 6 muss ein Cask aus einem Drittanbieter-Tap vor der Installation
einmal vertraut werden: brew trust --cask Leon-Achteresch/tap/l8db.
Hinweise:
sha256 :no_checkist als Uebergang moeglich (im Cask dokumentiert), deaktiviert aber die Integritaetspruefung. Nur im eigenen Tap, nie fuer homebrew/cask.- Der Release-Prozess signiert und notarisiert die App und prueft das DMG mit Gatekeeper. Das Cask entfernt das Quarantaene-Attribut nicht.
- Ein Eintrag in
homebrew/homebrew-caskselbst verlangt zusaetzlich eine gewisse Projekt-Reichweite (Sterne/Alter) - der eigene Tap ist der realistische Weg.
Voraussetzung: Microsoft-Konto mit GitHub-Fork von microsoft/winget-pkgs, optional
wingetcreate (winget install Microsoft.WingetCreate).
Bequemer Weg (erzeugt und validiert die Manifeste selbst, laedt das MSI und rechnet den Hash):
wingetcreate update LeonAchteresch.l8db --version 0.1.7 `
--urls https://github.com/Leon-Achteresch/l8db/releases/download/v0.1.7/l8db_0.1.7_x64_en-US.msi `
--submit --token <github-pat>Manueller Weg mit den Manifesten aus diesem Ordner:
# 1. Fork klonen, Zielordner anlegen
# manifests/l/LeonAchteresch/l8db/0.1.7/
# 2. Die drei YAMLs hineinkopieren und Version/URL/Hash setzen
# 3. Validieren und lokal testen
winget validate --manifest manifests\l\LeonAchteresch\l8db\0.1.7
winget install --manifest manifests\l\LeonAchteresch\l8db\0.1.7
# 4. Branch pushen und PR gegen microsoft/winget-pkgs oeffnenHinweise:
- Der erste PR erfordert zusaetzlich das
version-Manifest; danach reicht pro Release ein neuer Versionsordner - alte Versionsordner bleiben stehen. - Der Release-Prozess liest
ProductCodeaus dem gebauten MSI; das Hilfsscript uebernimmt ihn in das Installer-Manifest, damit winget das installierte Paket erkennt. - Die Bundles sind nicht codesigniert. Die automatische Validierung von winget-pkgs meldet das (SmartScreen/Defender-Warnungen), blockiert aber nicht zwingend.
Voraussetzung: AUR-Konto mit hinterlegtem SSH-Key, base-devel, pacman-contrib (fuer
updpkgsums), namcap.
git clone ssh://aur@aur.archlinux.org/l8db-bin.git
cp packaging/aur/PKGBUILD l8db-bin/
cd l8db-bin
# Version setzen, Hashes ziehen, .SRCINFO regenerieren
updpkgsums
makepkg --printsrcinfo > .SRCINFO
# Bauen und pruefen
makepkg -si
namcap PKGBUILD
namcap l8db-bin-*.pkg.tar.zst
git add PKGBUILD .SRCINFO
git commit -m "upgpkg: l8db-bin 0.1.7-1"
git pushHinweise:
- Paketname ist
l8db-bin, weil ein Binaerartefakt installiert wird (AUR-Konvention). .SRCINFOniemals von Hand pflegen, immermakepkg --printsrcinfo- der Server lehnt einen Push mit abweichender.SRCINFOab.- Quelle ist bewusst das
.debund nicht das AppImage (Begruendung steht im PKGBUILD). dependssind aussrc-tauri/Cargo.lockabgeleitet (webkit2gtk-4.1, libsecret fuerkeyring). Nach dem ersten echten Build mitnamcapgegenpruefen und korrigieren.
Lokal bauen und testen (auf einem Linux-Rechner):
flatpak install -y flathub org.gnome.Platform//47 org.gnome.Sdk//47
flatpak install -y flathub org.flatpak.Builder
flatpak run org.flatpak.Builder --user --install --force-clean \
build-dir packaging/flatpak/com.leon.l8db.yml
flatpak run com.leon.l8dbSubmission:
com.leon.l8db.metainfo.xml(AppStream, inkl. Screenshots und<releases>) schreiben - ohne die Datei ist eine Submission chancenlos.- Fork von
flathub/flathub, Branchnew-pr, darin nurcom.leon.l8db.yml(+ metainfo, + evtl. Offline-Sources) ablegen. - PR gegen
flathub/flathub, Branchnew-proeffnen. Der Bot baut und lintet. - Nach Freigabe wird
flathub/com.leon.l8dbangelegt; ab dann laeuft jedes Release ueber einen PR/Push in dieses Repo (Version + sha256 anpassen).
scripts/update-packaging.mjs aktualisiert alle Vorlagen gemeinsam. Der unabhängige Workflow Release follow-up erzeugt nach einer verifizierten App-Veröffentlichung einen PR von automation/packaging nach main. Das Script benötigt die vom neuen Release-Prozess erzeugte release-metadata.json. Sie enthält geprüfte Artefakt-Hashes, den LICENSE-Hash und den tatsächlichen MSI ProductCode.
gh api repos/Leon-Achteresch/l8db/releases/tags/v0.8.25 > /tmp/l8db-release.json
gh release download v0.8.25 --repo Leon-Achteresch/l8db \
--pattern release-metadata.json --dir /tmp/l8db-packaging
node scripts/update-packaging.mjs --release /tmp/l8db-release.json \
--metadata /tmp/l8db-packaging/release-metadata.json --dry-runDie Version im Beispiel durch den gewünschten neuen Release ersetzen. Ohne --dry-run werden die vorbereiteten Änderungen geschrieben. Releases vor der Einführung dieses Prozesses besitzen noch keine release-metadata.json.
Fehlende Installer, ungültige oder widersprüchliche Hashes, fremde Download-URLs, ein falscher LICENSE-Hash, ein fehlender MSI ProductCode oder eine unvollständige Vorlage lassen das Script vor jeder Dateiveränderung fehlschlagen. Es gibt keinen Fallback auf alte Hashes. Bei lokalen Artefakten können --artifacts beziehungsweise --checksums die Hashes liefern; sie müssen weiterhin zu den Release-Metadaten passen. --license-file akzeptiert die lokale LICENSE des Tags und prüft ihren Hash.
Die Vorlagen im Repository werden nicht automatisch in Homebrew-Tap, winget-pkgs, AUR oder Flathub veröffentlicht. Die Schritte zur externen Einreichung oben bleiben gültig. Der Flatpak-Eintrag bleibt bis zur Behebung der dort beschriebenen offenen Punkte eine Vorlage.