diff --git a/.gitlab/ci/pipelines/before_merging.yml b/.gitlab/ci/pipelines/before_merging.yml index 9c623ca9a88872f8f6af5f984323d83b5020aea8..e5d33b514180b08d1ec36e253edf2da5c10d483f 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 2c764fbfab9e95b61469e90c03f14754b462be08..6f026480705cc700801fe678205f60bfa9c6d03c 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 7c83964df1d726d3dd72e23112bfc5fa6d69d4b0..94bb19bb7ff084d13396f6ccad7e0082630ffb33 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 d11945bd6ab65d922d5386d91602a6e9c63ff7ad..e0ed27600a0fe0f1d2c993069d53da71cdc1636b 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 8b6fe888b469bc91a482231d96d7b29184b1eddd..7ca787898791b17b6ba2117123d8efcac8d898d2 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 db3e8e9c5c19d36ab87466c0f2c9ee226ada0422..2c74d838f4f75e3ca3978386dae2430193ff4eb8 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 36c7a9096404d986e984cd050c6e3d79a36fee36..b63c44a9b7a2fa23bd58c6a3d02fb3b9804ff7b5 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.