cli: don't use select from clanLib

This commit is contained in:
Michael Hoang
2025-04-25 17:44:08 +10:00
parent 79db3652df
commit c3842902ac
6 changed files with 55 additions and 22 deletions

View File

@@ -32,7 +32,7 @@ lib.fix (clanLib: {
jsonschema = import ./jsonschema { inherit lib; };
facts = import ./facts.nix { inherit lib; };
# Passthrough from self.inputs
# TODO: Can we make these agnostic from the name of the input?
inherit (self.inputs.nix-select.lib) parseSelector applySelectors select;
# deprecated
# remove when https://git.clan.lol/clan/clan-core/pulls/3212 is implemented
inherit (self.inputs.nix-select.lib) select;
})

View File

@@ -140,3 +140,7 @@ def nixpkgs_flake() -> Path:
def nixpkgs_source() -> Path:
return (module_root() / "nixpkgs" / "path").resolve()
def select_source() -> Path:
return (module_root() / "select").resolve()

View File

@@ -8,7 +8,7 @@ from tempfile import NamedTemporaryFile
from typing import Any
from clan_cli.cmd import Log, RunOpts, run
from clan_cli.dirs import user_cache_dir
from clan_cli.dirs import select_source, user_cache_dir
from clan_cli.errors import ClanError
from clan_cli.nix import (
nix_build,
@@ -700,12 +700,23 @@ class Flake:
str_selectors.append(selectors_as_json(parse_selector(selector)))
config = nix_config()
select_hash = "@select_hash@"
if not select_hash.startswith("sha256-"):
select_flake = Flake(str(select_source()))
select_flake.invalidate_cache()
assert select_flake.hash is not None, (
"this should be impossible as invalidate_cache() should always set `hash`"
)
select_hash = select_flake.hash
nix_code = f"""
let
flake = builtins.getFlake("path:{self.store_path}?narHash={self.hash}");
flake = builtins.getFlake "path:{self.store_path}?narHash={self.hash}";
selectLib = (builtins.getFlake "{select_source()}?narHash={select_hash}").lib;
in
flake.inputs.nixpkgs.legacyPackages.{config["system"]}.writeText "clan-flake-select" (
builtins.toJSON [ {" ".join([f"(flake.clanInternals.clanLib.applySelectors (builtins.fromJSON ''{attr}'') flake)" for attr in str_selectors])} ]
builtins.toJSON [ {" ".join([f"(selectLib.applySelectors (builtins.fromJSON ''{attr}'') flake)" for attr in str_selectors])} ]
)
"""
if tmp_store := nix_test_store():

View File

@@ -2,15 +2,16 @@
# callPackage args
gnupg,
installShellFiles,
jq,
lib,
nix,
pkgs,
runCommand,
stdenv,
nixVersions,
# custom args
clan-core-path,
nixpkgs,
nix-select,
includedRuntimeDeps,
pythonRuntime,
templateDerivation,
@@ -52,22 +53,31 @@ let
(pythonRuntime.withPackages pyTestDeps)
];
source = runCommand "clan-cli-source" { } ''
cp -r ${./.} $out
chmod -R +w $out
# In cases where the devshell created this file, this will already exist
rm -f $out/clan_cli/nixpkgs
source =
runCommand "clan-cli-source"
{
nativeBuildInputs = [ jq ];
}
''
cp -r ${./.} $out
chmod -R +w $out
ln -sf ${nixpkgs'} $out/clan_cli/nixpkgs
cp -r ${../../templates} $out/clan_cli/templates
'';
# In cases where the devshell created this file, this will already exist
rm -f $out/clan_cli/nixpkgs
substituteInPlace $out/clan_cli/flake.py \
--replace-fail '@select_hash@' "$(jq -r '.nodes."nix-select".locked.narHash' ${../../flake.lock})"
ln -sf ${nixpkgs'} $out/clan_cli/nixpkgs
ln -sf ${nix-select} $out/clan_cli/select
cp -r ${../../templates} $out/clan_cli/templates
'';
# Create a custom nixpkgs for use within the project
nixpkgs' =
runCommand "nixpkgs"
{
# Not all versions have `nix flake update --flake` option
nativeBuildInputs = [ nixVersions.stable ];
nativeBuildInputs = [ nix ];
}
''
mkdir $out
@@ -121,14 +131,12 @@ pythonRuntime.pkgs.buildPythonApplication {
propagatedBuildInputs = [ pythonRuntimeWithDeps ] ++ bundledRuntimeDependencies;
# Define and expose the tests and checks to run in CI
passthru.tests =
{
clan-deps = pkgs.runCommand "clan-deps" { } ''
# ${builtins.toString (builtins.attrValues testRuntimeDependenciesMap)}
touch $out
'';
# disabled on macOS until we fix all remaining issues
clan-pytest-without-core =
runCommand "clan-pytest-without-core"
{
@@ -140,7 +148,7 @@ pythonRuntime.pkgs.buildPythonApplication {
};
}
''
set -u -o pipefail
set -euo pipefail
cp -r ${source} ./src
chmod +w -R ./src
cd ./src
@@ -160,6 +168,7 @@ pythonRuntime.pkgs.buildPythonApplication {
'';
}
// lib.optionalAttrs (!stdenv.isDarwin) {
# disabled on macOS until we fix all remaining issues
clan-pytest-with-core =
runCommand "clan-pytest-with-core"
{
@@ -182,7 +191,7 @@ pythonRuntime.pkgs.buildPythonApplication {
};
}
''
set -u -o pipefail
set -euo pipefail
cp -r ${source} ./src
chmod +w -R ./src
cd ./src
@@ -215,8 +224,14 @@ pythonRuntime.pkgs.buildPythonApplication {
passthru.testRuntimeDependencies = testRuntimeDependencies;
passthru.testRuntimeDependenciesMap = testRuntimeDependenciesMap;
# Nixpkgs doesn't get copied from `src` as it's not in `package-data` in `pyproject.toml`
# as it significantly slows down the build so we copy it again here
# We don't copy `select` using `package-data` as Python globs don't include hidden directories
# leading to a different NAR hash and copying it here would also lead to `patchShebangs`
# changing the contents
postInstall = ''
cp -r ${nixpkgs'} $out/${pythonRuntime.sitePackages}/clan_cli/nixpkgs
ln -sf ${nix-select} $out/${pythonRuntime.sitePackages}/clan_cli/select
installShellCompletion --bash --name clan \
<(${pythonRuntimeWithDeps.pkgs.argcomplete}/bin/register-python-argcomplete --shell bash clan)
installShellCompletion --fish --name clan.fish \

View File

@@ -129,10 +129,11 @@
devShells.clan-cli = pkgs.callPackage ./shell.nix {
inherit (self'.packages) clan-cli;
inherit self';
inherit (inputs) nix-select;
};
packages = {
clan-cli = pkgs.callPackage ./default.nix {
inherit (inputs) nixpkgs;
inherit (inputs) nixpkgs nix-select;
templateDerivation = templateDerivation;
pythonRuntime = pkgs.python3;
clan-core-path = clanCoreWithVendoredDeps;
@@ -142,7 +143,7 @@
];
};
clan-cli-full = pkgs.callPackage ./default.nix {
inherit (inputs) nixpkgs;
inherit (inputs) nixpkgs nix-select;
clan-core-path = clanCoreWithVendoredDeps;
templateDerivation = templateDerivation;
pythonRuntime = pkgs.python3;

View File

@@ -1,6 +1,7 @@
{
lib,
nix-unit,
nix-select,
clan-cli,
mkShell,
ruff,
@@ -43,6 +44,7 @@ mkShell {
# Needed for impure tests
ln -sfT ${clan-cli.nixpkgs} "$PKG_ROOT/clan_cli/nixpkgs"
ln -sfT ${nix-select} "$PKG_ROOT/clan_cli/select"
# Generate classes.py from inventory schema
# This file is in .gitignore