Skip jobs based on the active channel in Python

This commit is contained in:
Jakub Beránek 2024-04-23 15:06:18 +02:00
parent 2a7fe14acd
commit e25735908f
No known key found for this signature in database
GPG Key ID: 909CD0D26483516B

View File

@ -17,6 +17,7 @@ from typing import List, Dict, Any, Optional
import yaml import yaml
CI_DIR = Path(__file__).absolute().parent.parent
JOBS_YAML_PATH = Path(__file__).absolute().parent / "jobs.yml" JOBS_YAML_PATH = Path(__file__).absolute().parent / "jobs.yml"
Job = Dict[str, Any] Job = Dict[str, Any]
@ -90,6 +91,13 @@ def calculate_jobs(job_type: JobType, job_data: Dict[str, Any]) -> List[Job]:
return [] return []
def skip_jobs(jobs: List[Dict[str, Any]], channel: str) -> List[Job]:
"""
Skip CI jobs that are not supposed to be executed on the given `channel`.
"""
return [j for j in jobs if j.get("CI_ONLY_WHEN_CHANNEL", channel) == channel]
def get_github_ctx() -> GitHubCtx: def get_github_ctx() -> GitHubCtx:
return GitHubCtx( return GitHubCtx(
event_name=os.environ["GITHUB_EVENT_NAME"], event_name=os.environ["GITHUB_EVENT_NAME"],
@ -109,9 +117,13 @@ if __name__ == "__main__":
job_type = find_job_type(github_ctx) job_type = find_job_type(github_ctx)
logging.info(f"Job type: {job_type}") logging.info(f"Job type: {job_type}")
with open(CI_DIR / "channel") as f:
channel = f.read().strip()
jobs = [] jobs = []
if job_type is not None: if job_type is not None:
jobs = calculate_jobs(job_type, data) jobs = calculate_jobs(job_type, data)
jobs = skip_jobs(jobs, channel)
logging.info(f"Output:\n{yaml.dump(jobs, indent=4)}") logging.info(f"Output:\n{yaml.dump(jobs, indent=4)}")
print(f"jobs={json.dumps(jobs)}") print(f"jobs={json.dumps(jobs)}")