The Year in Review 2024
It's been another busy year - I wrote a handful of blog posts on some long-researched automation topics, continued development of many old projects, started over a dozen new projects including my first Cloudflare Worker, and shipped over 450 software releases. This post reviews it all.
Blog posts #
This was year two of the return of this blog. As with year one, I had lofty goals for how much writing I would do that did not quite work out. This year I did, however, meet my primary goal - getting several big posts out on alternative automation and analysis techniques, which had significant background research and testing, including:
- GitLab CI Pipeline for Go Projects
- GitLab Code Quality Duplication Analysis With PMD CPD
- Notifications for New Eleventy Posts in GitLab (Part 1, Part 2)
- A Better GitLab Code Quality - Part 1 - Goodbye CodeClimate (Part 2 really is coming)
Software projects #
Most of the 2024 involved development work on a variety of project, including my
own open source projects, contributions to other open source projects, and
starting a new fork of pa11y
and pa11y-ci
.
The uncertain future of Pa11y and Pa11y CI #
I was anticipating the release of
pa11y@7.0.0
and
pa11y-ci@4.0.0
in 2024. A lot of work had
gone into various updates, primarily focused on updating from deprecated to
supported dependencies, and those updates were ready to release. This year
started with a resurgence of maintainers' support for the pa11y
projects,
including the release of pa11y@7.0.0
and pa11y@8.0.0
. Unfortunately, after
that things fizzled out again, and there was never an official pa11y-ci@4.0.0
.
That's not a criticism of the pa11y
team - priorities can always change on any
open source project, and it's only because of the work of the core team that the
project is so useful that others want to contribute and want it to live on.
My focus, however, is pa11y-ci
, so the lack of an official pa11y-ci@4.0.0
release with a supported version of puppeteer
finally crossed my pain
threshold. So, in September I forked pa11y
into
@aarongoldenthal/pa11y
and pa11y-ci
into
@aarongoldenthal/pa11y-ci
.
These forks have been focused on security patches as a short-term fix until the
future of pa11y
and pa11y-ci
was better understood. This led to 14 releases
of @aarongoldenthal/pa11y
, now up to v8.4.4, and 13 releases
@aarongoldenthal/pa11y-ci
, starting with a new major release and now up to
v4.3.4. In addition, the
gitlab-pa11y-ci
container image was updated to use these forks.
Even with these forks, it has become clear that the backlog of unresolved vulnerabilities, bug fixes, and usability enhancements is not only ever-increasing, but they also require more significant changes that really deserve a dedicated fork, maybe with a new name and new branding, but definitely with sufficient resources and community support. That saga needs to be resolved on way or another in 2025.
My open source software projects #
I continued to maintain a long list of open source projects. In 2024 I started
11 new projects, and between those projects and my other existing projects I
shipped 426 releases (72 major, 118 minor, 229 patch, 7 zero), and that's
excluding the 27 releases from the pa11y
/pa11y-ci
forks noted previously.
Even though many of those were security patches or dependency updates, there was
also extensive new development, and some new projects. Given those 453 releases
were in my free time should reinforce to people that continuous delivery
practices and extensive automation are a worthwhile investment and really do
improve productivity and the ability to confidently release software.
Full list of 2024 new projects
Project | Description |
---|---|
Container Images / Cloc | An Alpine-based container image to run cloc to count lines of code. |
Container Images / Image Tools | A collection of tools and scripts for working with container images. |
Container Images / Puppeteer | Docker Puppeteer is a container image with the recommended configuration for using Puppeteer to drive a headless Chrome browser. |
Container Images / Vale | A container image to run Vale to lint prose, with pre-installed rule packages and a custom GitLab Code Quality report. |
Tests / Container Test | A container project to test CI jobs. |
Tests / Go Test | A Go project to test CI jobs. |
Tests / Node CJS Test | A Node.js CJS project to test CI jobs. |
Tests / Node ESM Test | A Node.js ESM project to test CI jobs. |
GitLab Webhook Renovate Proxy | A Cloudflare Worker to intercept GitLab webhooks and only forward events that should trigger execution of a Renovate pipeline. |
Renovate Config | A collection of reusable Renovate config presets. |
Vale Rules for GitLab CI Utils | A Vale package with custom rules and vocabulary for GitLab CI Utils projects. |
Full list of 2024 software releases
These releases included a handful of significant accomplishments:
- This work was started in 2023, but as of this year all of my NPM packages are published with package provenance, a step to help improve the overall security of the NPM package ecosystem. It's an easy one-time setup, so there's no reason not to do it.
- I released my first multi-platform container image, built on GitLab with
kaniko
andmanifest-tool
, which uses parent-child downstream pipelines to simplify expanding the supported platforms. See thecurl-jq
project for specifics. - I released a script to add
OCI annotations
to container images. This uses
crane
to update existing images in a container registry, matching imageLABEL
s where they exist, determining the base image from theDockerfile
, and works with any build tool. The Docker Official images are built with OCI annotations, and those cascade to derived images, so if you're not updating them your image manifests may have missing or incorrect information, and as more tools use that data it can become an increasing problem. See theimage-tools
container image project for details. - The GitLab CI Templates project pipeline was updated to trigger multi-project downstream pipelines in the appropriate subset of newly created test projects of common types (Node ESM/CJS, Go, container images). This allows for automated testing of template changes (for at least 90% of the templates), which is a significant improvement over the previous manual testing process.
- As part of this year's goal of migrating all of my CLI-based Node projects to
ESM, I converted the Pagean
project to ESM. It's still intentionally JavaScript, not TypeScript, but I get
all the type checking I need with JSDoc comments, which the project uses
already, and
tsc
is perfectly happy checking types with that. And most importantly, there's still no build step. - My favorite project of the year came out of nowhere in the last week of the year - the GitLab Webhook Renovate Proxy. This is a Cloudflare Worker that intercepts GitLab merge request event webhooks, which are extremely noisy, filters out all except those that should cause Renovate to re-analyze a project, and forwards to GitLab to trigger a CI pipeline. This allows projects to use Renovate's standard GitLab runner, but get back some of the responsiveness of the Renovate GitHub app. A blog post with the implementation details and setup instructions will be coming.
Contributions to other open source projects #
I also made contributions to a few other open source projects this year:
- I made my first contributions to GitLab, both
documentation cleanup
as well as
fixing documentation and tests
for the GitLab
release-cli
application. - I made my first contribution to the Trivy vulnerability scanner updating their GitLab report template to include the operating system to improve parity with GitLab's container scanning report.
Looking forward to 2025 #
Like so many years, it's going to be a wild ride…