Tâches (Taskfile)
Les commandes de développement, de génération, de test et d'audit
Toutes les commandes passent par Task. task --list affiche la liste
complète avec leur description ; cette page regroupe les plus utiles.
Workspace JS
Le front, son client d'API et ce site forment un workspace pnpm de trois paquets
(pnpm-workspace.yaml) : @proxy-auth-k8s/front (apps/front), @proxy-auth-k8s/front-api
(libs/front/front-api, consommé en source) et @proxy-auth-k8s/docs (docs). Un seul
pnpm install à la racine installe les trois, avec un seul lockfile. Chaque paquet expose les
mêmes noms de scripts (dev, build, typecheck, test, lint) ; les tâches js:* les
lancent partout avec pnpm -r --if-present. Rien n'est hoisté : un paquet doit déclarer ce
qu'il importe.
Une version doit être publiée depuis 25 heures pour être installée (minimumReleaseAge), et
seuls les paquets listés dans allowBuilds exécutent leurs scripts d'installation.
Après la migration depuis Yarn et NX : supprimez node_modules et docs/node_modules, puis
lancez task init.
Lancer le projet
| Tâche | Effet |
|---|---|
task init | Prépare le projet (outils mise, plugins Claude, cargo-set-version, cargo-machete, pnpm install) |
task service | Démarre les services de dev en compose (Redis, Authelia/Keycloak, Traefik, OTel...) via Docker ou Podman ; init:service génère leurs clés |
task back | Lance le serveur (back:tls derrière un terminateur TLS) |
task front:dev | Lance le dashboard en mode dev (front:dev:tls avec TLS) |
task aio | Back + front ensemble |
task docs:dev | Lance ce site de documentation en local (docs:build le construit) |
task cli -- <args> | Lance le plugin kubectl (cli:login, cli:get-token) |
task tmux:dev | Session tmux avec tous les logs de dev (tmux:kill pour l'arrêter) |
Clusters de test
| Tâche | Effet |
|---|---|
task k3d:create | Crée le cluster k3d local (certificats, CRD, kubeconfigs) |
task k3d:start / k3d:stop | Redémarre / arrête le cluster existant ; k3d:delete le détruit |
task k3d:k -- <args> | kubectl direct ; k3d:k-proxy via ProxyAuthK8S, k3d:k-oidc en OIDC |
task k3d:k9s* | k9s direct, via le proxy ou avec un service account |
task talos:up / talos:down | Cluster Talos local (mêmes raccourcis talos:k*, talos:k9s) |
task lab:* | Raccourcis vers le cluster de lab |
Tests
Les couches de test, leurs commandes et leurs règles sont dans Tests :
task test:unit (sans Redis), task test:all (avec), task envtest:run, la couverture et les
garde-fous.
Contre un vrai cluster (k3d, Dex, chart, images construites depuis l'arbre) : task it:up
puis task it:test, voir Suite d'intégration.
Génération
| Tâche | Effet |
|---|---|
task recu | Lance toutes les générations ci-dessous |
task gen:crds-file | Régénère deploy/crds.yaml et le chart des CRD |
task gen:swagger-file | Régénère swagger.json (et sa copie dans docs) |
task gen:client | Régénère les clients API : TypeScript (front-api) et Rust (client_api) |
task docs:api | Régénère les pages de référence API depuis swagger.json |
task docs:crds | Régénère la référence CRD depuis deploy/crd/ (weebo-crd-docs) |
task gen:api-lint | Lint du spec OpenAPI avec Spectral |
task gen:tls* | Certificats auto-signés de dev (mkcert) |
Après une modification d'API : task gen:swagger-file && task gen:client && task docs:api.
Qualité, sécurité, dépendances
| Tâche | Effet |
|---|---|
task lint | Tous les linters : rust:lint (fmt, clippy --all-targets), repo:lint (actionlint, hadolint), lint:helm, js:lint (avec pnpm peers check), fuzz:check |
task js:ci | Typecheck, tests et build de tous les paquets JS (js:lint, js:test…) |
task audit | Audit : rust:audit (cargo deny selon deny.toml, trivy fs), audit:fuzz, audit:js (pnpm audit), repo:audit (trivy config sur les Containerfiles) |
task audit:image | Construit les images server et front (IMAGE=server pour une seule) et les scanne avec trivy image (HIGH/CRITICAL avec correctif). Hors de task audit : trop lent pour les hooks |
task tool:upgrade | Met à jour les dépendances dans les majeures actuelles (Rust, front, docs) |
task bump | Incrémente la version (voir Préparer une version) |
task rust:doctor | Vérifie les prérequis envtest (Go, libclang, binaires du control plane) |
task template:* | Synchronise le projet avec son template (diff, fetch, sync) |
Tâches du kit
Une partie des tâches vient de
weebo-operator-kit, comme le paquet de
ce site (@weebo/operator-docs). Le dépôt est épinglé sur une release du kit : KIT_TAG
dans Taskfile.yaml.
| Tâche / fichier | D'où vient-il |
|---|---|
rust:* | tasks/rust.yaml du kit, inclus à distance (rust:lint, rust:audit…) |
repo:* | tasks/repo.yaml du kit, inclus à distance (repo:lint, repo:audit) |
kit:* | .tasks/kit.yaml, copie de templates/kit.yaml du kit, avec NPM_CLIENT=pnpm |
docs/package.json | @weebo/operator-docs, tarball de la release du kit, intégrité dans pnpm-lock.yaml |
Les includes distants portent un checksum: sha256 : Task refuse de charger un fichier dont
le contenu a changé sous le même tag (The checksum of the Taskfile … does not match!), et
plus aucune tâche ne se lance. Task garde les fichiers en cache ; task --offline rust:lint
fonctionne sans réseau.
Passer à une nouvelle release du kit
task kit-sync TAG=vX.Y.Zkit-sync lance kit:sync, qui met à jour KIT_TAG, les URLs et les checksums des
includes, .tasks/kit.yaml, la tarball de docs/package.json et pnpm-lock.yaml, puis
restaure le cog.toml du dépôt et réinstalle les hooks. Ne lancez pas kit:sync ni
kit:cog seuls : ils remplacent cog.toml par celui du kit, dont le hook de pré-commit
lance task test (Redis requis) et task audit à chaque commit et perd les vérifications
de .hooks/pre-commit.sh.
Ensuite : relire le diff (un checksum qui change veut dire que le contenu de rust.yaml ou
repo.yaml a changé, à lire avant de commiter), lancer task docs:crds puis task lint
et task audit.
Ce qui n'est pas repris du kit
La CI réutilisable checks.yml (pas de Redis : les workflows du dépôt appellent
task rust:* et task repo:*), le chart lib et helm:crds, rust:coverage (le gate
coverage:ci du dépôt reste), le CrdForm (remplacé par ProxyKubeApiGenerator) et les
crates weebo-kit-*. Le détail est dans la RFC 0005.