colisdocs

Livrer depuis la CI

Chaque build de recette envoyé depuis la CI sous un code, et la réponse du client qui revient en statut : validé ou à corriger.

Le problème

Chaque build de recette part par un canal différent : un lien de stockage qui n’expire jamais, un fichier trop lourd pour l’e-mail, une capture dans une messagerie. Le retour du testeur arrive ailleurs, et on ne sait jamais quel build a été testé.

La démarche

La machine de CI n’a besoin d’aucune clé S3 : elle parle à votre page de livraison avec son DROP_PASSWORD, rangé dans les secrets du dépôt sous COLIS_TOKEN. La CLI se construit depuis le dépôt colis (voir Installation).

.github/workflows/recette.yml
- uses: oven-sh/setup-bun@v2

- name: Construire colis
  run: |
    git clone --depth 1 https://github.com/mamadouwhile/colis.git "$RUNNER_TEMP/colis"
    cd "$RUNNER_TEMP/colis" && bun install --frozen-lockfile
    bunx turbo run build --filter=@mdemb/colis

- name: Livrer le build
  env:
    COLIS_REMOTE: https://votre-livraison.vercel.app/api/transfers
    COLIS_TOKEN: ${{ secrets.COLIS_TOKEN }}
  run: |
    CODE=$(node "$RUNNER_TEMP/colis/packages/cli/dist/index.js" envoyer ./dist/app-recette.zip)
    echo "Build de recette : https://votre-livraison.vercel.app/$CODE" >> "$GITHUB_STEP_SUMMARY"

Le code est la seule chose écrite sur stdout, donc il se glisse dans un message, un résumé de job ou un commentaire de pull request. Le client ouvre le lien, télécharge, teste, puis valide ou décrit ce qui ne va pas.

Plus tard, un script lit la réponse :

colis statut "$CODE" | head -1   # envoyé, ouvert, validé ou à corriger
colis statut "$CODE" --json      # l’accusé complet, commentaire compris

À surveiller

  • La limite de la fonction. La CLI envoie en une seule requête, à travers la fonction de la page de livraison : le fichier doit tenir sous DROP_MAX_SIZE_MB, 4 Mo par défaut sur Vercel. Au-delà, envoyez-le depuis la page, qui passe directement par le bucket en morceaux, ou relevez la limite sur un hébergement qui ne l’impose pas.
  • Le jeton est le mot de passe d’envoi. --token, ou COLIS_TOKEN, c’est le DROP_PASSWORD de la page.
  • Les options de la page ne suivent pas. Un colis créé par la CLI prend les valeurs par défaut du déploiement : pas de mot de passe, pas de message, la durée par défaut. Pour les poser depuis un terminal, envoyez les en-têtes x-drop-* avec curl, voir Page de livraison.
  • Vérifiez le déploiement d’abord. colis verifier --json sort en erreur si l’aller-retour échoue, ce qui en fait une étape de CI.

Sur cette page