# 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.

Canonical: https://colis-docs.vercel.app/docs/cas-d-usage/livrer-depuis-la-ci · Markdown: https://colis-docs.vercel.app/docs/cas-d-usage/livrer-depuis-la-ci.md

## 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](https://colis-docs.vercel.app/docs/installation)).

```yaml title=".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 :

```sh
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](https://colis-docs.vercel.app/docs/page-de-livraison#avant-lenvoi).
- **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.
