Over the last months, the Forgejo community equipped Forgejo and Forgejo Runner with the necessary building blocks for autoscaling Forgejo Runner. These building blocks should enable developers of workload managers and autoscalers to build reliable and secure integrations for Forgejo Actions. This post aims to provide an overview of the new capabilities, explain how they fit together, and…
systemd , Linux’s most widely used system and service manager, introduced system and service credentials with version 247. They allow for securely passing passwords and keys to applications, thereby solving a longstanding problem. Let’s find out how we can access them in Spring Boot . 
 
 
 
 
 Introducing systemd Credentials 
 
 In their simplest form,…
I run some QEMU/KVM virtual machines as part of one of my GitHub Actions workflows. To reduce the workflow’s runtime and to help make it reproducible, it uses pre-built disk images and pre-defined XML domain configurations for libvirt . That worked well until I changed the workflow to use the new Ubuntu 24.04 images . Afterwards, libvirt rejected the domain configuration with an error I had…
Recently, I had the need to access some virtual machine images in one of my GitHub Actions workflows. As they came in at more than 1 GB, I was hard-pressed for a place to store them that was also easy to access from a GitHub Actions workflow. If only I could upload a ZIP archive to GitHub Packages ! 
 It turns out that it is not only possible but also much easier than I imagined it to be.…
In the last few years, the choice of JDKs has exploded. Almost everyone offers one, even Microsoft . Unsurprisingly , people struggle to pick a JDK and are looking for help. 
 While we can learn that Java Is Still Free and get told which JDK we should use , nobody seems to provide a comprehensive overview of the differences between the various JDKs. The best I could find is OpenJDK vs Oracle…
More and more software is delivered as a container image for container runtimes like Docker , Podman , and Containerd . Even simple container images require substantial logic for their creation and configuration (for example, the official nginx image ). Hence, container images should be automatically tested like all other software deliverables to prevent bugs and security issues from creeping in.…
JUnit 5, Gradle, and Maven: All offer parallel execution of unit tests. With so many options, I wondered whether it makes a difference what I pick. It does. 
 
 
 
 
 Capabilities of the Contenders 
 
 
 
 
 
 JUnit 5 
 
 Parallel test execution is an experimental feature of JUnit 5 that has been available since version 5.3. Once enabled, you can…
For integration tests to be effective, they must be reliable and fast. If tests take too long to run, nobody will run them. If tests are unreliable, everybody will ignore them. 
 To be reliable, tests may not result in false positives or negatives. Furthermore, they should not be flaky. That can be achieved by isolating the tests from each other, for example, by supplying a dedicated test…
Flyway is a fantastic tool for managing an application’s database alongside the application’s source code. But even in small projects, the number of migrations grows inevitably. That is no problem for application startup. But if you use Flyway to initialise the database before every integration test to ensure your tests are independent and reliable, the tests take longer with every…
xcode-install is a nifty tool to install and manage Xcode over the command line. Furthermore, it supports installing multiple Xcode versions side-by-side. It can even install all kinds of simulators and works great with automation tools like Ansible. 
 
	 
		 
			 
				 
			 
		 
		…