diff --git a/.gitlab/ci/pipelines/before_merging.yml b/.gitlab/ci/pipelines/before_merging.yml index d4f01dd55c49c932547fdd9755c2e9312344e945..340649f0e8cc8035ab64fdc83ec5f6d2a5e89c6e 100644 --- a/.gitlab/ci/pipelines/before_merging.yml +++ b/.gitlab/ci/pipelines/before_merging.yml @@ -494,7 +494,7 @@ oc.build:static-x86_64-linux-binaries: image: ${ci_image_name}/build:${ci_image_tag} stage: build tags: - - gcp + - gcp_very_high_cpu rules: - changes: - .gitlab-ci.yml @@ -692,7 +692,7 @@ oc.build_x86_64-exp-dev-extra: image: ${ci_image_name}/build:${ci_image_tag} stage: build tags: - - gcp_high_cpu + - gcp_very_high_cpu rules: - changes: - .gitlab-ci.yml @@ -1261,7 +1261,7 @@ build-layer1-profiling: image: ${ci_image_name}/build:${ci_image_tag} stage: build tags: - - gcp + - gcp_very_high_cpu dependencies: - oc.docker:ci:amd64 timeout: 60 minutes @@ -2729,7 +2729,7 @@ oc.script:snapshot_alpha_and_link: image: ${ci_image_name}/build:${ci_image_tag} stage: test tags: - - gcp + - gcp_very_high_cpu rules: - changes: - .gitlab-ci.yml @@ -3706,7 +3706,7 @@ oc.unit:proto-x86_64: image: ${ci_image_name}/build:${ci_image_tag} stage: test tags: - - gcp_high_cpu + - gcp_very_high_cpu rules: - changes: - .gitlab-ci.yml @@ -3913,7 +3913,7 @@ oc.unit:protocol_compiles: image: ${ci_image_name}/build:${ci_image_tag} stage: test tags: - - gcp_high_cpu + - gcp_very_high_cpu rules: - changes: - .gitlab-ci.yml diff --git a/.gitlab/ci/pipelines/master_branch.yml b/.gitlab/ci/pipelines/master_branch.yml index c0472bc11dfc86dc1be0e475b4afa9272ba03896..6733752396836bca872509a24f47ea7b458f7997 100644 --- a/.gitlab/ci/pipelines/master_branch.yml +++ b/.gitlab/ci/pipelines/master_branch.yml @@ -77,7 +77,7 @@ oc.build:static-x86_64-linux-binaries: image: ${ci_image_name}/build:${ci_image_tag} stage: build tags: - - gcp + - gcp_very_high_cpu rules: - when: always dependencies: diff --git a/.gitlab/ci/pipelines/merge_train.yml b/.gitlab/ci/pipelines/merge_train.yml index 2918b6869d731103d5c9be84464cc17eab66ffe7..b3bdee4ce3130a1b706f11e7251b80ab91c3f89b 100644 --- a/.gitlab/ci/pipelines/merge_train.yml +++ b/.gitlab/ci/pipelines/merge_train.yml @@ -493,7 +493,7 @@ oc.build:static-x86_64-linux-binaries: image: ${ci_image_name}/build:${ci_image_tag} stage: build tags: - - gcp + - gcp_very_high_cpu rules: - changes: - .gitlab-ci.yml @@ -691,7 +691,7 @@ oc.build_x86_64-exp-dev-extra: image: ${ci_image_name}/build:${ci_image_tag} stage: build tags: - - gcp_high_cpu + - gcp_very_high_cpu rules: - changes: - .gitlab-ci.yml @@ -1260,7 +1260,7 @@ build-layer1-profiling: image: ${ci_image_name}/build:${ci_image_tag} stage: build tags: - - gcp + - gcp_very_high_cpu dependencies: - oc.docker:ci:amd64 timeout: 60 minutes @@ -2728,7 +2728,7 @@ oc.script:snapshot_alpha_and_link: image: ${ci_image_name}/build:${ci_image_tag} stage: test tags: - - gcp + - gcp_very_high_cpu rules: - changes: - .gitlab-ci.yml @@ -3705,7 +3705,7 @@ oc.unit:proto-x86_64: image: ${ci_image_name}/build:${ci_image_tag} stage: test tags: - - gcp_high_cpu + - gcp_very_high_cpu rules: - changes: - .gitlab-ci.yml @@ -3912,7 +3912,7 @@ oc.unit:protocol_compiles: image: ${ci_image_name}/build:${ci_image_tag} stage: test tags: - - gcp_high_cpu + - gcp_very_high_cpu rules: - changes: - .gitlab-ci.yml diff --git a/.gitlab/ci/pipelines/non_release_tag.yml b/.gitlab/ci/pipelines/non_release_tag.yml index 5d4af672d9954790ae9f7302a725901c4370e0ca..c3bcfa8129f3495d71035b636e0f217682d757c1 100644 --- a/.gitlab/ci/pipelines/non_release_tag.yml +++ b/.gitlab/ci/pipelines/non_release_tag.yml @@ -72,7 +72,7 @@ oc.build:static-x86_64-linux-binaries: image: ${ci_image_name}/build:${ci_image_tag} stage: build tags: - - gcp + - gcp_very_high_cpu needs: - oc.docker:ci:amd64 dependencies: diff --git a/.gitlab/ci/pipelines/non_release_tag_test.yml b/.gitlab/ci/pipelines/non_release_tag_test.yml index 8493e3ccfda55d9c4554d44a2d2edf15668ec422..1dda546cba65efeea6f0ccc63b2ec266968d24f0 100644 --- a/.gitlab/ci/pipelines/non_release_tag_test.yml +++ b/.gitlab/ci/pipelines/non_release_tag_test.yml @@ -72,7 +72,7 @@ oc.build:static-x86_64-linux-binaries: image: ${ci_image_name}/build:${ci_image_tag} stage: build tags: - - gcp + - gcp_very_high_cpu needs: - oc.docker:ci:amd64 dependencies: diff --git a/.gitlab/ci/pipelines/octez_beta_release_tag.yml b/.gitlab/ci/pipelines/octez_beta_release_tag.yml index 4256925c90cebb2a6d9898561b46cdc068f512ae..01ed8780e46e371e525bb863424d9f80755297e8 100644 --- a/.gitlab/ci/pipelines/octez_beta_release_tag.yml +++ b/.gitlab/ci/pipelines/octez_beta_release_tag.yml @@ -72,7 +72,7 @@ oc.build:static-x86_64-linux-binaries: image: ${ci_image_name}/build:${ci_image_tag} stage: build tags: - - gcp + - gcp_very_high_cpu needs: - oc.docker:ci:amd64 dependencies: diff --git a/.gitlab/ci/pipelines/octez_evm_node_release_tag.yml b/.gitlab/ci/pipelines/octez_evm_node_release_tag.yml index 5ec9e9eb40e0534b769888d6622e569e408b2a15..feffa02bfe777d511a341320921a10ab6cc26257 100644 --- a/.gitlab/ci/pipelines/octez_evm_node_release_tag.yml +++ b/.gitlab/ci/pipelines/octez_evm_node_release_tag.yml @@ -113,7 +113,7 @@ oc.build:static-x86_64-linux-binaries: image: ${ci_image_name}/build:${ci_image_tag} stage: build tags: - - gcp + - gcp_very_high_cpu dependencies: - oc.docker:ci:amd64 timeout: 60 minutes diff --git a/.gitlab/ci/pipelines/octez_monitoring.yml b/.gitlab/ci/pipelines/octez_monitoring.yml index 90969499bc34774783fb005f1082093145db99ef..b2b34c385b2575128310773a6718639fa7176a4d 100644 --- a/.gitlab/ci/pipelines/octez_monitoring.yml +++ b/.gitlab/ci/pipelines/octez_monitoring.yml @@ -93,7 +93,7 @@ build-layer1-profiling: image: ${ci_image_name}/build:${ci_image_tag} stage: build tags: - - gcp + - gcp_very_high_cpu dependencies: - oc.docker:ci:amd64 timeout: 60 minutes diff --git a/.gitlab/ci/pipelines/octez_release_tag.yml b/.gitlab/ci/pipelines/octez_release_tag.yml index 6dc62ab03f3eb01d69f6123610d3daea828b5171..c210161ee2223d3a586a11156dffcf574038a6d0 100644 --- a/.gitlab/ci/pipelines/octez_release_tag.yml +++ b/.gitlab/ci/pipelines/octez_release_tag.yml @@ -73,7 +73,7 @@ oc.build:static-x86_64-linux-binaries: image: ${ci_image_name}/build:${ci_image_tag} stage: build tags: - - gcp + - gcp_very_high_cpu needs: - oc.docker:ci:amd64 dependencies: diff --git a/.gitlab/ci/pipelines/octez_release_tag_test.yml b/.gitlab/ci/pipelines/octez_release_tag_test.yml index 622d826311a318baa8f242ed061f4ae10ab97973..f9a9a5260da7a98d3f7ab7afcb824baf25f196d2 100644 --- a/.gitlab/ci/pipelines/octez_release_tag_test.yml +++ b/.gitlab/ci/pipelines/octez_release_tag_test.yml @@ -73,7 +73,7 @@ oc.build:static-x86_64-linux-binaries: image: ${ci_image_name}/build:${ci_image_tag} stage: build tags: - - gcp + - gcp_very_high_cpu needs: - oc.docker:ci:amd64 dependencies: diff --git a/.gitlab/ci/pipelines/schedule_extended_test.yml b/.gitlab/ci/pipelines/schedule_extended_test.yml index 984213ac356dd588adc0ab7b358f1d60e8bf71e0..5e963b06c1ab2e7b6146085ab3ae337d0d8ac1c6 100644 --- a/.gitlab/ci/pipelines/schedule_extended_test.yml +++ b/.gitlab/ci/pipelines/schedule_extended_test.yml @@ -388,7 +388,7 @@ oc.build:static-x86_64-linux-binaries: image: ${ci_image_name}/build:${ci_image_tag} stage: build tags: - - gcp + - gcp_very_high_cpu rules: - when: always dependencies: @@ -490,7 +490,7 @@ oc.build_x86_64-exp-dev-extra: image: ${ci_image_name}/build:${ci_image_tag} stage: build tags: - - gcp_high_cpu + - gcp_very_high_cpu rules: - when: always dependencies: @@ -866,7 +866,7 @@ build-layer1-profiling: image: ${ci_image_name}/build:${ci_image_tag} stage: build tags: - - gcp + - gcp_very_high_cpu dependencies: - oc.docker:ci:amd64 timeout: 60 minutes @@ -1817,7 +1817,7 @@ oc.script:snapshot_alpha_and_link: image: ${ci_image_name}/build:${ci_image_tag} stage: test tags: - - gcp + - gcp_very_high_cpu rules: - when: always dependencies: @@ -2519,7 +2519,7 @@ oc.unit:proto-x86_64: image: ${ci_image_name}/build:${ci_image_tag} stage: test tags: - - gcp_high_cpu + - gcp_very_high_cpu rules: - when: on_success needs: @@ -2651,7 +2651,7 @@ oc.unit:protocol_compiles: image: ${ci_image_name}/build:${ci_image_tag} stage: test tags: - - gcp_high_cpu + - gcp_very_high_cpu rules: - when: on_success needs: diff --git a/.gitlab/ci/pipelines/schedule_master_test_release.yml b/.gitlab/ci/pipelines/schedule_master_test_release.yml index 8550c16e62eb2180be05cf2334db2ea404cffd71..8e43ee909c219ffa35e3a4bb1f8418b1e7f46e4c 100644 --- a/.gitlab/ci/pipelines/schedule_master_test_release.yml +++ b/.gitlab/ci/pipelines/schedule_master_test_release.yml @@ -72,7 +72,7 @@ oc.build:static-x86_64-linux-binaries: image: ${ci_image_name}/build:${ci_image_tag} stage: build tags: - - gcp + - gcp_very_high_cpu needs: - oc.docker:ci:amd64 dependencies: diff --git a/ci/bin/code_verification.ml b/ci/bin/code_verification.ml index 3c6635b7f8ff5726b21e1ec6606074787972466e..3eb47b220cf40c72ffb0d947b963714a58889b11 100644 --- a/ci/bin/code_verification.ml +++ b/ci/bin/code_verification.ml @@ -587,7 +587,7 @@ let jobs pipeline_type = job_build_dynamic_binaries ~__POS__ ~arch:Amd64 - ~high_cpu:true + ~cpu:High ~retry: {max = 2; when_ = [Stuck_or_timeout_failure; Runner_system_failure]} ~dependencies:dependencies_needs_start @@ -605,7 +605,7 @@ let jobs pipeline_type = job_build_dynamic_binaries ~__POS__ ~arch:Amd64 - ~high_cpu:true + ~cpu:Very_high ~retry: {max = 2; when_ = [Stuck_or_timeout_failure; Runner_system_failure]} ~dependencies:dependencies_needs_start @@ -651,6 +651,7 @@ let jobs pipeline_type = job_build_static_binaries ~__POS__ ~arch:Amd64 + ~cpu:Very_high (* Even though not many tests depend on static executables, some of those that do are limiting factors in the total duration of pipelines. So we start this job as early as possible, @@ -693,7 +694,7 @@ let jobs pipeline_type = job ~__POS__ ~name:"ocaml-check" - ~high_cpu:true + ~cpu:High ~image:Images.CI.build ~stage ~retry: @@ -972,7 +973,7 @@ let jobs pipeline_type = make_rules ~changes:changeset_octez ~dependent:true () in let job_unit_test ~__POS__ ?(image = Images.CI.build) ?timeout - ?parallel_vector ?(rules = rules) ~arch ?(high_cpu = false) ~name + ?parallel_vector ?(rules = rules) ~arch ?(cpu = Normal) ~name ~make_targets () : tezos_job = let arch_string = arch_to_string arch in let script = ["make $MAKE_TARGETS"] in @@ -1006,7 +1007,7 @@ let jobs pipeline_type = ~stage:Stages.test ~image ~arch - ~high_cpu + ~cpu ~dependencies ~rules ~variables @@ -1052,7 +1053,7 @@ let jobs pipeline_type = ~__POS__ ~name:"oc.unit:other-x86_64" ~arch:Amd64 - ~high_cpu:true + ~cpu:High ~make_targets:["test-other-unit"] () |> enable_coverage_instrumentation |> enable_coverage_output_artifact @@ -1063,7 +1064,7 @@ let jobs pipeline_type = ~__POS__ ~name:"oc.unit:proto-x86_64" ~arch:Amd64 - ~high_cpu:true + ~cpu:Very_high ~make_targets:["test-proto-unit"] () |> enable_coverage_instrumentation |> enable_coverage_output_artifact @@ -1103,7 +1104,7 @@ let jobs pipeline_type = ~__POS__ ~name:"oc.unit:protocol_compiles" ~arch:Amd64 - ~high_cpu:true + ~cpu:Very_high ~retry: {max = 2; when_ = [Stuck_or_timeout_failure; Runner_system_failure]} ~image:Images.CI.build @@ -1196,6 +1197,7 @@ let jobs pipeline_type = ~name:"oc.script:snapshot_alpha_and_link" ~stage:Stages.test ~image:Images.CI.build + ~cpu:Very_high ~dependencies:order_after_build (* Since the above dependencies are only for ordering, we do not set [dependent] *) ~rules:(make_rules ~changes:changeset_script_snapshot_alpha_and_link ()) diff --git a/ci/bin/common.ml b/ci/bin/common.ml index 95473c4a8d5c0650c5dd775695baa77715f25240..4e5d2e37a2e30aca787a738a9f37be57aee62e2f 100644 --- a/ci/bin/common.ml +++ b/ci/bin/common.ml @@ -616,7 +616,7 @@ let changeset_mir_tzt = (no need to test that we pass the -static flag twice) - released variants exist, that are used in release tag pipelines (they do not build experimental executables) *) -let job_build_static_binaries ~__POS__ ~arch ?(high_cpu = false) +let job_build_static_binaries ~__POS__ ~arch ?(cpu = Normal) ?(executable_files = "script-inputs/released-executables") ?version_executable ?(release = false) ?rules ?dependencies () : tezos_job = let arch_string = arch_to_string arch in @@ -641,7 +641,7 @@ let job_build_static_binaries ~__POS__ ~arch ?(high_cpu = false) ~__POS__ ~stage:Stages.build ~arch - ~high_cpu + ~cpu ~name ~image:Images.CI.build ~before_script:(before_script ~take_ownership:true ~eval_opam:true []) @@ -771,7 +771,7 @@ type bin_package_group = A | B let bin_package_image = Image.mk_external ~image_path:"$DISTRIBUTION" -let job_build_dynamic_binaries ?rules ~__POS__ ~arch ?retry ?high_cpu +let job_build_dynamic_binaries ?rules ~__POS__ ~arch ?retry ?cpu ?(release = false) ?dependencies () = let arch_string = arch_to_string arch in let name = @@ -833,7 +833,7 @@ let job_build_dynamic_binaries ?rules ~__POS__ ~arch ?retry ?high_cpu ~stage:Stages.build ~arch ?retry - ?high_cpu + ?cpu ~name ~image:Images.CI.build ~before_script: @@ -947,6 +947,7 @@ let job_build_layer1_profiling ?(expire_in = Duration (Days 1)) () = ~stage:Stages.build ~image:Images.CI.build ~name:"build-layer1-profiling" + ~cpu:Very_high ~artifacts:(artifacts ~expire_in ["./octez-binaries/x86_64/octez-node"]) ~before_script: (before_script diff --git a/ci/bin/master_branch.ml b/ci/bin/master_branch.ml index 4655815f588f5d08a9e40f053387c3e8f6dd3172..d877cd828ddd2e358226d64b0676e8c40d0b2e45 100644 --- a/ci/bin/master_branch.ml +++ b/ci/bin/master_branch.ml @@ -56,7 +56,7 @@ let jobs = job_build_static_binaries ~__POS__ ~arch:Amd64 - ~high_cpu:false + ~cpu:Very_high ~rules:rules_always () in diff --git a/ci/bin/release_tag.ml b/ci/bin/release_tag.ml index 79c56bfc80f704e42cf0ec3d5a3ee0270958b080..b93cd9d5f25e8c7df76f922895f83314ed3f39d1 100644 --- a/ci/bin/release_tag.ml +++ b/ci/bin/release_tag.ml @@ -104,6 +104,7 @@ let octez_jobs ?(test = false) release_tag_pipeline_type = ~dependencies:(Dependent []) ~__POS__ ~arch:Amd64 + ~cpu:Very_high ~release:true () in @@ -292,6 +293,7 @@ let octez_evm_node_jobs ?(test = false) () = job_build_static_binaries ~__POS__ ~arch:Amd64 + ~cpu:Very_high ~executable_files:"script-inputs/octez-evm-node-executable" ~release:true ~version_executable:"octez-evm-node" diff --git a/ci/lib_tezos_ci/tezos_ci.ml b/ci/lib_tezos_ci/tezos_ci.ml index 09afe2e20c5fc5fe5e9d70d718f57b0123372cd1..e4de6a971c9d316539b2cdb34c38bcfcb029d879 100644 --- a/ci/lib_tezos_ci/tezos_ci.ml +++ b/ci/lib_tezos_ci/tezos_ci.ml @@ -739,6 +739,8 @@ type tag = | Gcp_tezt_memory_4k_dev | Gcp_high_cpu | Gcp_high_cpu_dev + | Gcp_very_high_cpu + | Gcp_very_high_cpu_dev | Aws_specific | Dynamic @@ -755,6 +757,8 @@ let string_of_tag = function | Gcp_tezt_memory_4k_dev -> "gcp_tezt_memory_4k_dev" | Gcp_high_cpu -> "gcp_high_cpu" | Gcp_high_cpu_dev -> "gcp_high_cpu_dev" + | Gcp_very_high_cpu -> "gcp_very_high_cpu" + | Gcp_very_high_cpu_dev -> "gcp_very_high_cpu_dev" | Aws_specific -> "aws_specific" | Dynamic -> Gitlab_ci.Var.encode dynamic_tag_var @@ -763,7 +767,8 @@ let arch_of_tag = function | Gcp_arm64 | Gcp_dev_arm64 -> Some Arm64 | Gcp | Gcp_dev | Gcp_tezt | Gcp_tezt_dev | Gcp_tezt_memory_3k | Gcp_tezt_memory_3k_dev | Gcp_tezt_memory_4k | Gcp_tezt_memory_4k_dev - | Gcp_high_cpu | Gcp_high_cpu_dev | Aws_specific -> + | Gcp_high_cpu | Gcp_high_cpu_dev | Gcp_very_high_cpu | Gcp_very_high_cpu_dev + | Aws_specific -> Some Amd64 | Dynamic -> None @@ -819,6 +824,12 @@ let resolve_dependencies job_name dependencies = type git_strategy = Fetch | Clone | No_strategy +(** The list of available CPU profiling tags for runners. *) +type cpu = + | Normal (** Target default Gitlab runner pool. *) + | High (** Target GCP high runner pool. *) + | Very_high (** Target GCP very high runner pool. *) + let enc_git_strategy = function | Fetch -> "fetch" | Clone -> "clone" @@ -827,24 +838,29 @@ let enc_git_strategy = function let job ?arch ?after_script ?allow_failure ?artifacts ?before_script ?cache ?id_tokens ?interruptible ?(dependencies = Staged []) ?(image_dependencies = []) ?services ?variables ?rules - ?(timeout = Gitlab_ci.Types.Minutes 60) ?tag ?(high_cpu = false) - ?git_strategy ?coverage ?retry ?parallel ?description ~__POS__ ?image - ?template ~stage ~name script : tezos_job = + ?(timeout = Gitlab_ci.Types.Minutes 60) ?tag ?(cpu = Normal) ?git_strategy + ?coverage ?retry ?parallel ?description ~__POS__ ?image ?template ~stage + ~name script : tezos_job = (* The tezos/tezos CI uses singleton tags for its runners. *) let tag = - match (arch, tag, high_cpu) with - | Some _, Some _, true - | None, Some _, true - | Some _, None, true - | None, None, true -> + match (arch, tag, cpu) with + | Some _, Some _, High + | None, Some _, High + | Some _, None, High + | None, None, High -> Gcp_high_cpu - | Some arch, None, false -> ( + | Some _, Some _, Very_high + | None, Some _, Very_high + | Some _, None, Very_high + | None, None, Very_high -> + Gcp_very_high_cpu + | Some arch, None, Normal -> ( match arch with Amd64 -> Gcp | Arm64 -> Gcp_arm64) - | None, Some tag, false -> tag - | None, None, false -> + | None, Some tag, Normal -> tag + | None, None, Normal -> (* By default, we assume Amd64 runners as given by the [gcp] tag. *) Gcp - | Some _, Some _, false -> + | Some _, Some _, Normal -> failwith "[job] cannot specify both [arch] and [tags] at the same time in job \ '%s'." diff --git a/ci/lib_tezos_ci/tezos_ci.mli b/ci/lib_tezos_ci/tezos_ci.mli index d479da2598402c8bec8641320964cffe11f33c51..a4cfa419e1a3bf2a36608e8ce3fc7d268ac4bcc5 100644 --- a/ci/lib_tezos_ci/tezos_ci.mli +++ b/ci/lib_tezos_ci/tezos_ci.mli @@ -263,6 +263,10 @@ type tag = (** GCP prod AMD64 runner, suitable for jobs needing high CPU. *) | Gcp_high_cpu_dev (** GCP dev AMD64 runner, suitable for jobs needing high CPU. *) + | Gcp_very_high_cpu + (** GCP prod AMD64 runner, suitable for jobs needing very high CPU. *) + | Gcp_very_high_cpu_dev + (** GCP dev AMD64 runner, suitable for jobs needing very high CPU. *) | Aws_specific (** AWS runners, in cases where a CI is legacy or not suitable for GCP. *) | Dynamic @@ -335,6 +339,11 @@ type git_strategy = CI/CD YAML variable [GIT_STRATEGY]. *) val enc_git_strategy : git_strategy -> string +type cpu = + | Normal (** Target default Gitlab runner pool. *) + | High (** Target GCP high runner pool. *) + | Very_high (** Target GCP very high runner pool. *) + (** Define a job. This smart constructor for {!Gitlab_ci.Types.job} additionally: @@ -366,8 +375,9 @@ val enc_git_strategy : git_strategy -> string architecture for the internal image cannot be statically deduced. - - The [high_cpu] parameter allocates the job to run on top of a GCP GitLab runner with a 1:1 ratio between CPU and RAM. - For more information, see [e2-highcpu-16](https://gcloud-compute.com/e2-highcpu-16.html). *) + - The [cpu] parameter specifies the CPU allocation for the job, + allowing it to run on a GCP GitLab runner with normal, high, + or very high CPU capacity. *) val job : ?arch:arch -> @@ -385,7 +395,7 @@ val job : ?rules:Gitlab_ci.Types.job_rule list -> ?timeout:Gitlab_ci.Types.time_interval -> ?tag:tag -> - ?high_cpu:bool -> + ?cpu:cpu -> ?git_strategy:git_strategy -> ?coverage:string -> ?retry:Gitlab_ci.Types.retry ->