FWIW, my experience with GitHub actions over at Apache Commons is extremely positive.
Gary On Fri, Jun 11, 2021, 15:21 Matt Sicker <boa...@gmail.com> wrote: > We can certainly set up CI to build on upstream snapshot releases or even > nightly jobs. > > For improving the build time of core, that will require parallelizing tests > like in api. > > On Fri, Jun 11, 2021 at 13:48 Volkan Yazıcı <volkan.yaz...@gmail.com> > wrote: > > > I agree with all the points (both pros and cons) you have shared. > > > > A small "core" will speed up the development and release cycle > > significantly. Most of the time I skip a full Maven "verify", which is > > taking more than half an hour on my machine. > > > > Regarding CI, I believe there will be a huge win too due to faster > feedback > > cycles. Also note that it is possible to trigger GitHub Actions workflows > > from another repository change. Hence the consistency check across > > repositories you have described can easily be set up. > > > > On Fri, Jun 11, 2021 at 7:45 PM Ralph Goers <ralph.go...@dslextreme.com> > > wrote: > > > > > Not sure what you want a recap on. I see a few issues on both sides of > > the > > > coin: > > > > > > For splitting: > > > 1. Many of the current modules rarely get modified. Creating a new > > version > > > of > > > them with each release just so the release number matches seems silly. > > > 2. Yes, creating a release is time consuming. When I am nearing the > time > > to > > > perform a release I: > > > a. Review PRs and Jira issues looking for ones that are either > > critical, > > > serious > > > or easy to fix and try to address them. This typically involves > > > running the > > > build several times. > > > b. Perform all the required release updates. > > > c. Build the web site locally and inspect it. > > > d. Follow the guide to actually perform the release. > > > The prep time in step a is typically what takes the most time due to > how > > > many > > > times I run the full build. This is where the most time savings would > be > > > since > > > most of the changes occur in log4j-api and log4j-core, although the > most > > > time > > > consuming part of the build is the log4j-core unit tests. > > > 3. This might encourage everyone to run a full build for every commit. > > > > > > Against splitting: > > > 1. Confusion over where a particular component can be found. > > > 2. Although unlikely, it is possible a change in log4j-api or > log4j-core > > > could > > > break something in one of the other modules and we wouldn’t find out > > > immediately as we do today. This could be solved by setting up good > > > Jenkins > > > pipelines that cause all the sub projects to rebuild whenever the main > > > module is built. > > > > > > Ralph > > > > > > > On Jun 11, 2021, at 10:12 AM, Gary Gregory <garydgreg...@gmail.com> > > > wrote: > > > > > > > > I am on 100% board with spliting up modules/artifacts to reduce the > > "suck > > > > the world in" issue. Splitting into separate repos/projects I have > zero > > > > interest in, I only see drawbacks. Version confusion, BOM POM or not, > > > weird > > > > dependeny issues, more fiddling with IDEs to make sure you can get > > stuff > > > > done, bleh. > > > > > > > > I know Ralph has been quite generous with him time in release > > management > > > > and has mentioned numerous time that he feels the current repository > > size > > > > leads to long release candiate build times. But I see this as a > drive > > to > > > > break up the repository wrong headed. When I run any of the various > > Maven > > > > builds I use, some builds rebuilds various pieces needlessly, > compiling > > > > code when no recompilation is needed for example, running tests more > > than > > > > needed, and other Maven oddities. If the tooling is a problem, then > > lets > > > > look at that first. > > > > > > > > Maybe we could get a recap from Ralph? > > > > > > > > Gary > > > > > > > > > > > > On Fri, Jun 11, 2021, 10:42 Volkan Yazıcı <volkan.yaz...@gmail.com> > > > wrote: > > > > > > > >> Gary, I thought you were on board with breaking up into separate > > > projects. > > > >> What do you propose instead? > > > >> > > > >> On Fri, Jun 11, 2021 at 12:22 PM Gary Gregory < > garydgreg...@gmail.com > > > > > > >> wrote: > > > >> > > > >>> From my POV, this will create an incomprehensible mess of versions > > for > > > >>> users. Big bummer. > > > >>> > > > >>> Gary > > > >>> > > > >>> On Fri, Jun 11, 2021, 04:29 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. > > > >>>>>>>> > > > >>>>>> > > > >>>>> > > > >>>>> > > > >>>>> > > > >>>> > > > >>> > > > >> > > > > > > > > > > > >