Aller au contenu
TYPEDébloqué
ÉTAPEFlotte
DIFFICULTÉModéré
MÉTIERBrancher un environnement
POURÉquipes de devs
SERVICESConteneurs
SERVICESSnapshots
POURQUOI HOODYÉconomie des conteneurs
POURQUOI HOODYVoyage temporel par snapshot
TYPEDébloqué
ÉTAPEFlotte
DIFFICULTÉModéré
MÉTIERBrancher un environnement
POURÉquipes de devs
SERVICESConteneurs
SERVICESSnapshots
POURQUOI HOODYÉconomie des conteneurs
POURQUOI HOODYVoyage temporel par snapshot
TYPEDébloqué
ÉTAPEFlotte
DIFFICULTÉModéré
MÉTIERBrancher un environnement
POURÉquipes de devs
SERVICESConteneurs
SERVICESSnapshots
POURQUOI HOODYÉconomie des conteneurs
POURQUOI HOODYVoyage temporel par snapshot
TYPEDébloqué
ÉTAPEFlotte
DIFFICULTÉModéré
MÉTIERBrancher un environnement
POURÉquipes de devs
SERVICESConteneurs
SERVICESSnapshots
POURQUOI HOODYÉconomie des conteneurs
POURQUOI HOODYVoyage temporel par snapshot
CONTAINERS · SNAPSHOTS · PREVIEWS PR

Un environnement de preview par pull request, tout le mois

Snapshot votre conteneur staging une fois. Chaque nouvelle PR clone le snapshot dans son propre conteneur avec sa propre URL. Le conteneur se réveille quand un reviewer ouvre le lien, dort quand personne ne regarde, et se fait détruire par un cron d'une ligne quand la PR ferme. Soixante branches, soixante URL et une facture fixe.

Lire la doc snapshots
CRON · DÉTRUIRE LES PREVIEWS MERGÉESune ligne, toutes les 5 minutes
# Quand une PR merge, le cron lâche son container.*/5 * * * * curl -X DELETE https://api.hoody.com/api/v1/containers/$MERGED_PR_CID
LIGNAGE SNAPSHOTune base · plusieurs clones
STAGING-BASEsnap-2026-05-01 · 4,2 Go
PAGES COPY-ON-WRITE PARTAGÉES30 / 30 conteneurs

Comment une PR devient une URL

Trois appels. Une ligne cron. Le pipeline CI que vous avez déjà les déclenche dans l'ordre que vous écrirais vous-même.

    01
    STEP 01 · UNE FOIS

    Snapshot le conteneur staging

    Choisis le conteneur qui fait tourner votre stack staging — app, base, queues, fixtures. POST un snapshot, nomme-le staging-base. Fichiers, processus et mémoire sont capturés. Le snapshot est un point de départ deltable, pas un tarball — les clones partagent ses pages au lieu de les copier.

    02
    STEP 02 · PAR PR

    Clone le snapshot au push

    votre CI reçoit le webhook push GitHub et POST sur l'API conteneurs avec source_snapshot=staging-base. Un nouveau conteneur boote en quelques secondes avec la base seedée et la branche de la PR checkée out. L'URL revient en status check.

    03
    STEP 03 · AU MERGE

    Détruisez quand la PR ferme

    Une entrée cron toutes les 5 minutes parcourt les PRs mergées et DELETE leurs conteneurs — ou votre webhook de merge le fait inline. Le delta disque du conteneur est récupéré, l'URL libérée, et le slot conteneur retourne dans le pool pour la prochaine PR.

L'étape 02 prend à peu près le temps d'un yarn install. L'étape 03 est un appel HTTP. Rien d'autre n'a besoin de savoir que le conteneur de la PR a existé.

Les endpoints exacts que votre CI appelle

Trois vrais endpoints des APIs Hoody Conteneurs et Snapshots. Place-les dans l'étape GitHub Actions que vous avez déjà.

ENV PREVIEW · TABLE D'APPELSconteneurs + snapshots
  • POSTmethod · path
    /api/v1/containers/[staging_id]/snapshots

    Capture le snapshot staging-base

    Body : [ "alias": "staging-base", "expiry": 30 ]. Renvoie un nom de snapshot type snap-20260501-093000. Lancez ça une fois par déploiement de la branche main — chaque clone PR descend de la capture la plus récente.

  • POSTmethod · path
    /api/v1/projects/[project_id]/containers

    Clone un conteneur frais par PR

    Le body choisit server_id et un conteneur_image ; passe environment_vars pour injecter le numéro de PR, la ref de branche et le nom de la base. Le conteneur boote depuis le filesystem de votre snapshot, pas depuis zéro — caches et seed sont déjà là.

  • DELETEmethod · path
    /api/v1/containers/[pr_conteneur_id]

    Retirez la preview quand la PR ferme

    Un appel. Le conteneur s'éteint et son delta disque est récupéré ; rien d'autre n'a besoin d'être démonté. Une entrée cron toutes les 5 minutes gère les PRs qui ont fermé sans qu'on regarde.

