Path : onboarding/deploy-klibri
Audience : Développeurs LORVA
Dernière mise à jour : 2026-05-29
| Plateforme | Repo | Branche | Distribution |
|---|---|---|---|
| iOS (Swift/SwiftUI) | gitlab.lorva.dev/lorva/klibri-ios |
master (direct) |
App Store Connect → TestFlight / App Store |
| Android (Kotlin/Compose) | gitlab.lorva.dev/lorva/klibri-android |
master (direct) |
Google Play Console (AAB signé) |
Règle absolue — pas de branches. Tous les commits vont directement sur
master. Pas de PR, pas de feature branches, pas de merge requests.
lorva pointant sur gitlab.lorva.devklibri-demo.btjp.fr (apiKey dans Flatnotes, note reference_kavita_demo)Ne jamais écrire de mots de passe ou tokens en clair dans le code ou le wiki.
| Secret | Où le trouver |
|---|---|
| Apple ID / App Store Connect | Flatnotes → section iOS |
| Google Play signing keystore | Flatnotes → section Android |
| GitLab token (lorva.dev) | Flatnotes → reference_lorva_secrets ou variables CI/CD GitLab |
| Kavita demo apiKey | Flatnotes → reference_kavita_demo |
| Clés minisign Tauri (si partagé) | Flatnotes → reference_taskori_sync_updater_keys |
CHANGELOG.md à la racine du repo.## [1.x.y] - 2026-MM-DD
### Ajouté
- Description des nouvelles fonctionnalités
### Corrigé
- Description des bugs corrigés
### Modifié
- Description des changements de comportement
git add CHANGELOG.md
git commit -m "chore: update CHANGELOG for v1.x.y"
git push lorva master
Klibri).| Champ | Valeur |
|---|---|
| Version | 1.x.y (ex: 1.0.5) |
| Build | Incrémenter (ex: 42) |
git add Klibri.xcodeproj/project.pbxproj
git commit -m "chore: bump version to 1.x.y (build 42)"
git push lorva master
git tag v1.x.y
git push lorva v1.x.y
Le tag doit correspondre exactement à la version affichée dans Xcode.
Pourquoi c'est obligatoire : Le site
lorva.devconsomme l'API GitLab pour afficher les release notes de Klibri en temps réel. Sans Release GitLab, la page du produit n'affichera pas la dernière version.
Via l'interface GitLab :
gitlab.lorva.dev/lorva/klibri-ios → Deployments → Releases.| Champ | Valeur |
|---|---|
| Tag name | v1.x.y (le tag créé à l'étape 3) |
| Release title | Klibri iOS v1.x.y |
| Release notes | Copier-coller le contenu du CHANGELOG pour cette version |
Via la CLI glab (alternative) :
glab release create v1.x.y \
--name "Klibri iOS v1.x.y" \
--notes-file CHANGELOG_CURRENT.md \
--repo gitlab.lorva.dev/lorva/klibri-ios
Klibri et la destination Any iOS Device (arm64).# Vérifier que le tag est présent sur lorva
git ls-remote lorva --tags | grep v1.x.y
# Vérifier la Release GitLab via API
curl -s "https://gitlab.lorva.dev/api/v4/projects/<PROJECT_ID>/releases/v1.x.y" \
-H "PRIVATE-TOKEN: <voir Flatnotes>" | jq '.name,.description'
gitlab.lorva.devlorva.dev/klibri affiche la bonne version@EnvironmentObject dans les modalsJAMAIS utiliser
@EnvironmentObjectdans une vue présentée viafullScreenCoverousheet.
Pourquoi : SwiftUI crée un nouveau contexte d'environnement pour les modals présentées via fullScreenCover/sheet. L'@EnvironmentObject n'est pas propagé automatiquement, ce qui provoque un crash au runtime (Fatal error: No ObservableObject of type X found).
Pattern interdit :
// INTERDIT — crash garanti
.fullScreenCover(isPresented: $showReader) {
ReaderView() // utilise @EnvironmentObject en interne
}
Pattern correct — init param :
// Passer explicitement via init
.fullScreenCover(isPresented: $showReader) {
ReaderView(viewModel: self.viewModel)
}
Pattern correct — singleton :
// Utiliser un singleton observable partagé
.fullScreenCover(isPresented: $showReader) {
ReaderView(store: AppStore.shared)
}
Même procédure que iOS — ajouter une section dans CHANGELOG.md :
git add CHANGELOG.md
git commit -m "chore: update CHANGELOG for v1.x.y"
git push lorva master
Ouvrir app/build.gradle (ou app/build.gradle.kts) :
android {
defaultConfig {
versionCode = 42 // Incrémenter à chaque release
versionName = "1.x.y" // Version lisible
}
}
Committer :
git add app/build.gradle.kts
git commit -m "chore: bump version to 1.x.y (versionCode 42)"
git push lorva master
git tag v1.x.y
git push lorva v1.x.y
Même raison que iOS : lorva.dev lit les releases depuis l'API GitLab.
Via l'interface GitLab :
gitlab.lorva.dev/lorva/klibri-android → Deployments → Releases.| Champ | Valeur |
|---|---|
| Tag name | v1.x.y |
| Release title | Klibri Android v1.x.y |
| Release notes | Contenu du CHANGELOG pour cette version |
app/release/app-release.aab.app-release.aab.# Vérifier tag sur lorva
git ls-remote lorva --tags | grep v1.x.y
# Vérifier Release GitLab
curl -s "https://gitlab.lorva.dev/api/v4/projects/<PROJECT_ID>/releases/v1.x.y" \
-H "PRIVATE-TOKEN: <voir Flatnotes>" | jq '.name,.description'
gitlab.lorva.devlorva.dev/klibri affiche la bonne versionmaster pushé sur lorvavX.Y.Z créé et pushélorva.dev/klibri → bonne version affichéeversionCode et versionName bumpés dans build.gradle.ktsmaster pushé sur lorvavX.Y.Z créé et pushélorva.dev/klibri → bonne version affichéeLe serveur Kavita de démonstration klibri-demo.btjp.fr est utilisé pour :
L'apiKey se trouve dans Flatnotes → reference_kavita_demo.
| Ressource | Lien |
|---|---|
| Procédure release iOS (détail) | Flatnotes → project_klibri_release_process |
| État projet iOS | Flatnotes → project_kavitareader |
| Collections iOS | Flatnotes → project_klibri_ios_collections |
| État projet Android | Flatnotes → project_klibri_android |
| Kavita demo | Flatnotes → reference_kavita_demo |
| Secrets lorva | Flatnotes → reference_lorva_secrets |