From 902333ae7bc9dbd904d5f185eaf2fbb732851420 Mon Sep 17 00:00:00 2001 From: Pietro Abate Date: Wed, 16 Jul 2025 17:00:07 +0200 Subject: [PATCH] ciao: refactor dependecy/needs for optional artifacts --- .gitlab/ci/pipelines/before_merging.yml | 2 ++ .gitlab/ci/pipelines/merge_train.yml | 2 ++ ci/bin/code_verification.ml | 4 ++-- ci/lib_gitlab_ci/to_yaml.ml | 9 +++++---- ci/lib_gitlab_ci/types.ml | 2 +- ci/lib_tezos_ci/tezos_ci.ml | 27 +++++++++++++++++-------- ci/lib_tezos_ci/tezos_ci.mli | 1 + 7 files changed, 32 insertions(+), 15 deletions(-) diff --git a/.gitlab/ci/pipelines/before_merging.yml b/.gitlab/ci/pipelines/before_merging.yml index 9c623ca9a888..e5d33b514180 100644 --- a/.gitlab/ci/pipelines/before_merging.yml +++ b/.gitlab/ci/pipelines/before_merging.yml @@ -1884,8 +1884,10 @@ oc.script:snapshot_alpha_and_link: - job: trigger - job: oc.build_x86_64-released optional: true + artifacts: false - job: oc.build_x86_64-exp-dev-extra optional: true + artifacts: false dependencies: - oc.docker:ci:amd64 timeout: 60 minutes diff --git a/.gitlab/ci/pipelines/merge_train.yml b/.gitlab/ci/pipelines/merge_train.yml index 2c764fbfab9e..6f026480705c 100644 --- a/.gitlab/ci/pipelines/merge_train.yml +++ b/.gitlab/ci/pipelines/merge_train.yml @@ -1883,8 +1883,10 @@ oc.script:snapshot_alpha_and_link: - job: trigger - job: oc.build_x86_64-released optional: true + artifacts: false - job: oc.build_x86_64-exp-dev-extra optional: true + artifacts: false dependencies: - oc.docker:ci:amd64 timeout: 60 minutes diff --git a/ci/bin/code_verification.ml b/ci/bin/code_verification.ml index 7c83964df1d7..94bb19bb7ff0 100644 --- a/ci/bin/code_verification.ml +++ b/ci/bin/code_verification.ml @@ -904,8 +904,8 @@ let jobs pipeline_type = Dependent (Job job_start :: [ - Optional job_build_x86_64_release; - Optional job_build_x86_64_exp_dev_extra; + Optional_Artifacts job_build_x86_64_release; + Optional_Artifacts job_build_x86_64_exp_dev_extra; ])) ~schedule_extended_test:(fun () -> Staged []) in diff --git a/ci/lib_gitlab_ci/to_yaml.ml b/ci/lib_gitlab_ci/to_yaml.ml index d11945bd6ab6..e0ed27600a0f 100644 --- a/ci/lib_gitlab_ci/to_yaml.ml +++ b/ci/lib_gitlab_ci/to_yaml.ml @@ -253,12 +253,13 @@ let enc_allow_failure_job (allow_failure : allow_failure_job) : value = let enc_needs (needs : need list) : value = (* Use terse encoding unless optional is set to true for at least one need *) let enc_need = - if List.for_all (fun {job = _; optional} -> optional = false) needs then - fun {job; optional = _} -> `String job - else fun {job; optional} -> + if List.for_all (fun {job = _; optional; _} -> optional = false) needs then + fun {job; optional = _; _} -> `String job + else fun {job; optional; artifacts} -> `O ([("job", `String job)] - @ if optional then [("optional", `Bool true)] else []) + @ (if optional then [("optional", `Bool true)] else []) + @ if not artifacts then [("artifacts", `Bool false)] else []) in array enc_need needs diff --git a/ci/lib_gitlab_ci/types.ml b/ci/lib_gitlab_ci/types.ml index 8b6fe888b469..7ca787898791 100644 --- a/ci/lib_gitlab_ci/types.ml +++ b/ci/lib_gitlab_ci/types.ml @@ -156,7 +156,7 @@ type cache = {key : string; paths : string list; policy : cache_policy} type service = {name : string} -type need = {job : string; optional : bool} +type need = {job : string; optional : bool; artifacts : bool} (** A matrix parallel job configuration. diff --git a/ci/lib_tezos_ci/tezos_ci.ml b/ci/lib_tezos_ci/tezos_ci.ml index db3e8e9c5c19..2c74d838f4f7 100644 --- a/ci/lib_tezos_ci/tezos_ci.ml +++ b/ci/lib_tezos_ci/tezos_ci.ml @@ -251,8 +251,11 @@ module Pipeline = struct | Some needs -> Some (needs - |> List.filter_map (fun Gitlab_ci.Types.{job; optional} -> - if not optional then Some job else None) + |> List.filter_map + (fun Gitlab_ci.Types.{job; optional; artifacts} -> + if not optional then Some job + else if artifacts then Some job + else None) |> String_set.of_list) | None -> None in @@ -770,6 +773,7 @@ type dependency = | Job of tezos_job | Optional of tezos_job | Artifacts of tezos_job + | Optional_Artifacts of tezos_job type dependencies = Staged of tezos_job list | Dependent of dependency list @@ -788,17 +792,24 @@ let resolve_dependencies job_name dependencies = let rec loop (needs, dependencies) = function | dep :: deps -> let dep_name = - match dep with Job j | Optional j | Artifacts j -> name j + match dep with + | Job j | Optional j | Artifacts j | Optional_Artifacts j -> + name j in - let needs ~optional = - Gitlab_ci.Types.{job = dep_name; optional} :: needs + let needs ~optional ~artifacts = + Gitlab_ci.Types.{job = dep_name; optional; artifacts} :: needs in let needs, dependencies = match dep with - | Job _ -> (needs ~optional:false, dependencies) - | Optional _ -> (needs ~optional:true, dependencies) + | Job _ -> (needs ~optional:false ~artifacts:true, dependencies) + | Optional _ -> + ( needs ~optional:true ~artifacts:true, + dep_name :: dependencies ) + | Optional_Artifacts _ -> + (needs ~optional:true ~artifacts:false, dependencies) | Artifacts _ -> - (needs ~optional:false, dep_name :: dependencies) + ( needs ~optional:false ~artifacts:true, + dep_name :: dependencies ) in loop (needs, dependencies) deps | [] -> (Some (List.rev needs), List.rev dependencies) diff --git a/ci/lib_tezos_ci/tezos_ci.mli b/ci/lib_tezos_ci/tezos_ci.mli index 36c7a9096404..b63c44a9b7a2 100644 --- a/ci/lib_tezos_ci/tezos_ci.mli +++ b/ci/lib_tezos_ci/tezos_ci.mli @@ -347,6 +347,7 @@ type dependency = | Job of tezos_job | Optional of tezos_job | Artifacts of tezos_job + | Optional_Artifacts of tezos_job (** Job dependency sets. -- GitLab