Endpoints des APIs Hoody Conteneur Snapshots et Conteneurs. L'expiration de snapshot est en jours ; la création de conteneur accepte environment_vars, ssh_public_key, autostart, ramdisk et realm_ids — voir la doc pour le schéma complet.

Ce qui change quand les previews sont gratuites

Le calcul cesse de gater le comportement des reviewers. Trois habitudes trop chères à $40 par preview apparaissent d'elles-mêmes une fois que le coût par PR devient un arrondi.

VITESSE DE REVIEW

Les reviewers cliquent, ne pull pas

Personne ne checkout la branche en local pour reproduire le bug. Ils ouvrent l'URL, cliquent sur le truc cassé, laissent un screenshot dans la PR. La boucle de review tourne sur ce que le code fait vraiment, pas sur ce que le diff suggère.

BUDGET

Les PRs inactives ne coûtent rien

Les cinquante PRs que personne n'examine en ce moment coûtent zéro CPU et zéro RAM. Elles partagent les pages du snapshot staging-base sur disque, donc même leur empreinte est surtout du delta. La facture est bornée par la machine, pas par le compte de PRs ouvertes.

DESIGN & PRODUIT

Les stakeholders rejoignent la boucle

votre designer, votre support engineer, votre sales lead — quiconque a l'URL peut tester la PR. Ils n'allaient jamais git checkout une branche. Avec un lien, ils regardent vraiment le changement avant qu'il atterrisse.

Le calcul en dollars, simplement

Une équipe qui ouvre 30 PRs par mois. Le chiffre avant est la facture standard d'environnements de preview. Le chiffre après est une machine bare-metal Hoody qui contient les 30 plus votre staging.

AVANT · PREVIEWS VERCEL, ÉQUIPE PRO

$1/mo

Tarif Pro par siège plus minutes de build plus bande passante sur une équipe de 6 ingés faisant tourner 30 deploys PR par mois. La plupart des équipes plafonnent les previews aux 10 actives parce que les 20 suivantes coûtent vraiment.

VS
APRÈS · HOODY · UNE MACHINE BARE-METAL

$1/mo

Un serveur mid-tier du marketplace Hoody fait tourner staging plus 30 clones PR plus votre cache CI. Ajoute les soixante prochains pour $0 — copy-on-write veut dire que chaque clone est les pages du snapshot plus un delta.

Le tarif Vercel Pro affiché est $20/siège/mois plus l'usage ; le tarif d'entrée bare-metal Hoody démarre à $1/mo et varie selon la spec, la région et la durée de location. La densité de conteneurs dépend de la charge — les apps web typiques en empilent des dizaines à centaines ; les gros services stateful demandent plus de marge.

Les environnements de preview cessent d'être un poste de budget. Ils deviennent le défaut.

avant · plafonnés aux 10 actifsaprès · un par pull request
À QUOI RESSEMBLAIT L'ANCIENNE POLITIQUEpreview seulement les 10 PRs les plus bruyantesles vingt autres reçoivent un screenshot en commentaire
À QUOI ÇA RESSEMBLE MAINTENANTchaque PR · chaque diff · chaque reviewerpas de doc de politique, pas de ticket pour demander une preview
Voir la doc snapshots

Ce que ça remplace

Les produits d'environnement de preview facturent par siège, par minute, ou par conteneur qui tourne. Hoody facture par serveur — la 30e preview coûte autant que la 1re.

  • Environnements de preview Vercel (Pro / Enterprise)Par siège plus minutes de build plus bande passante
  • Previews GitHub CodespacesFacturation à l'heure que le reviewer regarde ou non
  • Tâches preview AWS FargateHeures vCPU + mémoire par tâche, plus transfert de données
  • Environnements de preview RenderTarif par environnement, l'inactif n'est pas gratuit
  • Review apps HerokuUn dyno par PR, dyno-heures par review
  • Netlify deploy previews + minutes de buildLes minutes de build comptent à chaque push, pas à chaque review

Snapshot une fois. Clone par PR. Détruis au merge. Le reviewer ne sent jamais la couture.

Lire le guide snapshot

Lis les autres