DevOps Builder
Application de bureau Python, en Material Design, pour composer un pipeline DevOps en posant des briques issues du CNCF Landscape. Un moteur de règles bloque les combinaisons incohérentes avant de générer les fichiers à committer.
Ce que fait l'application
On pose des briques du CNCF Landscape dans les étapes d'un pipeline ; l'application vérifie l'ensemble et génère les fichiers à committer.
- Part de l'application : analyse du dossier (langage, port, Dockerfile, CI, bases, migrations) et briques proposées en conséquence ; assistant de démarrage pour un projet neuf.
- Contrôle continu : 53 règles signalent les combinaisons incohérentes, chacune avec sa correction en un clic.
- Génère la CI (GitLab CI, GitHub et Gitea Actions, Jenkins, Woodpecker, Tekton, Azure Pipelines, CodeBuild, Cloud Build), le déploiement (Compose, Helm, Kustomize, Ansible, Argo CD, Flux), l'infrastructure Terraform / OpenTofu sur six clouds et la plateforme Kubernetes.
- Environnements : chaîne de promotion avec approbation de la production, ports et surcharges par environnement.
- Données et secrets : bases autogérées, opérateur ou managées, sauvegardes ; secrets par variables CI, SOPS, Vault / OpenBao ou coffre du cloud.
- Sécurité et qualité : SAST, analyse d'images, signature, DAST avec ZAP, connexion unique (Keycloak, Dex).
- Exploitation : supervision (Prometheus, Grafana, Zabbix), dimensionnement des machines, Renovate.
- Mode d'emploi :
docs/mise-en-route.md, les gestes à faire une fois, avec les commandes déjà remplies. - Prise en charge déclarée : chaque brique est prise en charge, expérimentale ou à configurer à la main (matrice) ; des scénarios de bout en bout exécutent les fichiers générés pour de vrai, chaque nuit.
- Livraison : validation locale, test dans kind, écriture prudente (fichiers retouchés préservés), export Git avec demande de fusion.
Le détail de chaque fonction, avec les captures d'écran : docs/fonctionnalites.md.
Installation
Avec Python (3.11 à 3.14), par pipx qui isole l'application :
pipx install izinum-devops-builder # sous macOS : pipx install --python python3.13 izinum-devops-builder
pipx inject izinum-devops-builder check-jsonschema actionlint-py shellcheck-py # linters de la validation, facultatif
devops-builder # l'interface ; devops-builder --help pour la ligne de commande
Le paquet s'appelle izinum-devops-builder sur PyPI (« devops-builder » y était déjà pris) ; la commande reste
devops-builder. PySide6 est limité aux versions 6.11 (la 6.12.0 fait planter l'interpréteur) et ne s'installe pas
sous Python 3.15. Sous Linux, Qt a besoin des bibliothèques système habituelles (libxkbcommon, libEGL,
fontconfig, libxcb-cursor0).
Sans Python : chaque publication porte un exécutable
pour Linux x86-64 (.tar.gz, glibc 2.35 ou plus, Ubuntu 22.04 et suivantes), Windows x86-64 (.zip) et macOS
Apple Silicon (.zip contenant DevOps Builder.app). Décompresser, puis lancer devops-builder (Linux),
devops-builder.exe (Windows) ou l'application. Les exécutables ne sont pas signés pour l'instant :
- Windows : SmartScreen avertit au premier lancement (« Informations complémentaires » → « Exécuter quand même ») ;
- macOS : Gatekeeper refuse une application téléchargée non notariée ; après vérification (ci-dessous), lever la
quarantaine avec
xattr -dr com.apple.quarantine "DevOps Builder.app".
Ce qui remplace la signature pour l'instant : chaque fichier publié (exécutables, paquet PyPI) porte une
attestation de provenance qui prouve qu'il a été construit par le workflow publication.yml de ce dépôt, à partir
de l'étiquette publiée, et la publication donne leurs sommes SHA-256 (SHA256SUMS).
gh attestation verify devops-builder-0.19.0-macos-arm64.zip --repo denvi44/devops-builder
sha256sum -c SHA256SUMS --ignore-missing
Pour travailler sur le code :
python -m venv .venv
source .venv/bin/activate # Windows : .venv\Scripts\activate
pip install -e ".[dev]"
devops-builder # ou : python -m devops_builder
Utilisation
| Action | Comment |
|---|---|
| Ajouter une brique | Glisser depuis le catalogue, ou double-clic / Entrée |
| Déplacer une brique | Glisser vers une colonne compatible, ou Alt+← / Alt+→ (saute à l'étape autorisée suivante) |
| Retirer une brique | Suppr, ou bouton dans Propriétés |
| Corriger un diagnostic | Sélectionner le diagnostic puis cliquer une correction (Entrée applique la première) |
| Nouveau projet | Ctrl+N : assistant, qui commence par le dossier de l'application ; Ctrl+Maj+N : projet vide |
| Application | Ctrl+Maj+A, ou la carte de l'application dans la barre du projet : dossier, analyse, langage, port |
| Paramètres du projet | F2 : cible, langage, SecNumCloud, OIDC, politique de licence ; onglet Environnements (type, cluster, hôte Docker partagé, décalage des ports) |
| Ports | Ctrl+Maj+P, ou le bouton « Ports » de la barre du projet |
| Surcharger un paramètre | Sélectionner la brique, choisir l'environnement au-dessus du formulaire ; un champ vide hérite de la valeur commune |
| Générer | Ctrl+G : aperçu des fichiers, puis export vers Git, dans un dossier (avec différences) ou en .zip |
| Valider | Ctrl+Maj+V : contrôles locaux, puis test dans kind |
| Annuler / rétablir | Ctrl+Z / Ctrl+Y |
| Rechercher | Ctrl+F ; Ctrl+2 pour le pipeline, Ctrl+3 pour les diagnostics |
| Thème sombre | Ctrl+T |
Quatre projets d'exemple sont fournis dans Fichier › Ouvrir un exemple : un site web sur hôte Docker, une API sur k3s en GitOps, une plateforme AWS EKS en OpenTofu et une boutique avec PostgreSQL, Valkey et migrations sur un hôte partagé.
En ligne de commande
devops-builder check projet.devops.yaml # --json ; code retour 1 si erreur bloquante
devops-builder generate projet.devops.yaml -o sortie/ # --dry-run, --overwrite, --force, --json
devops-builder validate projet.devops.yaml # --offline, -v, --json ; code retour 1 si un contrôle échoue
devops-builder test-kind projet.devops.yaml --env dev --app-dir ../code
devops-builder export-git projet.devops.yaml --repo ../depot # --branch, --no-push, --no-request
devops-builder catalog-check # --offline, --refresh, --apply, --report rapport.md
devops-builder catalog-import "Keptn" # --id, --stage, --license, --offline
devops-builder landscape-refresh # --source landscape.yml, --reset
devops-builder scan ../mon-app # --json : ce que l'analyse trouve
devops-builder init ../mon-app -o mon-app.devops.yaml # --hosting, --cloud, --envs, --database
generate n'écrase plus les fichiers retouchés à la main : il les liste, et --overwrite les remplace.
Les codes de sortie (0 succès, 1 problème trouvé, 2 utilisation ou fichier illisible) et la sortie --json forment un contrat stable, décrit dans docs/ligne-de-commande.md. Le format du fichier projet, ses migrations et la promesse de compatibilité sont dans docs/format.md : un fichier de n'importe quelle version précédente s'ouvre, un fichier d'une version plus récente garde ses champs inconnus, un format plus récent est refusé avec un message clair. Les changements de chaque version sont dans CHANGELOG.md.
Ce qui est généré
| Domaine | Formats |
|---|---|
| CI | GitLab CI, GitHub Actions, Gitea Actions, Jenkinsfile, Woodpecker, Tekton, Azure Pipelines, AWS CodeBuild, Google Cloud Build |
| Déploiement | Docker Compose, chart Helm, Kustomize, Application Argo CD, Flux (GitRepository + Kustomization ou HelmRelease), playbooks Ansible |
| Données | Services Compose (volume, santé, deploy/secrets.sh, scripts/db-backup.sh, scripts/db-restore.sh), bases du poste (dev/db/), sauvegardes CloudNativePG (ObjectStore, ScheduledBackup, bucket et identité Terraform), StatefulSet et Secret dans le chart ou la base Kustomize, Cluster CloudNativePG, Terraform des bases managées (outputs.tf), service migrate ou initContainer de migrations |
| Mise en route | docs/mise-en-route.md : commandes de mise en place, dans l'ordre, propres au projet |
| Identité | Keycloak (service Compose et sa base, ou opérateur et ressource Keycloak), realm en Terraform (infra/keycloak/), Dex (chart ou service Compose), valeurs OIDC d'Argo CD et de Grafana, auth/oidc du coffre |
| Secrets | .sops.yaml, scripts/secrets-fetch.sh, scripts/secrets-seed.sh et scripts/vault-setup.sh (SOPS, Vault, OpenBao, coffres des clouds), ClusterSecretStore et ExternalSecret (chart ou overlays), configuration serveur de Vault et OpenBao (Compose), secrets écrits par Terraform dans AWS Secrets Manager, Google Secret Manager et Azure Key Vault, identité du contrôleur External Secrets (EKS Pod Identity, Workload Identity de GKE et d'AKS) |
| Infrastructure | Terraform / OpenTofu : machines de déploiement des six clouds (cloud-init, pare-feu, sortie hosts), providers épinglés, backend d'état chiffré et verrouillé (S3, GCS, Blob, Scaleway, OVHcloud ; Outscale sans verrou), ressources AWS, Google Cloud, Azure, OVHcloud, Scaleway, outputs.tf, terraform.tfvars.example, .gitignore, .tflint.hcl |
| Clusters autogérés | Scripts d'installation k3s, RKE2, kubeadm, MicroK8s, kind, minikube, réglés selon le CNI et l'entrée choisis (par exemple, k3s sans Flannel ni Traefik intégrés quand Cilium et Traefik sont dans le pipeline) |
| Plateforme | platform/install.sh (charts Helm officiels, sans réinstaller ce que le cluster fournit déjà) ou services Compose sur hôte Docker |
| Dépendances | renovate.json, .github/dependabot.yml (écosystèmes déduits du langage, du build, de la CI et de l'IaC) |
| Observabilité managée | Module CloudWatch sur EKS, Azure Monitor (Log Analytics) sur AKS ; Cloud Monitoring, intégré à GKE, est noté dans le rapport |
| Authentification cloud | OIDC par défaut : rôle IAM, Workload Identity Federation, fédération Entra ID |
| Outillage local | scripts/tf-inventory.sh (inventaire Ansible depuis les sorties Terraform), scripts/test-kind.sh (Helm ou Kustomize), scripts/ci-variables.sh (GitLab, GitHub, Gitea, Azure Pipelines), scripts/tf-floci.sh et dev/floci/ (émulateur AWS) |
| Promotion | Un job de déploiement par environnement, enchaînés dans l'ordre. Approbation : job manuel (GitLab), environnement avec relecteurs (GitHub, Gitea, Azure Pipelines), input (Jenkins), événement manuel (Woodpecker), fichiers séparés à déclencher après validation (Tekton, CodeBuild, Cloud Build) |
Les fichiers générés sont un point de départ à relire. Les tests valident chaque sortie YAML contre les schémas officiels (GitLab CI, GitHub Workflows, Azure Pipelines, Cloud Build, Woodpecker, Compose, Renovate, Dependabot) et passent les workflows GitHub dans actionlint. helm lint n'est pas lancé par les tests ; tofu validate l'est sur toutes les piles de l'instantané quand DEVOPS_BUILDER_TOFU_MIRROR désigne un miroir local de providers (le module EKS, servi par le registre, y est remplacé par un module factice). Le bouton Valider lance les deux sur le poste quand les outils et le réseau sont disponibles.
Organisation du code
devops_builder/
model.py fiches, projet, format .devops.yaml
catalog.py chargement des fiches + index du Landscape
rules.py moteur de règles, handlers génériques, corrections
ir.py représentation intermédiaire neutre du pipeline
generators/ ci, deploy, data (bases), iac, platform, extras (dépendances, clusters), report
ui/ interface PySide6 + qt-material
params.py validation et valeurs effectives des paramètres (surcharges par environnement)
starter.py assistant de démarrage : réponses → projet
validate.py contrôles locaux des fichiers générés
sync.py différences et écriture prudente (manifeste d'empreintes)
gitexport.py branche, commit, push, demande de fusion
health.py entretien du catalogue (Landscape, GitHub, GitLab.com)
catalog_edit.py fiches personnelles et corrections
landscape.py index du Landscape : construction, rafraîchissement, écarts
userdata.py dossier personnel (DEVOPS_BUILDER_HOME)
ports.py ports par environnement, hôtes partagés, conflits
databases.py bases du pipeline : moteurs, modes (autogérée, opérateur, managée), connexion
appscan.py analyse du dossier de l'application
compat.py briques adaptées au projet (filtre de la palette)
data/ports.yaml ports par défaut des briques et leur usage
suggest.py briques souvent associées
data/catalog/ fiches YAML (une par outil)
data/params.yaml schémas des paramètres de briques
data/suggestions.yaml briques souvent associées
data/rules/ une règle YAML par fichier
data/examples/ projets de référence
tools/
build_landscape_index.py rafraîchit l'index depuis landscape.yml
screenshot.py captures hors écran de l'interface
tests/ règles, générateurs, interface (hors écran), non-régression
golden/ sorties figées de 156 projets (exemples, matrice, échantillon de l'assistant, environnements, ports, données, IaC, Floci, Ansible et machines)
data/legacy/ projets enregistrés par chaque version, de la 0.1 à la 0.18
minihelm.py rendu des gabarits Helm générés, sans le binaire helm
tools/compare_captures.py écart visuel entre deux séries de captures
Ajouter un outil
Pour un usage personnel ou d'équipe, passer par le catalogue personnel (palette › clic droit › Créer une fiche, ou devops-builder catalog-import). Pour l'ajouter à l'application, ajouter une entrée dans un fichier de data/catalog/ : étape principale (stage) et, s'il le faut, étapes secondaires (extra_stages), rôles, cibles (hosting), capacités fournies et requises, forge, fournisseur, cycle de vie, date de vérification. Le schéma est validé au chargement.
Si l'outil a des réglages, décrire ses paramètres dans data/params.yaml : libellé, type, valeur par défaut ({app} = nom de l'image du projet), valeur d'exemple, liste de choix ou de suggestions, motif et explication du format. Le formulaire et les règles R32 à R34 s'en déduisent. Une valeur par défaut qui ne respecte pas son propre motif est refusée au chargement.
Un outil ne peut être posé que dans stage ou extra_stages. Par exemple, Ansible va en Infrastructure ou Déploiement, et Trivy en Sécurité ou Tests & qualité. Les entrées non vérifiées du Landscape reçoivent des étapes déduites de leur sous-catégorie. La règle R25 bloque la génération si un fichier .devops.yaml édité à la main place une brique ailleurs, et propose de la déplacer.
Ajouter une règle
Créer data/rules/R45_....yaml avec un type existant (exclusive_role, conflict_pair, requires, requires_generic, lifecycle, target_mismatch, params…), puis ajouter son cas dans tests/test_rules.py. Un nouveau type de règle s'écrit comme un handler dans rules.py.
Rafraîchir le Landscape
Depuis l'application ou avec devops-builder landscape-refresh, pour son propre index. Pour l'index livré avec l'application :
curl -LO https://raw.githubusercontent.com/cncf/landscape/master/landscape.yml
python tools/build_landscape_index.py landscape.yml
Les deux signalent les entrées ajoutées, retirées et nouvellement archivées, pour savoir quelles fiches revoir.
Tests
pip install -e ".[dev]"
QT_QPA_PLATFORM=offscreen pytest
931 tests : un par règle, l'application de chaque correction proposée, une matrice de combinaisons CI × déploiement × cloud × environnements validées contre les schémas, avec contrôle qu'aucune brique n'y reste sans fichier, les 15 300 combinaisons de l'assistant (aucune ne doit produire d'erreur bloquante), la validation, l'écriture prudente, l'export Git vers des dépôts locaux (dont les options de push GitLab), les scripts kind et variables CI contre des outils factices et une fausse API Gitea, l'entretien du catalogue contre une fausse API GitHub et GitLab, l'analyse d'applications Python, Node.js, Java, Go et .NET (dont leurs bases et migrations), les bases de données sur chaque cible (rendu du chart, Kustomize, script de secrets exécuté, format Terraform), l'état et les variables Terraform de chaque cloud, Floci dans chaque CI, les playbooks Ansible passés à --syntax-check et ansible-lint, les machines de chaque cloud et le script d'inventaire contre une sortie Terraform simulée, l'identité (realm appliqué à un vrai Keycloak 26.8 puis relu sans écart, connexion OIDC à OpenBao d'un membre du groupe admins et refus d'un non-membre, ressource Keycloak contre le schéma de sa CRD), les données (sauvegarde puis restauration contre un vrai PostgreSQL, formats de connexion dans chaque cible, ressources CloudNativePG contre les schémas des CRD), les secrets (SOPS chiffré puis déchiffré avec age, écriture et lecture contre un faux Vault avec connexion JWT, ExternalSecret rendus dans le chart et les overlays, secrets écrits par Terraform pour chaque cloud, vault-setup.sh contre un faux coffre qui enregistre ses appels, mode d'emploi dont chaque commande passe bash -n et ShellCheck), la prise en charge déclarée de chaque fiche confrontée aux générateurs (projets de référence et sondes par cible), le contrat de la ligne de commande (codes de sortie, sortie --json, fichiers illisibles), la cohérence entre l'assistant et le filtre de la palette, le catalogue personnel et le rafraîchissement du Landscape, et l'interface pilotée hors écran : glisser-déposer, formulaire de paramètres, surcharges, éditeur d'environnements, assistant, dialogues de validation, de différences, d'export, d'entretien, de fiche, de ports et d'application, et la largeur minimale de la fenêtre (1 280 px au plus). Toute exception levée dans un slot Qt fait échouer le test en cours. Les tests utilisent un dossier personnel jetable : un catalogue personnel présent sur le poste ne les influence pas.
La CI les passe sous Python 3.11 à 3.13, et une fois avec tous les outils installés (OpenTofu et un miroir de ses providers, kubeconform, sops, age, Ansible, PostgreSQL) : là, un test sauté fait échouer (DEVOPS_BUILDER_TESTS_COMPLETS=1). En local, python tools/miroir_tofu.py ~/miroir-tofu puis DEVOPS_BUILDER_TOFU_MIRROR=~/miroir-tofu pytest ajoute tofu validate sur chaque pile Terraform des projets de référence.
Non-régression
tests/test_regression.py compare tout ce que génèrent 183 projets (fichiers et diagnostics) à l'instantané de tests/golden/, et recharge les projets enregistrés par chaque version précédente (tests/data/legacy/, de la 0.1 à la 0.18 : ouverts, contrôlés, générés, réenregistrés sans perte de valeur). À chaque version, des fichiers écrits par la précédente rejoignent ce corpus ; un test le vérifie. Après un changement voulu :
UPDATE_GOLDEN=1 pytest tests/test_regression.py
git diff tests/golden # chaque ligne changée doit s'expliquer
Tests de bout en bout (tools/e2e/run.py, workflow « Bout en bout », chaque nuit et à la demande) : les fichiers générés sont exécutés sur les machines de GitHub Actions, sans modification — chart Helm et overlays Kustomize dans kind, Compose sur un hôte Docker avec sauvegarde et restauration, OpenBao et External Secrets, Keycloak (opérateur et Compose) avec son realm OpenTofu, Dex jusqu'à la page d'autorisation de la forge, SOPS avec les lignes mêmes de la CI, Zabbix et son mode d'emploi, ZAP, et Argo CD synchronisé depuis un dépôt Git par le job de déploiement de la CI. Chaque scénario publie ses preuves en annotations ; python tools/e2e/run.py <scénario> --plan montre les commandes sans rien lancer.
Pour l'interface, tools/screenshot.py refait les captures et tools/compare_captures.py docs/captures nouvelles/ mesure l'écart avec celles de la version précédente.
Limites connues
- Les fiches sont datées du 8 octobre 2026 ; le cycle de vie des outils évolue vite (ingress-nginx, Kaniko, AWS App Mesh, Google Container Registry y sont déjà signalés).
- Bases de données : les gabarits Helm sont vérifiés par un rendu interne (
tests/minihelm.py) puis kubeconform, pas parhelm template; les ressources Terraform des bases managées partofu validatedans la CI (job « Tests avec tous les outils »), sans apply réel. Sur un service serverless (Cloud Run, ECS, Azure Container Apps), l'URL de connexion se branche à la main ;PIPELINE.mddonne la commande, et avec le coffre du cloud la pile Terraform y écrit déjà l'URL. Le mot de passe d'une base autogérée se limite aux caractères sûrs dans une URL (lettres, chiffres,. _ ~ -). - Identité : Dex est exécuté de bout en bout sur hôte Docker, pas encore sur Kubernetes ; SonarQube Community se relie à Keycloak en SAML (réglages par l'API du mode d'emploi), à Dex non (authentification GitHub ou GitLab de SonarQube) ; avec Dex, le groupe d'administration est le groupe de la forge (paramètre « Groupe ou organisation »). La base de Keycloak sans CloudNativePG est un StatefulSet à une instance.
- Secrets : l'initialisation et le descellement du coffre restent manuels (clés à garder hors de l'hôte), tout comme la création d'un accès d'administration nominatif avant de révoquer le jeton racine. Avec un coffre du cloud sur un cluster d'un autre fournisseur (k3s, Kapsule…), l'identité d'External Secrets reste à poser à la main. Les jobs d'infrastructure de la CI ont des droits étendus (AdministratorAccess, Editor, Contributor), les autres jobs une identité limitée ; ces droits réduits n'ont pas encore été éprouvés sur un vrai compte cloud, et avec GitLab la séparation tient aux variables (son jeton ne distingue pas les jobs). La connexion par JWT n'est générée que pour GitLab CI et GitHub Actions (les autres CI passent par
VAULT_TOKEN). SOPS est réglé pour age seulement. Les secrets écrits par Terraform passent par l'état : backend chiffré à accès restreint. Les ressources External Secrets ont été validées contre les schémas des CRD, les scripts contre OpenBao 2.4, SOPS 3.11 et age, sans cluster réel. - Terraform : azurerm reste en 4.x (la 5.0 de juillet 2026 change des schémas, migration à valider). Le backend Outscale n'a pas de verrou d'état (écriture conditionnelle non documentée par OOS) : la CI sérialise les apply, mais un apply lancé à la main pendant un job reste possible. Un seul état porte tous les environnements.
- Machines : le réseau est celui par défaut du cloud (VPC par défaut d'AWS, réseau « default » de Google Cloud) ou un réseau minimal (Azure) ; pas d'adresse IP fixe hors Azure et Outscale, ni d'équilibreur de charge. Les instances OVHcloud n'ont pas de pare-feu : le poser à la main. Le premier déploiement suppose l'apply de la pile déjà fait. La création des machines n'a été vérifiée que par
tofu validate, sans apply réel. - Floci : dans la CI, l'émulateur tourne sans socket Docker ; le plan passe, mais EKS, RDS ou Lambda ne peuvent être créés qu'en local, et un
applysur Floci échoue sur les ressources qui référencent un réseau existant (VPC, groupe de sous-réseaux) donné par une valeur factice. Jenkins, Tekton, Azure Pipelines, CodeBuild et Cloud Build ne démarrent pas Floci (PIPELINE.mdle signale). - OKS (Outscale) et Azure Container Apps n'ont pas de ressource Terraform générée : seul un commentaire est écrit, et R31 les signale. La prise en charge d'OKS par le provider
outscale/outscalereste à vérifier. - RKE2 : le contrôleur d'entrée embarqué dépend de la version ; le script indique comment le désactiver mais ne le fait pas.
- Renovate : job planifié généré pour GitLab CI et Gitea Actions ; pour les autres CI, à créer (expliqué dans
PIPELINE.md). - Argo CD et Flux : avec un cluster par environnement, les clusters distants doivent être enregistrés auprès de l'instance GitOps (
argocd cluster add, ou un Flux par cluster) ; c'est indiqué dansPIPELINE.md. - Woodpecker, Tekton, CodeBuild et Cloud Build n'ont pas de porte d'approbation native : la production part d'un déclenchement manuel ou d'un fichier séparé, et la restriction de qui peut le lancer se règle dans l'outil.
- Le contrôle Helm demande
helmsur le poste, et le test kind demande Docker, kind et kubectl. Le script kind a été vérifié en dry-run contre un vrai serveur d'API Kubernetes, et son déploiement complet seulement avec des outils factices. scripts/ci-variables.shne couvre pas Jenkins, Woodpecker, Tekton, CodeBuild ni Cloud Build : leurs secrets restent à déclarer à la main (liste dansPIPELINE.md).- Export Git : la pull request GitHub demande
gh auth login; sans cela, et pour Gitea, Bitbucket et Azure DevOps, il faut cliquer le lien de création proposé. - Une brique issue du Landscape sans fiche n'est contrôlée par aucune règle et ne produit aucun fichier : en faire une fiche personnelle. Une fiche personnelle est contrôlée par les règles, mais aucun générateur ne la connaît : elle apparaît dans « À configurer à la main ».
- L'entretien n'interroge que GitHub et GitLab.com ; un dépôt hébergé ailleurs (Gitea, Codeberg, GitLab autohébergé) n'est suivi que par le Landscape et la date de vérification.
- L'authentification cloud par OIDC n'est générée que pour GitLab CI et GitHub Actions. Gitea Actions reprend les actions GitHub, mais l'émission du jeton dépend de l'instance. Jenkins, Woodpecker, Tekton, Azure Pipelines et Cloud Build reposent sur des secrets ou sur l'identité du service.
Contribuer
Les contributions sont bienvenues, en français : voir CONTRIBUTING.md (poste de développement, projets de référence, ajout d'une fiche, d'une règle ou d'un générateur), la feuille de route et le code de conduite. Une vulnérabilité se signale en privé : SECURITY.md.
Licence
DevOps Builder est distribué sous la licence Apache 2.0 ; voir aussi NOTICE et les licences tierces (PySide6 est sous LGPL-3.0, données dérivées du CNCF Landscape). Les fichiers que l'application génère pour votre projet vous appartiennent : la licence de DevOps Builder ne s'y applique pas, placez-les sous celle de votre choix.
Metadata
Release files for izinum-devops-builder 0.19.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| izinum_devops_builder-0.19.0.tar.gz | 5.3 MB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| izinum_devops_builder-0.19.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 5.7 MB
Release files / izinum_devops_builder-0.19.0.tar.gz
| Download URL | izinum_devops_builder-0.19.0.tar.gz |
|---|---|
| Size | 5.3 MB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
2715efb718e0e9594bbf2e05282bc4017f75cf1f013a8bf11e040d1156e3ccf4
|
|
BLAKE2b-256 checksum How to use checksums |
bcbf621beb3fca928d3daf8de1eee703a5a753c7eccb177d78ddf885cc95fcfa
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 16, 2026.
Transparency logRelease files / izinum_devops_builder-0.19.0-py3-none-any.whl
| Download URL | izinum_devops_builder-0.19.0-py3-none-any.whl |
|---|---|
| Size | 429.0 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
0ecee6573a24a77e45f1aa7092274c1e8c903c593c809250b44342cf8b26e891
|
|
BLAKE2b-256 checksum How to use checksums |
de3281412159412a0dc35e7f1f2d1254283874d1e23d594b59ff930872c56f6b
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 16, 2026.
Transparency log