[{"data":1,"prerenderedAt":216},["ShallowReactive",2],{"seo-verification":3,"blog-github-actions-payant-migrer-ci-cd-gitea-forgejo-vps-fr":6},{"google":4,"bing":5},"EycwPY2XMyTkVzas3n1ygeNJFGAH513qrMjfDljzsMQ","",{"id":7,"slug":8,"slugs":9,"title":12,"excerpt":13,"readTime":14,"views":15,"isPinned":16,"publishedAt":17,"category":18,"categories":23,"featuredImage":25,"bgImage":26,"posterImage":27,"relatedSolution":28,"intro":31,"sections":32,"ctaTitle":163,"ctaBody":164,"ctaButton":165,"ctaUrl":166,"relatedPosts":167},273,"github-actions-payant-migrer-ci-cd-gitea-forgejo-vps",{"fr":8,"en":10,"ar":11},"migrate-cicd-to-gitea-or-forgejo-leave-github-actions","gitea-وforgejo-بديل-github-actions-المدفوع-على-vps","Migrer sa CI\u002FCD vers Gitea ou Forgejo : hors GitHub Actions","Depuis mars 2026, GitHub facture les minutes CI sur les dépôts privés. Migrez vers Gitea Actions ou Forgejo sur VPS : mêmes fichiers YAML, coût fixe.",11,0,false,"2026-08-16T00:00:00+00:00",{"id":19,"name":20,"slug":21,"color":22,"icon":21},2,"Automatisation","automatisation","bg-brand-action\u002F10 text-brand-action",[24],{"id":19,"name":20,"slug":21,"color":22,"icon":21},null,"\u002Fblog\u002Fcovers\u002Fbg.svg","\u002Fblog\u002Fcovers\u002Fgithub-actions-payant-migrer-ci-cd-gitea-forgejo-vps-poster.svg",{"categorySlug":29,"appSlug":30},"developpement","gitea","Depuis le 1er mars 2026, les minutes de CI sur les dépôts GitHub privés sont facturées à la consommation. Pour les équipes qui enchaînent les pipelines — tests, lint, build Docker, déploiement — la facture mensuelle peut rapidement dépasser le budget alloué à l'hébergement lui-même. Gitea et Forgejo permettent de reprendre le contrôle : même syntaxe YAML, même logique de runner, zéro coût de minute. Ce guide compare les deux options et détaille l'installation pas à pas sur un VPS.",[33,37,49,52,98,101,123,126,141,144,153,157,160],{"type":34,"title":35,"body":36},"h2","Ce qui a changé dans la tarification GitHub Actions","Jusqu'en début d'année 2026, les dépôts privés sur GitHub bénéficiaient d'un quota mensuel de minutes incluses, selon le plan souscrit. Ce modèle a évolué : depuis le 1er mars 2026, GitHub a revu les seuils inclus à la baisse et a généralisé la facturation à la minute pour les runners Linux hébergés par GitHub sur les plans inférieurs à GitHub Team et GitHub Enterprise.\n\nLes runners auto-hébergés (self-hosted), eux, n'ont jamais été facturés par GitHub — ils consomment vos propres ressources. C'est précisément ce levier que Gitea Actions et Forgejo Actions exploitent : en hébergeant votre forge sur un VPS, vous portez vos pipelines sur un runner que vous contrôlez, sans compteur GitHub.\n\nL'argument n'est pas seulement financier. Les données de vos dépôts privés ne transitent plus par l'infrastructure GitHub. Les pipelines s'exécutent dans l'environnement réseau de votre choix — utile si votre déploiement cible un réseau privé ou un cluster interne. Et la forge reste accessible même en cas de panne ou de restriction externe.",{"type":38,"title":39,"items":40},"ul","Pourquoi migrer sa CI\u002FCD vers une forge auto-hébergée",[41,42,43,44,45,46,47,48],"**Coût variable supprimé** — le runner tourne sur votre VPS, chaque minute de CI est une ressource déjà payée, pas une ligne de facturation supplémentaire.","**Confidentialité des pipelines** — le code source, les secrets d'environnement et les artefacts de build ne quittent pas votre infrastructure.","**Compatibilité YAML** — `.gitea\u002Fworkflows\u002Fci.yml` suit la même syntaxe que `.github\u002Fworkflows\u002Fci.yml` ; la migration d'un pipeline existant ne demande le plus souvent qu'un déplacement de fichier.","**Contrôle total des images de runner** — vous choisissez les versions de PHP, Node, Python ou Docker sans dépendre du catalogue GitHub.","**Forge légère** — Gitea fonctionne avec 200 à 300 Mo de RAM pour les dépôts, `act_runner` consomme environ 50 Mo par job ; un VPS avec 1 Go de RAM suffit pour une petite équipe.","**Indépendance de service** — vos pipelines continuent à tourner quelle que soit la disponibilité ou la politique tarifaire de la plateforme upstream.","**Gestion unifiée des accès** — les permissions, les équipes et les webhooks vivent sur votre instance, sans délégation d'accès à un tiers.","**Stockage des artefacts sous votre contrôle** — les binaires, les images Docker et les rapports de couverture sont stockés là où vous le décidez.",{"type":34,"title":50,"body":51},"Prérequis","Avant d'installer Gitea ou Forgejo, vérifiez que votre VPS répond aux critères suivants.\n\n**RAM** : 1 Go minimum pour une petite forge (jusqu'à 5 développeurs, pipelines simples). Comptez 2 Go si vous activez plusieurs runners en parallèle ou si vos jobs compilent des images Docker.\n\n**CPU** : 1 vCPU suffit pour la forge elle-même ; les jobs de CI consomment ce que vous leur accordez via la configuration du runner.\n\n**Stockage** : 20 Go pour démarrer — les dépôts Git et les artefacts de pipeline grandissent vite selon votre activité.\n\n**Port public** : le port 22 (SSH Git) ou un port alternatif, et le port 443 (HTTPS). Le port 3000 est utilisé en interne par Gitea\u002FForgejo ; il ne doit pas être exposé directement.\n\n**Domaine** : un sous-domaine dédié (`git.votredomaine.com`) est fortement conseillé — les webhooks GitHub→Gitea, les clés SSH et les URLs de clonage s'appuient sur un nom stable.\n\n**Docker** : Gitea et Forgejo se déploient proprement via Docker Compose, qui simplifie les mises à jour et l'isolation des processus.",{"type":53,"title":54,"headers":55,"rows":60},"comparison","Gitea Actions vs Forgejo Actions vs Woodpecker CI",[56,57,58,59],"Critère","Gitea Actions","Forgejo Actions","Woodpecker CI",[61,66,71,75,79,84,88,93],[62,63,64,65],"Origine","Fork de Gogs, ~47 000 étoiles GitHub, licence MIT","Hard-fork de Gitea depuis déc. 2022, piloté par Codeberg, licence AGPL-3.0","CI externe, open-source, fonctionne avec Gitea\u002FForgejo\u002FGitHub",[67,68,69,70],"Runner","act_runner (même binaire)","act_runner (même binaire, version Forgejo)","Agent Woodpecker dédié (woodpecker-agent)",[72,73,73,74],"Syntaxe workflow","Compatible `.github\u002Fworkflows\u002F*.yml`","Syntaxe YAML propre, non compatible GitHub Actions",[76,77,77,78],"Effort de migration","Déplacer le fichier YAML dans `.gitea\u002Fworkflows\u002F`","Réécrire les workflows dans le format Woodpecker",[80,81,82,83],"Gouvernance","Société commerciale (Gitea Ltd)","Collectif de contributeurs indépendants (Codeberg e.V.)","Communauté, sans entité commerciale derrière",[85,86,86,87],"Consommation mémoire forge","~200-300 Mo RAM repos","Nécessite aussi une forge (Gitea\u002FForgejo) en plus",[89,90,91,92],"Mises à jour","Releases fréquentes, canal stable disponible","Releases alignées sur Gitea + correctifs propres","Cycle de release indépendant",[94,95,96,97],"Cas d'usage principal","Forge légère avec CI intégrée, migration depuis GitHub","Forge légère, CI intégrée, préférence pour la gouvernance libre","CI autonome avancée, pipelines multi-étapes complexes",{"type":34,"title":99,"body":100},"Option A : Gitea avec act_runner","Gitea est un fork de Gogs maintenu activement depuis 2016, aujourd'hui à environ 47 000 étoiles sur GitHub sous licence MIT. Il embarque depuis la version 1.19 un moteur d'Actions compatible avec la syntaxe GitHub Actions, piloté par `act_runner`.",{"type":102,"title":103,"steps":104},"steps","Installation de Gitea et du runner",[105,108,111,114,117,120],{"title":106,"body":107},"Créer le fichier Docker Compose","Créez un répertoire de travail et un fichier `docker-compose.yml` :\n\n```yaml\nservices:\n  gitea:\n    image: gitea\u002Fgitea:latest\n    container_name: gitea\n    environment:\n      - USER_UID=1000\n      - USER_GID=1000\n      - GITEA__actions__ENABLED=true\n    volumes:\n      - .\u002Fgitea-data:\u002Fdata\n      - \u002Fetc\u002Ftimezone:\u002Fetc\u002Ftimezone:ro\n      - \u002Fetc\u002Flocaltime:\u002Fetc\u002Flocaltime:ro\n    ports:\n      - \"3000:3000\"\n      - \"222:22\"\n    restart: unless-stopped\n```\n\nActivez `GITEA__actions__ENABLED=true` dès le départ — sans cette variable, l'onglet Actions n'apparaît pas dans l'interface.",{"title":109,"body":110},"Lancer Gitea et compléter l'installation initiale","Démarrez le conteneur puis ouvrez `http:\u002F\u002F\u003Cvotre-ip>:3000` dans un navigateur. L'assistant d'installation vous demande le type de base de données (SQLite suffit pour une petite forge), le nom du serveur et l'URL externe. Saisissez l'URL HTTPS que vous allez configurer (`https:\u002F\u002Fgit.votredomaine.com`) — elle est écrite dans la configuration et sert de base pour les URLs de clonage et les webhooks.\n\nCréez le compte administrateur depuis cet assistant.",{"title":112,"body":113},"Configurer le reverse proxy et le TLS","Placez Gitea derrière nginx avec un certificat Let's Encrypt. Exemple de bloc `server` :\n\n```nginx\nserver {\n    listen 443 ssl;\n    server_name git.votredomaine.com;\n    ssl_certificate \u002Fetc\u002Fletsencrypt\u002Flive\u002Fgit.votredomaine.com\u002Ffullchain.pem;\n    ssl_certificate_key \u002Fetc\u002Fletsencrypt\u002Flive\u002Fgit.votredomaine.com\u002Fprivkey.pem;\n    location \u002F {\n        proxy_pass http:\u002F\u002F127.0.0.1:3000;\n        proxy_set_header Host $host;\n        proxy_set_header X-Real-IP $remote_addr;\n    }\n}\n```\n\nObtenez le certificat avec `certbot certonly --nginx -d git.votredomaine.com` puis rechargez nginx.",{"title":115,"body":116},"Créer un token runner dans Gitea","Connectez-vous à votre instance Gitea en tant qu'administrateur. Allez dans **Administration du site → Runners → Créer un runner**. Copiez le token affiché — il sera utilisé à l'étape suivante pour enregistrer `act_runner`.",{"title":118,"body":119},"Déployer act_runner","Ajoutez le service `act_runner` à votre `docker-compose.yml` :\n\n```yaml\n  act_runner:\n    image: gitea\u002Fact_runner:latest\n    container_name: act_runner\n    environment:\n      - GITEA_INSTANCE_URL=https:\u002F\u002Fgit.votredomaine.com\n      - GITEA_RUNNER_REGISTRATION_TOKEN=\u003Cvotre-token>\n      - GITEA_RUNNER_NAME=vps-runner\n    volumes:\n      - \u002Fvar\u002Frun\u002Fdocker.sock:\u002Fvar\u002Frun\u002Fdocker.sock\n      - .\u002Frunner-data:\u002Fdata\n    restart: unless-stopped\n    depends_on:\n      - gitea\n```\n\nRelancez avec `docker compose up -d`. Le runner apparaît dans l'interface Gitea sous **Administration du site → Runners** avec le statut **Idle**.",{"title":121,"body":122},"Pousser un workflow de test","Dans l'un de vos dépôts Gitea, créez le fichier `.gitea\u002Fworkflows\u002Fci.yml` :\n\n```yaml\nname: CI\non: [push]\njobs:\n  test:\n    runs-on: ubuntu-latest\n    steps:\n      - uses: actions\u002Fcheckout@v4\n      - name: Vérification\n        run: echo \"Pipeline actif sur Gitea Actions\"\n```\n\nPoussez un commit. Le job apparaît dans l'onglet **Actions** du dépôt et s'exécute sur votre runner VPS.",{"type":34,"title":124,"body":125},"Option B : Forgejo avec act_runner","Forgejo est un hard-fork de Gitea initié en décembre 2022 par la communauté Codeberg, distribuée sous licence AGPL-3.0. Il partage la même syntaxe de workflow et le même binaire `act_runner`, avec une gouvernance communautaire et un cycle de correctifs indépendant. Pour les équipes sensibles aux questions de gouvernance ou de licence, Forgejo est l'alternative directe à Gitea — l'expérience utilisateur et la compatibilité YAML sont identiques.",{"type":102,"title":127,"steps":128},"Différences d'installation par rapport à Gitea",[129,132,135,138],{"title":130,"body":131},"Remplacer l'image Docker","Dans votre `docker-compose.yml`, remplacez l'image Gitea par l'image Forgejo officielle :\n\n```yaml\nservices:\n  forgejo:\n    image: codeberg.org\u002Fforgejo\u002Fforgejo:latest\n    container_name: forgejo\n    environment:\n      - USER_UID=1000\n      - USER_GID=1000\n      - FORGEJO__actions__ENABLED=true\n    volumes:\n      - .\u002Fforgejo-data:\u002Fdata\n    ports:\n      - \"3000:3000\"\n      - \"222:22\"\n    restart: unless-stopped\n```\n\nLa variable d'environnement passe de `GITEA__` à `FORGEJO__` pour les paramètres propres à Forgejo.",{"title":133,"body":134},"Utiliser le runner Forgejo","Forgejo maintient sa propre version de `act_runner`. Utilisez l'image publiée sur le registre Codeberg :\n\n```yaml\n  act_runner:\n    image: code.forgejo.org\u002Fforgejo\u002Frunner:latest\n    container_name: forgejo_runner\n    environment:\n      - FORGEJO_INSTANCE_URL=https:\u002F\u002Fgit.votredomaine.com\n      - FORGEJO_RUNNER_REGISTRATION_TOKEN=\u003Cvotre-token>\n      - FORGEJO_RUNNER_NAME=vps-runner\n    volumes:\n      - \u002Fvar\u002Frun\u002Fdocker.sock:\u002Fvar\u002Frun\u002Fdocker.sock\n      - .\u002Frunner-data:\u002Fdata\n    restart: unless-stopped\n```",{"title":136,"body":137},"Récupérer le token runner dans Forgejo","La procédure est identique à Gitea : **Administration du site → Runners → Créer un runner**. Le token est à usage unique — notez-le avant de fermer la page.",{"title":139,"body":140},"Placer vos workflows dans `.gitea\u002Fworkflows\u002F`","Forgejo lit les fichiers de workflow dans le même répertoire que Gitea : `.gitea\u002Fworkflows\u002F`. Un workflow écrit pour GitHub Actions ou Gitea Actions fonctionne sans modification. La seule contrainte : l'action `actions\u002Fcheckout@v4` et ses cousines sont résolues par le cache d'actions de votre instance — la première exécution les télécharge, les suivantes les réutilisent.",{"type":34,"title":142,"body":143},"Compatibilité YAML avec GitHub Actions","Le point de compatibilité le plus souvent sous-estimé : `.gitea\u002Fworkflows\u002Fci.yml` et `.github\u002Fworkflows\u002Fci.yml` partagent la même grammaire. Les événements déclencheurs (`push`, `pull_request`, `schedule`), les jobs, les steps, les matrices et les conditions `if:` fonctionnent de la même manière.\n\nUn workflow GitHub typique :\n\n```yaml\nname: Tests\non:\n  push:\n    branches: [main, dev]\n  pull_request:\n\njobs:\n  phpunit:\n    runs-on: ubuntu-latest\n    steps:\n      - uses: actions\u002Fcheckout@v4\n      - name: Setup PHP\n        uses: shivammathur\u002Fsetup-php@v2\n        with:\n          php-version: '8.4'\n      - run: composer install --no-interaction\n      - run: vendor\u002Fbin\u002Fphpunit\n```\n\nCe fichier, copié dans `.gitea\u002Fworkflows\u002Fci.yml`, s'exécute tel quel sur Gitea Actions ou Forgejo Actions. Les actions du marketplace GitHub (`actions\u002Fcheckout`, `shivammathur\u002Fsetup-php`, etc.) sont téléchargées depuis GitHub lors de la première exécution et mises en cache localement.\n\nLimite à connaître : certaines actions propriétaires ou spécifiques à GitHub (OIDC, CodeQL, Dependabot) n'ont pas d'équivalent direct et doivent être remplacées par des alternatives open source ou des scripts shell.",{"type":38,"title":145,"items":146},"Avantages comparatifs d'un runner self-hosted",[147,148,149,150,151,152],"**Coût fixe et prévisible** — vous ne payez que le VPS, quelle que soit la fréquence de vos pipelines.","**Confidentialité** — le code source, les variables d'environnement et les artefacts de build ne transitent pas par un service tiers.","**Personnalisation du runner** — installez les dépendances système, les outils spécifiques à votre stack ou les images Docker privées directement sur le runner.","**Réseau interne accessible** — un job peut atteindre une base de données de staging ou un registry Docker privé sur votre réseau sans exposition publique.","**Déploiements sans transit réseau** — le runner s'exécute dans le même datacenter que votre serveur cible ; les artefacts de build sont copiés localement, sans traverser les serveurs GitHub.","**Archivage sous votre contrôle** — les logs de pipeline et les artefacts sont conservés aussi longtemps que vous le décidez, sans limite imposée par la plateforme.",{"type":154,"title":155,"body":156},"tip","Durcissement de l'installation","Un runner auto-hébergé expose votre infrastructure si sa configuration est laxiste. Trois points à vérifier avant de mettre votre instance en production.\n\nPremier point : **n'exposez pas l'interface d'administration Gitea\u002FForgejo sur Internet**. Placez-la derrière le reverse proxy avec authentification à deux facteurs activée et, si possible, une restriction par IP ou un VPN pour l'accès admin.\n\nDeuxième point : **le token du runner est à usage unique et doit rester secret**. Une fois le runner enregistré, le token n'a plus de valeur — mais s'il fuite avant enregistrement, un tiers peut créer un runner malveillant sur votre instance.\n\nTroisième point : **isolez le runner dans un réseau Docker dédié**, séparé de la forge. Un job compromis ne doit pas pouvoir atteindre le conteneur Gitea\u002FForgejo via le réseau interne Docker. Déclarez deux réseaux dans votre `docker-compose.yml` et n'accordez au runner que l'accès à Internet et à ce qui est nécessaire à vos pipelines.",{"type":34,"title":158,"body":159},"Dépannage — erreurs fréquentes","**Le runner reste en statut « Offline » après démarrage.** Vérifiez que `GITEA_INSTANCE_URL` (ou `FORGEJO_INSTANCE_URL`) pointe vers l'URL HTTPS publique de votre forge, pas vers `localhost` ou l'IP interne. Le runner se connecte de l'extérieur du conteneur.\n\n**L'onglet Actions n'apparaît pas dans l'interface.** La variable `GITEA__actions__ENABLED=true` (ou `FORGEJO__actions__ENABLED=true`) doit être présente au démarrage du conteneur. Un simple redémarrage sans cette variable ne suffit pas — arrêtez le conteneur, ajoutez la variable, puis relancez avec `docker compose up -d`.\n\n**L'action `actions\u002Fcheckout@v4` échoue avec une erreur de résolution.** Gitea et Forgejo tentent de télécharger les actions depuis GitHub lors de la première exécution. Si votre VPS ne peut pas atteindre `github.com`, configurez un miroir local d'actions dans la section `[actions]` de `app.ini` avec la clé `DEFAULT_ACTIONS_URL`.\n\n**Le job démarre puis s'arrête immédiatement avec « exit code 137 ».** C'est un signal OOM (Out Of Memory) du noyau. L'image de runner (`ubuntu-latest`) charge plusieurs outils en mémoire. Augmentez la RAM disponible sur votre VPS ou réduisez le parallélisme (`max_parallel_jobs` dans la configuration du runner) pour éviter plusieurs jobs simultanés sur un hôte sous-dimensionné.",{"type":34,"title":161,"body":162},"Reprendre le contrôle de votre CI\u002FCD","Gitea et Forgejo offrent le même niveau de compatibilité avec vos workflows GitHub Actions existants, avec des profils de gouvernance différents — MIT pour Gitea, AGPL-3.0 et collectif indépendant pour Forgejo. Dans les deux cas, `act_runner` s'installe en quelques minutes sur un VPS standard, et vos pipelines migrent sans réécriture.\n\nSi vous utilisez déjà un template VPS Gitea sur ServOrbit, le runner peut tourner sur la même instance ou sur un VPS dédié selon la charge de vos pipelines. Le guide détaillé d'installation de Gitea est disponible à la suite — il couvre les options de stockage, la configuration SMTP et la sauvegarde automatisée.\n\nPour déployer Gitea sur un VPS en quelques minutes, consultez notre guide : \u003Ca href=\"\u002Fblog\u002Fheberger-gitea\">Héberger Gitea sur VPS\u003C\u002Fa>.","Déployez votre forge Git sur VPS","Gitea est disponible comme template VPS sur ServOrbit. Votre instance est opérationnelle en quelques minutes, avec Docker, nginx et un certificat TLS préconfigurés. Ajoutez `act_runner` et vos pipelines tournent sur votre infrastructure dès la première heure.","Déployer Gitea","\u002Fmarketplace\u002Fdeveloppement\u002Fgitea",[168,188,203],{"id":169,"slug":170,"slugs":171,"title":174,"excerpt":175,"readTime":176,"views":15,"isPinned":16,"publishedAt":177,"category":178,"categories":184,"featuredImage":25,"bgImage":26,"posterImage":186,"relatedSolution":187},74,"heberger-gitea",{"fr":170,"en":172,"ar":173},"host-gitea-on-your-own-vps","استضافة-gitea-على-خادم-vps-الخاص-بك","Héberger Gitea sur votre propre VPS","Déployez Gitea sur un VPS avec Docker, reverse proxy et SSL. Forge Git légère, rapide et 100% sous votre contrôle.",4,"2026-04-07T00:00:00+00:00",{"id":179,"name":180,"slug":181,"color":182,"icon":183},7,"Self-hosting","self-hosting","bg-indigo-500\u002F10 text-indigo-400","cloud",[185],{"id":179,"name":180,"slug":181,"color":182,"icon":183},"\u002Fblog\u002Fcovers\u002Fheberger-gitea-poster.svg",{"categorySlug":29,"appSlug":30},{"id":189,"slug":190,"slugs":191,"title":194,"excerpt":195,"readTime":196,"views":197,"isPinned":16,"publishedAt":198,"category":199,"categories":200,"featuredImage":25,"bgImage":26,"posterImage":202,"relatedSolution":25},75,"heberger-forgejo",{"fr":190,"en":192,"ar":193},"host-forgejo-on-your-own-vps","استضافة-forgejo-على-خادم-vps-الخاص-بك","Héberger Forgejo sur votre VPS : guide complet 2025","Installez Forgejo sur votre VPS avec Docker, SSL, runners Actions et sécurité renforcée. Guide pas-à-pas de 1900 mots pour une forge Git souveraine.",10,1,"2026-04-06T00:00:00+00:00",{"id":179,"name":180,"slug":181,"color":182,"icon":183},[201],{"id":179,"name":180,"slug":181,"color":182,"icon":183},"\u002Fblog\u002Fcovers\u002Fheberger-forgejo-poster.svg",{"id":204,"slug":205,"slugs":206,"title":209,"excerpt":210,"readTime":176,"views":197,"isPinned":16,"publishedAt":211,"category":212,"categories":213,"featuredImage":25,"bgImage":26,"posterImage":215,"relatedSolution":25},212,"woodpecker-ci-pipeline-vps-forgejo",{"fr":205,"en":207,"ar":208},"woodpecker-ci-and-forgejo-cicd-pipeline-on-a-vps","woodpecker-ci-وforgejo-خط-أنابيب-cicd-على-خادم-vps","Woodpecker CI et Forgejo : pipeline CI\u002FCD sur VPS","Déployez Woodpecker CI avec Forgejo sur votre VPS pour un pipeline CI\u002FCD open source auto-hébergé, léger et souverain. Guide Docker pas à pas.","2026-08-02T00:00:00+00:00",{"id":19,"name":20,"slug":21,"color":22,"icon":21},[214],{"id":19,"name":20,"slug":21,"color":22,"icon":21},"\u002Fblog\u002Fcovers\u002Fwoodpecker-ci-pipeline-vps-forgejo-poster.svg",1787580971938]