#!/usr/bin/env python3 import argparse import os import subprocess import tempfile import importlib.util def shell(*args): "Run a shell command and capture the output." try: proc = subprocess.run(args, check=True, capture_output=True) except subprocess.CalledProcessError as e: raise RuntimeError(f'{e.cmd} error {e.returncode}: {e.output}') return proc.stdout.strip().decode('utf8') cli = argparse.ArgumentParser(description='deploy a thing') cli.add_argument('depo', type=str, help='the depo roun to deploy') args = cli.parse_args() cwd = os.getcwd() bild_dir = f"{cwd}/bild" src = f"{cwd}/depo/{args.depo}" out = f"{bild_dir}/{args.depo}" # bild shell("nix-build", "-A", f"depo.{args.depo}", "--out-link", out) print("bilt") # push shell("nix", "copy", "--to", f"ssh://root@{args.depo}", f"{out}") print("sent") # switch shell("ssh", f"root@{args.depo}", "sudo", f"{os.readlink(out)}/bin/switch-to-configuration", "switch") print("switched") print(f"pushed {args.depo}")