Skip to content

Commit bdbf783

Browse files
committed
Rename image property of CI jobs to name
The `image` part didn't really make sense, especially since we started splitting CI jobs.
1 parent 7a6283d commit bdbf783

File tree

2 files changed

+92
-83
lines changed

2 files changed

+92
-83
lines changed

src/ci/github-actions/ci.py

Lines changed: 19 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -27,12 +27,14 @@
2727
Job = Dict[str, Any]
2828

2929

30-
def name_jobs(jobs: List[Dict], prefix: str) -> List[Job]:
30+
def add_job_properties(jobs: List[Dict], prefix: str) -> List[Job]:
3131
"""
32-
Add a `name` attribute to each job, based on its image and the given `prefix`.
32+
Modify the `name` attribute of each job, based on its base name and the given `prefix`.
33+
Add an `image` attribute to each job, base don its image.
3334
"""
3435
for job in jobs:
35-
job["name"] = f"{prefix} - {job['image']}"
36+
job["name"] = f"{prefix} - {job['name']}"
37+
job["image"] = get_job_image(job)
3638
return jobs
3739

3840

@@ -118,7 +120,7 @@ def find_run_type(ctx: GitHubCtx) -> Optional[WorkflowRunType]:
118120

119121
def calculate_jobs(run_type: WorkflowRunType, job_data: Dict[str, Any]) -> List[Job]:
120122
if isinstance(run_type, PRRunType):
121-
return add_base_env(name_jobs(job_data["pr"], "PR"), job_data["envs"]["pr"])
123+
return add_base_env(add_job_properties(job_data["pr"], "PR"), job_data["envs"]["pr"])
122124
elif isinstance(run_type, TryRunType):
123125
jobs = job_data["try"]
124126
custom_jobs = run_type.custom_jobs
@@ -132,7 +134,7 @@ def calculate_jobs(run_type: WorkflowRunType, job_data: Dict[str, Any]) -> List[
132134
jobs = []
133135
unknown_jobs = []
134136
for custom_job in custom_jobs:
135-
job = [j for j in job_data["auto"] if j["image"] == custom_job]
137+
job = [j for j in job_data["auto"] if j["name"] == custom_job]
136138
if not job:
137139
unknown_jobs.append(custom_job)
138140
continue
@@ -142,10 +144,10 @@ def calculate_jobs(run_type: WorkflowRunType, job_data: Dict[str, Any]) -> List[
142144
f"Custom job(s) `{unknown_jobs}` not found in auto jobs"
143145
)
144146

145-
return add_base_env(name_jobs(jobs, "try"), job_data["envs"]["try"])
147+
return add_base_env(add_job_properties(jobs, "try"), job_data["envs"]["try"])
146148
elif isinstance(run_type, AutoRunType):
147149
return add_base_env(
148-
name_jobs(job_data["auto"], "auto"), job_data["envs"]["auto"]
150+
add_job_properties(job_data["auto"], "auto"), job_data["envs"]["auto"]
149151
)
150152

151153
return []
@@ -183,27 +185,34 @@ def format_run_type(run_type: WorkflowRunType) -> str:
183185
raise AssertionError()
184186

185187

188+
def get_job_image(job) -> str:
189+
"""
190+
By default, the Docker image of a job is based on its name.
191+
However, it can be overridden by its IMAGE environment variable.
192+
"""
193+
return job.get("env", {}).get("IMAGE", job["name"])
194+
195+
186196
def run_workflow_locally(job_data: Dict[str, Any], job_name: str):
187197
DOCKER_DIR = Path(__file__).absolute().parent.parent / "docker"
188198

189199
jobs = list(job_data["auto"])
190200
jobs.extend(job_data["pr"])
191201

192-
jobs = [job for job in jobs if job.get("image") == job_name]
202+
jobs = [job for job in jobs if job.get("name") == job_name]
193203
if len(jobs) == 0:
194204
raise Exception(f"Job `{job_name}` not found")
195205
job = jobs[0]
196206
if "ubuntu" not in job["os"]:
197207
raise Exception("Only Linux jobs can be executed locally")
198208

199-
image = job.get("env", {}).get("IMAGE", job["image"])
200209
custom_env = {}
201210
custom_env["DEPLOY"] = "1"
202211
custom_env.update({k: str(v) for (k, v) in job.get("env", {}).items()})
203212

204213
args = [
205214
str(DOCKER_DIR / "run.sh"),
206-
image
215+
get_job_image(job)
207216
]
208217
env_formatted = [f"{k}={v}" for (k, v) in sorted(custom_env.items())]
209218
print(f"Executing `{' '.join(env_formatted)} {' '.join(args)}`")

0 commit comments

Comments
 (0)