Skip to content

BuildBox ​

BuildBox est un outil que j'ai commencé à développer en 2020 dans le cadre de mon emploi chez Trusted Objects.
Son objectif est de faciliter la gestion de projet en équipe et la création de livrables reproductibles à travers un processus unifié, le tout au sein d'un environnement isolé.
En 2026, il a été publié sur GitHub et placé sous licence libre GPLv2 par la société.

Motivations ​

L'équipe R&D chez Trusted Objects avait des besoins récurrents qui ont motivé la création de BuildBox, ces besoins sont détaillés ci-dessous.

Travailler à plusieurs ​

Nous travaillions en équipe sur des projets mêlant plusieurs composants logiciels, et nécessitant souvent de la compilation croisée.
Il y avait une nécessité permanente de se synchroniser sur les changements apportés par chacun, sur les projets eux-mêmes aussi bien que sur leur environnement (chaîne d'outils, processus de livraison).

BuildBox permet de versionner l'ensemble des composants d'un projet : codes sources (via Git), librairies, scripts, chaînes de compilation, et propose une méthode simple pour mettre à jour la copie locale.

Reproductibilité des livrables ​

Il nous fallait également nous assurer de la reproductibilité de nos livrables, pour être en mesure de générer des mises à jour à long terme tout en maîtrisant l'ensemble des composants impliqués.
Il s'est aussi avéré utile de pouvoir comparer deux livraisons d'un même projet, aussi bien sur le code, les librairies et composants logiciels, que sur les outils impliqués.

BuildBox maintient un profil associé à chaque projet qui décrit précisément chaque composant impliqué.

Abstraction des problèmes de dépendances ​

Passer d'un projet à l'autre nécessite souvent beaucoup de dépendances, en particulier lorsque l'on travaille avec des chaînes de compilation différentes et de la compilation croisée. Cela peut demander un certain temps pour préparer un poste de travail avant de pouvoir commencer à développer sur un projet.

Chaque projet BuildBox fonctionne dans un container qui dépend d'une image Docker.
L'image peut être soit l'image générique BuildBox, soit une image dérivée plus spécifique au contexte du projet.
Cette image fournit tout l'environnement nécessaire, aucune dépendance n'est donc requise sur la machine du développeur, si ce n'est d'avoir installé BuildBox.

Processus unifié ​

Compiler, tester, livrer dépend de façon intrinsèque du contexte d'un projet. Nous étions une petite équipe responsable de plusieurs projets, il était donc souhaitable d'avoir une seule façon de réaliser chacune de ces étapes.

BuildBox propose des commandes qui sont toujours les mêmes et qui suivent des recettes décrites dans le profil des projets pour chaque étape du cycle de développement et de livraison.

Réalisation ​

BuildBox a été développé en script shell (compatible Bash et ZSH) et s'organise autour de containers qui fournissent l'environnement des projets.

Chaque instance d'un projet possède son propre container. Celui-ci peut-être créé à partir de l'image générique BuildBox, ou bien à partir d'une image qui en est dérivée.
Les opérations sur le projet (compilation, tests, génération de livrables) se font entièrement dans le container.

L'utilisateur interagit avec BuildBox en ligne de commande via le point d'entrée bbx. Tout ce qui concerne le cycle de vie des containers est transparent.

Structure d'un container BuildBoxStructure d'un container BuildBoxCe que l'hôte prête au container d'un projet, l'image dont il est issu, et les processus qui y tournent.

Une API est fournie pour pouvoir écrire des scripts fonctionnant avec BuildBox dans les containers.

Concepts ​

Voici comment est organisé un projet BuildBox.

Organisation d'un projet BuildBoxOrganisation d'un projet BuildBoxL'organisation d'un projet : ses cibles, les paquets qu'elles embarquent, et les outils qu'elles partagent.

Les paquets représentent les composants logiciels (librairies, programmes, ressources) impliqués dans la construction d'une ou plusieurs cibles.
Les outils peuvent-être très divers : des chaînes de compilation, des scripts, des librairies, ou bien des programmes.

Résultats ​

BuildBox est utilisé dans le processus de développement et de livraison de tous les projets de Trusted Objects depuis 2020.

Son intégration dans Jenkins a permis de simplifier les livraisons, et d'effectuer des tests automatiques périodiquement sur différents projets, avec des Jenkinsfile très similaires malgré les différences importantes de contexte sur chaque projet.

BuildBox étant suffisamment générique et arrivé à une certaine maturité, il a été décidé de le publier sur GitHub sous une licence libre en 2026.

Exemple ​

J'ai mis en place un petit projet d'exemple pour compiler VLC media player avec BuildBox, au travers duquel vous pouvez créer une AppImage x86-64 de VLC media player.

En effet, la compilation de VLC nécessite pas mal de dépendances et plusieurs étapes, mais tout ceci devient bien plus simple au travers de ce projet BuildBox.


Site officiel de BuildBox
GitHub de BuildBox
API BuildBox
Site officiel de Trusted Objects
Image générique sur Docker Hub
Compiler VLC media player avec BuildBox

Contribution de l'IA à ce projet

BuildBox a été développé jusqu'a fin 2025 sans IA, dont l'implication a été introduire en 2026 pour assister le développement de nouvelles fonctionnalités, l'écriture des tests, et la publication sous licence libre.

En savoir plus…