Regarding Jenkins vs GitHub Actions - while the code coverage is obviously the ame because they are both running the same build, the two systems don’t necessarily use the same OSes and/or versions.
Ralph > On Jun 13, 2021, at 12:32 PM, Volkan Yazıcı <volkan.yaz...@gmail.com> wrote: > > Migrating to a Bazel-like build system will necessitate quite some effort. > After all, they are in essence *"make in steroids"*, which translates to > humongous manual scripting that is already there in Maven. IDE > compatibility is another issue too. (This said, "master" in its current > form doesn't compile in IntelliJ IDEA, ironically.) Even though having a > single repository with blazing fast (and reproducible!) builds sounds > charming, I don't know of such a Bazel ninja among us to turn this into > reality. To be honest, I had sneakily investigated this option in depth > months ago. Compilation unit granularity is a big issue there. In > particular, I have found the presentation of Wix where they explain how > they have migrated their builds from Maven/Gradle to Bazel > <https://youtu.be/2UOFm-Cc_cU> pretty interesting. Long story short, I > cannot see this plan flying and hence, agreeing with Ralph on sticking to > Maven. > > Jira tickets would help us to associate the commits with tickets for > keeping track of what and why something has changed. For administrative > purposes, in short. > > I agree with your remarks about the website. > > Ralph, what do you mean by *"I like having both [Jenkins and GitHub > Actions] simply because we can get more coverage"*? In theory, their > coverages are identical. In my experience, having two separate CI pipelines > adds nothing but confusion and maintenance burden. > > On Sat, Jun 12, 2021 at 1:57 AM Ralph Goers <ralph.go...@dslextreme.com> > wrote: > >> No, and to be honest I am not particularly interested in moving away from >> Maven, >> despite its limitations. >> >> I am not sure what we would need Jira tickets for. Creating new GitHub >> repos >> is self service I believe. The web site work is going to be a bunch of >> manual >> effort to get the site the way we want it. We also still have to agree on >> how >> we want it to support both 2.x and 3.x. >> >> My suggestion for the web site would be to have a main site that applies >> to >> both and then have it link to version specific information. I would >> suggest that >> the main log4j web site should be pulled out of the log4j build and move >> into >> logging-log4j-site directly. I would think that pretty much the only stuff >> that >> would remain in the version specific sites would be the stuff generated by >> the >> maven site plugin. >> >> Gary, we already have GitHub Actions set up for Log4j. We also have >> Jenkins >> jobs. I like having both simply because we can get more coverage. >> >> Ralph >> >> >> >>> On Jun 11, 2021, at 2:38 PM, Matt Sicker <boa...@gmail.com> wrote: >>> >>> Bazel could be interesting, but does anyone here know how to configure >> it? >>> >>> On Fri, 11 Jun 2021 at 15:00, Volkan Yazıcı <volkan.yaz...@gmail.com> >> wrote: >>>> >>>> Since all of us are on board with the idea – except Gary, whom I will >>>> address below – shall we work out the structuring? I already shared my >>>> proposal. What is your preference? Once we agree on that, I can create >>>> relevant Jira tickets, also for the website & manual updates. I can take >>>> the responsibility of executing the plan. >>>> >>>> Gary, I agree with your concerns regarding the build tool. Right now >> there >>>> are ~50 modules in the master. As long as we execute each module's tests >>>> sequentially, which is inevitable in Maven and Gradle, I don't think we >> can >>>> shave that down to 10 minutes or so. Not to mention the compile time >>>> itself. Unless we migrate to something substantially fine-grained (e.g., >>>> Bazel), I can't think of this happening with Maven or Gradle. Migrating >> to >>>> such exotic solutions have their own trade-offs too. >>>> >>>> On Fri, Jun 11, 2021 at 10:29 AM Volkan Yazıcı <volkan.yaz...@gmail.com >>> >>>> wrote: >>>> >>>>> To start the discussion for breaking up the modules into separate >>>>> projects, I propose the following structure: >>>>> >>>>> *logging-log4j* >>>>> log4j-1.2-api >>>>> log4j-api >>>>> log4j-bom >>>>> log4j-core >>>>> log4j-core-its >>>>> log4j-gctests >>>>> log4j-iostreams >>>>> log4j-layout-template-json >>>>> log4j-perf >>>>> log4j-plugins >>>>> >>>>> *logging-log4j-appender* >>>>> log4j-cassandra >>>>> log4j-couchdb >>>>> log4j-csv >>>>> log4j-flume-ng >>>>> log4j-mongodb3 >>>>> log4j-mongodb4 >>>>> log4j-smtp >>>>> >>>>> *logging-log4j-appender-jdbc* >>>>> log4j-jdbc (?) >>>>> log4j-jdbc-dbcp2 (?) >>>>> log4j-jpa >>>>> >>>>> *logging-log4j-appender-queue* >>>>> log4j-jeromq >>>>> log4j-jms >>>>> log4j-kafka >>>>> log4j-redis >>>>> >>>>> *logging-log4j-binding* >>>>> log4j-jcl >>>>> log4j-jpl >>>>> log4j-jul >>>>> log4j-liquibase >>>>> log4j-slf4j18-impl >>>>> log4j-slf4j-impl >>>>> log4j-to-slf4j >>>>> >>>>> *logging-log4j-container* >>>>> log4j-docker >>>>> log4j-kubernetes >>>>> >>>>> *logging-log4j-gui* >>>>> log4j-jmx-gui >>>>> >>>>> *logging-log4j-jee* >>>>> log4j-appserver >>>>> log4j-taglib >>>>> log4j-web >>>>> >>>>> *logging-log4j-layout-jackson* >>>>> log4j-layout-jackson >>>>> log4j-layout-jackson-json >>>>> log4j-layout-jackson-xml >>>>> log4j-layout-jackson-yaml >>>>> >>>>> *logging-log4j-osgi* >>>>> log4j-osgi >>>>> >>>>> *logging-log4j-spring* >>>>> log4j-spring-boot >>>>> log4j-spring-cloud-config >>>>> >>>>> Note that above breakdown contains every available module in master, >>>>> except log4j-samples, which has the following sub-modules: >>>>> >>>>> log4j-samples-loggerProperties (contains 2 very trivial example >> classes, >>>>> log4j-core [tests] contains more comprehensive alternatives) >>>>> log4j-samples-flume-remote (flume-specific) >>>>> log4j-samples-flume-embedded (flume-specific) >>>>> log4j-samples-flume-common (flume-specific) >>>>> log4j-samples-configuration (contains 3 very trivial example classes, >>>>> log4j-core [tests] contains more comprehensive alternatives) >>>>> >>>>> I propose removing log4j-samples module and, if necessary, moving >>>>> Flume-related parts to the log4j-flume-ng. >>>>> >>>>> I have kept log4j-layout-template-json in the logging-log4j project, >> since >>>>> it has no external dependencies. This said, I am okay with moving it >> to a >>>>> separate logging-log4j-layout project. >>>>> >>>>> Please share your remarks. Eventually, I want to translate this into a >>>>> JIRA ticket. >>>>> >>>>> Kind regards. >>>>> >>>>> On Thu, Jun 10, 2021 at 5:43 PM Ralph Goers < >> ralph.go...@dslextreme.com> >>>>> wrote: >>>>> >>>>>> Gary, >>>>>> >>>>>> I am -1 to almost every item on your list. >>>>>> >>>>>> When I said break up I meant mostly moving most everything outside of >>>>>> log4j-core, >>>>>> log4j-api, and log4j-plugins into separate repos such as >>>>>> logging-log4j-nosql, >>>>>> logging-log4j-pubsub, etc. These would not require groupId or >> artifactId >>>>>> changes >>>>>> although the versioning would potentially be out of synch with the >> main >>>>>> releases >>>>>> as each would be on its own release cycle. This would greatly simplify >>>>>> releasing >>>>>> core but it would require careful though on what the versions would be >>>>>> for the >>>>>> “extra” projects. >>>>>> >>>>>> As for further breaking up core, that should revolve primarily around >>>>>> reducing the >>>>>> dependencies listed in module-info.java to the bare minimum. >>>>>> >>>>>> There will be no log4j3. We cannot change groupIds, artifactIds, or >>>>>> package names, >>>>>> other than what has been done to support JPMS. A world in which a >> log4j2 >>>>>> and >>>>>> log4j3 try to co-exist would be an unmitigated disaster. Commons can >>>>>> happily get >>>>>> away with that. Log4j cannot. >>>>>> >>>>>> If an application had both log4j2 and log4j3 jars present they would >> end >>>>>> up with >>>>>> multiple LoggerContexts, multiple Configurations, and multiple >> Appender >>>>>> Managers >>>>>> where today there is only a single one. That would mean two instances >> of >>>>>> the same >>>>>> configuration file would be active at once. So when it is time to >>>>>> rollover it would >>>>>> be performed twice instead of once as a simple example. For this >> reason >>>>>> we >>>>>> CANNOT break backward compatibility. >>>>>> >>>>>> However, we are talking about runtime backward compatibility. The >> Plugin >>>>>> system >>>>>> was changed internally in 3.0 so that plugins compiled with 3.0 use >>>>>> ServiceLoader >>>>>> instead of the data file. However, it will still find and use 2.x >> plugins >>>>>> when they are >>>>>> present and can be located. >>>>>> >>>>>> The meaning of this should be clear. It is 3.0 because to take >> advantage >>>>>> of its >>>>>> features you may have to make code changes. But it will tolerate code >>>>>> that was >>>>>> compiled for 2.x. >>>>>> >>>>>> The reasons why it is 3.0 and not a simple upgrade to 2.x are: >>>>>> 1. Plugins must be compiled with 3.0 to use the ServiceLoader >> packaging. >>>>>> 2. It requires Java 11. We still need to support Java 8. >>>>>> 3. It fully supports JPMS. Release 2.x does not. It is likely that >>>>>> applications with >>>>>> multiple Module Layers might not be able to find all the plugins. >> Adding >>>>>> full JPMS >>>>>> support to 2.x simply isn’t possible. >>>>>> 4. It will be introducing new DI injection features not present in >> 2.x. >>>>>> >>>>>> Major releases do not imply that you are completely breaking backward >>>>>> compatibility. >>>>>> They imply that some kind of compatibility is broken, which we are >> doing >>>>>> by >>>>>> requiring coding changes to Plugins to compile with 3.0. This means we >>>>>> need to >>>>>> leave in any classes or methods that existing plugins might have >> used. It >>>>>> means >>>>>> we have to continue using our own Supplier unless it can be verified >> that >>>>>> an >>>>>> application using the Supplier in 2.x can run with 3.0 even if it is >>>>>> converted to >>>>>> java.util.function.Supplier. I have no idea if the code the compiler >>>>>> generates >>>>>> for lambdas actually implements the declared interface or not. >>>>>> >>>>>> Log4j 3.0 is a major change. But that doesn’t mean we can screw our >> users >>>>>> by >>>>>> breaking everything. >>>>>> >>>>>> Ralph >>>>>> >>>>>> >>>>>> >>>>>>> On Jun 10, 2021, at 6:32 AM, Gary Gregory <garydgreg...@gmail.com> >>>>>> wrote: >>>>>>> >>>>>>> These are all IMOs of course, YMMV: >>>>>>> - What's the rush to 3.0? >>>>>>> >>>>>>> - I'm all for breaking up the core and other artifacts into more >>>>>>> artifacts based on their dependencies requirement such that depending >>>>>>> on Log4j 3 does not "suck in the world", for example, I should be >> able >>>>>>> to depend on a currently non-existent "log4j3-console" and only bring >>>>>>> in a tiny bit of code (API, a tiny core, and no plugin system). I did >>>>>>> a fair amount of breaking up of various artifacts a while back. >>>>>>> >>>>>>> - 3.0 is a MAJOR release that gives us the opportunity to drop >>>>>>> deprecated APIs and code like our custom functional interfaces: >>>>>>> Supplier and so on. If we do not clean up, then there is no point in >> a >>>>>>> major release. Basically, I expect to break binary and source >>>>>>> compatibility. >>>>>>> >>>>>>> - 3.0 must be in a new package namespace and new Maven coordinates. I >>>>>>> MUST be able to run Log4j 1, 2, and 3 in the same class loader. I can >>>>>>> already run Log4j 1 and 2 side by side which is good. >>>>>>> >>>>>>> Gary >>>>>>> >>>>>>> On Thu, Jun 10, 2021 at 8:47 AM Volkan Yazıcı < >> volkan.yaz...@gmail.com> >>>>>> wrote: >>>>>>>> >>>>>>>> Ralph, count me in for such a change. I really want to have separate >>>>>>>> sub-projects for such modules. This will extremely speed up >>>>>> build/release >>>>>>>> times too, which is nowadays of uttermost importance to my peace of >>>>>> mind >>>>>>>> while developing. >>>>>>>> >>>>>>>> This said, I am reluctant about such a major change when we are this >>>>>> close >>>>>>>> to the 3.0.0 release. I guess this would definitely postpone the >> 3.0.0 >>>>>>>> release to 2022. This will probably break the backward >> compatibility at >>>>>>>> least for the artifact groupId, am I wrong? Not to mention that the >>>>>> entire >>>>>>>> website needs to be adapted to this multi-project setup too. Is >> there >>>>>>>> anything else? >>>>>>>> >>>>>>>> On Thu, Jun 3, 2021 at 5:31 PM Ralph Goers < >> ralph.go...@dslextreme.com >>>>>>> >>>>>>>> wrote: >>>>>>>> >>>>>>>>> Yeah - I have proposed moving all these extra integrations to a >>>>>> separate >>>>>>>>> repo but >>>>>>>>> I’ve never gotten consensus. I’d prefer to have a project like >>>>>>>>> log4j-pubsub where >>>>>>>>> things like JMS, JeroMQ, etc can go live, log4j-nosql for all the >>>>>> nosql >>>>>>>>> modules, etc. >>>>>>>>> The problem seems to be that some people believe that we would have >>>>>> to cut >>>>>>>>> a >>>>>>>>> release of those every time we do a log4j release. >>>>>>>>> >>>>>>>>> If we were to do that 3.0 would be the right time. >>>>>>>>> >>>>>>> >>>>>> >>>>>> >>>>>> >>> >> >> >>