123 lines
3.0 KiB
Python
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())
|