Parse try build CI job name from commit message
This commit is contained in:
parent
6778ecf960
commit
74dbe8ae9e
2
.github/workflows/ci.yml
vendored
2
.github/workflows/ci.yml
vendored
@ -52,6 +52,8 @@ jobs:
|
|||||||
- name: Checkout the source code
|
- name: Checkout the source code
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v4
|
||||||
- name: Calculate the CI job matrix
|
- name: Calculate the CI job matrix
|
||||||
|
env:
|
||||||
|
COMMIT_MESSAGE: ${{ github.event.head_commit.message }}
|
||||||
run: python3 src/ci/github-actions/calculate-job-matrix.py >> $GITHUB_OUTPUT
|
run: python3 src/ci/github-actions/calculate-job-matrix.py >> $GITHUB_OUTPUT
|
||||||
id: jobs
|
id: jobs
|
||||||
job:
|
job:
|
||||||
|
@ -11,6 +11,7 @@ import dataclasses
|
|||||||
import json
|
import json
|
||||||
import logging
|
import logging
|
||||||
import os
|
import os
|
||||||
|
import re
|
||||||
import typing
|
import typing
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from typing import List, Dict, Any, Optional
|
from typing import List, Dict, Any, Optional
|
||||||
@ -67,6 +68,23 @@ class GitHubCtx:
|
|||||||
event_name: str
|
event_name: str
|
||||||
ref: str
|
ref: str
|
||||||
repository: str
|
repository: str
|
||||||
|
commit_message: Optional[str]
|
||||||
|
|
||||||
|
|
||||||
|
def get_custom_jobs(ctx: GitHubCtx) -> List[str]:
|
||||||
|
"""
|
||||||
|
Tries to parse names of specific CI jobs that should be executed in the form of
|
||||||
|
ci-job: <job-name>
|
||||||
|
from the commit message of the passed GitHub context.
|
||||||
|
"""
|
||||||
|
if ctx.commit_message is None:
|
||||||
|
return []
|
||||||
|
|
||||||
|
regex = re.compile(r"ci-job: (.*)")
|
||||||
|
jobs = []
|
||||||
|
for match in regex.finditer(ctx.commit_message):
|
||||||
|
jobs.append(match.group(1))
|
||||||
|
return jobs
|
||||||
|
|
||||||
|
|
||||||
def find_run_type(ctx: GitHubCtx) -> Optional[WorkflowRunType]:
|
def find_run_type(ctx: GitHubCtx) -> Optional[WorkflowRunType]:
|
||||||
@ -84,7 +102,8 @@ def find_run_type(ctx: GitHubCtx) -> Optional[WorkflowRunType]:
|
|||||||
try_build = old_bors_try_build or new_bors_try_build
|
try_build = old_bors_try_build or new_bors_try_build
|
||||||
|
|
||||||
if try_build:
|
if try_build:
|
||||||
return TryRunType()
|
jobs = get_custom_jobs(ctx)
|
||||||
|
return TryRunType(custom_jobs=jobs)
|
||||||
|
|
||||||
if ctx.ref == "refs/heads/auto" and ctx.repository == "rust-lang-ci/rust":
|
if ctx.ref == "refs/heads/auto" and ctx.repository == "rust-lang-ci/rust":
|
||||||
return AutoRunType()
|
return AutoRunType()
|
||||||
@ -96,8 +115,24 @@ def calculate_jobs(run_type: WorkflowRunType, job_data: Dict[str, Any]) -> List[
|
|||||||
if isinstance(run_type, PRRunType):
|
if isinstance(run_type, PRRunType):
|
||||||
return add_base_env(name_jobs(job_data["pr"], "PR"), job_data["envs"]["pr"])
|
return add_base_env(name_jobs(job_data["pr"], "PR"), job_data["envs"]["pr"])
|
||||||
elif isinstance(run_type, TryRunType):
|
elif isinstance(run_type, TryRunType):
|
||||||
return add_base_env(name_jobs(job_data["try"], "try"), job_data["envs"]["try"])
|
jobs = job_data["try"]
|
||||||
elif isinstance(run_type, AutoRunType):
|
custom_jobs = run_type.custom_jobs
|
||||||
|
if custom_jobs:
|
||||||
|
if len(custom_jobs) > 10:
|
||||||
|
raise Exception(
|
||||||
|
f"It is only possible to schedule up to 10 custom jobs,"
|
||||||
|
f"received {len(custom_jobs)} jobs"
|
||||||
|
)
|
||||||
|
|
||||||
|
jobs = []
|
||||||
|
for custom_job in custom_jobs:
|
||||||
|
job = [j for j in job_data["auto"] if j["image"] == custom_job]
|
||||||
|
if not job:
|
||||||
|
raise Exception(f"Custom job `{custom_job}` not found in auto jobs")
|
||||||
|
jobs.append(job[0])
|
||||||
|
|
||||||
|
return add_base_env(name_jobs(jobs, "try"), job_data["envs"]["try"])
|
||||||
|
elif run_type is AutoRunType:
|
||||||
return add_base_env(name_jobs(job_data["auto"], "auto"), job_data["envs"]["auto"])
|
return add_base_env(name_jobs(job_data["auto"], "auto"), job_data["envs"]["auto"])
|
||||||
|
|
||||||
return []
|
return []
|
||||||
@ -111,10 +146,16 @@ def skip_jobs(jobs: List[Dict[str, Any]], channel: str) -> List[Job]:
|
|||||||
|
|
||||||
|
|
||||||
def get_github_ctx() -> GitHubCtx:
|
def get_github_ctx() -> GitHubCtx:
|
||||||
|
event_name = os.environ["GITHUB_EVENT_NAME"]
|
||||||
|
|
||||||
|
commit_message = None
|
||||||
|
if event_name == "push":
|
||||||
|
commit_message = os.environ["COMMIT_MESSAGE"]
|
||||||
return GitHubCtx(
|
return GitHubCtx(
|
||||||
event_name=os.environ["GITHUB_EVENT_NAME"],
|
event_name=event_name,
|
||||||
ref=os.environ["GITHUB_REF"],
|
ref=os.environ["GITHUB_REF"],
|
||||||
repository=os.environ["GITHUB_REPOSITORY"]
|
repository=os.environ["GITHUB_REPOSITORY"],
|
||||||
|
commit_message=commit_message
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user