Des runners CI éphémères sur du matériel vraiment rapide.
ICR exécute vos jobs GitHub Actions sur des machines virtuelles neuves taillées dans un serveur AMD EPYC 9355P dédié en France : 4,4 GHz en pointe, stockage NVMe ZFS, une ligne à 8 Gbit/s. Chaque job a sa propre VM. Quand le job se termine, la VM est détruite avec son disque.
- 18:27:03push irvyne-consulting/website · 41a66b3
- 18:27:15job mis en file sur icr-4c
- 18:27:19runner créé icr-4c-bc4d74 · clone lié du modèle de runner
- 18:27:34job en cours · 31 s après le push · online
- 18:28:40job terminé · 1 min 06 s · 44 tests navigateur inclus · succeeded
- 18:28:47runner détruit · disque supprimé
- 01France dédiéeAccès anticipé
En service dès maintenant pour son premier client, sur un serveur qui nous appartient.
- 02France mutualiséePrévu
Capacité mutualisée sur le même matériel ; ouvre dès que le pare-feu par machine a passé le test d'isolation depuis l'intérieur d'un runner.
- 03Palier européenPrévu
Conçu ; ouvre dès que cinq organisations ont manifesté leur intérêt, à une date qui leur est annoncée.
- 04ColocationPrévu
Déplace le matériel dans un centre de données certifié et apporte l'engagement de disponibilité.
Comment ça marche
La ferme, en direct.
Ce qui se passe entre un job mis en file et une machine détruite, et d'où vient l'isolation. La scène tourne en accéléré, plusieurs jobs à la fois ; cliquez un chapitre pour la figer et lire.
la scène défile latéralement
en direct, en accéléré · 0 en cours · 0 en attente · 0 / 64 vCPU · 0 / 380 GB
Cliquez un chapitre pour figer la scène et lire ce qui s'y passe ; Lecture reprend.
- 01 · runs-on: icr-4c
Un job est mis en file
Votre workflow cible un label tel que icr-4c via la variable de runner que votre organisation utilise déjà. Rien d'autre ne change, et revenir aux runners hébergés par GitHub, c'est cette seule variable.
- 02 · sortant uniquement
Nous interrogeons GitHub ; GitHub ne nous appelle jamais
Notre contrôleur interroge en continu l'API des scale sets de GitHub, en HTTPS sortant, authentifié comme une GitHub App que vous installez sur votre organisation et pouvez désinstaller à tout moment. Aucun port entrant n'existe sur la ferme.
- 03 · la RAM est la limite dure
Admission : la mémoire d'abord, le plus ancien d'abord
Avant toute création, la demande passe un registre : un plafond mémoire dur sur l'hôte, votre plafond contractuel, la mémoire libre réelle du nœud et son état de santé. Le job qui attend depuis le plus longtemps passe en premier ; un job plus petit ne peut combler que la place qui ne retarde personne.
- 04 · environ 20 s
Une machine neuve, amorcée une fois
Un clone lié de l'image courante démarre en quelques secondes. Il lit une amorce à usage unique et un enregistrement GitHub à usage unique ; les deux expirent en quelques minutes et ne servent plus à rien ensuite. Une vingtaine de secondes après le push, le job s'exécute.
- 05 · pare-feu de l'hôte
Elle tourne seule
Être root dans la machine est prévu : l'isolation est à l'extérieur. Chaque machine est derrière le pare-feu de l'hôte, et les clients dédiés ont en plus leur propre VLAN : une machine atteint GitHub et Internet, et rien sur notre réseau. Le matériel dessous est sondé chaque minute pendant les jobs.
- 06 · plus rien
Elle est détruite
Arrêt, disque supprimé, mémoire rendue au registre. Le job suivant repart de l'image. Une ligne, avec les horodatages de GitHub, tombe sur votre relevé mensuel.
Paliers
Trois paliers, un seul cycle de vie.
Les mêmes constructeurs éphémères : mutualisés ou dédiés sur du matériel qui nous appartient en France, plus tard sur des serveurs physiques européens loués. Le pare-feu de l'hôte isole chaque machine ; le palier dédié ajoute un VLAN à vous. Chaque palier porte son statut ; le statut sur cette page est celui de votre annexe.
France dédiée
Votre propre VLAN, votre propre image et un plafond de 32 vCPU, sur du matériel qui nous appartient en France.
- AMD EPYC 9355P, 4,4 GHz en pointe, stockage NVMe ZFS, ligne 8 Gbit/s
- Votre propre VLAN en plus du pare-feu de l'hôte ; une VM neuve par job, détruite avec son disque
- Jusqu'à 32 vCPU en parallèle, 64 sur accord ; tailles 1, 2, 4 et 8 vCPU
- Une image de runner construite pour vous : vos outillages, images de base et certificats, reconstruite chaque semaine avec son manifeste
Un serveur, dans notre propre baie, sur un seul site : aucun engagement de disponibilité tant que le matériel n'est pas colocalisé dans un centre de données certifié et que son miroir de stockage n'est pas complet. Support aux heures ouvrées, heure de Paris.
Une réservation mensuelle avec des minutes incluses, sous contrat par client.
France mutualisée
Une capacité mutualisée sur le même matériel, chaque machine isolée par le pare-feu de l'hôte.
- Jusqu'à 16 vCPU en parallèle : quatre icr-4c, ou deux icr-8c
- Chaque machine isolée par le pare-feu de l'hôte : aucun chemin vers une autre machine, notre LAN ou l'hyperviseur
- L'image standard, reconstruite chaque semaine, avec son manifeste
- Même cycle de vie : une VM neuve par job, détruite avec son disque
Conçu, pas en service. Ouvre dès que le pare-feu par machine a passé le test d'isolation depuis l'intérieur d'un runner ; jusque-là, seuls des clients dédiés tournent sur la ferme.
Une base mensuelle avec des minutes incluses ; au-delà, la minute normalisée.
Européen
Les mêmes constructeurs éphémères sur des serveurs physiques loués chez des fournisseurs européens.
- Serveurs physiques chez des fournisseurs européens, en Allemagne, en Finlande ou en France, choisis avec les premiers clients
- Même cycle de vie : une VM neuve par job, détruite avec son disque
- Disques chiffrés avec des clés conservées hors du serveur loué
- Objectif : plus de capacité pour les pics, à un prix inférieur au palier dédié
Conçu, pas en service. Nous l'ouvrons dès que cinq organisations ont manifesté leur intérêt, à une date qui leur est annoncée ; chaque ligne ci-dessus est un objectif jusque-là.
Un prix mensuel indicatif est publié à l'ouverture du palier.
- Prévu
- Conçu, pas en service. Manifestez votre intérêt ; le palier ouvre sur un seuil public.
- Accès anticipé
- En service, sur un seul site, pour ses premiers clients ; sans engagement de disponibilité ; tarifé par client.
- Disponible
- Sous contrat, avec l'engagement de disponibilité écrit dans l'annexe.
Tailles
Quatre tailles, de 1 à 8 vCPU.
| Label | vCPU | Mémoire | Faite pour |
|---|---|---|---|
| icr-1c | 1 | 2 Gio | jobs minuscules mais pressés : étiquetage, notifications, petits scripts |
| icr-2c | 2 | 8 Gio | tests navigateur et de bout en bout, vérifications légères |
| icr-4c | 4 | 16 Gio | la plupart des builds et suites de tests ; la taille par défaut |
| icr-8c | 8 | 32 Gio | builds gourmands en compilation : JVM, Rust, grosses images Docker |
Franc-parler
Ce que nous promettons, et ce que nous ne promettons pas.
Capacité partagée, au mieux des possibilités
La concurrence que vous contractez est un plafond d'admission sur un serveur partagé, pas du matériel réservé. Les jobs attendent quand le serveur est plein.
Éphémère, avec des limites dites
Une VM et son disque sont détruits à la fin du job : rien d'un job n'est censé lui survivre. L'opérateur peut techniquement accéder à ce qu'un job peut lire pendant qu'il s'exécute ; le contrat le dit par écrit.
Pas encore d'engagement de disponibilité
ICR est en accès anticipé. Un job canari tourne toutes les 30 minutes, et le retour aux runners hébergés par GitHub reste entre vos mains : une variable, aucun changement de code. L'engagement arrive avec la colocation.
Une image que vous pouvez auditer
Ubuntu 26.04 LTS, reconstruite chaque semaine depuis l'image cloud d'Ubuntu avec l'outillage de GitHub. Chaque téléchargement est vérifié contre l'empreinte publiée par son éditeur et listé avec son empreinte dans un manifeste que vous recevez : ce manifeste est le contrat de compatibilité.
Preuves
Ce que nous avons mesuré, et ce que nous n'avons pas mesuré
Mesuré le 13/09/2026 sur l'hôte d'accès anticipé : une VM neuve par exécution, sans push vers un registre, une observation par cellule sauf mention contraire. Les chiffres historiques des runners hébergés par GitHub sont des médianes de jobs de production de mars à mai 2026, sur une autre révision, une autre date et un autre état de cache : ils décrivent l'attente qu'une équipe a vécue, pas une comparaison à conditions égales.
| Job | ICR, mesuré | Hébergé par GitHub, historique |
|---|---|---|
| Service Java, build Gradle avec tests et image Docker | 5,7 min sur 4 vCPU (cache chaud) ; 5,7 min à chaud, 9,0 min à froid sur 8 vCPU | 9,7 min en médiane pour le seul job de test (n = 8) |
| Service Rust, build d'image Docker après un changement de source | 2,3 min sur 8 vCPU | 22,9 min en médiane (n = 11) |
| Service Rust, build d'image Docker, cache désactivé | 5,2 min sur 8 vCPU | non mesuré |
| Charge : 12 jobs mis en file d'un coup, trois tailles | 6 en cours d'exécution en moins de 20 s, les autres en attente de capacité puis exécutés après 2 min 15 s ; 12 réussites sur 12 | non comparable (la concurrence des runners GitHub dépend du plan) |
| Charge : 14 jobs demandant 208 Gio face à un plafond de 112 Gio | la demande la plus ancienne servie d'abord ; les petits jobs retenus environ 80 s pour ne pas affamer un gros ; 14 réussites sur 14 | non comparable |
Runner en ligne 18 à 23 secondes après le push, job en cours à 24 secondes, VM détruite environ 3 secondes après le job (hôte d'accès anticipé, 13/09/2026).
Questions
Les questions qu'on nous pose, avec des réponses complètes.
La version longue de tout ce qui précède. Si la vôtre manque, écrivez-nous ; la réponse viendra ici.
Que se passe-t-il exactement quand je pousse du code ?
GitHub met le job en file avec votre label. Notre contrôleur, qui interroge GitHub en continu en HTTPS sortant, l'apprend en une ou deux secondes et demande l'autorisation au registre d'admission : assez de mémoire sur l'hôte, votre plafond non atteint, le nœud en bonne santé. Un clone lié de l'image courante est créé, démarre, lit une amorce à usage unique et un enregistrement GitHub à usage unique, et prend votre job une vingtaine de secondes après sa mise en file. À la fin du job, la machine s'éteint elle-même et est détruite avec son disque ; une ligne avec les horodatages de GitHub tombe sur votre relevé mensuel.
Comment un job est-il isolé des autres jobs et de votre réseau ?
Chaque job s'exécute dans une machine virtuelle neuve, détruite avec son disque ensuite : rien d'un job n'est censé survivre jusqu'au suivant. Chaque machine est derrière le pare-feu de l'hôte : rien en entrée, et en sortie seulement GitHub, les registres et Internet, jamais une autre machine, notre LAN ou l'hyperviseur. Les clients dédiés ont en plus leur propre VLAN. Être root dans la machine est prévu ; l'isolation est à l'extérieur. L'opérateur peut techniquement accéder à ce qu'un job lit pendant qu'il s'exécute, et le contrat le dit par écrit.
Qu'est-ce qui peut atteindre la ferme depuis Internet ?
Rien. Aucun port n'est exposé nulle part : le contrôleur appelle GitHub, GitHub ne nous appelle jamais. L'authentification est une GitHub App que vous installez sur votre organisation, dont les permissions sont listées avant d'accepter et que vous pouvez désinstaller à tout moment ; la désinstaller nous coupe l'accès immédiatement.
Qu'est-ce que changent les paliers mutualisé et dédié ?
Le plafond et l'isolation. Le mutualisé vous donne jusqu'à 16 vCPU en parallèle, l'image standard, et une isolation par le pare-feu de l'hôte sur un segment réseau partagé ; il ouvre dès que le pare-feu par machine a passé le test d'isolation depuis l'intérieur d'un runner. Le dédié vous donne jusqu'à 32 vCPU en parallèle, 64 sur accord, un VLAN à vous, et une image de runner construite pour vous avec vos outillages, images de base et certificats. Les deux suivent le même cycle de vie sur le même matériel ; le palier et son statut sont écrits sur votre annexe.
Que se passe-t-il quand le serveur est plein ?
La mémoire est la limite dure et n'est jamais sur-allouée ; le CPU peut l'être. Le registre d'admission sert d'abord le job qui attend depuis le plus longtemps, et ne laisse passer un job plus petit que s'il laisse la place au plus ancien. Les jobs qui ne tiennent pas attendent chez GitHub, exactement comme ils attendraient un runner GitHub occupé, et démarrent dès qu'une machine est détruite. Si vous préférez ne pas attendre, rebasculer un workflow sur les runners de GitHub tient en une variable.
C'est rapide à quel point, vraiment ?
Une vingtaine de secondes entre un job mis en file et un job en cours d'exécution sur une ferme froide, mesurée sur l'hôte d'accès anticipé. Le tableau de preuves de cette page donne les temps de build que nous avons mesurés, avec leurs conditions ; les chiffres GitHub à côté sont des médianes historiques de jobs de production, pas une comparaison à conditions égales, et la page le dit.
Que contient l'image des runners, et comment le sait-on ?
Ubuntu 26.04 LTS, reconstruite chaque semaine depuis l'image cloud d'Ubuntu avec l'outillage de GitHub : Node, Go, Java, Python, Docker, Bun, Rust, la CLI GitHub et le cache d'outils tel que les actions setup l'attendent. Chaque téléchargement est vérifié contre l'empreinte publiée par son éditeur, et le manifeste liste chaque téléchargement avec son empreinte ; ce manifeste est le contrat de compatibilité que vous recevez. Les clients dédiés ont leur propre image, construite de la même façon.
Quelles tailles existent, et comment les minutes sont-elles comptées ?
Quatre tailles : icr-1c (1 vCPU, 2 Gio), icr-2c (2 vCPU, 8 Gio), icr-4c (4 vCPU, 16 Gio) et icr-8c (8 vCPU, 32 Gio). Chaque tentative de job est une ligne du relevé avec les horodatages de GitHub ; ses minutes sont arrondies à l'entier supérieur par job et pondérées par le nombre de vCPU divisé par quatre : une minute d'icr-8c compte double, une minute d'icr-1c un quart. Le poids est figé au moment du job ; un changement ultérieur du catalogue ne réécrit jamais un relevé passé.
Et si la ferme est en panne ?
Un job canari tourne toutes les 30 minutes et montre la santé du nœud. En accès anticipé, il n'y a pas d'engagement de disponibilité ; le repli reste entre vos mains : remettez la variable de runner sur ubuntu-latest et vos workflows tournent sur les runners de GitHub sans changement de code. L'engagement arrive avec la colocation dans un centre de données certifié, et il est écrit sur l'annexe à ce moment-là.
Où sont mes données, et qui peut les voir ?
Les jobs tournent sur du matériel qui nous appartient en France, sous une société française et le droit européen. Le contenu d'un job vit dans la machine le temps du job et est détruit avec elle. L'opérateur peut techniquement voir ce qu'un job lit pendant qu'il s'exécute, ce que le contrat précise ; lorsque le contenu des jobs comporte des données personnelles, nous agissons comme votre sous-traitant selon l'annexe. GitHub reçoit les enregistrements des runners. La politique de confidentialité liste chaque destinataire et chaque durée de conservation.
Comment démarrer, et combien de temps ça prend ?
Vous installez la GitHub App sur votre organisation ; nous créons vos scale sets ; vous réglez la variable de runner sur icr-4c, et sur icr-8c pour les workflows lourds. Une semaine de canari sur quelques dépôts, puis le basculement de l'organisation quand vos tech leads le décident. Le contrat est une courte annexe de service signée par les deux sociétés ; le prix est contractuel, pas affiché.
Est-ce compatible avec GitHub Enterprise Server ou GitLab ?
Aujourd'hui, ICR sert GitHub Actions pour des organisations GitHub.com, via le protocole des scale sets de runners de GitHub. GitLab et GitHub Enterprise Server ne sont pas pris en charge.
Pourquoi pas les grands runners de GitHub ?
Trois raisons que nos clients nous donnent : le matériel est en France, détenu par une société française, sous le droit européen ; un AMD EPYC dédié avec du stockage NVMe est plus rapide que des runners cloud partagés sur des builds limités par le processeur, à un prix contractuel ; et vous savez qui exploite le service, ce qu'il y a dans l'image et ce qui vous a été facturé. Quand un cloud public est le bon outil pour vous, nous le disons.
Comment partir ?
Remettez la variable de runner sur les runners de GitHub : c'est la sortie, à tout moment, sans nous demander. Le contrat a un préavis mensuel et aucun engagement de durée au-delà du pilote. Désinstallez l'App et la ferme n'a plus rien de vous ; le contenu des jobs a été détruit avec chaque job, et seuls les relevés restent, pour la durée légale de conservation des factures.
Démarrage
Quatre étapes, aucun agent à installer.
- 01
Vous installez la GitHub App Irvyne Consulting Runners sur votre organisation ; ses permissions sont listées sur la page de l'App avant d'accepter, et la désinstaller nous coupe l'accès immédiatement.
- 02
Nous créons vos scale sets et vous réglez la variable de runner sur icr-4c, et sur icr-8c pour les workflows lourds.
- 03
Une semaine de canari sur quelques dépôts, puis le basculement de l'organisation quand vos tech leads le décident.
- 04
Un relevé mensuel au job. Le prix est contractuel, pas affiché.