[D] Roadmap for Apache Logging workflows [logging-log4j2]
ppkarwasz (via GitHub) <[email protected]> Sat, 25 Jul 2026 19:05:50 -0000
| Newsgroups | gmane.comp.jakarta.log4j.devel |
|---|---|
| Message-ID | <ghd-D_kwDOAKJSSM4AoChk__11647.0394817711$1785006360$gmane$org@gitbox.apache.org> |
GitHub user ppkarwasz created a discussion: Roadmap for Apache Logging workflows Our current v12 generation of reusable workflows works great, but new challenges like supply-chain security arise, which will require some modifications and hardenings. These are my thoughts for version 13 of `logging-parent`. ## Current reusable workflows The `gha/v0` branch currently offers these reusable workflows: | Workflow | Purpose | Planned changes | | -------------------------------------- | ---------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `analyze-dependabot-reusable.yaml` | Extracts Dependabot PR metadata for further processing | none | | `build-reusable.yaml` | Main CI build on a 3-OS matrix, with optional site build and reproducibility check | [reproducibility option](#deprecated-reproducibility-check-enabled-in-ci-workflow), [caching](#cache-optimization-in-ci-workflow), [site generation](#deploy-site-simplification) | | `codeql-analysis-reusable.yaml` | CodeQL analysis of the consumer repositories | [caching](#cache-optimization-in-ci-workflow) | | `deploy-release-reusable.yaml` | Releases: version and changelog commits, Nexus staging, distributions, SVN upload | [commit signing](#commit-signing), [supply chain](#supply-chain-of-release-branches), [distributions](#source-and-binary-distributions) | | `deploy-site-reusable.yaml` | Builds the website and deploys it to a Git branch | [site generation](#deploy-site-simplification), [commit signing](#commit-signing) | | `deploy-snapshot-reusable.yaml` | Deploys snapshot artifacts to Nexus | [caching](#cache-optimization-in-ci-workflow) | | `process-dependabot-reusable.yaml` | Adds changelog entries to Dependabot PRs and auto-merges them | none | | `verify-reproducibility-reusable.yaml` | Verifies build reproducibility against a reference repository | [caching](#cache-optimization-in-ci-workflow) | ## Deprecated `reproducibility-check-enabled` in CI workflow Affected workflows: `build-reusable.yaml` Our `build-reusable` workflow has a `reproducibility-check-enabled` option that runs a reproducibility check inside the CI build. The check has since been moved to the separate `verify-reproducibility-reusable` workflow, but the option has been kept for backward compatibility and still defaults to `true`. We should remove it. ## Cache optimization in CI workflow Affected workflows: all workflows using `setup-java` with `cache: maven` (`build-reusable.yaml`, `codeql-analysis-reusable.yaml`, `deploy-release-reusable.yaml`, `deploy-site-reusable.yaml`, `deploy-snapshot-reusable.yaml`) and `verify-reproducibility-reusable.yaml` Maven Central artifacts are platform-independent and immutable, so we could use a single cache for all platforms. However, the local Maven repository `~/.m2/repository` has two problems: - It is **not** under the `$GITHUB_WORKSPACE` tree, so it must be referenced by an absolute path. The `actions/cache` action uses the path of the cached files as **hidden** key, which prevents reuse between platforms. - It is used as **both** a Maven Central cache and **staging** area for local artifacts, so every `mvn install` makes it non-reusable. The second problem already forced `verify-reproducibility-reusable` to avoid the `setup-java` cache and manage its own monthly-keyed cache, to prevent artifacts built by other workflows from skewing its results. We could replace caching the local Maven repository with MimÃr (see [PR #389](https://github.com/apache/logging-parent/pull/389)), so we have more space available for other caches. ## Deploy site simplification Affected workflows: `build-reusable.yaml`, `deploy-site-reusable.yaml`, new `build-site-reusable.yaml` Currently, the `deploy-site-reusable.yaml` workflow performs two tasks, once a change is pushed to a website branch: 1. Generates the website, 2. Deploys the website to another branch. The first task is also performed by `build-reusable.yaml` (`site-enabled` option) to gate PRs, so we could refactor the workflows to avoid repeating the same tasks: - Remove site generation from `build-reusable.yaml`: this way we'll lose a gate that checks PRs from the documentation side. - Create a new `build-site-reusable.yaml` that performs **only** the site generation part of the build. Ideally this should reduce to: ```bash mvn compile -P <profile_that_skips_code_only_checks> mvn site ``` plus an upload of the website to the GitHub workflow run. - This way `deploy-site-reusable.yaml` could be reduced to checking out the right branch and downloading the artifact. Currently it contains a lot of complexity due to two checkouts in the same directory. ## Commit signing Affected workflows: `deploy-site-reusable.yaml`, `deploy-release-reusable.yaml` Today `deploy-site-reusable` uses the release GPG key only to (optionally) sign the website commits, while `deploy-release-reusable` uses it to sign the release commits, the Maven artifacts (via `sign-maven-plugin`) and the distributions. Commit signing is not very useful and requires one of our most important secrets: the release GPG key. That key should not be available to **most** workflows, i.e. it must be an "Environment secret", not an "Action secret". We should use it only to sign **release** artifacts for backward compatibility. A SLSA Provenance attestation should also be produced by the workflow that built the artifacts. ## Supply chain of release branches Affected workflows: `deploy-release-reusable.yaml` (and a new profile in `logging-parent`) Since May 2025 we have reviewed **all** the commits on our `2.x` and `main` branches, which allows us to declare a SLSA Source Level 4 for those two branches. Unfortunately the release commits are **not** on those branches, so we can not prove that we reviewed all the commits from one release to the next one. The missing link is the `release/*` branches, which _should_ ideally be protected too. Currently `deploy-release-reusable` makes three commits on those branches (set the `revision`, update the `project.build.outputTimestamp`, release the changelog), but we could: - either move that helper workflow to make changes to PRs to `release/*` (change the `<revision>` of the artifact to the version number of the target branch and update timestamp), - or add a profile to `logging-parent` that does those changes. Pretty much the equivalent of `spotless:apply`, but for releases: 1. It changes the artifact revision to the one given as parameter, 2. It updates the timestamp, 3. It releases the changelog. On the `release-reusable` side, the workflow would only check that: 1. The value of `revision` is the same as the version number of the branch, 2. The timestamp is not too much in the past, 3. No unreleased changelog entries exist. I think this is the only workflow that should have access to our GPG key and it should be gated by a `release` environment, which would require two committers to unlock. ## Source and binary distributions Affected workflows: `deploy-release-reusable.yaml` (and the `distribution` profile in `logging-parent`) I really don't like the fact that the binary and source releases are generated by a minimalistic Groovy script, which doesn't even support UNIX permissions. We could of course improve this and make it a Maven plugin, but I think there is a simpler solution: 1. In 2026 nobody needs a binary distribution, we should just drop it and replace it with a script that downloads artifacts from Maven Central and verifies them with our GPG key. 2. The source archive can be generated by `git archive`, which has the advantage of working without any Java, .NET or C++ environment, so it could be reused by all the projects. It runs in the workflow's local clone, so it does not depend on GitHub's server-side support, and its `--add-file` option leaves room for injecting files that are not Git-tracked, like the frozen NPM dependency manifests planned as a follow-up of [PR #506](https://github.com/apache/logging-parent/pull/506). GitHub link: https://github.com/apache/logging-log4j2/discussions/4221 ---- This is an automatically sent email for [email protected]. To unsubscribe, please send an email to: [email protected]