# bazel

Published articles for bazel.

This is one page of public article previews, not the complete archive. Follow Next page to continue. Summaries are not the original full articles.

## Updates on HEIR, the homomorphic encryption compiler project

DevFeed: [Updates on HEIR, the homomorphic encryption compiler project](<https://devfeed.tech/articles/updates-on-heir-the-homomorphic-encryption-compiler-project-40496.md>)

Original publisher: [Read original article](<https://www.jeremykun.com/2026/09/04/updates-on-heir-homomorphic-encryption/>)

Published: 2026-09-04T18:53:40Z

Content type: article

Language: en

Sources: [Jeremy Kun](<https://devfeed.tech/sources/jeremy-kun.md>)

Topics: [homomorphic encryption](<https://devfeed.tech/topics/homomorphic-encryption.md>), [Compiler](<https://devfeed.tech/topics/compiler.md>), [Encryption](<https://devfeed.tech/topics/encryption.md>), [Cryptography](<https://devfeed.tech/topics/cryptography.md>), [Machine learning](<https://devfeed.tech/topics/machine-learning.md>), [Inference](<https://devfeed.tech/topics/inference.md>), [GitHub](<https://devfeed.tech/topics/github.md>), [bazel](<https://devfeed.tech/topics/bazel.md>), [Kaggle](<https://devfeed.tech/topics/kaggle.md>)

Tags: [bazel](<https://devfeed.tech/tags/bazel.md>), [ckks](<https://devfeed.tech/tags/ckks.md>), [compiler](<https://devfeed.tech/tags/compiler.md>), [cryptography](<https://devfeed.tech/tags/cryptography.md>), [encryption](<https://devfeed.tech/tags/encryption.md>), [github](<https://devfeed.tech/tags/github.md>), [homomorphic-encryption](<https://devfeed.tech/tags/homomorphic-encryption.md>), [inference](<https://devfeed.tech/tags/inference.md>), [kaggle](<https://devfeed.tech/tags/kaggle.md>), [mathematics](<https://devfeed.tech/tags/mathematics.md>), [ml](<https://devfeed.tech/tags/ml.md>), [programming](<https://devfeed.tech/tags/programming.md>)

### AI overview

This companion article explains HEIR, a homomorphic encryption compiler that converts programs to operate directly on encrypted data. It discusses compiling pre-trained machine-learning models for private inference, describes the repository and setup, and reports an example involving encrypted credit-card fraud detection.

### Source excerpt

On 2026-08-14 I published an article on the Google Security blog with an update on HEIR, our homomorphic encryption (HE) compiler. This is a companion article, in which I have no limits on word count or jargon, and I can feel free to be honest. So strap in. Assuming you won't read the linked corporate blog post, HEIR is a compiler that converts an input program to a program that operates directly on encrypted data.

## Dynamic Derivations + Dynamic build graphs: next steps

DevFeed: [Dynamic Derivations + Dynamic build graphs: next steps](<https://devfeed.tech/articles/dynamic-derivations-dynamic-build-graphs-next-steps-31350.md>)

Original publisher: [Read original article](<https://discourse.nixos.org/t/dynamic-derivations-dynamic-build-graphs-next-steps/79409>)

Author: tomberek

Published: 2026-08-07T18:58:35Z

Content type: opinion

Language: en

Sources: [Announcements - NixOS Discourse](<https://devfeed.tech/sources/announcements-nixos-discourse.md>)

Topics: [Nix](<https://devfeed.tech/topics/nix.md>), [build performance](<https://devfeed.tech/topics/build-performance.md>), [systems](<https://devfeed.tech/topics/systems.md>), [build times](<https://devfeed.tech/topics/build-times.md>), [bazel](<https://devfeed.tech/topics/bazel.md>)

Tags: [announcements](<https://devfeed.tech/tags/announcements.md>), [bazel](<https://devfeed.tech/tags/bazel.md>), [build](<https://devfeed.tech/tags/build.md>), [ci](<https://devfeed.tech/tags/ci.md>), [incremental](<https://devfeed.tech/tags/incremental.md>), [performant](<https://devfeed.tech/tags/performant.md>), [ux](<https://devfeed.tech/tags/ux.md>)

### AI overview

A proposal for a Dynamic Derivations working group in the Nix ecosystem outlines collaboration goals, user-experience refinement, infrastructure needs, and adoption efforts. The post also summarizes the feature's development history and discusses potential benefits such as faster rebuilds and fine-grained incremental builds.

### Source excerpt

After the long-history (see below) of Dynamic Derivations we are at a point where there are many groups exploring the feature and I am proposing a working group to: share the experiences of the implementors refine the user experience based on usage of the various PoCs determine infrastructure needs deduplicate work raise awareness build momentum for adoption ... anything else relevant I believe this feature has the potential to be a game-changer. Faster rebuilds, easier development, reduced pressure on CI systems, cacheable and alternative forms of instantiation, less need for "lang2nix", close the gap with Bazel, and fine-grained incremental builds. Along with the existing work on better schedulers, RBE-style remote builders, bytecode evaluation, parallel eval, memory optimizations (thanks @xokdvium !), and so much more - this is an exciting time for Nix and I can see DynDrvs as a way to fix some of the outstanding UX issues Nix has in day-to-day usage. There is even work to make IFD more performant, there is lots of design space to explore here. This should be a part of what Nix has to offer the world. @Ericson2314 has devoted years to this, and it deserves the payoff of becoming a mature feature. This is a call to action. Let's consider collaboration and a semimonthly meeting to at least say hello + consider next steps: Dynamic Derivations Working Group - Crab Fit History Dynamic Derivations have been in-progress for a long time. This has much of the history that I can put together. Let me know if this can be more complete. (and if anyone can help move/migrate into the wiki?) Build Systems à la Carte : 2018 RFC started Apr 2021 by @Ericson2314 and @L-as with [RFC 0092] Computed derivations by Ericson2314 - Pull Request #92 - NixOS/rfcs - GitHub (after reworking RFC 0040). Based on Initial example PoC by @L-as GitHub - L-as/nix-build.nix: nix-build.nix with RFC 92 - GitHub Content-addressed Nix Dec 2021: Implementing a content-addressed Nix by @thufschmitt. RFC Shep

## C++-техрадар: что разработчики действительно готовы брать в работу

DevFeed: [C++-техрадар: что разработчики действительно готовы брать в работу](<https://devfeed.tech/articles/c-23087.md>)

Original publisher: [Read original article](<https://habr.com/ru/companies/kaspersky/articles/1067982/>)

Author: Kaspersky\_Lab ("Лаборатория Касперского")

Published: 2026-08-07T13:17:24Z

Content type: article

Language: ru

Sources: ["Лаборатория Касперского" RU](<https://devfeed.tech/sources/ru-2.md>)

Topics: [C++](<https://devfeed.tech/topics/c-plus-plus.md>), [CMake](<https://devfeed.tech/topics/cmake.md>), [PostgreSQL](<https://devfeed.tech/topics/postgresql.md>)

Tags: [bash](<https://devfeed.tech/tags/bash.md>), [bazel](<https://devfeed.tech/tags/bazel.md>), [c-plus-plus](<https://devfeed.tech/tags/c-plus-plus.md>), [clang](<https://devfeed.tech/tags/clang.md>), [cmake](<https://devfeed.tech/tags/cmake.md>), [gdb](<https://devfeed.tech/tags/gdb.md>), [git](<https://devfeed.tech/tags/git.md>), [plus-plus-3a0baa67a2fc](<https://devfeed.tech/tags/plus-plus-3a0baa67a2fc.md>), [postgresql](<https://devfeed.tech/tags/postgresql.md>), [tech-radar](<https://devfeed.tech/tags/tech-radar.md>), [vs-code](<https://devfeed.tech/tags/vs-code.md>)

### AI overview

The article analyzes the C++ portion of a technical radar based on survey responses from developers at C++ Russia and HolyJS. It explains how technologies are assessed across Adopt, Trial, Assess, and Hold categories, emphasizing that the overall distribution of votes matters more than a single dominant response. The supplied evidence specifically notes CMake as a strong performer and PostgreSQL as dividing respondents.

### Source excerpt

В мае на конференциях C++ Russia и HolyJS мы предложили участникам оценить технологии, инструменты и инженерные практики, с которыми они работают или за которыми следят. Так появились данные для двух технических радаров: по экосистеме C++ и по JavaScript. Сырые цифры сами по себе рассказывают немного, поэтому мы отдали результаты на разбор эксперту. Виктор Новиков, руководитель группы разработки в "Лаборатории Касперского", посмотрел на распределения голосов и поделился своим мнением, почему CMake уверенно побеждает, а PostgreSQL раскалывает аудиторию пополам. В этой статье -- его анализ C++-части исследования. Про техрадар JavaScript мы расскажем в другой статье. Посмотреть радар и принять участие в голосовании можно на странице проекта. Читать далее

## Introducing Chainguard OS Packages: Secure ingredients for custom container builds

DevFeed: [Introducing Chainguard OS Packages: Secure ingredients for custom container builds](<https://devfeed.tech/articles/introducing-chainguard-os-packages-secure-ingredients-for-custom-container-builds-13112.md>)

Original publisher: [Read original article](<https://www.chainguard.dev/unchained/introducing-chainguard-os-packages>)

Published: 2026-03-17T00:00:00Z

Content type: article

Language: en

Sources: [Chainguard: Unchained](<https://devfeed.tech/sources/chainguard-unchained.md>)

Topics: [chainguard](<https://devfeed.tech/topics/chainguard.md>), [chainguard os](<https://devfeed.tech/topics/chainguard-os.md>), [container images](<https://devfeed.tech/topics/container-images.md>), [Docker Hardened Images](<https://devfeed.tech/topics/docker-hardened-images.md>), [Vulnerabilities](<https://devfeed.tech/topics/vulnerabilities.md>), [Linux](<https://devfeed.tech/topics/linux.md>), [Automation](<https://devfeed.tech/topics/automation.md>), [Dockerfile](<https://devfeed.tech/topics/dockerfile.md>), [Open Source](<https://devfeed.tech/topics/open-source.md>), [bazel](<https://devfeed.tech/topics/bazel.md>), [chainguard sboms](<https://devfeed.tech/topics/chainguard-sboms.md>), [APK](<https://devfeed.tech/topics/apk.md>)

Tags: [apk](<https://devfeed.tech/tags/apk.md>), [apko](<https://devfeed.tech/tags/apko.md>), [automation](<https://devfeed.tech/tags/automation.md>), [base-images](<https://devfeed.tech/tags/base-images.md>), [bazel](<https://devfeed.tech/tags/bazel.md>), [chainguard](<https://devfeed.tech/tags/chainguard.md>), [chainguard-containers](<https://devfeed.tech/tags/chainguard-containers.md>), [chainguard-libraries](<https://devfeed.tech/tags/chainguard-libraries.md>), [chainguard-os](<https://devfeed.tech/tags/chainguard-os.md>), [chainguard-os-packages](<https://devfeed.tech/tags/chainguard-os-packages.md>), [chainguard-packages](<https://devfeed.tech/tags/chainguard-packages.md>), [chainguard-sboms](<https://devfeed.tech/tags/chainguard-sboms.md>), [container](<https://devfeed.tech/tags/container.md>), [container-images](<https://devfeed.tech/tags/container-images.md>), [cve](<https://devfeed.tech/tags/cve.md>), [dockerfiles](<https://devfeed.tech/tags/dockerfiles.md>), [open-source](<https://devfeed.tech/tags/open-source.md>), [sboms](<https://devfeed.tech/tags/sboms.md>), [secure-software-packages](<https://devfeed.tech/tags/secure-software-packages.md>), [software-packages](<https://devfeed.tech/tags/software-packages.md>), [vulnerabilities](<https://devfeed.tech/tags/vulnerabilities.md>), [zero-cve-packages](<https://devfeed.tech/tags/zero-cve-packages.md>)

### AI overview

Chainguard introduces Chainguard OS Packages, a service providing continuously maintained, enterprise-grade packages and base images for teams that build custom container images. Customers retain control over image composition and build tooling while Chainguard handles package sourcing, rebuilding, vulnerability remediation, and SBOM generation.

### Source excerpt

Chainguard OS Packages are enterprise-grade, zero-CVE packages and base images built and continuously maintained in the Chainguard Factory.

## Everything we announced at Chainguard Assemble 2026

DevFeed: [Everything we announced at Chainguard Assemble 2026](<https://devfeed.tech/articles/everything-we-announced-at-chainguard-assemble-2026-13032.md>)

Original publisher: [Read original article](<https://www.chainguard.dev/unchained/everything-we-announced-at-chainguard-assemble-2026>)

Published: 2026-03-17T00:00:00Z

Content type: article

Language: en

Sources: [Chainguard: Unchained](<https://devfeed.tech/sources/chainguard-unchained.md>)

Topics: [chainguard](<https://devfeed.tech/topics/chainguard.md>), [Security](<https://devfeed.tech/topics/security.md>), [Cloud Native Ecosystem](<https://devfeed.tech/topics/cloud-native-ecosystem.md>), [Containers](<https://devfeed.tech/topics/containers.md>), [CI/CD](<https://devfeed.tech/topics/cicd.md>), [Development](<https://devfeed.tech/topics/development.md>), [Open Source](<https://devfeed.tech/topics/open-source.md>), [ai-coding](<https://devfeed.tech/topics/ai-coding.md>), [bazel](<https://devfeed.tech/topics/bazel.md>), [Docker](<https://devfeed.tech/topics/docker.md>), [Dockerfile](<https://devfeed.tech/topics/dockerfile.md>)

Tags: [2026](<https://devfeed.tech/tags/2026.md>), [ai](<https://devfeed.tech/tags/ai.md>), [ai-agent-skills](<https://devfeed.tech/tags/ai-agent-skills.md>), [ai-coding](<https://devfeed.tech/tags/ai-coding.md>), [bazel](<https://devfeed.tech/tags/bazel.md>), [built-from-source](<https://devfeed.tech/tags/built-from-source.md>), [chainguard](<https://devfeed.tech/tags/chainguard.md>), [chainguard-actions](<https://devfeed.tech/tags/chainguard-actions.md>), [chainguard-agent-skills](<https://devfeed.tech/tags/chainguard-agent-skills.md>), [chainguard-assemble](<https://devfeed.tech/tags/chainguard-assemble.md>), [chainguard-catalog](<https://devfeed.tech/tags/chainguard-catalog.md>), [chainguard-catalog-starter](<https://devfeed.tech/tags/chainguard-catalog-starter.md>), [chainguard-commercial-builds](<https://devfeed.tech/tags/chainguard-commercial-builds.md>), [chainguard-containers](<https://devfeed.tech/tags/chainguard-containers.md>), [chainguard-os-packages](<https://devfeed.tech/tags/chainguard-os-packages.md>), [chainguard-repository](<https://devfeed.tech/tags/chainguard-repository.md>), [chainguard-the-guardener](<https://devfeed.tech/tags/chainguard-the-guardener.md>), [ci-cd](<https://devfeed.tech/tags/ci-cd.md>), [cve](<https://devfeed.tech/tags/cve.md>), [tooling](<https://devfeed.tech/tags/tooling.md>)

### AI overview

Chainguard Assemble 2026 presented Chainguard's response to faster AI-assisted software development and the resulting growth in open source software and security risks. Announcements included Chainguard OS Packages, Chainguard Catalog Starter, and expanded support for secure software development, CI/CD workflows, container images, and AI agent skills.

### Source excerpt

Catch up on all the announcements Chainguard made at Assemble 2026, featuring AI agent skills, CI/CD workflows, and more.

## Bazel rule extensions

DevFeed: [Bazel rule extensions](<https://devfeed.tech/articles/bazel-rule-extensions-25413.md>)

Original publisher: [Read original article](<https://smileykeith.com/2025/10/31/bazel-rule-extensions/>)

Author: Keith Smiley

Published: 2025-10-31T17:00:00Z

Content type: tutorial

Language: en

Sources: [Keith Smiley](<https://devfeed.tech/sources/keith-smiley.md>)

Topics: [Programming](<https://devfeed.tech/topics/programming.md>), [Code](<https://devfeed.tech/topics/code.md>), [Polymorphism](<https://devfeed.tech/topics/polymorphism.md>)

Tags: [bazel](<https://devfeed.tech/tags/bazel.md>), [extensions](<https://devfeed.tech/tags/extensions.md>), [inheritance](<https://devfeed.tech/tags/inheritance.md>)

### AI overview

This article explains Bazel 8.0 rule extensions, which let developers inherit and modify the behavior of existing rules without reimplementing them or maintaining a fork. It presents examples of post-processing rule outputs and manipulating providers, including a use case for consistent debug information across macOS and Linux.

### Source excerpt

One of Bazel's best features is being able to easily write custom rules specific to your project. This is great for many use cases, but when what you really want is to enhance the behavior of existing rules, historically your options have been limited. What you would often do is wrap the existing rule in a macro, and add some number of custom rules to try and achieve the desired effect. When really what you want is to edit the existing rule, without having to re-implement all of its functionality (or maintain a fork). With Bazel 8.0, Googlers added a few new ways to extend existing rules that can help with this use case. In this post we will look at the aptly named rule extensions feature and some practical use cases I have found for it. Basic rule extensions Rule extensions allow you to inherit the behavior of an existing rule, similar to class inheritance in object-oriented programming. Importantly you can make a few modifications to augment the behavior of the rule to your liking. Let's say you have a rule that concatenates the given srcs: def _foo_impl(ctx): output = ctx.actions.declare_file("output.txt") ctx.actions.run_shell( inputs = ctx.files.srcs, outputs = [output], command = "cat {} > {}".format(" ".join([src.path for src in ctx.files.srcs]), output.path), ) return [DefaultInfo(files = depset([output]))] foo = rule( implementation = _foo_impl, attrs = { "srcs": attr.label_list(allow_files = True), }, ) Now let's assume in your project, you want the output file to be sorted. If you own the original rule you could of course change _foo_impl to handle that for you, but if you are relying on a more complex upstream rule, you may not have that luxury. Here's how we can extend this to post-process the file it produces: def _bar_impl(ctx): providers = ctx.super() # Invoke 'foo' and get the providers # NOTE: This assumes there's always only the provider we want. original_output = providers[0].files.to_list()[0] new_output = ctx.actions.declare_file("new_output.tx

## Automating code deletion with Gemini (and a little Python)

DevFeed: [Automating code deletion with Gemini (and a little Python)](<https://devfeed.tech/articles/automating-code-deletion-with-gemini-and-a-little-python-31143.md>)

Original publisher: [Read original article](<https://technicalwriting.dev/2025/04/gn/index.html>)

Published: 2025-04-29T00:00:00Z

Content type: tutorial

Language: en

Sources: [technicalwriting.dev](<https://devfeed.tech/sources/technicalwriting-dev.md>)

Topics: [Google AI](<https://devfeed.tech/topics/google-ai.md>), [Python](<https://devfeed.tech/topics/python.md>), [API](<https://devfeed.tech/topics/api.md>), [Automation](<https://devfeed.tech/topics/automation.md>), [Code](<https://devfeed.tech/topics/code.md>), [bazel](<https://devfeed.tech/topics/bazel.md>)

Tags: [api](<https://devfeed.tech/tags/api.md>), [automation](<https://devfeed.tech/tags/automation.md>), [bazel](<https://devfeed.tech/tags/bazel.md>), [build](<https://devfeed.tech/tags/build.md>), [code](<https://devfeed.tech/tags/code.md>), [gemini](<https://devfeed.tech/tags/gemini.md>), [genai](<https://devfeed.tech/tags/genai.md>), [gn](<https://devfeed.tech/tags/gn.md>), [python](<https://devfeed.tech/tags/python.md>), [script](<https://devfeed.tech/tags/script.md>)

### AI overview

The article describes a hybrid automation workflow that uses Python for repository-wide file discovery and filtering, then uses the Gemini API to remove documentation-generation features from 235 GN build files after a migration to Bazel.

### Source excerpt

Removing code from over 200 GN build files with Python and the Gemini API.

## Sphinx + Bazel: the good, the bad, and the ugly

DevFeed: [Sphinx + Bazel: the good, the bad, and the ugly](<https://devfeed.tech/articles/sphinx-bazel-the-good-the-bad-and-the-ugly-31141.md>)

Original publisher: [Read original article](<https://technicalwriting.dev/2025/03/context/index.html>)

Published: 2025-03-25T00:00:00Z

Content type: opinion

Language: en

Sources: [technicalwriting.dev](<https://devfeed.tech/sources/technicalwriting-dev.md>)

Topics: [bazel](<https://devfeed.tech/topics/bazel.md>), [Documentation](<https://devfeed.tech/topics/documentation.md>), [Software Engineering](<https://devfeed.tech/topics/software-engineering.md>), [Development](<https://devfeed.tech/topics/development.md>)

Tags: [bazel](<https://devfeed.tech/tags/bazel.md>), [build-system](<https://devfeed.tech/tags/build-system.md>), [documentation](<https://devfeed.tech/tags/documentation.md>), [shell-script](<https://devfeed.tech/tags/shell-script.md>), [software-engineering](<https://devfeed.tech/tags/software-engineering.md>), [sphinx](<https://devfeed.tech/tags/sphinx.md>)

### AI overview

An experienced technical writer discusses the strengths and weaknesses of managing Sphinx documentation projects with Bazel. The article explains how Bazel can orchestrate Sphinx workflows and describes reported maintenance and development-environment benefits, while helping readers decide whether it fits their project.

### Source excerpt

Strengths and weaknesses of orchestrating Sphinx projects with Bazel.

## Orchestrate Sphinx projects with Bazel

DevFeed: [Orchestrate Sphinx projects with Bazel](<https://devfeed.tech/articles/orchestrate-sphinx-projects-with-bazel-31142.md>)

Original publisher: [Read original article](<https://technicalwriting.dev/2025/03/tutorial/index.html>)

Published: 2025-03-25T00:00:00Z

Content type: tutorial

Language: en

Sources: [technicalwriting.dev](<https://devfeed.tech/sources/technicalwriting-dev.md>)

Topics: [bazel](<https://devfeed.tech/topics/bazel.md>), [Tutorial](<https://devfeed.tech/topics/tutorial.md>), [Documentation](<https://devfeed.tech/topics/documentation.md>), [GitHub](<https://devfeed.tech/topics/github.md>), [GitHub Pages](<https://devfeed.tech/topics/github-pages.md>), [Bash](<https://devfeed.tech/topics/bash.md>), [Linux](<https://devfeed.tech/topics/linux.md>), [Extension](<https://devfeed.tech/topics/extension.md>), [Template](<https://devfeed.tech/topics/template.md>)

Tags: [bash](<https://devfeed.tech/tags/bash.md>), [bazel](<https://devfeed.tech/tags/bazel.md>), [build-system](<https://devfeed.tech/tags/build-system.md>), [docs](<https://devfeed.tech/tags/docs.md>), [extension](<https://devfeed.tech/tags/extension.md>), [github](<https://devfeed.tech/tags/github.md>), [github-pages](<https://devfeed.tech/tags/github-pages.md>), [linux](<https://devfeed.tech/tags/linux.md>), [repository](<https://devfeed.tech/tags/repository.md>), [sphinx](<https://devfeed.tech/tags/sphinx.md>), [tutorial](<https://devfeed.tech/tags/tutorial.md>)

### AI overview

An end-to-end tutorial on managing a Sphinx project with Bazel, including setup, documentation builds, local preview, extensions, and deployment to GitHub Pages.

### Source excerpt

An end-to-end tutorial on managing a Sphinx project with Bazel.

## Finding unused targets with bazel

DevFeed: [Finding unused targets with bazel](<https://devfeed.tech/articles/finding-unused-targets-with-bazel-25411.md>)

Original publisher: [Read original article](<https://smileykeith.com/2025/03/24/unused-bazel-targets/>)

Author: Keith Smiley

Published: 2025-03-24T18:00:00Z

Content type: tutorial

Language: en

Sources: [Keith Smiley](<https://devfeed.tech/sources/keith-smiley.md>)

Topics: [Graphs](<https://devfeed.tech/topics/graphs.md>), [coding](<https://devfeed.tech/topics/coding.md>), [Code](<https://devfeed.tech/topics/code.md>), [toolchains](<https://devfeed.tech/topics/toolchains.md>)

Tags: [bazel](<https://devfeed.tech/tags/bazel.md>), [build](<https://devfeed.tech/tags/build.md>), [code](<https://devfeed.tech/tags/code.md>), [coding](<https://devfeed.tech/tags/coding.md>), [dependencies](<https://devfeed.tech/tags/dependencies.md>), [graph](<https://devfeed.tech/tags/graph.md>), [toolchains](<https://devfeed.tech/tags/toolchains.md>), [use-cases](<https://devfeed.tech/tags/use-cases.md>)

### AI overview

This article explains how to use bazel query to inspect a build graph and identify unused targets. It presents a query that subtracts dependencies of top-level targets from all first-party targets, then discusses handling edge cases with kind filters and special tags such as allow-unused. It also describes tagging toolchains and other targets whose dependencies should be treated as used.

### Source excerpt

Once you've fully migrated a codebase to bazel, one of the many advantages is that you can easily inspect your build graph using bazel query. One of the many things you can do with queries is write scripts to enforce coding standards, or in today's example, find unused targets that can lead to discovering unused code. The simplest version of this query starts like this: let all_targets = //... in let top_level_targets = tests($all_targets) union kind("(.*_binary) rule", $all_targets) in $all_targets - deps($top_level_targets) This initial version discovers all your first party targets, and then subtracts the dependencies of all "top level" targets, so that any remaining targets are considered unused. The idea of "top level" targets is better defined as: anything that you consider to be important enough that its dependencies are used. Depending on your codebase you might want to exclude test targets from this so that targets only in the dependencies of test targets are diagnosed as unused (this won't work if you have intentional testonly dependencies, although you could special case those as shown below). Once you have this initial query, you can start iterating in order to handle in edge cases. For example it's likely that you have some targets that aren't binaries or tests, but are considered used. There are 2 approaches I would recommend to handle this. First you can continue to build out the kind filter: kind("(.*_binary|platform|test_suite) rule", $all_targets) The downside with this approach is it can get unwieldy quickly. I like adding rules here that have many uses, but for other one off cases another approach you can use is to expand the query to look for special tags: let all_targets = //... in let top_level_targets = tests($all_targets) union kind("(.*_binary|platform|test_suite) rule", $all_targets) in let allowed_unused = attr(tags, allow-unused, $all_targets) in $all_targets - deps($top_level_targets) - $allowed_unused Then you can add tags = ["allow-un

## Bazel caching and compressed debug info

DevFeed: [Bazel caching and compressed debug info](<https://devfeed.tech/articles/bazel-caching-and-compressed-debug-info-25410.md>)

Original publisher: [Read original article](<https://smileykeith.com/2025/02/14/compressed-debug-info/>)

Author: Keith Smiley

Published: 2025-02-14T18:00:00Z

Content type: tutorial

Language: en

Sources: [Keith Smiley](<https://devfeed.tech/sources/keith-smiley.md>)

Topics: [C++](<https://devfeed.tech/topics/c-plus-plus.md>), [Caching](<https://devfeed.tech/topics/caching.md>), [LLVM](<https://devfeed.tech/topics/llvm.md>), [gcc](<https://devfeed.tech/topics/gcc.md>), [C](<https://devfeed.tech/topics/c.md>)

Tags: [bazel](<https://devfeed.tech/tags/bazel.md>), [build](<https://devfeed.tech/tags/build.md>), [c-plus-plus](<https://devfeed.tech/tags/c-plus-plus.md>), [caching](<https://devfeed.tech/tags/caching.md>), [clang](<https://devfeed.tech/tags/clang.md>), [cmake](<https://devfeed.tech/tags/cmake.md>), [config](<https://devfeed.tech/tags/config.md>), [configuration](<https://devfeed.tech/tags/configuration.md>)

### AI overview

This article explains how compressing debug information can reduce C and C++ binary sizes and improve Bazel remote-cache efficiency. Using llvm-objcopy, the example reduces a roughly 536 MB binary to about 290 MB, and the authors report nearly 60% fewer cache reads after deployment.

### Source excerpt

One of bazel's most attractive features is the ability for it to remotely cache artifacts to reduce unnecessary work for large builds. Unfortunately users quickly discover this comes with non-trivial financial and bandwidth implications. There are many ways, of varying difficulty, to try and improve your cache usage. From breaking unnecessary dependencies, to adding larger local storage for CI workers, builds without the bytes, build avoidance, etc. For codebases with lots of C or C++ one of the potentially easiest wins is to enable compressed debug information1. Let's look at an example from our codebase. Looking at the size of a non-trivial C++ binary built with -g -O2 (similar to cmake's RelWithDebInfo configuration), or binary clocks in at ~530mbs: % du -sh bin 536M bin To get a sense of what percentage of this binary is debug info, we can use llvm-objcopy to strip the debug info entirely: % llvm-objcopy --strip-debug bin strippedbin % du -sh strippedbin 159M strippedbin This shows us that almost 70%(!!) of the binary size is taken up with debug info. In release configurations we can eliminate this entirely with bazel's --strip argument, but for developer builds, or other use cases where you need debug info, we can still improve this. If we use llvm-objcopy again, this time to compress the debug info, we can immediately see our potential gains: % llvm-objcopy --compress-debug-sections bin compressedbin % du -sh compressedbin 290M compressedbin This shows us we can get an almost 50%(!!) improvement in binary size in this example. To enable this in bazel, assuming you're using a relatively recent version of gcc or clang, you can add something like this to your .bazelrc2: build --enable_platform_specific_config build:linux --copt=-gz --host_copt=-gz build:linux --linkopt=-gz --host_linkopt=-gz In practice we saw cache reads drop by nearly 60% when we rolled out this change. Reducing binary size with this approach has a lot of benefits, but it's even more pronounced

## Bumble chooses Tuist for iOS project scaling after comparing SPM and Bazel

DevFeed: [Bumble chooses Tuist for iOS project scaling after comparing SPM and Bazel](<https://devfeed.tech/articles/scaling-ios-at-bumble-part-3-3-results-and-developer-quality-of-life-22604.md>)

Original publisher: [Read original article](<https://medium.com/bumble-tech/scaling-ios-at-bumble-6f0602682903?source=rss----6353b5325b1a---4>)

Author: Jonathan Crooke

Published: 2024-03-12T15:23:14Z

Content type: comparison

Language: en

Sources: [Bumble Tech](<https://devfeed.tech/sources/bumble-tech.md>)

Topics: [Tuist](<https://devfeed.tech/topics/tuist.md>), [iOS development](<https://devfeed.tech/topics/ios-development.md>), [bazel](<https://devfeed.tech/topics/bazel.md>), [swift-package-manager](<https://devfeed.tech/topics/swift-package-manager.md>), [Xcode](<https://devfeed.tech/topics/xcode.md>)

Tags: [bazel](<https://devfeed.tech/tags/bazel.md>), [ios-development](<https://devfeed.tech/tags/ios-development.md>), [swift-package-manager](<https://devfeed.tech/tags/swift-package-manager.md>), [tuist](<https://devfeed.tech/tags/tuist.md>)

### AI overview

In the final part of Bumble's build and project-management overhaul, the team explains why it chose Tuist over Swift Package Manager and Bazel for its iOS project-scaling needs. It found SPM's Xcode integration too slow at its scale and considered Bazel powerful but costly to adopt and maintain.

### Source excerpt

Scaling iOS at Bumble: Part 3/3 -- Results and Developer Quality of LifeRecap This is the third and final post in a series on our 2022 & 23 build and project management overhaul. We investigated whether one (or none!) of Swift Package Manager (SPM), Tuist or Bazel would be the tool to overcome our project scaling challenges. In the first post we explained the state-of-play coming into this project. In the second we discussed the results of our proofs of concept. In this post we will explain our conclusions, and talk about the migration project itself. The decisionWe chose Tuist It shouldn't be much surprise that we didn't choose SPM. In fact, we found it to be entirely unsuitable for our use case. This isn't to say that SPM is a poor tool in general -- far from it. Initially we would have preferred to adopt it, however we couldn't ignore the fact that, at least regarding its Xcode-integration, SPM exhibits unacceptably poor performance for our use case, and at our current scale; and this is before we consider our expected future scaling! For those starting new, or smaller projects, SPM seems to provide a nice user experience. However, it also deserves to be regarded as a "first-party CocoaPods". It serves a very similar use-case, and may lead to similar performance drawbacks. Bazel was a different matter. It is undoubtedly a powerful tool, but is a high-investment choice; compared to both SPM and Tuist it diverges much from the traditional iOS development experience, increasing disruption for developers. Also, since Bazel experience is still quite uncommon, this adds extra onboarding load for new team members. We also need to support and maintain infrastructure internally; we have small infrastructure teams and Bazel presents concerns about poor bus factor for a tool that is a single point of failure. During our proof of concept it became clear that in spite of its power, Bazel would be costly for us in the short term. In comparison, Tuist hit a sweet spot between the

## Scaling iOS at Bumble: Part 2/3 -- The Assessment

DevFeed: [Scaling iOS at Bumble: Part 2/3 -- The Assessment](<https://devfeed.tech/articles/scaling-ios-at-bumble-part-2-3-the-assessment-22603.md>)

Original publisher: [Read original article](<https://medium.com/bumble-tech/scaling-ios-at-bumble-239e0fa009f2?source=rss----6353b5325b1a---4>)

Author: Jonathan Crooke

Published: 2024-02-15T13:49:17Z

Content type: article

Language: en

Sources: [Bumble Tech](<https://devfeed.tech/sources/bumble-tech.md>)

Topics: [iOS](<https://devfeed.tech/topics/ios.md>), [Tuist](<https://devfeed.tech/topics/tuist.md>), [swift-package-manager](<https://devfeed.tech/topics/swift-package-manager.md>), [bazel](<https://devfeed.tech/topics/bazel.md>), [toolchain](<https://devfeed.tech/topics/toolchain.md>), [Xcode](<https://devfeed.tech/topics/xcode.md>), [Requirements](<https://devfeed.tech/topics/requirements.md>), [Testing](<https://devfeed.tech/topics/testing.md>)

Tags: [bazel](<https://devfeed.tech/tags/bazel.md>), [ios](<https://devfeed.tech/tags/ios.md>), [ios-app-development](<https://devfeed.tech/tags/ios-app-development.md>), [performance](<https://devfeed.tech/tags/performance.md>), [requirements](<https://devfeed.tech/tags/requirements.md>), [swift](<https://devfeed.tech/tags/swift.md>), [swift-package-manager](<https://devfeed.tech/tags/swift-package-manager.md>), [testing](<https://devfeed.tech/tags/testing.md>), [toolchain](<https://devfeed.tech/tags/toolchain.md>), [tuist](<https://devfeed.tech/tags/tuist.md>), [xcode](<https://devfeed.tech/tags/xcode.md>)

### AI overview

This article recaps Bumble's assessment process for replacing parts of its iOS project and build toolchain. It describes onboarding, proof-of-concept work, full-app conversion, and assessment criteria for Swift Package Manager, Tuist, and Bazel, including blockers, user experience, and performance.

### Source excerpt

Scaling iOS at Bumble: Part 2/3 -- The AssessmentRecap In our previous post we discussed how we came to be investigating project and build toolchain replacement solutions for our iOS codebase at Bumble Inc. We began executing proofs of concept for Swift Package Manager (SPM), Tuist and Bazel. The Process Our investigative process for each tool was performed in roughly the same manner: 1. Onboarding With the exception of some light use of SPM as a third-party dependency manager, no-one on the team was fully fluent with any of the tools. This meant that at first, we needed to learn the basics, which could be achieved by creating a minimum-viable manifest for one of our node modules. This would involve learning the manifest format and core commands for building, testing etc. 2. Medium-sized proof of concept Following on from the initial onboarding, we would then progress to converting parent modules, traversing the tree post-order. At each level we'd cover more of our core requirements and encounter edge-cases. Throughout, we noted learnings, limitations and fixes. 3. Full-app conversion At this stage, since our module tree exhibits a strong level of uniformity, we'd now have gathered enough experience to fully convert the app's child modules, and do so using automated tooling. How we achieved this will be discussed below. Unsurprisingly, the top-level app target was its own challenge, and required considerably handcrafting. We only aimed to achieve a minimum-viable conversion at this stage, and didn't expect tests to pass. That said, we'd usually have a fairly conformant conversion anyway, that would launch successfully to its home screen and usually plenty more. 4. Assessment With a converted app target in hand, we would now have a candidate for assessment. But what did we want to know? Our analysis looked at these areas: Blockers: simple enough, any limitations or issues in the tool's functionality whereby it was unable to serve our basic requirements Subjective user

## Images as Code: The pursuit of declarative image builds

DevFeed: [Images as Code: The pursuit of declarative image builds](<https://devfeed.tech/articles/images-as-code-the-pursuit-of-declarative-image-builds-13101.md>)

Original publisher: [Read original article](<https://www.chainguard.dev/unchained/images-as-code-the-pursuit-of-declarative-image-builds>)

Published: 2024-01-22T00:00:00Z

Content type: article

Language: en

Sources: [Chainguard: Unchained](<https://devfeed.tech/sources/chainguard-unchained.md>)

Topics: [Code](<https://devfeed.tech/topics/code.md>), [chainguard images](<https://devfeed.tech/topics/chainguard-images.md>), [Dockerfile](<https://devfeed.tech/topics/dockerfile.md>), [bazel](<https://devfeed.tech/topics/bazel.md>), [distroless](<https://devfeed.tech/topics/distroless.md>), [Docker](<https://devfeed.tech/topics/docker.md>), [Containers](<https://devfeed.tech/topics/containers.md>), [Kubernetes](<https://devfeed.tech/topics/kubernetes.md>), [Terraform](<https://devfeed.tech/topics/terraform.md>), [Infrastructure as code](<https://devfeed.tech/topics/infrastructure-as-code.md>), [Open Source](<https://devfeed.tech/topics/open-source.md>)

Tags: [apk](<https://devfeed.tech/tags/apk.md>), [apko](<https://devfeed.tech/tags/apko.md>), [bazel](<https://devfeed.tech/tags/bazel.md>), [chainguard](<https://devfeed.tech/tags/chainguard.md>), [chainguard-images](<https://devfeed.tech/tags/chainguard-images.md>), [code](<https://devfeed.tech/tags/code.md>), [container-image](<https://devfeed.tech/tags/container-image.md>), [containers](<https://devfeed.tech/tags/containers.md>), [declarative](<https://devfeed.tech/tags/declarative.md>), [distroless](<https://devfeed.tech/tags/distroless.md>), [docker](<https://devfeed.tech/tags/docker.md>), [infrastructure-as-code](<https://devfeed.tech/tags/infrastructure-as-code.md>), [kubernetes](<https://devfeed.tech/tags/kubernetes.md>), [open-source](<https://devfeed.tech/tags/open-source.md>), [reproducibility](<https://devfeed.tech/tags/reproducibility.md>), [terraform](<https://devfeed.tech/tags/terraform.md>)

### AI overview

The article traces the pursuit of declarative container image builds. It critiques imperative Dockerfile-based builds for making multi-tenant, multi-architecture, and reproducible builds difficult, then discusses Bazel and distroless images as steps toward expressing intended build state. Kubernetes and Terraform are presented as examples of declarative systems, inspiring the idea of "Images as Code."

### Source excerpt

Chainguard's CTO Matt Moore describes the process of creating a declarative container image build for Chainguard Images.

## Announcing Bazel rules for extending Chainguard Images

DevFeed: [Announcing Bazel rules for extending Chainguard Images](<https://devfeed.tech/articles/announcing-bazel-rules-for-extending-chainguard-images-12875.md>)

Original publisher: [Read original article](<https://www.chainguard.dev/unchained/announcing-bazel-rules-for-extending-chainguard-images>)

Published: 2023-10-24T00:00:00Z

Content type: release

Language: en

Sources: [Chainguard: Unchained](<https://devfeed.tech/sources/chainguard-unchained.md>)

Topics: [chainguard images](<https://devfeed.tech/topics/chainguard-images.md>), [supply-chain-security](<https://devfeed.tech/topics/supply-chain-security.md>), [container images](<https://devfeed.tech/topics/container-images.md>), [distroless](<https://devfeed.tech/topics/distroless.md>), [Package manager](<https://devfeed.tech/topics/package-manager.md>), [Open Source](<https://devfeed.tech/topics/open-source.md>)

Tags: [apk](<https://devfeed.tech/tags/apk.md>), [apko](<https://devfeed.tech/tags/apko.md>), [bazel](<https://devfeed.tech/tags/bazel.md>), [chainguard](<https://devfeed.tech/tags/chainguard.md>), [chainguard-images](<https://devfeed.tech/tags/chainguard-images.md>), [distroless](<https://devfeed.tech/tags/distroless.md>), [sbom](<https://devfeed.tech/tags/sbom.md>), [secure-software](<https://devfeed.tech/tags/secure-software.md>), [secure-software-supply-chain](<https://devfeed.tech/tags/secure-software-supply-chain.md>), [wolfi](<https://devfeed.tech/tags/wolfi.md>)

### AI overview

Chainguard and Aspect.Dev announce the general availability of rules_apko, an open source Bazel plugin for building secure, minimal Wolfi-based OCI container images. The article explains how rules_apko integrates APK packages and Wolfi-base images into existing Bazel workflows, supports reproducible builds, and provides dependency locking, integrity verification, and SBOM generation.

### Source excerpt

Explore Bazel rules for Chainguard Images, your pathway to secure, effortless image extension.

## The haunting of CVE-2022-3474: A ghostly tale of package detection failure

DevFeed: [The haunting of CVE-2022-3474: A ghostly tale of package detection failure](<https://devfeed.tech/articles/the-haunting-of-cve-2022-3474-a-ghostly-tale-of-package-detection-failure-13254.md>)

Original publisher: [Read original article](<https://www.chainguard.dev/unchained/the-haunting-of-cve-2022-3474-a-ghostly-tale-of-package-detection-failure>)

Published: 2023-10-10T00:00:00Z

Content type: article

Language: en

Sources: [Chainguard: Unchained](<https://devfeed.tech/sources/chainguard-unchained.md>)

Topics: [vulnerability](<https://devfeed.tech/topics/vulnerability.md>), [container images](<https://devfeed.tech/topics/container-images.md>), [chainguard images](<https://devfeed.tech/topics/chainguard-images.md>), [vulnerability management](<https://devfeed.tech/topics/vulnerability-management.md>), [bazel](<https://devfeed.tech/topics/bazel.md>), [trivy](<https://devfeed.tech/topics/trivy.md>)

Tags: [bazel](<https://devfeed.tech/tags/bazel.md>), [chainguard-images](<https://devfeed.tech/tags/chainguard-images.md>), [container-images](<https://devfeed.tech/tags/container-images.md>), [cve-2022-3474](<https://devfeed.tech/tags/cve-2022-3474.md>), [false-negative](<https://devfeed.tech/tags/false-negative.md>), [trivy](<https://devfeed.tech/tags/trivy.md>), [vulnerability-management](<https://devfeed.tech/tags/vulnerability-management.md>)

### AI overview

The article explains how scanners can produce false negatives when they fail to identify a package in a container image. Using CVE-2022-3474 in Bazel 5.3.1 as an example, it describes how missing Bazel package metadata prevented Trivy from detecting the vulnerability and presents Chainguard Images' package metadata and SBOMs as a way to improve detection.

### Source excerpt

Explore the risks of scanner false negatives, the pitfalls of missing the Bazel package, and how Chainguard Images ensure accurate vulnerability detection.

## MLIR -- Running and Testing a Lowering

DevFeed: [MLIR -- Running and Testing a Lowering](<https://devfeed.tech/articles/mlir-running-and-testing-a-lowering-40468.md>)

Original publisher: [Read original article](<https://www.jeremykun.com/2023/08/10/mlir-running-and-testing-a-lowering/>)

Published: 2023-08-10T14:36:13Z

Content type: tutorial

Language: en

Sources: [Jeremy Kun](<https://devfeed.tech/sources/jeremy-kun.md>)

Topics: [Compiler](<https://devfeed.tech/topics/compiler.md>), [Testing](<https://devfeed.tech/topics/testing.md>), [Optimization](<https://devfeed.tech/topics/optimization.md>), [bazel](<https://devfeed.tech/topics/bazel.md>), [LLVM](<https://devfeed.tech/topics/llvm.md>)

Tags: [bazel](<https://devfeed.tech/tags/bazel.md>), [c-plus-plus](<https://devfeed.tech/tags/c-plus-plus.md>), [compiler](<https://devfeed.tech/tags/compiler.md>), [compilers](<https://devfeed.tech/tags/compilers.md>), [fhe](<https://devfeed.tech/tags/fhe.md>), [llvm](<https://devfeed.tech/tags/llvm.md>), [mathematics](<https://devfeed.tech/tags/mathematics.md>), [mlir](<https://devfeed.tech/tags/mlir.md>), [optimization](<https://devfeed.tech/tags/optimization.md>), [programming](<https://devfeed.tech/tags/programming.md>), [testing](<https://devfeed.tech/tags/testing.md>), [tiling](<https://devfeed.tech/tags/tiling.md>)

### AI overview

This tutorial introduces MLIR dialects and lowerings, explains how MLIR incrementally transforms programs through intermediate representations, and demonstrates end-to-end testing for a simple lowering.

### Source excerpt

Table of Contents Last time, we covered a Bazel build system setup for an MLIR project. This time we'll give an overview of a simple lowering and show how end-to-end tests work in MLIR. All of the code for this article is contained in this pull request on GitHub, and the commits are nicely organized and quite readable. Two of the central concepts in MLIR are dialects and lowerings. These are the scaffolding within which we can do the truly interesting parts of a compiler--that is, the optimizations and analyses.

## Supercharging Continuous Integration with Gradle

DevFeed: [Supercharging Continuous Integration with Gradle](<https://devfeed.tech/articles/supercharging-continuous-integration-with-gradle-15901.md>)

Original publisher: [Read original article](<https://developer.squareup.com/blog/supercharging-continuous-integration-with-gradle>)

Author: Paul Hundal

Published: 2023-07-27T14:00:00Z

Content type: article

Language: en

Sources: [Square Corner Blog RSS Feed](<https://devfeed.tech/sources/square-corner-blog-rss-feed.md>)

Topics: [Gradle](<https://devfeed.tech/topics/gradle.md>), [ci](<https://devfeed.tech/topics/ci.md>), [build times](<https://devfeed.tech/topics/build-times.md>), [CI/CD](<https://devfeed.tech/topics/cicd.md>), [Caching](<https://devfeed.tech/topics/caching.md>), [bazel](<https://devfeed.tech/topics/bazel.md>), [Regular expression](<https://devfeed.tech/topics/regular-expression.md>), [benchmarking](<https://devfeed.tech/topics/benchmarking.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [automated](<https://devfeed.tech/tags/automated.md>), [bazel](<https://devfeed.tech/tags/bazel.md>), [build](<https://devfeed.tech/tags/build.md>), [build-times](<https://devfeed.tech/tags/build-times.md>), [caching](<https://devfeed.tech/tags/caching.md>), [ci](<https://devfeed.tech/tags/ci.md>), [code](<https://devfeed.tech/tags/code.md>), [continuous-integration](<https://devfeed.tech/tags/continuous-integration.md>), [development](<https://devfeed.tech/tags/development.md>), [distributed](<https://devfeed.tech/tags/distributed.md>), [engineering](<https://devfeed.tech/tags/engineering.md>), [gradle](<https://devfeed.tech/tags/gradle.md>), [parallel](<https://devfeed.tech/tags/parallel.md>), [performance](<https://devfeed.tech/tags/performance.md>), [test](<https://devfeed.tech/tags/test.md>)

### AI overview

This article describes Square's efforts to improve continuous integration for a large Gradle-based Android project. It discusses Kochiku, an open-source CI tool used for automated sharding, scheduling, and distributed caching, and explains shard avoidance based on build-graph changes.

### Source excerpt

Unveiling the journey of shard avoidance and Bazel-like queryability

## It all started with a commit: Celebrating 6 years of Distroless

DevFeed: [It all started with a commit: Celebrating 6 years of Distroless](<https://devfeed.tech/articles/it-all-started-with-a-commit-celebrating-6-years-of-distroless-13129.md>)

Original publisher: [Read original article](<https://www.chainguard.dev/unchained/it-all-started-with-a-commit-celebrating-6-years-of-distroless>)

Published: 2023-04-12T00:00:00Z

Content type: article

Language: en

Sources: [Chainguard: Unchained](<https://devfeed.tech/sources/chainguard-unchained.md>)

Topics: [distroless](<https://devfeed.tech/topics/distroless.md>), [Containers](<https://devfeed.tech/topics/containers.md>), [supply-chain-security](<https://devfeed.tech/topics/supply-chain-security.md>), [container images](<https://devfeed.tech/topics/container-images.md>), [sigstore](<https://devfeed.tech/topics/sigstore.md>), [chainguard images](<https://devfeed.tech/topics/chainguard-images.md>), [Kubernetes](<https://devfeed.tech/topics/kubernetes.md>), [vulnerability](<https://devfeed.tech/topics/vulnerability.md>), [bazel](<https://devfeed.tech/topics/bazel.md>), [Debian](<https://devfeed.tech/topics/debian.md>), [vulnerability management](<https://devfeed.tech/topics/vulnerability-management.md>), [Go](<https://devfeed.tech/topics/go.md>)

Tags: [bazel](<https://devfeed.tech/tags/bazel.md>), [c-plus-plus](<https://devfeed.tech/tags/c-plus-plus.md>), [chainguard](<https://devfeed.tech/tags/chainguard.md>), [chainguard-images](<https://devfeed.tech/tags/chainguard-images.md>), [containers](<https://devfeed.tech/tags/containers.md>), [debian](<https://devfeed.tech/tags/debian.md>), [digital-signatures](<https://devfeed.tech/tags/digital-signatures.md>), [distroless](<https://devfeed.tech/tags/distroless.md>), [distroless-containers](<https://devfeed.tech/tags/distroless-containers.md>), [go](<https://devfeed.tech/tags/go.md>), [java](<https://devfeed.tech/tags/java.md>), [kubernetes](<https://devfeed.tech/tags/kubernetes.md>), [python](<https://devfeed.tech/tags/python.md>), [release-engineering](<https://devfeed.tech/tags/release-engineering.md>), [sigstore](<https://devfeed.tech/tags/sigstore.md>), [software-supply-chain-security](<https://devfeed.tech/tags/software-supply-chain-security.md>), [verify](<https://devfeed.tech/tags/verify.md>), [vulnerability](<https://devfeed.tech/tags/vulnerability.md>), [vulnerability-management](<https://devfeed.tech/tags/vulnerability-management.md>)

### AI overview

The article commemorates six years of Distroless, describing its goal of creating more secure and efficient container images by removing non-essential components. It covers the Bazel-based build tooling, language runtimes, Kubernetes adoption, vulnerability-management benefits, and later integration with Sigstore for container signing and authenticity verification. It also introduces the subsequent development of Chainguard Images.

### Source excerpt

The goal of Distroless is to provide a more secure and efficient way to package and run software in containers by using only essential components.

## Hopping into spring with Chainguard's RabbitMQ Image

DevFeed: [Hopping into spring with Chainguard's RabbitMQ Image](<https://devfeed.tech/articles/hopping-into-spring-with-chainguard-s-rabbitmq-image-13082.md>)

Original publisher: [Read original article](<https://www.chainguard.dev/unchained/hopping-into-spring-with-chainguards-rabbitmq-image>)

Published: 2023-02-24T00:00:00Z

Content type: article

Language: en

Sources: [Chainguard: Unchained](<https://devfeed.tech/sources/chainguard-unchained.md>)

Topics: [chainguard images](<https://devfeed.tech/topics/chainguard-images.md>), [Messaging](<https://devfeed.tech/topics/messaging.md>), [Security](<https://devfeed.tech/topics/security.md>), [Cloud Native Ecosystem](<https://devfeed.tech/topics/cloud-native-ecosystem.md>), [Containers](<https://devfeed.tech/topics/containers.md>), [vulnerability scanning](<https://devfeed.tech/topics/vulnerability-scanning.md>), [Erlang](<https://devfeed.tech/topics/erlang.md>), [Open Source](<https://devfeed.tech/topics/open-source.md>), [GitHub](<https://devfeed.tech/topics/github.md>)

Tags: [base-images](<https://devfeed.tech/tags/base-images.md>), [bazel](<https://devfeed.tech/tags/bazel.md>), [chainguard](<https://devfeed.tech/tags/chainguard.md>), [chainguard-images](<https://devfeed.tech/tags/chainguard-images.md>), [container-images](<https://devfeed.tech/tags/container-images.md>), [containers](<https://devfeed.tech/tags/containers.md>), [cosign](<https://devfeed.tech/tags/cosign.md>), [cves](<https://devfeed.tech/tags/cves.md>), [documentation](<https://devfeed.tech/tags/documentation.md>), [image](<https://devfeed.tech/tags/image.md>), [messaging](<https://devfeed.tech/tags/messaging.md>), [minimal-image](<https://devfeed.tech/tags/minimal-image.md>), [provenance](<https://devfeed.tech/tags/provenance.md>), [rabbitmq](<https://devfeed.tech/tags/rabbitmq.md>), [rabbitmq-image](<https://devfeed.tech/tags/rabbitmq-image.md>), [sboms](<https://devfeed.tech/tags/sboms.md>), [secure-images](<https://devfeed.tech/tags/secure-images.md>), [security](<https://devfeed.tech/tags/security.md>), [slsa](<https://devfeed.tech/tags/slsa.md>), [software-supply-chain](<https://devfeed.tech/tags/software-supply-chain.md>)

### AI overview

Chainguard announces a Chainguard Image for RabbitMQ, an open-source message broker used in cloud-native applications. The image is built from source on Wolfi, with custom Erlang and OTP components, continuous patching, minimal CVEs, SBOMs, signatures, and SLSA Build Level 2 provenance.

### Source excerpt

Unlock advanced messaging capabilities with Chainguard's RabbitMQ image, designed for robustness and security.

## How We Handle Flaky Tests in Gradle

DevFeed: [How We Handle Flaky Tests in Gradle](<https://devfeed.tech/articles/how-we-handle-flaky-tests-in-gradle-24645.md>)

Original publisher: [Read original article](<https://blog.gradle.org/how-we-handle-flaky-tests-in-gradle>)

Author: Bo Zhang

Published: 2022-11-03T02:00:00Z

Content type: article

Language: en

Sources: [The Gradle Blog](<https://devfeed.tech/sources/the-gradle-blog.md>)

Topics: [Gradle](<https://devfeed.tech/topics/gradle.md>), [Testing](<https://devfeed.tech/topics/testing.md>), [ci](<https://devfeed.tech/topics/ci.md>), [code productivity](<https://devfeed.tech/topics/code-productivity.md>), [superProductivity](<https://devfeed.tech/topics/superproductivity.md>)

Tags: [automated](<https://devfeed.tech/tags/automated.md>), [bazel](<https://devfeed.tech/tags/bazel.md>), [best-practices](<https://devfeed.tech/tags/best-practices.md>), [build](<https://devfeed.tech/tags/build.md>), [ci](<https://devfeed.tech/tags/ci.md>), [flaky](<https://devfeed.tech/tags/flaky.md>), [gradle](<https://devfeed.tech/tags/gradle.md>), [gradle-plugin](<https://devfeed.tech/tags/gradle-plugin.md>), [junit](<https://devfeed.tech/tags/junit.md>), [retry](<https://devfeed.tech/tags/retry.md>), [teamcity](<https://devfeed.tech/tags/teamcity.md>), [techniques](<https://devfeed.tech/tags/techniques.md>), [testing](<https://devfeed.tech/tags/testing.md>), [tests](<https://devfeed.tech/tags/tests.md>), [tools](<https://devfeed.tech/tags/tools.md>)

### AI overview

This article explains how the Gradle team manages flaky automated tests. It covers retrying failed tests, automatically identifying flaky failures in CI, using dashboards and analytics to troubleshoot trends, and quarantining tests that are too unreliable. It also mentions Gradle's Test Retry Gradle plugin and alternatives such as Maven Surefire Plugin, JUnit Pioneer, and Bazel test rules.

### Source excerpt

Test flakiness is one of the main challenges of automated testing. Even though Gradle's focus is increasing developer productivity, the development of Gradle itself suffers from flaky automated tests. This blog explains some best practices when developing Gradle, which have proved effective over the years we fight with flaky tests. The Story Like in many other projects, every commit of Gradle must pass tens of thousands of automated tests. Any tiny flakiness may cause developer productivity loss. When I joined Gradle 5 years ago, the CI was full of flaky test failures - people would rerun a build, again and again, hoping to be lucky enough to get a green build. Later, we started a dedicated developer productivity team to deal with all the flakiness on CI, especially test flakiness. Here's how we do it step by step. Retry Failed Tests When a test fails, how do we determine if it's flaky or not? The easiest way is obviously retrying the failed test immediately: if the second run succeeds, the failed test is flaky. As a rule of thumb, by simply rerunning the failed test one more time, the test failures due to flakiness can be reduced by 90%. Many CI systems can recognize such flaky tests and mark the build as green automatically: In this example, the first run fails because of a network error, but the rerun succeeds. TeamCity recognizes this situation and "mutes" the test failure. If the build is connected to a Gradle Enterprise instance and that build has a published Build Scan, you can see the flaky tests in the test dashboard: In Gradle, we automatically retry the failed test classes with the Test Retry Gradle plugin. Please consult the documentation for how to adopt it in your build. Other Techniques to Retry Failed Tests If you are not using Gradle, that's okay. There are many alternatives that provide similar functionalities: Maven Surefire Plugin - Rerun failing tests JUnit Pioneer - Retrying Failing Tests Bazel flaky attribute in test rules All the tools above

## First Annual Bazel-iOS Con 2022

DevFeed: [First Annual Bazel-iOS Con 2022](<https://devfeed.tech/articles/first-annual-bazel-ios-con-2022-15656.md>)

Original publisher: [Read original article](<https://developer.squareup.com/blog/first-annual-bazel-ios-con-2022>)

Author: Jerry Marino

Published: 2022-09-12T07:00:00Z

Content type: news

Language: en

Sources: [Square Corner Blog RSS Feed](<https://devfeed.tech/sources/square-corner-blog-rss-feed.md>)

Topics: [bazel](<https://devfeed.tech/topics/bazel.md>), [iOS](<https://devfeed.tech/topics/ios.md>), [Development](<https://devfeed.tech/topics/development.md>), [Open Source](<https://devfeed.tech/topics/open-source.md>)

Tags: [bazel](<https://devfeed.tech/tags/bazel.md>), [conference](<https://devfeed.tech/tags/conference.md>), [development](<https://devfeed.tech/tags/development.md>), [engineering](<https://devfeed.tech/tags/engineering.md>), [event](<https://devfeed.tech/tags/event.md>), [github](<https://devfeed.tech/tags/github.md>), [ios](<https://devfeed.tech/tags/ios.md>), [open-source](<https://devfeed.tech/tags/open-source.md>)

### AI overview

Square announces the first annual Bazel-iOS Con, an open developer conference scheduled for September 29, 2022. The event will feature talks, panels, discussion groups, and breakout sessions about using Bazel for iOS development.

### Source excerpt

Join us at Bazel-IOS Con September 29, 2022

## Debugging bazel actions

DevFeed: [Debugging bazel actions](<https://devfeed.tech/articles/debugging-bazel-actions-25408.md>)

Original publisher: [Read original article](<https://smileykeith.com/2022/03/02/debugging-bazel-actions/>)

Author: Keith Smiley

Published: 2022-03-03T02:00:00Z

Content type: tutorial

Language: en

Sources: [Keith Smiley](<https://devfeed.tech/sources/keith-smiley.md>)

Topics: [debugging](<https://devfeed.tech/topics/debugging.md>), [Command-line interface](<https://devfeed.tech/topics/cli.md>), [configuration](<https://devfeed.tech/topics/configuration.md>), [Tooling](<https://devfeed.tech/topics/tooling.md>)

Tags: [bazel](<https://devfeed.tech/tags/bazel.md>), [build](<https://devfeed.tech/tags/build.md>), [command-line](<https://devfeed.tech/tags/command-line.md>), [configuration](<https://devfeed.tech/tags/configuration.md>), [debugging](<https://devfeed.tech/tags/debugging.md>), [sandbox](<https://devfeed.tech/tags/sandbox.md>)

### AI overview

This tutorial explains how to reproduce Bazel actions outside Bazel's infrastructure for debugging and benchmarking. It covers preparing the build environment, disabling or preserving sandboxing, obtaining an action's command line, and forcing actions to rerun by invalidating inputs or changing flags.

### Source excerpt

When working on bazel build infrastructure, something I often need to do is reproduce an action outside of bazel's infrastructure in order to debug it further. This debugging often involves changing flags or swapping out the tool itself for a custom built version. In many cases updating your bazel configuration as normal should work well enough. But sometimes when you're iterating on things that invalidate a significant portion of your build it can be faster to work on things outside of bazel first, and then update your bazel configuration based on your discoveries. Another case where this is useful is if you want to benchmark a specific action by running it many times individually without the contention caused by bazel parallelizing other actions. Since bazel has a lot of infrastructure for keeping builds hermetic, there are a few steps you need to take to roughly reproduce what bazel is doing so your debugging is as close to what it runs as possible. 1. Build and disable sandboxing In order for bazel to setup your build environment (including your downloaded dependencies), and leave it intact for you to muck around with, you must run a normal build and also either disable sandboxing by passing --spawn_strategy=standalone, or make it leave the sandbox base around by passing --sandbox_debug. 2. Grab your action's command line Once bazel has run and left its environment intact, you need to grab the command line being run for the action you want to debug. I find that passing bazel's -s flag (also known as --subcommands) is the easiest way to do this. You just have to make sure that the action you're interested in actually runs. There are a few different ways you can force bazel to run an action: Invalidate the inputs for the action. Unlike other build systems touching input files isn't enough, I often add newlines or comments to files to force actions to re-run. Change the flags for a command line. For some actions such as C++ compiles, or native binary linking, there

## Getting Square's iOS build ready for Apple Silicon with Bazel

DevFeed: [Getting Square's iOS build ready for Apple Silicon with Bazel](<https://devfeed.tech/articles/getting-square-s-ios-build-ready-for-apple-silicon-with-bazel-15665.md>)

Original publisher: [Read original article](<https://developer.squareup.com/blog/getting-squares-ios-build-ready-for-apple-silicon-with-bazel>)

Author: Jerry Marino

Published: 2022-01-27T20:00:00Z

Content type: tutorial

Language: en

Sources: [Square Corner Blog RSS Feed](<https://devfeed.tech/sources/square-corner-blog-rss-feed.md>)

Topics: [bazel](<https://devfeed.tech/topics/bazel.md>), [iOS](<https://devfeed.tech/topics/ios.md>), [build times](<https://devfeed.tech/topics/build-times.md>), [cpu](<https://devfeed.tech/topics/cpu.md>), [Objective-C](<https://devfeed.tech/topics/objective-c.md>), [Swift](<https://devfeed.tech/topics/swift.md>), [Open Source](<https://devfeed.tech/topics/open-source.md>)

Tags: [apple](<https://devfeed.tech/tags/apple.md>), [arm](<https://devfeed.tech/tags/arm.md>), [bazel](<https://devfeed.tech/tags/bazel.md>), [build](<https://devfeed.tech/tags/build.md>), [build-times](<https://devfeed.tech/tags/build-times.md>), [caching](<https://devfeed.tech/tags/caching.md>), [engineering](<https://devfeed.tech/tags/engineering.md>), [ios](<https://devfeed.tech/tags/ios.md>), [objective-c](<https://devfeed.tech/tags/objective-c.md>), [open-source](<https://devfeed.tech/tags/open-source.md>), [simulator](<https://devfeed.tech/tags/simulator.md>), [swift](<https://devfeed.tech/tags/swift.md>), [x86](<https://devfeed.tech/tags/x86.md>)

### AI overview

Square describes adapting its Bazel-based iOS build system for Apple Silicon by building and running iOS applications on the M1 simulator. The article explains the available development paths and why device builds and x86_64 builds under Rosetta 2 were not selected.

### Source excerpt

Building and running iOS builds using the M1 simulator

[Next page](<https://devfeed.tech/tags/bazel.md?cursor=WyIyMDIyLTAxLTI3VDIwOjAwOjAwKzAwOjAwIiwgImYzMTE0MGI0LWI1YTktNGQ0ZC1hYWNlLWQ2ZTdhM2QzODIxNCJd>)