Source code for gcip2.ci.jobs.trigger
1from enum import Enum
2from typing import Self
3
4from gcip2 import pipeline_core
5from gcip2.ci.jobs.base import Base, BaseLinux
6
7
[docs]
8class TriggerPipelineDefaults(str, Enum):
9 build_pipeline = "build-pipeline"
10 trigger_pipeline = "trigger-pipeline"
11 out_dir = "out"
12 out_file = "out/pipeline.gitlab-ci.yml"
13
14
[docs]
15class BuildTriggerPipeline(pipeline_core.JobBuilderImpl):
16 _base = BaseLinux
17
[docs]
18 def apply(self: Self) -> Self:
19 self.with_name(TriggerPipelineDefaults.build_pipeline.value)
20 self.model.artifacts = pipeline_core.Artifacts(paths=[TriggerPipelineDefaults.out_dir])
21 self.model.script = ['exec sh -c "dothat run ${CI_JOB_NAME}"']
22 return self
23
24
[docs]
25class TriggerPipeline(pipeline_core.JobBuilderImpl):
26 _base = Base
27
[docs]
28 def apply(self: Self) -> Self:
29 self.with_name(TriggerPipelineDefaults.trigger_pipeline.value)
30 self.model.variables = {
31 "PARENT_PIPELINE_ID": "${CI_PIPELINE_ID}",
32 "PARENT_PIPELINE_SOURCE": "${CI_PIPELINE_SOURCE}",
33 }
34 self.model.needs = [
35 pipeline_core.Needs(
36 job=TriggerPipelineDefaults.build_pipeline,
37 artifacts=True,
38 )
39 ]
40 self.model.interruptible = False
41 self.model.trigger = pipeline_core.Trigger(
42 include=[
43 pipeline_core.TriggerIncludeArtifact(
44 artifact=TriggerPipelineDefaults.out_file,
45 job=TriggerPipelineDefaults.build_pipeline,
46 )
47 ],
48 strategy=pipeline_core.TriggerStrategy.DEPEND,
49 forward=pipeline_core.TriggerForward(
50 yaml_variables=True,
51 pipeline_variables=True,
52 ),
53 )
54
55 return self