La version 1.0.0 de Bazel est disponible,
l'outil open source de Google pour compiler et générer la plupart de ses applications

Les ingénieurs de Google ont annoncé cette semaine la disponibilité de la première version stable de Bazel, l’outil qu’ils utilisent pour compiler et générer la plupart des applications de l’entreprise. La version 1.0.0 de l’outil apparaît quatre années après que Google l’ait publié en open source et apporte de nombreuses améliorations et de nouvelles fonctionnalités. Google a aussi annoncé qu’à partir de Bazel v1.0.0, il utilisera le versioning sémantique pour toutes les versions de Bazel, ce qui signifie que toutes les versions 1.x, par exemple, seront rétrocompatibles avec Bazel v1.0.0.

Bazel est un outil logiciel gratuit permettant l'automatisation de la construction et du test de logiciels développé par Google. En effet, Bazel est une version open source de l’outil de construction Blaze utilisé en interne par Google. Bazel (anagramme de Blaze) a été publié en 2015 par Google et n’était alors disponible que pour les environnements Linux et macOS. Il a apporté beaucoup de souplesse dans les opérations de build des logiciels Google. Depuis, Google s’est efforcé de le rendre disponible également pour les utilisateurs Windows.

Bazel utilise un langage de construction de haut niveau, lisible par l'homme. Bazel prend en charge des projets écrits dans plusieurs langages (Java, Go, C++, Python, Objective-C, etc.) et crée des sorties pour plusieurs plateformes. Les règles et les macros sont créées dans le langage Starlark (anciennement appelé Skylark), un dialecte de Python. Bazel peut produire des packages d'applications logicielles adaptés au déploiement pour les systèmes d'exploitation Android et iOS. Voici les principaux avantages que Google cite pour son outil :

  • langage de construction de haut niveau : Bazel utilise un langage abstrait et lisible par l'homme pour décrire les propriétés de construction de votre projet à un niveau sémantique élevé. Contrairement à d'autres outils, Bazel fonctionne sur les concepts de bibliothèques, de binaires, de scripts et d'ensembles de données, vous protégeant de la complexité de l'écriture d'appels individuels vers des outils tels que des compilateurs et des linkers (éditeurs de liens) ;
  • Bazel est rapide et fiable : Bazel met en cache tout le travail effectué précédemment et suit les modifications apportées au contenu des fichiers et aux commandes de compilation. De cette façon, Bazel sait quand quelque chose doit être reconstruit, et ne reconstruit que cela. Pour accélérer encore plus vos constructions, vous pouvez mettre en place votre projet pour construire de manière très parallèle et incrémentale ;
  • Bazel est un outil multiplateforme : Bazel fonctionne sous Linux, macOS et Windows. Il peut construire des binaires et des packages déployables pour plusieurs plateformes, y compris le bureau, le serveur et le mobile, à partir du même projet ;
  • Bazel est extensible : il supporte de nombreux langages, mais vous pouvez aussi étendre Bazel pour supporter tout autre langage ou framework.

Lors de la conception de Bazel, l'accent a été mis sur la vitesse de construction, la correction et la reproductibilité. Il utilise la parallélisation pour accélérer certaines parties du processus de construction. Il inclut un langage, Bazel Query, qui peut être utilisé pour analyser les dépendances de construction dans des graphiques complexes de construction. Il aide aussi Google à être plus ouvert : plusieurs grands projets open source de Google, comme Angular et TensorFlow, utilisent Bazel. La version 1.0.0 apporte des améliorations sur l’ensemble de l’outil.

Bazel est un logiciel semblable à d’autres outils de génération tels que Make, Apache Ant ou Apache Maven. Ce dernier est un gestionnaire de compilation Apache pour les projets Java. Maven permet à un projet de construire à l'aide de son modèle d'élément de projet (POM) et d'un ensemble de plug-ins qui sont partagés par tous les projets utilisant Maven, fournissant un système de construction uniforme. Une fois que vous vous familiarisez avec la façon dont un projet Maven se construit, vous savez automatiquement comment tous les projets Maven se construisent.

Parmi ces différents outils, l’on estime que la rapidité est la raison principale pour laquelle les développeurs considèrent Bazel au détriment de ses concurrents, alors que la gestion de la dépendance est considérée comme le facteur clé pour choisir Apache Maven. Bazel et Apache Maven sont tous deux des outils open source. Apache Ant quant à lui est un outil de construction basé sur Java. En théorie, c'est un peu comme Make, sans les rides de Make et avec la portabilité complète du code Java pur. Il existe également d’autres constructeurs comme Gradle.

Nom : Screen%u00252BShot%u00252B2019-10-17%u00252Bat%u00252B11.14.29%u00252BAM.png
Affichages : 27444
Taille : 16,3 Ko

