Re: Bridges in 2.x and 3.x

2024-10-24 Thread Piotr P. Karwasz

Hi Gary,

On 23.10.2024 12:50, Gary D. Gregory wrote:

Another batch of repositories? -1 and you must be joking. We really are going 
off the map here IMO :(

Releasing different jars from one repo is the same as releasing jars from one 
SSD: A repo is just a folder with subfolders you can organize as you best see 
fit. So why have 10 repos? Or how ever many we have now splintered Log4j into?


Right now we have:

`logging-log4j-flume`: the Flume Appender that is waiting for Flume to exit its 
dormant state.

`logging-log4j-jakarta`: contains the integration of Log4j Core 3 with Jakarta 
EE.

`logging-log4j-jmx-gui`: a standalone application to access Log4j Core 2 
through JMX.

`logging-log4j-kotlin`: the Kotlin API.

`logging-log4j-scala`: the Scala API.

`logging-log4j-tools`: a set of tools for private consumption (incubating).

`logging-log4j-transform`: a set of tools for public consumption (incubating).

`logging-log4j2`: contains Log4j API, the bridges, Log4j Core and its 
extensions in the `2.x` branch, just Log4j Core and its extensions in the 
`main` branch.

IMHO this is much less than the 44 repositories of Apache Commons. The 
sub-projects are documented on the webpage, but I can add a short guide to the 
README.adoc of `logging-log4j2`, the same way Tatu linked all its sub-projects 
in the main Jackson repository[1].

Is your -1 a veto? Can you propose a different technical solution so that:

* The bridge code is not duplicated in multiple branches.

* We don't need to make special Log4j releases just because SLF4J changed 
something (like 2.19.0, which didn't change anything in Log4j). Ceki is 
considering bumping the SLF4J requirements to Java 11[2]. I always found it 
annoying to upgrade a library even if nothing changed (e.g. in SLF4J 1.7.x most 
recent changes were in the bridges to some end-of-life legacy APIs).

* We don't need to modify our build scripts so we can publish `logging-log4j2` 
without a folder and publish the folder separately. Don't get me wrong, this is 
feasible, but I would only do it for technical reasons: e.g. 
`logging-log4j-samples` needs a different toolchain to compile the JDK, GraalVM 
and Android examples.

Piotr

[1] https://github.com/FasterXML/jackson
[2] https://github.com/qos-ch/slf4j/discussions/379







Re: Bridges in 2.x and 3.x

2024-10-24 Thread Ralph Goers
Gary,

With the changes that have been made the bridges only have a dependency on 
Logj4 API - which is only in the 2.x branch. Should these artifacts only be on 
the 2.x branch as well? 

These bridges don’t change nearly as often as core or even api do. IMO 
releasing them with every release doesn’t make a lot of sense. To be honest, I 
would have suggested that the API and everything that is only dependent on the 
API (except for core) be in a separate repo with its own release schedule. This 
would match pretty much what SLF4J does.

Are you suggesting that the bridges be included in both 2.x and main? Are you 
suggesting that the bridges MUST be versioned the same as 2.x despite them 
almost never having any changes?

I’m simply trying to understand what your rationale is here.

Ralph

> On Oct 23, 2024, at 3:50 AM, Gary D. Gregory  wrote:
> 
> Another batch of repositories? -1 and you must be joking. We really are going 
> off the map here IMO :(
> 
> Releasing different jars from one repo is the same as releasing jars from one 
> SSD: A repo is just a folder with subfolders you can organize as you best see 
> fit. So why have 10 repos? Or how ever many we have now splintered Log4j 
> into? It's not like we document it. I bet devs put all Log4j repos in the 
> same folder anyway... Does STF funding work by getting paid on a per repo 
> basis? Sigh.
> 
> At some point in the future I only hope someone will reign in this mad cow 
> bug we've caught and use a mono repo for Log4j.
> 
> I'm have some work to contributing here soon but this is all noise that gets 
> in the way IMO.
> 
> Gary
> 



Multi-repository deploy workflows

2024-10-24 Thread Piotr P. Karwasz
Hi all,

To reassure those that fear that splitting components over multiple
repos can make integration between Log4j components more difficult, I
have submitted a couple of PRs last week to simplify that:

* I have introduced a new reproducibility check in
apache/logging-parent#271[1] and apache/logging-log4j2#3101[2] that
verifies the reproducibility of artifacts after they have been
deployed to a Nexus repo. Unlike the previous reproducibility check,
this one does not run in the same job (on the same machine) as the
build, runs on multiple platforms and compares the artifacts against
those published in **remote** Maven repos (not the local one). The CI
run [3] confirms that the reproducibility of Log4j does not depend on
the platform.

* We don't really have integration tests in `logging-log4j2`: those
that we have don't run in the build, those that run don't use the
final JAR file, but `target/classes` and they certainly don't use
JPMS. Therefore I consider `logging-log4j-samples` as the source of
integration tests. In PR apache/logging-log4j2#3105[4] I introduce a
workflow job that runs all the tests we have in
`logging-log4j-samples` after any kind of deployment in
`logging-log4j2`.

Could you review the PRs above? Does this approach address your
arguments against releasing some Log4j artifacts separately from a
separate repos?

Piotr

[1] https://github.com/apache/logging-parent/pull/271
[2] https://github.com/apache/logging-log4j2/pull/3101
[3] https://github.com/apache/logging-log4j2/actions/runs/11387867995
[4] https://github.com/apache/logging-log4j2/pull/3105