fester/backend/release.py

62 lines
1.2 KiB
Python
Executable File

import os
import json
import logging
from backend.snapshot import create_snapshot
from backend.scheduler import build_distcc_hosts
from backend.config import CONFIG
log = logging.getLogger(__name__)
def run(cmd, cwd, env):
import subprocess
p = subprocess.Popen(
cmd,
shell=True,
cwd=cwd,
env=env,
stdout=subprocess.PIPE,
stderr=subprocess.STDOUT,
text=True
)
for line in p.stdout:
log.info("[release] %s", line.rstrip())
p.wait()
return p.returncode
def build_target(project, snapshot, target, nodes):
env = os.environ.copy()
env["DISTCC_HOSTS"] = build_distcc_hosts(nodes)
cmd = project["targets"][target]
log.info("target=%s", target)
log.info("snapshot=%s", snapshot['hash'])
return run(cmd, snapshot["path"], env)
def run_release(project):
snapshot = create_snapshot(project["source"])
nodes = CONFIG["nodes"]
results = {}
for target in project["targets"]:
results[target] = build_target(project, snapshot, target, nodes)
return results
if __name__ == "__main__":
import sys
with open(sys.argv[1], "r") as f:
project = json.load(f)
run_release(project)