La première version stable de Bazel introduit trois caractéristiques importantes pour l’outil, notamment au niveau du versioning, des supports à long terme (LTS), ainsi que quelques améliorations au niveau des langages pris en charge. À partir de Bazel v1.0.0, Google utilisera le versioning sémantique pour toutes les versions de Bazel. Par exemple, toutes les versions 1.x seront rétrocompatibles avec Bazel v1.0.0. Il y aura une fenêtre d’au moins trois mois entre les sorties majeures. Google publiera aussi des versions mineures de Bazel tous les mois, en coupant dans GitHub HEAD.

D’après Google, les versions LTS (Long-Term Support) donnent aux utilisateurs l'assurance que l'équipe Bazel a la capacité et le processus nécessaires pour fournir rapidement et en toute sécurité des correctifs pour les bogues critiques, y compris les vulnérabilités. Bazel v1.0.0 apporte des fonctionnalités complètes pour Angular, Android, Java et C. Elles comprennent la prise en charge de bout en bout de l'exécution à distance et de la mise en cache, ainsi que la prise en charge des gestionnaires de paquets standard et des dépendances tierces. En détail, les fonctionnalités les plus remarquables concernent le système d’exploitation Windows, l’exécution, la configuration, Android, C++ et Java. Voici de quoi il s’agit dans cette version 1.0.0 :

Windows

  • genrule supporte maintenant les attributs cmd_bash, cmd_ps et cmd_bat pour une meilleure intégration sous Windows ;
  • C++ : vous pouvez maintenant obtenir un fichier DEF généré à partir du groupe de sortie def_file de cc_library ;
  • MSYS2/Bash : les cibles de test ("bazel test//foo"), les cibles binaires ("bazel run //bar"), et les règles de récupération du référentiel ne nécessitent plus MSYS2.

Exécution

  • définissez l'option --experimental_allow_tags_propagation pour propager les balises aux exigences d'exécution de l'action à partir des cibles. De telles balises devraient commencer par : no-, requires-, supports-, block-, disable-, cpu ;
  • toutes les règles ont maintenant un attribut exec_properties par défaut comme celui d'une règle de plateforme ;
  • toutes les connexions gRPC de Bazel sont activées par défaut en TLS. Pour désactiver TLS, utilisez le schéma grpc:// dans vos URI. Les drapeaux affectés le sont : --remote_cache, --remote_executor et --bes_backend.

Configuration

  • config_setting peut maintenant vérifier plusieurs valeurs sur les drapeaux de style --foo=firstVal, --foo=secondVal, ... ;
  • bazelrc spécifique à la plateforme que vous utilisez : avec --enable_platform_specific_config vous pouvez activer des drapeaux dans bazelrc en fonction de votre plateforme hôte.

Android

  • aapt2 est maintenant activé par défaut. Pour revenir à aapt, activez l'option --android_aapt=aapt ;
  • correction de problèmes de chemin d'accès Windows avec aapt2.

C++

  • les règles cc_* supportent les définitions non transitoires via un attribut local_defines ;
  • Bazel supporte maintenant ThinLTO builds sur Linux pour Clang versions 6.0 ou supérieures. ThinLTO peut être activé par --features=thin_lto.

Java

l'API Java-Starlark dépréciée java_common.create_provider est supprimée. D’autres suppressions ont eu lieu également ;
maven_jar et maven_server interdisent maintenant l'utilisation d'URL HTTP simples sans somme de contrôle spécifique. Si vous utilisez toujours maven_jar, pensez à migrer vers rules_jvm_external pour la gestion des dépendances transitives ;
ajout des attributs sha256 et sha256_src dans maven_jar. Veuillez envisager de migrer vers SHA-256, car SHA-1 a été jugé non sécurisé sur le plan cryptographique. Ou, utilisez rules_jvm_external pour gérer vos dépendances transitives de Maven avec l'épinglage d'artefacts et le support de vérification SHA-256.

Vous pouvez trouver de plus amples informations sur ces différentes fonctionnalités dans la documentation de l’outil et dans la note de version de la version 1.0.0 de Bazel. Google espère que cette version permettra aux développeurs d’être plus productifs.

Sources : Bazel, GitHub

Et vous ?

Que pensez-vous de Bazel ?
Quelles sont les fonctionnalités qui vous impressionnent dans cette version 1.0.0 de Bazel ?
Quelles autres solutions similaires avez-vous déjà utilisées ?
Que pensez-vous des compilateurs de ce genre en général ?

Voir aussi

Bazel : l'outil de build utilisé en interne par Google devient open source, les développeurs peuvent désormais participer à son amélioration

La sortie d'Angular 6.0 est prévue pour le 4 avril prochain. Quelles sont les nouveautés attendues pour le framework JavaScript de Google

Google dévoile Nest Wifi, un pack constitué d'un routeur et d'un répéteur Wifi, destiné à résoudre les problèmes de connexion qui peuvent être rencontrés à domicile