tiagobento opened a new pull request, #6691: URL: https://github.com/apache/incubator-kie-drools/pull/6691
Part of https://github.com/apache/incubator-kie-issues/issues/2285 --- Please check the [open PRs on my fork simulating this new CI system running for the latest 100 commits](https://github.com/tiagobento/incubator-kie-drools/pulls) in `apache/incubator-kie-drools`. They're not order, but are numbered. The [test PR #55](https://github.com/tiagobento/incubator-kie-drools/actions/runs/24679561788/job/72172880646?pr=76) failed but the root cause (issue https://github.com/apache/incubator-kie-drools/issues/6669) was fixed by PR https://github.com/apache/incubator-kie-drools/pull/6687 I disabled the flaky PersistenceTest#testTraitsSerialization in this PR, and changed `drools-test-coverage-jars-with-invoker` module to respect the `skipITs` variable. I removed the Jenkins CI (which was always broken anyway) and the release scripts already, as that's the next step in the 10.3.x+ stream we'll be tackling. I kept the old PR checks and CI systems in place so that we can validate this new one over the next few weeks. --- # How the new CI system works 1. Determine which Maven modules changed based on the changed files in a PR. 2. Extract the modules dependency graph directly from Maven's reactor via the Dependency Graph Extractor Maven extension (with some extra logic to include BOMs in the dependency graph) 3. Traverse the extracted dependency graph to determine which modules are not affected by the changes on the PR, which modules are affected, and which modules are not even necessary to be built. 4. Build unaffected modules (upstream) so that building affected modules succeed. 5. Build affected modules (affected) running all their tests and checks. 6. Check build and test results and report it in a GitHub Actions summary. ### Notes - The entrypoint for the new CI is `.github/workflows/ci.yaml` - Except for a few commands, the whole build scope determination (upstream and affected packages) is easy to be developed and tested locally. By avoiding full builds on PR checks when possible, this new CI is more efficient than any previous CI we had. # Example ([simulated PR #100](https://github.com/tiagobento/incubator-kie-drools/pull/118)) ### [incubator-kie-issues#2091] Modify the `kogito-maven-plugin` to be a wrapper of the codegen library (#6452) The new CI took [`30m 4s`](https://github.com/tiagobento/incubator-kie-drools/actions/runs/24669023706?pr=118) instead of [`41m 3s`](https://github.com/apache/incubator-kie-drools/actions/runs/17727971595?pr=6452) This was achieved by splitting the build in: - Changed modules (1) - Upstream modules (138) - Affected modules (73) - Skipped modules (43) Here's the dependency graph extracted during that PR's checks: ```mermaid flowchart TD a(["drools-test-coverage-jars"]) b(["drools-test-coverage"]) c(["test-integration-ruleunits"]) d(["drools-base"]) e[["drools-bom"]] f(["drools-canonical-model"]) g(["drools-commands"]) h(["drools-compiler"]) i(["drools-core"]) j(["drools-decisiontables"]) k(["drools-drl"]) l(["drools-drl-ast"]) m(["drools-drl-extensions"]) n(["drools-drl-parser"]) o(["drools-drlonyaml-model"]) p(["drools-drlonyaml-parent"]) q(["drools-drlonyaml-schemagen"]) r(["drools-drlonyaml-todrl"]) s(["drools-ecj"]) t(["drools-engine-classic"]) u(["drools-impact-analysis"]) v(["drools-impact-analysis-graph"]) w(["drools-impact-analysis-graph-common"]) x(["drools-impact-analysis-model"]) y(["drools-io"]) z(["drools-kiesession"]) aa(["drools-legacy-test-util"]) ab(["drools-model"]) ac(["drools-model-compiler"]) ad(["drools-model-prototype"]) ae(["drools-mvel"]) af(["drools-mvel-compiler"]) ag(["drools-mvel-parser"]) ah(["drools-quarkus-examples"]) ai(["drools-quarkus-extension"]) aj(["drools-quarkus-integration-test-multimodule"]) ak(["drools-quarkus-integration-test-multimodule-dep"]) al(["drools-reliability"]) am(["drools-reliability-core"]) an(["drools-reliability-infinispan"]) ao(["drools-ruleunits"]) ap(["drools-ruleunits-api"]) aq(["drools-scenario-simulation"]) ar(["drools-scenario-simulation-api"]) as(["drools-serialization-protobuf"]) at(["drools-templates"]) au(["drools-tms"]) av(["drools-util"]) aw(["drools-verifier"]) ax(["drools-verifier-api"]) ay(["drools-verifier-core"]) az(["drools-verifier-drl"]) ba(["drools-verifier-test-jar"]) bb(["drools-wiring"]) bc(["drools-wiring-api"]) bd(["drools-wiring-dynamic"]) be(["drools-wiring-static"]) bf(["drools-xml-support"]) bg(["build-parent"]) bh(["root"]) bi(["efesto"]) bj(["efesto-common-api"]) bk(["efesto-common-core"]) bl(["efesto-common-utils"]) bm(["efesto-compilation-manager"]) bn(["efesto-compilation-manager-api"]) bo(["efesto-compilation-manager-core"]) bp(["efesto-core"]) bq(["efesto-runtime-manager"]) br(["efesto-runtime-manager-api"]) bs(["efesto-runtime-manager-core"]) bt(["kie-api"]) bu(["kie-ci"]) bv[["kie-core-bom"]] bw(["kie-dmn"]) bx(["kie-dmn-api"]) by(["kie-dmn-backend"]) bz[["kie-dmn-bom"]] ca(["kie-dmn-core-jsr223-jq"]) cb(["kie-dmn-efesto-api"]) cc(["kie-dmn-feel"]) cd(["kie-dmn-model"]) ce(["kie-dmn-pmml-tests-parent"]) cf(["kie-dmn-ruleset2dmn-parent"]) cg(["kie-dmn-test-resources"]) ch(["kie-dmn-xsd-resources"]) ci(["kie-drl"]) cj(["kie-drl-api"]) ck(["kie-drl-implementations"]) cl(["kie-drl-kiesession-local"]) cm(["kie-drl-kiesession-local-runtime"]) cn(["kie-drl-map-input"]) co(["kie-drl-map-input-runtime"]) cp(["kie-drl-runtime-common"]) cq[["kie-efesto-bom"]] cr(["kie-internal"]) cs(["kie-memory-compiler"]) ct(["kie-pmml-api"]) cu[["kie-pmml-bom"]] cv(["kie-pmml-commons"]) cw(["kie-pmml-compiler"]) cx(["kie-pmml-compiler-api"]) cy(["kie-pmml-compiler-commons"]) cz(["kie-pmml-compiler-core"]) da(["kie-pmml-evaluator"]) db(["kie-pmml-evaluator-api"]) dc(["kie-pmml-evaluator-core"]) dd(["kie-pmml-evaluator-utils"]) de(["kie-pmml-models"]) df(["kie-pmml-models-clustering"]) dg(["kie-pmml-models-clustering-compiler"]) dh(["kie-pmml-models-clustering-evaluator"]) di(["kie-pmml-models-clustering-model"]) dj(["kie-pmml-models-drools"]) dk(["kie-pmml-models-drools-scorecard"]) dl(["kie-pmml-models-drools-tree"]) dm(["kie-pmml-models-mining"]) dn(["kie-pmml-models-mining-evaluator"]) do(["kie-pmml-models-mining-model"]) dp(["kie-pmml-models-regression"]) dq(["kie-pmml-models-regression-compiler"]) dr(["kie-pmml-models-regression-evaluator"]) ds(["kie-pmml-models-regression-model"]) dt(["kie-pmml-models-scorecard"]) du(["kie-pmml-models-scorecard-compiler"]) dv(["kie-pmml-models-scorecard-evaluator"]) dw(["kie-pmml-models-scorecard-model"]) dx(["kie-pmml-models-tests"]) dy(["kie-pmml-models-tree"]) dz(["kie-pmml-models-tree-compiler"]) ea(["kie-pmml-models-tree-evaluator"]) eb(["kie-pmml-models-tree-model"]) ec(["kie-pmml-trusty"]) ed(["kie-test-util"]) ee(["kie-util"]) ef(["kie-util-maven-integration"]) eg(["kie-util-maven-support"]) eh(["kie-util-xml"]) er{{"drools-codegen-common"}} ei["drools-test-coverage-jars-with-invoker"] ej["test-suite"] ek["test-compiler-integration"] el["test-integration-nomvel"] em["test-integration-notms"] en["test-integration-noxml"] eo["test-integration-ruleunits-jar"] ep["test-integration-ruleunits-tests"] eq["drools-alphanetwork-compiler"] es["drools-drlonyaml-integration-tests"] et["drools-engine"] eu["drools-impact-analysis-graph-graphviz"] ev["drools-impact-analysis-graph-json"] ew["drools-impact-analysis-itests"] ex["drools-impact-analysis-parser"] ey["drools-model-codegen"] ez["drools-quarkus"] fa["drools-quarkus-deployment"] fb["drools-quarkus-examples-multiunit"] fc["drools-quarkus-examples-reactive"] fd["drools-quarkus-integration-test"] fe["drools-quarkus-integration-test-hotreload"] ff["drools-quarkus-integration-test-kmodule"] fg["drools-quarkus-integration-test-multimodule-main"] fh["drools-quarkus-quickstart-test"] fi["drools-quarkus-ruleunit-integration-test"] fj["drools-quarkus-ruleunits"] fk["drools-quarkus-ruleunits-deployment"] fl["drools-quarkus-util-deployment"] fm["drools-reliability-h2mvstore"] fn["drools-reliability-tests"] fo["drools-ruleunits-dsl"] fp["drools-ruleunits-engine"] fq["drools-ruleunits-impl"] fr["drools-scenario-simulation-backend"] fs["drools-scenario-simulation-integrationtest"] ft["kie-archetypes"] fu["kie-dmn-core"] fv["kie-dmn-core-jsr223"] fw["kie-dmn-efesto-compilation"] fx["kie-dmn-efesto-runtime"] fy["kie-dmn-legacy-tests"] fz["kie-dmn-openapi"] ga["kie-dmn-pmml-tests"] gb["kie-dmn-pmml-tests-trusty"] gc["kie-dmn-ruleset2dmn"] gd["kie-dmn-ruleset2dmn-cli"] ge["kie-dmn-signavio"] gf["kie-dmn-trisotech"] gg["kie-dmn-validation"] gh["kie-dmn-validation-bootstrap"] gi["kie-dmn-xls2dmn-cli"] gj["kie-drl-compilation-common"] gk["kie-drl-tests"] gl["kie-drl-tests-without-index-file"] gm["kie-drools-dmn-archetype"] gn["kie-drools-exec-model-archetype"] go["kie-drools-exec-model-ruleunit-archetype"] gp["kie-drools-yaml-archetype"] gq["kie-maven-plugin"] gr["kie-pmml-dependencies"] gs["kie-pmml-models-drools-common"] gt["kie-pmml-models-drools-scorecard-compiler"] gu["kie-pmml-models-drools-scorecard-evaluator"] gv["kie-pmml-models-drools-scorecard-model"] gw["kie-pmml-models-drools-scorecard-tests"] gx["kie-pmml-models-drools-tree-compiler"] gy["kie-pmml-models-drools-tree-evaluator"] gz["kie-pmml-models-drools-tree-model"] ha["kie-pmml-models-drools-tree-tests"] hb["kie-pmml-models-mining-compiler"] hc["kie-pmml-models-mining-tests"] a --> ei a --> ej b --> a b --> c b --> en c --> eo d --> i e --> bz f --> ac g --> aa g --> bf h --> ac h --> ae h --> am h --> bf h --> cc i --> m i --> n i --> z i --> af i --> dc j --> ey k --> l k --> m l --> n m --> h m --> r n --> h n --> o o --> r p --> q q --> o r --> es r --> fd r --> ff r --> gq s --> h t --> ek u --> v u --> x v --> w w --> eu w --> ev x --> w x --> ex y --> n z --> g z --> h z --> au aa --> as ab --> f ab --> ag ab --> er ac --> ad ac --> cp ad --> ey ae --> t ae --> aa ae --> at ae --> az af --> ey ag --> af ah --> fb ah --> fc ai --> ah ai --> aj ai --> ez ai --> fj ai --> fl aj --> ak ak --> fg al --> am am --> an am --> fm an --> fn ao --> ap ap --> fq aq --> ar ar --> fr as --> bu at --> j au --> ae av --> y av --> cs av --> er aw --> ax ax --> ay ax --> az ay --> ej az --> ej ba --> az bb --> bc bc --> d bc --> bd bc --> be bd --> z be --> i bf --> j bf --> t bf --> bu bf --> dn bg --> b bg --> k bg --> p bg --> u bg --> ab bg --> ai bg --> al bg --> ao bg --> aq bg --> av bg --> aw bg --> bb bg --> bi bg --> bt bg --> bw bg --> ci bg --> ec bg --> ed bg --> ee bh --> bv bi --> bp bj --> bk bj --> bl bj --> bn bj --> br bj --> cb bj --> cj bk --> bo bk --> bs bl --> cz bm --> bn bn --> bo bn --> ct bo --> cv bo --> gj bp --> bj bp --> bm bp --> bq bq --> br br --> bs br --> ct bs --> cp bs --> dc bt --> y bt --> cr bt --> ct bt --> eg bu --> ej bu --> fu bv --> e bv --> cq bv --> cu bw --> ca bw --> cb bw --> cd bw --> ce bw --> cf bw --> cg bw --> ch bw --> gh bx --> by bx --> cc by --> fu bz --> bg ca --> fv cb --> fw cb --> fx cc --> fu cd --> bx ce --> ga cf --> gc cg --> fu ch --> by ch --> cc ci --> cj ci --> ck ci --> cp cj --> cm cj --> co cj --> gj ck --> cl ck --> cn cl --> cm cm --> gk cn --> co co --> fs co --> gb co --> gk co --> gw co --> ha cp --> cm cp --> co cq --> bg cr --> l cr --> ap cr --> bc cr --> bx cs --> s cs --> bc cs --> bj ct --> cv cu --> bg cv --> cx cv --> db cv --> di cv --> do cv --> ds cv --> dw cv --> eb cw --> cx cx --> cy cy --> cz cy --> dg cy --> dq cy --> du cy --> dz cy --> gs cz --> dd cz --> fu da --> db db --> dc dc --> dd dc --> dh dc --> dn dc --> dr dc --> dv dc --> ea dc --> gs dd --> dx dd --> gr de --> df de --> dj de --> dm de --> dp de --> dt de --> dx de --> dy df --> di dg --> gr dh --> gr di --> dg di --> dh dj --> dk dj --> dl dj --> gs dk --> gv dl --> gz dm --> do dn --> gr dn --> hc do --> dn do --> hb dp --> ds dq --> fu dq --> hb dr --> fu dr --> gr dr --> hc ds --> dq ds --> dr dt --> dw du --> hb dv --> gr dv --> hc dw --> du dw --> dv dx --> gw dx --> ha dx --> hc dy --> eb dz --> fu dz --> hb ea --> fu ea --> gr ea --> hc eb --> dz eb --> ea ec --> ct ec --> cw ec --> da ec --> de ed --> h ed --> cx ed --> db ee --> eg ee --> eh ef --> bu eg --> h eg --> ef eh --> i eh --> by ej --> ek ej --> el ej --> em eo --> ep eq --> ek eq --> fu er --> ey et --> ek et --> el et --> en et --> es et --> ex et --> fm et --> gq eu --> ew ex --> eu ex --> ev ey --> ej ey --> eq ey --> et ey --> ez ey --> fl ey --> fq ey --> gh ey --> gs ez --> fa fa --> fd fa --> fe fa --> ff fa --> fg fj --> fk fk --> fb fk --> fc fk --> fh fk --> fi fl --> fa fl --> fk fm --> fn fo --> fp fp --> eo fp --> fj fp --> gq fq --> ew fq --> fo fq --> gj fr --> fs fr --> ft ft --> gm ft --> gn ft --> go ft --> gp fu --> fv fu --> fx fu --> fz fu --> ge fu --> gg fw --> fr fx --> fr ga --> gb gc --> gd gg --> fw gg --> fy gg --> ga gg --> gc gg --> gf gg --> gi gg --> gq gh --> gg gj --> fs gj --> gb gj --> gk gj --> gw gj --> ha gk --> gl gq --> ei gq --> ft gr --> fs gr --> gb gr --> gq gs --> gv gs --> gz gs --> hb gt --> gu gu --> fs gu --> gb gu --> gw gv --> gt gx --> gy gy --> fs gy --> gb gy --> ha gz --> gx hb --> gr hb --> hc classDef upstream fill:#4a90d9,color:#fff,stroke:#2c6fad classDef affected fill:#f5a623,color:#fff,stroke:#c0820a classDef changed fill:#d0021b,color:#fff,stroke:#8a0112,stroke-width:2px classDef bom fill:#9b59b6,color:#fff,stroke:#6c3483 class a,b,c,d,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,aa,ab,ac,ad,ae,af,ag,ah,ai,aj,ak,al,am,an,ao,ap,aq,ar,as,at,au,av,aw,ax,ay,az,ba,bb,bc,bd,be,bf,bg,bh,bi,bj,bk,bl,bm,bn,bo,bp,bq,br,bs,bt,bu,bw,bx,by,ca,cb,cc,cd,ce,cf,cg,ch,ci,cj,ck,cl,cm,cn,co,cp,cr,cs,ct,cv,cw,cx,cy,cz,da,db,dc,dd,de,df,dg,dh,di,dj,dk,dl,dm,dn,do,dp,dq,dr,ds,dt,du,dv,dw,dx,dy,dz,ea,eb,ec,ed,ee,ef,eg,eh upstream class ei,ej,ek,el,em,en,eo,ep,eq,es,et,eu,ev,ew,ex,ey,ez,fa,fb,fc,fd,fe,ff,fg,fh,fi,fj,fk,fl,fm,fn,fo,fp,fq,fr,fs,ft,fu,fv,fw,fx,fy,fz,ga,gb,gc,gd,ge,gf,gg,gh,gi,gj,gk,gl,gm,gn,go,gp,gq,gr,gs,gt,gu,gv,gw,gx,gy,gz,ha,hb,hc affected class er changed class e,bv,bz,cq,cu bom ``` -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: [email protected] For queries about this service, please contact Infrastructure at: [email protected] --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
