All checks were successful
buildbot/nix-build .#checks.aarch64-darwin.nixos-test_install_machine Build done.
buildbot/nix-build .#checks.aarch64-linux.nixos-test_install_machine Build done.
buildbot/nix-build .#checks.x86_64-linux.check-for-breakpoints Build done.
buildbot/nix-build .#checks.x86_64-linux.package-clan-ts-api Build done.
buildbot/nix-build .#checks.aarch64-linux.nixos-iso-installer Build done.
buildbot/nix-build .#checks.x86_64-linux.package-default Build done.
buildbot/nix-build .#checks.x86_64-linux.package-gui-installer-deb Build done.
buildbot/nix-build .#checks.x86_64-linux.clan-dep-fakeroot Build done.
buildbot/nix-build .#checks.x86_64-linux.clan-dep-git Build done.
buildbot/nix-build .#checks.x86_64-linux.package-module-docs Build done.
buildbot/nix-build .#checks.aarch64-darwin.nixos-flash-installer Build done.
buildbot/nix-build .#checks.aarch64-darwin.nixos-iso-installer Build done.
buildbot/nix-build .#checks.aarch64-linux.nixos-flash-installer Build done.
buildbot/nix-build .#checks.x86_64-linux.package-clan-cli-docs Build done.
buildbot/nix-build .#checks.x86_64-linux.package-clan-cli Build done.
buildbot/nix-build .#checks.x86_64-linux.devShell-docs Build done.
buildbot/nix-build .#checks.x86_64-linux.package-gui-installer-archlinux Build done.
buildbot/nix-build .#checks.x86_64-linux.clan-dep-e2fsprogs Build done.
buildbot/nix-build .#checks.x86_64-linux.package-gui-installer-rpm Build done.
buildbot/nix-build .#checks.aarch64-darwin.nixos-test-backup Build done.
buildbot/nix-build .#checks.x86_64-linux."clan-dep-python3.11-qemu" Build done.
buildbot/nix-build .#checks.aarch64-linux.nixos-test-backup Build done.
buildbot/nix-build .#checks.x86_64-linux.clan-dep-nix Build done.
buildbot/nix-build .#checks.x86_64-linux.renderClanOptions Build done.
buildbot/nix-build .#checks.x86_64-linux.clan-dep-openssh Build done.
buildbot/nix-build .#checks.x86_64-linux.devShell-webview-ui Build done.
buildbot/nix-build .#checks.x86_64-linux."clan-dep-python3.11-mypy" Build done.
buildbot/nix-build .#checks.x86_64-linux.deltachat Build done.
buildbot/nix-build .#checks.x86_64-linux.borgbackup Build done.
buildbot/nix-build .#checks.x86_64-linux.matrix-synapse Build done.
buildbot/nix-build .#checks.x86_64-linux.package-editor Build done.
buildbot/nix-build .#checks.x86_64-linux.package-merge-after-ci Build done.
buildbot/nix-build .#checks.x86_64-linux.package-zt-tcp-relay Build done.
buildbot/nix-build .#checks.x86_64-linux.postgresql Build done.
buildbot/nix-build .#checks.x86_64-linux.package-function-schema Build done.
buildbot/nix-build .#checks.x86_64-linux.secrets Build done.
buildbot/nix-build .#checks.x86_64-linux.clan-dep-rsync Build done.
buildbot/nix-build .#checks.x86_64-linux.clan-dep-sops Build done.
buildbot/nix-build .#checks.x86_64-linux.clan-dep-bash Build done.
buildbot/nix-build .#checks.x86_64-linux.nixos-test-backup Build done.
buildbot/nix-build .#checks.x86_64-linux.clan-dep-sshpass Build done.
buildbot/nix-build .#checks.x86_64-linux.clan-dep-zbar Build done.
buildbot/nix-build .#checks.x86_64-linux.package-gui-installer-apk Build done.
buildbot/nix-build .#checks.x86_64-linux.clan-dep-age Build done.
buildbot/nix-build .#checks.x86_64-linux.clan-dep-tor Build done.
buildbot/nix-build .#checks.x86_64-linux.clan-app-no-breakpoints Build done.
buildbot/nix-build .#checks.x86_64-linux.devShell-default Build done.
buildbot/nix-build .#checks.x86_64-linux.devShell-clan-cli Build done.
buildbot/nix-build .#checks.x86_64-linux.container Build done.
buildbot/nix-build .#checks.x86_64-linux.lib-jsonschema-example-valid Build done.
buildbot/nix-build .#checks.x86_64-linux.clan-app-pytest Build done.
buildbot/nix-build .#checks.x86_64-linux.lib-jsonschema-nix-unit-tests Build done.
buildbot/nix-build .#checks.x86_64-linux.nixos-test_install_machine Build done.
buildbot/nix-build .#checks.x86_64-linux.package-deploy-docs Build done.
buildbot/nix-build .#checks.x86_64-linux.module-schema Build done.
buildbot/nix-build .#checks.x86_64-linux.package-impure-checks Build done.
buildbot/nix-build .#checks.x86_64-linux.treefmt Build done.
buildbot/nix-build .#checks.x86_64-linux.package-moonlight-sunshine-accept Build done.
buildbot/nix-build .#checks.x86_64-linux.package-pending-reviews Build done.
buildbot/nix-build .#checks.x86_64-linux.package-tea-create-pr Build done.
buildbot/nix-build .#checks.x86_64-linux.package-zerotier-members Build done.
buildbot/nix-build .#checks.x86_64-linux.package-zerotierone Build done.
buildbot/nix-build .#checks.x86_64-linux.package-docs Build done.
buildbot/nix-build .#checks.x86_64-linux.clan-pytest-without-core Build done.
buildbot/nix-build .#checks.x86_64-linux.package-webview-ui Build done.
buildbot/nix-build .#checks.x86_64-linux.package-clan-app Build done.
buildbot/nix-build .#checks.x86_64-linux.nixos-flash-installer Build done.
buildbot/nix-build .#checks.x86_64-linux.nixos-iso-installer Build done.
buildbot/nix-build .#checks.x86_64-linux.template-minimal Build done.
buildbot/nix-build .#checks.x86_64-linux.package-module-schema Build done.
buildbot/nix-build .#checks.x86_64-linux.wayland-proxy-virtwl Build done.
buildbot/nix-build .#checks.x86_64-linux.zt-tcp-relay Build done.
buildbot/nix-build .#checks.x86_64-linux.package-iso-installer Build done.
buildbot/nix-build .#checks.x86_64-linux.syncthing Build done.
buildbot/nix-build .#checks.x86_64-linux.devShell-clan-app Build done.
buildbot/nix-build .#checks.x86_64-linux.clan-pytest-with-core Build done.
checks / checks-impure (pull_request) Successful in 2m10s
buildbot/nix-build .#checks.x86_64-linux.package-gui-install-test-ubuntu-22-04 Build done.
buildbot/nix-build .#checks.x86_64-linux.test-backups Build done.
buildbot/nix-build .#checks.x86_64-linux.flash Build done.
buildbot/nix-build .#checks.x86_64-linux.test-installation Build done.
buildbot/nix-eval Build done.
109 lines
4.2 KiB
Python
109 lines
4.2 KiB
Python
import json
|
|
import os
|
|
import re
|
|
from pathlib import Path
|
|
from tempfile import NamedTemporaryFile
|
|
|
|
from clan_cli.cmd import Log, run
|
|
from clan_cli.dirs import machine_settings_file, nixpkgs_source, specific_machine_dir
|
|
from clan_cli.errors import ClanError, ClanHttpError
|
|
from clan_cli.git import commit_file
|
|
from clan_cli.nix import nix_eval
|
|
|
|
|
|
def verify_machine_config(
|
|
flake_dir: Path,
|
|
machine_name: str,
|
|
config: dict | None = None,
|
|
) -> str | None:
|
|
"""
|
|
Verify that the machine evaluates successfully
|
|
Returns a tuple of (success, error_message)
|
|
"""
|
|
if config is None:
|
|
config = config_for_machine(flake_dir, machine_name)
|
|
flake = flake_dir
|
|
with NamedTemporaryFile(mode="w", dir=flake) as clan_machine_settings_file:
|
|
json.dump(config, clan_machine_settings_file, indent=2)
|
|
clan_machine_settings_file.seek(0)
|
|
env = os.environ.copy()
|
|
env["CLAN_MACHINE_SETTINGS_FILE"] = clan_machine_settings_file.name
|
|
cmd = nix_eval(
|
|
flags=[
|
|
"--show-trace",
|
|
"--impure", # needed to access CLAN_MACHINE_SETTINGS_FILE
|
|
"--expr",
|
|
f"""
|
|
let
|
|
# hardcoding system for now, not sure where to get it from
|
|
system = "x86_64-linux";
|
|
flake = builtins.getFlake (toString {flake});
|
|
clan-core = flake.inputs.clan-core;
|
|
nixpkgsSrc = flake.inputs.nixpkgs or {nixpkgs_source()};
|
|
lib = import (nixpkgsSrc + /lib);
|
|
pkgs = import nixpkgsSrc {{ inherit system; }};
|
|
config = lib.importJSON (builtins.getEnv "CLAN_MACHINE_SETTINGS_FILE");
|
|
fakeMachine = pkgs.nixos {{
|
|
imports =
|
|
[
|
|
clan-core.nixosModules.clanCore
|
|
# potentially the config might affect submodule options,
|
|
# therefore we need to import it
|
|
config
|
|
{{clan.core.clanDir = {flake};}}
|
|
]
|
|
# add all clan modules specified via clanImports
|
|
++ (map (name: clan-core.clanModules.${{name}}) config.clanImports or []);
|
|
}};
|
|
in
|
|
fakeMachine.config.system.build.vm.outPath
|
|
""",
|
|
],
|
|
)
|
|
|
|
proc = run(
|
|
cmd,
|
|
cwd=flake,
|
|
env=env,
|
|
log=Log.BOTH,
|
|
)
|
|
if proc.returncode != 0:
|
|
return proc.stderr
|
|
return None
|
|
|
|
|
|
def config_for_machine(flake_dir: Path, machine_name: str) -> dict:
|
|
# read the config from a json file located at {flake}/machines/{machine_name}/settings.json
|
|
if not specific_machine_dir(flake_dir, machine_name).exists():
|
|
raise ClanHttpError(
|
|
msg=f"Machine {machine_name} not found. Create the machine first`",
|
|
status_code=404,
|
|
)
|
|
settings_path = machine_settings_file(flake_dir, machine_name)
|
|
if not settings_path.exists():
|
|
return {}
|
|
with open(settings_path) as f:
|
|
return json.load(f)
|
|
|
|
|
|
def set_config_for_machine(flake_dir: Path, machine_name: str, config: dict) -> None:
|
|
hostname_regex = r"^(?!-)[A-Za-z0-9-]{1,63}(?<!-)$"
|
|
if not re.match(hostname_regex, machine_name):
|
|
raise ClanError("Machine name must be a valid hostname")
|
|
if "networking" in config and "hostName" in config["networking"]:
|
|
if machine_name != config["networking"]["hostName"]:
|
|
raise ClanHttpError(
|
|
msg="Machine name does not match the 'networking.hostName' setting in the config",
|
|
status_code=400,
|
|
)
|
|
config["networking"]["hostName"] = machine_name
|
|
# create machine folder if it doesn't exist
|
|
# write the config to a json file located at {flake}/machines/{machine_name}/settings.json
|
|
settings_path = machine_settings_file(flake_dir, machine_name)
|
|
settings_path.parent.mkdir(parents=True, exist_ok=True)
|
|
with open(settings_path, "w") as f:
|
|
json.dump(config, f)
|
|
|
|
if flake_dir is not None:
|
|
commit_file(settings_path, flake_dir)
|