Adding a bit of background information to help with discussions.
Current Tests
As of today, there are three major sets of tests we run.
- Tests against a pull request
- Tests to verify a project branch and produce a verified source
- Tests to verify distribution packages and integration before releasing
Historically, #2 and #3 are only done for core and nightly packages. Further, #1 and #2 have been equivalent for nightly packages given we test the branches as thoroughly as a PR to ensure a high quality source is generated as input to package building.
If PR testing is moved to Github actions, the biggest issue we face is that branch testing may diverge from PR testing and result in lower quality sources. If for any project that has branch testing, we could move this to GH actions as well we could keep our parity. This branch testing would either have to:
a) generate source and upload it somewhere
b) kickoff a job to generate source in our Jenkins
Jenkins Theory
The theory behind Jenkins sharing is the move to the Groovy programming language backed by a DSL called Pipelines. The idea is you can create groovy functions to capture logic and then share them via a library hosted on the Jenkins so that developers can build pipelines similar to GH action declarations. You can even store these as Jenkinsfiles in your projects similar to a .travis.yml or GH action workflow.
Single Team vs. Developer Focused
The project has taken an approach to CI that was focused on community members within the infra team to create and manage jobs and helpers for projects for testing. This helped as there have not always been developer friendly methods of adding CI/CD and allowed developers to focus on code and writing tests. Rather than what ran said tests. As mentioned, there was also a heavy lean towards the effects on delivery and building to have a full delivery pipeline.
As a project, we have not gone this route as of yet preferring to store all of our Groovy in a single git instance and use Jenkins Job Builder to handle job definitions as well as the code that backs them. This is not as developer friendly but is friendly to a centralized team managing all aspects of this.
I think Travis, GH Actions and even Zuul (which just uses Ansible) both have simpler DSLs and processes for putting control back in developers hands. I think if projects would prefer to entirely control their own destiny in this regard, then we can certainly go that route as a community and reduce the usage of our Jenkins for delivery focused jobs.
The sense I get is that we are moving towards developer ownership of the tests that run and how they run to verify their software. I think this can be good for the community. The part that I then think developers also have to take ownership of is the generation of their source and what checks are placed on that. This allows the team of developers focused on delivery to care and know their is a verified source for a given project out there for packaging but not how it’s made. Which I do think could open up more projects to a nightly release style similar to the core projects and Katello.