refactor progress
This commit is contained in:
141
scripts/ci/release_workflow.py
Normal file
141
scripts/ci/release_workflow.py
Normal file
@@ -0,0 +1,141 @@
|
||||
#!/usr/bin/env python3
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
from collections.abc import Callable, Mapping, Sequence
|
||||
|
||||
from ci_steps import (
|
||||
build_release_metadata,
|
||||
build_release_summary,
|
||||
write_release_metadata,
|
||||
write_release_summary,
|
||||
)
|
||||
from ci_workflow import EnvArg, parse_step_env_args
|
||||
from ci_utils import require_env, run_step
|
||||
|
||||
|
||||
RELEASE_METADATA_REQUIRED_ENV = (
|
||||
"GITHUB_RUN_NUMBER",
|
||||
"GITHUB_SHA",
|
||||
"CHANNEL",
|
||||
"SOURCE_REF",
|
||||
)
|
||||
|
||||
RELEASE_SUMMARY_REQUIRED_ENV = (
|
||||
"GITHUB_SHA",
|
||||
"CHANNEL",
|
||||
"VERSION",
|
||||
"BUILD_NUMBER",
|
||||
"SHA_SHORT",
|
||||
"TIMESTAMP",
|
||||
"SOURCE_REF",
|
||||
"BUILD_RESULT",
|
||||
"REGISTRY",
|
||||
"DATE_YMD",
|
||||
)
|
||||
|
||||
BASE_RELEASE_ENV_ARGS = (
|
||||
EnvArg("--version-input", "VERSION_INPUT"),
|
||||
EnvArg("--channel", "CHANNEL"),
|
||||
EnvArg("--source-ref", "SOURCE_REF"),
|
||||
EnvArg("--build-result", "BUILD_RESULT"),
|
||||
EnvArg("--version", "VERSION"),
|
||||
EnvArg("--build-number", "BUILD_NUMBER"),
|
||||
EnvArg("--sha-short", "SHA_SHORT"),
|
||||
EnvArg("--timestamp", "TIMESTAMP"),
|
||||
EnvArg("--date-ymd", "DATE_YMD"),
|
||||
EnvArg("--image-tags", "IMAGE_TAGS"),
|
||||
EnvArg("--image-digest", "IMAGE_DIGEST"),
|
||||
EnvArg("--registry", "REGISTRY"),
|
||||
)
|
||||
|
||||
|
||||
def release_metadata_step() -> None:
|
||||
import os
|
||||
|
||||
require_env(RELEASE_METADATA_REQUIRED_ENV)
|
||||
metadata = build_release_metadata(
|
||||
version_input=os.environ.get("VERSION_INPUT", ""),
|
||||
channel=os.environ["CHANNEL"],
|
||||
source_ref=os.environ["SOURCE_REF"],
|
||||
env=os.environ,
|
||||
)
|
||||
write_release_metadata(metadata)
|
||||
|
||||
|
||||
def create_release_summary_step(*, title: str, image_name_env: str) -> Callable[[], None]:
|
||||
def summary_step() -> None:
|
||||
import os
|
||||
|
||||
require_env([*RELEASE_SUMMARY_REQUIRED_ENV, image_name_env])
|
||||
summary = build_release_summary(
|
||||
title=title,
|
||||
channel=os.environ["CHANNEL"],
|
||||
version=os.environ["VERSION"],
|
||||
build_number=os.environ["BUILD_NUMBER"],
|
||||
sha=os.environ["GITHUB_SHA"],
|
||||
sha_short=os.environ["SHA_SHORT"],
|
||||
timestamp=os.environ["TIMESTAMP"],
|
||||
source_ref=os.environ["SOURCE_REF"],
|
||||
build_result=os.environ["BUILD_RESULT"],
|
||||
image_tags=os.environ.get("IMAGE_TAGS", ""),
|
||||
image_digest=os.environ.get("IMAGE_DIGEST", ""),
|
||||
registry=os.environ["REGISTRY"],
|
||||
image_name=os.environ[image_name_env],
|
||||
date_ymd=os.environ["DATE_YMD"],
|
||||
)
|
||||
write_release_summary(summary, build_result=os.environ["BUILD_RESULT"])
|
||||
|
||||
return summary_step
|
||||
|
||||
|
||||
def build_release_steps(
|
||||
*,
|
||||
title: str,
|
||||
image_name_env: str,
|
||||
extra_steps: Mapping[str, Callable[[], None]] | None = None,
|
||||
) -> dict[str, Callable[[], None]]:
|
||||
steps: dict[str, Callable[[], None]] = {"metadata": release_metadata_step}
|
||||
if extra_steps:
|
||||
steps.update(extra_steps)
|
||||
steps["summary"] = create_release_summary_step(title=title, image_name_env=image_name_env)
|
||||
return steps
|
||||
|
||||
|
||||
def build_release_env_args(
|
||||
*,
|
||||
image_name_arg: str,
|
||||
image_name_env: str,
|
||||
extra_env_args: Sequence[EnvArg] = (),
|
||||
) -> list[EnvArg]:
|
||||
return [
|
||||
*BASE_RELEASE_ENV_ARGS,
|
||||
*extra_env_args,
|
||||
EnvArg(image_name_arg, image_name_env),
|
||||
]
|
||||
|
||||
|
||||
def run_release_workflow(
|
||||
*,
|
||||
title: str,
|
||||
image_name_arg: str,
|
||||
image_name_env: str,
|
||||
extra_steps: Mapping[str, Callable[[], None]] | None = None,
|
||||
extra_env_args: Sequence[EnvArg] = (),
|
||||
) -> int:
|
||||
args = parse_step_env_args(
|
||||
build_release_env_args(
|
||||
image_name_arg=image_name_arg,
|
||||
image_name_env=image_name_env,
|
||||
extra_env_args=extra_env_args,
|
||||
)
|
||||
)
|
||||
run_step(
|
||||
build_release_steps(
|
||||
title=title,
|
||||
image_name_env=image_name_env,
|
||||
extra_steps=extra_steps,
|
||||
),
|
||||
args.step,
|
||||
)
|
||||
return 0
|
||||
Reference in New Issue
Block a user