Que fait crabbox ?
- Preuve à distance délibérée : suivre la politique de preuve. Privilégier une preuve locale limitée sur un hôte qualifié et disponible. Les travaux coûteux ou spécifiques à une plateforme peuvent utiliser de la capacité distante. En file d'attente : arrêter l'allocation propriétaire ; utiliser CI PR ou une portée locale sécurisée et signaler les besoins non couverts.
- Ne jamais attendre dans les files d'attente ni enchaîner les basculements de fournisseurs.
Backends :
blacksmith-testbox: source fiable pour le mainteneur. CI préparé.tbx_....aws: Crabbox intermédié directement. PRs fraîches. Sync/env/capture personnalisé.cbx_....local-container: solution de repli Docker. Pas de preuve à distance.ssh: hôte opérateur existant. macOS/Windows/WSL2.
Toujours signaler le fournisseur, l'identifiant, l'URL d'exécution, la commande, le résultat. Ne jamais appeler Testbox « AWS Crabbox ».
Contrat de dépôt
- Résoudre les exemples de commandes, l'amorçage, l'image conteneur, la PR selon les instructions du consommateur de confiance. Ne jamais inventer de commandes ni copier la configuration d'un autre consommateur.
- La configuration spécifique au consommateur reste en dehors de la compétence portable. Voir définitions de placeholders.
Autorisation et isolation
- Création, réutilisation, nettoyage, état temporaire, extractions propres nécessaires à la tâche : pré-approuvés. Préserver les branches existantes, les extractions, les modifications non liées.
- Confiance de source, identifiants, accès production, budget, publication restent des limites d'autorité. État isolé ; ne jamais toucher à la passerelle opérateur sans approbation par tâche.
Router d'abord
- Préserver le fournisseur résolu : Testbox pour source fiable ; AWS direct lorsque sa sémantique est requise ; CI/AWS sans secret pour code non fiable. Ne jamais exécuter de wrappers/configurations non fiables localement ni hydrater un bail non fiable.
- Acquérir lorsque la commande est prête ; réutiliser l'ID propriétaire ; arrêter ensuite.
- Profil le plus petit prouvé. Plus grand : preuve mémoire enregistrée ou bénéfice de coût total mesuré requis, pas d'échec/délai/délai d'attente générique. Ne pas augmenter les comptes de workers pour compenser.
- Dimensionnement Testbox :
--blacksmith-workflow, jamais--class/--typedirect ; les changements de profil nécessitent de nouveaux baux. - Taille, durée, échec d'hydratation, capacité n'autorisent jamais les surcharges de fournisseur ; la sélection explicite de l'utilisateur ou la sémantique requise du backend le font.
Pré-vol
Racine de dépôt de confiance : lire .crabbox.yaml, résoudre le binaire installé, inspecter
le fournisseur/commandes :
export CRABBOX="$(command -v crabbox)"
test -n "$CRABBOX"
"$CRABBOX" --version
"$CRABBOX" config show --json | jq '{provider, profile, target}'
"$CRABBOX" run --help
- Utiliser le wrapper/instructions d'installation de confiance du consommateur.
- Réparations : vérifier l'amont ; utiliser une extraction propre appartenant à la tâche ; préserver le binaire installé + les sources non liées. Ne jamais faire confiance à une extraction sœur uniquement par son nom.
Testbox de confiance
Fournisseur résolu = Testbox (ou explicitement demandé) : les commandes le préservent.
Ajouter --provider blacksmith-testbox uniquement pour une surcharge explicite :
"$CRABBOX" run --timing-json -- CI=1 <commande-de-vérification>
Plusieurs commandes : chauffer une fois, sauvegarder l'ID, réutiliser, arrêter.
"$CRABBOX" warmup --keep --timing-json
"$CRABBOX" run --id <tbx_id> --timing-json -- <commande-de-vérification>
"$CRABBOX" stop <tbx_id>
Règles :
- Un bail, une commande active. Pas de sync/reclaim pendant l'exécution.
- Privilégier
bash -c; les profils de connexion peuvent changer de répertoire. Dans le shell en cours d'exécution, affirmer l'extraction physique + la source/patch attendue ; HEAD seul ≠ preuve de sync sale. Suivre le contrat de shell d'hydratation documenté du consommateur. - Testbox natif exécute son propre sync, y compris les exécutions
--idréutilisées. Ne jamais compter sur--no-syncpour une base de référence distante : Blacksmith n'a pas de contournement natif ; les versions publiées de Crabbox peuvent ignorer silencieusement le flag. Une réexécution intentionnelle inchangée ≠ exception. --reclaimuniquement pour transfert délibéré de propriété du chemin d'extraction.- Changement de base/head : arrêter ; réchauffer. Pas de remplacement de bail périmé.
- SHA brut non fiable pour
warmup --ref; utiliser une branche/tag. blacksmith testbox listmasque les états. Utiliserlist --alloustatus --id <tbx_id>.- État/arrêt Testbox :
--id. Pas destatus --json. - Le fournisseur délégué rejette
--fresh-pr,--full-resync,--script*,--env-helper, les flags de capture/téléchargement.
Téléchargements de répertoires Blacksmith
Téléchargements récursifs + slash de fin distant requis : téléchargements de répertoires.
AWS non fiable
- Extraction propre de la branche par défaut de confiance. Binaire Crabbox de confiance installé.
- Nouveau bail par SHA de head complet révisé. Pas de rôle d'instance, Tailscale, hydratation.
- Transférer uniquement
CI. Télécharger un bootstrap de confiance à côté de--fresh-pr.
cd <extraction-propre-branche-par-défaut-de-confiance>
env -u CRABBOX_AWS_INSTANCE_PROFILE \
"$CRABBOX" config show --json | \
jq -e '.aws.instanceProfile == ""' >/dev/null
env -u CRABBOX_AWS_INSTANCE_PROFILE \
-u CRABBOX_TAILSCALE \
-u CRABBOX_TAILSCALE_AUTH_KEY \
-u CRABBOX_TAILSCALE_AUTH_KEY_ENV \
-u CRABBOX_TAILSCALE_EXIT_NODE \
-u CRABBOX_TAILSCALE_EXIT_NODE_ALLOW_LAN_ACCESS \
-u CRABBOX_TAILSCALE_HOSTNAME_TEMPLATE \
-u CRABBOX_TAILSCALE_TAGS \
"$CRABBOX" warmup \
--provider aws --network public --tailscale=false \
--tailscale-exit-node= \
--tailscale-exit-node-allow-lan-access=false \
--keep --timing-json
"$CRABBOX" inspect --provider aws --id <cbx_id> --json | \
jq -e '.network == "public" and .tailscale == null' >/dev/null
env -u CRABBOX_AWS_INSTANCE_PROFILE \
CRABBOX_ENV_ALLOW=CI \
"$CRABBOX" run \
--provider aws --id <cbx_id> \
--fresh-pr <propriétaire/dépôt#numéro> \
--no-hydrate --timing-json \
--script <script-bootstrap-de-confiance> -- \
<sha_head_complet_attendu> <commande-de-vérification>
env -u CRABBOX_AWS_INSTANCE_PROFILE \
"$CRABBOX" stop --provider aws <cbx_id>
- Le bootstrap de confiance doit prouver que les identifiants IAM IMDSv2 retournent 404 ; vérifier SHA ;
supprimer les variables d'injection runtime ; épingler la chaîne d'outils ; isoler
HOMEavant l'installation/le test. - Head modifié : nouveau bail. PR distante manquante ou preuve sans rôle : CI fork sans secret.
AWS direct
- Commandes AWS de confiance, diagnostics d'authentification, resync, exécutions propres PR/conteneur : lire fournisseurs directs.
- Préserver
--no-hydratesur les exécutions de conteneur ; signaler la preuve du conteneur local comme locale.
Observabilité
- Collecte d'artefacts/injection d'identifiants : lire flags de capture et d'environnement.
- Clé exacte, une commande. Ne jamais imprimer de secrets, écrire dans le dépôt ou mettre dans l'historique du shell.
- Pas de chemin d'injection sécurisé : authentification en direct bloquée ; preuve de fausse clé insuffisante.
E2E réel
- Exercer le point d'entrée utilisateur demandé avec un état consommateur isolé, pas seulement des tests unitaires distants.
- Pour la preuve d'installation/fournisseur/interactive + comparaison de révision sécurisée : lire procédure E2E.
Bureau / Cross-OS
Cibles SSH, pré-vol macOS payant, WebVNC, vérification de transfert d'application : lire commandes bureau et cross-OS.
Triage des échecs
Identifier le wrapper, le fournisseur, l'hydratation, le sync, SSH ou l'échec de commande :
"$CRABBOX" doctor
"$CRABBOX" status --id <id>
"$CRABBOX" inspect --id <id> --json
"$CRABBOX" logs <run_id>
"$CRABBOX" results <run_id>
blacksmith testbox list --all
blacksmith testbox status --id <tbx_id>
- Capacité en file d'attente : arrêter les allocations propriétaires ; suivre la politique de preuve. Pas de tempête de tentatives ni de changement de fournisseur.
- Sync périmé :
--debug --timing-json, puis--full-resyncune fois sur les fournisseurs directs. - Lire la phase échouée/JUnit avant une réexécution ciblée. Wrapper cassé : diagnostiquer avec CLI installée sur le même fournisseur ; mettre à jour via le chemin de confiance du consommateur.
- Arrêter uniquement les ID propriétaires ;
stopne prend pas--timing-json.