# 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. Comment le faire avec colis, à quoi faire attention, et où c’est documenté.

Canonical: https://colis-site.vercel.app/use-cases/livrer-depuis-la-ci · Markdown: https://colis-site.vercel.app/use-cases/livrer-depuis-la-ci.md · English: https://colis-site.vercel.app/en/use-cases/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.

```yaml
# colis is built from the repository until it is on npm
- run: npm run build && tar cz ./dist > recette.tar.gz
- run: |
    CODE=$(colis envoyer ./recette.tar.gz)
    echo "Build de recette : https://livraison.example.com/$CODE" >> "$GITHUB_STEP_SUMMARY"
  env:
    COLIS_REMOTE: https://livraison.example.com/api/transfers
    COLIS_TOKEN: ${{ secrets.DROP_PASSWORD }}

# later, in any script
# colis statut "$CODE" | head -1   → envoyé, ouvert, validé or à corriger
```

## Ce qui se passe vraiment.
### 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é.

### Ce que colis y fait
Le pipeline envoie le build avec `colis envoyer` vers votre page de livraison. Le code est la seule chose écrite sur stdout, donc il se glisse dans un message 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. `colis statut <code> | head -1` donne l’état à un script, et `--json` l’accusé complet.

## Les pièges faciles.
- **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 pour 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` en CI, c’est le `DROP_PASSWORD` de la page. La machine de CI n’a besoin d’aucune clé S3.
- **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.

Packages: colis, colis-drop. [La CLI, en détail](https://github.com/mamadouwhile/colis/tree/main/packages/cli)
