Path : onboarding/deploy-taskori-sync
Dernière mise à jour : 2026-05-31
Ce runbook décrit la procédure complète pour publier une nouvelle version de taskori-sync, le client desktop Tauri (Linux, macOS, Windows).
| Remote | URL | Usage |
|---|---|---|
lorva |
gitlab.lorva.dev/taskori/taskori-sync |
Développement, branche master |
github |
github.com/Ops-Lorva/taskori-sync-release |
Releases publiques, tags CI/CD |
CRITIQUE : Les tags ne doivent être poussés que sur
github. Un tag surlorvadéclencherait l'ancienne CI et produirait un build incohérent.
| Plateforme | Durée estimée | Particularité |
|---|---|---|
| Linux | ~11 min | Build standard |
| macOS | ~8 min + 5-10 min | Notarisation Apple incompressible |
| Windows | ~18 min | rust-lld, pas de cache target (optimisations en cours) |
Les trois builds tournent en parallèle. La durée totale est celle du plus long : ~18-28 min.
Tag github vX.Y.Z
→ GitHub Actions (Linux + macOS + Windows en parallèle)
→ Artifacts signés (.deb, .AppImage, .dmg, .msi, .exe)
→ Webhook auto
→ dl.taskori.app pull la release
→ latest.json mis à jour
github.com/Ops-Lorva/taskori-sync-releasegitlab.lorva.dev/taskori/taskori-sync (branche master)lorva et github configurés localement (vérifier avec git remote -v)✅ Les secrets Actions sont gérés par Infisical (source de vérité), plus besoin de les saisir à la main. Dossier Infisical
taskori/sync→ sync automatique versOps-Lorva/taskori-sync-release. Voir Coffre / Secrets — Vaultwarden & Infisical.
En cas de besoin de rotation : modifier la valeur dans Infisical taskori/sync, le sync la repousse. Les valeurs de référence restent aussi dans Vaultwarden / Flatnotes (reference_taskori_sync_updater_keys).
| Secret | Description |
|---|---|
TAURI_SIGNING_PRIVATE_KEY |
Clé minisign pour signer les updates — NE PAS PERDRE (voir Flatnotes) |
APPLE_CERTIFICATE |
Certificat Apple Developer (base64) |
APPLE_CERTIFICATE_PASSWORD |
Mot de passe du certificat |
APPLE_SIGNING_IDENTITY |
Identité de signature (ex: Developer ID Application: ...) |
APPLE_TEAM_ID |
2FBK6988JX |
APPLE_ID |
[email protected] |
APPLE_PASSWORD |
App-specific password Apple (voir Flatnotes) |
Les mots de passe et clés privées ne figurent jamais en clair ici — se référer à Flatnotes pour les valeurs exactes.
cd ~/projects/LORVA/Taskori/taskori-sync
# Vérifier l'état du working tree
git status
git log --oneline -5
S'assurer que master est propre et tous les commits poussés sur lorva.
git push lorva master
Le repo GitHub (github) est le miroir public utilisé pour les releases. Pousser master dessus avant de tagger.
git push github master
Le numéro de version suit SemVer : vMAJEUR.MINEUR.PATCH.
Consulter les tags existants pour éviter les doublons :
git tag --sort=-version:refname | head -10
Ou sur GitHub :
gh release list --repo Ops-Lorva/taskori-sync-release --limit 10
Injection automatique de la version : la CI injecte la version dans les fichiers Tauri via
sedà partir du tag. Il n'est pas nécessaire de modifiertauri.conf.jsonouCargo.tomlmanuellement.
# Remplacer X.Y.Z par le numéro de version cible
VERSION="vX.Y.Z"
git tag "$VERSION"
git push github "$VERSION"
Ne jamais faire
git push lorva "$VERSION"— cela déclencherait l'ancienne CI GitLab.
gh run list --repo Ops-Lorva/taskori-sync-release --limit 5
Ou ouvrir directement dans le navigateur :
https://github.com/Ops-Lorva/taskori-sync-release/actions
Suivre les trois jobs en parallèle :
| Job | Durée typique | Point de surveillance |
|---|---|---|
build-linux |
~11 min | Compilation Rust + packaging .deb/.AppImage |
build-macos |
~8 min build + ~5-10 min notarisation | La notarisation Apple est incompressible |
build-windows |
~18 min | rust-lld sans cache target |
En cas d'échec, consulter les logs du job concerné :
gh run view --repo Ops-Lorva/taskori-sync-release --log-failed
Une fois le pipeline terminé (status completed / success) :
gh release view "$VERSION" --repo Ops-Lorva/taskori-sync-release
S'assurer que les artefacts suivants sont présents :
| Plateforme | Fichiers attendus |
|---|---|
| Linux | .AppImage, .AppImage.sig, .deb |
| macOS | .dmg, .dmg.sig |
| Windows | .msi, .msi.sig, .exe (NSIS), .exe.sig |
| Updater | latest.json |
Le webhook post-build déclenche automatiquement le pull de la release sur dl.taskori.app. Attendre 1-2 minutes après la fin du pipeline, puis vérifier :
curl -s https://dl.taskori.app/latest.json | jq .
La réponse doit contenir la nouvelle version :
{
"version": "X.Y.Z",
"notes": "...",
"pub_date": "2026-...",
"platforms": {
"linux-x86_64": { "url": "...", "signature": "..." },
"darwin-x86_64": { "url": "...", "signature": "..." },
"darwin-aarch64": { "url": "...", "signature": "..." },
"windows-x86_64": { "url": "...", "signature": "..." }
}
}
latest.jsonest servi avecCache-Control: no-store— le contenu est toujours frais, pas de flush Cloudflare nécessaire.
Les URLs des releases (ex: /releases/vX.Y.Z/...) sont nouvelles à chaque version : le cache Cloudflare ne peut pas renvoyer une ancienne version pour une nouvelle URL. Aucune action de purge de cache n'est nécessaire.
Pour tester un téléchargement :
# Récupérer l'URL Linux depuis latest.json
LINUX_URL=$(curl -s https://dl.taskori.app/latest.json | jq -r '.platforms["linux-x86_64"].url')
curl -I "$LINUX_URL"
Le code HTTP doit être 200 (ou 302 redirect).
# CORRECT
git push github vX.Y.Z
# INCORRECT — déclenche l'ancienne CI GitLab
git push lorva vX.Y.Z
git push origin vX.Y.Z # si origin pointe vers lorva
La notarisation Apple (envoi + validation par Apple) prend entre 5 et 10 minutes. C'est une contrainte Apple, non optimisable. Ne pas interrompre le job.
Le build Windows utilise rust-lld sans cache de target. Des optimisations sont en cours. Ne pas s'inquiéter si Windows est le dernier job à terminer.
| Endpoint | Cache Cloudflare | Comportement |
|---|---|---|
/latest.json |
no-store |
Toujours le contenu le plus récent |
/releases/vX.Y.Z/... |
Cache actif | URL unique par version → pas de stale |
Il n'est jamais nécessaire de purger manuellement le cache Cloudflare pour une release normale.
git remote -v
# Doit afficher :
# lorva [email protected]:taskori/taskori-sync.git (fetch)
# lorva [email protected]:taskori/taskori-sync.git (push)
# github [email protected]:Ops-Lorva/taskori-sync-release.git (fetch)
# github [email protected]:Ops-Lorva/taskori-sync-release.git (push)
Si origin ou github pointe vers le mauvais repo, ne pas tagger avant correction.
Si un tag a été poussé par erreur ou si le build échoue et doit être retrypé avec le même numéro de version :
# Supprimer le tag localement
git tag -d vX.Y.Z
# Supprimer le tag sur GitHub
git push github :refs/tags/vX.Y.Z
# Supprimer la release GitHub si elle a été créée
gh release delete vX.Y.Z --repo Ops-Lorva/taskori-sync-release --yes
# Re-tagger après correction
git tag vX.Y.Z
git push github vX.Y.Z
Ne jamais supprimer un tag sur
lorvasi par erreur il y a été poussé — contacter l'équipe pour vérifier l'état de la CI avant toute action.
[ ] git status propre sur master
[ ] git push lorva master
[ ] git push github master
[ ] Numéro de version choisi (SemVer, pas de doublon)
[ ] git tag vX.Y.Z
[ ] git push github vX.Y.Z ← UNIQUEMENT github
[ ] Pipeline GitHub Actions surveillé (3 jobs parallèles)
[ ] gh release view vX.Y.Z — tous les artefacts présents
[ ] curl https://dl.taskori.app/latest.json — version correcte
[ ] Test de téléchargement optionnel (curl -I sur URL release)
| Ressource | Lien |
|---|---|
| Repo dev (GitLab LORVA) | gitlab.lorva.dev/taskori/taskori-sync |
| Repo release (GitHub) | github.com/Ops-Lorva/taskori-sync-release |
| GitHub Actions | github.com/Ops-Lorva/taskori-sync-release/actions |
| CDN releases | https://dl.taskori.app |
| Clés updater (minisign) | Flatnotes — note reference_taskori_sync_updater_keys |
| Secrets Apple + TAURI | Flatnotes — NE PAS PERDRE |
| Note infra sync | Flatnotes — note taskori-sync |