fluxer/scripts/ci/workflows/release_livekitctl.py
2026-02-17 12:22:36 +00:00

123 lines
3.0 KiB
Python

#!/usr/bin/env python3
import pathlib
import sys
sys.path.append(str(pathlib.Path(__file__).resolve().parents[1]))
from cli_release import (
determine_cli_version,
generate_checksums,
prepare_release_assets,
write_cli_version_outputs,
)
from ci_workflow import EnvArg, apply_env_args, build_step_parser
from ci_utils import require_env, run_step
BINARY_PREFIX = "livekitctl"
TAG_PREFIX = "livekitctl-v"
PROJECT_DIR = pathlib.Path("fluxer_devops/livekitctl")
def determine_version_step() -> None:
import os
require_env(["EVENT_NAME"])
info = determine_cli_version(
event_name=os.environ["EVENT_NAME"],
input_version=os.environ.get("INPUT_VERSION", ""),
ref_name=os.environ.get("REF_NAME", ""),
tag_prefix=TAG_PREFIX,
)
write_cli_version_outputs(info)
def build_binary_step() -> None:
from ci_utils import run_bash
run_bash(
f"""
set -euo pipefail
cd {PROJECT_DIR}
go build -ldflags=\"-s -w\" -o {BINARY_PREFIX}-${{GOOS}}-${{GOARCH}} .
"""
)
def prepare_release_assets_step(artifacts_dir: pathlib.Path, release_dir: pathlib.Path) -> None:
prepare_release_assets(
artifacts_dir=artifacts_dir,
release_dir=release_dir,
binary_prefix=BINARY_PREFIX,
)
def generate_checksums_step(release_dir: pathlib.Path) -> None:
files = release_dir.glob(f"{BINARY_PREFIX}-*")
generate_checksums(files, release_dir / "checksums.txt")
def create_tag_step() -> None:
from ci_utils import run_bash
from ci_utils import require_env
require_env(["TAG", "VERSION"])
run_bash(
"""
set -euo pipefail
git config user.name "github-actions[bot]"
git config user.email "github-actions[bot]@users.noreply.github.com"
git tag -a "${TAG}" -m "Release livekitctl v${VERSION}"
git push origin "${TAG}"
"""
)
STEPS = {
"determine_version": determine_version_step,
"build_binary": build_binary_step,
"prepare_release_assets": prepare_release_assets_step,
"generate_checksums": generate_checksums_step,
"create_tag": create_tag_step,
}
ENV_ARGS = [
EnvArg("--event-name", "EVENT_NAME"),
EnvArg("--input-version", "INPUT_VERSION"),
EnvArg("--ref-name", "REF_NAME"),
EnvArg("--version", "VERSION"),
EnvArg("--tag", "TAG"),
]
def parse_args():
parser = build_step_parser(ENV_ARGS)
parser.add_argument("--artifacts-dir", default="artifacts")
parser.add_argument("--release-dir", default="release")
return parser.parse_args()
def main() -> int:
args = parse_args()
apply_env_args(args, ENV_ARGS)
if args.step == "prepare_release_assets":
prepare_release_assets_step(
pathlib.Path(args.artifacts_dir),
pathlib.Path(args.release_dir),
)
return 0
if args.step == "generate_checksums":
generate_checksums_step(pathlib.Path(args.release_dir))
return 0
run_step(STEPS, args.step)
return 0
if __name__ == "__main__":
raise SystemExit(main())