don't know how to build these paths: /nix/store/7xcwyrggdjzr4f7a3hchr90w46zz2mcs-clan-pytest-with-core.drv warning: ignoring the client-specified setting 'store', because it is a restricted setting and you are not a trusted user building '/nix/store/4sdksxdd3cd5dcbvz5lnk5qmmk137lbs-clan-core-flake.drv' on nix-store.geninf.io:50051 clan-core-flake> build-x86-01: building 4sdksxdd3cd5dcbvz5lnk5qmmk137lbs-clan-core-flake.drv clan-core-flake> warning: you don't have Internet access; disabling some network-dependent features clan-core-flake> warning: you don't have Internet access; disabling some network-dependent features clan-core-flake> building '/nix/store/48v5jp4h5iqf3a9y5ghrf3vk84vk05da-closure-info.drv' on nix-store.geninf.io:50051 closure-info> gi-build-x86-02: building 48v5jp4h5iqf3a9y5ghrf3vk84vk05da-closure-info.drv building '/nix/store/6fbz4vpkh2b4kx1sr4qcdygg9pl7ibs3-clan-cli-source.drv' on nix-store.geninf.io:50051 clan-cli-source> attached to the build already running on this worker clan-cli-source> gi-build-x86-02: building 6fbz4vpkh2b4kx1sr4qcdygg9pl7ibs3-clan-cli-source.drv closure-info> structuredAttrs is enabled building '/nix/store/gj483gb37plqcqmx06dxqnhj4m96dai4-closure-info.drv' on nix-store.geninf.io:50051 closure-info> gi-build-x86-02: building gj483gb37plqcqmx06dxqnhj4m96dai4-closure-info.drv closure-info> structuredAttrs is enabled building '/nix/store/7xcwyrggdjzr4f7a3hchr90w46zz2mcs-clan-pytest-with-core.drv' on nix-store.geninf.io:50051 clan-pytest-with-core> gi-build-x86-02: building 7xcwyrggdjzr4f7a3hchr90w46zz2mcs-clan-pytest-with-core.drv clan-pytest-with-core> +++ export HOME=/build clan-pytest-with-core> +++ HOME=/build clan-pytest-with-core> +++ export NIX_STATE_DIR=/build/nix clan-pytest-with-core> +++ NIX_STATE_DIR=/build/nix clan-pytest-with-core> +++ export NIX_CONF_DIR=/build/etc clan-pytest-with-core> +++ NIX_CONF_DIR=/build/etc clan-pytest-with-core> +++ mkdir -p /build/etc clan-pytest-with-core> +++ echo 'fsync-metadata = false' clan-pytest-with-core> +++ export IN_NIX_SANDBOX=1 clan-pytest-with-core> +++ IN_NIX_SANDBOX=1 clan-pytest-with-core> +++ export CLAN_TEST_STORE=/build/store clan-pytest-with-core> +++ CLAN_TEST_STORE=/build/store clan-pytest-with-core> +++ export LOCK_NIX=/build/nix_lock clan-pytest-with-core> +++ LOCK_NIX=/build/nix_lock clan-pytest-with-core> +++ export CLAN_TEST_FLAKE_CACHE=/build/clan-flake-cache clan-pytest-with-core> +++ CLAN_TEST_FLAKE_CACHE=/build/clan-flake-cache clan-pytest-with-core> +++ mkdir -p /build/store/nix/store /build/clan-flake-cache clan-pytest-with-core> +++ mkdir -p /build/store/nix/var/nix/gcroots clan-pytest-with-core> +++ [[ -n /nix/store/iilk94hzrwbngwwqr0d68niv9p2gys42-closure-info ]] clan-pytest-with-core> ++++ nproc clan-pytest-with-core> +++ /nix/store/ycrbcy9sg4knpnik6a01dk70l0m673x7-findutils-4.11.0/bin/xargs -r -P32 /nix/store/2gfxiwls9hbgwdwcy43mprchwsq36mg6-coreutils-9.11/bin/cp --recursive --no-dereference --reflink=auto --target-directory /build/store/nix/store clan-pytest-with-core> +++ /nix/store/cv7vd1i121mj84jb694gjc3xvr0da4xw-nix-2.34.8/bin/nix-store --load-db --store /build/store clan-pytest-with-core> +++ export CLAN_CORE_PATH=/nix/store/c4gps8k2ky7ix7h6cgr1ss6pflxcsxmg-clan-core-flake clan-pytest-with-core> +++ CLAN_CORE_PATH=/nix/store/c4gps8k2ky7ix7h6cgr1ss6pflxcsxmg-clan-core-flake clan-pytest-with-core> +++ export PYTHONWARNINGS=error clan-pytest-with-core> +++ PYTHONWARNINGS=error clan-pytest-with-core> +++ export NIXPKGS=/nix/store/vlhb7haagkjabf20g1vg9kxi53fcpi17-source clan-pytest-with-core> +++ NIXPKGS=/nix/store/vlhb7haagkjabf20g1vg9kxi53fcpi17-source clan-pytest-with-core> +++ jobs=16 clan-pytest-with-core> +++ python -m pytest -m 'not impure and with_core ' -n 16 ./clan_cli ./clan_lib clan-pytest-with-core> Starting pytest session clan-pytest-with-core> Session config: <_pytest.config.Config object at 0x7fffe86d7380> clan-pytest-with-core> ============================= test session starts ============================== clan-pytest-with-core> platform linux -- Python 3.14.7, pytest-9.1.1, pluggy-1.6.0 clan-pytest-with-core> rootdir: /build/src clan-pytest-with-core> configfile: pyproject.toml clan-pytest-with-core> plugins: subprocess-1.6.0, timeout-2.4.0, xdist-3.8.0 clan-pytest-with-core> 16 workers [241 items] clan-pytest-with-core> scheduling tests via LoadScheduling clan-pytest-with-core> clan-pytest-with-core> clan_cli/init_test.py::test_init clan-pytest-with-core> clan_cli/machines/update_test.py::test_get_machines_for_update_tags[test_flake_with_core0-explicit_names0-filter_tags0-expected_names0] clan-pytest-with-core> clan_cli/machines/list_test.py::test_machines_list_with_tags_no_matches clan-pytest-with-core> clan_cli/flash/list_test.py::test_flash_list_languages clan-pytest-with-core> clan_cli/tests/test_secrets_cli.py::test_machines clan-pytest-with-core> clan_cli/machines/build_test.py::test_get_machines_for_build_nonexistent_machine clan-pytest-with-core> clan_cli/completions_test.py::test_complete_machines_without_flake clan-pytest-with-core> clan_cli/machines/build_test.py::test_get_machines_for_build[test_flake_with_core0-explicit_names0-filter_tags0-expected_names0] clan-pytest-with-core> clan_cli/init_test.py::test_init_fallback_from_non_clan_directory clan-pytest-with-core> clan_cli/tests/test_inventory_serde.py::test_inventory_deserialize_variants[test_flake_with_core1] clan-pytest-with-core> clan_cli/tests/test_secrets_cli.py::test_secrets_key_generate_gpg clan-pytest-with-core> clan_cli/tests/test_secrets_cli.py::test_secrets_key_generate_reports_registered_user clan-pytest-with-core> clan_cli/tests/test_machines_cli.py::test_machines_update_with_tags clan-pytest-with-core> clan_cli/clan/show_test.py::test_clan_show clan-pytest-with-core> clan_cli/machines/install_test.py::test_install_errors_without_target_host clan-pytest-with-core> clan_cli/tests/test_machines_cli.py::test_machine_delete clan-pytest-with-core> [gw0] [ 0%] PASSED clan_cli/flash/list_test.py::test_flash_list_languages clan-pytest-with-core> clan_cli/flash/list_test.py::test_flash_list_keymaps clan-pytest-with-core> [gw11] [ 0%] PASSED clan_cli/tests/test_machines_cli.py::test_machines_update_with_tags clan-pytest-with-core> clan_cli/tests/test_machines_cli.py::test_machines_update_nonexistent_machine clan-pytest-with-core> [gw1] [ 1%] FAILED clan_cli/init_test.py::test_init clan-pytest-with-core> clan_cli/init_test.py::test_init_existing_git clan-pytest-with-core> [gw10] [ 1%] PASSED clan_cli/tests/test_inventory_serde.py::test_inventory_deserialize_variants[test_flake_with_core1] clan-pytest-with-core> clan_cli/tests/test_machines_cli.py::test_machine_subcommands clan-pytest-with-core> [gw4] [ 2%] PASSED clan_cli/machines/build_test.py::test_get_machines_for_build_nonexistent_machine clan-pytest-with-core> clan_cli/machines/build_test.py::test_build_machine_without_hostplatform_raises_friendly_error[test_flake_with_core0] clan-pytest-with-core> [gw2] [ 2%] FAILED clan_cli/init_test.py::test_init_fallback_from_non_clan_directory clan-pytest-with-core> clan_cli/init_test.py::test_init_with_local_template_reference clan-pytest-with-core> [gw11] [ 2%] PASSED clan_cli/tests/test_machines_cli.py::test_machines_update_nonexistent_machine clan-pytest-with-core> clan_cli/tests/test_machines_cli.py::test_machines_update_typo_in_machine_name clan-pytest-with-core> [gw1] [ 3%] FAILED clan_cli/init_test.py::test_init_existing_git clan-pytest-with-core> clan_cli/init_test.py::test_init_minimal_template clan-pytest-with-core> [gw11] [ 3%] PASSED clan_cli/tests/test_machines_cli.py::test_machines_update_typo_in_machine_name clan-pytest-with-core> clan_cli/tests/test_vars_age.py::test_age_external_store_dir clan-pytest-with-core> [gw1] [ 4%] FAILED clan_cli/init_test.py::test_init_minimal_template clan-pytest-with-core> clan_cli/tests/test_vars_age.py::test_age_get_identity_fallback_paths clan-pytest-with-core> [gw2] [ 4%] FAILED clan_cli/init_test.py::test_init_with_local_template_reference clan-pytest-with-core> clan_cli/init_test.py::test_init_substitutes_placeholders clan-pytest-with-core> [gw0] [ 4%] PASSED clan_cli/flash/list_test.py::test_flash_list_keymaps clan-pytest-with-core> clan_cli/generate_test_vars/test_generate_test_vars.py::test_generate_test_vars clan-pytest-with-core> [gw2] [ 5%] FAILED clan_cli/init_test.py::test_init_substitutes_placeholders clan-pytest-with-core> clan_cli/tests/test_vars_age.py::test_age_ensure_machine_key_provisions_age_keygen clan-pytest-with-core> [gw1] [ 5%] PASSED clan_cli/tests/test_vars_age.py::test_age_get_identity_fallback_paths clan-pytest-with-core> clan_cli/tests/test_vars_age.py::test_age_get_identity_none_found clan-pytest-with-core> [gw4] [ 6%] PASSED clan_cli/machines/build_test.py::test_build_machine_without_hostplatform_raises_friendly_error[test_flake_with_core0] clan-pytest-with-core> clan_cli/machines/install_test.py::test_install_resolves_target_from_inventory clan-pytest-with-core> [gw1] [ 6%] PASSED clan_cli/tests/test_vars_age.py::test_age_get_identity_none_found clan-pytest-with-core> clan_cli/tests/test_vars_age.py::test_age_health_check clan-pytest-with-core> [gw2] [ 7%] FAILED clan_cli/tests/test_vars_age.py::test_age_ensure_machine_key_provisions_age_keygen clan-pytest-with-core> clan_cli/tests/test_vars_age.py::test_age_rekey_machine_key [localhost] $ clan machines delete --flake /build/pytest-u0hkdpx4/test_flake_with_core machine1 clan-pytest-with-core> Caller: /build/src/clan_cli/tests/test_machines_cli.py:99::test_machine_subcommands clan-pytest-with-core> clan-pytest-with-core> Prefetching flake /build/pytest-u0hkdpx4/test_flake_with_core clan-pytest-with-core> warning: you don't have Internet access; disabling some network-dependent features clan-pytest-with-core> Loading flake cache from file /build/clan-flake-cache/flakes-v2/68aaf9cdce101fd15f607ea0397480ddf99c5ab5 clan-pytest-with-core> (cached) $ clan select 'clanInternals.inventoryClass.inventorySerialization.{instances,machines,meta}' clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-u0hkdpx4/test_flake_with_core \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-u0hkdpx4/test_flake_with_core/inventory.json clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:89::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:89::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Adding inventory.json to git clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-u0hkdpx4/test_flake_with_core \ clan-pytest-with-core> diff \ clan-pytest-with-core> --cached --exit-code \ clan-pytest-with-core> -- /build/pytest-u0hkdpx4/test_flake_with_core/inventory.json clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:111::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 1 clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:111::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-u0hkdpx4/test_flake_with_core \ clan-pytest-with-core> commit \ clan-pytest-with-core> -m 'inventory.json: delete keys {('"'"'machines'"'"', '"'"'machine1'"'"')}' \ clan-pytest-with-core> --no-verify /build/pytest-u0hkdpx4/test_flake_with_core/inventory.json clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:131::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:131::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Committed inventory.json to git clan-pytest-with-core> Cache miss for clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> clan-pytest-with-core> [gw4] [ 7%] PASSED clan_cli/machines/install_test.py::test_install_resolves_target_from_inventory clan-pytest-with-core> clan_cli/tests/test_vars_age.py::test_age_error_get_nonexistent Loading flake cache from file /build/clan-flake-cache/flakes-v2/68aaf9cdce101fd15f607ea0397480ddf99c5ab5 clan-pytest-with-core> Cache miss for clanInternals.machines.x86_64-linux."machine1".config.clan.core.vars.settings.publicModule clan-pytest-with-core> clan-pytest-with-core> [gw5] [ 7%] PASSED clan_cli/machines/install_test.py::test_install_errors_without_target_host clan-pytest-with-core> clan_cli/machines/install_test.py::test_install_prefers_explicit_target_host_flag clan-pytest-with-core> [gw4] [ 8%] PASSED clan_cli/tests/test_vars_age.py::test_age_error_get_nonexistent clan-pytest-with-core> clan_cli/tests/test_vars_age.py::test_age_error_get_no_machine_key clan-pytest-with-core> [gw1] [ 8%] PASSED clan_cli/tests/test_vars_age.py::test_age_health_check clan-pytest-with-core> clan_cli/tests/test_vars_age.py::test_age_ensure_machine_key clan-pytest-with-core> [gw5] [ 9%] PASSED clan_cli/machines/install_test.py::test_install_prefers_explicit_target_host_flag clan-pytest-with-core> clan_cli/machines/install_test.py::test_install_prints_destructive_warning_by_default clan-pytest-with-core> [gw5] [ 9%] PASSED clan_cli/machines/install_test.py::test_install_prints_destructive_warning_by_default clan-pytest-with-core> clan_cli/tests/test_vars_age.py::test_age_deploy_false_shared_encrypted_to_user_keys clan-pytest-with-core> [gw2] [ 9%] PASSED clan_cli/tests/test_vars_age.py::test_age_rekey_machine_key clan-pytest-with-core> clan_cli/tests/test_vars_age.py::test_age_set_and_get_per_machine clan-pytest-with-core> [gw1] [ 10%] PASSED clan_cli/tests/test_vars_age.py::test_age_ensure_machine_key clan-pytest-with-core> clan_cli/tests/test_vars_age.py::test_age_delete_store_leaves_shared_secrets_untouched clan-pytest-with-core> [gw2] [ 10%] PASSED clan_cli/tests/test_vars_age.py::test_age_set_and_get_per_machine clan-pytest-with-core> clan_cli/tests/test_vars_age.py::test_age_set_and_get_shared clan-pytest-with-core> [gw4] [ 11%] PASSED clan_cli/tests/test_vars_age.py::test_age_error_get_no_machine_key clan-pytest-with-core> clan_cli/tests/test_vars_age.py::test_age_error_missing_machine_pubkey clan-pytest-with-core> [gw7] [ 11%] PASSED clan_cli/machines/update_test.py::test_get_machines_for_update_tags[test_flake_with_core0-explicit_names0-filter_tags0-expected_names0] clan-pytest-with-core> clan_cli/machines/update_test.py::test_get_machines_for_update_tags_and_name[test_flake_with_core0-explicit_names0-filter_tags0-expected_names0] clan-pytest-with-core> [gw4] [ 12%] PASSED clan_cli/tests/test_vars_age.py::test_age_error_missing_machine_pubkey clan-pytest-with-core> clan_cli/tests/test_vars_age.py::test_age_delete_cleanup clan-pytest-with-core> [gw5] [ 12%] PASSED clan_cli/tests/test_vars_age.py::test_age_deploy_false_shared_encrypted_to_user_keys clan-pytest-with-core> clan_cli/tests/test_vars_age.py::test_age_deploy_true_per_machine_encrypted_to_machine_key clan-pytest-with-core> [gw1] [ 12%] PASSED clan_cli/tests/test_vars_age.py::test_age_delete_store_leaves_shared_secrets_untouched clan-pytest-with-core> clan_cli/tests/test_vars_age.py::test_age_sidecar_created_for_shared_secret clan-pytest-with-core> [gw7] [ 13%] PASSED clan_cli/machines/update_test.py::test_get_machines_for_update_tags_and_name[test_flake_with_core0-explicit_names0-filter_tags0-expected_names0] clan-pytest-with-core> clan_cli/machines/update_test.py::test_get_machines_for_update_implicit_all[test_flake_with_core0-explicit_names0-filter_tags0-expected_names0] clan-pytest-with-core> [gw2] [ 13%] PASSED clan_cli/tests/test_vars_age.py::test_age_set_and_get_shared clan-pytest-with-core> clan_cli/tests/test_vars_age.py::test_age_fix_deploy_false_shared_rekeys_on_user_change clan-pytest-with-core> [gw4] [ 14%] PASSED clan_cli/tests/test_vars_age.py::test_age_delete_cleanup clan-pytest-with-core> clan_cli/tests/test_vars_age.py::test_age_transition_deploy_false_to_true_shared clan-pytest-with-core> [gw5] [ 14%] PASSED clan_cli/tests/test_vars_age.py::test_age_deploy_true_per_machine_encrypted_to_machine_key clan-pytest-with-core> clan_cli/tests/test_vars_age.py::test_age_deploy_true_shared_encrypted_to_machine_keys Loading flake cache from file /build/clan-flake-cache/flakes-v2/68aaf9cdce101fd15f607ea0397480ddf99c5ab5 clan-pytest-with-core> (cached) $ clan select clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> Cache miss for clanInternals.machines.x86_64-linux."machine1".config.clan.core.vars.settings.secretModule clan-pytest-with-core> clan-pytest-with-core> [gw1] [ 14%] PASSED clan_cli/tests/test_vars_age.py::test_age_sidecar_created_for_shared_secret clan-pytest-with-core> clan_cli/tests/test_vars_age.py::test_age_no_sidecar_for_per_machine_secret clan-pytest-with-core> [gw4] [ 15%] PASSED clan_cli/tests/test_vars_age.py::test_age_transition_deploy_false_to_true_shared clan-pytest-with-core> [gw1] [ 15%] PASSED clan_cli/tests/test_vars_age.py::test_age_no_sidecar_for_per_machine_secret clan-pytest-with-core> clan_cli/tests/test_vars_age.py::test_age_get_works_for_deploy_false_per_machine clan-pytest-with-core> clan_cli/tests/test_vars_age.py::test_age_deploy_false_per_machine_encrypted_to_user_keys clan-pytest-with-core> [gw5] [ 16%] PASSED clan_cli/tests/test_vars_age.py::test_age_deploy_true_shared_encrypted_to_machine_keys clan-pytest-with-core> clan_cli/tests/test_vars_age.py::test_age_fix_deploy_false_per_machine_rekeys_on_user_change clan-pytest-with-core> [gw4] [ 16%] PASSED clan_cli/tests/test_vars_age.py::test_age_get_works_for_deploy_false_per_machine clan-pytest-with-core> clan_cli/tests/test_vars_age.py::test_age_get_works_for_deploy_false_shared clan-pytest-with-core> [gw1] [ 17%] PASSED clan_cli/tests/test_vars_age.py::test_age_deploy_false_per_machine_encrypted_to_user_keys clan-pytest-with-core> clan_cli/tests/test_vars_age.py::test_age_fix_rekeys_machine_key_when_user_key_added clan-pytest-with-core> [gw4] [ 17%] PASSED clan_cli/tests/test_vars_age.py::test_age_get_works_for_deploy_false_shared clan-pytest-with-core> clan_cli/tests/test_vars_age.py::test_age_populate_dir_skips_deploy_false clan-pytest-with-core> [gw2] [ 17%] PASSED clan_cli/tests/test_vars_age.py::test_age_fix_deploy_false_shared_rekeys_on_user_change clan-pytest-with-core> clan_cli/tests/test_vars_age.py::test_age_transition_deploy_true_to_false_per_machine clan-pytest-with-core> [gw4] [ 18%] PASSED clan_cli/tests/test_vars_age.py::test_age_populate_dir_skips_deploy_false clan-pytest-with-core> clan_cli/tests/test_vars_cache.py::test_cache_misses_for_vars_operations clan-pytest-with-core> [gw2] [ 18%] PASSED clan_cli/tests/test_vars_age.py::test_age_transition_deploy_true_to_false_per_machine clan-pytest-with-core> clan_cli/tests/test_vars_age.py::test_age_transition_deploy_false_to_true_per_machine clan-pytest-with-core> [gw5] [ 19%] PASSED clan_cli/tests/test_vars_age.py::test_age_fix_deploy_false_per_machine_rekeys_on_user_change clan-pytest-with-core> clan_cli/tests/test_vars_cache.py::test_invalidation clan-pytest-with-core> [gw2] [ 19%] PASSED clan_cli/tests/test_vars_age.py::test_age_transition_deploy_false_to_true_per_machine clan-pytest-with-core> clan_cli/tests/test_vars_age.py::test_age_transition_deploy_true_to_false_shared clan-pytest-with-core> [gw1] [ 19%] PASSED clan_cli/tests/test_vars_age.py::test_age_fix_rekeys_machine_key_when_user_key_added Loading flake cache from file /build/clan-flake-cache/flakes-v2/68aaf9cdce101fd15f607ea0397480ddf99c5ab5 clan-pytest-with-core> clan-pytest-with-core> clan_cli/tests/test_vars_age.py::test_age_fix_rekeys_machine_key_when_user_key_removed (cached) $ clan select clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> Prefetching flake /build/pytest-u0hkdpx4/test_flake_with_core clan-pytest-with-core> warning: you don't have Internet access; disabling some network-dependent features clan-pytest-with-core> Cache miss for clanInternals.inventoryClass.inventorySerialization.{instances,machines,meta} clan-pytest-with-core> clan-pytest-with-core> [gw10] [ 20%] PASSED clan_cli/tests/test_machines_cli.py::test_machine_subcommands clan-pytest-with-core> clan_cli/tests/test_machines_cli.py::test_machine_create_with_custom_directory clan-pytest-with-core> [gw2] [ 20%] PASSED clan_cli/tests/test_vars_age.py::test_age_transition_deploy_true_to_false_shared clan-pytest-with-core> clan_cli/tests/test_vars_errors.py::test_non_existing_dependency_raises_error clan-pytest-with-core> [gw11] [ 21%] PASSED clan_cli/tests/test_vars_age.py::test_age_external_store_dir clan-pytest-with-core> clan_cli/tests/test_vars_age.py::test_age_external_store_dir_guards clan-pytest-with-core> [gw11] [ 21%] PASSED clan_cli/tests/test_vars_age.py::test_age_external_store_dir_guards clan-pytest-with-core> clan_cli/tests/test_vars_age.py::test_age_external_store_dir_requires_setting clan-pytest-with-core> [gw11] [ 21%] PASSED clan_cli/tests/test_vars_age.py::test_age_external_store_dir_requires_setting clan-pytest-with-core> clan_cli/tests/test_vars_age.py::test_generate_secret_var_age_minimal_select_calls clan-pytest-with-core> [gw1] [ 22%] PASSED clan_cli/tests/test_vars_age.py::test_age_fix_rekeys_machine_key_when_user_key_removed clan-pytest-with-core> clan_cli/tests/test_vars_age.py::test_age_fix_noop_when_nothing_changed clan-pytest-with-core> [gw7] [ 22%] PASSED clan_cli/machines/update_test.py::test_get_machines_for_update_implicit_all[test_flake_with_core0-explicit_names0-filter_tags0-expected_names0] clan-pytest-with-core> clan_cli/tests/test_vars_age.py::test_age_sidecar_created_for_machine_key clan-pytest-with-core> [gw1] [ 23%] PASSED clan_cli/tests/test_vars_age.py::test_age_fix_noop_when_nothing_changed clan-pytest-with-core> clan_cli/tests/test_vars_errors.py::test_shared_generator_conflicting_definition_raises_error clan-pytest-with-core> [gw7] [ 23%] PASSED clan_cli/tests/test_vars_age.py::test_age_sidecar_created_for_machine_key clan-pytest-with-core> clan_cli/tests/test_vars_age.py::test_age_fix_skips_when_recipients_unchanged clan-pytest-with-core> [gw10] [ 24%] PASSED clan_cli/tests/test_machines_cli.py::test_machine_create_with_custom_directory clan-pytest-with-core> clan_cli/tests/test_vars_errors.py::test_circular_dependency_raises_error clan-pytest-with-core> [gw7] [ 24%] PASSED clan_cli/tests/test_vars_age.py::test_age_fix_skips_when_recipients_unchanged clan-pytest-with-core> clan_cli/tests/test_vars_age.py::test_age_fix_reencrypts_when_recipients_changed clan-pytest-with-core> [gw7] [ 24%] PASSED clan_cli/tests/test_vars_age.py::test_age_fix_reencrypts_when_recipients_changed clan-pytest-with-core> clan_cli/tests/test_vars_generate.py::test_generate_secret_var_sops_with_default_group clan-pytest-with-core> [gw1] [ 25%] PASSED clan_cli/tests/test_vars_errors.py::test_shared_generator_conflicting_definition_raises_error clan-pytest-with-core> clan_cli/tests/test_vars_errors.py::test_accessing_path_before_generate_shows_helpful_error clan-pytest-with-core> [gw10] [ 25%] PASSED clan_cli/tests/test_vars_errors.py::test_circular_dependency_raises_error clan-pytest-with-core> clan_cli/tests/test_vars_errors.py::test_shared_vars_must_never_depend_on_machine_specific_vars clan-pytest-with-core> [gw2] [ 26%] PASSED clan_cli/tests/test_vars_errors.py::test_non_existing_dependency_raises_error clan-pytest-with-core> clan_cli/tests/test_vars_errors.py::test_generator_script_missing_output_file clan-pytest-with-core> [gw3] [ 26%] PASSED clan_cli/machines/build_test.py::test_get_machines_for_build[test_flake_with_core0-explicit_names0-filter_tags0-expected_names0] clan-pytest-with-core> [gw6] [ 26%] PASSED clan_cli/machines/list_test.py::test_machines_list_with_tags_no_matches clan-pytest-with-core> clan_cli/machines/build_test.py::test_get_machines_for_build[test_flake_with_core1-explicit_names1-filter_tags1-expected_names1] clan-pytest-with-core> clan_cli/machines/machines_test.py::test_inventory_machine_detect_class[test_flake_with_core0] clan-pytest-with-core> [gw8] [ 27%] PASSED clan_cli/clan/show_test.py::test_clan_show clan-pytest-with-core> clan_cli/completions_test.py::test_complete_machines [localhost] $ clan secrets users add --flake /build/pytest-6hgac4iw/test_flake_with_core --pgp-key 9A9B2741C8062D3D3DF1302D8B049E262A5CA255 testuser clan-pytest-with-core> Caller: /build/src/clan_cli/tests/test_secrets_cli.py:1042::test_secrets_key_generate_gpg clan-pytest-with-core> clan-pytest-with-core> Prefetching flake /build/pytest-6hgac4iw/test_flake_with_core clan-pytest-with-core> warning: you don't have Internet access; disabling some network-dependent features clan-pytest-with-core> Loading flake cache from file /build/clan-flake-cache/flakes-v2/3694fe0b938e8bf472d334f75cc077ec419c8722 clan-pytest-with-core> (cached) $ clan select clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-6hgac4iw/test_flake_with_core \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-6hgac4iw/test_flake_with_core/sops/users/testuser clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:89::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:89::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Adding sops/users/testuser to git clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-6hgac4iw/test_flake_with_core \ clan-pytest-with-core> diff \ clan-pytest-with-core> --cached --exit-code \ clan-pytest-with-core> -- /build/pytest-6hgac4iw/test_flake_with_core/sops/users/testuser clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:111::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 1 clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:111::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-6hgac4iw/test_flake_with_core \ clan-pytest-with-core> commit \ clan-pytest-with-core> -m 'secrets: add user testuser' \ clan-pytest-with-core> --no-verify /build/pytest-6hgac4iw/test_flake_with_core/sops/users/testuser clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:131::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:131::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Committed sops/users/testuser to git clan-pytest-with-core> clan-pytest-with-core> [gw15] [ 27%] PASSED clan_cli/tests/test_secrets_cli.py::test_secrets_key_generate_reports_registered_user clan-pytest-with-core> clan_cli/tests/test_upload_single_file.py::test_upload_single_file clan-pytest-with-core> [gw3] [ 28%] PASSED clan_cli/machines/build_test.py::test_get_machines_for_build[test_flake_with_core1-explicit_names1-filter_tags1-expected_names1] clan-pytest-with-core> clan_cli/machines/build_test.py::test_get_machines_for_build[test_flake_with_core2-explicit_names2-filter_tags2-expected_names2] clan-pytest-with-core> [gw8] [ 28%] PASSED clan_cli/completions_test.py::test_complete_machines clan-pytest-with-core> clan_cli/completions_test.py::test_complete_machines_with_prefix [localhost] $ clan secrets set --flake /build/pytest-6hgac4iw/test_flake_with_core secret-name clan-pytest-with-core> Caller: /build/src/clan_cli/tests/test_secrets_cli.py:1076::test_secrets_key_generate_gpg clan-pytest-with-core> clan-pytest-with-core> Prefetching flake /build/pytest-6hgac4iw/test_flake_with_core clan-pytest-with-core> warning: you don't have Internet access; disabling some network-dependent features clan-pytest-with-core> Loading flake cache from file /build/clan-flake-cache/flakes-v2/b9d11cf6233146e82b708344887ab0512b18fa68 clan-pytest-with-core> (cached) $ clan select clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> Cache miss for clanInternals.?secrets.?age.?plugins clan-pytest-with-core> clan-pytest-with-core> [gw8] [ 29%] PASSED clan_cli/completions_test.py::test_complete_machines_with_prefix clan-pytest-with-core> clan_cli/tests/test_vars_generate.py::test_sops_fix_commits_all_changes clan-pytest-with-core> [gw3] [ 29%] PASSED clan_cli/machines/build_test.py::test_get_machines_for_build[test_flake_with_core2-explicit_names2-filter_tags2-expected_names2] clan-pytest-with-core> clan_cli/tests/test_vars_generate.py::test_generate_secret_for_multiple_machines Loading flake cache from file /build/clan-flake-cache/flakes-v2/b9d11cf6233146e82b708344887ab0512b18fa68 clan-pytest-with-core> Found PGP public key in the environment (SOPS_PGP_FP): 9A9B2741C8062D3D3DF1302D8B049E262A5CA255 clan-pytest-with-core> sops \ clan-pytest-with-core> --config /build/tmpbxgd_lni \ clan-pytest-with-core> encrypt \ clan-pytest-with-core> --in-place /dev/shm/tmpt_vc1563 clan-pytest-with-core> Caller: /build/src/clan_cli/secrets/sops.py:320::sops_run clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_cli/secrets/sops.py:320::sops_run clan-pytest-with-core> clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-6hgac4iw/test_flake_with_core \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-6hgac4iw/test_flake_with_core/sops/secrets/secret-name/users/testuser clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:89::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:89::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Adding sops/secrets/secret-name/users/testuser to git clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-6hgac4iw/test_flake_with_core \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-6hgac4iw/test_flake_with_core/sops/secrets/secret-name/secret clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:89::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:89::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Adding sops/secrets/secret-name/secret to git clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-6hgac4iw/test_flake_with_core \ clan-pytest-with-core> diff \ clan-pytest-with-core> --cached --exit-code \ clan-pytest-with-core> -- /build/pytest-6hgac4iw/test_flake_with_core/sops/secrets/secret-name/users/testuser \ clan-pytest-with-core> /build/pytest-6hgac4iw/test_flake_with_core/sops/secrets/secret-name/secret clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:111::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 1 clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:111::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-6hgac4iw/test_flake_with_core \ clan-pytest-with-core> commit \ clan-pytest-with-core> -m 'secrets: update secret-name' \ clan-pytest-with-core> --no-verify /build/pytest-6hgac4iw/test_flake_with_core/sops/secrets/secret-name/users/testuser \ clan-pytest-with-core> /build/pytest-6hgac4iw/test_flake_with_core/sops/secrets/secret-name/secret clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:131::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:131::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Committed 2 files to git: sops/secrets/secret-name/users/testuser, sops/secrets/secret-name/secret clan-pytest-with-core> clan-pytest-with-core> [gw6] [ 29%] PASSED clan_cli/machines/machines_test.py::test_inventory_machine_detect_class[test_flake_with_core0] clan-pytest-with-core> clan_cli/machines/update_test.py::test_get_machines_for_update_single_name[test_flake_with_core0-explicit_names0-filter_tags0-expected_names0] clan-pytest-with-core> [gw15] [ 30%] PASSED clan_cli/tests/test_upload_single_file.py::test_upload_single_file clan-pytest-with-core> clan_cli/tests/test_vars_age.py::test_generate_secret_var_age clan-pytest-with-core> [gw6] [ 30%] PASSED clan_cli/machines/update_test.py::test_get_machines_for_update_single_name[test_flake_with_core0-explicit_names0-filter_tags0-expected_names0] clan-pytest-with-core> clan_cli/tests/test_vars_generate.py::test_flake_level_generators clan-pytest-with-core> [gw14] [ 31%] PASSED clan_cli/tests/test_secrets_cli.py::test_secrets_key_generate_gpg clan-pytest-with-core> clan_cli/tests/test_secrets_cli.py::test_secrets_users_add_age_plugin_error clan-pytest-with-core> [gw14] [ 31%] PASSED clan_cli/tests/test_secrets_cli.py::test_secrets_users_add_age_plugin_error clan-pytest-with-core> clan_cli/tests/test_secrets_cli.py::test_secrets_key_generate_new_appends [localhost] $ clan secrets machines remove --flake /build/pytest-zh_kahwa/test_flake_with_core foo clan-pytest-with-core> Caller: /build/src/clan_cli/tests/test_secrets_cli.py:142::_test_identities clan-pytest-with-core> clan-pytest-with-core> Prefetching flake /build/pytest-zh_kahwa/test_flake_with_core clan-pytest-with-core> warning: you don't have Internet access; disabling some network-dependent features clan-pytest-with-core> Loading flake cache from file /build/clan-flake-cache/flakes-v2/d676ae6d26e456deb4f964638e80cc278789ba4a clan-pytest-with-core> (cached) $ clan select clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> Cache miss for clanInternals.?secrets.?age.?plugins clan-pytest-with-core> Loading flake cache from file /build/clan-flake-cache/flakes-v2/d676ae6d26e456deb4f964638e80cc278789ba4a clan-pytest-with-core> sops \ clan-pytest-with-core> --config /build/tmp1vmmwdbe \ clan-pytest-with-core> updatekeys \ clan-pytest-with-core> --yes /build/pytest-zh_kahwa/test_flake_with_core/sops/secrets/machine_secret/secret clan-pytest-with-core> Caller: /build/src/clan_cli/secrets/sops.py:320::sops_run clan-pytest-with-core> clan-pytest-with-core> clan-pytest-with-core> [gw14] [ 31%] PASSED clan_cli/tests/test_secrets_cli.py::test_secrets_key_generate_new_appends clan-pytest-with-core> clan_cli/tests/test_vars_prompts.py::test_prompt 2026/10/07 11:53:34 Syncing keys for file /build/pytest-zh_kahwa/test_flake_with_core/sops/secrets/machine_secret/secret clan-pytest-with-core> The following changes will be made to the file's groups: clan-pytest-with-core> Group 1 clan-pytest-with-core> age1dhuh9xtefhgpr2sjjf7gmp9q2pr37z92rv4wsadxuqdx48989g7qj552qp clan-pytest-with-core> --- age14tva0txcrl0zes05x7gkx56qd6wd9q3nwecjac74xxzz4l47r44sv3fz62 clan-pytest-with-core> 2026/10/07 11:53:34 File /build/pytest-zh_kahwa/test_flake_with_core/sops/secrets/machine_secret/secret synced with new keys clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_cli/secrets/sops.py:320::sops_run clan-pytest-with-core> clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-zh_kahwa/test_flake_with_core \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-zh_kahwa/test_flake_with_core/sops/machines/foo clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:89::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> warning: could not open directory 'sops/machines/': No such file or directory clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:89::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Adding sops/machines/foo to git clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-zh_kahwa/test_flake_with_core \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-zh_kahwa/test_flake_with_core/sops/secrets/machine_secret/machines/foo clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:89::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:89::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Adding sops/secrets/machine_secret/machines/foo to git clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-zh_kahwa/test_flake_with_core \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-zh_kahwa/test_flake_with_core/sops/secrets/machine_secret/secret clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:89::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:89::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Adding sops/secrets/machine_secret/secret to git clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-zh_kahwa/test_flake_with_core \ clan-pytest-with-core> diff \ clan-pytest-with-core> --cached --exit-code \ clan-pytest-with-core> -- /build/pytest-zh_kahwa/test_flake_with_core/sops/machines/foo \ clan-pytest-with-core> /build/pytest-zh_kahwa/test_flake_with_core/sops/secrets/machine_secret/machines/foo \ clan-pytest-with-core> /build/pytest-zh_kahwa/test_flake_with_core/sops/secrets/machine_secret/secret clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:111::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 1 clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:111::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-zh_kahwa/test_flake_with_core \ clan-pytest-with-core> commit \ clan-pytest-with-core> -m 'secrets: remove machine foo' \ clan-pytest-with-core> --no-verify /build/pytest-zh_kahwa/test_flake_with_core/sops/machines/foo \ clan-pytest-with-core> /build/pytest-zh_kahwa/test_flake_with_core/sops/secrets/machine_secret/machines/foo \ clan-pytest-with-core> /build/pytest-zh_kahwa/test_flake_with_core/sops/secrets/machine_secret/secret clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:131::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:131::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Committed 3 files to git: sops/machines/foo, sops/secrets/machine_secret/machines/foo, sops/secrets/machine_secret/secret clan-pytest-with-core> [localhost] $ clan secrets machines remove --flake /build/pytest-zh_kahwa/test_flake_with_core foo clan-pytest-with-core> Caller: /build/src/clan_cli/tests/test_secrets_cli.py:148::_test_identities clan-pytest-with-core> clan-pytest-with-core> Prefetching flake /build/pytest-zh_kahwa/test_flake_with_core clan-pytest-with-core> warning: you don't have Internet access; disabling some network-dependent features clan-pytest-with-core> Cache miss for clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> Cache miss for clanInternals.?secrets.?age.?plugins clan-pytest-with-core> Loading flake cache from file /build/clan-flake-cache/flakes-v2/2ba5d3ff4984111cf9c2373317ed8904a924924f clan-pytest-with-core> clan-pytest-with-core> [gw13] [ 32%] PASSED clan_cli/tests/test_secrets_cli.py::test_machines clan-pytest-with-core> clan_cli/tests/test_secrets_cli.py::test_groups clan-pytest-with-core> [gw13] [ 32%] SKIPPED clan_cli/tests/test_secrets_cli.py::test_groups clan-pytest-with-core> clan_cli/tests/test_secrets_cli.py::test_secrets [localhost] $ clan secrets key generate --flake /build/pytest-cs0d8rqp/test_flake_with_core clan-pytest-with-core> Caller: /build/src/clan_cli/tests/test_secrets_cli.py:655::test_secrets clan-pytest-with-core> clan-pytest-with-core> age-keygen clan-pytest-with-core> Caller: /build/src/clan_cli/secrets/sops.py:382::generate_private_key clan-pytest-with-core> clan-pytest-with-core> Public key: age1fqnw03s4cvzu9n6ez4uhtwxcsa4e5h4fjgg0u0zda05d9wrfx9aq4p840e clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_cli/secrets/sops.py:382::generate_private_key clan-pytest-with-core> clan-pytest-with-core> Generated age private key at '/build/pytest-cs0d8rqp/test_flake_with_core/../age.key' for your user. clan-pytest-with-core> Please back it up on a secure location or you will lose access to your secrets. clan-pytest-with-core> Generated new AGE key age1fqnw03s4cvzu9n6ez4uhtwxcsa4e5h4fjgg0u0zda05d9wrfx9aq4p840e clan-pytest-with-core> Add your age public key to the repository with: clan-pytest-with-core> clan secrets users add --age-key age1fqnw03s4cvzu9n6ez4uhtwxcsa4e5h4fjgg0u0zda05d9wrfx9aq4p840e clan-pytest-with-core> [localhost] $ clan secrets users add --flake /build/pytest-cs0d8rqp/test_flake_with_core testuser age1fqnw03s4cvzu9n6ez4uhtwxcsa4e5h4fjgg0u0zda05d9wrfx9aq4p840e clan-pytest-with-core> Caller: /build/src/clan_cli/tests/test_secrets_cli.py:667::test_secrets clan-pytest-with-core> clan-pytest-with-core> Prefetching flake /build/pytest-cs0d8rqp/test_flake_with_core clan-pytest-with-core> warning: you don't have Internet access; disabling some network-dependent features clan-pytest-with-core> Loading flake cache from file /build/clan-flake-cache/flakes-v2/3694fe0b938e8bf472d334f75cc077ec419c8722 clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-cs0d8rqp/test_flake_with_core \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-cs0d8rqp/test_flake_with_core/sops/users/testuser clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:89::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:89::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Adding sops/users/testuser to git clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-cs0d8rqp/test_flake_with_core \ clan-pytest-with-core> diff \ clan-pytest-with-core> --cached --exit-code \ clan-pytest-with-core> -- /build/pytest-cs0d8rqp/test_flake_with_core/sops/users/testuser clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:111::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 1 clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:111::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-cs0d8rqp/test_flake_with_core \ clan-pytest-with-core> commit \ clan-pytest-with-core> -m 'secrets: add user testuser' \ clan-pytest-with-core> --no-verify /build/pytest-cs0d8rqp/test_flake_with_core/sops/users/testuser clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:131::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:131::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Committed sops/users/testuser to git clan-pytest-with-core> [localhost] $ clan secrets get --flake /build/pytest-cs0d8rqp/test_flake_with_core nonexisting clan-pytest-with-core> Caller: /build/src/clan_cli/tests/test_secrets_cli.py:680::test_secrets clan-pytest-with-core> clan-pytest-with-core> Prefetching flake /build/pytest-cs0d8rqp/test_flake_with_core clan-pytest-with-core> warning: you don't have Internet access; disabling some network-dependent features clan-pytest-with-core> Cache miss for clanInternals.?secrets.?age.?plugins clan-pytest-with-core> [localhost] $ clan secrets set --flake /build/pytest-cs0d8rqp/test_flake_with_core initialkey clan-pytest-with-core> Caller: /build/src/clan_cli/tests/test_secrets_cli.py:690::test_secrets clan-pytest-with-core> clan-pytest-with-core> Prefetching flake /build/pytest-cs0d8rqp/test_flake_with_core clan-pytest-with-core> warning: you don't have Internet access; disabling some network-dependent features clan-pytest-with-core> Loading flake cache from file /build/clan-flake-cache/flakes-v2/93cb2e689fc1b9ccf654eae075c99572829c7523 clan-pytest-with-core> echo '<>' | age-keygen \ clan-pytest-with-core> -y clan-pytest-with-core> Caller: /build/src/clan_cli/secrets/sops.py:372::get_public_age_key_from_private_key clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_cli/secrets/sops.py:372::get_public_age_key_from_private_key clan-pytest-with-core> clan-pytest-with-core> Found age public key from a private key in /build/pytest-cs0d8rqp/test_flake_with_core/../age.key: age1fqnw03s4cvzu9n6ez4uhtwxcsa4e5h4fjgg0u0zda05d9wrfx9aq4p840e clan-pytest-with-core> sops \ clan-pytest-with-core> --config /build/tmpkb8k9ihv \ clan-pytest-with-core> encrypt \ clan-pytest-with-core> --in-place /dev/shm/tmpfq4bsi20 clan-pytest-with-core> Caller: /build/src/clan_cli/secrets/sops.py:320::sops_run clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_cli/secrets/sops.py:320::sops_run clan-pytest-with-core> clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-cs0d8rqp/test_flake_with_core \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-cs0d8rqp/test_flake_with_core/sops/secrets/initialkey/users/testuser clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:89::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:89::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Adding sops/secrets/initialkey/users/testuser to git clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-cs0d8rqp/test_flake_with_core \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-cs0d8rqp/test_flake_with_core/sops/secrets/initialkey/secret clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:89::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:89::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Adding sops/secrets/initialkey/secret to git clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-cs0d8rqp/test_flake_with_core \ clan-pytest-with-core> diff \ clan-pytest-with-core> --cached --exit-code \ clan-pytest-with-core> -- /build/pytest-cs0d8rqp/test_flake_with_core/sops/secrets/initialkey/users/testuser \ clan-pytest-with-core> /build/pytest-cs0d8rqp/test_flake_with_core/sops/secrets/initialkey/secret clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:111::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 1 clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:111::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-cs0d8rqp/test_flake_with_core \ clan-pytest-with-core> commit \ clan-pytest-with-core> -m 'secrets: update initialkey' \ clan-pytest-with-core> --no-verify /build/pytest-cs0d8rqp/test_flake_with_core/sops/secrets/initialkey/users/testuser \ clan-pytest-with-core> /build/pytest-cs0d8rqp/test_flake_with_core/sops/secrets/initialkey/secret clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:131::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:131::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Committed 2 files to git: sops/secrets/initialkey/users/testuser, sops/secrets/initialkey/secret clan-pytest-with-core> [localhost] $ clan secrets set --edit --flake /build/pytest-cs0d8rqp/test_flake_with_core initialkey clan-pytest-with-core> Caller: /build/src/clan_cli/tests/test_secrets_cli.py:703::test_secrets clan-pytest-with-core> clan-pytest-with-core> Prefetching flake /build/pytest-cs0d8rqp/test_flake_with_core clan-pytest-with-core> warning: you don't have Internet access; disabling some network-dependent features clan-pytest-with-core> echo '<>' | age-keygen \ clan-pytest-with-core> -y clan-pytest-with-core> Caller: /build/src/clan_cli/secrets/sops.py:372::get_public_age_key_from_private_key clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_cli/secrets/sops.py:372::get_public_age_key_from_private_key clan-pytest-with-core> clan-pytest-with-core> Found age public key from a private key in /build/pytest-cs0d8rqp/test_flake_with_core/../age.key: age1fqnw03s4cvzu9n6ez4uhtwxcsa4e5h4fjgg0u0zda05d9wrfx9aq4p840e clan-pytest-with-core> File has not changed, exiting. clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-cs0d8rqp/test_flake_with_core \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-cs0d8rqp/test_flake_with_core/sops/secrets/initialkey/secret clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:89::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:89::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Adding sops/secrets/initialkey/secret to git clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-cs0d8rqp/test_flake_with_core \ clan-pytest-with-core> diff \ clan-pytest-with-core> --cached --exit-code \ clan-pytest-with-core> -- /build/pytest-cs0d8rqp/test_flake_with_core/sops/secrets/initialkey/secret clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:111::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:111::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> [localhost] $ clan secrets rename --flake /build/pytest-cs0d8rqp/test_flake_with_core initialkey key clan-pytest-with-core> Caller: /build/src/clan_cli/tests/test_secrets_cli.py:715::test_secrets clan-pytest-with-core> clan-pytest-with-core> Prefetching flake /build/pytest-cs0d8rqp/test_flake_with_core clan-pytest-with-core> warning: you don't have Internet access; disabling some network-dependent features clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-cs0d8rqp/test_flake_with_core \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-cs0d8rqp/test_flake_with_core/sops/secrets/initialkey clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:89::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:89::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Adding sops/secrets/initialkey to git clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-cs0d8rqp/test_flake_with_core \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-cs0d8rqp/test_flake_with_core/sops/secrets/key clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:89::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:89::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Adding sops/secrets/key to git clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-cs0d8rqp/test_flake_with_core \ clan-pytest-with-core> diff \ clan-pytest-with-core> --cached --exit-code \ clan-pytest-with-core> -- /build/pytest-cs0d8rqp/test_flake_with_core/sops/secrets/initialkey \ clan-pytest-with-core> /build/pytest-cs0d8rqp/test_flake_with_core/sops/secrets/key clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:111::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 1 clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:111::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-cs0d8rqp/test_flake_with_core \ clan-pytest-with-core> commit \ clan-pytest-with-core> -m 'secrets: rename initialkey to key' \ clan-pytest-with-core> --no-verify /build/pytest-cs0d8rqp/test_flake_with_core/sops/secrets/initialkey \ clan-pytest-with-core> /build/pytest-cs0d8rqp/test_flake_with_core/sops/secrets/key clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:131::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:131::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Committed 2 files to git: sops/secrets/initialkey, sops/secrets/key clan-pytest-with-core> clan-pytest-with-core> [gw11] [ 33%] PASSED clan_cli/tests/test_vars_age.py::test_generate_secret_var_age_minimal_select_calls clan-pytest-with-core> clan_cli/tests/test_vars_age.py::test_age_get_identity_env_vars [localhost] $ clan secrets machines add --flake /build/pytest-cs0d8rqp/test_flake_with_core machine1 age14tva0txcrl0zes05x7gkx56qd6wd9q3nwecjac74xxzz4l47r44sv3fz62 clan-pytest-with-core> Caller: /build/src/clan_cli/tests/test_secrets_cli.py:748::test_secrets clan-pytest-with-core> clan-pytest-with-core> Prefetching flake /build/pytest-cs0d8rqp/test_flake_with_core clan-pytest-with-core> clan-pytest-with-core> [gw11] [ 33%] PASSED clan_cli/tests/test_vars_age.py::test_age_get_identity_env_vars warning: you don't have Internet access; disabling some network-dependent features clan-pytest-with-core> clan-pytest-with-core> clan_cli/tests/test_vars_prompts.py::test_persisted_prompt_reused_not_reasked git \ clan-pytest-with-core> -C /build/pytest-cs0d8rqp/test_flake_with_core \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-cs0d8rqp/test_flake_with_core/sops/machines/machine1 clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:89::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:89::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Adding sops/machines/machine1 to git clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-cs0d8rqp/test_flake_with_core \ clan-pytest-with-core> diff \ clan-pytest-with-core> --cached --exit-code \ clan-pytest-with-core> -- /build/pytest-cs0d8rqp/test_flake_with_core/sops/machines/machine1 clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:111::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 1 clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:111::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-cs0d8rqp/test_flake_with_core \ clan-pytest-with-core> commit \ clan-pytest-with-core> -m 'secrets: add machine machine1' \ clan-pytest-with-core> --no-verify /build/pytest-cs0d8rqp/test_flake_with_core/sops/machines/machine1 clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:131::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:131::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Committed sops/machines/machine1 to git clan-pytest-with-core> [localhost] $ clan secrets machines add-secret --flake /build/pytest-cs0d8rqp/test_flake_with_core machine1 key clan-pytest-with-core> Caller: /build/src/clan_cli/tests/test_secrets_cli.py:759::test_secrets clan-pytest-with-core> clan-pytest-with-core> Prefetching flake /build/pytest-cs0d8rqp/test_flake_with_core clan-pytest-with-core> warning: you don't have Internet access; disabling some network-dependent features clan-pytest-with-core> sops \ clan-pytest-with-core> --config /build/tmp0g304d_z \ clan-pytest-with-core> updatekeys \ clan-pytest-with-core> --yes /build/pytest-cs0d8rqp/test_flake_with_core/sops/secrets/key/secret clan-pytest-with-core> Caller: /build/src/clan_cli/secrets/sops.py:320::sops_run clan-pytest-with-core> clan-pytest-with-core> 2026/10/07 11:53:36 Syncing keys for file /build/pytest-cs0d8rqp/test_flake_with_core/sops/secrets/key/secret clan-pytest-with-core> The following changes will be made to the file's groups: clan-pytest-with-core> Group 1 clan-pytest-with-core> age1fqnw03s4cvzu9n6ez4uhtwxcsa4e5h4fjgg0u0zda05d9wrfx9aq4p840e clan-pytest-with-core> +++ age14tva0txcrl0zes05x7gkx56qd6wd9q3nwecjac74xxzz4l47r44sv3fz62 clan-pytest-with-core> 2026/10/07 11:53:36 File /build/pytest-cs0d8rqp/test_flake_with_core/sops/secrets/key/secret synced with new keys clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_cli/secrets/sops.py:320::sops_run clan-pytest-with-core> clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-cs0d8rqp/test_flake_with_core \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-cs0d8rqp/test_flake_with_core/sops/secrets/key/machines/machine1 clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:89::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:89::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Adding sops/secrets/key/machines/machine1 to git clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-cs0d8rqp/test_flake_with_core \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-cs0d8rqp/test_flake_with_core/sops/secrets/key/secret clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:89::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:89::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Adding sops/secrets/key/secret to git clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-cs0d8rqp/test_flake_with_core \ clan-pytest-with-core> diff \ clan-pytest-with-core> --cached --exit-code \ clan-pytest-with-core> -- /build/pytest-cs0d8rqp/test_flake_with_core/sops/secrets/key/machines/machine1 \ clan-pytest-with-core> /build/pytest-cs0d8rqp/test_flake_with_core/sops/secrets/key/secret clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:111::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 1 clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:111::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-cs0d8rqp/test_flake_with_core \ clan-pytest-with-core> commit \ clan-pytest-with-core> -m 'vars: add machine1 to secret sops/secrets/key' \ clan-pytest-with-core> --no-verify /build/pytest-cs0d8rqp/test_flake_with_core/sops/secrets/key/machines/machine1 \ clan-pytest-with-core> /build/pytest-cs0d8rqp/test_flake_with_core/sops/secrets/key/secret clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:131::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:131::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Committed 2 files to git: sops/secrets/key/machines/machine1, sops/secrets/key/secret clan-pytest-with-core> echo '<>' | age-keygen \ clan-pytest-with-core> -y clan-pytest-with-core> Caller: /build/src/clan_cli/secrets/sops.py:372::get_public_age_key_from_private_key clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_cli/secrets/sops.py:372::get_public_age_key_from_private_key clan-pytest-with-core> clan-pytest-with-core> [localhost] $ clan secrets machines add --flake /build/pytest-cs0d8rqp/test_flake_with_core -f machine1 AGE-SECRET-KEY-1KF8E3SR3TTGL6M476SKF7EEMR4H9NF7ZWYSLJUAK8JX276JC7KUSSURKFK clan-pytest-with-core> Caller: /build/src/clan_cli/tests/test_secrets_cli.py:784::test_secrets clan-pytest-with-core> clan-pytest-with-core> Prefetching flake /build/pytest-cs0d8rqp/test_flake_with_core clan-pytest-with-core> warning: you don't have Internet access; disabling some network-dependent features clan-pytest-with-core> sops \ clan-pytest-with-core> --config /build/tmpv5_qvkcs \ clan-pytest-with-core> updatekeys \ clan-pytest-with-core> --yes /build/pytest-cs0d8rqp/test_flake_with_core/sops/secrets/key/secret clan-pytest-with-core> Caller: /build/src/clan_cli/secrets/sops.py:320::sops_run clan-pytest-with-core> clan-pytest-with-core> 2026/10/07 11:53:36 Syncing keys for file /build/pytest-cs0d8rqp/test_flake_with_core/sops/secrets/key/secret clan-pytest-with-core> The following changes will be made to the file's groups: clan-pytest-with-core> Group 1 clan-pytest-with-core> age1fqnw03s4cvzu9n6ez4uhtwxcsa4e5h4fjgg0u0zda05d9wrfx9aq4p840e clan-pytest-with-core> +++ age1dhwqzkah943xzc34tc3dlmfayyevcmdmxzjezdgdy33euxwf59vsp3vk3c clan-pytest-with-core> --- age14tva0txcrl0zes05x7gkx56qd6wd9q3nwecjac74xxzz4l47r44sv3fz62 clan-pytest-with-core> 2026/10/07 11:53:36 File /build/pytest-cs0d8rqp/test_flake_with_core/sops/secrets/key/secret synced with new keys clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_cli/secrets/sops.py:320::sops_run clan-pytest-with-core> clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-cs0d8rqp/test_flake_with_core \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-cs0d8rqp/test_flake_with_core/sops/machines/machine1 clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:89::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:89::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Adding sops/machines/machine1 to git clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-cs0d8rqp/test_flake_with_core \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-cs0d8rqp/test_flake_with_core/sops/secrets/key/secret clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:89::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:89::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Adding sops/secrets/key/secret to git clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-cs0d8rqp/test_flake_with_core \ clan-pytest-with-core> diff \ clan-pytest-with-core> --cached --exit-code \ clan-pytest-with-core> -- /build/pytest-cs0d8rqp/test_flake_with_core/sops/machines/machine1 \ clan-pytest-with-core> /build/pytest-cs0d8rqp/test_flake_with_core/sops/secrets/key/secret clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:111::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 1 clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:111::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-cs0d8rqp/test_flake_with_core \ clan-pytest-with-core> commit \ clan-pytest-with-core> -m 'secrets: add machine machine1' \ clan-pytest-with-core> --no-verify /build/pytest-cs0d8rqp/test_flake_with_core/sops/machines/machine1 \ clan-pytest-with-core> /build/pytest-cs0d8rqp/test_flake_with_core/sops/secrets/key/secret clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:131::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:131::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Committed 2 files to git: sops/machines/machine1, sops/secrets/key/secret clan-pytest-with-core> [localhost] $ clan secrets machines remove-secret --flake /build/pytest-cs0d8rqp/test_flake_with_core machine1 key clan-pytest-with-core> Caller: /build/src/clan_cli/tests/test_secrets_cli.py:805::test_secrets clan-pytest-with-core> clan-pytest-with-core> Prefetching flake /build/pytest-cs0d8rqp/test_flake_with_core clan-pytest-with-core> warning: you don't have Internet access; disabling some network-dependent features clan-pytest-with-core> sops \ clan-pytest-with-core> --config /build/tmpqz9pr492 \ clan-pytest-with-core> updatekeys \ clan-pytest-with-core> --yes /build/pytest-cs0d8rqp/test_flake_with_core/sops/secrets/key/secret clan-pytest-with-core> Caller: /build/src/clan_cli/secrets/sops.py:320::sops_run clan-pytest-with-core> clan-pytest-with-core> clan-pytest-with-core> [gw4] [ 34%] PASSED clan_cli/tests/test_vars_cache.py::test_cache_misses_for_vars_operations clan-pytest-with-core> clan_cli/tests/test_vars_cache.py::test_dynamic_invalidation 2026/10/07 11:53:36 Syncing keys for file /build/pytest-cs0d8rqp/test_flake_with_core/sops/secrets/key/secret clan-pytest-with-core> The following changes will be made to the file's groups: clan-pytest-with-core> Group 1 clan-pytest-with-core> age1fqnw03s4cvzu9n6ez4uhtwxcsa4e5h4fjgg0u0zda05d9wrfx9aq4p840e clan-pytest-with-core> --- age1dhwqzkah943xzc34tc3dlmfayyevcmdmxzjezdgdy33euxwf59vsp3vk3c clan-pytest-with-core> 2026/10/07 11:53:36 File /build/pytest-cs0d8rqp/test_flake_with_core/sops/secrets/key/secret synced with new keys clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_cli/secrets/sops.py:320::sops_run clan-pytest-with-core> clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-cs0d8rqp/test_flake_with_core \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-cs0d8rqp/test_flake_with_core/sops/secrets/key/machines/machine1 clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:89::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> warning: could not open directory 'sops/secrets/key/machines/': No such file or directory clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:89::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Adding sops/secrets/key/machines/machine1 to git clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-cs0d8rqp/test_flake_with_core \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-cs0d8rqp/test_flake_with_core/sops/secrets/key/secret clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:89::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:89::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Adding sops/secrets/key/secret to git clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-cs0d8rqp/test_flake_with_core \ clan-pytest-with-core> diff \ clan-pytest-with-core> --cached --exit-code \ clan-pytest-with-core> -- /build/pytest-cs0d8rqp/test_flake_with_core/sops/secrets/key/machines/machine1 \ clan-pytest-with-core> /build/pytest-cs0d8rqp/test_flake_with_core/sops/secrets/key/secret clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:111::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 1 clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:111::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-cs0d8rqp/test_flake_with_core \ clan-pytest-with-core> commit \ clan-pytest-with-core> -m 'vars: remove machine1 from secret key' \ clan-pytest-with-core> --no-verify /build/pytest-cs0d8rqp/test_flake_with_core/sops/secrets/key/machines/machine1 \ clan-pytest-with-core> /build/pytest-cs0d8rqp/test_flake_with_core/sops/secrets/key/secret clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:131::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:131::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Committed 2 files to git: sops/secrets/key/machines/machine1, sops/secrets/key/secret clan-pytest-with-core> [localhost] $ clan secrets users add --flake /build/pytest-cs0d8rqp/test_flake_with_core user1 age14tva0txcrl0zes05x7gkx56qd6wd9q3nwecjac74xxzz4l47r44sv3fz62 clan-pytest-with-core> Caller: /build/src/clan_cli/tests/test_secrets_cli.py:817::test_secrets clan-pytest-with-core> clan-pytest-with-core> Prefetching flake /build/pytest-cs0d8rqp/test_flake_with_core clan-pytest-with-core> warning: you don't have Internet access; disabling some network-dependent features clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-cs0d8rqp/test_flake_with_core \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-cs0d8rqp/test_flake_with_core/sops/users/user1 clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:89::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:89::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Adding sops/users/user1 to git clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-cs0d8rqp/test_flake_with_core \ clan-pytest-with-core> diff \ clan-pytest-with-core> --cached --exit-code \ clan-pytest-with-core> -- /build/pytest-cs0d8rqp/test_flake_with_core/sops/users/user1 clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:111::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 1 clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:111::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-cs0d8rqp/test_flake_with_core \ clan-pytest-with-core> commit \ clan-pytest-with-core> -m 'secrets: add user user1' \ clan-pytest-with-core> --no-verify /build/pytest-cs0d8rqp/test_flake_with_core/sops/users/user1 clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:131::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:131::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Committed sops/users/user1 to git clan-pytest-with-core> [localhost] $ clan secrets users add-secret --flake /build/pytest-cs0d8rqp/test_flake_with_core user1 key clan-pytest-with-core> Caller: /build/src/clan_cli/tests/test_secrets_cli.py:828::test_secrets clan-pytest-with-core> clan-pytest-with-core> Prefetching flake /build/pytest-cs0d8rqp/test_flake_with_core clan-pytest-with-core> clan-pytest-with-core> [gw2] [ 34%] PASSED clan_cli/tests/test_vars_errors.py::test_generator_script_missing_output_file clan-pytest-with-core> clan_cli/tests/test_vars_errors.py::test_generator_script_fails_with_nonzero_exit clan-pytest-with-core> [gw10] [ 34%] PASSED clan_cli/tests/test_vars_errors.py::test_shared_vars_must_never_depend_on_machine_specific_vars warning: you don't have Internet access; disabling some network-dependent features clan-pytest-with-core> clan-pytest-with-core> clan_cli/tests/test_vars_errors.py::test_fails_when_files_are_left_from_other_backend sops \ clan-pytest-with-core> --config /build/tmp77i5rrnh \ clan-pytest-with-core> updatekeys \ clan-pytest-with-core> --yes /build/pytest-cs0d8rqp/test_flake_with_core/sops/secrets/key/secret clan-pytest-with-core> Caller: /build/src/clan_cli/secrets/sops.py:320::sops_run clan-pytest-with-core> clan-pytest-with-core> 2026/10/07 11:53:36 Syncing keys for file /build/pytest-cs0d8rqp/test_flake_with_core/sops/secrets/key/secret clan-pytest-with-core> The following changes will be made to the file's groups: clan-pytest-with-core> Group 1 clan-pytest-with-core> age1fqnw03s4cvzu9n6ez4uhtwxcsa4e5h4fjgg0u0zda05d9wrfx9aq4p840e clan-pytest-with-core> +++ age14tva0txcrl0zes05x7gkx56qd6wd9q3nwecjac74xxzz4l47r44sv3fz62 clan-pytest-with-core> 2026/10/07 11:53:36 File /build/pytest-cs0d8rqp/test_flake_with_core/sops/secrets/key/secret synced with new keys clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_cli/secrets/sops.py:320::sops_run clan-pytest-with-core> clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-cs0d8rqp/test_flake_with_core \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-cs0d8rqp/test_flake_with_core/sops/secrets/key/users/user1 clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:89::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:89::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Adding sops/secrets/key/users/user1 to git clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-cs0d8rqp/test_flake_with_core \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-cs0d8rqp/test_flake_with_core/sops/secrets/key/secret clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:89::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:89::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Adding sops/secrets/key/secret to git clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-cs0d8rqp/test_flake_with_core \ clan-pytest-with-core> diff \ clan-pytest-with-core> --cached --exit-code \ clan-pytest-with-core> -- /build/pytest-cs0d8rqp/test_flake_with_core/sops/secrets/key/users/user1 \ clan-pytest-with-core> /build/pytest-cs0d8rqp/test_flake_with_core/sops/secrets/key/secret clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:111::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 1 clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:111::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-cs0d8rqp/test_flake_with_core \ clan-pytest-with-core> commit \ clan-pytest-with-core> -m 'secrets: add user user1 to key' \ clan-pytest-with-core> --no-verify /build/pytest-cs0d8rqp/test_flake_with_core/sops/secrets/key/users/user1 \ clan-pytest-with-core> /build/pytest-cs0d8rqp/test_flake_with_core/sops/secrets/key/secret clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:131::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:131::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Committed 2 files to git: sops/secrets/key/users/user1, sops/secrets/key/secret clan-pytest-with-core> [localhost] $ clan secrets users remove-secret --flake /build/pytest-cs0d8rqp/test_flake_with_core user1 key clan-pytest-with-core> Caller: /build/src/clan_cli/tests/test_secrets_cli.py:842::test_secrets clan-pytest-with-core> clan-pytest-with-core> Prefetching flake /build/pytest-cs0d8rqp/test_flake_with_core clan-pytest-with-core> warning: you don't have Internet access; disabling some network-dependent features clan-pytest-with-core> sops \ clan-pytest-with-core> --config /build/tmpw2rnkmz1 \ clan-pytest-with-core> updatekeys \ clan-pytest-with-core> --yes /build/pytest-cs0d8rqp/test_flake_with_core/sops/secrets/key/secret clan-pytest-with-core> Caller: /build/src/clan_cli/secrets/sops.py:320::sops_run clan-pytest-with-core> clan-pytest-with-core> The following changes will be made to the file's groups: clan-pytest-with-core> Group 1 clan-pytest-with-core> age1fqnw03s4cvzu9n6ez4uhtwxcsa4e5h4fjgg0u0zda05d9wrfx9aq4p840e clan-pytest-with-core> --- age14tva0txcrl0zes05x7gkx56qd6wd9q3nwecjac74xxzz4l47r44sv3fz62 clan-pytest-with-core> 2026/10/07 11:53:36 Syncing keys for file /build/pytest-cs0d8rqp/test_flake_with_core/sops/secrets/key/secret clan-pytest-with-core> 2026/10/07 11:53:36 File /build/pytest-cs0d8rqp/test_flake_with_core/sops/secrets/key/secret synced with new keys clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_cli/secrets/sops.py:320::sops_run clan-pytest-with-core> clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-cs0d8rqp/test_flake_with_core \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-cs0d8rqp/test_flake_with_core/sops/secrets/key/users/user1 clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:89::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:89::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Adding sops/secrets/key/users/user1 to git clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-cs0d8rqp/test_flake_with_core \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-cs0d8rqp/test_flake_with_core/sops/secrets/key/secret clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:89::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:89::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Adding sops/secrets/key/secret to git clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-cs0d8rqp/test_flake_with_core \ clan-pytest-with-core> diff \ clan-pytest-with-core> --cached --exit-code \ clan-pytest-with-core> -- /build/pytest-cs0d8rqp/test_flake_with_core/sops/secrets/key/users/user1 \ clan-pytest-with-core> /build/pytest-cs0d8rqp/test_flake_with_core/sops/secrets/key/secret clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:111::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 1 clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:111::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-cs0d8rqp/test_flake_with_core \ clan-pytest-with-core> commit \ clan-pytest-with-core> -m 'secrets: remove user user1 from key' \ clan-pytest-with-core> --no-verify /build/pytest-cs0d8rqp/test_flake_with_core/sops/secrets/key/users/user1 \ clan-pytest-with-core> /build/pytest-cs0d8rqp/test_flake_with_core/sops/secrets/key/secret clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:131::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:131::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Committed 2 files to git: sops/secrets/key/users/user1, sops/secrets/key/secret clan-pytest-with-core> [localhost] $ clan secrets groups add-secret --flake /build/pytest-cs0d8rqp/test_flake_with_core admin-group key clan-pytest-with-core> Caller: /build/src/clan_cli/tests/test_secrets_cli.py:855::test_secrets clan-pytest-with-core> clan-pytest-with-core> Prefetching flake /build/pytest-cs0d8rqp/test_flake_with_core clan-pytest-with-core> warning: you don't have Internet access; disabling some network-dependent features clan-pytest-with-core> [localhost] $ clan secrets groups add-user --flake /build/pytest-cs0d8rqp/test_flake_with_core admin-group user1 clan-pytest-with-core> Caller: /build/src/clan_cli/tests/test_secrets_cli.py:866::test_secrets clan-pytest-with-core> clan-pytest-with-core> Prefetching flake /build/pytest-cs0d8rqp/test_flake_with_core clan-pytest-with-core> warning: you don't have Internet access; disabling some network-dependent features clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-cs0d8rqp/test_flake_with_core \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-cs0d8rqp/test_flake_with_core/sops/groups/admin-group/users/user1 clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:89::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:89::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Adding sops/groups/admin-group/users/user1 to git clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-cs0d8rqp/test_flake_with_core \ clan-pytest-with-core> diff \ clan-pytest-with-core> --cached --exit-code \ clan-pytest-with-core> -- /build/pytest-cs0d8rqp/test_flake_with_core/sops/groups/admin-group/users/user1 clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:111::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 1 clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:111::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-cs0d8rqp/test_flake_with_core \ clan-pytest-with-core> commit \ clan-pytest-with-core> -m 'secrets: add user user1 to group admin-group' \ clan-pytest-with-core> --no-verify /build/pytest-cs0d8rqp/test_flake_with_core/sops/groups/admin-group/users/user1 clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:131::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:131::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Committed sops/groups/admin-group/users/user1 to git clan-pytest-with-core> [localhost] $ clan secrets groups add-user --flake /build/pytest-cs0d8rqp/test_flake_with_core admin-group testuser clan-pytest-with-core> Caller: /build/src/clan_cli/tests/test_secrets_cli.py:877::test_secrets clan-pytest-with-core> clan-pytest-with-core> Prefetching flake /build/pytest-cs0d8rqp/test_flake_with_core clan-pytest-with-core> warning: you don't have Internet access; disabling some network-dependent features clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-cs0d8rqp/test_flake_with_core \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-cs0d8rqp/test_flake_with_core/sops/groups/admin-group/users/testuser clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:89::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:89::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Adding sops/groups/admin-group/users/testuser to git clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-cs0d8rqp/test_flake_with_core \ clan-pytest-with-core> diff \ clan-pytest-with-core> --cached --exit-code \ clan-pytest-with-core> -- /build/pytest-cs0d8rqp/test_flake_with_core/sops/groups/admin-group/users/testuser clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:111::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 1 clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:111::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-cs0d8rqp/test_flake_with_core \ clan-pytest-with-core> commit \ clan-pytest-with-core> -m 'secrets: add user testuser to group admin-group' \ clan-pytest-with-core> --no-verify /build/pytest-cs0d8rqp/test_flake_with_core/sops/groups/admin-group/users/testuser clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:131::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:131::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Committed sops/groups/admin-group/users/testuser to git clan-pytest-with-core> [localhost] $ clan secrets groups add-secret --flake /build/pytest-cs0d8rqp/test_flake_with_core admin-group key clan-pytest-with-core> Caller: /build/src/clan_cli/tests/test_secrets_cli.py:888::test_secrets clan-pytest-with-core> clan-pytest-with-core> Prefetching flake /build/pytest-cs0d8rqp/test_flake_with_core clan-pytest-with-core> warning: you don't have Internet access; disabling some network-dependent features clan-pytest-with-core> sops \ clan-pytest-with-core> --config /build/tmprfhc6382 \ clan-pytest-with-core> updatekeys \ clan-pytest-with-core> --yes /build/pytest-cs0d8rqp/test_flake_with_core/sops/secrets/key/secret clan-pytest-with-core> Caller: /build/src/clan_cli/secrets/sops.py:320::sops_run clan-pytest-with-core> clan-pytest-with-core> 2026/10/07 11:53:36 Syncing keys for file /build/pytest-cs0d8rqp/test_flake_with_core/sops/secrets/key/secret clan-pytest-with-core> The following changes will be made to the file's groups: clan-pytest-with-core> Group 1 clan-pytest-with-core> age1fqnw03s4cvzu9n6ez4uhtwxcsa4e5h4fjgg0u0zda05d9wrfx9aq4p840e clan-pytest-with-core> +++ age14tva0txcrl0zes05x7gkx56qd6wd9q3nwecjac74xxzz4l47r44sv3fz62 clan-pytest-with-core> 2026/10/07 11:53:36 File /build/pytest-cs0d8rqp/test_flake_with_core/sops/secrets/key/secret synced with new keys clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_cli/secrets/sops.py:320::sops_run clan-pytest-with-core> clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-cs0d8rqp/test_flake_with_core \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-cs0d8rqp/test_flake_with_core/sops/secrets/key/groups/admin-group clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:89::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:89::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Adding sops/secrets/key/groups/admin-group to git clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-cs0d8rqp/test_flake_with_core \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-cs0d8rqp/test_flake_with_core/sops/secrets/key/secret clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:89::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:89::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Adding sops/secrets/key/secret to git clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-cs0d8rqp/test_flake_with_core \ clan-pytest-with-core> diff \ clan-pytest-with-core> --cached --exit-code \ clan-pytest-with-core> -- /build/pytest-cs0d8rqp/test_flake_with_core/sops/secrets/key/groups/admin-group \ clan-pytest-with-core> /build/pytest-cs0d8rqp/test_flake_with_core/sops/secrets/key/secret clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:111::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> clan-pytest-with-core> [gw7] [ 35%] PASSED clan_cli/tests/test_vars_generate.py::test_generate_secret_var_sops_with_default_group Command exited with return code 1 clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:111::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-cs0d8rqp/test_flake_with_core \ clan-pytest-with-core> commit \ clan-pytest-with-core> -m 'secrets: add group admin-group to secret key' \ clan-pytest-with-core> --no-verify /build/pytest-cs0d8rqp/test_flake_with_core/sops/secrets/key/groups/admin-group \ clan-pytest-with-core> /build/pytest-cs0d8rqp/test_flake_with_core/sops/secrets/key/secret clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:131::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:131::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Committed 2 files to git: sops/secrets/key/groups/admin-group, sops/secrets/key/secret clan-pytest-with-core> clan-pytest-with-core> clan_cli/tests/test_vars_generate.py::test_generate_shared_secret_sops [localhost] $ clan secrets set --flake /build/pytest-cs0d8rqp/test_flake_with_core --group admin-group key2 clan-pytest-with-core> Caller: /build/src/clan_cli/tests/test_secrets_cli.py:900::test_secrets clan-pytest-with-core> clan-pytest-with-core> Prefetching flake /build/pytest-cs0d8rqp/test_flake_with_core clan-pytest-with-core> warning: you don't have Internet access; disabling some network-dependent features clan-pytest-with-core> echo '<>' | age-keygen \ clan-pytest-with-core> -y clan-pytest-with-core> Caller: /build/src/clan_cli/secrets/sops.py:372::get_public_age_key_from_private_key clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_cli/secrets/sops.py:372::get_public_age_key_from_private_key clan-pytest-with-core> clan-pytest-with-core> Found age public key from a private key in /build/pytest-cs0d8rqp/test_flake_with_core/../age.key: age1fqnw03s4cvzu9n6ez4uhtwxcsa4e5h4fjgg0u0zda05d9wrfx9aq4p840e clan-pytest-with-core> sops \ clan-pytest-with-core> --config /build/tmp20g8l_x0 \ clan-pytest-with-core> encrypt \ clan-pytest-with-core> --in-place /dev/shm/tmp2_hbv5ml clan-pytest-with-core> Caller: /build/src/clan_cli/secrets/sops.py:320::sops_run clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_cli/secrets/sops.py:320::sops_run clan-pytest-with-core> clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-cs0d8rqp/test_flake_with_core \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-cs0d8rqp/test_flake_with_core/sops/secrets/key2/groups/admin-group clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:89::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:89::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Adding sops/secrets/key2/groups/admin-group to git clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-cs0d8rqp/test_flake_with_core \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-cs0d8rqp/test_flake_with_core/sops/secrets/key2/secret clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:89::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:89::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Adding sops/secrets/key2/secret to git clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-cs0d8rqp/test_flake_with_core \ clan-pytest-with-core> diff \ clan-pytest-with-core> --cached --exit-code \ clan-pytest-with-core> -- /build/pytest-cs0d8rqp/test_flake_with_core/sops/secrets/key2/groups/admin-group \ clan-pytest-with-core> /build/pytest-cs0d8rqp/test_flake_with_core/sops/secrets/key2/secret clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:111::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 1 clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:111::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-cs0d8rqp/test_flake_with_core \ clan-pytest-with-core> commit \ clan-pytest-with-core> -m 'secrets: update key2' \ clan-pytest-with-core> --no-verify /build/pytest-cs0d8rqp/test_flake_with_core/sops/secrets/key2/groups/admin-group \ clan-pytest-with-core> /build/pytest-cs0d8rqp/test_flake_with_core/sops/secrets/key2/secret clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:131::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:131::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Committed 2 files to git: sops/secrets/key2/groups/admin-group, sops/secrets/key2/secret clan-pytest-with-core> [localhost] $ clan secrets users add --flake /build/pytest-cs0d8rqp/test_flake_with_core --pgp-key 9A9B2741C8062D3D3DF1302D8B049E262A5CA255 user2 clan-pytest-with-core> Caller: /build/src/clan_cli/tests/test_secrets_cli.py:926::test_secrets clan-pytest-with-core> clan-pytest-with-core> Prefetching flake /build/pytest-cs0d8rqp/test_flake_with_core clan-pytest-with-core> warning: you don't have Internet access; disabling some network-dependent features clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-cs0d8rqp/test_flake_with_core \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-cs0d8rqp/test_flake_with_core/sops/users/user2 clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:89::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:89::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Adding sops/users/user2 to git clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-cs0d8rqp/test_flake_with_core \ clan-pytest-with-core> diff \ clan-pytest-with-core> --cached --exit-code \ clan-pytest-with-core> -- /build/pytest-cs0d8rqp/test_flake_with_core/sops/users/user2 clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:111::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 1 clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:111::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-cs0d8rqp/test_flake_with_core \ clan-pytest-with-core> commit \ clan-pytest-with-core> -m 'secrets: add user user2' \ clan-pytest-with-core> --no-verify /build/pytest-cs0d8rqp/test_flake_with_core/sops/users/user2 clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:131::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:131::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Committed sops/users/user2 to git clan-pytest-with-core> [localhost] $ clan secrets groups add-user --flake /build/pytest-cs0d8rqp/test_flake_with_core admin-group user2 clan-pytest-with-core> Caller: /build/src/clan_cli/tests/test_secrets_cli.py:940::test_secrets clan-pytest-with-core> clan-pytest-with-core> Prefetching flake /build/pytest-cs0d8rqp/test_flake_with_core clan-pytest-with-core> warning: you don't have Internet access; disabling some network-dependent features clan-pytest-with-core> sops \ clan-pytest-with-core> --config /build/tmp1pqo2hg7 \ clan-pytest-with-core> updatekeys \ clan-pytest-with-core> --yes /build/pytest-cs0d8rqp/test_flake_with_core/sops/secrets/key/secret clan-pytest-with-core> Caller: /build/src/clan_cli/secrets/sops.py:320::sops_run clan-pytest-with-core> clan-pytest-with-core> 2026/10/07 11:53:37 Syncing keys for file /build/pytest-cs0d8rqp/test_flake_with_core/sops/secrets/key/secret clan-pytest-with-core> The following changes will be made to the file's groups: clan-pytest-with-core> Group 1 clan-pytest-with-core> age1fqnw03s4cvzu9n6ez4uhtwxcsa4e5h4fjgg0u0zda05d9wrfx9aq4p840e clan-pytest-with-core> age14tva0txcrl0zes05x7gkx56qd6wd9q3nwecjac74xxzz4l47r44sv3fz62 clan-pytest-with-core> +++ 9A9B2741C8062D3D3DF1302D8B049E262A5CA255 clan-pytest-with-core> 2026/10/07 11:53:37 File /build/pytest-cs0d8rqp/test_flake_with_core/sops/secrets/key/secret synced with new keys clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_cli/secrets/sops.py:320::sops_run clan-pytest-with-core> clan-pytest-with-core> sops \ clan-pytest-with-core> --config /build/tmp6tkxtctz \ clan-pytest-with-core> updatekeys \ clan-pytest-with-core> --yes /build/pytest-cs0d8rqp/test_flake_with_core/sops/secrets/key2/secret clan-pytest-with-core> Caller: /build/src/clan_cli/secrets/sops.py:320::sops_run clan-pytest-with-core> clan-pytest-with-core> 2026/10/07 11:53:37 Syncing keys for file /build/pytest-cs0d8rqp/test_flake_with_core/sops/secrets/key2/secret clan-pytest-with-core> The following changes will be made to the file's groups: clan-pytest-with-core> Group 1 clan-pytest-with-core> age1fqnw03s4cvzu9n6ez4uhtwxcsa4e5h4fjgg0u0zda05d9wrfx9aq4p840e clan-pytest-with-core> age14tva0txcrl0zes05x7gkx56qd6wd9q3nwecjac74xxzz4l47r44sv3fz62 clan-pytest-with-core> +++ 9A9B2741C8062D3D3DF1302D8B049E262A5CA255 clan-pytest-with-core> 2026/10/07 11:53:37 File /build/pytest-cs0d8rqp/test_flake_with_core/sops/secrets/key2/secret synced with new keys clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_cli/secrets/sops.py:320::sops_run clan-pytest-with-core> clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-cs0d8rqp/test_flake_with_core \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-cs0d8rqp/test_flake_with_core/sops/groups/admin-group/users/user2 clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:89::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:89::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Adding sops/groups/admin-group/users/user2 to git clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-cs0d8rqp/test_flake_with_core \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-cs0d8rqp/test_flake_with_core/sops/secrets/key/secret clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:89::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:89::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Adding sops/secrets/key/secret to git clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-cs0d8rqp/test_flake_with_core \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-cs0d8rqp/test_flake_with_core/sops/secrets/key2/secret clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:89::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:89::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Adding sops/secrets/key2/secret to git clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-cs0d8rqp/test_flake_with_core \ clan-pytest-with-core> diff \ clan-pytest-with-core> --cached --exit-code \ clan-pytest-with-core> -- /build/pytest-cs0d8rqp/test_flake_with_core/sops/groups/admin-group/users/user2 \ clan-pytest-with-core> /build/pytest-cs0d8rqp/test_flake_with_core/sops/secrets/key/secret \ clan-pytest-with-core> /build/pytest-cs0d8rqp/test_flake_with_core/sops/secrets/key2/secret clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:111::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 1 clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:111::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-cs0d8rqp/test_flake_with_core \ clan-pytest-with-core> commit \ clan-pytest-with-core> -m 'secrets: add user user2 to group admin-group' \ clan-pytest-with-core> --no-verify /build/pytest-cs0d8rqp/test_flake_with_core/sops/groups/admin-group/users/user2 \ clan-pytest-with-core> /build/pytest-cs0d8rqp/test_flake_with_core/sops/secrets/key/secret \ clan-pytest-with-core> /build/pytest-cs0d8rqp/test_flake_with_core/sops/secrets/key2/secret clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:131::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:131::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Committed 3 files to git: sops/groups/admin-group/users/user2, sops/secrets/key/secret, sops/secrets/key2/secret clan-pytest-with-core> [localhost] $ clan secrets groups remove-user --flake /build/pytest-cs0d8rqp/test_flake_with_core admin-group user2 clan-pytest-with-core> Caller: /build/src/clan_cli/tests/test_secrets_cli.py:959::test_secrets clan-pytest-with-core> clan-pytest-with-core> Prefetching flake /build/pytest-cs0d8rqp/test_flake_with_core clan-pytest-with-core> warning: you don't have Internet access; disabling some network-dependent features clan-pytest-with-core> sops \ clan-pytest-with-core> --config /build/tmp8w20sc67 \ clan-pytest-with-core> updatekeys \ clan-pytest-with-core> --yes /build/pytest-cs0d8rqp/test_flake_with_core/sops/secrets/key/secret clan-pytest-with-core> Caller: /build/src/clan_cli/secrets/sops.py:320::sops_run clan-pytest-with-core> clan-pytest-with-core> 2026/10/07 11:53:37 Syncing keys for file /build/pytest-cs0d8rqp/test_flake_with_core/sops/secrets/key/secret clan-pytest-with-core> The following changes will be made to the file's groups: clan-pytest-with-core> Group 1 clan-pytest-with-core> age1fqnw03s4cvzu9n6ez4uhtwxcsa4e5h4fjgg0u0zda05d9wrfx9aq4p840e clan-pytest-with-core> age14tva0txcrl0zes05x7gkx56qd6wd9q3nwecjac74xxzz4l47r44sv3fz62 clan-pytest-with-core> --- 9A9B2741C8062D3D3DF1302D8B049E262A5CA255 clan-pytest-with-core> 2026/10/07 11:53:37 File /build/pytest-cs0d8rqp/test_flake_with_core/sops/secrets/key/secret synced with new keys clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_cli/secrets/sops.py:320::sops_run clan-pytest-with-core> clan-pytest-with-core> sops \ clan-pytest-with-core> --config /build/tmplfpkeyys \ clan-pytest-with-core> updatekeys \ clan-pytest-with-core> --yes /build/pytest-cs0d8rqp/test_flake_with_core/sops/secrets/key2/secret clan-pytest-with-core> Caller: /build/src/clan_cli/secrets/sops.py:320::sops_run clan-pytest-with-core> clan-pytest-with-core> The following changes will be made to the file's groups: clan-pytest-with-core> Group 1 clan-pytest-with-core> age1fqnw03s4cvzu9n6ez4uhtwxcsa4e5h4fjgg0u0zda05d9wrfx9aq4p840e clan-pytest-with-core> age14tva0txcrl0zes05x7gkx56qd6wd9q3nwecjac74xxzz4l47r44sv3fz62 clan-pytest-with-core> --- 9A9B2741C8062D3D3DF1302D8B049E262A5CA255 clan-pytest-with-core> 2026/10/07 11:53:37 Syncing keys for file /build/pytest-cs0d8rqp/test_flake_with_core/sops/secrets/key2/secret clan-pytest-with-core> 2026/10/07 11:53:37 File /build/pytest-cs0d8rqp/test_flake_with_core/sops/secrets/key2/secret synced with new keys clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_cli/secrets/sops.py:320::sops_run clan-pytest-with-core> clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-cs0d8rqp/test_flake_with_core \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-cs0d8rqp/test_flake_with_core/sops/groups/admin-group/users/user2 clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:89::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:89::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Adding sops/groups/admin-group/users/user2 to git clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-cs0d8rqp/test_flake_with_core \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-cs0d8rqp/test_flake_with_core/sops/secrets/key/secret clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:89::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:89::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Adding sops/secrets/key/secret to git clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-cs0d8rqp/test_flake_with_core \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-cs0d8rqp/test_flake_with_core/sops/secrets/key2/secret clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:89::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:89::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Adding sops/secrets/key2/secret to git clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-cs0d8rqp/test_flake_with_core \ clan-pytest-with-core> diff \ clan-pytest-with-core> --cached --exit-code \ clan-pytest-with-core> -- /build/pytest-cs0d8rqp/test_flake_with_core/sops/groups/admin-group/users/user2 \ clan-pytest-with-core> /build/pytest-cs0d8rqp/test_flake_with_core/sops/secrets/key/secret \ clan-pytest-with-core> /build/pytest-cs0d8rqp/test_flake_with_core/sops/secrets/key2/secret clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:111::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 1 clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:111::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-cs0d8rqp/test_flake_with_core \ clan-pytest-with-core> commit \ clan-pytest-with-core> -m 'secrets: remove user user2 from group admin-group' \ clan-pytest-with-core> --no-verify /build/pytest-cs0d8rqp/test_flake_with_core/sops/groups/admin-group/users/user2 \ clan-pytest-with-core> /build/pytest-cs0d8rqp/test_flake_with_core/sops/secrets/key/secret \ clan-pytest-with-core> /build/pytest-cs0d8rqp/test_flake_with_core/sops/secrets/key2/secret clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:131::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:131::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Committed 3 files to git: sops/groups/admin-group/users/user2, sops/secrets/key/secret, sops/secrets/key2/secret clan-pytest-with-core> [localhost] $ clan secrets groups remove-secret --flake /build/pytest-cs0d8rqp/test_flake_with_core admin-group key clan-pytest-with-core> Caller: /build/src/clan_cli/tests/test_secrets_cli.py:979::test_secrets clan-pytest-with-core> clan-pytest-with-core> Prefetching flake /build/pytest-cs0d8rqp/test_flake_with_core clan-pytest-with-core> warning: you don't have Internet access; disabling some network-dependent features clan-pytest-with-core> sops \ clan-pytest-with-core> --config /build/tmpvssvmxej \ clan-pytest-with-core> updatekeys \ clan-pytest-with-core> --yes /build/pytest-cs0d8rqp/test_flake_with_core/sops/secrets/key/secret clan-pytest-with-core> Caller: /build/src/clan_cli/secrets/sops.py:320::sops_run clan-pytest-with-core> clan-pytest-with-core> 2026/10/07 11:53:37 Syncing keys for file /build/pytest-cs0d8rqp/test_flake_with_core/sops/secrets/key/secret clan-pytest-with-core> The following changes will be made to the file's groups: clan-pytest-with-core> Group 1 clan-pytest-with-core> age1fqnw03s4cvzu9n6ez4uhtwxcsa4e5h4fjgg0u0zda05d9wrfx9aq4p840e clan-pytest-with-core> --- age14tva0txcrl0zes05x7gkx56qd6wd9q3nwecjac74xxzz4l47r44sv3fz62 clan-pytest-with-core> 2026/10/07 11:53:37 File /build/pytest-cs0d8rqp/test_flake_with_core/sops/secrets/key/secret synced with new keys clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_cli/secrets/sops.py:320::sops_run clan-pytest-with-core> clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-cs0d8rqp/test_flake_with_core \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-cs0d8rqp/test_flake_with_core/sops/secrets/key/groups/admin-group clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:89::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> warning: could not open directory 'sops/secrets/key/groups/': No such file or directory clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:89::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Adding sops/secrets/key/groups/admin-group to git clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-cs0d8rqp/test_flake_with_core \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-cs0d8rqp/test_flake_with_core/sops/secrets/key/secret clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:89::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:89::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Adding sops/secrets/key/secret to git clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-cs0d8rqp/test_flake_with_core \ clan-pytest-with-core> diff \ clan-pytest-with-core> --cached --exit-code \ clan-pytest-with-core> -- /build/pytest-cs0d8rqp/test_flake_with_core/sops/secrets/key/groups/admin-group \ clan-pytest-with-core> /build/pytest-cs0d8rqp/test_flake_with_core/sops/secrets/key/secret clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:111::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 1 clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:111::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-cs0d8rqp/test_flake_with_core \ clan-pytest-with-core> commit \ clan-pytest-with-core> -m 'secrets: remove group admin-group from secret key' \ clan-pytest-with-core> --no-verify /build/pytest-cs0d8rqp/test_flake_with_core/sops/secrets/key/groups/admin-group \ clan-pytest-with-core> /build/pytest-cs0d8rqp/test_flake_with_core/sops/secrets/key/secret clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:131::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:131::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Committed 2 files to git: sops/secrets/key/groups/admin-group, sops/secrets/key/secret clan-pytest-with-core> [localhost] $ clan secrets remove --flake /build/pytest-cs0d8rqp/test_flake_with_core key clan-pytest-with-core> Caller: /build/src/clan_cli/tests/test_secrets_cli.py:991::test_secrets clan-pytest-with-core> clan-pytest-with-core> Prefetching flake /build/pytest-cs0d8rqp/test_flake_with_core clan-pytest-with-core> warning: you don't have Internet access; disabling some network-dependent features clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-cs0d8rqp/test_flake_with_core \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-cs0d8rqp/test_flake_with_core/sops/secrets/key clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:89::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:89::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Adding sops/secrets/key to git clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-cs0d8rqp/test_flake_with_core \ clan-pytest-with-core> diff \ clan-pytest-with-core> --cached --exit-code \ clan-pytest-with-core> -- /build/pytest-cs0d8rqp/test_flake_with_core/sops/secrets/key clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:111::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 1 clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:111::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-cs0d8rqp/test_flake_with_core \ clan-pytest-with-core> commit \ clan-pytest-with-core> -m 'secrets: remove key' \ clan-pytest-with-core> --no-verify /build/pytest-cs0d8rqp/test_flake_with_core/sops/secrets/key clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:131::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:131::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Committed sops/secrets/key to git clan-pytest-with-core> [localhost] $ clan secrets remove --flake /build/pytest-cs0d8rqp/test_flake_with_core key2 clan-pytest-with-core> Caller: /build/src/clan_cli/tests/test_secrets_cli.py:992::test_secrets clan-pytest-with-core> clan-pytest-with-core> Prefetching flake /build/pytest-cs0d8rqp/test_flake_with_core clan-pytest-with-core> warning: you don't have Internet access; disabling some network-dependent features clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-cs0d8rqp/test_flake_with_core \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-cs0d8rqp/test_flake_with_core/sops/secrets/key2 clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:89::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:89::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Adding sops/secrets/key2 to git clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-cs0d8rqp/test_flake_with_core \ clan-pytest-with-core> diff \ clan-pytest-with-core> --cached --exit-code \ clan-pytest-with-core> -- /build/pytest-cs0d8rqp/test_flake_with_core/sops/secrets/key2 clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:111::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 1 clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:111::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-cs0d8rqp/test_flake_with_core \ clan-pytest-with-core> commit \ clan-pytest-with-core> -m 'secrets: remove key2' \ clan-pytest-with-core> --no-verify /build/pytest-cs0d8rqp/test_flake_with_core/sops/secrets/key2 clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:131::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:131::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Committed sops/secrets/key2 to git clan-pytest-with-core> clan-pytest-with-core> [gw1] [ 35%] PASSED clan_cli/tests/test_vars_errors.py::test_accessing_path_before_generate_shows_helpful_error clan-pytest-with-core> clan_cli/tests/test_vars_generate.py::test_generate_public_and_secret_vars clan-pytest-with-core> [gw13] [ 36%] PASSED clan_cli/tests/test_secrets_cli.py::test_secrets clan-pytest-with-core> clan_cli/tests/test_vars_prompts.py::test_api_set_prompts clan-pytest-with-core> [gw14] [ 36%] PASSED clan_cli/tests/test_vars_prompts.py::test_prompt clan-pytest-with-core> clan_cli/tests/test_vars_prompts.py::test_prompt_prefill_on_regeneration clan-pytest-with-core> [gw15] [ 36%] PASSED clan_cli/tests/test_vars_age.py::test_generate_secret_var_age clan-pytest-with-core> clan_cli/tests/test_vars_generate.py::test_binary_secret_roundtrip clan-pytest-with-core> [gw8] [ 37%] PASSED clan_cli/tests/test_vars_generate.py::test_sops_fix_commits_all_changes clan-pytest-with-core> clan_cli/tests/test_vars_generate.py::test_groups_add_secret_commits_changes clan-pytest-with-core> [gw9] [ 37%] PASSED clan_cli/completions_test.py::test_complete_machines_without_flake clan-pytest-with-core> clan_cli/completions_test.py::test_complete_machines_with_created_machine clan-pytest-with-core> [gw3] [ 38%] PASSED clan_cli/tests/test_vars_generate.py::test_generate_secret_for_multiple_machines clan-pytest-with-core> clan_cli/tests/test_vars_generate.py::test_stdout_of_generate clan-pytest-with-core> [gw2] [ 38%] PASSED clan_cli/tests/test_vars_errors.py::test_generator_script_fails_with_nonzero_exit clan-pytest-with-core> clan_cli/tests/test_vars_shared.py::test_multi_machine_shared_vars clan-pytest-with-core> [gw9] [ 39%] PASSED clan_cli/completions_test.py::test_complete_machines_with_created_machine clan-pytest-with-core> clan_cli/tests/test_inventory_serde.py::test_inventory_deserialize_variants[test_flake_with_core0] clan-pytest-with-core> [gw8] [ 39%] PASSED clan_cli/tests/test_vars_generate.py::test_groups_add_secret_commits_changes clan-pytest-with-core> clan_cli/tests/test_vars_generate.py::test_sops_fix_skips_add_for_no_deploy_per_machine_secret clan-pytest-with-core> [gw6] [ 39%] PASSED clan_cli/tests/test_vars_generate.py::test_flake_level_generators clan-pytest-with-core> clan_cli/tests/test_vars_generate.py::test_exports_without_generators_evaluates clan-pytest-with-core> [gw9] [ 40%] PASSED clan_cli/tests/test_inventory_serde.py::test_inventory_deserialize_variants[test_flake_with_core0] clan-pytest-with-core> clan_cli/tests/test_vars_shared.py::test_age_set_shared_var_for_multiple_machines clan-pytest-with-core> [gw15] [ 40%] PASSED clan_cli/tests/test_vars_generate.py::test_binary_secret_roundtrip clan-pytest-with-core> clan_cli/tests/test_vars_generate_inventory_checks.py::test_vars_generate_blocked_by_check_errors clan-pytest-with-core> [gw6] [ 41%] PASSED clan_cli/tests/test_vars_generate.py::test_exports_without_generators_evaluates clan-pytest-with-core> clan_cli/tests/test_vars_shared.py::test_export_sops_import_age clan-pytest-with-core> [gw15] [ 41%] PASSED clan_cli/tests/test_vars_generate_inventory_checks.py::test_vars_generate_blocked_by_check_errors clan-pytest-with-core> clan_cli/tests/test_vars_shared.py::test_import_survives_generate clan-pytest-with-core> [gw11] [ 41%] PASSED clan_cli/tests/test_vars_prompts.py::test_persisted_prompt_reused_not_reasked clan-pytest-with-core> clan_cli/tests/test_vars_shared.py::test_shared_vars_regeneration clan-pytest-with-core> [gw5] [ 42%] PASSED clan_cli/tests/test_vars_cache.py::test_invalidation clan-pytest-with-core> clan_cli/tests/test_vars_cache.py::test_generate_secret_var_password_store_minimal_select_calls clan-pytest-with-core> [gw0] [ 42%] PASSED clan_cli/generate_test_vars/test_generate_test_vars.py::test_generate_test_vars clan-pytest-with-core> clan_cli/tests/test_vars_age.py::test_age_get_shared_finds_any_machine_key clan-pytest-with-core> [gw0] [ 43%] PASSED clan_cli/tests/test_vars_age.py::test_age_get_shared_finds_any_machine_key clan-pytest-with-core> clan_cli/tests/test_vars_age.py::test_age_populate_dir clan-pytest-with-core> [gw13] [ 43%] PASSED clan_cli/tests/test_vars_prompts.py::test_api_set_prompts clan-pytest-with-core> clan_cli/tests/test_vars_prompts.py::test_get_generator_prompt_previous_values clan-pytest-with-core> [gw0] [ 43%] PASSED clan_cli/tests/test_vars_age.py::test_age_populate_dir clan-pytest-with-core> clan_cli/tests/test_vars_age.py::test_age_fix_shared_reencrypt clan-pytest-with-core> [gw7] [ 44%] PASSED clan_cli/tests/test_vars_generate.py::test_generate_shared_secret_sops clan-pytest-with-core> clan_cli/tests/test_vars_generate.py::test_generate_secret_var_password_store clan-pytest-with-core> [gw0] [ 44%] PASSED clan_cli/tests/test_vars_age.py::test_age_fix_shared_reencrypt clan-pytest-with-core> clan_cli/tests/test_vars_age.py::test_age_incremental_generate_shared_secret clan-pytest-with-core> [gw8] [ 45%] PASSED clan_cli/tests/test_vars_generate.py::test_sops_fix_skips_add_for_no_deploy_per_machine_secret clan-pytest-with-core> clan_cli/tests/test_vars_shared.py::test_password_store_set_shared_var_for_multiple_machines clan-pytest-with-core> [gw4] [ 45%] PASSED clan_cli/tests/test_vars_cache.py::test_dynamic_invalidation clan-pytest-with-core> clan_cli/tests/test_vars_cache.py::test_get_generators_only_decrypts_requested_machines clan-pytest-with-core> [gw2] [ 46%] PASSED clan_cli/tests/test_vars_shared.py::test_multi_machine_shared_vars clan-pytest-with-core> clan_cli/tests/test_vars_shared.py::test_add_machine_to_existing_shared_secret clan-pytest-with-core> [gw12] [ 46%] PASSED clan_cli/tests/test_machines_cli.py::test_machine_delete clan-pytest-with-core> clan_cli/tests/test_secrets_cli.py::test_users clan-pytest-with-core> [gw5] [ 46%] PASSED clan_cli/tests/test_vars_cache.py::test_generate_secret_var_password_store_minimal_select_calls clan-pytest-with-core> clan_cli/tests/test_vars_cache.py::test_generate_secret_var_sops_minimal_select_calls clan-pytest-with-core> [gw10] [ 47%] PASSED clan_cli/tests/test_vars_errors.py::test_fails_when_files_are_left_from_other_backend clan-pytest-with-core> clan_cli/tests/test_vars_shared.py::test_share_mode_switch_regenerates_secret clan-pytest-with-core> [gw13] [ 47%] PASSED clan_cli/tests/test_vars_prompts.py::test_get_generator_prompt_previous_values clan-pytest-with-core> clan_cli/tests/test_create_flake.py::test_create_flake_existing_git [localhost] $ clan secrets users remove --flake /build/pytest-kdz8qliv/test_flake_with_core foo clan-pytest-with-core> Caller: /build/src/clan_cli/tests/test_secrets_cli.py:142::_test_identities clan-pytest-with-core> clan-pytest-with-core> Prefetching flake /build/pytest-kdz8qliv/test_flake_with_core clan-pytest-with-core> warning: you don't have Internet access; disabling some network-dependent features clan-pytest-with-core> clan-pytest-with-core> [gw9] [ 48%] PASSED clan_cli/tests/test_vars_shared.py::test_age_set_shared_var_for_multiple_machines Loading flake cache from file /build/clan-flake-cache/flakes-v2/da0c259ad1b95a957b6760f788e0f008eaa4615d clan-pytest-with-core> (cached) $ clan select clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> Cache miss for clanInternals.?secrets.?age.?plugins clan-pytest-with-core> clan-pytest-with-core> clan_cli/tests/test_vars_shared.py::test_age_fix_keeps_all_recipients_on_shared_deployed_secret Loading flake cache from file /build/clan-flake-cache/flakes-v2/da0c259ad1b95a957b6760f788e0f008eaa4615d clan-pytest-with-core> sops \ clan-pytest-with-core> --config /build/tmpikfil9k7 \ clan-pytest-with-core> updatekeys \ clan-pytest-with-core> --yes /build/pytest-kdz8qliv/test_flake_with_core/sops/secrets/user_secret/secret clan-pytest-with-core> Caller: /build/src/clan_cli/secrets/sops.py:320::sops_run clan-pytest-with-core> clan-pytest-with-core> 2026/10/07 11:53:45 Syncing keys for file /build/pytest-kdz8qliv/test_flake_with_core/sops/secrets/user_secret/secret clan-pytest-with-core> The following changes will be made to the file's groups: clan-pytest-with-core> Group 1 clan-pytest-with-core> age1dhuh9xtefhgpr2sjjf7gmp9q2pr37z92rv4wsadxuqdx48989g7qj552qp clan-pytest-with-core> --- age14tva0txcrl0zes05x7gkx56qd6wd9q3nwecjac74xxzz4l47r44sv3fz62 clan-pytest-with-core> 2026/10/07 11:53:45 File /build/pytest-kdz8qliv/test_flake_with_core/sops/secrets/user_secret/secret synced with new keys clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_cli/secrets/sops.py:320::sops_run clan-pytest-with-core> clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-kdz8qliv/test_flake_with_core \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-kdz8qliv/test_flake_with_core/sops/users/foo clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:89::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:89::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Adding sops/users/foo to git clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-kdz8qliv/test_flake_with_core \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-kdz8qliv/test_flake_with_core/sops/secrets/user_secret/users/foo clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:89::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:89::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Adding sops/secrets/user_secret/users/foo to git clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-kdz8qliv/test_flake_with_core \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-kdz8qliv/test_flake_with_core/sops/secrets/user_secret/secret clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:89::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:89::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Adding sops/secrets/user_secret/secret to git clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-kdz8qliv/test_flake_with_core \ clan-pytest-with-core> diff \ clan-pytest-with-core> --cached --exit-code \ clan-pytest-with-core> -- /build/pytest-kdz8qliv/test_flake_with_core/sops/users/foo \ clan-pytest-with-core> /build/pytest-kdz8qliv/test_flake_with_core/sops/secrets/user_secret/users/foo \ clan-pytest-with-core> /build/pytest-kdz8qliv/test_flake_with_core/sops/secrets/user_secret/secret clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:111::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 1 clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:111::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-kdz8qliv/test_flake_with_core \ clan-pytest-with-core> commit \ clan-pytest-with-core> -m 'secrets: remove user foo' \ clan-pytest-with-core> --no-verify /build/pytest-kdz8qliv/test_flake_with_core/sops/users/foo \ clan-pytest-with-core> /build/pytest-kdz8qliv/test_flake_with_core/sops/secrets/user_secret/users/foo \ clan-pytest-with-core> /build/pytest-kdz8qliv/test_flake_with_core/sops/secrets/user_secret/secret clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:131::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:131::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Committed 3 files to git: sops/users/foo, sops/secrets/user_secret/users/foo, sops/secrets/user_secret/secret clan-pytest-with-core> [localhost] $ clan secrets users remove --flake /build/pytest-kdz8qliv/test_flake_with_core foo clan-pytest-with-core> Caller: /build/src/clan_cli/tests/test_secrets_cli.py:148::_test_identities clan-pytest-with-core> clan-pytest-with-core> Prefetching flake /build/pytest-kdz8qliv/test_flake_with_core clan-pytest-with-core> warning: you don't have Internet access; disabling some network-dependent features clan-pytest-with-core> Cache miss for clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> clan-pytest-with-core> [gw13] [ 48%] FAILED clan_cli/tests/test_create_flake.py::test_create_flake_existing_git clan-pytest-with-core> clan_cli/tests/test_create_flake.py::test_ui_template clan-pytest-with-core> [gw8] [ 48%] PASSED clan_cli/tests/test_vars_shared.py::test_password_store_set_shared_var_for_multiple_machines clan-pytest-with-core> clan_cli/tests/test_vars_shared.py::test_cross_machine_shared_dependency Cache miss for clanInternals.?secrets.?age.?plugins clan-pytest-with-core> Loading flake cache from file /build/clan-flake-cache/flakes-v2/caa70d3dcd8c1227784e10671196cb3a22de4a01 clan-pytest-with-core> clan-pytest-with-core> [gw12] [ 49%] PASSED clan_cli/tests/test_secrets_cli.py::test_users clan-pytest-with-core> clan_cli/tests/test_secrets_cli.py::test_multiple_user_keys clan-pytest-with-core> [gw7] [ 49%] PASSED clan_cli/tests/test_vars_generate.py::test_generate_secret_var_password_store clan-pytest-with-core> clan_cli/tests/test_create_flake.py::test_create_flake_in_git_repo_without_flake_nix clan-pytest-with-core> [gw13] [ 50%] FAILED clan_cli/tests/test_create_flake.py::test_ui_template clan-pytest-with-core> clan_cli/tests/test_install_secret_path.py::test_sops_install_secret_path[custom] [localhost] $ clan secrets set --flake /build/pytest-kg9ne81h/test_flake_with_core bob_secret_tSQhCoSKYZ clan-pytest-with-core> Caller: /build/src/clan_cli/tests/test_secrets_cli.py:252::test_multiple_user_keys clan-pytest-with-core> clan-pytest-with-core> Prefetching flake /build/pytest-kg9ne81h/test_flake_with_core clan-pytest-with-core> warning: you don't have Internet access; disabling some network-dependent features clan-pytest-with-core> Cache miss for clanInternals.?secrets.?age.?plugins clan-pytest-with-core> clan-pytest-with-core> [gw7] [ 50%] FAILED clan_cli/tests/test_create_flake.py::test_create_flake_in_git_repo_without_flake_nix clan-pytest-with-core> clan_cli/tests/test_create_flake.py::test_create_flake_fallback_from_non_clan_directory echo '<>' | age-keygen \ clan-pytest-with-core> -y clan-pytest-with-core> Caller: /build/src/clan_cli/secrets/sops.py:372::get_public_age_key_from_private_key clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_cli/secrets/sops.py:372::get_public_age_key_from_private_key clan-pytest-with-core> clan-pytest-with-core> Found age public key from a private key in the environment (SOPS_AGE_KEY): age14tva0txcrl0zes05x7gkx56qd6wd9q3nwecjac74xxzz4l47r44sv3fz62 clan-pytest-with-core> sops \ clan-pytest-with-core> --config /build/tmphiu2iq91 \ clan-pytest-with-core> encrypt \ clan-pytest-with-core> --in-place /dev/shm/tmpobiydp5q clan-pytest-with-core> Caller: /build/src/clan_cli/secrets/sops.py:320::sops_run clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_cli/secrets/sops.py:320::sops_run clan-pytest-with-core> clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-kg9ne81h/test_flake_with_core \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-kg9ne81h/test_flake_with_core/sops/secrets/bob_secret_tSQhCoSKYZ/users/bob clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:89::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:89::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Adding sops/secrets/bob_secret_tSQhCoSKYZ/users/bob to git clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-kg9ne81h/test_flake_with_core \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-kg9ne81h/test_flake_with_core/sops/secrets/bob_secret_tSQhCoSKYZ/secret clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:89::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:89::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Adding sops/secrets/bob_secret_tSQhCoSKYZ/secret to git clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-kg9ne81h/test_flake_with_core \ clan-pytest-with-core> diff \ clan-pytest-with-core> --cached --exit-code \ clan-pytest-with-core> -- /build/pytest-kg9ne81h/test_flake_with_core/sops/secrets/bob_secret_tSQhCoSKYZ/users/bob \ clan-pytest-with-core> /build/pytest-kg9ne81h/test_flake_with_core/sops/secrets/bob_secret_tSQhCoSKYZ/secret clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:111::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 1 clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:111::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-kg9ne81h/test_flake_with_core \ clan-pytest-with-core> commit \ clan-pytest-with-core> -m 'secrets: update bob_secret_tSQhCoSKYZ' \ clan-pytest-with-core> --no-verify /build/pytest-kg9ne81h/test_flake_with_core/sops/secrets/bob_secret_tSQhCoSKYZ/users/bob \ clan-pytest-with-core> /build/pytest-kg9ne81h/test_flake_with_core/sops/secrets/bob_secret_tSQhCoSKYZ/secret clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:131::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:131::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Committed 2 files to git: sops/secrets/bob_secret_tSQhCoSKYZ/users/bob, sops/secrets/bob_secret_tSQhCoSKYZ/secret clan-pytest-with-core> [localhost] $ clan secrets set --flake /build/pytest-kg9ne81h/test_flake_with_core bob_secret_jnLEjiRIUT clan-pytest-with-core> Caller: /build/src/clan_cli/tests/test_secrets_cli.py:252::test_multiple_user_keys clan-pytest-with-core> clan-pytest-with-core> Prefetching flake /build/pytest-kg9ne81h/test_flake_with_core clan-pytest-with-core> warning: you don't have Internet access; disabling some network-dependent features clan-pytest-with-core> echo '<>' | age-keygen \ clan-pytest-with-core> -y clan-pytest-with-core> Caller: /build/src/clan_cli/secrets/sops.py:372::get_public_age_key_from_private_key clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_cli/secrets/sops.py:372::get_public_age_key_from_private_key clan-pytest-with-core> clan-pytest-with-core> Found age public key from a private key in the environment (SOPS_AGE_KEY): age1dhwqzkah943xzc34tc3dlmfayyevcmdmxzjezdgdy33euxwf59vsp3vk3c clan-pytest-with-core> sops \ clan-pytest-with-core> --config /build/tmpaqp0weft \ clan-pytest-with-core> encrypt \ clan-pytest-with-core> --in-place /dev/shm/tmp1yrz6jlk clan-pytest-with-core> Caller: /build/src/clan_cli/secrets/sops.py:320::sops_run clan-pytest-with-core> clan-pytest-with-core> clan-pytest-with-core> [gw7] [ 51%] FAILED clan_cli/tests/test_create_flake.py::test_create_flake_fallback_from_non_clan_directory clan-pytest-with-core> clan_cli/templates/list_test.py::test_templates_list Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_cli/secrets/sops.py:320::sops_run clan-pytest-with-core> clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-kg9ne81h/test_flake_with_core \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-kg9ne81h/test_flake_with_core/sops/secrets/bob_secret_jnLEjiRIUT/users/bob clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:89::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:89::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Adding sops/secrets/bob_secret_jnLEjiRIUT/users/bob to git clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-kg9ne81h/test_flake_with_core \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-kg9ne81h/test_flake_with_core/sops/secrets/bob_secret_jnLEjiRIUT/secret clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:89::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:89::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Adding sops/secrets/bob_secret_jnLEjiRIUT/secret to git clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-kg9ne81h/test_flake_with_core \ clan-pytest-with-core> diff \ clan-pytest-with-core> --cached --exit-code \ clan-pytest-with-core> -- /build/pytest-kg9ne81h/test_flake_with_core/sops/secrets/bob_secret_jnLEjiRIUT/users/bob \ clan-pytest-with-core> /build/pytest-kg9ne81h/test_flake_with_core/sops/secrets/bob_secret_jnLEjiRIUT/secret clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:111::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 1 clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:111::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-kg9ne81h/test_flake_with_core \ clan-pytest-with-core> commit \ clan-pytest-with-core> -m 'secrets: update bob_secret_jnLEjiRIUT' \ clan-pytest-with-core> --no-verify /build/pytest-kg9ne81h/test_flake_with_core/sops/secrets/bob_secret_jnLEjiRIUT/users/bob \ clan-pytest-with-core> /build/pytest-kg9ne81h/test_flake_with_core/sops/secrets/bob_secret_jnLEjiRIUT/secret clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:131::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:131::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Committed 2 files to git: sops/secrets/bob_secret_jnLEjiRIUT/users/bob, sops/secrets/bob_secret_jnLEjiRIUT/secret clan-pytest-with-core> [localhost] $ clan secrets users remove-key --flake /build/pytest-kg9ne81h/test_flake_with_core bob age14tva0txcrl0zes05x7gkx56qd6wd9q3nwecjac74xxzz4l47r44sv3fz62 clan-pytest-with-core> Caller: /build/src/clan_cli/tests/test_secrets_cli.py:296::test_multiple_user_keys clan-pytest-with-core> clan-pytest-with-core> Prefetching flake /build/pytest-kg9ne81h/test_flake_with_core clan-pytest-with-core> warning: you don't have Internet access; disabling some network-dependent features clan-pytest-with-core> sops \ clan-pytest-with-core> --config /build/tmphklh9jml \ clan-pytest-with-core> updatekeys \ clan-pytest-with-core> --yes /build/pytest-kg9ne81h/test_flake_with_core/sops/secrets/bob_secret_jnLEjiRIUT/secret clan-pytest-with-core> Caller: /build/src/clan_cli/secrets/sops.py:320::sops_run clan-pytest-with-core> clan-pytest-with-core> The following changes will be made to the file's groups: clan-pytest-with-core> Group 1 clan-pytest-with-core> age1dhwqzkah943xzc34tc3dlmfayyevcmdmxzjezdgdy33euxwf59vsp3vk3c clan-pytest-with-core> --- age14tva0txcrl0zes05x7gkx56qd6wd9q3nwecjac74xxzz4l47r44sv3fz62 clan-pytest-with-core> 2026/10/07 11:53:46 Syncing keys for file /build/pytest-kg9ne81h/test_flake_with_core/sops/secrets/bob_secret_jnLEjiRIUT/secret clan-pytest-with-core> 2026/10/07 11:53:46 File /build/pytest-kg9ne81h/test_flake_with_core/sops/secrets/bob_secret_jnLEjiRIUT/secret synced with new keys clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_cli/secrets/sops.py:320::sops_run clan-pytest-with-core> clan-pytest-with-core> sops \ clan-pytest-with-core> --config /build/tmpr85gxq86 \ clan-pytest-with-core> updatekeys \ clan-pytest-with-core> --yes /build/pytest-kg9ne81h/test_flake_with_core/sops/secrets/bob_secret_tSQhCoSKYZ/secret clan-pytest-with-core> Caller: /build/src/clan_cli/secrets/sops.py:320::sops_run clan-pytest-with-core> clan-pytest-with-core> 2026/10/07 11:53:46 Syncing keys for file /build/pytest-kg9ne81h/test_flake_with_core/sops/secrets/bob_secret_tSQhCoSKYZ/secret clan-pytest-with-core> The following changes will be made to the file's groups: clan-pytest-with-core> Group 1 clan-pytest-with-core> age1dhwqzkah943xzc34tc3dlmfayyevcmdmxzjezdgdy33euxwf59vsp3vk3c clan-pytest-with-core> --- age14tva0txcrl0zes05x7gkx56qd6wd9q3nwecjac74xxzz4l47r44sv3fz62 clan-pytest-with-core> 2026/10/07 11:53:46 File /build/pytest-kg9ne81h/test_flake_with_core/sops/secrets/bob_secret_tSQhCoSKYZ/secret synced with new keys clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_cli/secrets/sops.py:320::sops_run clan-pytest-with-core> clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-kg9ne81h/test_flake_with_core \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-kg9ne81h/test_flake_with_core/sops/users/bob clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:89::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:89::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Adding sops/users/bob to git clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-kg9ne81h/test_flake_with_core \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-kg9ne81h/test_flake_with_core/sops/secrets/bob_secret_jnLEjiRIUT/secret clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:89::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:89::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Adding sops/secrets/bob_secret_jnLEjiRIUT/secret to git clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-kg9ne81h/test_flake_with_core \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-kg9ne81h/test_flake_with_core/sops/secrets/bob_secret_tSQhCoSKYZ/secret clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:89::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:89::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Adding sops/secrets/bob_secret_tSQhCoSKYZ/secret to git clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-kg9ne81h/test_flake_with_core \ clan-pytest-with-core> diff \ clan-pytest-with-core> --cached --exit-code \ clan-pytest-with-core> -- /build/pytest-kg9ne81h/test_flake_with_core/sops/users/bob \ clan-pytest-with-core> /build/pytest-kg9ne81h/test_flake_with_core/sops/secrets/bob_secret_jnLEjiRIUT/secret \ clan-pytest-with-core> /build/pytest-kg9ne81h/test_flake_with_core/sops/secrets/bob_secret_tSQhCoSKYZ/secret clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:111::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 1 clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:111::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-kg9ne81h/test_flake_with_core \ clan-pytest-with-core> commit \ clan-pytest-with-core> -m 'secrets: remove key(s) for user bob' \ clan-pytest-with-core> --no-verify /build/pytest-kg9ne81h/test_flake_with_core/sops/users/bob \ clan-pytest-with-core> /build/pytest-kg9ne81h/test_flake_with_core/sops/secrets/bob_secret_jnLEjiRIUT/secret \ clan-pytest-with-core> /build/pytest-kg9ne81h/test_flake_with_core/sops/secrets/bob_secret_tSQhCoSKYZ/secret clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:131::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:131::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Committed 3 files to git: sops/users/bob, sops/secrets/bob_secret_jnLEjiRIUT/secret, sops/secrets/bob_secret_tSQhCoSKYZ/secret clan-pytest-with-core> [localhost] $ clan secrets users add-key --flake /build/pytest-kg9ne81h/test_flake_with_core bob age14tva0txcrl0zes05x7gkx56qd6wd9q3nwecjac74xxzz4l47r44sv3fz62 clan-pytest-with-core> Caller: /build/src/clan_cli/tests/test_secrets_cli.py:316::test_multiple_user_keys clan-pytest-with-core> clan-pytest-with-core> Prefetching flake /build/pytest-kg9ne81h/test_flake_with_core clan-pytest-with-core> warning: you don't have Internet access; disabling some network-dependent features clan-pytest-with-core> sops \ clan-pytest-with-core> --config /build/tmpugddlehh \ clan-pytest-with-core> updatekeys \ clan-pytest-with-core> --yes /build/pytest-kg9ne81h/test_flake_with_core/sops/secrets/bob_secret_jnLEjiRIUT/secret clan-pytest-with-core> Caller: /build/src/clan_cli/secrets/sops.py:320::sops_run clan-pytest-with-core> clan-pytest-with-core> 2026/10/07 11:53:47 Syncing keys for file /build/pytest-kg9ne81h/test_flake_with_core/sops/secrets/bob_secret_jnLEjiRIUT/secret clan-pytest-with-core> The following changes will be made to the file's groups: clan-pytest-with-core> Group 1 clan-pytest-with-core> age1dhwqzkah943xzc34tc3dlmfayyevcmdmxzjezdgdy33euxwf59vsp3vk3c clan-pytest-with-core> +++ age14tva0txcrl0zes05x7gkx56qd6wd9q3nwecjac74xxzz4l47r44sv3fz62 clan-pytest-with-core> 2026/10/07 11:53:47 File /build/pytest-kg9ne81h/test_flake_with_core/sops/secrets/bob_secret_jnLEjiRIUT/secret synced with new keys clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_cli/secrets/sops.py:320::sops_run clan-pytest-with-core> clan-pytest-with-core> sops \ clan-pytest-with-core> --config /build/tmpi9ehuw6o \ clan-pytest-with-core> updatekeys \ clan-pytest-with-core> --yes /build/pytest-kg9ne81h/test_flake_with_core/sops/secrets/bob_secret_tSQhCoSKYZ/secret clan-pytest-with-core> Caller: /build/src/clan_cli/secrets/sops.py:320::sops_run clan-pytest-with-core> clan-pytest-with-core> 2026/10/07 11:53:47 Syncing keys for file /build/pytest-kg9ne81h/test_flake_with_core/sops/secrets/bob_secret_tSQhCoSKYZ/secret clan-pytest-with-core> The following changes will be made to the file's groups: clan-pytest-with-core> Group 1 clan-pytest-with-core> age1dhwqzkah943xzc34tc3dlmfayyevcmdmxzjezdgdy33euxwf59vsp3vk3c clan-pytest-with-core> +++ age14tva0txcrl0zes05x7gkx56qd6wd9q3nwecjac74xxzz4l47r44sv3fz62 clan-pytest-with-core> 2026/10/07 11:53:47 File /build/pytest-kg9ne81h/test_flake_with_core/sops/secrets/bob_secret_tSQhCoSKYZ/secret synced with new keys clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_cli/secrets/sops.py:320::sops_run clan-pytest-with-core> clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-kg9ne81h/test_flake_with_core \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-kg9ne81h/test_flake_with_core/sops/users/bob clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:89::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:89::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Adding sops/users/bob to git clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-kg9ne81h/test_flake_with_core \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-kg9ne81h/test_flake_with_core/sops/secrets/bob_secret_jnLEjiRIUT/secret clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:89::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:89::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Adding sops/secrets/bob_secret_jnLEjiRIUT/secret to git clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-kg9ne81h/test_flake_with_core \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-kg9ne81h/test_flake_with_core/sops/secrets/bob_secret_tSQhCoSKYZ/secret clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:89::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:89::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Adding sops/secrets/bob_secret_tSQhCoSKYZ/secret to git clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-kg9ne81h/test_flake_with_core \ clan-pytest-with-core> diff \ clan-pytest-with-core> --cached --exit-code \ clan-pytest-with-core> -- /build/pytest-kg9ne81h/test_flake_with_core/sops/users/bob \ clan-pytest-with-core> /build/pytest-kg9ne81h/test_flake_with_core/sops/secrets/bob_secret_jnLEjiRIUT/secret \ clan-pytest-with-core> /build/pytest-kg9ne81h/test_flake_with_core/sops/secrets/bob_secret_tSQhCoSKYZ/secret clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:111::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 1 clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:111::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-kg9ne81h/test_flake_with_core \ clan-pytest-with-core> commit \ clan-pytest-with-core> -m 'secrets: add key(s) for user bob' \ clan-pytest-with-core> --no-verify /build/pytest-kg9ne81h/test_flake_with_core/sops/users/bob \ clan-pytest-with-core> /build/pytest-kg9ne81h/test_flake_with_core/sops/secrets/bob_secret_jnLEjiRIUT/secret \ clan-pytest-with-core> /build/pytest-kg9ne81h/test_flake_with_core/sops/secrets/bob_secret_tSQhCoSKYZ/secret clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:131::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:131::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Committed 3 files to git: sops/users/bob, sops/secrets/bob_secret_jnLEjiRIUT/secret, sops/secrets/bob_secret_tSQhCoSKYZ/secret clan-pytest-with-core> [localhost] $ clan secrets users add --flake /build/pytest-kg9ne81h/test_flake_with_core alice --age-key=age1dhuh9xtefhgpr2sjjf7gmp9q2pr37z92rv4wsadxuqdx48989g7qj552qp clan-pytest-with-core> Caller: /build/src/clan_cli/tests/test_secrets_cli.py:209::test_multiple_user_keys clan-pytest-with-core> clan-pytest-with-core> Prefetching flake /build/pytest-kg9ne81h/test_flake_with_core clan-pytest-with-core> warning: you don't have Internet access; disabling some network-dependent features clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-kg9ne81h/test_flake_with_core \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-kg9ne81h/test_flake_with_core/sops/users/alice clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:89::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:89::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Adding sops/users/alice to git clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-kg9ne81h/test_flake_with_core \ clan-pytest-with-core> diff \ clan-pytest-with-core> --cached --exit-code \ clan-pytest-with-core> -- /build/pytest-kg9ne81h/test_flake_with_core/sops/users/alice clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:111::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 1 clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:111::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-kg9ne81h/test_flake_with_core \ clan-pytest-with-core> commit \ clan-pytest-with-core> -m 'secrets: add user alice' \ clan-pytest-with-core> --no-verify /build/pytest-kg9ne81h/test_flake_with_core/sops/users/alice clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:131::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:131::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Committed sops/users/alice to git clan-pytest-with-core> [localhost] $ clan secrets set --flake /build/pytest-kg9ne81h/test_flake_with_core alice_secret_taFoOdRUMz clan-pytest-with-core> Caller: /build/src/clan_cli/tests/test_secrets_cli.py:252::test_multiple_user_keys clan-pytest-with-core> clan-pytest-with-core> Prefetching flake /build/pytest-kg9ne81h/test_flake_with_core clan-pytest-with-core> warning: you don't have Internet access; disabling some network-dependent features clan-pytest-with-core> echo '<>' | age-keygen \ clan-pytest-with-core> -y clan-pytest-with-core> Caller: /build/src/clan_cli/secrets/sops.py:372::get_public_age_key_from_private_key clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_cli/secrets/sops.py:372::get_public_age_key_from_private_key clan-pytest-with-core> clan-pytest-with-core> Found age public key from a private key in the environment (SOPS_AGE_KEY): age1dhuh9xtefhgpr2sjjf7gmp9q2pr37z92rv4wsadxuqdx48989g7qj552qp clan-pytest-with-core> sops \ clan-pytest-with-core> --config /build/tmpvl81vr4j \ clan-pytest-with-core> encrypt \ clan-pytest-with-core> --in-place /dev/shm/tmpk3vk6w7e clan-pytest-with-core> Caller: /build/src/clan_cli/secrets/sops.py:320::sops_run clan-pytest-with-core> clan-pytest-with-core> clan-pytest-with-core> [gw7] [ 51%] PASSED clan_cli/templates/list_test.py::test_templates_list clan-pytest-with-core> clan_cli/templates/list_test.py::test_templates_list_outside_clan Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_cli/secrets/sops.py:320::sops_run clan-pytest-with-core> clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-kg9ne81h/test_flake_with_core \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-kg9ne81h/test_flake_with_core/sops/secrets/alice_secret_taFoOdRUMz/users/alice clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:89::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:89::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Adding sops/secrets/alice_secret_taFoOdRUMz/users/alice to git clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-kg9ne81h/test_flake_with_core \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-kg9ne81h/test_flake_with_core/sops/secrets/alice_secret_taFoOdRUMz/secret clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:89::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:89::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Adding sops/secrets/alice_secret_taFoOdRUMz/secret to git clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-kg9ne81h/test_flake_with_core \ clan-pytest-with-core> diff \ clan-pytest-with-core> --cached --exit-code \ clan-pytest-with-core> -- /build/pytest-kg9ne81h/test_flake_with_core/sops/secrets/alice_secret_taFoOdRUMz/users/alice \ clan-pytest-with-core> /build/pytest-kg9ne81h/test_flake_with_core/sops/secrets/alice_secret_taFoOdRUMz/secret clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:111::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 1 clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:111::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-kg9ne81h/test_flake_with_core \ clan-pytest-with-core> commit \ clan-pytest-with-core> -m 'secrets: update alice_secret_taFoOdRUMz' \ clan-pytest-with-core> --no-verify /build/pytest-kg9ne81h/test_flake_with_core/sops/secrets/alice_secret_taFoOdRUMz/users/alice \ clan-pytest-with-core> /build/pytest-kg9ne81h/test_flake_with_core/sops/secrets/alice_secret_taFoOdRUMz/secret clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:131::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:131::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Committed 2 files to git: sops/secrets/alice_secret_taFoOdRUMz/users/alice, sops/secrets/alice_secret_taFoOdRUMz/secret clan-pytest-with-core> clan-pytest-with-core> [gw7] [ 51%] PASSED clan_cli/templates/list_test.py::test_templates_list_outside_clan clan-pytest-with-core> clan_cli/ssh/test_deploy_info.py::test_qrcode_scan [localhost] $ clan secrets users add --flake /build/pytest-kg9ne81h/test_flake_with_core charlie --age-key=age1n58rxm8y6h9prmwn0qk7nggfsu9f9j4u35dxg7akpkjd5vgsavssfzmq9y --age-key=age1eyyhln9g3cdwtrwpckugvqgtf5p8ugt0426sw38ra3wkc0t4rfhslq7txv --age-key=age1e9ufa6wrsr5danka50qp0np0832uz7jca7s00wyeg2nt3aqnvaks7p4jfr clan-pytest-with-core> Caller: /build/src/clan_cli/tests/test_secrets_cli.py:209::test_multiple_user_keys clan-pytest-with-core> clan-pytest-with-core> Prefetching flake /build/pytest-kg9ne81h/test_flake_with_core clan-pytest-with-core> clan-pytest-with-core> [gw7] [ 52%] PASSED clan_cli/ssh/test_deploy_info.py::test_qrcode_scan clan-pytest-with-core> clan_cli/ssh/test_deploy_info.py::test_ssh_shell_from_deploy warning: you don't have Internet access; disabling some network-dependent features clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-kg9ne81h/test_flake_with_core \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-kg9ne81h/test_flake_with_core/sops/users/charlie clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:89::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:89::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Adding sops/users/charlie to git clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-kg9ne81h/test_flake_with_core \ clan-pytest-with-core> diff \ clan-pytest-with-core> --cached --exit-code \ clan-pytest-with-core> -- /build/pytest-kg9ne81h/test_flake_with_core/sops/users/charlie clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:111::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 1 clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:111::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-kg9ne81h/test_flake_with_core \ clan-pytest-with-core> commit \ clan-pytest-with-core> -m 'secrets: add user charlie' \ clan-pytest-with-core> --no-verify /build/pytest-kg9ne81h/test_flake_with_core/sops/users/charlie clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:131::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:131::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Committed sops/users/charlie to git clan-pytest-with-core> [localhost] $ clan secrets set --flake /build/pytest-kg9ne81h/test_flake_with_core charlie_secret_FyAYIdjfMA clan-pytest-with-core> Caller: /build/src/clan_cli/tests/test_secrets_cli.py:252::test_multiple_user_keys clan-pytest-with-core> clan-pytest-with-core> Prefetching flake /build/pytest-kg9ne81h/test_flake_with_core clan-pytest-with-core> warning: you don't have Internet access; disabling some network-dependent features clan-pytest-with-core> echo '<>' | age-keygen \ clan-pytest-with-core> -y clan-pytest-with-core> Caller: /build/src/clan_cli/secrets/sops.py:372::get_public_age_key_from_private_key clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_cli/secrets/sops.py:372::get_public_age_key_from_private_key clan-pytest-with-core> clan-pytest-with-core> Found age public key from a private key in the environment (SOPS_AGE_KEY): age1n58rxm8y6h9prmwn0qk7nggfsu9f9j4u35dxg7akpkjd5vgsavssfzmq9y clan-pytest-with-core> sops \ clan-pytest-with-core> --config /build/tmpqo67o7fi \ clan-pytest-with-core> encrypt \ clan-pytest-with-core> --in-place /dev/shm/tmpz4yegkzz clan-pytest-with-core> Caller: /build/src/clan_cli/secrets/sops.py:320::sops_run clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_cli/secrets/sops.py:320::sops_run clan-pytest-with-core> clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-kg9ne81h/test_flake_with_core \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-kg9ne81h/test_flake_with_core/sops/secrets/charlie_secret_FyAYIdjfMA/users/charlie clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:89::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:89::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Adding sops/secrets/charlie_secret_FyAYIdjfMA/users/charlie to git clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-kg9ne81h/test_flake_with_core \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-kg9ne81h/test_flake_with_core/sops/secrets/charlie_secret_FyAYIdjfMA/secret clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:89::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:89::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Adding sops/secrets/charlie_secret_FyAYIdjfMA/secret to git clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-kg9ne81h/test_flake_with_core \ clan-pytest-with-core> diff \ clan-pytest-with-core> --cached --exit-code \ clan-pytest-with-core> -- /build/pytest-kg9ne81h/test_flake_with_core/sops/secrets/charlie_secret_FyAYIdjfMA/users/charlie \ clan-pytest-with-core> /build/pytest-kg9ne81h/test_flake_with_core/sops/secrets/charlie_secret_FyAYIdjfMA/secret clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:111::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 1 clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:111::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-kg9ne81h/test_flake_with_core \ clan-pytest-with-core> commit \ clan-pytest-with-core> -m 'secrets: update charlie_secret_FyAYIdjfMA' \ clan-pytest-with-core> --no-verify /build/pytest-kg9ne81h/test_flake_with_core/sops/secrets/charlie_secret_FyAYIdjfMA/users/charlie \ clan-pytest-with-core> /build/pytest-kg9ne81h/test_flake_with_core/sops/secrets/charlie_secret_FyAYIdjfMA/secret clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:131::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:131::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Committed 2 files to git: sops/secrets/charlie_secret_FyAYIdjfMA/users/charlie, sops/secrets/charlie_secret_FyAYIdjfMA/secret clan-pytest-with-core> [localhost] $ clan secrets set --flake /build/pytest-kg9ne81h/test_flake_with_core charlie_secret_dvEVfnIAjf clan-pytest-with-core> Caller: /build/src/clan_cli/tests/test_secrets_cli.py:252::test_multiple_user_keys clan-pytest-with-core> clan-pytest-with-core> Prefetching flake /build/pytest-kg9ne81h/test_flake_with_core clan-pytest-with-core> warning: you don't have Internet access; disabling some network-dependent features clan-pytest-with-core> echo '<>' | age-keygen \ clan-pytest-with-core> -y clan-pytest-with-core> Caller: /build/src/clan_cli/secrets/sops.py:372::get_public_age_key_from_private_key clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_cli/secrets/sops.py:372::get_public_age_key_from_private_key clan-pytest-with-core> clan-pytest-with-core> Found age public key from a private key in the environment (SOPS_AGE_KEY): age1eyyhln9g3cdwtrwpckugvqgtf5p8ugt0426sw38ra3wkc0t4rfhslq7txv clan-pytest-with-core> sops \ clan-pytest-with-core> --config /build/tmpabr2gny6 \ clan-pytest-with-core> encrypt \ clan-pytest-with-core> --in-place /dev/shm/tmpqlr8yamx clan-pytest-with-core> Caller: /build/src/clan_cli/secrets/sops.py:320::sops_run clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_cli/secrets/sops.py:320::sops_run clan-pytest-with-core> clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-kg9ne81h/test_flake_with_core \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-kg9ne81h/test_flake_with_core/sops/secrets/charlie_secret_dvEVfnIAjf/users/charlie clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:89::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:89::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Adding sops/secrets/charlie_secret_dvEVfnIAjf/users/charlie to git clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-kg9ne81h/test_flake_with_core \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-kg9ne81h/test_flake_with_core/sops/secrets/charlie_secret_dvEVfnIAjf/secret clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:89::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:89::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Adding sops/secrets/charlie_secret_dvEVfnIAjf/secret to git clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-kg9ne81h/test_flake_with_core \ clan-pytest-with-core> diff \ clan-pytest-with-core> --cached --exit-code \ clan-pytest-with-core> -- /build/pytest-kg9ne81h/test_flake_with_core/sops/secrets/charlie_secret_dvEVfnIAjf/users/charlie \ clan-pytest-with-core> /build/pytest-kg9ne81h/test_flake_with_core/sops/secrets/charlie_secret_dvEVfnIAjf/secret clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:111::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 1 clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:111::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-kg9ne81h/test_flake_with_core \ clan-pytest-with-core> commit \ clan-pytest-with-core> -m 'secrets: update charlie_secret_dvEVfnIAjf' \ clan-pytest-with-core> --no-verify /build/pytest-kg9ne81h/test_flake_with_core/sops/secrets/charlie_secret_dvEVfnIAjf/users/charlie \ clan-pytest-with-core> /build/pytest-kg9ne81h/test_flake_with_core/sops/secrets/charlie_secret_dvEVfnIAjf/secret clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:131::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:131::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Committed 2 files to git: sops/secrets/charlie_secret_dvEVfnIAjf/users/charlie, sops/secrets/charlie_secret_dvEVfnIAjf/secret clan-pytest-with-core> [localhost] $ clan secrets set --flake /build/pytest-kg9ne81h/test_flake_with_core charlie_secret_HayPnUhJVm clan-pytest-with-core> Caller: /build/src/clan_cli/tests/test_secrets_cli.py:252::test_multiple_user_keys clan-pytest-with-core> clan-pytest-with-core> Prefetching flake /build/pytest-kg9ne81h/test_flake_with_core clan-pytest-with-core> warning: you don't have Internet access; disabling some network-dependent features clan-pytest-with-core> echo '<>' | age-keygen \ clan-pytest-with-core> -y clan-pytest-with-core> Caller: /build/src/clan_cli/secrets/sops.py:372::get_public_age_key_from_private_key clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_cli/secrets/sops.py:372::get_public_age_key_from_private_key clan-pytest-with-core> clan-pytest-with-core> Found age public key from a private key in the environment (SOPS_AGE_KEY): age1e9ufa6wrsr5danka50qp0np0832uz7jca7s00wyeg2nt3aqnvaks7p4jfr clan-pytest-with-core> sops \ clan-pytest-with-core> --config /build/tmpse88sl_j \ clan-pytest-with-core> encrypt \ clan-pytest-with-core> --in-place /dev/shm/tmpywboe966 clan-pytest-with-core> Caller: /build/src/clan_cli/secrets/sops.py:320::sops_run clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_cli/secrets/sops.py:320::sops_run clan-pytest-with-core> clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-kg9ne81h/test_flake_with_core \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-kg9ne81h/test_flake_with_core/sops/secrets/charlie_secret_HayPnUhJVm/users/charlie clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:89::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:89::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Adding sops/secrets/charlie_secret_HayPnUhJVm/users/charlie to git clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-kg9ne81h/test_flake_with_core \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-kg9ne81h/test_flake_with_core/sops/secrets/charlie_secret_HayPnUhJVm/secret clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:89::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:89::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Adding sops/secrets/charlie_secret_HayPnUhJVm/secret to git clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-kg9ne81h/test_flake_with_core \ clan-pytest-with-core> diff \ clan-pytest-with-core> --cached --exit-code \ clan-pytest-with-core> -- /build/pytest-kg9ne81h/test_flake_with_core/sops/secrets/charlie_secret_HayPnUhJVm/users/charlie \ clan-pytest-with-core> /build/pytest-kg9ne81h/test_flake_with_core/sops/secrets/charlie_secret_HayPnUhJVm/secret clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:111::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 1 clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:111::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-kg9ne81h/test_flake_with_core \ clan-pytest-with-core> commit \ clan-pytest-with-core> -m 'secrets: update charlie_secret_HayPnUhJVm' \ clan-pytest-with-core> --no-verify /build/pytest-kg9ne81h/test_flake_with_core/sops/secrets/charlie_secret_HayPnUhJVm/users/charlie \ clan-pytest-with-core> /build/pytest-kg9ne81h/test_flake_with_core/sops/secrets/charlie_secret_HayPnUhJVm/secret clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:131::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:131::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Committed 2 files to git: sops/secrets/charlie_secret_HayPnUhJVm/users/charlie, sops/secrets/charlie_secret_HayPnUhJVm/secret clan-pytest-with-core> [localhost] $ clan secrets users remove-key --flake /build/pytest-kg9ne81h/test_flake_with_core charlie age1n58rxm8y6h9prmwn0qk7nggfsu9f9j4u35dxg7akpkjd5vgsavssfzmq9y clan-pytest-with-core> Caller: /build/src/clan_cli/tests/test_secrets_cli.py:296::test_multiple_user_keys clan-pytest-with-core> clan-pytest-with-core> Prefetching flake /build/pytest-kg9ne81h/test_flake_with_core clan-pytest-with-core> warning: you don't have Internet access; disabling some network-dependent features clan-pytest-with-core> sops \ clan-pytest-with-core> --config /build/tmp7gvlfk59 \ clan-pytest-with-core> updatekeys \ clan-pytest-with-core> --yes /build/pytest-kg9ne81h/test_flake_with_core/sops/secrets/charlie_secret_FyAYIdjfMA/secret clan-pytest-with-core> Caller: /build/src/clan_cli/secrets/sops.py:320::sops_run clan-pytest-with-core> clan-pytest-with-core> clan-pytest-with-core> [gw3] [ 52%] PASSED clan_cli/tests/test_vars_generate.py::test_stdout_of_generate clan-pytest-with-core> clan_cli/tests/test_vars_generate.py::test_create_sops_age_secrets 2026/10/07 11:53:48 Syncing keys for file /build/pytest-kg9ne81h/test_flake_with_core/sops/secrets/charlie_secret_FyAYIdjfMA/secret clan-pytest-with-core> The following changes will be made to the file's groups: clan-pytest-with-core> Group 1 clan-pytest-with-core> age1eyyhln9g3cdwtrwpckugvqgtf5p8ugt0426sw38ra3wkc0t4rfhslq7txv clan-pytest-with-core> age1e9ufa6wrsr5danka50qp0np0832uz7jca7s00wyeg2nt3aqnvaks7p4jfr clan-pytest-with-core> --- age1n58rxm8y6h9prmwn0qk7nggfsu9f9j4u35dxg7akpkjd5vgsavssfzmq9y clan-pytest-with-core> 2026/10/07 11:53:48 File /build/pytest-kg9ne81h/test_flake_with_core/sops/secrets/charlie_secret_FyAYIdjfMA/secret synced with new keys clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_cli/secrets/sops.py:320::sops_run clan-pytest-with-core> clan-pytest-with-core> sops \ clan-pytest-with-core> --config /build/tmp7vuv01nr \ clan-pytest-with-core> updatekeys \ clan-pytest-with-core> --yes /build/pytest-kg9ne81h/test_flake_with_core/sops/secrets/charlie_secret_HayPnUhJVm/secret clan-pytest-with-core> Caller: /build/src/clan_cli/secrets/sops.py:320::sops_run clan-pytest-with-core> clan-pytest-with-core> 2026/10/07 11:53:48 Syncing keys for file /build/pytest-kg9ne81h/test_flake_with_core/sops/secrets/charlie_secret_HayPnUhJVm/secret clan-pytest-with-core> The following changes will be made to the file's groups: clan-pytest-with-core> Group 1 clan-pytest-with-core> age1eyyhln9g3cdwtrwpckugvqgtf5p8ugt0426sw38ra3wkc0t4rfhslq7txv clan-pytest-with-core> age1e9ufa6wrsr5danka50qp0np0832uz7jca7s00wyeg2nt3aqnvaks7p4jfr clan-pytest-with-core> --- age1n58rxm8y6h9prmwn0qk7nggfsu9f9j4u35dxg7akpkjd5vgsavssfzmq9y clan-pytest-with-core> 2026/10/07 11:53:48 File /build/pytest-kg9ne81h/test_flake_with_core/sops/secrets/charlie_secret_HayPnUhJVm/secret synced with new keys clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_cli/secrets/sops.py:320::sops_run clan-pytest-with-core> clan-pytest-with-core> sops \ clan-pytest-with-core> --config /build/tmpqu9ub4aj \ clan-pytest-with-core> updatekeys \ clan-pytest-with-core> --yes /build/pytest-kg9ne81h/test_flake_with_core/sops/secrets/charlie_secret_dvEVfnIAjf/secret clan-pytest-with-core> Caller: /build/src/clan_cli/secrets/sops.py:320::sops_run clan-pytest-with-core> clan-pytest-with-core> 2026/10/07 11:53:48 Syncing keys for file /build/pytest-kg9ne81h/test_flake_with_core/sops/secrets/charlie_secret_dvEVfnIAjf/secret clan-pytest-with-core> The following changes will be made to the file's groups: clan-pytest-with-core> Group 1 clan-pytest-with-core> age1eyyhln9g3cdwtrwpckugvqgtf5p8ugt0426sw38ra3wkc0t4rfhslq7txv clan-pytest-with-core> age1e9ufa6wrsr5danka50qp0np0832uz7jca7s00wyeg2nt3aqnvaks7p4jfr clan-pytest-with-core> --- age1n58rxm8y6h9prmwn0qk7nggfsu9f9j4u35dxg7akpkjd5vgsavssfzmq9y clan-pytest-with-core> 2026/10/07 11:53:48 File /build/pytest-kg9ne81h/test_flake_with_core/sops/secrets/charlie_secret_dvEVfnIAjf/secret synced with new keys clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_cli/secrets/sops.py:320::sops_run clan-pytest-with-core> clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-kg9ne81h/test_flake_with_core \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-kg9ne81h/test_flake_with_core/sops/users/charlie clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:89::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:89::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Adding sops/users/charlie to git clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-kg9ne81h/test_flake_with_core \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-kg9ne81h/test_flake_with_core/sops/secrets/charlie_secret_FyAYIdjfMA/secret clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:89::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:89::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Adding sops/secrets/charlie_secret_FyAYIdjfMA/secret to git clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-kg9ne81h/test_flake_with_core \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-kg9ne81h/test_flake_with_core/sops/secrets/charlie_secret_HayPnUhJVm/secret clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:89::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:89::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Adding sops/secrets/charlie_secret_HayPnUhJVm/secret to git clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-kg9ne81h/test_flake_with_core \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-kg9ne81h/test_flake_with_core/sops/secrets/charlie_secret_dvEVfnIAjf/secret clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:89::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:89::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Adding sops/secrets/charlie_secret_dvEVfnIAjf/secret to git clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-kg9ne81h/test_flake_with_core \ clan-pytest-with-core> diff \ clan-pytest-with-core> --cached --exit-code \ clan-pytest-with-core> -- /build/pytest-kg9ne81h/test_flake_with_core/sops/users/charlie \ clan-pytest-with-core> /build/pytest-kg9ne81h/test_flake_with_core/sops/secrets/charlie_secret_FyAYIdjfMA/secret \ clan-pytest-with-core> /build/pytest-kg9ne81h/test_flake_with_core/sops/secrets/charlie_secret_HayPnUhJVm/secret \ clan-pytest-with-core> /build/pytest-kg9ne81h/test_flake_with_core/sops/secrets/charlie_secret_dvEVfnIAjf/secret clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:111::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 1 clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:111::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-kg9ne81h/test_flake_with_core \ clan-pytest-with-core> commit \ clan-pytest-with-core> -m 'secrets: remove key(s) for user charlie' \ clan-pytest-with-core> --no-verify /build/pytest-kg9ne81h/test_flake_with_core/sops/users/charlie \ clan-pytest-with-core> /build/pytest-kg9ne81h/test_flake_with_core/sops/secrets/charlie_secret_FyAYIdjfMA/secret \ clan-pytest-with-core> /build/pytest-kg9ne81h/test_flake_with_core/sops/secrets/charlie_secret_HayPnUhJVm/secret \ clan-pytest-with-core> /build/pytest-kg9ne81h/test_flake_with_core/sops/secrets/charlie_secret_dvEVfnIAjf/secret clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:131::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:131::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Committed 4 files to git: sops/users/charlie, sops/secrets/charlie_secret_FyAYIdjfMA/secret, sops/secrets/charlie_secret_HayPnUhJVm/secret, sops/secrets/charlie_secret_dvEVfnIAjf/secret clan-pytest-with-core> [localhost] $ clan secrets users add-key --flake /build/pytest-kg9ne81h/test_flake_with_core charlie age1n58rxm8y6h9prmwn0qk7nggfsu9f9j4u35dxg7akpkjd5vgsavssfzmq9y clan-pytest-with-core> Caller: /build/src/clan_cli/tests/test_secrets_cli.py:316::test_multiple_user_keys clan-pytest-with-core> clan-pytest-with-core> Prefetching flake /build/pytest-kg9ne81h/test_flake_with_core clan-pytest-with-core> warning: you don't have Internet access; disabling some network-dependent features clan-pytest-with-core> clan-pytest-with-core> [gw3] [ 53%] PASSED clan_cli/tests/test_vars_generate.py::test_create_sops_age_secrets sops \ clan-pytest-with-core> --config /build/tmp12i9y9sa \ clan-pytest-with-core> updatekeys \ clan-pytest-with-core> --yes /build/pytest-kg9ne81h/test_flake_with_core/sops/secrets/charlie_secret_FyAYIdjfMA/secret clan-pytest-with-core> Caller: /build/src/clan_cli/secrets/sops.py:320::sops_run clan-pytest-with-core> clan-pytest-with-core> clan-pytest-with-core> clan_lib/vars/migrations/test_migrate_zerotier.py::TestMigrateZerotier::test_canonical 2026/10/07 11:53:48 Syncing keys for file /build/pytest-kg9ne81h/test_flake_with_core/sops/secrets/charlie_secret_FyAYIdjfMA/secret clan-pytest-with-core> The following changes will be made to the file's groups: clan-pytest-with-core> Group 1 clan-pytest-with-core> age1eyyhln9g3cdwtrwpckugvqgtf5p8ugt0426sw38ra3wkc0t4rfhslq7txv clan-pytest-with-core> age1e9ufa6wrsr5danka50qp0np0832uz7jca7s00wyeg2nt3aqnvaks7p4jfr clan-pytest-with-core> +++ age1n58rxm8y6h9prmwn0qk7nggfsu9f9j4u35dxg7akpkjd5vgsavssfzmq9y clan-pytest-with-core> 2026/10/07 11:53:48 File /build/pytest-kg9ne81h/test_flake_with_core/sops/secrets/charlie_secret_FyAYIdjfMA/secret synced with new keys clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_cli/secrets/sops.py:320::sops_run clan-pytest-with-core> clan-pytest-with-core> sops \ clan-pytest-with-core> --config /build/tmpkulj3p4a \ clan-pytest-with-core> updatekeys \ clan-pytest-with-core> --yes /build/pytest-kg9ne81h/test_flake_with_core/sops/secrets/charlie_secret_HayPnUhJVm/secret clan-pytest-with-core> Caller: /build/src/clan_cli/secrets/sops.py:320::sops_run clan-pytest-with-core> clan-pytest-with-core> 2026/10/07 11:53:48 Syncing keys for file /build/pytest-kg9ne81h/test_flake_with_core/sops/secrets/charlie_secret_HayPnUhJVm/secret clan-pytest-with-core> The following changes will be made to the file's groups: clan-pytest-with-core> Group 1 clan-pytest-with-core> age1eyyhln9g3cdwtrwpckugvqgtf5p8ugt0426sw38ra3wkc0t4rfhslq7txv clan-pytest-with-core> age1e9ufa6wrsr5danka50qp0np0832uz7jca7s00wyeg2nt3aqnvaks7p4jfr clan-pytest-with-core> +++ age1n58rxm8y6h9prmwn0qk7nggfsu9f9j4u35dxg7akpkjd5vgsavssfzmq9y clan-pytest-with-core> 2026/10/07 11:53:48 File /build/pytest-kg9ne81h/test_flake_with_core/sops/secrets/charlie_secret_HayPnUhJVm/secret synced with new keys clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_cli/secrets/sops.py:320::sops_run clan-pytest-with-core> clan-pytest-with-core> sops \ clan-pytest-with-core> --config /build/tmpctu3cb_2 \ clan-pytest-with-core> updatekeys \ clan-pytest-with-core> --yes /build/pytest-kg9ne81h/test_flake_with_core/sops/secrets/charlie_secret_dvEVfnIAjf/secret clan-pytest-with-core> Caller: /build/src/clan_cli/secrets/sops.py:320::sops_run clan-pytest-with-core> clan-pytest-with-core> The following changes will be made to the file's groups: clan-pytest-with-core> Group 1 clan-pytest-with-core> age1eyyhln9g3cdwtrwpckugvqgtf5p8ugt0426sw38ra3wkc0t4rfhslq7txv clan-pytest-with-core> age1e9ufa6wrsr5danka50qp0np0832uz7jca7s00wyeg2nt3aqnvaks7p4jfr clan-pytest-with-core> +++ age1n58rxm8y6h9prmwn0qk7nggfsu9f9j4u35dxg7akpkjd5vgsavssfzmq9y clan-pytest-with-core> 2026/10/07 11:53:48 Syncing keys for file /build/pytest-kg9ne81h/test_flake_with_core/sops/secrets/charlie_secret_dvEVfnIAjf/secret clan-pytest-with-core> 2026/10/07 11:53:48 File /build/pytest-kg9ne81h/test_flake_with_core/sops/secrets/charlie_secret_dvEVfnIAjf/secret synced with new keys clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_cli/secrets/sops.py:320::sops_run clan-pytest-with-core> clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-kg9ne81h/test_flake_with_core \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-kg9ne81h/test_flake_with_core/sops/users/charlie clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:89::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:89::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Adding sops/users/charlie to git clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-kg9ne81h/test_flake_with_core \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-kg9ne81h/test_flake_with_core/sops/secrets/charlie_secret_FyAYIdjfMA/secret clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:89::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:89::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Adding sops/secrets/charlie_secret_FyAYIdjfMA/secret to git clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-kg9ne81h/test_flake_with_core \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-kg9ne81h/test_flake_with_core/sops/secrets/charlie_secret_HayPnUhJVm/secret clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:89::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:89::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Adding sops/secrets/charlie_secret_HayPnUhJVm/secret to git clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-kg9ne81h/test_flake_with_core \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-kg9ne81h/test_flake_with_core/sops/secrets/charlie_secret_dvEVfnIAjf/secret clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:89::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:89::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Adding sops/secrets/charlie_secret_dvEVfnIAjf/secret to git clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-kg9ne81h/test_flake_with_core \ clan-pytest-with-core> diff \ clan-pytest-with-core> --cached --exit-code \ clan-pytest-with-core> -- /build/pytest-kg9ne81h/test_flake_with_core/sops/users/charlie \ clan-pytest-with-core> /build/pytest-kg9ne81h/test_flake_with_core/sops/secrets/charlie_secret_FyAYIdjfMA/secret \ clan-pytest-with-core> /build/pytest-kg9ne81h/test_flake_with_core/sops/secrets/charlie_secret_HayPnUhJVm/secret \ clan-pytest-with-core> /build/pytest-kg9ne81h/test_flake_with_core/sops/secrets/charlie_secret_dvEVfnIAjf/secret clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:111::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 1 clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:111::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-kg9ne81h/test_flake_with_core \ clan-pytest-with-core> commit \ clan-pytest-with-core> -m 'secrets: add key(s) for user charlie' \ clan-pytest-with-core> --no-verify /build/pytest-kg9ne81h/test_flake_with_core/sops/users/charlie \ clan-pytest-with-core> /build/pytest-kg9ne81h/test_flake_with_core/sops/secrets/charlie_secret_FyAYIdjfMA/secret \ clan-pytest-with-core> /build/pytest-kg9ne81h/test_flake_with_core/sops/secrets/charlie_secret_HayPnUhJVm/secret \ clan-pytest-with-core> /build/pytest-kg9ne81h/test_flake_with_core/sops/secrets/charlie_secret_dvEVfnIAjf/secret clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:131::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/git/__init__.py:131::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Committed 4 files to git: sops/users/charlie, sops/secrets/charlie_secret_FyAYIdjfMA/secret, sops/secrets/charlie_secret_HayPnUhJVm/secret, sops/secrets/charlie_secret_dvEVfnIAjf/secret clan-pytest-with-core> clan-pytest-with-core> [gw12] [ 53%] PASSED clan_cli/tests/test_secrets_cli.py::test_multiple_user_keys clan-pytest-with-core> clan_cli/tests/test_install_secret_path.py::test_password_store_upload_directory[custom] clan-pytest-with-core> [gw0] [ 53%] PASSED clan_cli/tests/test_vars_age.py::test_age_incremental_generate_shared_secret clan-pytest-with-core> clan_cli/tests/test_create_flake.py::test_create_flake_with_local_template_reference clan-pytest-with-core> [gw3] [ 54%] PASSED clan_lib/vars/migrations/test_migrate_zerotier.py::TestMigrateZerotier::test_canonical clan-pytest-with-core> clan_lib/vars/migrations/test_migrate_zerotier.py::TestMigrateZerotier::test_idempotent clan-pytest-with-core> [gw0] [ 54%] FAILED clan_cli/tests/test_create_flake.py::test_create_flake_with_local_template_reference clan-pytest-with-core> clan_lib/vars/migrations/test_migrate_zerotier.py::TestMigrateZerotier::test_mixed_state clan-pytest-with-core> [gw7] [ 55%] PASSED clan_cli/ssh/test_deploy_info.py::test_ssh_shell_from_deploy clan-pytest-with-core> clan_lib/vars/migrations/test_migrate_zerotier.py::TestMigrateZerotier::test_legacy clan-pytest-with-core> [gw3] [ 55%] PASSED clan_lib/vars/migrations/test_migrate_zerotier.py::TestMigrateZerotier::test_idempotent clan-pytest-with-core> clan_lib/vars/migrations/test_migrate_zerotier.py::TestMigrateZerotier::test_canonical_shared_only clan-pytest-with-core> [gw0] [ 56%] PASSED clan_lib/vars/migrations/test_migrate_zerotier.py::TestMigrateZerotier::test_mixed_state clan-pytest-with-core> clan_lib/vars/migrations/test_migrate_zerotier.py::TestMigrateZerotier::test_legacy_with_empty_skeletons clan-pytest-with-core> [gw7] [ 56%] PASSED clan_lib/vars/migrations/test_migrate_zerotier.py::TestMigrateZerotier::test_legacy clan-pytest-with-core> clan_lib/vars/migrations/test_migrate_zerotier.py::TestMigrateZerotier::test_old_final_real clan-pytest-with-core> [gw9] [ 56%] PASSED clan_cli/tests/test_vars_shared.py::test_age_fix_keeps_all_recipients_on_shared_deployed_secret clan-pytest-with-core> clan_cli/tests/test_install_secret_path.py::test_sops_install_secret_path[default] clan-pytest-with-core> [gw6] [ 57%] PASSED clan_cli/tests/test_vars_shared.py::test_export_sops_import_age clan-pytest-with-core> clan_cli/tests/test_vars_shared.py::test_export_age_import_sops clan-pytest-with-core> [gw0] [ 57%] PASSED clan_lib/vars/migrations/test_migrate_zerotier.py::TestMigrateZerotier::test_legacy_with_empty_skeletons clan-pytest-with-core> clan_lib/tests/test_create.py::test_clan_create_api clan-pytest-with-core> [gw3] [ 58%] PASSED clan_lib/vars/migrations/test_migrate_zerotier.py::TestMigrateZerotier::test_canonical_shared_only clan-pytest-with-core> clan_lib/tags/list_test.py::test_list_inventory_tags clan-pytest-with-core> [gw7] [ 58%] PASSED clan_lib/vars/migrations/test_migrate_zerotier.py::TestMigrateZerotier::test_old_final_real clan-pytest-with-core> clan_lib/tests/test_inventory_checks.py::test_collect_inventory_checks_empty_when_passing clan-pytest-with-core> [gw5] [ 58%] PASSED clan_cli/tests/test_vars_cache.py::test_generate_secret_var_sops_minimal_select_calls clan-pytest-with-core> clan_cli/tests/test_import_sops_cli.py::test_import_sops clan-pytest-with-core> [gw7] [ 59%] PASSED clan_lib/tests/test_inventory_checks.py::test_collect_inventory_checks_empty_when_passing clan-pytest-with-core> clan_lib/tests/test_inventory_checks.py::test_role_min_machines_fails_in_one_of_two_instances clan-pytest-with-core> [gw7] [ 59%] PASSED clan_lib/tests/test_inventory_checks.py::test_role_min_machines_fails_in_one_of_two_instances clan-pytest-with-core> clan_lib/persist/inventory_store_test.py::test_simple_read_write[1.nix] clan-pytest-with-core> [gw4] [ 60%] PASSED clan_cli/tests/test_vars_cache.py::test_get_generators_only_decrypts_requested_machines clan-pytest-with-core> [gw3] [ 60%] PASSED clan_lib/tags/list_test.py::test_list_inventory_tags clan-pytest-with-core> clan_lib/tests/test_inventory_checks.py::test_role_min_machines_passes_across_instances clan-pytest-with-core> clan_cli/tests/test_hardware_config.py::test_should_prompt_for_hardware_config clan-pytest-with-core> [gw3] [ 60%] PASSED clan_lib/tests/test_inventory_checks.py::test_role_min_machines_passes_across_instances clan-pytest-with-core> [gw4] [ 61%] PASSED clan_cli/tests/test_hardware_config.py::test_should_prompt_for_hardware_config clan-pytest-with-core> clan_lib/persist/inventory_store_test.py::test_manipulate_list[lists.nix] clan-pytest-with-core> clan_lib/persist/inventory_store_test.py::test_static_list_items[lists.nix] clan-pytest-with-core> [gw12] [ 61%] PASSED clan_cli/tests/test_install_secret_path.py::test_password_store_upload_directory[custom] clan-pytest-with-core> clan_lib/vars/migrations/test_migrate_zerotier.py::TestMigrateZerotier::test_multi_network_error clan-pytest-with-core> [gw10] [ 62%] PASSED clan_cli/tests/test_vars_shared.py::test_share_mode_switch_regenerates_secret clan-pytest-with-core> clan_cli/tests/test_vars_shared.py::test_shared_generator_allows_machine_specific_differences clan-pytest-with-core> [gw2] [ 62%] PASSED clan_cli/tests/test_vars_shared.py::test_add_machine_to_existing_shared_secret clan-pytest-with-core> [gw4] [ 63%] PASSED clan_lib/persist/inventory_store_test.py::test_static_list_items[lists.nix] clan-pytest-with-core> clan_lib/machines/actions_test.py::test_list_nixos_machines clan-pytest-with-core> clan_cli/tests/test_hardware_config.py::test_should_prompt_for_facter_update clan-pytest-with-core> [gw2] [ 63%] PASSED clan_cli/tests/test_hardware_config.py::test_should_prompt_for_facter_update clan-pytest-with-core> clan_lib/machines/actions_test.py::test_set_machine_no_op clan-pytest-with-core> [gw11] [ 63%] PASSED clan_cli/tests/test_vars_shared.py::test_shared_vars_regeneration clan-pytest-with-core> clan_cli/tests/test_clan_nix_attrset.py::test_clan_core_templates clan-pytest-with-core> [gw12] [ 64%] PASSED clan_lib/vars/migrations/test_migrate_zerotier.py::TestMigrateZerotier::test_multi_network_error clan-pytest-with-core> clan_lib/machines/actions_test.py::test_list_machines_full clan-pytest-with-core> [gw4] [ 64%] PASSED clan_lib/machines/actions_test.py::test_list_nixos_machines clan-pytest-with-core> clan_lib/machines/actions_test.py::test_list_machines_instance_refs clan-pytest-with-core> [gw12] [ 65%] PASSED clan_lib/machines/actions_test.py::test_list_machines_full clan-pytest-with-core> clan_lib/machines/actions_test.py::test_set_machine_manage_tags clan-pytest-with-core> [gw5] [ 65%] PASSED clan_cli/tests/test_import_sops_cli.py::test_import_sops clan-pytest-with-core> [gw11] [ 65%] PASSED clan_cli/tests/test_clan_nix_attrset.py::test_clan_core_templates clan-pytest-with-core> clan_cli/tests/test_create_flake.py::test_create_flake clan-pytest-with-core> clan_lib/tests/test_known_selectors.py::test_known_selectors_exist clan-pytest-with-core> [gw13] [ 66%] PASSED clan_cli/tests/test_install_secret_path.py::test_sops_install_secret_path[custom] clan-pytest-with-core> [gw4] [ 66%] PASSED clan_lib/machines/actions_test.py::test_list_machines_instance_refs clan-pytest-with-core> clan_lib/machines/actions_test.py::test_get_machine_writeability clan-pytest-with-core> clan_cli/templates/apply_test.py::test_templates_apply_machine_and_disk clan-pytest-with-core> [gw2] [ 67%] PASSED clan_lib/machines/actions_test.py::test_set_machine_no_op clan-pytest-with-core> clan_lib/machines/actions_test.py::test_set_machine_fully_defined_in_nix clan-pytest-with-core> [gw11] [ 67%] FAILED clan_cli/tests/test_create_flake.py::test_create_flake clan-pytest-with-core> clan_lib/flake/flake_cache_test.py::test_flake_caching clan-pytest-with-core> [gw7] [ 68%] PASSED clan_lib/persist/inventory_store_test.py::test_simple_read_write[1.nix] clan-pytest-with-core> clan_lib/persist/inventory_store_test.py::test_simple_deferred[deferred.nix] clan-pytest-with-core> [gw2] [ 68%] PASSED clan_lib/machines/actions_test.py::test_set_machine_fully_defined_in_nix clan-pytest-with-core> clan_lib/flake/flake_cache_test.py::test_get_nonexistent_after_maybe clan-pytest-with-core> [gw8] [ 68%] PASSED clan_cli/tests/test_vars_shared.py::test_cross_machine_shared_dependency clan-pytest-with-core> clan_cli/tests/test_install_secret_path.py::test_password_store_upload_directory[default] clan-pytest-with-core> [gw2] [ 69%] PASSED clan_lib/flake/flake_cache_test.py::test_get_nonexistent_after_maybe clan-pytest-with-core> clan_lib/flash/test_list.py::test_flash_config clan-pytest-with-core> [gw3] [ 69%] PASSED clan_lib/persist/inventory_store_test.py::test_manipulate_list[lists.nix] clan-pytest-with-core> clan_lib/persist/write_rules_test.py::test_write_integration clan-pytest-with-core> [gw13] [ 70%] PASSED clan_cli/templates/apply_test.py::test_templates_apply_machine_and_disk clan-pytest-with-core> clan_lib/flake/flake_cache_test.py::test_cache_gc clan-pytest-with-core> [gw12] [ 70%] PASSED clan_lib/machines/actions_test.py::test_set_machine_manage_tags clan-pytest-with-core> clan_lib/machines/actions_test.py::test_machine_state clan-pytest-with-core> [gw3] [ 70%] PASSED clan_lib/persist/write_rules_test.py::test_write_integration clan-pytest-with-core> clan_lib/dirs/dirs_test.py::test_get_clan_directories_invalid_flake clan-pytest-with-core> [gw3] [ 71%] PASSED clan_lib/dirs/dirs_test.py::test_get_clan_directories_invalid_flake clan-pytest-with-core> clan_lib/clan/check_test.py::test_check_clan_valid clan-pytest-with-core> [gw4] [ 71%] PASSED clan_lib/machines/actions_test.py::test_get_machine_writeability clan-pytest-with-core> clan_lib/flake/flake_cache_test.py::test_caching_works clan-pytest-with-core> [gw13] [ 72%] PASSED clan_lib/flake/flake_cache_test.py::test_cache_gc clan-pytest-with-core> clan_lib/dirs/dirs_test.py::test_get_clan_directories_with_direct_directory_config clan-pytest-with-core> [gw4] [ 72%] PASSED clan_lib/flake/flake_cache_test.py::test_caching_works clan-pytest-with-core> clan_lib/clan/get_test.py::test_get_clan_details clan-pytest-with-core> [gw12] [ 73%] PASSED clan_lib/machines/actions_test.py::test_machine_state clan-pytest-with-core> clan_lib/docs_test.py::test_guides_url_pages_exist clan-pytest-with-core> [gw4] [ 73%] PASSED clan_lib/clan/get_test.py::test_get_clan_details clan-pytest-with-core> clan_lib/clan/test_create.py::test_can_handle_path_without_slash clan-pytest-with-core> [gw12] [ 73%] PASSED clan_lib/docs_test.py::test_guides_url_pages_exist clan-pytest-with-core> clan_lib/clan/test_create.py::test_create_with_name clan-pytest-with-core> [gw15] [ 74%] PASSED clan_cli/tests/test_vars_shared.py::test_import_survives_generate clan-pytest-with-core> clan_cli/tests/test_backups.py::test_backups clan-pytest-with-core> [gw3] [ 74%] PASSED clan_lib/clan/check_test.py::test_check_clan_valid clan-pytest-with-core> clan_lib/clan/get_test.py::test_get_clan_details_invalid_flake clan-pytest-with-core> [gw11] [ 75%] PASSED clan_lib/flake/flake_cache_test.py::test_flake_caching clan-pytest-with-core> clan_lib/flake/flake_test.py::test_conditional_all_selector clan-pytest-with-core> [gw3] [ 75%] PASSED clan_lib/clan/get_test.py::test_get_clan_details_invalid_flake clan-pytest-with-core> clan_lib/clan/test_create.py::test_default_uses_age_backend_with_recipients[recipients1] clan-pytest-with-core> [gw14] [ 75%] PASSED clan_cli/tests/test_vars_prompts.py::test_prompt_prefill_on_regeneration clan-pytest-with-core> [gw13] [ 76%] PASSED clan_lib/dirs/dirs_test.py::test_get_clan_directories_with_direct_directory_config clan-pytest-with-core> clan_cli/tests/test_vars_shared.py::test_sops_fix_skips_add_for_no_deploy_shared_secret clan-pytest-with-core> clan_lib/clan/test_create.py::test_create_simple clan-pytest-with-core> [gw4] [ 76%] PASSED clan_lib/clan/test_create.py::test_can_handle_path_without_slash clan-pytest-with-core> clan_lib/clan/test_create.py::test_create_substitutes_placeholders[default] clan-pytest-with-core> [gw5] [ 77%] PASSED clan_lib/tests/test_known_selectors.py::test_known_selectors_exist clan-pytest-with-core> clan_lib/flake/flake_cache_test.py::test_cache_persistence clan-pytest-with-core> [gw13] [ 77%] PASSED clan_lib/clan/test_create.py::test_create_simple clan-pytest-with-core> clan_lib/clan/test_create.py::test_default_cant_be_modified_by_api clan-pytest-with-core> [gw4] [ 78%] PASSED clan_lib/clan/test_create.py::test_create_substitutes_placeholders[default] clan-pytest-with-core> clan_lib/clan/test_create.py::test_create_invalid_name clan-pytest-with-core> [gw4] [ 78%] PASSED clan_lib/clan/test_create.py::test_create_invalid_name clan-pytest-with-core> clan_lib/api/directory_settings_test.py::test_secrets_users_list_with_directory_setting clan-pytest-with-core> [gw11] [ 78%] PASSED clan_lib/flake/flake_test.py::test_conditional_all_selector clan-pytest-with-core> clan_lib/clan/test_create.py::test_default_uses_age_backend_with_recipients[recipients2] clan-pytest-with-core> [gw1] [ 79%] PASSED clan_cli/tests/test_vars_generate.py::test_generate_public_and_secret_vars clan-pytest-with-core> clan_cli/tests/test_vars_shared.py::test_generate_removes_stale_machine_symlink_when_deploy_becomes_false clan-pytest-with-core> [gw3] [ 79%] PASSED clan_lib/clan/test_create.py::test_default_uses_age_backend_with_recipients[recipients1] clan-pytest-with-core> clan_lib/clan/test_create.py::test_minimal_can_be_modified_by_api clan-pytest-with-core> [gw12] [ 80%] PASSED clan_lib/clan/test_create.py::test_create_with_name clan-pytest-with-core> clan_lib/clan/test_create.py::test_create_substitutes_placeholders[minimal] clan-pytest-with-core> [gw13] [ 80%] PASSED clan_lib/clan/test_create.py::test_default_cant_be_modified_by_api clan-pytest-with-core> clan_lib/api/directory_settings_test.py::test_secrets_users_with_directory_setting clan-pytest-with-core> [gw10] [ 80%] PASSED clan_cli/tests/test_vars_shared.py::test_shared_generator_allows_machine_specific_differences clan-pytest-with-core> clan_lib/machines/actions_test.py::test_list_inventory_machines clan-pytest-with-core> [gw4] [ 81%] PASSED clan_lib/api/directory_settings_test.py::test_secrets_users_list_with_directory_setting clan-pytest-with-core> clan_lib/api/directory_settings_test.py::test_secrets_machines_with_directory_setting clan-pytest-with-core> [gw7] [ 81%] PASSED clan_lib/persist/inventory_store_test.py::test_simple_deferred[deferred.nix] clan-pytest-with-core> clan_lib/flash/test_list.py::test_language_list clan-pytest-with-core> [gw7] [ 82%] PASSED clan_lib/flash/test_list.py::test_language_list clan-pytest-with-core> clan_lib/api/directory_settings_test.py::test_vars_generate_age_with_directory_setting clan-pytest-with-core> [gw11] [ 82%] PASSED clan_lib/clan/test_create.py::test_default_uses_age_backend_with_recipients[recipients2] clan-pytest-with-core> clan_lib/api/directory_settings_test.py::test_secrets_set_with_directory_setting clan-pytest-with-core> [gw13] [ 82%] PASSED clan_lib/api/directory_settings_test.py::test_secrets_users_with_directory_setting clan-pytest-with-core> clan_lib/api/directory_settings_test.py::test_secrets_remove_with_directory_setting clan-pytest-with-core> [gw9] [ 83%] PASSED clan_cli/tests/test_install_secret_path.py::test_sops_install_secret_path[default] clan-pytest-with-core> clan_lib/tests/test_inventory_checks.py::test_collect_inventory_checks_reports_error clan-pytest-with-core> [gw4] [ 83%] PASSED clan_lib/api/directory_settings_test.py::test_secrets_machines_with_directory_setting clan-pytest-with-core> clan_lib/api/directory_settings_test.py::test_vars_generate_with_directory_setting clan-pytest-with-core> [gw3] [ 84%] PASSED clan_lib/clan/test_create.py::test_minimal_can_be_modified_by_api clan-pytest-with-core> clan_lib/api/directory_settings_test.py::test_secrets_list_with_directory_setting clan-pytest-with-core> [gw10] [ 84%] PASSED clan_lib/machines/actions_test.py::test_list_inventory_machines clan-pytest-with-core> clan_lib/api/directory_settings_test.py::test_secrets_key_generate_with_directory_setting clan-pytest-with-core> [gw11] [ 85%] PASSED clan_lib/api/directory_settings_test.py::test_secrets_set_with_directory_setting clan-pytest-with-core> clan_lib/api/directory_test.py::test_get_relative_clan_directory_custom clan-pytest-with-core> [gw8] [ 85%] PASSED clan_cli/tests/test_install_secret_path.py::test_password_store_upload_directory[default] clan-pytest-with-core> clan_lib/flash/test_list.py::test_list_keymaps clan-pytest-with-core> [gw10] [ 85%] PASSED clan_lib/api/directory_settings_test.py::test_secrets_key_generate_with_directory_setting clan-pytest-with-core> clan_lib/services/modules_test.py::test_get_service_readmes clan-pytest-with-core> [gw11] [ 86%] PASSED clan_lib/api/directory_test.py::test_get_relative_clan_directory_custom clan-pytest-with-core> clan_lib/services/modules_test.py::test_list_service_modules clan-pytest-with-core> [gw8] [ 86%] PASSED clan_lib/flash/test_list.py::test_list_keymaps clan-pytest-with-core> [gw9] [ 87%] PASSED clan_lib/tests/test_inventory_checks.py::test_collect_inventory_checks_reports_error clan-pytest-with-core> clan_lib/services/modules_test.py::test_update_service_instance clan-pytest-with-core> clan_lib/api/directory_test.py::test_get_clan_dir_default clan-pytest-with-core> [gw15] [ 87%] PASSED clan_cli/tests/test_backups.py::test_backups clan-pytest-with-core> [gw13] [ 87%] PASSED clan_lib/api/directory_settings_test.py::test_secrets_remove_with_directory_setting clan-pytest-with-core> clan_lib/api/directory_test.py::test_get_relative_clan_directory_invalid_flake clan-pytest-with-core> clan_lib/clan/test_create.py::test_default_uses_age_backend_with_recipients[recipients0] clan-pytest-with-core> [gw13] [ 88%] PASSED clan_lib/api/directory_test.py::test_get_relative_clan_directory_invalid_flake clan-pytest-with-core> [gw9] [ 88%] PASSED clan_lib/api/directory_test.py::test_get_clan_dir_default clan-pytest-with-core> [gw3] [ 89%] PASSED clan_lib/api/directory_settings_test.py::test_secrets_list_with_directory_setting clan-pytest-with-core> clan_lib/services/modules_test.py::test_list_service_instances clan-pytest-with-core> [gw10] [ 89%] PASSED clan_lib/services/modules_test.py::test_get_service_readmes clan-pytest-with-core> clan_lib/services/modules_test.py::test_delete_service_instance clan-pytest-with-core> [gw15] [ 90%] PASSED clan_lib/clan/test_create.py::test_default_uses_age_backend_with_recipients[recipients0] clan-pytest-with-core> [gw5] [ 90%] PASSED clan_lib/flake/flake_cache_test.py::test_cache_persistence clan-pytest-with-core> clan_lib/api/directory_settings_test.py::test_vars_keygen_with_directory_setting clan-pytest-with-core> [gw5] [ 90%] PASSED clan_lib/api/directory_settings_test.py::test_vars_keygen_with_directory_setting clan-pytest-with-core> [gw3] [ 91%] PASSED clan_lib/services/modules_test.py::test_list_service_instances clan-pytest-with-core> [gw10] [ 91%] PASSED clan_lib/services/modules_test.py::test_delete_service_instance clan-pytest-with-core> [gw7] [ 92%] PASSED clan_lib/api/directory_settings_test.py::test_vars_generate_age_with_directory_setting clan-pytest-with-core> clan_lib/api/directory_test.py::test_get_relative_clan_directory_default clan-pytest-with-core> [gw7] [ 92%] PASSED clan_lib/api/directory_test.py::test_get_relative_clan_directory_default clan-pytest-with-core> [gw14] [ 92%] PASSED clan_cli/tests/test_vars_shared.py::test_sops_fix_skips_add_for_no_deploy_shared_secret clan-pytest-with-core> clan_cli/tests/test_vars_shared.py::test_sops_set_shared_var_for_multiple_machines clan-pytest-with-core> [gw8] [ 93%] PASSED clan_lib/services/modules_test.py::test_update_service_instance clan-pytest-with-core> clan_lib/services/modules_test.py::test_inline_extra_modules clan-pytest-with-core> [gw4] [ 93%] PASSED clan_lib/api/directory_settings_test.py::test_vars_generate_with_directory_setting clan-pytest-with-core> clan_lib/api/directory_test.py::test_get_clan_dir_custom clan-pytest-with-core> [gw4] [ 94%] PASSED clan_lib/api/directory_test.py::test_get_clan_dir_custom clan-pytest-with-core> [gw8] [ 94%] PASSED clan_lib/services/modules_test.py::test_inline_extra_modules clan-pytest-with-core> [gw1] [ 95%] PASSED clan_cli/tests/test_vars_shared.py::test_generate_removes_stale_machine_symlink_when_deploy_becomes_false clan-pytest-with-core> clan_cli/tests/test_vars_shared.py::test_sops_fix_removes_machine_from_no_deploy_shared_secret clan-pytest-with-core> [gw6] [ 95%] PASSED clan_cli/tests/test_vars_shared.py::test_export_age_import_sops clan-pytest-with-core> clan_lib/tests/test_inventory_checks.py::test_collect_inventory_checks_role_max_machines clan-pytest-with-core> [gw6] [ 95%] PASSED clan_lib/tests/test_inventory_checks.py::test_collect_inventory_checks_role_max_machines clan-pytest-with-core> [gw12] [ 96%] PASSED clan_lib/clan/test_create.py::test_create_substitutes_placeholders[minimal] clan-pytest-with-core> clan_lib/api/directory_settings_test.py::test_secrets_groups_with_directory_setting clan-pytest-with-core> [gw12] [ 96%] PASSED clan_lib/api/directory_settings_test.py::test_secrets_groups_with_directory_setting clan-pytest-with-core> [gw1] [ 97%] PASSED clan_cli/tests/test_vars_shared.py::test_sops_fix_removes_machine_from_no_deploy_shared_secret clan-pytest-with-core> [gw11] [ 97%] PASSED clan_lib/services/modules_test.py::test_list_service_modules clan-pytest-with-core> clan_lib/services/modules_test.py::test_delete_static_service_instance clan-pytest-with-core> [gw11] [ 97%] PASSED clan_lib/services/modules_test.py::test_delete_static_service_instance clan-pytest-with-core> [gw14] [ 98%] PASSED clan_cli/tests/test_vars_shared.py::test_sops_set_shared_var_for_multiple_machines clan-pytest-with-core> [gw2] [ 98%] PASSED clan_lib/flash/test_list.py::test_flash_config clan-pytest-with-core> clan_lib/dirs/dirs_test.py::test_get_clan_directories_default clan-pytest-with-core> [gw2] [ 99%] PASSED clan_lib/dirs/dirs_test.py::test_get_clan_directories_default clan-pytest-with-core> [gw0] [ 99%] PASSED clan_lib/tests/test_create.py::test_clan_create_api clan-pytest-with-core> clan_lib/tests/test_inventory_checks.py::test_role_max_machines_passes_across_instances clan-pytest-with-core> [gw0] [100%] PASSED clan_lib/tests/test_inventory_checks.py::test_role_max_machines_passes_across_instances clan-pytest-with-core> clan-pytest-with-core> =================================== FAILURES =================================== clan-pytest-with-core> __________________________________ test_init ___________________________________ clan-pytest-with-core> [gw1] linux -- Python 3.14.7 /nix/store/lb41b0anx1f98y9y5s9mdv97gjgsq740-python3-3.14.7/bin/python clan-pytest-with-core> clan-pytest-with-core> self = Flake(identifier='/build/pytest-hjqh2hpv/test-flake', hash='sha256-rXK3We9RTnWzaRv8mQbna5DDac6JUiZEZ2q5JADep4s=', stor...src/clan_lib/flake/flake.py", line 833, in _record_cache_miss\n stack_trace = "".join(traceback.format_stack())\n']) clan-pytest-with-core> selectors = ['clanInternals.vars.settings.secretStore'] clan-pytest-with-core> clan-pytest-with-core> def get_from_nix( clan-pytest-with-core> self, clan-pytest-with-core> selectors: list[str], clan-pytest-with-core> ) -> None: clan-pytest-with-core> """Retrieves specific attributes from a Nix flake using the provided selectors. clan-pytest-with-core> clan-pytest-with-core> This function interacts with the Nix build system to fetch and process clan-pytest-with-core> attributes from a flake. It uses the provided selectors to determine which clan-pytest-with-core> attributes to retrieve and optionally accepts additional Nix options for clan-pytest-with-core> customization. The results are cached for future use. clan-pytest-with-core> Used mostly as a lowlevel function for `precache` and `select` methods. clan-pytest-with-core> clan-pytest-with-core> Args: clan-pytest-with-core> selectors (list[str]): A list of attribute selectors to fetch from the flake. clan-pytest-with-core> nix_options (list[str] | None): Optional additional options to pass to the Nix build command. clan-pytest-with-core> clan-pytest-with-core> Raises: clan-pytest-with-core> ClanError: If the number of outputs does not match the number of selectors. clan-pytest-with-core> AssertionError: If the cache or flake cache path is not properly initialized. clan-pytest-with-core> clan-pytest-with-core> """ clan-pytest-with-core> if self._cache is None: clan-pytest-with-core> self.invalidate_cache() clan-pytest-with-core> if self._cache is None: clan-pytest-with-core> msg = "Cache cannot be None after invalidation" clan-pytest-with-core> raise ClanError(msg) clan-pytest-with-core> clan-pytest-with-core> nix_options = self.nix_options[:] if self.nix_options is not None else [] clan-pytest-with-core> clan-pytest-with-core> str_selectors = [ clan-pytest-with-core> selectors_as_json(parse_selector(selector)) for selector in selectors clan-pytest-with-core> ] clan-pytest-with-core> clan-pytest-with-core> config = nix_config() clan-pytest-with-core> clan-pytest-with-core> select_hash = "sha256-yxcNOha7Cfv2nhVpz9ZXSNKk0R7wt4AiBklJ8D24rVg=" clan-pytest-with-core> if not select_hash.startswith("sha256-"): clan-pytest-with-core> select_flake = Flake(str(select_source()), nix_options=nix_options) clan-pytest-with-core> select_flake.invalidate_cache() clan-pytest-with-core> if select_flake.hash is None: clan-pytest-with-core> msg = "this should be impossible as invalidate_cache() should always set `hash`" clan-pytest-with-core> raise ClanError(msg) clan-pytest-with-core> select_hash = select_flake.hash clan-pytest-with-core> clan-pytest-with-core> # fmt: off clan-pytest-with-core> nix_code = f""" clan-pytest-with-core> let clan-pytest-with-core> flake = builtins.getFlake "path:{self.store_path}?narHash={self.hash}"; clan-pytest-with-core> selectLib = ( clan-pytest-with-core> builtins.getFlake clan-pytest-with-core> "path:{select_source()}?narHash={select_hash}" clan-pytest-with-core> ).lib; clan-pytest-with-core> in clan-pytest-with-core> derivation {{ clan-pytest-with-core> name = "clan-flake-select"; clan-pytest-with-core> result = builtins.toJSON [ clan-pytest-with-core> {" ".join( clan-pytest-with-core> [ clan-pytest-with-core> f"(selectLib.applySelectors (builtins.fromJSON ''{attr}'') flake)" clan-pytest-with-core> for attr in str_selectors clan-pytest-with-core> ] clan-pytest-with-core> )} clan-pytest-with-core> ]; clan-pytest-with-core> clan-pytest-with-core> # We can always build this derivation locally, since /bin/sh is system independent, clan-pytest-with-core> # remote builders would introduce needless overhead. clan-pytest-with-core> preferLocalBuild = true; clan-pytest-with-core> # Save the roundtrip to check the binary caches for trivial substitutions clan-pytest-with-core> allowSubstitutes = false; clan-pytest-with-core> clan-pytest-with-core> passAsFile = [ "result" ]; clan-pytest-with-core> system = "{config["system"]}"; clan-pytest-with-core> builder = "/bin/sh"; clan-pytest-with-core> args = [ clan-pytest-with-core> "-c" clan-pytest-with-core> '' clan-pytest-with-core> read -r x < "$resultPath"; printf %s "$x" > $out clan-pytest-with-core> '' clan-pytest-with-core> ]; clan-pytest-with-core> }} clan-pytest-with-core> """ clan-pytest-with-core> trace = os.environ.get("CLAN_DEBUG_NIX_SELECTORS") == "1" clan-pytest-with-core> try: clan-pytest-with-core> build_output = Path( clan-pytest-with-core> > run( clan-pytest-with-core> nix_build(["--expr", nix_code, *nix_options]), clan-pytest-with-core> RunOpts(log=Log.NONE, trace=trace), clan-pytest-with-core> ).stdout.strip(), clan-pytest-with-core> ) clan-pytest-with-core> clan-pytest-with-core> /build/src/clan_lib/flake/flake.py:1076: clan-pytest-with-core> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ clan-pytest-with-core> clan-pytest-with-core> cmd = ['nix', '--extra-experimental-features', 'nix-command flakes', '--option', 'warn-dirty', 'false', ...] clan-pytest-with-core> options = RunOpts(input=None, stdout=None, stderr=None, env=None, cwd=PosixPath('/build/pytest-hjqh2hpv'), log=, pr...al=False, timeout=inf, shell=False, requires_root_perm=False, graphical_perm=False, trace=False, sensitive_input=False) clan-pytest-with-core> clan-pytest-with-core> def run( clan-pytest-with-core> cmd: list[str], clan-pytest-with-core> options: RunOpts | None = None, clan-pytest-with-core> ) -> CmdOut: clan-pytest-with-core> if options is None: clan-pytest-with-core> options = RunOpts() clan-pytest-with-core> if options.cwd is None: clan-pytest-with-core> options.cwd = Path.cwd() clan-pytest-with-core> clan-pytest-with-core> async_ctx = get_async_ctx() clan-pytest-with-core> # Fill in the options from the thread-local data clan-pytest-with-core> # if they are not set in the options clan-pytest-with-core> if async_ctx: clan-pytest-with-core> if options.prefix is None: clan-pytest-with-core> options.prefix = async_ctx.prefix clan-pytest-with-core> if options.stdout is None: clan-pytest-with-core> options.stdout = async_ctx.stdout clan-pytest-with-core> if options.stderr is None: clan-pytest-with-core> options.stderr = async_ctx.stderr clan-pytest-with-core> clan-pytest-with-core> if options.requires_root_perm: clan-pytest-with-core> cmd = cmd_with_root(cmd, options.graphical_perm) clan-pytest-with-core> # Use our sudo ask proxy here as well clan-pytest-with-core> options.needs_user_terminal = True clan-pytest-with-core> clan-pytest-with-core> if cmdlog.isEnabledFor(logging.DEBUG) and options.trace: clan-pytest-with-core> if options.input and isinstance(options.input, bytes): clan-pytest-with-core> # Always redact sensitive input (e.g., private keys, passwords) clan-pytest-with-core> if options.sensitive_input: clan-pytest-with-core> filtered_input = "<>" clan-pytest-with-core> elif any( clan-pytest-with-core> not ch.isprintable() for ch in options.input.decode("ascii", "replace") clan-pytest-with-core> ): clan-pytest-with-core> filtered_input = "<>" clan-pytest-with-core> else: clan-pytest-with-core> filtered_input = options.input.decode("ascii", "replace") clan-pytest-with-core> clan-pytest-with-core> print_trace( clan-pytest-with-core> f"echo '{filtered_input}' | {indent_command(cmd)}", clan-pytest-with-core> cmdlog, clan-pytest-with-core> options.prefix, clan-pytest-with-core> ) clan-pytest-with-core> else: clan-pytest-with-core> print_trace(f"{indent_command(cmd)}", cmdlog, options.prefix) clan-pytest-with-core> clan-pytest-with-core> start = timeit.default_timer() clan-pytest-with-core> with ExitStack() as stack: clan-pytest-with-core> stdin = subprocess.PIPE if isinstance(options.input, bytes) else options.input clan-pytest-with-core> process = stack.enter_context( clan-pytest-with-core> subprocess.Popen( clan-pytest-with-core> cmd, clan-pytest-with-core> cwd=str(options.cwd), clan-pytest-with-core> env=options.env, clan-pytest-with-core> stdin=stdin, clan-pytest-with-core> stdout=subprocess.PIPE, clan-pytest-with-core> stderr=subprocess.PIPE, clan-pytest-with-core> start_new_session=not options.needs_user_terminal, clan-pytest-with-core> shell=options.shell, clan-pytest-with-core> ), clan-pytest-with-core> ) clan-pytest-with-core> clan-pytest-with-core> if options.needs_user_terminal: clan-pytest-with-core> # we didn't allocate a new session, so we can't terminate the process group clan-pytest-with-core> stack.enter_context(terminate_process(process)) clan-pytest-with-core> else: clan-pytest-with-core> stack.enter_context(terminate_process_group(process)) clan-pytest-with-core> clan-pytest-with-core> input_bytes = options.input if isinstance(options.input, bytes) else None clan-pytest-with-core> clan-pytest-with-core> stdout_buf, stderr_buf, stdout_raw = handle_io( clan-pytest-with-core> process, clan-pytest-with-core> options.log, clan-pytest-with-core> prefix=options.prefix, clan-pytest-with-core> msg_color=options.msg_color, clan-pytest-with-core> timeout=options.timeout, clan-pytest-with-core> input_bytes=input_bytes, clan-pytest-with-core> stdout=options.stdout, clan-pytest-with-core> stderr=options.stderr, clan-pytest-with-core> cmd=cmd, clan-pytest-with-core> cwd=options.cwd, clan-pytest-with-core> env=options.env, clan-pytest-with-core> ) clan-pytest-with-core> if not is_async_cancelled(): clan-pytest-with-core> process.wait() clan-pytest-with-core> clan-pytest-with-core> if TIME_TABLE: clan-pytest-with-core> TIME_TABLE.add(shlex.join(cmd), timeit.default_timer() - start) clan-pytest-with-core> clan-pytest-with-core> # Wait for the subprocess to finish clan-pytest-with-core> cmd_out = CmdOut( clan-pytest-with-core> stdout=stdout_buf, clan-pytest-with-core> stderr=stderr_buf, clan-pytest-with-core> cwd=options.cwd, clan-pytest-with-core> env=options.env, clan-pytest-with-core> command_list=cmd, clan-pytest-with-core> returncode=process.returncode, clan-pytest-with-core> msg=options.error_msg, clan-pytest-with-core> stdout_raw=stdout_raw, clan-pytest-with-core> ) clan-pytest-with-core> clan-pytest-with-core> if cmdlog.isEnabledFor(logging.DEBUG) and options.trace: clan-pytest-with-core> print_trace( clan-pytest-with-core> f"Command exited with return code {process.returncode}", clan-pytest-with-core> cmdlog, clan-pytest-with-core> options.prefix, clan-pytest-with-core> ) clan-pytest-with-core> clan-pytest-with-core> if options.check and process.returncode != 0: clan-pytest-with-core> if is_async_cancelled(): clan-pytest-with-core> cmd_out.msg = "Command cancelled" clan-pytest-with-core> > raise ClanCmdError(cmd_out) clan-pytest-with-core> E clan_lib.errors.ClanCmdError: clan-pytest-with-core> E =================================== Command ==================================== clan-pytest-with-core> E nix \ clan-pytest-with-core> E --extra-experimental-features 'nix-command flakes' \ clan-pytest-with-core> E --option warn-dirty \ clan-pytest-with-core> E false \ clan-pytest-with-core> E build \ clan-pytest-with-core> E --flake-registry '' \ clan-pytest-with-core> E --print-out-paths --print-build-logs \ clan-pytest-with-core> E --show-trace --no-link \ clan-pytest-with-core> E --expr ' clan-pytest-with-core> E let clan-pytest-with-core> E flake = builtins.getFlake "path:/nix/store/44rmmqxk5rgbc7jpzyc88hdhxg4a4dwd-source?narHash=sha256-rXK3We9RTnWzaRv8mQbna5DDac6JUiZEZ2q5JADep4s="; clan-pytest-with-core> E selectLib = ( clan-pytest-with-core> E builtins.getFlake clan-pytest-with-core> E "path:/nix/store/cba1x9mxnwr8b36cw41bya7g6d5v1p7d-source?narHash=sha256-yxcNOha7Cfv2nhVpz9ZXSNKk0R7wt4AiBklJ8D24rVg=" clan-pytest-with-core> E ).lib; clan-pytest-with-core> E in clan-pytest-with-core> E derivation { clan-pytest-with-core> E name = "clan-flake-select"; clan-pytest-with-core> E result = builtins.toJSON [ clan-pytest-with-core> E (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "secretStore"}]'"'"''"'"') flake) clan-pytest-with-core> E ]; clan-pytest-with-core> E clan-pytest-with-core> E # We can always build this derivation locally, since /bin/sh is system independent, clan-pytest-with-core> E # remote builders would introduce needless overhead. clan-pytest-with-core> E preferLocalBuild = true; clan-pytest-with-core> E # Save the roundtrip to check the binary caches for trivial substitutions clan-pytest-with-core> E allowSubstitutes = false; clan-pytest-with-core> E clan-pytest-with-core> E passAsFile = [ "result" ]; clan-pytest-with-core> E system = "x86_64-linux"; clan-pytest-with-core> E builder = "/bin/sh"; clan-pytest-with-core> E args = [ clan-pytest-with-core> E "-c" clan-pytest-with-core> E '"'"''"'"' clan-pytest-with-core> E read -r x < "$resultPath"; printf %s "$x" > $out clan-pytest-with-core> E '"'"''"'"' clan-pytest-with-core> E ]; clan-pytest-with-core> E } clan-pytest-with-core> E ' \ clan-pytest-with-core> E --store /build/store clan-pytest-with-core> E clan-pytest-with-core> E ==================================== Stderr ==================================== clan-pytest-with-core> E warning: you don't have Internet access; disabling some network-dependent features clan-pytest-with-core> E error: clan-pytest-with-core> E … while calling the 'derivationStrict' builtin clan-pytest-with-core> E at :37:12: clan-pytest-with-core> E 36| clan-pytest-with-core> E 37| strict = derivationStrict drvAttrs; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 38| clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating derivation 'clan-flake-select' clan-pytest-with-core> E whose name attribute is located at «string»:10:17 clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating attribute 'result' of derivation 'clan-flake-select' clan-pytest-with-core> E at «string»:11:17: clan-pytest-with-core> E 10| name = "clan-flake-select"; clan-pytest-with-core> E 11| result = builtins.toJSON [ clan-pytest-with-core> E | ^ clan-pytest-with-core> E 12| (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "secretStore"}]'') flake) clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'toJSON' builtin clan-pytest-with-core> E at «string»:11:26: clan-pytest-with-core> E 10| name = "clan-flake-select"; clan-pytest-with-core> E 11| result = builtins.toJSON [ clan-pytest-with-core> E | ^ clan-pytest-with-core> E 12| (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "secretStore"}]'') flake) clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating list element at index 0 clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at «string»:12:22: clan-pytest-with-core> E 11| result = builtins.toJSON [ clan-pytest-with-core> E 12| (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "secretStore"}]'') flake) clan-pytest-with-core> E | ^ clan-pytest-with-core> E 13| ]; clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'applySelectors' clan-pytest-with-core> E at /build/store/nix/store/cba1x9mxnwr8b36cw41bya7g6d5v1p7d-source/select.nix:262:16: clan-pytest-with-core> E 261| applySelectors = clan-pytest-with-core> E 262| selectors: obj: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 263| let clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/cba1x9mxnwr8b36cw41bya7g6d5v1p7d-source/select.nix:352:5: clan-pytest-with-core> E 351| in clan-pytest-with-core> E 352| recurse selectors 0 obj; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 353| clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'recurse' clan-pytest-with-core> E at /build/store/nix/store/cba1x9mxnwr8b36cw41bya7g6d5v1p7d-source/select.nix:265:25: clan-pytest-with-core> E 264| recurse = clan-pytest-with-core> E 265| selectors: idx: obj: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 266| # we are done clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating a branch condition clan-pytest-with-core> E at /build/store/nix/store/cba1x9mxnwr8b36cw41bya7g6d5v1p7d-source/select.nix:281:11: clan-pytest-with-core> E 280| # lists clan-pytest-with-core> E 281| if builtins.isList obj then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 282| if selector.type == "all" then clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'isList' builtin clan-pytest-with-core> E at /build/store/nix/store/cba1x9mxnwr8b36cw41bya7g6d5v1p7d-source/select.nix:281:14: clan-pytest-with-core> E 280| # lists clan-pytest-with-core> E 281| if builtins.isList obj then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 282| if selector.type == "all" then clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'getFlake' builtin clan-pytest-with-core> E at «string»:3:23: clan-pytest-with-core> E 2| let clan-pytest-with-core> E 3| flake = builtins.getFlake "path:/nix/store/44rmmqxk5rgbc7jpzyc88hdhxg4a4dwd-source?narHash=sha256-rXK3We9RTnWzaRv8mQbna5DDac6JUiZEZ2q5JADep4s="; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 4| selectLib = ( clan-pytest-with-core> E clan-pytest-with-core> E … while updating the lock file of flake 'path:/nix/store/44rmmqxk5rgbc7jpzyc88hdhxg4a4dwd-source?lastModified=0&narHash=sha256-rXK3We9RTnWzaRv8mQbna5DDac6JUiZEZ2q5JADep4s%3D' clan-pytest-with-core> E clan-pytest-with-core> E … while updating the flake input 'clan-core' clan-pytest-with-core> E clan-pytest-with-core> E error: cannot update unlocked flake input 'clan-core' in pure mode clan-pytest-with-core> E clan-pytest-with-core> E Return Code: 1 clan-pytest-with-core> clan-pytest-with-core> /build/src/clan_lib/cmd/__init__.py:451: ClanCmdError clan-pytest-with-core> clan-pytest-with-core> The above exception was the direct cause of the following exception: clan-pytest-with-core> clan-pytest-with-core> monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7fffe2b13230> clan-pytest-with-core> temporary_home = PosixPath('/build/pytest-hjqh2hpv') clan-pytest-with-core> clan_core = PosixPath('/nix/store/c4gps8k2ky7ix7h6cgr1ss6pflxcsxmg-clan-core-flake') clan-pytest-with-core> capture_output = clan-pytest-with-core> patch_get_clan_details = .get_clan_details at 0x7fffe2158f60> clan-pytest-with-core> clan-pytest-with-core> @pytest.mark.broken_on_darwin clan-pytest-with-core> @pytest.mark.with_core clan-pytest-with-core> def test_init( clan-pytest-with-core> monkeypatch: pytest.MonkeyPatch, clan-pytest-with-core> temporary_home: Path, clan-pytest-with-core> clan_core: Path, clan-pytest-with-core> capture_output: CaptureOutput, clan-pytest-with-core> patch_get_clan_details: Any, # noqa: ARG001 clan-pytest-with-core> ) -> None: clan-pytest-with-core> flake_dir = temporary_home / "test-flake" clan-pytest-with-core> clan-pytest-with-core> monkeypatch.setenv("LOGNAME", "testuser") clan-pytest-with-core> clan-pytest-with-core> > cli.run( clan-pytest-with-core> [ clan-pytest-with-core> "init", clan-pytest-with-core> str(flake_dir), clan-pytest-with-core> "--template=default", clan-pytest-with-core> "--no-update", clan-pytest-with-core> "--no-interactive", clan-pytest-with-core> ] clan-pytest-with-core> ) clan-pytest-with-core> clan-pytest-with-core> /build/src/clan_cli/init_test.py:30: clan-pytest-with-core> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ clan-pytest-with-core> /build/src/clan_cli/tests/helpers/cli.py:22: in run clan-pytest-with-core> parsed.func(parsed) clan-pytest-with-core> /build/src/clan_cli/init.py:54: in init_command clan-pytest-with-core> register_admin_keys( clan-pytest-with-core> /build/src/clan_cli/vars/keygen.py:89: in register_admin_keys clan-pytest-with-core> backend = Flake(str(flake_dir)).select(vars_settings_secret_store()) clan-pytest-with-core> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ clan-pytest-with-core> /build/src/clan_lib/flake/flake.py:1177: in select clan-pytest-with-core> self.get_from_nix([selector]) clan-pytest-with-core> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ clan-pytest-with-core> clan-pytest-with-core> self = Flake(identifier='/build/pytest-hjqh2hpv/test-flake', hash='sha256-rXK3We9RTnWzaRv8mQbna5DDac6JUiZEZ2q5JADep4s=', stor...src/clan_lib/flake/flake.py", line 833, in _record_cache_miss\n stack_trace = "".join(traceback.format_stack())\n']) clan-pytest-with-core> selectors = ['clanInternals.vars.settings.secretStore'] clan-pytest-with-core> clan-pytest-with-core> def get_from_nix( clan-pytest-with-core> self, clan-pytest-with-core> selectors: list[str], clan-pytest-with-core> ) -> None: clan-pytest-with-core> """Retrieves specific attributes from a Nix flake using the provided selectors. clan-pytest-with-core> clan-pytest-with-core> This function interacts with the Nix build system to fetch and process clan-pytest-with-core> attributes from a flake. It uses the provided selectors to determine which clan-pytest-with-core> attributes to retrieve and optionally accepts additional Nix options for clan-pytest-with-core> customization. The results are cached for future use. clan-pytest-with-core> Used mostly as a lowlevel function for `precache` and `select` methods. clan-pytest-with-core> clan-pytest-with-core> Args: clan-pytest-with-core> selectors (list[str]): A list of attribute selectors to fetch from the flake. clan-pytest-with-core> nix_options (list[str] | None): Optional additional options to pass to the Nix build command. clan-pytest-with-core> clan-pytest-with-core> Raises: clan-pytest-with-core> ClanError: If the number of outputs does not match the number of selectors. clan-pytest-with-core> AssertionError: If the cache or flake cache path is not properly initialized. clan-pytest-with-core> clan-pytest-with-core> """ clan-pytest-with-core> if self._cache is None: clan-pytest-with-core> self.invalidate_cache() clan-pytest-with-core> if self._cache is None: clan-pytest-with-core> msg = "Cache cannot be None after invalidation" clan-pytest-with-core> raise ClanError(msg) clan-pytest-with-core> clan-pytest-with-core> nix_options = self.nix_options[:] if self.nix_options is not None else [] clan-pytest-with-core> clan-pytest-with-core> str_selectors = [ clan-pytest-with-core> selectors_as_json(parse_selector(selector)) for selector in selectors clan-pytest-with-core> ] clan-pytest-with-core> clan-pytest-with-core> config = nix_config() clan-pytest-with-core> clan-pytest-with-core> select_hash = "sha256-yxcNOha7Cfv2nhVpz9ZXSNKk0R7wt4AiBklJ8D24rVg=" clan-pytest-with-core> if not select_hash.startswith("sha256-"): clan-pytest-with-core> select_flake = Flake(str(select_source()), nix_options=nix_options) clan-pytest-with-core> select_flake.invalidate_cache() clan-pytest-with-core> if select_flake.hash is None: clan-pytest-with-core> msg = "this should be impossible as invalidate_cache() should always set `hash`" clan-pytest-with-core> raise ClanError(msg) clan-pytest-with-core> select_hash = select_flake.hash clan-pytest-with-core> clan-pytest-with-core> # fmt: off clan-pytest-with-core> nix_code = f""" clan-pytest-with-core> let clan-pytest-with-core> flake = builtins.getFlake "path:{self.store_path}?narHash={self.hash}"; clan-pytest-with-core> selectLib = ( clan-pytest-with-core> builtins.getFlake clan-pytest-with-core> "path:{select_source()}?narHash={select_hash}" clan-pytest-with-core> ).lib; clan-pytest-with-core> in clan-pytest-with-core> derivation {{ clan-pytest-with-core> name = "clan-flake-select"; clan-pytest-with-core> result = builtins.toJSON [ clan-pytest-with-core> {" ".join( clan-pytest-with-core> [ clan-pytest-with-core> f"(selectLib.applySelectors (builtins.fromJSON ''{attr}'') flake)" clan-pytest-with-core> for attr in str_selectors clan-pytest-with-core> ] clan-pytest-with-core> )} clan-pytest-with-core> ]; clan-pytest-with-core> clan-pytest-with-core> # We can always build this derivation locally, since /bin/sh is system independent, clan-pytest-with-core> # remote builders would introduce needless overhead. clan-pytest-with-core> preferLocalBuild = true; clan-pytest-with-core> # Save the roundtrip to check the binary caches for trivial substitutions clan-pytest-with-core> allowSubstitutes = false; clan-pytest-with-core> clan-pytest-with-core> passAsFile = [ "result" ]; clan-pytest-with-core> system = "{config["system"]}"; clan-pytest-with-core> builder = "/bin/sh"; clan-pytest-with-core> args = [ clan-pytest-with-core> "-c" clan-pytest-with-core> '' clan-pytest-with-core> read -r x < "$resultPath"; printf %s "$x" > $out clan-pytest-with-core> '' clan-pytest-with-core> ]; clan-pytest-with-core> }} clan-pytest-with-core> """ clan-pytest-with-core> trace = os.environ.get("CLAN_DEBUG_NIX_SELECTORS") == "1" clan-pytest-with-core> try: clan-pytest-with-core> build_output = Path( clan-pytest-with-core> run( clan-pytest-with-core> nix_build(["--expr", nix_code, *nix_options]), clan-pytest-with-core> RunOpts(log=Log.NONE, trace=trace), clan-pytest-with-core> ).stdout.strip(), clan-pytest-with-core> ) clan-pytest-with-core> except ClanCmdError as e: clan-pytest-with-core> if "error: attribute 'clan' missing" in str(e): clan-pytest-with-core> msg = ("This flake does not export the 'clan' attribute. \n" clan-pytest-with-core> "Please write 'clan = clan.config;' into the outputs of your flake.nix.") clan-pytest-with-core> raise ClanSelectError( clan-pytest-with-core> flake_identifier=self.identifier, clan-pytest-with-core> selectors=selectors, clan-pytest-with-core> cmd_error=e, clan-pytest-with-core> description=msg, clan-pytest-with-core> ) from e clan-pytest-with-core> clan-pytest-with-core> # If the error is about a missing attribute, we raise a ClanSelectError clan-pytest-with-core> # with the failed selectors and the flake identifier. clan-pytest-with-core> > raise ClanSelectError( clan-pytest-with-core> flake_identifier=self.identifier, clan-pytest-with-core> selectors=selectors, clan-pytest-with-core> cmd_error=e, clan-pytest-with-core> ) from e clan-pytest-with-core> E clan_lib.flake.flake.ClanSelectError: Error on: $ clan select 'clanInternals.vars.settings.secretStore' clan-pytest-with-core> E Reason: cannot update unlocked flake input 'clan-core' in pure mode. Use flag '--debug' to see full nix trace. clan-pytest-with-core> clan-pytest-with-core> /build/src/clan_lib/flake/flake.py:1094: ClanSelectError clan-pytest-with-core> ----------------------------- Captured stderr call ----------------------------- clan-pytest-with-core> [localhost] $ clan init /build/pytest-hjqh2hpv/test-flake --template=default --no-update --no-interactive clan-pytest-with-core> Caller: /build/src/clan_cli/init_test.py:30::test_init clan-pytest-with-core> clan-pytest-with-core> age-keygen clan-pytest-with-core> Caller: /build/src/clan_cli/secrets/sops.py:382::generate_private_key clan-pytest-with-core> clan-pytest-with-core> Public key: age14ylj4ykd84l2873czzfxamgkxmanq7mf88as0een87ynvhscaycscmuexw clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_cli/secrets/sops.py:382::generate_private_key clan-pytest-with-core> clan-pytest-with-core> Generated age private key at '/build/pytest-hjqh2hpv/.config/sops/age/keys.txt' for your user. clan-pytest-with-core> Please back it up on a secure location or you will lose access to your secrets. clan-pytest-with-core> Prefetching flake /build/src/clan_lib/clan_core_templates clan-pytest-with-core> warning: you don't have Internet access; disabling some network-dependent features clan-pytest-with-core> Prefetching flake /build/src/clan_lib/clan_core_templates clan-pytest-with-core> warning: you don't have Internet access; disabling some network-dependent features clan-pytest-with-core> Cache miss for clanInternals.templates.clan."default" clan-pytest-with-core> nix \ clan-pytest-with-core> --extra-experimental-features 'nix-command flakes' \ clan-pytest-with-core> --option warn-dirty \ clan-pytest-with-core> false \ clan-pytest-with-core> config \ clan-pytest-with-core> show \ clan-pytest-with-core> --json --store \ clan-pytest-with-core> /build/store clan-pytest-with-core> Caller: /build/src/clan_lib/nix/__init__.py:91::nix_config clan-pytest-with-core> clan-pytest-with-core> warning: you don't have Internet access; disabling some network-dependent features clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/nix/__init__.py:91::nix_config clan-pytest-with-core> clan-pytest-with-core> chmod \ clan-pytest-with-core> -R u+w \ clan-pytest-with-core> /build/pytest-hjqh2hpv/test-flake clan-pytest-with-core> Caller: /build/src/clan_lib/templates/filesystem.py:36::copy_from_nixstore clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/templates/filesystem.py:36::copy_from_nixstore clan-pytest-with-core> clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-hjqh2hpv/test-flake \ clan-pytest-with-core> init clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:173::create_clan clan-pytest-with-core> clan-pytest-with-core> hint: Using 'master' as the name for the initial branch. This default branch name clan-pytest-with-core> hint: will change to "main" in Git 3.0. To configure the initial branch name clan-pytest-with-core> hint: to use in all of your new repositories, which will suppress this warning, clan-pytest-with-core> hint: call: clan-pytest-with-core> hint: clan-pytest-with-core> hint: git config --global init.defaultBranch clan-pytest-with-core> hint: clan-pytest-with-core> hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and clan-pytest-with-core> hint: 'development'. The just-created branch can be renamed via this command: clan-pytest-with-core> hint: clan-pytest-with-core> hint: git branch -m clan-pytest-with-core> hint: clan-pytest-with-core> hint: Disable this message with "git config set advice.defaultBranchName false" clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:173::create_clan clan-pytest-with-core> clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-hjqh2hpv/test-flake \ clan-pytest-with-core> add \ clan-pytest-with-core> . clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:174::create_clan clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:174::create_clan clan-pytest-with-core> clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-hjqh2hpv/test-flake \ clan-pytest-with-core> config \ clan-pytest-with-core> user.name clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:177::create_clan clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 1 clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:177::create_clan clan-pytest-with-core> clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-hjqh2hpv/test-flake \ clan-pytest-with-core> config \ clan-pytest-with-core> user.name \ clan-pytest-with-core> clan-tool clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:182::create_clan clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:182::create_clan clan-pytest-with-core> clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-hjqh2hpv/test-flake \ clan-pytest-with-core> config \ clan-pytest-with-core> user.email clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:184::create_clan clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 1 clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:184::create_clan clan-pytest-with-core> clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-hjqh2hpv/test-flake \ clan-pytest-with-core> config \ clan-pytest-with-core> user.email \ clan-pytest-with-core> clan@example.com clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:189::create_clan clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:189::create_clan clan-pytest-with-core> clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-hjqh2hpv/test-flake \ clan-pytest-with-core> add \ clan-pytest-with-core> . clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:203::create_clan clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:203::create_clan clan-pytest-with-core> clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-hjqh2hpv/test-flake \ clan-pytest-with-core> commit \ clan-pytest-with-core> -m 'Initial commit' clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:204::create_clan clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:204::create_clan clan-pytest-with-core> clan-pytest-with-core> Prefetching flake /build/pytest-hjqh2hpv/test-flake clan-pytest-with-core> warning: you don't have Internet access; disabling some network-dependent features clan-pytest-with-core> Cache miss for clanInternals.vars.settings.secretStore clan-pytest-with-core> ------------------------------ Captured log call ------------------------------- clan-pytest-with-core> DEBUG clan_cli.tests.helpers.cli:__init__.py:147 $ clan init /build/pytest-hjqh2hpv/test-flake --template=default --no-update --no-interactive clan-pytest-with-core> Caller: /build/src/clan_cli/init_test.py:30::test_init clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:147 age-keygen clan-pytest-with-core> Caller: /build/src/clan_cli/secrets/sops.py:382::generate_private_key clan-pytest-with-core> clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 Public key: age14ylj4ykd84l2873czzfxamgkxmanq7mf88as0een87ynvhscaycscmuexw clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:147 Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_cli/secrets/sops.py:382::generate_private_key clan-pytest-with-core> clan-pytest-with-core> INFO clan_cli.secrets.key:key.py:41 Generated age private key at '/build/pytest-hjqh2hpv/.config/sops/age/keys.txt' for your user. clan-pytest-with-core> Please back it up on a secure location or you will lose access to your secrets. clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:927 Prefetching flake /build/src/clan_lib/clan_core_templates clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 warning: you don't have Internet access; disabling some network-dependent features clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:927 Prefetching flake /build/src/clan_lib/clan_core_templates clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 warning: you don't have Internet access; disabling some network-dependent features clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1174 Cache miss for clanInternals.templates.clan."default" clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:147 nix \ clan-pytest-with-core> --extra-experimental-features 'nix-command flakes' \ clan-pytest-with-core> --option warn-dirty \ clan-pytest-with-core> false \ clan-pytest-with-core> config \ clan-pytest-with-core> show \ clan-pytest-with-core> --json --store \ clan-pytest-with-core> /build/store clan-pytest-with-core> Caller: /build/src/clan_lib/nix/__init__.py:91::nix_config clan-pytest-with-core> clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 warning: you don't have Internet access; disabling some network-dependent features clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:147 Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/nix/__init__.py:91::nix_config clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:147 chmod \ clan-pytest-with-core> -R u+w \ clan-pytest-with-core> /build/pytest-hjqh2hpv/test-flake clan-pytest-with-core> Caller: /build/src/clan_lib/templates/filesystem.py:36::copy_from_nixstore clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:147 Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/templates/filesystem.py:36::copy_from_nixstore clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:147 git \ clan-pytest-with-core> -C /build/pytest-hjqh2hpv/test-flake \ clan-pytest-with-core> init clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:173::create_clan clan-pytest-with-core> clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 hint: Using 'master' as the name for the initial branch. This default branch name clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 hint: will change to "main" in Git 3.0. To configure the initial branch name clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 hint: to use in all of your new repositories, which will suppress this warning, clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 hint: call: clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 hint: clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 hint: git config --global init.defaultBranch clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 hint: clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 hint: 'development'. The just-created branch can be renamed via this command: clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 hint: clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 hint: git branch -m clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 hint: clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 hint: Disable this message with "git config set advice.defaultBranchName false" clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:147 Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:173::create_clan clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:147 git \ clan-pytest-with-core> -C /build/pytest-hjqh2hpv/test-flake \ clan-pytest-with-core> add \ clan-pytest-with-core> . clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:174::create_clan clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:147 Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:174::create_clan clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:147 git \ clan-pytest-with-core> -C /build/pytest-hjqh2hpv/test-flake \ clan-pytest-with-core> config \ clan-pytest-with-core> user.name clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:177::create_clan clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:147 Command exited with return code 1 clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:177::create_clan clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:147 git \ clan-pytest-with-core> -C /build/pytest-hjqh2hpv/test-flake \ clan-pytest-with-core> config \ clan-pytest-with-core> user.name \ clan-pytest-with-core> clan-tool clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:182::create_clan clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:147 Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:182::create_clan clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:147 git \ clan-pytest-with-core> -C /build/pytest-hjqh2hpv/test-flake \ clan-pytest-with-core> config \ clan-pytest-with-core> user.email clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:184::create_clan clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:147 Command exited with return code 1 clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:184::create_clan clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:147 git \ clan-pytest-with-core> -C /build/pytest-hjqh2hpv/test-flake \ clan-pytest-with-core> config \ clan-pytest-with-core> user.email \ clan-pytest-with-core> clan@example.com clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:189::create_clan clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:147 Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:189::create_clan clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:147 git \ clan-pytest-with-core> -C /build/pytest-hjqh2hpv/test-flake \ clan-pytest-with-core> add \ clan-pytest-with-core> . clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:203::create_clan clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:147 Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:203::create_clan clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:147 git \ clan-pytest-with-core> -C /build/pytest-hjqh2hpv/test-flake \ clan-pytest-with-core> commit \ clan-pytest-with-core> -m 'Initial commit' clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:204::create_clan clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:147 Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:204::create_clan clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:927 Prefetching flake /build/pytest-hjqh2hpv/test-flake clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 warning: you don't have Internet access; disabling some network-dependent features clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1174 Cache miss for clanInternals.vars.settings.secretStore clan-pytest-with-core> __________________ test_init_fallback_from_non_clan_directory __________________ clan-pytest-with-core> [gw2] linux -- Python 3.14.7 /nix/store/lb41b0anx1f98y9y5s9mdv97gjgsq740-python3-3.14.7/bin/python clan-pytest-with-core> clan-pytest-with-core> self = Flake(identifier='/build/pytest-ksoguhef/new-clan', hash='sha256-qrimw1I0orQ3X5FqDAIwvjokzL7BQ3ePL74PwAsnE7o=', store_...src/clan_lib/flake/flake.py", line 833, in _record_cache_miss\n stack_trace = "".join(traceback.format_stack())\n']) clan-pytest-with-core> selectors = ['clanInternals.vars.settings.secretStore'] clan-pytest-with-core> clan-pytest-with-core> def get_from_nix( clan-pytest-with-core> self, clan-pytest-with-core> selectors: list[str], clan-pytest-with-core> ) -> None: clan-pytest-with-core> """Retrieves specific attributes from a Nix flake using the provided selectors. clan-pytest-with-core> clan-pytest-with-core> This function interacts with the Nix build system to fetch and process clan-pytest-with-core> attributes from a flake. It uses the provided selectors to determine which clan-pytest-with-core> attributes to retrieve and optionally accepts additional Nix options for clan-pytest-with-core> customization. The results are cached for future use. clan-pytest-with-core> Used mostly as a lowlevel function for `precache` and `select` methods. clan-pytest-with-core> clan-pytest-with-core> Args: clan-pytest-with-core> selectors (list[str]): A list of attribute selectors to fetch from the flake. clan-pytest-with-core> nix_options (list[str] | None): Optional additional options to pass to the Nix build command. clan-pytest-with-core> clan-pytest-with-core> Raises: clan-pytest-with-core> ClanError: If the number of outputs does not match the number of selectors. clan-pytest-with-core> AssertionError: If the cache or flake cache path is not properly initialized. clan-pytest-with-core> clan-pytest-with-core> """ clan-pytest-with-core> if self._cache is None: clan-pytest-with-core> self.invalidate_cache() clan-pytest-with-core> if self._cache is None: clan-pytest-with-core> msg = "Cache cannot be None after invalidation" clan-pytest-with-core> raise ClanError(msg) clan-pytest-with-core> clan-pytest-with-core> nix_options = self.nix_options[:] if self.nix_options is not None else [] clan-pytest-with-core> clan-pytest-with-core> str_selectors = [ clan-pytest-with-core> selectors_as_json(parse_selector(selector)) for selector in selectors clan-pytest-with-core> ] clan-pytest-with-core> clan-pytest-with-core> config = nix_config() clan-pytest-with-core> clan-pytest-with-core> select_hash = "sha256-yxcNOha7Cfv2nhVpz9ZXSNKk0R7wt4AiBklJ8D24rVg=" clan-pytest-with-core> if not select_hash.startswith("sha256-"): clan-pytest-with-core> select_flake = Flake(str(select_source()), nix_options=nix_options) clan-pytest-with-core> select_flake.invalidate_cache() clan-pytest-with-core> if select_flake.hash is None: clan-pytest-with-core> msg = "this should be impossible as invalidate_cache() should always set `hash`" clan-pytest-with-core> raise ClanError(msg) clan-pytest-with-core> select_hash = select_flake.hash clan-pytest-with-core> clan-pytest-with-core> # fmt: off clan-pytest-with-core> nix_code = f""" clan-pytest-with-core> let clan-pytest-with-core> flake = builtins.getFlake "path:{self.store_path}?narHash={self.hash}"; clan-pytest-with-core> selectLib = ( clan-pytest-with-core> builtins.getFlake clan-pytest-with-core> "path:{select_source()}?narHash={select_hash}" clan-pytest-with-core> ).lib; clan-pytest-with-core> in clan-pytest-with-core> derivation {{ clan-pytest-with-core> name = "clan-flake-select"; clan-pytest-with-core> result = builtins.toJSON [ clan-pytest-with-core> {" ".join( clan-pytest-with-core> [ clan-pytest-with-core> f"(selectLib.applySelectors (builtins.fromJSON ''{attr}'') flake)" clan-pytest-with-core> for attr in str_selectors clan-pytest-with-core> ] clan-pytest-with-core> )} clan-pytest-with-core> ]; clan-pytest-with-core> clan-pytest-with-core> # We can always build this derivation locally, since /bin/sh is system independent, clan-pytest-with-core> # remote builders would introduce needless overhead. clan-pytest-with-core> preferLocalBuild = true; clan-pytest-with-core> # Save the roundtrip to check the binary caches for trivial substitutions clan-pytest-with-core> allowSubstitutes = false; clan-pytest-with-core> clan-pytest-with-core> passAsFile = [ "result" ]; clan-pytest-with-core> system = "{config["system"]}"; clan-pytest-with-core> builder = "/bin/sh"; clan-pytest-with-core> args = [ clan-pytest-with-core> "-c" clan-pytest-with-core> '' clan-pytest-with-core> read -r x < "$resultPath"; printf %s "$x" > $out clan-pytest-with-core> '' clan-pytest-with-core> ]; clan-pytest-with-core> }} clan-pytest-with-core> """ clan-pytest-with-core> trace = os.environ.get("CLAN_DEBUG_NIX_SELECTORS") == "1" clan-pytest-with-core> try: clan-pytest-with-core> build_output = Path( clan-pytest-with-core> > run( clan-pytest-with-core> nix_build(["--expr", nix_code, *nix_options]), clan-pytest-with-core> RunOpts(log=Log.NONE, trace=trace), clan-pytest-with-core> ).stdout.strip(), clan-pytest-with-core> ) clan-pytest-with-core> clan-pytest-with-core> /build/src/clan_lib/flake/flake.py:1076: clan-pytest-with-core> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ clan-pytest-with-core> clan-pytest-with-core> cmd = ['nix', '--extra-experimental-features', 'nix-command flakes', '--option', 'warn-dirty', 'false', ...] clan-pytest-with-core> options = RunOpts(input=None, stdout=None, stderr=None, env=None, cwd=PosixPath('/build/pytest-ksoguhef/test_flake'), log= clan-pytest-with-core> def run( clan-pytest-with-core> cmd: list[str], clan-pytest-with-core> options: RunOpts | None = None, clan-pytest-with-core> ) -> CmdOut: clan-pytest-with-core> if options is None: clan-pytest-with-core> options = RunOpts() clan-pytest-with-core> if options.cwd is None: clan-pytest-with-core> options.cwd = Path.cwd() clan-pytest-with-core> clan-pytest-with-core> async_ctx = get_async_ctx() clan-pytest-with-core> # Fill in the options from the thread-local data clan-pytest-with-core> # if they are not set in the options clan-pytest-with-core> if async_ctx: clan-pytest-with-core> if options.prefix is None: clan-pytest-with-core> options.prefix = async_ctx.prefix clan-pytest-with-core> if options.stdout is None: clan-pytest-with-core> options.stdout = async_ctx.stdout clan-pytest-with-core> if options.stderr is None: clan-pytest-with-core> options.stderr = async_ctx.stderr clan-pytest-with-core> clan-pytest-with-core> if options.requires_root_perm: clan-pytest-with-core> cmd = cmd_with_root(cmd, options.graphical_perm) clan-pytest-with-core> # Use our sudo ask proxy here as well clan-pytest-with-core> options.needs_user_terminal = True clan-pytest-with-core> clan-pytest-with-core> if cmdlog.isEnabledFor(logging.DEBUG) and options.trace: clan-pytest-with-core> if options.input and isinstance(options.input, bytes): clan-pytest-with-core> # Always redact sensitive input (e.g., private keys, passwords) clan-pytest-with-core> if options.sensitive_input: clan-pytest-with-core> filtered_input = "<>" clan-pytest-with-core> elif any( clan-pytest-with-core> not ch.isprintable() for ch in options.input.decode("ascii", "replace") clan-pytest-with-core> ): clan-pytest-with-core> filtered_input = "<>" clan-pytest-with-core> else: clan-pytest-with-core> filtered_input = options.input.decode("ascii", "replace") clan-pytest-with-core> clan-pytest-with-core> print_trace( clan-pytest-with-core> f"echo '{filtered_input}' | {indent_command(cmd)}", clan-pytest-with-core> cmdlog, clan-pytest-with-core> options.prefix, clan-pytest-with-core> ) clan-pytest-with-core> else: clan-pytest-with-core> print_trace(f"{indent_command(cmd)}", cmdlog, options.prefix) clan-pytest-with-core> clan-pytest-with-core> start = timeit.default_timer() clan-pytest-with-core> with ExitStack() as stack: clan-pytest-with-core> stdin = subprocess.PIPE if isinstance(options.input, bytes) else options.input clan-pytest-with-core> process = stack.enter_context( clan-pytest-with-core> subprocess.Popen( clan-pytest-with-core> cmd, clan-pytest-with-core> cwd=str(options.cwd), clan-pytest-with-core> env=options.env, clan-pytest-with-core> stdin=stdin, clan-pytest-with-core> stdout=subprocess.PIPE, clan-pytest-with-core> stderr=subprocess.PIPE, clan-pytest-with-core> start_new_session=not options.needs_user_terminal, clan-pytest-with-core> shell=options.shell, clan-pytest-with-core> ), clan-pytest-with-core> ) clan-pytest-with-core> clan-pytest-with-core> if options.needs_user_terminal: clan-pytest-with-core> # we didn't allocate a new session, so we can't terminate the process group clan-pytest-with-core> stack.enter_context(terminate_process(process)) clan-pytest-with-core> else: clan-pytest-with-core> stack.enter_context(terminate_process_group(process)) clan-pytest-with-core> clan-pytest-with-core> input_bytes = options.input if isinstance(options.input, bytes) else None clan-pytest-with-core> clan-pytest-with-core> stdout_buf, stderr_buf, stdout_raw = handle_io( clan-pytest-with-core> process, clan-pytest-with-core> options.log, clan-pytest-with-core> prefix=options.prefix, clan-pytest-with-core> msg_color=options.msg_color, clan-pytest-with-core> timeout=options.timeout, clan-pytest-with-core> input_bytes=input_bytes, clan-pytest-with-core> stdout=options.stdout, clan-pytest-with-core> stderr=options.stderr, clan-pytest-with-core> cmd=cmd, clan-pytest-with-core> cwd=options.cwd, clan-pytest-with-core> env=options.env, clan-pytest-with-core> ) clan-pytest-with-core> if not is_async_cancelled(): clan-pytest-with-core> process.wait() clan-pytest-with-core> clan-pytest-with-core> if TIME_TABLE: clan-pytest-with-core> TIME_TABLE.add(shlex.join(cmd), timeit.default_timer() - start) clan-pytest-with-core> clan-pytest-with-core> # Wait for the subprocess to finish clan-pytest-with-core> cmd_out = CmdOut( clan-pytest-with-core> stdout=stdout_buf, clan-pytest-with-core> stderr=stderr_buf, clan-pytest-with-core> cwd=options.cwd, clan-pytest-with-core> env=options.env, clan-pytest-with-core> command_list=cmd, clan-pytest-with-core> returncode=process.returncode, clan-pytest-with-core> msg=options.error_msg, clan-pytest-with-core> stdout_raw=stdout_raw, clan-pytest-with-core> ) clan-pytest-with-core> clan-pytest-with-core> if cmdlog.isEnabledFor(logging.DEBUG) and options.trace: clan-pytest-with-core> print_trace( clan-pytest-with-core> f"Command exited with return code {process.returncode}", clan-pytest-with-core> cmdlog, clan-pytest-with-core> options.prefix, clan-pytest-with-core> ) clan-pytest-with-core> clan-pytest-with-core> if options.check and process.returncode != 0: clan-pytest-with-core> if is_async_cancelled(): clan-pytest-with-core> cmd_out.msg = "Command cancelled" clan-pytest-with-core> > raise ClanCmdError(cmd_out) clan-pytest-with-core> E clan_lib.errors.ClanCmdError: clan-pytest-with-core> E =================================== Command ==================================== clan-pytest-with-core> E nix \ clan-pytest-with-core> E --extra-experimental-features 'nix-command flakes' \ clan-pytest-with-core> E --option warn-dirty \ clan-pytest-with-core> E false \ clan-pytest-with-core> E build \ clan-pytest-with-core> E --flake-registry '' \ clan-pytest-with-core> E --print-out-paths --print-build-logs \ clan-pytest-with-core> E --show-trace --no-link \ clan-pytest-with-core> E --expr ' clan-pytest-with-core> E let clan-pytest-with-core> E flake = builtins.getFlake "path:/nix/store/68drm03bplvx2nzfzhsbp6szn7wwnqlb-source?narHash=sha256-qrimw1I0orQ3X5FqDAIwvjokzL7BQ3ePL74PwAsnE7o="; clan-pytest-with-core> E selectLib = ( clan-pytest-with-core> E builtins.getFlake clan-pytest-with-core> E "path:/nix/store/cba1x9mxnwr8b36cw41bya7g6d5v1p7d-source?narHash=sha256-yxcNOha7Cfv2nhVpz9ZXSNKk0R7wt4AiBklJ8D24rVg=" clan-pytest-with-core> E ).lib; clan-pytest-with-core> E in clan-pytest-with-core> E derivation { clan-pytest-with-core> E name = "clan-flake-select"; clan-pytest-with-core> E result = builtins.toJSON [ clan-pytest-with-core> E (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "secretStore"}]'"'"''"'"') flake) clan-pytest-with-core> E ]; clan-pytest-with-core> E clan-pytest-with-core> E # We can always build this derivation locally, since /bin/sh is system independent, clan-pytest-with-core> E # remote builders would introduce needless overhead. clan-pytest-with-core> E preferLocalBuild = true; clan-pytest-with-core> E # Save the roundtrip to check the binary caches for trivial substitutions clan-pytest-with-core> E allowSubstitutes = false; clan-pytest-with-core> E clan-pytest-with-core> E passAsFile = [ "result" ]; clan-pytest-with-core> E system = "x86_64-linux"; clan-pytest-with-core> E builder = "/bin/sh"; clan-pytest-with-core> E args = [ clan-pytest-with-core> E "-c" clan-pytest-with-core> E '"'"''"'"' clan-pytest-with-core> E read -r x < "$resultPath"; printf %s "$x" > $out clan-pytest-with-core> E '"'"''"'"' clan-pytest-with-core> E ]; clan-pytest-with-core> E } clan-pytest-with-core> E ' \ clan-pytest-with-core> E --store /build/store clan-pytest-with-core> E clan-pytest-with-core> E ==================================== Stderr ==================================== clan-pytest-with-core> E warning: you don't have Internet access; disabling some network-dependent features clan-pytest-with-core> E error: clan-pytest-with-core> E … while calling the 'derivationStrict' builtin clan-pytest-with-core> E at :37:12: clan-pytest-with-core> E 36| clan-pytest-with-core> E 37| strict = derivationStrict drvAttrs; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 38| clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating derivation 'clan-flake-select' clan-pytest-with-core> E whose name attribute is located at «string»:10:17 clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating attribute 'result' of derivation 'clan-flake-select' clan-pytest-with-core> E at «string»:11:17: clan-pytest-with-core> E 10| name = "clan-flake-select"; clan-pytest-with-core> E 11| result = builtins.toJSON [ clan-pytest-with-core> E | ^ clan-pytest-with-core> E 12| (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "secretStore"}]'') flake) clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'toJSON' builtin clan-pytest-with-core> E at «string»:11:26: clan-pytest-with-core> E 10| name = "clan-flake-select"; clan-pytest-with-core> E 11| result = builtins.toJSON [ clan-pytest-with-core> E | ^ clan-pytest-with-core> E 12| (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "secretStore"}]'') flake) clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating list element at index 0 clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at «string»:12:22: clan-pytest-with-core> E 11| result = builtins.toJSON [ clan-pytest-with-core> E 12| (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "secretStore"}]'') flake) clan-pytest-with-core> E | ^ clan-pytest-with-core> E 13| ]; clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'applySelectors' clan-pytest-with-core> E at /build/store/nix/store/cba1x9mxnwr8b36cw41bya7g6d5v1p7d-source/select.nix:262:16: clan-pytest-with-core> E 261| applySelectors = clan-pytest-with-core> E 262| selectors: obj: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 263| let clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/cba1x9mxnwr8b36cw41bya7g6d5v1p7d-source/select.nix:352:5: clan-pytest-with-core> E 351| in clan-pytest-with-core> E 352| recurse selectors 0 obj; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 353| clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'recurse' clan-pytest-with-core> E at /build/store/nix/store/cba1x9mxnwr8b36cw41bya7g6d5v1p7d-source/select.nix:265:25: clan-pytest-with-core> E 264| recurse = clan-pytest-with-core> E 265| selectors: idx: obj: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 266| # we are done clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating a branch condition clan-pytest-with-core> E at /build/store/nix/store/cba1x9mxnwr8b36cw41bya7g6d5v1p7d-source/select.nix:281:11: clan-pytest-with-core> E 280| # lists clan-pytest-with-core> E 281| if builtins.isList obj then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 282| if selector.type == "all" then clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'isList' builtin clan-pytest-with-core> E at /build/store/nix/store/cba1x9mxnwr8b36cw41bya7g6d5v1p7d-source/select.nix:281:14: clan-pytest-with-core> E 280| # lists clan-pytest-with-core> E 281| if builtins.isList obj then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 282| if selector.type == "all" then clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'getFlake' builtin clan-pytest-with-core> E at «string»:3:23: clan-pytest-with-core> E 2| let clan-pytest-with-core> E 3| flake = builtins.getFlake "path:/nix/store/68drm03bplvx2nzfzhsbp6szn7wwnqlb-source?narHash=sha256-qrimw1I0orQ3X5FqDAIwvjokzL7BQ3ePL74PwAsnE7o="; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 4| selectLib = ( clan-pytest-with-core> E clan-pytest-with-core> E … while updating the lock file of flake 'path:/nix/store/68drm03bplvx2nzfzhsbp6szn7wwnqlb-source?lastModified=0&narHash=sha256-qrimw1I0orQ3X5FqDAIwvjokzL7BQ3ePL74PwAsnE7o%3D' clan-pytest-with-core> E clan-pytest-with-core> E … while updating the flake input 'clan-core' clan-pytest-with-core> E clan-pytest-with-core> E error: cannot update unlocked flake input 'clan-core' in pure mode clan-pytest-with-core> E clan-pytest-with-core> E Return Code: 1 clan-pytest-with-core> clan-pytest-with-core> /build/src/clan_lib/cmd/__init__.py:451: ClanCmdError clan-pytest-with-core> clan-pytest-with-core> The above exception was the direct cause of the following exception: clan-pytest-with-core> clan-pytest-with-core> monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7fffe2b13230> clan-pytest-with-core> temporary_home = PosixPath('/build/pytest-ksoguhef') clan-pytest-with-core> test_flake = FlakeForTest(path=PosixPath('/build/pytest-ksoguhef/test_flake')) clan-pytest-with-core> patch_get_clan_details = .get_clan_details at 0x7fffe2355590> clan-pytest-with-core> clan-pytest-with-core> @pytest.mark.broken_on_darwin clan-pytest-with-core> @pytest.mark.with_core clan-pytest-with-core> def test_init_fallback_from_non_clan_directory( clan-pytest-with-core> monkeypatch: pytest.MonkeyPatch, clan-pytest-with-core> temporary_home: Path, clan-pytest-with-core> test_flake: FlakeForTest, clan-pytest-with-core> patch_get_clan_details: Any, # noqa: ARG001 clan-pytest-with-core> ) -> None: clan-pytest-with-core> """Test that clan init falls back to builtin templates from non-clan flake.""" clan-pytest-with-core> monkeypatch.chdir(test_flake.path) clan-pytest-with-core> new_clan_dir = temporary_home / "new-clan" clan-pytest-with-core> monkeypatch.setenv("LOGNAME", "testuser") clan-pytest-with-core> clan-pytest-with-core> > cli.run( clan-pytest-with-core> [ clan-pytest-with-core> "init", clan-pytest-with-core> str(new_clan_dir), clan-pytest-with-core> "--template=default", clan-pytest-with-core> "--no-update", clan-pytest-with-core> "--no-interactive", clan-pytest-with-core> ], clan-pytest-with-core> ) clan-pytest-with-core> clan-pytest-with-core> /build/src/clan_cli/init_test.py:169: clan-pytest-with-core> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ clan-pytest-with-core> /build/src/clan_cli/tests/helpers/cli.py:22: in run clan-pytest-with-core> parsed.func(parsed) clan-pytest-with-core> /build/src/clan_cli/init.py:54: in init_command clan-pytest-with-core> register_admin_keys( clan-pytest-with-core> /build/src/clan_cli/vars/keygen.py:89: in register_admin_keys clan-pytest-with-core> backend = Flake(str(flake_dir)).select(vars_settings_secret_store()) clan-pytest-with-core> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ clan-pytest-with-core> /build/src/clan_lib/flake/flake.py:1177: in select clan-pytest-with-core> self.get_from_nix([selector]) clan-pytest-with-core> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ clan-pytest-with-core> clan-pytest-with-core> self = Flake(identifier='/build/pytest-ksoguhef/new-clan', hash='sha256-qrimw1I0orQ3X5FqDAIwvjokzL7BQ3ePL74PwAsnE7o=', store_...src/clan_lib/flake/flake.py", line 833, in _record_cache_miss\n stack_trace = "".join(traceback.format_stack())\n']) clan-pytest-with-core> selectors = ['clanInternals.vars.settings.secretStore'] clan-pytest-with-core> clan-pytest-with-core> def get_from_nix( clan-pytest-with-core> self, clan-pytest-with-core> selectors: list[str], clan-pytest-with-core> ) -> None: clan-pytest-with-core> """Retrieves specific attributes from a Nix flake using the provided selectors. clan-pytest-with-core> clan-pytest-with-core> This function interacts with the Nix build system to fetch and process clan-pytest-with-core> attributes from a flake. It uses the provided selectors to determine which clan-pytest-with-core> attributes to retrieve and optionally accepts additional Nix options for clan-pytest-with-core> customization. The results are cached for future use. clan-pytest-with-core> Used mostly as a lowlevel function for `precache` and `select` methods. clan-pytest-with-core> clan-pytest-with-core> Args: clan-pytest-with-core> selectors (list[str]): A list of attribute selectors to fetch from the flake. clan-pytest-with-core> nix_options (list[str] | None): Optional additional options to pass to the Nix build command. clan-pytest-with-core> clan-pytest-with-core> Raises: clan-pytest-with-core> ClanError: If the number of outputs does not match the number of selectors. clan-pytest-with-core> AssertionError: If the cache or flake cache path is not properly initialized. clan-pytest-with-core> clan-pytest-with-core> """ clan-pytest-with-core> if self._cache is None: clan-pytest-with-core> self.invalidate_cache() clan-pytest-with-core> if self._cache is None: clan-pytest-with-core> msg = "Cache cannot be None after invalidation" clan-pytest-with-core> raise ClanError(msg) clan-pytest-with-core> clan-pytest-with-core> nix_options = self.nix_options[:] if self.nix_options is not None else [] clan-pytest-with-core> clan-pytest-with-core> str_selectors = [ clan-pytest-with-core> selectors_as_json(parse_selector(selector)) for selector in selectors clan-pytest-with-core> ] clan-pytest-with-core> clan-pytest-with-core> config = nix_config() clan-pytest-with-core> clan-pytest-with-core> select_hash = "sha256-yxcNOha7Cfv2nhVpz9ZXSNKk0R7wt4AiBklJ8D24rVg=" clan-pytest-with-core> if not select_hash.startswith("sha256-"): clan-pytest-with-core> select_flake = Flake(str(select_source()), nix_options=nix_options) clan-pytest-with-core> select_flake.invalidate_cache() clan-pytest-with-core> if select_flake.hash is None: clan-pytest-with-core> msg = "this should be impossible as invalidate_cache() should always set `hash`" clan-pytest-with-core> raise ClanError(msg) clan-pytest-with-core> select_hash = select_flake.hash clan-pytest-with-core> clan-pytest-with-core> # fmt: off clan-pytest-with-core> nix_code = f""" clan-pytest-with-core> let clan-pytest-with-core> flake = builtins.getFlake "path:{self.store_path}?narHash={self.hash}"; clan-pytest-with-core> selectLib = ( clan-pytest-with-core> builtins.getFlake clan-pytest-with-core> "path:{select_source()}?narHash={select_hash}" clan-pytest-with-core> ).lib; clan-pytest-with-core> in clan-pytest-with-core> derivation {{ clan-pytest-with-core> name = "clan-flake-select"; clan-pytest-with-core> result = builtins.toJSON [ clan-pytest-with-core> {" ".join( clan-pytest-with-core> [ clan-pytest-with-core> f"(selectLib.applySelectors (builtins.fromJSON ''{attr}'') flake)" clan-pytest-with-core> for attr in str_selectors clan-pytest-with-core> ] clan-pytest-with-core> )} clan-pytest-with-core> ]; clan-pytest-with-core> clan-pytest-with-core> # We can always build this derivation locally, since /bin/sh is system independent, clan-pytest-with-core> # remote builders would introduce needless overhead. clan-pytest-with-core> preferLocalBuild = true; clan-pytest-with-core> # Save the roundtrip to check the binary caches for trivial substitutions clan-pytest-with-core> allowSubstitutes = false; clan-pytest-with-core> clan-pytest-with-core> passAsFile = [ "result" ]; clan-pytest-with-core> system = "{config["system"]}"; clan-pytest-with-core> builder = "/bin/sh"; clan-pytest-with-core> args = [ clan-pytest-with-core> "-c" clan-pytest-with-core> '' clan-pytest-with-core> read -r x < "$resultPath"; printf %s "$x" > $out clan-pytest-with-core> '' clan-pytest-with-core> ]; clan-pytest-with-core> }} clan-pytest-with-core> """ clan-pytest-with-core> trace = os.environ.get("CLAN_DEBUG_NIX_SELECTORS") == "1" clan-pytest-with-core> try: clan-pytest-with-core> build_output = Path( clan-pytest-with-core> run( clan-pytest-with-core> nix_build(["--expr", nix_code, *nix_options]), clan-pytest-with-core> RunOpts(log=Log.NONE, trace=trace), clan-pytest-with-core> ).stdout.strip(), clan-pytest-with-core> ) clan-pytest-with-core> except ClanCmdError as e: clan-pytest-with-core> if "error: attribute 'clan' missing" in str(e): clan-pytest-with-core> msg = ("This flake does not export the 'clan' attribute. \n" clan-pytest-with-core> "Please write 'clan = clan.config;' into the outputs of your flake.nix.") clan-pytest-with-core> raise ClanSelectError( clan-pytest-with-core> flake_identifier=self.identifier, clan-pytest-with-core> selectors=selectors, clan-pytest-with-core> cmd_error=e, clan-pytest-with-core> description=msg, clan-pytest-with-core> ) from e clan-pytest-with-core> clan-pytest-with-core> # If the error is about a missing attribute, we raise a ClanSelectError clan-pytest-with-core> # with the failed selectors and the flake identifier. clan-pytest-with-core> > raise ClanSelectError( clan-pytest-with-core> flake_identifier=self.identifier, clan-pytest-with-core> selectors=selectors, clan-pytest-with-core> cmd_error=e, clan-pytest-with-core> ) from e clan-pytest-with-core> E clan_lib.flake.flake.ClanSelectError: Error on: $ clan select 'clanInternals.vars.settings.secretStore' clan-pytest-with-core> E Reason: cannot update unlocked flake input 'clan-core' in pure mode. Use flag '--debug' to see full nix trace. clan-pytest-with-core> clan-pytest-with-core> /build/src/clan_lib/flake/flake.py:1094: ClanSelectError clan-pytest-with-core> ---------------------------- Captured stdout setup ----------------------------- clan-pytest-with-core> file: /build/pytest-ksoguhef/test_flake/flake.nix clan-pytest-with-core> clan_core: None clan-pytest-with-core> flake: /build/pytest-ksoguhef/test_flake clan-pytest-with-core> Initialized empty Git repository in /build/pytest-ksoguhef/test_flake/.git/ clan-pytest-with-core> [main (root-commit) 0abaa94] Initial commit clan-pytest-with-core> 5 files changed, 76 insertions(+) clan-pytest-with-core> create mode 100644 .clan-flake clan-pytest-with-core> create mode 100644 fake-module.nix clan-pytest-with-core> create mode 100644 flake.lock clan-pytest-with-core> create mode 100644 flake.nix clan-pytest-with-core> create mode 100644 nixosModules/machine1.nix clan-pytest-with-core> ---------------------------- Captured stderr setup ----------------------------- clan-pytest-with-core> warning: you don't have Internet access; disabling some network-dependent features clan-pytest-with-core> warning: creating lock file "/build/pytest-ksoguhef/test_flake/flake.lock": clan-pytest-with-core> • Added input 'nixpkgs': clan-pytest-with-core> 'path:/nix/store/vlhb7haagkjabf20g1vg9kxi53fcpi17-source?lastModified=0&narHash=sha256-R4B%2BRRYmze9htmPZ8xeF19mchTSH99GdaqanKCW8CF8%3D' (1970-01-01) clan-pytest-with-core> !! $HOME does not point to a temp directory!! HOME=/build/pytest-ksoguhef clan-pytest-with-core> ------------------------------ Captured log setup ------------------------------ clan-pytest-with-core> WARNING clan_cli.tests.fixtures_flakes:fixtures_flakes.py:368 !! $HOME does not point to a temp directory!! HOME=/build/pytest-ksoguhef clan-pytest-with-core> ----------------------------- Captured stderr call ----------------------------- clan-pytest-with-core> [localhost] $ clan init /build/pytest-ksoguhef/new-clan --template=default --no-update --no-interactive clan-pytest-with-core> Caller: /build/src/clan_cli/init_test.py:169::test_init_fallback_from_non_clan_directory clan-pytest-with-core> clan-pytest-with-core> age-keygen clan-pytest-with-core> Caller: /build/src/clan_cli/secrets/sops.py:382::generate_private_key clan-pytest-with-core> clan-pytest-with-core> Public key: age164atqrj3mafvjrgarhetvzum8qm7942mrnqtsa0e495py29e933s8k82qg clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_cli/secrets/sops.py:382::generate_private_key clan-pytest-with-core> clan-pytest-with-core> Generated age private key at '/build/pytest-ksoguhef/.config/sops/age/keys.txt' for your user. clan-pytest-with-core> Please back it up on a secure location or you will lose access to your secrets. clan-pytest-with-core> nix \ clan-pytest-with-core> --extra-experimental-features 'nix-command flakes' \ clan-pytest-with-core> --option warn-dirty \ clan-pytest-with-core> false \ clan-pytest-with-core> flake \ clan-pytest-with-core> metadata \ clan-pytest-with-core> --json /build/pytest-ksoguhef/test_flake \ clan-pytest-with-core> --store /build/store clan-pytest-with-core> Caller: /build/src/clan_lib/nix/__init__.py:144::nix_metadata clan-pytest-with-core> clan-pytest-with-core> warning: you don't have Internet access; disabling some network-dependent features clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/nix/__init__.py:144::nix_metadata clan-pytest-with-core> clan-pytest-with-core> Prefetching flake /build/pytest-ksoguhef/test_flake clan-pytest-with-core> warning: you don't have Internet access; disabling some network-dependent features clan-pytest-with-core> Prefetching flake /build/pytest-ksoguhef/test_flake clan-pytest-with-core> warning: you don't have Internet access; disabling some network-dependent features clan-pytest-with-core> Cache miss for clanInternals.templates.clan."default" clan-pytest-with-core> nix \ clan-pytest-with-core> --extra-experimental-features 'nix-command flakes' \ clan-pytest-with-core> --option warn-dirty \ clan-pytest-with-core> false \ clan-pytest-with-core> config \ clan-pytest-with-core> show \ clan-pytest-with-core> --json --store \ clan-pytest-with-core> /build/store clan-pytest-with-core> Caller: /build/src/clan_lib/nix/__init__.py:91::nix_config clan-pytest-with-core> clan-pytest-with-core> warning: you don't have Internet access; disabling some network-dependent features clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/nix/__init__.py:91::nix_config clan-pytest-with-core> clan-pytest-with-core> Template 'default' not found in /build/pytest-ksoguhef/test_flake, trying builtin template clan-pytest-with-core> Prefetching flake /build/src/clan_lib/clan_core_templates clan-pytest-with-core> warning: you don't have Internet access; disabling some network-dependent features clan-pytest-with-core> Loading flake cache from file /build/clan-flake-cache/flakes-v2/61f7e410abb4ac31c6cde3e73e865823fc5f1087 clan-pytest-with-core> (cached) $ clan select 'clanInternals.templates.clan."default"' clan-pytest-with-core> chmod \ clan-pytest-with-core> -R u+w \ clan-pytest-with-core> /build/pytest-ksoguhef/new-clan clan-pytest-with-core> Caller: /build/src/clan_lib/templates/filesystem.py:36::copy_from_nixstore clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/templates/filesystem.py:36::copy_from_nixstore clan-pytest-with-core> clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-ksoguhef/new-clan \ clan-pytest-with-core> init clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:173::create_clan clan-pytest-with-core> clan-pytest-with-core> hint: Using 'master' as the name for the initial branch. This default branch name clan-pytest-with-core> hint: will change to "main" in Git 3.0. To configure the initial branch name clan-pytest-with-core> hint: to use in all of your new repositories, which will suppress this warning, clan-pytest-with-core> hint: call: clan-pytest-with-core> hint: clan-pytest-with-core> hint: git config --global init.defaultBranch clan-pytest-with-core> hint: clan-pytest-with-core> hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and clan-pytest-with-core> hint: 'development'. The just-created branch can be renamed via this command: clan-pytest-with-core> hint: clan-pytest-with-core> hint: git branch -m clan-pytest-with-core> hint: clan-pytest-with-core> hint: Disable this message with "git config set advice.defaultBranchName false" clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:173::create_clan clan-pytest-with-core> clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-ksoguhef/new-clan \ clan-pytest-with-core> add \ clan-pytest-with-core> . clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:174::create_clan clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:174::create_clan clan-pytest-with-core> clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-ksoguhef/new-clan \ clan-pytest-with-core> config \ clan-pytest-with-core> user.name clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:177::create_clan clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 1 clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:177::create_clan clan-pytest-with-core> clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-ksoguhef/new-clan \ clan-pytest-with-core> config \ clan-pytest-with-core> user.name \ clan-pytest-with-core> clan-tool clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:182::create_clan clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:182::create_clan clan-pytest-with-core> clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-ksoguhef/new-clan \ clan-pytest-with-core> config \ clan-pytest-with-core> user.email clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:184::create_clan clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 1 clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:184::create_clan clan-pytest-with-core> clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-ksoguhef/new-clan \ clan-pytest-with-core> config \ clan-pytest-with-core> user.email \ clan-pytest-with-core> clan@example.com clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:189::create_clan clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:189::create_clan clan-pytest-with-core> clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-ksoguhef/new-clan \ clan-pytest-with-core> add \ clan-pytest-with-core> . clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:203::create_clan clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:203::create_clan clan-pytest-with-core> clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-ksoguhef/new-clan \ clan-pytest-with-core> commit \ clan-pytest-with-core> -m 'Initial commit' clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:204::create_clan clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:204::create_clan clan-pytest-with-core> clan-pytest-with-core> Prefetching flake /build/pytest-ksoguhef/new-clan clan-pytest-with-core> warning: you don't have Internet access; disabling some network-dependent features clan-pytest-with-core> Cache miss for clanInternals.vars.settings.secretStore clan-pytest-with-core> ------------------------------ Captured log call ------------------------------- clan-pytest-with-core> DEBUG clan_cli.tests.helpers.cli:__init__.py:147 $ clan init /build/pytest-ksoguhef/new-clan --template=default --no-update --no-interactive clan-pytest-with-core> Caller: /build/src/clan_cli/init_test.py:169::test_init_fallback_from_non_clan_directory clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:147 age-keygen clan-pytest-with-core> Caller: /build/src/clan_cli/secrets/sops.py:382::generate_private_key clan-pytest-with-core> clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 Public key: age164atqrj3mafvjrgarhetvzum8qm7942mrnqtsa0e495py29e933s8k82qg clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:147 Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_cli/secrets/sops.py:382::generate_private_key clan-pytest-with-core> clan-pytest-with-core> INFO clan_cli.secrets.key:key.py:41 Generated age private key at '/build/pytest-ksoguhef/.config/sops/age/keys.txt' for your user. clan-pytest-with-core> Please back it up on a secure location or you will lose access to your secrets. clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:147 nix \ clan-pytest-with-core> --extra-experimental-features 'nix-command flakes' \ clan-pytest-with-core> --option warn-dirty \ clan-pytest-with-core> false \ clan-pytest-with-core> flake \ clan-pytest-with-core> metadata \ clan-pytest-with-core> --json /build/pytest-ksoguhef/test_flake \ clan-pytest-with-core> --store /build/store clan-pytest-with-core> Caller: /build/src/clan_lib/nix/__init__.py:144::nix_metadata clan-pytest-with-core> clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 warning: you don't have Internet access; disabling some network-dependent features clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:147 Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/nix/__init__.py:144::nix_metadata clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:927 Prefetching flake /build/pytest-ksoguhef/test_flake clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 warning: you don't have Internet access; disabling some network-dependent features clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:927 Prefetching flake /build/pytest-ksoguhef/test_flake clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 warning: you don't have Internet access; disabling some network-dependent features clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1174 Cache miss for clanInternals.templates.clan."default" clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:147 nix \ clan-pytest-with-core> --extra-experimental-features 'nix-command flakes' \ clan-pytest-with-core> --option warn-dirty \ clan-pytest-with-core> false \ clan-pytest-with-core> config \ clan-pytest-with-core> show \ clan-pytest-with-core> --json --store \ clan-pytest-with-core> /build/store clan-pytest-with-core> Caller: /build/src/clan_lib/nix/__init__.py:91::nix_config clan-pytest-with-core> clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 warning: you don't have Internet access; disabling some network-dependent features clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:147 Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/nix/__init__.py:91::nix_config clan-pytest-with-core> clan-pytest-with-core> INFO clan_lib.templates.handler:handler.py:142 Template 'default' not found in /build/pytest-ksoguhef/test_flake, trying builtin template clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:927 Prefetching flake /build/src/clan_lib/clan_core_templates clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 warning: you don't have Internet access; disabling some network-dependent features clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:789 Loading flake cache from file /build/clan-flake-cache/flakes-v2/61f7e410abb4ac31c6cde3e73e865823fc5f1087 clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1179 (cached) $ clan select 'clanInternals.templates.clan."default"' clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:147 chmod \ clan-pytest-with-core> -R u+w \ clan-pytest-with-core> /build/pytest-ksoguhef/new-clan clan-pytest-with-core> Caller: /build/src/clan_lib/templates/filesystem.py:36::copy_from_nixstore clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:147 Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/templates/filesystem.py:36::copy_from_nixstore clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:147 git \ clan-pytest-with-core> -C /build/pytest-ksoguhef/new-clan \ clan-pytest-with-core> init clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:173::create_clan clan-pytest-with-core> clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 hint: Using 'master' as the name for the initial branch. This default branch name clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 hint: will change to "main" in Git 3.0. To configure the initial branch name clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 hint: to use in all of your new repositories, which will suppress this warning, clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 hint: call: clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 hint: clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 hint: git config --global init.defaultBranch clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 hint: clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 hint: 'development'. The just-created branch can be renamed via this command: clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 hint: clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 hint: git branch -m clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 hint: clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 hint: Disable this message with "git config set advice.defaultBranchName false" clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:147 Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:173::create_clan clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:147 git \ clan-pytest-with-core> -C /build/pytest-ksoguhef/new-clan \ clan-pytest-with-core> add \ clan-pytest-with-core> . clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:174::create_clan clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:147 Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:174::create_clan clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:147 git \ clan-pytest-with-core> -C /build/pytest-ksoguhef/new-clan \ clan-pytest-with-core> config \ clan-pytest-with-core> user.name clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:177::create_clan clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:147 Command exited with return code 1 clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:177::create_clan clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:147 git \ clan-pytest-with-core> -C /build/pytest-ksoguhef/new-clan \ clan-pytest-with-core> config \ clan-pytest-with-core> user.name \ clan-pytest-with-core> clan-tool clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:182::create_clan clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:147 Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:182::create_clan clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:147 git \ clan-pytest-with-core> -C /build/pytest-ksoguhef/new-clan \ clan-pytest-with-core> config \ clan-pytest-with-core> user.email clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:184::create_clan clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:147 Command exited with return code 1 clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:184::create_clan clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:147 git \ clan-pytest-with-core> -C /build/pytest-ksoguhef/new-clan \ clan-pytest-with-core> config \ clan-pytest-with-core> user.email \ clan-pytest-with-core> clan@example.com clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:189::create_clan clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:147 Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:189::create_clan clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:147 git \ clan-pytest-with-core> -C /build/pytest-ksoguhef/new-clan \ clan-pytest-with-core> add \ clan-pytest-with-core> . clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:203::create_clan clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:147 Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:203::create_clan clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:147 git \ clan-pytest-with-core> -C /build/pytest-ksoguhef/new-clan \ clan-pytest-with-core> commit \ clan-pytest-with-core> -m 'Initial commit' clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:204::create_clan clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:147 Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:204::create_clan clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:927 Prefetching flake /build/pytest-ksoguhef/new-clan clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 warning: you don't have Internet access; disabling some network-dependent features clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1174 Cache miss for clanInternals.vars.settings.secretStore clan-pytest-with-core> ____________________________ test_init_existing_git ____________________________ clan-pytest-with-core> [gw1] linux -- Python 3.14.7 /nix/store/lb41b0anx1f98y9y5s9mdv97gjgsq740-python3-3.14.7/bin/python clan-pytest-with-core> clan-pytest-with-core> self = Flake(identifier='/build/pytest-yksr771e/test-flake', hash='sha256-mxccG+uk81QuR8iFf/ac+tlSRm18LPA5OiSQwUsvspU=', stor...src/clan_lib/flake/flake.py", line 833, in _record_cache_miss\n stack_trace = "".join(traceback.format_stack())\n']) clan-pytest-with-core> selectors = ['clanInternals.vars.settings.secretStore'] clan-pytest-with-core> clan-pytest-with-core> def get_from_nix( clan-pytest-with-core> self, clan-pytest-with-core> selectors: list[str], clan-pytest-with-core> ) -> None: clan-pytest-with-core> """Retrieves specific attributes from a Nix flake using the provided selectors. clan-pytest-with-core> clan-pytest-with-core> This function interacts with the Nix build system to fetch and process clan-pytest-with-core> attributes from a flake. It uses the provided selectors to determine which clan-pytest-with-core> attributes to retrieve and optionally accepts additional Nix options for clan-pytest-with-core> customization. The results are cached for future use. clan-pytest-with-core> Used mostly as a lowlevel function for `precache` and `select` methods. clan-pytest-with-core> clan-pytest-with-core> Args: clan-pytest-with-core> selectors (list[str]): A list of attribute selectors to fetch from the flake. clan-pytest-with-core> nix_options (list[str] | None): Optional additional options to pass to the Nix build command. clan-pytest-with-core> clan-pytest-with-core> Raises: clan-pytest-with-core> ClanError: If the number of outputs does not match the number of selectors. clan-pytest-with-core> AssertionError: If the cache or flake cache path is not properly initialized. clan-pytest-with-core> clan-pytest-with-core> """ clan-pytest-with-core> if self._cache is None: clan-pytest-with-core> self.invalidate_cache() clan-pytest-with-core> if self._cache is None: clan-pytest-with-core> msg = "Cache cannot be None after invalidation" clan-pytest-with-core> raise ClanError(msg) clan-pytest-with-core> clan-pytest-with-core> nix_options = self.nix_options[:] if self.nix_options is not None else [] clan-pytest-with-core> clan-pytest-with-core> str_selectors = [ clan-pytest-with-core> selectors_as_json(parse_selector(selector)) for selector in selectors clan-pytest-with-core> ] clan-pytest-with-core> clan-pytest-with-core> config = nix_config() clan-pytest-with-core> clan-pytest-with-core> select_hash = "sha256-yxcNOha7Cfv2nhVpz9ZXSNKk0R7wt4AiBklJ8D24rVg=" clan-pytest-with-core> if not select_hash.startswith("sha256-"): clan-pytest-with-core> select_flake = Flake(str(select_source()), nix_options=nix_options) clan-pytest-with-core> select_flake.invalidate_cache() clan-pytest-with-core> if select_flake.hash is None: clan-pytest-with-core> msg = "this should be impossible as invalidate_cache() should always set `hash`" clan-pytest-with-core> raise ClanError(msg) clan-pytest-with-core> select_hash = select_flake.hash clan-pytest-with-core> clan-pytest-with-core> # fmt: off clan-pytest-with-core> nix_code = f""" clan-pytest-with-core> let clan-pytest-with-core> flake = builtins.getFlake "path:{self.store_path}?narHash={self.hash}"; clan-pytest-with-core> selectLib = ( clan-pytest-with-core> builtins.getFlake clan-pytest-with-core> "path:{select_source()}?narHash={select_hash}" clan-pytest-with-core> ).lib; clan-pytest-with-core> in clan-pytest-with-core> derivation {{ clan-pytest-with-core> name = "clan-flake-select"; clan-pytest-with-core> result = builtins.toJSON [ clan-pytest-with-core> {" ".join( clan-pytest-with-core> [ clan-pytest-with-core> f"(selectLib.applySelectors (builtins.fromJSON ''{attr}'') flake)" clan-pytest-with-core> for attr in str_selectors clan-pytest-with-core> ] clan-pytest-with-core> )} clan-pytest-with-core> ]; clan-pytest-with-core> clan-pytest-with-core> # We can always build this derivation locally, since /bin/sh is system independent, clan-pytest-with-core> # remote builders would introduce needless overhead. clan-pytest-with-core> preferLocalBuild = true; clan-pytest-with-core> # Save the roundtrip to check the binary caches for trivial substitutions clan-pytest-with-core> allowSubstitutes = false; clan-pytest-with-core> clan-pytest-with-core> passAsFile = [ "result" ]; clan-pytest-with-core> system = "{config["system"]}"; clan-pytest-with-core> builder = "/bin/sh"; clan-pytest-with-core> args = [ clan-pytest-with-core> "-c" clan-pytest-with-core> '' clan-pytest-with-core> read -r x < "$resultPath"; printf %s "$x" > $out clan-pytest-with-core> '' clan-pytest-with-core> ]; clan-pytest-with-core> }} clan-pytest-with-core> """ clan-pytest-with-core> trace = os.environ.get("CLAN_DEBUG_NIX_SELECTORS") == "1" clan-pytest-with-core> try: clan-pytest-with-core> build_output = Path( clan-pytest-with-core> > run( clan-pytest-with-core> nix_build(["--expr", nix_code, *nix_options]), clan-pytest-with-core> RunOpts(log=Log.NONE, trace=trace), clan-pytest-with-core> ).stdout.strip(), clan-pytest-with-core> ) clan-pytest-with-core> clan-pytest-with-core> /build/src/clan_lib/flake/flake.py:1076: clan-pytest-with-core> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ clan-pytest-with-core> clan-pytest-with-core> cmd = ['nix', '--extra-experimental-features', 'nix-command flakes', '--option', 'warn-dirty', 'false', ...] clan-pytest-with-core> options = RunOpts(input=None, stdout=None, stderr=None, env=None, cwd=PosixPath('/build/pytest-yksr771e'), log=, pr...al=False, timeout=inf, shell=False, requires_root_perm=False, graphical_perm=False, trace=False, sensitive_input=False) clan-pytest-with-core> clan-pytest-with-core> def run( clan-pytest-with-core> cmd: list[str], clan-pytest-with-core> options: RunOpts | None = None, clan-pytest-with-core> ) -> CmdOut: clan-pytest-with-core> if options is None: clan-pytest-with-core> options = RunOpts() clan-pytest-with-core> if options.cwd is None: clan-pytest-with-core> options.cwd = Path.cwd() clan-pytest-with-core> clan-pytest-with-core> async_ctx = get_async_ctx() clan-pytest-with-core> # Fill in the options from the thread-local data clan-pytest-with-core> # if they are not set in the options clan-pytest-with-core> if async_ctx: clan-pytest-with-core> if options.prefix is None: clan-pytest-with-core> options.prefix = async_ctx.prefix clan-pytest-with-core> if options.stdout is None: clan-pytest-with-core> options.stdout = async_ctx.stdout clan-pytest-with-core> if options.stderr is None: clan-pytest-with-core> options.stderr = async_ctx.stderr clan-pytest-with-core> clan-pytest-with-core> if options.requires_root_perm: clan-pytest-with-core> cmd = cmd_with_root(cmd, options.graphical_perm) clan-pytest-with-core> # Use our sudo ask proxy here as well clan-pytest-with-core> options.needs_user_terminal = True clan-pytest-with-core> clan-pytest-with-core> if cmdlog.isEnabledFor(logging.DEBUG) and options.trace: clan-pytest-with-core> if options.input and isinstance(options.input, bytes): clan-pytest-with-core> # Always redact sensitive input (e.g., private keys, passwords) clan-pytest-with-core> if options.sensitive_input: clan-pytest-with-core> filtered_input = "<>" clan-pytest-with-core> elif any( clan-pytest-with-core> not ch.isprintable() for ch in options.input.decode("ascii", "replace") clan-pytest-with-core> ): clan-pytest-with-core> filtered_input = "<>" clan-pytest-with-core> else: clan-pytest-with-core> filtered_input = options.input.decode("ascii", "replace") clan-pytest-with-core> clan-pytest-with-core> print_trace( clan-pytest-with-core> f"echo '{filtered_input}' | {indent_command(cmd)}", clan-pytest-with-core> cmdlog, clan-pytest-with-core> options.prefix, clan-pytest-with-core> ) clan-pytest-with-core> else: clan-pytest-with-core> print_trace(f"{indent_command(cmd)}", cmdlog, options.prefix) clan-pytest-with-core> clan-pytest-with-core> start = timeit.default_timer() clan-pytest-with-core> with ExitStack() as stack: clan-pytest-with-core> stdin = subprocess.PIPE if isinstance(options.input, bytes) else options.input clan-pytest-with-core> process = stack.enter_context( clan-pytest-with-core> subprocess.Popen( clan-pytest-with-core> cmd, clan-pytest-with-core> cwd=str(options.cwd), clan-pytest-with-core> env=options.env, clan-pytest-with-core> stdin=stdin, clan-pytest-with-core> stdout=subprocess.PIPE, clan-pytest-with-core> stderr=subprocess.PIPE, clan-pytest-with-core> start_new_session=not options.needs_user_terminal, clan-pytest-with-core> shell=options.shell, clan-pytest-with-core> ), clan-pytest-with-core> ) clan-pytest-with-core> clan-pytest-with-core> if options.needs_user_terminal: clan-pytest-with-core> # we didn't allocate a new session, so we can't terminate the process group clan-pytest-with-core> stack.enter_context(terminate_process(process)) clan-pytest-with-core> else: clan-pytest-with-core> stack.enter_context(terminate_process_group(process)) clan-pytest-with-core> clan-pytest-with-core> input_bytes = options.input if isinstance(options.input, bytes) else None clan-pytest-with-core> clan-pytest-with-core> stdout_buf, stderr_buf, stdout_raw = handle_io( clan-pytest-with-core> process, clan-pytest-with-core> options.log, clan-pytest-with-core> prefix=options.prefix, clan-pytest-with-core> msg_color=options.msg_color, clan-pytest-with-core> timeout=options.timeout, clan-pytest-with-core> input_bytes=input_bytes, clan-pytest-with-core> stdout=options.stdout, clan-pytest-with-core> stderr=options.stderr, clan-pytest-with-core> cmd=cmd, clan-pytest-with-core> cwd=options.cwd, clan-pytest-with-core> env=options.env, clan-pytest-with-core> ) clan-pytest-with-core> if not is_async_cancelled(): clan-pytest-with-core> process.wait() clan-pytest-with-core> clan-pytest-with-core> if TIME_TABLE: clan-pytest-with-core> TIME_TABLE.add(shlex.join(cmd), timeit.default_timer() - start) clan-pytest-with-core> clan-pytest-with-core> # Wait for the subprocess to finish clan-pytest-with-core> cmd_out = CmdOut( clan-pytest-with-core> stdout=stdout_buf, clan-pytest-with-core> stderr=stderr_buf, clan-pytest-with-core> cwd=options.cwd, clan-pytest-with-core> env=options.env, clan-pytest-with-core> command_list=cmd, clan-pytest-with-core> returncode=process.returncode, clan-pytest-with-core> msg=options.error_msg, clan-pytest-with-core> stdout_raw=stdout_raw, clan-pytest-with-core> ) clan-pytest-with-core> clan-pytest-with-core> if cmdlog.isEnabledFor(logging.DEBUG) and options.trace: clan-pytest-with-core> print_trace( clan-pytest-with-core> f"Command exited with return code {process.returncode}", clan-pytest-with-core> cmdlog, clan-pytest-with-core> options.prefix, clan-pytest-with-core> ) clan-pytest-with-core> clan-pytest-with-core> if options.check and process.returncode != 0: clan-pytest-with-core> if is_async_cancelled(): clan-pytest-with-core> cmd_out.msg = "Command cancelled" clan-pytest-with-core> > raise ClanCmdError(cmd_out) clan-pytest-with-core> E clan_lib.errors.ClanCmdError: clan-pytest-with-core> E =================================== Command ==================================== clan-pytest-with-core> E nix \ clan-pytest-with-core> E --extra-experimental-features 'nix-command flakes' \ clan-pytest-with-core> E --option warn-dirty \ clan-pytest-with-core> E false \ clan-pytest-with-core> E build \ clan-pytest-with-core> E --flake-registry '' \ clan-pytest-with-core> E --print-out-paths --print-build-logs \ clan-pytest-with-core> E --show-trace --no-link \ clan-pytest-with-core> E --expr ' clan-pytest-with-core> E let clan-pytest-with-core> E flake = builtins.getFlake "path:/nix/store/ka83d8fj3m7i3075j2mcx749dnwk9z09-source?narHash=sha256-mxccG+uk81QuR8iFf/ac+tlSRm18LPA5OiSQwUsvspU="; clan-pytest-with-core> E selectLib = ( clan-pytest-with-core> E builtins.getFlake clan-pytest-with-core> E "path:/nix/store/cba1x9mxnwr8b36cw41bya7g6d5v1p7d-source?narHash=sha256-yxcNOha7Cfv2nhVpz9ZXSNKk0R7wt4AiBklJ8D24rVg=" clan-pytest-with-core> E ).lib; clan-pytest-with-core> E in clan-pytest-with-core> E derivation { clan-pytest-with-core> E name = "clan-flake-select"; clan-pytest-with-core> E result = builtins.toJSON [ clan-pytest-with-core> E (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "secretStore"}]'"'"''"'"') flake) clan-pytest-with-core> E ]; clan-pytest-with-core> E clan-pytest-with-core> E # We can always build this derivation locally, since /bin/sh is system independent, clan-pytest-with-core> E # remote builders would introduce needless overhead. clan-pytest-with-core> E preferLocalBuild = true; clan-pytest-with-core> E # Save the roundtrip to check the binary caches for trivial substitutions clan-pytest-with-core> E allowSubstitutes = false; clan-pytest-with-core> E clan-pytest-with-core> E passAsFile = [ "result" ]; clan-pytest-with-core> E system = "x86_64-linux"; clan-pytest-with-core> E builder = "/bin/sh"; clan-pytest-with-core> E args = [ clan-pytest-with-core> E "-c" clan-pytest-with-core> E '"'"''"'"' clan-pytest-with-core> E read -r x < "$resultPath"; printf %s "$x" > $out clan-pytest-with-core> E '"'"''"'"' clan-pytest-with-core> E ]; clan-pytest-with-core> E } clan-pytest-with-core> E ' \ clan-pytest-with-core> E --store /build/store clan-pytest-with-core> E clan-pytest-with-core> E ==================================== Stderr ==================================== clan-pytest-with-core> E warning: you don't have Internet access; disabling some network-dependent features clan-pytest-with-core> E error: clan-pytest-with-core> E … while calling the 'derivationStrict' builtin clan-pytest-with-core> E at :37:12: clan-pytest-with-core> E 36| clan-pytest-with-core> E 37| strict = derivationStrict drvAttrs; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 38| clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating derivation 'clan-flake-select' clan-pytest-with-core> E whose name attribute is located at «string»:10:17 clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating attribute 'result' of derivation 'clan-flake-select' clan-pytest-with-core> E at «string»:11:17: clan-pytest-with-core> E 10| name = "clan-flake-select"; clan-pytest-with-core> E 11| result = builtins.toJSON [ clan-pytest-with-core> E | ^ clan-pytest-with-core> E 12| (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "secretStore"}]'') flake) clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'toJSON' builtin clan-pytest-with-core> E at «string»:11:26: clan-pytest-with-core> E 10| name = "clan-flake-select"; clan-pytest-with-core> E 11| result = builtins.toJSON [ clan-pytest-with-core> E | ^ clan-pytest-with-core> E 12| (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "secretStore"}]'') flake) clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating list element at index 0 clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at «string»:12:22: clan-pytest-with-core> E 11| result = builtins.toJSON [ clan-pytest-with-core> E 12| (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "secretStore"}]'') flake) clan-pytest-with-core> E | ^ clan-pytest-with-core> E 13| ]; clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'applySelectors' clan-pytest-with-core> E at /build/store/nix/store/cba1x9mxnwr8b36cw41bya7g6d5v1p7d-source/select.nix:262:16: clan-pytest-with-core> E 261| applySelectors = clan-pytest-with-core> E 262| selectors: obj: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 263| let clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/cba1x9mxnwr8b36cw41bya7g6d5v1p7d-source/select.nix:352:5: clan-pytest-with-core> E 351| in clan-pytest-with-core> E 352| recurse selectors 0 obj; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 353| clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'recurse' clan-pytest-with-core> E at /build/store/nix/store/cba1x9mxnwr8b36cw41bya7g6d5v1p7d-source/select.nix:265:25: clan-pytest-with-core> E 264| recurse = clan-pytest-with-core> E 265| selectors: idx: obj: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 266| # we are done clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating a branch condition clan-pytest-with-core> E at /build/store/nix/store/cba1x9mxnwr8b36cw41bya7g6d5v1p7d-source/select.nix:281:11: clan-pytest-with-core> E 280| # lists clan-pytest-with-core> E 281| if builtins.isList obj then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 282| if selector.type == "all" then clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'isList' builtin clan-pytest-with-core> E at /build/store/nix/store/cba1x9mxnwr8b36cw41bya7g6d5v1p7d-source/select.nix:281:14: clan-pytest-with-core> E 280| # lists clan-pytest-with-core> E 281| if builtins.isList obj then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 282| if selector.type == "all" then clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'getFlake' builtin clan-pytest-with-core> E at «string»:3:23: clan-pytest-with-core> E 2| let clan-pytest-with-core> E 3| flake = builtins.getFlake "path:/nix/store/ka83d8fj3m7i3075j2mcx749dnwk9z09-source?narHash=sha256-mxccG+uk81QuR8iFf/ac+tlSRm18LPA5OiSQwUsvspU="; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 4| selectLib = ( clan-pytest-with-core> E clan-pytest-with-core> E … while updating the lock file of flake 'path:/nix/store/ka83d8fj3m7i3075j2mcx749dnwk9z09-source?lastModified=0&narHash=sha256-mxccG%2Buk81QuR8iFf/ac%2BtlSRm18LPA5OiSQwUsvspU%3D' clan-pytest-with-core> E clan-pytest-with-core> E … while updating the flake input 'clan-core' clan-pytest-with-core> E clan-pytest-with-core> E error: cannot update unlocked flake input 'clan-core' in pure mode clan-pytest-with-core> E clan-pytest-with-core> E Return Code: 1 clan-pytest-with-core> clan-pytest-with-core> /build/src/clan_lib/cmd/__init__.py:451: ClanCmdError clan-pytest-with-core> clan-pytest-with-core> The above exception was the direct cause of the following exception: clan-pytest-with-core> clan-pytest-with-core> monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7fffe2265810> clan-pytest-with-core> temporary_home = PosixPath('/build/pytest-yksr771e') clan-pytest-with-core> clan_core = PosixPath('/nix/store/c4gps8k2ky7ix7h6cgr1ss6pflxcsxmg-clan-core-flake') clan-pytest-with-core> capture_output = clan-pytest-with-core> patch_get_clan_details = .get_clan_details at 0x7fffe2226a30> clan-pytest-with-core> clan-pytest-with-core> @pytest.mark.broken_on_darwin clan-pytest-with-core> @pytest.mark.with_core clan-pytest-with-core> def test_init_existing_git( clan-pytest-with-core> monkeypatch: pytest.MonkeyPatch, clan-pytest-with-core> temporary_home: Path, clan-pytest-with-core> clan_core: Path, clan-pytest-with-core> capture_output: CaptureOutput, clan-pytest-with-core> patch_get_clan_details: Any, # noqa: ARG001 clan-pytest-with-core> ) -> None: clan-pytest-with-core> flake_dir = temporary_home / "test-flake" clan-pytest-with-core> clan-pytest-with-core> run(["git", "init", str(temporary_home)]) clan-pytest-with-core> clan-pytest-with-core> monkeypatch.setenv("LOGNAME", "testuser") clan-pytest-with-core> > cli.run( clan-pytest-with-core> [ clan-pytest-with-core> "init", clan-pytest-with-core> str(flake_dir), clan-pytest-with-core> "--template=default", clan-pytest-with-core> "--no-update", clan-pytest-with-core> "--no-interactive", clan-pytest-with-core> ] clan-pytest-with-core> ) clan-pytest-with-core> clan-pytest-with-core> /build/src/clan_cli/init_test.py:78: clan-pytest-with-core> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ clan-pytest-with-core> /build/src/clan_cli/tests/helpers/cli.py:22: in run clan-pytest-with-core> parsed.func(parsed) clan-pytest-with-core> /build/src/clan_cli/init.py:54: in init_command clan-pytest-with-core> register_admin_keys( clan-pytest-with-core> /build/src/clan_cli/vars/keygen.py:89: in register_admin_keys clan-pytest-with-core> backend = Flake(str(flake_dir)).select(vars_settings_secret_store()) clan-pytest-with-core> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ clan-pytest-with-core> /build/src/clan_lib/flake/flake.py:1177: in select clan-pytest-with-core> self.get_from_nix([selector]) clan-pytest-with-core> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ clan-pytest-with-core> clan-pytest-with-core> self = Flake(identifier='/build/pytest-yksr771e/test-flake', hash='sha256-mxccG+uk81QuR8iFf/ac+tlSRm18LPA5OiSQwUsvspU=', stor...src/clan_lib/flake/flake.py", line 833, in _record_cache_miss\n stack_trace = "".join(traceback.format_stack())\n']) clan-pytest-with-core> selectors = ['clanInternals.vars.settings.secretStore'] clan-pytest-with-core> clan-pytest-with-core> def get_from_nix( clan-pytest-with-core> self, clan-pytest-with-core> selectors: list[str], clan-pytest-with-core> ) -> None: clan-pytest-with-core> """Retrieves specific attributes from a Nix flake using the provided selectors. clan-pytest-with-core> clan-pytest-with-core> This function interacts with the Nix build system to fetch and process clan-pytest-with-core> attributes from a flake. It uses the provided selectors to determine which clan-pytest-with-core> attributes to retrieve and optionally accepts additional Nix options for clan-pytest-with-core> customization. The results are cached for future use. clan-pytest-with-core> Used mostly as a lowlevel function for `precache` and `select` methods. clan-pytest-with-core> clan-pytest-with-core> Args: clan-pytest-with-core> selectors (list[str]): A list of attribute selectors to fetch from the flake. clan-pytest-with-core> nix_options (list[str] | None): Optional additional options to pass to the Nix build command. clan-pytest-with-core> clan-pytest-with-core> Raises: clan-pytest-with-core> ClanError: If the number of outputs does not match the number of selectors. clan-pytest-with-core> AssertionError: If the cache or flake cache path is not properly initialized. clan-pytest-with-core> clan-pytest-with-core> """ clan-pytest-with-core> if self._cache is None: clan-pytest-with-core> self.invalidate_cache() clan-pytest-with-core> if self._cache is None: clan-pytest-with-core> msg = "Cache cannot be None after invalidation" clan-pytest-with-core> raise ClanError(msg) clan-pytest-with-core> clan-pytest-with-core> nix_options = self.nix_options[:] if self.nix_options is not None else [] clan-pytest-with-core> clan-pytest-with-core> str_selectors = [ clan-pytest-with-core> selectors_as_json(parse_selector(selector)) for selector in selectors clan-pytest-with-core> ] clan-pytest-with-core> clan-pytest-with-core> config = nix_config() clan-pytest-with-core> clan-pytest-with-core> select_hash = "sha256-yxcNOha7Cfv2nhVpz9ZXSNKk0R7wt4AiBklJ8D24rVg=" clan-pytest-with-core> if not select_hash.startswith("sha256-"): clan-pytest-with-core> select_flake = Flake(str(select_source()), nix_options=nix_options) clan-pytest-with-core> select_flake.invalidate_cache() clan-pytest-with-core> if select_flake.hash is None: clan-pytest-with-core> msg = "this should be impossible as invalidate_cache() should always set `hash`" clan-pytest-with-core> raise ClanError(msg) clan-pytest-with-core> select_hash = select_flake.hash clan-pytest-with-core> clan-pytest-with-core> # fmt: off clan-pytest-with-core> nix_code = f""" clan-pytest-with-core> let clan-pytest-with-core> flake = builtins.getFlake "path:{self.store_path}?narHash={self.hash}"; clan-pytest-with-core> selectLib = ( clan-pytest-with-core> builtins.getFlake clan-pytest-with-core> "path:{select_source()}?narHash={select_hash}" clan-pytest-with-core> ).lib; clan-pytest-with-core> in clan-pytest-with-core> derivation {{ clan-pytest-with-core> name = "clan-flake-select"; clan-pytest-with-core> result = builtins.toJSON [ clan-pytest-with-core> {" ".join( clan-pytest-with-core> [ clan-pytest-with-core> f"(selectLib.applySelectors (builtins.fromJSON ''{attr}'') flake)" clan-pytest-with-core> for attr in str_selectors clan-pytest-with-core> ] clan-pytest-with-core> )} clan-pytest-with-core> ]; clan-pytest-with-core> clan-pytest-with-core> # We can always build this derivation locally, since /bin/sh is system independent, clan-pytest-with-core> # remote builders would introduce needless overhead. clan-pytest-with-core> preferLocalBuild = true; clan-pytest-with-core> # Save the roundtrip to check the binary caches for trivial substitutions clan-pytest-with-core> allowSubstitutes = false; clan-pytest-with-core> clan-pytest-with-core> passAsFile = [ "result" ]; clan-pytest-with-core> system = "{config["system"]}"; clan-pytest-with-core> builder = "/bin/sh"; clan-pytest-with-core> args = [ clan-pytest-with-core> "-c" clan-pytest-with-core> '' clan-pytest-with-core> read -r x < "$resultPath"; printf %s "$x" > $out clan-pytest-with-core> '' clan-pytest-with-core> ]; clan-pytest-with-core> }} clan-pytest-with-core> """ clan-pytest-with-core> trace = os.environ.get("CLAN_DEBUG_NIX_SELECTORS") == "1" clan-pytest-with-core> try: clan-pytest-with-core> build_output = Path( clan-pytest-with-core> run( clan-pytest-with-core> nix_build(["--expr", nix_code, *nix_options]), clan-pytest-with-core> RunOpts(log=Log.NONE, trace=trace), clan-pytest-with-core> ).stdout.strip(), clan-pytest-with-core> ) clan-pytest-with-core> except ClanCmdError as e: clan-pytest-with-core> if "error: attribute 'clan' missing" in str(e): clan-pytest-with-core> msg = ("This flake does not export the 'clan' attribute. \n" clan-pytest-with-core> "Please write 'clan = clan.config;' into the outputs of your flake.nix.") clan-pytest-with-core> raise ClanSelectError( clan-pytest-with-core> flake_identifier=self.identifier, clan-pytest-with-core> selectors=selectors, clan-pytest-with-core> cmd_error=e, clan-pytest-with-core> description=msg, clan-pytest-with-core> ) from e clan-pytest-with-core> clan-pytest-with-core> # If the error is about a missing attribute, we raise a ClanSelectError clan-pytest-with-core> # with the failed selectors and the flake identifier. clan-pytest-with-core> > raise ClanSelectError( clan-pytest-with-core> flake_identifier=self.identifier, clan-pytest-with-core> selectors=selectors, clan-pytest-with-core> cmd_error=e, clan-pytest-with-core> ) from e clan-pytest-with-core> E clan_lib.flake.flake.ClanSelectError: Error on: $ clan select 'clanInternals.vars.settings.secretStore' clan-pytest-with-core> E Reason: cannot update unlocked flake input 'clan-core' in pure mode. Use flag '--debug' to see full nix trace. clan-pytest-with-core> clan-pytest-with-core> /build/src/clan_lib/flake/flake.py:1094: ClanSelectError clan-pytest-with-core> ----------------------------- Captured stderr call ----------------------------- clan-pytest-with-core> git \ clan-pytest-with-core> init \ clan-pytest-with-core> /build/pytest-yksr771e clan-pytest-with-core> Caller: /build/src/clan_cli/init_test.py:75::test_init_existing_git clan-pytest-with-core> clan-pytest-with-core> hint: Using 'master' as the name for the initial branch. This default branch name clan-pytest-with-core> hint: will change to "main" in Git 3.0. To configure the initial branch name clan-pytest-with-core> hint: to use in all of your new repositories, which will suppress this warning, clan-pytest-with-core> hint: call: clan-pytest-with-core> hint: clan-pytest-with-core> hint: git config --global init.defaultBranch clan-pytest-with-core> hint: clan-pytest-with-core> hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and clan-pytest-with-core> hint: 'development'. The just-created branch can be renamed via this command: clan-pytest-with-core> hint: clan-pytest-with-core> hint: git branch -m clan-pytest-with-core> hint: clan-pytest-with-core> hint: Disable this message with "git config set advice.defaultBranchName false" clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_cli/init_test.py:75::test_init_existing_git clan-pytest-with-core> clan-pytest-with-core> [localhost] $ clan init /build/pytest-yksr771e/test-flake --template=default --no-update --no-interactive clan-pytest-with-core> Caller: /build/src/clan_cli/init_test.py:78::test_init_existing_git clan-pytest-with-core> clan-pytest-with-core> age-keygen clan-pytest-with-core> Caller: /build/src/clan_cli/secrets/sops.py:382::generate_private_key clan-pytest-with-core> clan-pytest-with-core> Public key: age13yv78slresp8ul4hghhjtll427wmt4pvmdec0w66zymv7n9fg4mscyard3 clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_cli/secrets/sops.py:382::generate_private_key clan-pytest-with-core> clan-pytest-with-core> Generated age private key at '/build/pytest-yksr771e/.config/sops/age/keys.txt' for your user. clan-pytest-with-core> Please back it up on a secure location or you will lose access to your secrets. clan-pytest-with-core> nix \ clan-pytest-with-core> --extra-experimental-features 'nix-command flakes' \ clan-pytest-with-core> --option warn-dirty \ clan-pytest-with-core> false \ clan-pytest-with-core> flake \ clan-pytest-with-core> metadata \ clan-pytest-with-core> --json /build/pytest-yksr771e \ clan-pytest-with-core> --store /build/store clan-pytest-with-core> Caller: /build/src/clan_lib/nix/__init__.py:144::nix_metadata clan-pytest-with-core> clan-pytest-with-core> warning: you don't have Internet access; disabling some network-dependent features clan-pytest-with-core> path '/build/pytest-yksr771e' does not contain a 'flake.nix', searching up clan-pytest-with-core> error: path '/build/pytest-yksr771e' is not part of a flake (neither it nor its parent directories contain a 'flake.nix' file) clan-pytest-with-core> Command exited with return code 1 clan-pytest-with-core> Caller: /build/src/clan_lib/nix/__init__.py:144::nix_metadata clan-pytest-with-core> clan-pytest-with-core> Found a repository, but it is not a valid flake: /build/pytest-yksr771e. Falling back to builtin template. clan-pytest-with-core> Prefetching flake /build/src/clan_lib/clan_core_templates clan-pytest-with-core> warning: you don't have Internet access; disabling some network-dependent features clan-pytest-with-core> Loading flake cache from file /build/clan-flake-cache/flakes-v2/61f7e410abb4ac31c6cde3e73e865823fc5f1087 clan-pytest-with-core> Prefetching flake /build/src/clan_lib/clan_core_templates clan-pytest-with-core> warning: you don't have Internet access; disabling some network-dependent features clan-pytest-with-core> Loading flake cache from file /build/clan-flake-cache/flakes-v2/61f7e410abb4ac31c6cde3e73e865823fc5f1087 clan-pytest-with-core> (cached) $ clan select 'clanInternals.templates.clan."default"' clan-pytest-with-core> chmod \ clan-pytest-with-core> -R u+w \ clan-pytest-with-core> /build/pytest-yksr771e/test-flake clan-pytest-with-core> Caller: /build/src/clan_lib/templates/filesystem.py:36::copy_from_nixstore clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/templates/filesystem.py:36::copy_from_nixstore clan-pytest-with-core> clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-yksr771e/test-flake \ clan-pytest-with-core> init clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:173::create_clan clan-pytest-with-core> clan-pytest-with-core> hint: Using 'master' as the name for the initial branch. This default branch name clan-pytest-with-core> hint: will change to "main" in Git 3.0. To configure the initial branch name clan-pytest-with-core> hint: to use in all of your new repositories, which will suppress this warning, clan-pytest-with-core> hint: call: clan-pytest-with-core> hint: clan-pytest-with-core> hint: git config --global init.defaultBranch clan-pytest-with-core> hint: clan-pytest-with-core> hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and clan-pytest-with-core> hint: 'development'. The just-created branch can be renamed via this command: clan-pytest-with-core> hint: clan-pytest-with-core> hint: git branch -m clan-pytest-with-core> hint: clan-pytest-with-core> hint: Disable this message with "git config set advice.defaultBranchName false" clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:173::create_clan clan-pytest-with-core> clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-yksr771e/test-flake \ clan-pytest-with-core> add \ clan-pytest-with-core> . clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:174::create_clan clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:174::create_clan clan-pytest-with-core> clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-yksr771e/test-flake \ clan-pytest-with-core> config \ clan-pytest-with-core> user.name clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:177::create_clan clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 1 clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:177::create_clan clan-pytest-with-core> clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-yksr771e/test-flake \ clan-pytest-with-core> config \ clan-pytest-with-core> user.name \ clan-pytest-with-core> clan-tool clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:182::create_clan clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:182::create_clan clan-pytest-with-core> clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-yksr771e/test-flake \ clan-pytest-with-core> config \ clan-pytest-with-core> user.email clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:184::create_clan clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 1 clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:184::create_clan clan-pytest-with-core> clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-yksr771e/test-flake \ clan-pytest-with-core> config \ clan-pytest-with-core> user.email \ clan-pytest-with-core> clan@example.com clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:189::create_clan clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:189::create_clan clan-pytest-with-core> clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-yksr771e/test-flake \ clan-pytest-with-core> add \ clan-pytest-with-core> . clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:203::create_clan clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:203::create_clan clan-pytest-with-core> clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-yksr771e/test-flake \ clan-pytest-with-core> commit \ clan-pytest-with-core> -m 'Initial commit' clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:204::create_clan clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:204::create_clan clan-pytest-with-core> clan-pytest-with-core> Prefetching flake /build/pytest-yksr771e/test-flake clan-pytest-with-core> warning: you don't have Internet access; disabling some network-dependent features clan-pytest-with-core> Cache miss for clanInternals.vars.settings.secretStore clan-pytest-with-core> ------------------------------ Captured log call ------------------------------- clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:147 git \ clan-pytest-with-core> init \ clan-pytest-with-core> /build/pytest-yksr771e clan-pytest-with-core> Caller: /build/src/clan_cli/init_test.py:75::test_init_existing_git clan-pytest-with-core> clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 hint: Using 'master' as the name for the initial branch. This default branch name clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 hint: will change to "main" in Git 3.0. To configure the initial branch name clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 hint: to use in all of your new repositories, which will suppress this warning, clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 hint: call: clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 hint: clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 hint: git config --global init.defaultBranch clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 hint: clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 hint: 'development'. The just-created branch can be renamed via this command: clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 hint: clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 hint: git branch -m clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 hint: clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 hint: Disable this message with "git config set advice.defaultBranchName false" clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:147 Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_cli/init_test.py:75::test_init_existing_git clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_cli.tests.helpers.cli:__init__.py:147 $ clan init /build/pytest-yksr771e/test-flake --template=default --no-update --no-interactive clan-pytest-with-core> Caller: /build/src/clan_cli/init_test.py:78::test_init_existing_git clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:147 age-keygen clan-pytest-with-core> Caller: /build/src/clan_cli/secrets/sops.py:382::generate_private_key clan-pytest-with-core> clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 Public key: age13yv78slresp8ul4hghhjtll427wmt4pvmdec0w66zymv7n9fg4mscyard3 clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:147 Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_cli/secrets/sops.py:382::generate_private_key clan-pytest-with-core> clan-pytest-with-core> INFO clan_cli.secrets.key:key.py:41 Generated age private key at '/build/pytest-yksr771e/.config/sops/age/keys.txt' for your user. clan-pytest-with-core> Please back it up on a secure location or you will lose access to your secrets. clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:147 nix \ clan-pytest-with-core> --extra-experimental-features 'nix-command flakes' \ clan-pytest-with-core> --option warn-dirty \ clan-pytest-with-core> false \ clan-pytest-with-core> flake \ clan-pytest-with-core> metadata \ clan-pytest-with-core> --json /build/pytest-yksr771e \ clan-pytest-with-core> --store /build/store clan-pytest-with-core> Caller: /build/src/clan_lib/nix/__init__.py:144::nix_metadata clan-pytest-with-core> clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 warning: you don't have Internet access; disabling some network-dependent features clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 path '/build/pytest-yksr771e' does not contain a 'flake.nix', searching up clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 error: path '/build/pytest-yksr771e' is not part of a flake (neither it nor its parent directories contain a 'flake.nix' file) clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:147 Command exited with return code 1 clan-pytest-with-core> Caller: /build/src/clan_lib/nix/__init__.py:144::nix_metadata clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.clan.create:create.py:134 Found a repository, but it is not a valid flake: /build/pytest-yksr771e. Falling back to builtin template. clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:927 Prefetching flake /build/src/clan_lib/clan_core_templates clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 warning: you don't have Internet access; disabling some network-dependent features clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:789 Loading flake cache from file /build/clan-flake-cache/flakes-v2/61f7e410abb4ac31c6cde3e73e865823fc5f1087 clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:927 Prefetching flake /build/src/clan_lib/clan_core_templates clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 warning: you don't have Internet access; disabling some network-dependent features clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:789 Loading flake cache from file /build/clan-flake-cache/flakes-v2/61f7e410abb4ac31c6cde3e73e865823fc5f1087 clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1179 (cached) $ clan select 'clanInternals.templates.clan."default"' clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:147 chmod \ clan-pytest-with-core> -R u+w \ clan-pytest-with-core> /build/pytest-yksr771e/test-flake clan-pytest-with-core> Caller: /build/src/clan_lib/templates/filesystem.py:36::copy_from_nixstore clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:147 Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/templates/filesystem.py:36::copy_from_nixstore clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:147 git \ clan-pytest-with-core> -C /build/pytest-yksr771e/test-flake \ clan-pytest-with-core> init clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:173::create_clan clan-pytest-with-core> clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 hint: Using 'master' as the name for the initial branch. This default branch name clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 hint: will change to "main" in Git 3.0. To configure the initial branch name clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 hint: to use in all of your new repositories, which will suppress this warning, clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 hint: call: clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 hint: clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 hint: git config --global init.defaultBranch clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 hint: clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 hint: 'development'. The just-created branch can be renamed via this command: clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 hint: clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 hint: git branch -m clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 hint: clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 hint: Disable this message with "git config set advice.defaultBranchName false" clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:147 Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:173::create_clan clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:147 git \ clan-pytest-with-core> -C /build/pytest-yksr771e/test-flake \ clan-pytest-with-core> add \ clan-pytest-with-core> . clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:174::create_clan clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:147 Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:174::create_clan clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:147 git \ clan-pytest-with-core> -C /build/pytest-yksr771e/test-flake \ clan-pytest-with-core> config \ clan-pytest-with-core> user.name clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:177::create_clan clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:147 Command exited with return code 1 clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:177::create_clan clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:147 git \ clan-pytest-with-core> -C /build/pytest-yksr771e/test-flake \ clan-pytest-with-core> config \ clan-pytest-with-core> user.name \ clan-pytest-with-core> clan-tool clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:182::create_clan clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:147 Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:182::create_clan clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:147 git \ clan-pytest-with-core> -C /build/pytest-yksr771e/test-flake \ clan-pytest-with-core> config \ clan-pytest-with-core> user.email clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:184::create_clan clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:147 Command exited with return code 1 clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:184::create_clan clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:147 git \ clan-pytest-with-core> -C /build/pytest-yksr771e/test-flake \ clan-pytest-with-core> config \ clan-pytest-with-core> user.email \ clan-pytest-with-core> clan@example.com clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:189::create_clan clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:147 Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:189::create_clan clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:147 git \ clan-pytest-with-core> -C /build/pytest-yksr771e/test-flake \ clan-pytest-with-core> add \ clan-pytest-with-core> . clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:203::create_clan clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:147 Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:203::create_clan clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:147 git \ clan-pytest-with-core> -C /build/pytest-yksr771e/test-flake \ clan-pytest-with-core> commit \ clan-pytest-with-core> -m 'Initial commit' clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:204::create_clan clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:147 Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:204::create_clan clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:927 Prefetching flake /build/pytest-yksr771e/test-flake clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 warning: you don't have Internet access; disabling some network-dependent features clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1174 Cache miss for clanInternals.vars.settings.secretStore clan-pytest-with-core> --------------------------- Captured stdout teardown --------------------------- clan-pytest-with-core> FAILED [ 0%] clan-pytest-with-core> __________________________ test_init_minimal_template __________________________ clan-pytest-with-core> [gw1] linux -- Python 3.14.7 /nix/store/lb41b0anx1f98y9y5s9mdv97gjgsq740-python3-3.14.7/bin/python clan-pytest-with-core> clan-pytest-with-core> self = Flake(identifier='/build/pytest-5njpynkk/test-flake', hash='sha256-gM0cIDoL350QkMDLgp3ekm+zCIYLTpdcLCSWY+qqtCA=', stor...src/clan_lib/flake/flake.py", line 833, in _record_cache_miss\n stack_trace = "".join(traceback.format_stack())\n']) clan-pytest-with-core> selectors = ['clanInternals.vars.settings.secretStore'] clan-pytest-with-core> clan-pytest-with-core> def get_from_nix( clan-pytest-with-core> self, clan-pytest-with-core> selectors: list[str], clan-pytest-with-core> ) -> None: clan-pytest-with-core> """Retrieves specific attributes from a Nix flake using the provided selectors. clan-pytest-with-core> clan-pytest-with-core> This function interacts with the Nix build system to fetch and process clan-pytest-with-core> attributes from a flake. It uses the provided selectors to determine which clan-pytest-with-core> attributes to retrieve and optionally accepts additional Nix options for clan-pytest-with-core> customization. The results are cached for future use. clan-pytest-with-core> Used mostly as a lowlevel function for `precache` and `select` methods. clan-pytest-with-core> clan-pytest-with-core> Args: clan-pytest-with-core> selectors (list[str]): A list of attribute selectors to fetch from the flake. clan-pytest-with-core> nix_options (list[str] | None): Optional additional options to pass to the Nix build command. clan-pytest-with-core> clan-pytest-with-core> Raises: clan-pytest-with-core> ClanError: If the number of outputs does not match the number of selectors. clan-pytest-with-core> AssertionError: If the cache or flake cache path is not properly initialized. clan-pytest-with-core> clan-pytest-with-core> """ clan-pytest-with-core> if self._cache is None: clan-pytest-with-core> self.invalidate_cache() clan-pytest-with-core> if self._cache is None: clan-pytest-with-core> msg = "Cache cannot be None after invalidation" clan-pytest-with-core> raise ClanError(msg) clan-pytest-with-core> clan-pytest-with-core> nix_options = self.nix_options[:] if self.nix_options is not None else [] clan-pytest-with-core> clan-pytest-with-core> str_selectors = [ clan-pytest-with-core> selectors_as_json(parse_selector(selector)) for selector in selectors clan-pytest-with-core> ] clan-pytest-with-core> clan-pytest-with-core> config = nix_config() clan-pytest-with-core> clan-pytest-with-core> select_hash = "sha256-yxcNOha7Cfv2nhVpz9ZXSNKk0R7wt4AiBklJ8D24rVg=" clan-pytest-with-core> if not select_hash.startswith("sha256-"): clan-pytest-with-core> select_flake = Flake(str(select_source()), nix_options=nix_options) clan-pytest-with-core> select_flake.invalidate_cache() clan-pytest-with-core> if select_flake.hash is None: clan-pytest-with-core> msg = "this should be impossible as invalidate_cache() should always set `hash`" clan-pytest-with-core> raise ClanError(msg) clan-pytest-with-core> select_hash = select_flake.hash clan-pytest-with-core> clan-pytest-with-core> # fmt: off clan-pytest-with-core> nix_code = f""" clan-pytest-with-core> let clan-pytest-with-core> flake = builtins.getFlake "path:{self.store_path}?narHash={self.hash}"; clan-pytest-with-core> selectLib = ( clan-pytest-with-core> builtins.getFlake clan-pytest-with-core> "path:{select_source()}?narHash={select_hash}" clan-pytest-with-core> ).lib; clan-pytest-with-core> in clan-pytest-with-core> derivation {{ clan-pytest-with-core> name = "clan-flake-select"; clan-pytest-with-core> result = builtins.toJSON [ clan-pytest-with-core> {" ".join( clan-pytest-with-core> [ clan-pytest-with-core> f"(selectLib.applySelectors (builtins.fromJSON ''{attr}'') flake)" clan-pytest-with-core> for attr in str_selectors clan-pytest-with-core> ] clan-pytest-with-core> )} clan-pytest-with-core> ]; clan-pytest-with-core> clan-pytest-with-core> # We can always build this derivation locally, since /bin/sh is system independent, clan-pytest-with-core> # remote builders would introduce needless overhead. clan-pytest-with-core> preferLocalBuild = true; clan-pytest-with-core> # Save the roundtrip to check the binary caches for trivial substitutions clan-pytest-with-core> allowSubstitutes = false; clan-pytest-with-core> clan-pytest-with-core> passAsFile = [ "result" ]; clan-pytest-with-core> system = "{config["system"]}"; clan-pytest-with-core> builder = "/bin/sh"; clan-pytest-with-core> args = [ clan-pytest-with-core> "-c" clan-pytest-with-core> '' clan-pytest-with-core> read -r x < "$resultPath"; printf %s "$x" > $out clan-pytest-with-core> '' clan-pytest-with-core> ]; clan-pytest-with-core> }} clan-pytest-with-core> """ clan-pytest-with-core> trace = os.environ.get("CLAN_DEBUG_NIX_SELECTORS") == "1" clan-pytest-with-core> try: clan-pytest-with-core> build_output = Path( clan-pytest-with-core> > run( clan-pytest-with-core> nix_build(["--expr", nix_code, *nix_options]), clan-pytest-with-core> RunOpts(log=Log.NONE, trace=trace), clan-pytest-with-core> ).stdout.strip(), clan-pytest-with-core> ) clan-pytest-with-core> clan-pytest-with-core> /build/src/clan_lib/flake/flake.py:1076: clan-pytest-with-core> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ clan-pytest-with-core> clan-pytest-with-core> cmd = ['nix', '--extra-experimental-features', 'nix-command flakes', '--option', 'warn-dirty', 'false', ...] clan-pytest-with-core> options = RunOpts(input=None, stdout=None, stderr=None, env=None, cwd=PosixPath('/build/pytest-5njpynkk'), log=, pr...al=False, timeout=inf, shell=False, requires_root_perm=False, graphical_perm=False, trace=False, sensitive_input=False) clan-pytest-with-core> clan-pytest-with-core> def run( clan-pytest-with-core> cmd: list[str], clan-pytest-with-core> options: RunOpts | None = None, clan-pytest-with-core> ) -> CmdOut: clan-pytest-with-core> if options is None: clan-pytest-with-core> options = RunOpts() clan-pytest-with-core> if options.cwd is None: clan-pytest-with-core> options.cwd = Path.cwd() clan-pytest-with-core> clan-pytest-with-core> async_ctx = get_async_ctx() clan-pytest-with-core> # Fill in the options from the thread-local data clan-pytest-with-core> # if they are not set in the options clan-pytest-with-core> if async_ctx: clan-pytest-with-core> if options.prefix is None: clan-pytest-with-core> options.prefix = async_ctx.prefix clan-pytest-with-core> if options.stdout is None: clan-pytest-with-core> options.stdout = async_ctx.stdout clan-pytest-with-core> if options.stderr is None: clan-pytest-with-core> options.stderr = async_ctx.stderr clan-pytest-with-core> clan-pytest-with-core> if options.requires_root_perm: clan-pytest-with-core> cmd = cmd_with_root(cmd, options.graphical_perm) clan-pytest-with-core> # Use our sudo ask proxy here as well clan-pytest-with-core> options.needs_user_terminal = True clan-pytest-with-core> clan-pytest-with-core> if cmdlog.isEnabledFor(logging.DEBUG) and options.trace: clan-pytest-with-core> if options.input and isinstance(options.input, bytes): clan-pytest-with-core> # Always redact sensitive input (e.g., private keys, passwords) clan-pytest-with-core> if options.sensitive_input: clan-pytest-with-core> filtered_input = "<>" clan-pytest-with-core> elif any( clan-pytest-with-core> not ch.isprintable() for ch in options.input.decode("ascii", "replace") clan-pytest-with-core> ): clan-pytest-with-core> filtered_input = "<>" clan-pytest-with-core> else: clan-pytest-with-core> filtered_input = options.input.decode("ascii", "replace") clan-pytest-with-core> clan-pytest-with-core> print_trace( clan-pytest-with-core> f"echo '{filtered_input}' | {indent_command(cmd)}", clan-pytest-with-core> cmdlog, clan-pytest-with-core> options.prefix, clan-pytest-with-core> ) clan-pytest-with-core> else: clan-pytest-with-core> print_trace(f"{indent_command(cmd)}", cmdlog, options.prefix) clan-pytest-with-core> clan-pytest-with-core> start = timeit.default_timer() clan-pytest-with-core> with ExitStack() as stack: clan-pytest-with-core> stdin = subprocess.PIPE if isinstance(options.input, bytes) else options.input clan-pytest-with-core> process = stack.enter_context( clan-pytest-with-core> subprocess.Popen( clan-pytest-with-core> cmd, clan-pytest-with-core> cwd=str(options.cwd), clan-pytest-with-core> env=options.env, clan-pytest-with-core> stdin=stdin, clan-pytest-with-core> stdout=subprocess.PIPE, clan-pytest-with-core> stderr=subprocess.PIPE, clan-pytest-with-core> start_new_session=not options.needs_user_terminal, clan-pytest-with-core> shell=options.shell, clan-pytest-with-core> ), clan-pytest-with-core> ) clan-pytest-with-core> clan-pytest-with-core> if options.needs_user_terminal: clan-pytest-with-core> # we didn't allocate a new session, so we can't terminate the process group clan-pytest-with-core> stack.enter_context(terminate_process(process)) clan-pytest-with-core> else: clan-pytest-with-core> stack.enter_context(terminate_process_group(process)) clan-pytest-with-core> clan-pytest-with-core> input_bytes = options.input if isinstance(options.input, bytes) else None clan-pytest-with-core> clan-pytest-with-core> stdout_buf, stderr_buf, stdout_raw = handle_io( clan-pytest-with-core> process, clan-pytest-with-core> options.log, clan-pytest-with-core> prefix=options.prefix, clan-pytest-with-core> msg_color=options.msg_color, clan-pytest-with-core> timeout=options.timeout, clan-pytest-with-core> input_bytes=input_bytes, clan-pytest-with-core> stdout=options.stdout, clan-pytest-with-core> stderr=options.stderr, clan-pytest-with-core> cmd=cmd, clan-pytest-with-core> cwd=options.cwd, clan-pytest-with-core> env=options.env, clan-pytest-with-core> ) clan-pytest-with-core> if not is_async_cancelled(): clan-pytest-with-core> process.wait() clan-pytest-with-core> clan-pytest-with-core> if TIME_TABLE: clan-pytest-with-core> TIME_TABLE.add(shlex.join(cmd), timeit.default_timer() - start) clan-pytest-with-core> clan-pytest-with-core> # Wait for the subprocess to finish clan-pytest-with-core> cmd_out = CmdOut( clan-pytest-with-core> stdout=stdout_buf, clan-pytest-with-core> stderr=stderr_buf, clan-pytest-with-core> cwd=options.cwd, clan-pytest-with-core> env=options.env, clan-pytest-with-core> command_list=cmd, clan-pytest-with-core> returncode=process.returncode, clan-pytest-with-core> msg=options.error_msg, clan-pytest-with-core> stdout_raw=stdout_raw, clan-pytest-with-core> ) clan-pytest-with-core> clan-pytest-with-core> if cmdlog.isEnabledFor(logging.DEBUG) and options.trace: clan-pytest-with-core> print_trace( clan-pytest-with-core> f"Command exited with return code {process.returncode}", clan-pytest-with-core> cmdlog, clan-pytest-with-core> options.prefix, clan-pytest-with-core> ) clan-pytest-with-core> clan-pytest-with-core> if options.check and process.returncode != 0: clan-pytest-with-core> if is_async_cancelled(): clan-pytest-with-core> cmd_out.msg = "Command cancelled" clan-pytest-with-core> > raise ClanCmdError(cmd_out) clan-pytest-with-core> E clan_lib.errors.ClanCmdError: clan-pytest-with-core> E =================================== Command ==================================== clan-pytest-with-core> E nix \ clan-pytest-with-core> E --extra-experimental-features 'nix-command flakes' \ clan-pytest-with-core> E --option warn-dirty \ clan-pytest-with-core> E false \ clan-pytest-with-core> E build \ clan-pytest-with-core> E --flake-registry '' \ clan-pytest-with-core> E --print-out-paths --print-build-logs \ clan-pytest-with-core> E --show-trace --no-link \ clan-pytest-with-core> E --expr ' clan-pytest-with-core> E let clan-pytest-with-core> E flake = builtins.getFlake "path:/nix/store/fy6gya5x7sm3ylalc2fph31c2rlzrxha-source?narHash=sha256-gM0cIDoL350QkMDLgp3ekm+zCIYLTpdcLCSWY+qqtCA="; clan-pytest-with-core> E selectLib = ( clan-pytest-with-core> E builtins.getFlake clan-pytest-with-core> E "path:/nix/store/cba1x9mxnwr8b36cw41bya7g6d5v1p7d-source?narHash=sha256-yxcNOha7Cfv2nhVpz9ZXSNKk0R7wt4AiBklJ8D24rVg=" clan-pytest-with-core> E ).lib; clan-pytest-with-core> E in clan-pytest-with-core> E derivation { clan-pytest-with-core> E name = "clan-flake-select"; clan-pytest-with-core> E result = builtins.toJSON [ clan-pytest-with-core> E (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "secretStore"}]'"'"''"'"') flake) clan-pytest-with-core> E ]; clan-pytest-with-core> E clan-pytest-with-core> E # We can always build this derivation locally, since /bin/sh is system independent, clan-pytest-with-core> E # remote builders would introduce needless overhead. clan-pytest-with-core> E preferLocalBuild = true; clan-pytest-with-core> E # Save the roundtrip to check the binary caches for trivial substitutions clan-pytest-with-core> E allowSubstitutes = false; clan-pytest-with-core> E clan-pytest-with-core> E passAsFile = [ "result" ]; clan-pytest-with-core> E system = "x86_64-linux"; clan-pytest-with-core> E builder = "/bin/sh"; clan-pytest-with-core> E args = [ clan-pytest-with-core> E "-c" clan-pytest-with-core> E '"'"''"'"' clan-pytest-with-core> E read -r x < "$resultPath"; printf %s "$x" > $out clan-pytest-with-core> E '"'"''"'"' clan-pytest-with-core> E ]; clan-pytest-with-core> E } clan-pytest-with-core> E ' \ clan-pytest-with-core> E --store /build/store clan-pytest-with-core> E clan-pytest-with-core> E ==================================== Stderr ==================================== clan-pytest-with-core> E warning: you don't have Internet access; disabling some network-dependent features clan-pytest-with-core> E error: clan-pytest-with-core> E … while calling the 'derivationStrict' builtin clan-pytest-with-core> E at :37:12: clan-pytest-with-core> E 36| clan-pytest-with-core> E 37| strict = derivationStrict drvAttrs; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 38| clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating derivation 'clan-flake-select' clan-pytest-with-core> E whose name attribute is located at «string»:10:17 clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating attribute 'result' of derivation 'clan-flake-select' clan-pytest-with-core> E at «string»:11:17: clan-pytest-with-core> E 10| name = "clan-flake-select"; clan-pytest-with-core> E 11| result = builtins.toJSON [ clan-pytest-with-core> E | ^ clan-pytest-with-core> E 12| (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "secretStore"}]'') flake) clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'toJSON' builtin clan-pytest-with-core> E at «string»:11:26: clan-pytest-with-core> E 10| name = "clan-flake-select"; clan-pytest-with-core> E 11| result = builtins.toJSON [ clan-pytest-with-core> E | ^ clan-pytest-with-core> E 12| (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "secretStore"}]'') flake) clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating list element at index 0 clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at «string»:12:22: clan-pytest-with-core> E 11| result = builtins.toJSON [ clan-pytest-with-core> E 12| (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "secretStore"}]'') flake) clan-pytest-with-core> E | ^ clan-pytest-with-core> E 13| ]; clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'applySelectors' clan-pytest-with-core> E at /build/store/nix/store/cba1x9mxnwr8b36cw41bya7g6d5v1p7d-source/select.nix:262:16: clan-pytest-with-core> E 261| applySelectors = clan-pytest-with-core> E 262| selectors: obj: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 263| let clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/cba1x9mxnwr8b36cw41bya7g6d5v1p7d-source/select.nix:352:5: clan-pytest-with-core> E 351| in clan-pytest-with-core> E 352| recurse selectors 0 obj; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 353| clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'recurse' clan-pytest-with-core> E at /build/store/nix/store/cba1x9mxnwr8b36cw41bya7g6d5v1p7d-source/select.nix:265:25: clan-pytest-with-core> E 264| recurse = clan-pytest-with-core> E 265| selectors: idx: obj: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 266| # we are done clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating a branch condition clan-pytest-with-core> E at /build/store/nix/store/cba1x9mxnwr8b36cw41bya7g6d5v1p7d-source/select.nix:281:11: clan-pytest-with-core> E 280| # lists clan-pytest-with-core> E 281| if builtins.isList obj then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 282| if selector.type == "all" then clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'isList' builtin clan-pytest-with-core> E at /build/store/nix/store/cba1x9mxnwr8b36cw41bya7g6d5v1p7d-source/select.nix:281:14: clan-pytest-with-core> E 280| # lists clan-pytest-with-core> E 281| if builtins.isList obj then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 282| if selector.type == "all" then clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'getFlake' builtin clan-pytest-with-core> E at «string»:3:23: clan-pytest-with-core> E 2| let clan-pytest-with-core> E 3| flake = builtins.getFlake "path:/nix/store/fy6gya5x7sm3ylalc2fph31c2rlzrxha-source?narHash=sha256-gM0cIDoL350QkMDLgp3ekm+zCIYLTpdcLCSWY+qqtCA="; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 4| selectLib = ( clan-pytest-with-core> E clan-pytest-with-core> E … while updating the lock file of flake 'path:/nix/store/fy6gya5x7sm3ylalc2fph31c2rlzrxha-source?lastModified=0&narHash=sha256-gM0cIDoL350QkMDLgp3ekm%2BzCIYLTpdcLCSWY%2BqqtCA%3D' clan-pytest-with-core> E clan-pytest-with-core> E … while updating the flake input 'clan-core' clan-pytest-with-core> E clan-pytest-with-core> E error: cannot update unlocked flake input 'clan-core' in pure mode clan-pytest-with-core> E clan-pytest-with-core> E Return Code: 1 clan-pytest-with-core> clan-pytest-with-core> /build/src/clan_lib/cmd/__init__.py:451: ClanCmdError clan-pytest-with-core> clan-pytest-with-core> The above exception was the direct cause of the following exception: clan-pytest-with-core> clan-pytest-with-core> monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7fffe22d5910> clan-pytest-with-core> temporary_home = PosixPath('/build/pytest-5njpynkk') clan-pytest-with-core> clan_core = PosixPath('/nix/store/c4gps8k2ky7ix7h6cgr1ss6pflxcsxmg-clan-core-flake') clan-pytest-with-core> capture_output = clan-pytest-with-core> patch_get_clan_details = .get_clan_details at 0x7fffe22dc300> clan-pytest-with-core> clan-pytest-with-core> @pytest.mark.broken_on_darwin clan-pytest-with-core> @pytest.mark.with_core clan-pytest-with-core> def test_init_minimal_template( clan-pytest-with-core> monkeypatch: pytest.MonkeyPatch, clan-pytest-with-core> temporary_home: Path, clan-pytest-with-core> clan_core: Path, clan-pytest-with-core> capture_output: CaptureOutput, clan-pytest-with-core> patch_get_clan_details: Any, # noqa: ARG001 clan-pytest-with-core> ) -> None: clan-pytest-with-core> flake_dir = temporary_home / "test-flake" clan-pytest-with-core> clan-pytest-with-core> monkeypatch.setenv("LOGNAME", "testuser") clan-pytest-with-core> > cli.run( clan-pytest-with-core> [ clan-pytest-with-core> "init", clan-pytest-with-core> str(flake_dir), clan-pytest-with-core> "--template=minimal", clan-pytest-with-core> "--no-update", clan-pytest-with-core> "--no-interactive", clan-pytest-with-core> ] clan-pytest-with-core> ) clan-pytest-with-core> clan-pytest-with-core> /build/src/clan_cli/init_test.py:123: clan-pytest-with-core> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ clan-pytest-with-core> /build/src/clan_cli/tests/helpers/cli.py:22: in run clan-pytest-with-core> parsed.func(parsed) clan-pytest-with-core> /build/src/clan_cli/init.py:54: in init_command clan-pytest-with-core> register_admin_keys( clan-pytest-with-core> /build/src/clan_cli/vars/keygen.py:89: in register_admin_keys clan-pytest-with-core> backend = Flake(str(flake_dir)).select(vars_settings_secret_store()) clan-pytest-with-core> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ clan-pytest-with-core> /build/src/clan_lib/flake/flake.py:1177: in select clan-pytest-with-core> self.get_from_nix([selector]) clan-pytest-with-core> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ clan-pytest-with-core> clan-pytest-with-core> self = Flake(identifier='/build/pytest-5njpynkk/test-flake', hash='sha256-gM0cIDoL350QkMDLgp3ekm+zCIYLTpdcLCSWY+qqtCA=', stor...src/clan_lib/flake/flake.py", line 833, in _record_cache_miss\n stack_trace = "".join(traceback.format_stack())\n']) clan-pytest-with-core> selectors = ['clanInternals.vars.settings.secretStore'] clan-pytest-with-core> clan-pytest-with-core> def get_from_nix( clan-pytest-with-core> self, clan-pytest-with-core> selectors: list[str], clan-pytest-with-core> ) -> None: clan-pytest-with-core> """Retrieves specific attributes from a Nix flake using the provided selectors. clan-pytest-with-core> clan-pytest-with-core> This function interacts with the Nix build system to fetch and process clan-pytest-with-core> attributes from a flake. It uses the provided selectors to determine which clan-pytest-with-core> attributes to retrieve and optionally accepts additional Nix options for clan-pytest-with-core> customization. The results are cached for future use. clan-pytest-with-core> Used mostly as a lowlevel function for `precache` and `select` methods. clan-pytest-with-core> clan-pytest-with-core> Args: clan-pytest-with-core> selectors (list[str]): A list of attribute selectors to fetch from the flake. clan-pytest-with-core> nix_options (list[str] | None): Optional additional options to pass to the Nix build command. clan-pytest-with-core> clan-pytest-with-core> Raises: clan-pytest-with-core> ClanError: If the number of outputs does not match the number of selectors. clan-pytest-with-core> AssertionError: If the cache or flake cache path is not properly initialized. clan-pytest-with-core> clan-pytest-with-core> """ clan-pytest-with-core> if self._cache is None: clan-pytest-with-core> self.invalidate_cache() clan-pytest-with-core> if self._cache is None: clan-pytest-with-core> msg = "Cache cannot be None after invalidation" clan-pytest-with-core> raise ClanError(msg) clan-pytest-with-core> clan-pytest-with-core> nix_options = self.nix_options[:] if self.nix_options is not None else [] clan-pytest-with-core> clan-pytest-with-core> str_selectors = [ clan-pytest-with-core> selectors_as_json(parse_selector(selector)) for selector in selectors clan-pytest-with-core> ] clan-pytest-with-core> clan-pytest-with-core> config = nix_config() clan-pytest-with-core> clan-pytest-with-core> select_hash = "sha256-yxcNOha7Cfv2nhVpz9ZXSNKk0R7wt4AiBklJ8D24rVg=" clan-pytest-with-core> if not select_hash.startswith("sha256-"): clan-pytest-with-core> select_flake = Flake(str(select_source()), nix_options=nix_options) clan-pytest-with-core> select_flake.invalidate_cache() clan-pytest-with-core> if select_flake.hash is None: clan-pytest-with-core> msg = "this should be impossible as invalidate_cache() should always set `hash`" clan-pytest-with-core> raise ClanError(msg) clan-pytest-with-core> select_hash = select_flake.hash clan-pytest-with-core> clan-pytest-with-core> # fmt: off clan-pytest-with-core> nix_code = f""" clan-pytest-with-core> let clan-pytest-with-core> flake = builtins.getFlake "path:{self.store_path}?narHash={self.hash}"; clan-pytest-with-core> selectLib = ( clan-pytest-with-core> builtins.getFlake clan-pytest-with-core> "path:{select_source()}?narHash={select_hash}" clan-pytest-with-core> ).lib; clan-pytest-with-core> in clan-pytest-with-core> derivation {{ clan-pytest-with-core> name = "clan-flake-select"; clan-pytest-with-core> result = builtins.toJSON [ clan-pytest-with-core> {" ".join( clan-pytest-with-core> [ clan-pytest-with-core> f"(selectLib.applySelectors (builtins.fromJSON ''{attr}'') flake)" clan-pytest-with-core> for attr in str_selectors clan-pytest-with-core> ] clan-pytest-with-core> )} clan-pytest-with-core> ]; clan-pytest-with-core> clan-pytest-with-core> # We can always build this derivation locally, since /bin/sh is system independent, clan-pytest-with-core> # remote builders would introduce needless overhead. clan-pytest-with-core> preferLocalBuild = true; clan-pytest-with-core> # Save the roundtrip to check the binary caches for trivial substitutions clan-pytest-with-core> allowSubstitutes = false; clan-pytest-with-core> clan-pytest-with-core> passAsFile = [ "result" ]; clan-pytest-with-core> system = "{config["system"]}"; clan-pytest-with-core> builder = "/bin/sh"; clan-pytest-with-core> args = [ clan-pytest-with-core> "-c" clan-pytest-with-core> '' clan-pytest-with-core> read -r x < "$resultPath"; printf %s "$x" > $out clan-pytest-with-core> '' clan-pytest-with-core> ]; clan-pytest-with-core> }} clan-pytest-with-core> """ clan-pytest-with-core> trace = os.environ.get("CLAN_DEBUG_NIX_SELECTORS") == "1" clan-pytest-with-core> try: clan-pytest-with-core> build_output = Path( clan-pytest-with-core> run( clan-pytest-with-core> nix_build(["--expr", nix_code, *nix_options]), clan-pytest-with-core> RunOpts(log=Log.NONE, trace=trace), clan-pytest-with-core> ).stdout.strip(), clan-pytest-with-core> ) clan-pytest-with-core> except ClanCmdError as e: clan-pytest-with-core> if "error: attribute 'clan' missing" in str(e): clan-pytest-with-core> msg = ("This flake does not export the 'clan' attribute. \n" clan-pytest-with-core> "Please write 'clan = clan.config;' into the outputs of your flake.nix.") clan-pytest-with-core> raise ClanSelectError( clan-pytest-with-core> flake_identifier=self.identifier, clan-pytest-with-core> selectors=selectors, clan-pytest-with-core> cmd_error=e, clan-pytest-with-core> description=msg, clan-pytest-with-core> ) from e clan-pytest-with-core> clan-pytest-with-core> # If the error is about a missing attribute, we raise a ClanSelectError clan-pytest-with-core> # with the failed selectors and the flake identifier. clan-pytest-with-core> > raise ClanSelectError( clan-pytest-with-core> flake_identifier=self.identifier, clan-pytest-with-core> selectors=selectors, clan-pytest-with-core> cmd_error=e, clan-pytest-with-core> ) from e clan-pytest-with-core> E clan_lib.flake.flake.ClanSelectError: Error on: $ clan select 'clanInternals.vars.settings.secretStore' clan-pytest-with-core> E Reason: cannot update unlocked flake input 'clan-core' in pure mode. Use flag '--debug' to see full nix trace. clan-pytest-with-core> clan-pytest-with-core> /build/src/clan_lib/flake/flake.py:1094: ClanSelectError clan-pytest-with-core> ----------------------------- Captured stderr call ----------------------------- clan-pytest-with-core> [localhost] $ clan init /build/pytest-5njpynkk/test-flake --template=minimal --no-update --no-interactive clan-pytest-with-core> Caller: /build/src/clan_cli/init_test.py:123::test_init_minimal_template clan-pytest-with-core> clan-pytest-with-core> age-keygen clan-pytest-with-core> Caller: /build/src/clan_cli/secrets/sops.py:382::generate_private_key clan-pytest-with-core> clan-pytest-with-core> Public key: age1c4ku48557lc2ghemn4dgl68ty48s0452pgwrqyeknzlltcvftddq2kk0yt clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_cli/secrets/sops.py:382::generate_private_key clan-pytest-with-core> clan-pytest-with-core> Generated age private key at '/build/pytest-5njpynkk/.config/sops/age/keys.txt' for your user. clan-pytest-with-core> Please back it up on a secure location or you will lose access to your secrets. clan-pytest-with-core> Prefetching flake /build/src/clan_lib/clan_core_templates clan-pytest-with-core> warning: you don't have Internet access; disabling some network-dependent features clan-pytest-with-core> Loading flake cache from file /build/clan-flake-cache/flakes-v2/61f7e410abb4ac31c6cde3e73e865823fc5f1087 clan-pytest-with-core> Prefetching flake /build/src/clan_lib/clan_core_templates clan-pytest-with-core> warning: you don't have Internet access; disabling some network-dependent features clan-pytest-with-core> Loading flake cache from file /build/clan-flake-cache/flakes-v2/61f7e410abb4ac31c6cde3e73e865823fc5f1087 clan-pytest-with-core> Cache miss for clanInternals.templates.clan."minimal" clan-pytest-with-core> Loading flake cache from file /build/clan-flake-cache/flakes-v2/61f7e410abb4ac31c6cde3e73e865823fc5f1087 clan-pytest-with-core> chmod \ clan-pytest-with-core> -R u+w \ clan-pytest-with-core> /build/pytest-5njpynkk/test-flake clan-pytest-with-core> Caller: /build/src/clan_lib/templates/filesystem.py:36::copy_from_nixstore clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/templates/filesystem.py:36::copy_from_nixstore clan-pytest-with-core> clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-5njpynkk/test-flake \ clan-pytest-with-core> init clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:173::create_clan clan-pytest-with-core> clan-pytest-with-core> hint: Using 'master' as the name for the initial branch. This default branch name clan-pytest-with-core> hint: will change to "main" in Git 3.0. To configure the initial branch name clan-pytest-with-core> hint: to use in all of your new repositories, which will suppress this warning, clan-pytest-with-core> hint: call: clan-pytest-with-core> hint: clan-pytest-with-core> hint: git config --global init.defaultBranch clan-pytest-with-core> hint: clan-pytest-with-core> hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and clan-pytest-with-core> hint: 'development'. The just-created branch can be renamed via this command: clan-pytest-with-core> hint: clan-pytest-with-core> hint: git branch -m clan-pytest-with-core> hint: clan-pytest-with-core> hint: Disable this message with "git config set advice.defaultBranchName false" clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:173::create_clan clan-pytest-with-core> clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-5njpynkk/test-flake \ clan-pytest-with-core> add \ clan-pytest-with-core> . clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:174::create_clan clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:174::create_clan clan-pytest-with-core> clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-5njpynkk/test-flake \ clan-pytest-with-core> config \ clan-pytest-with-core> user.name clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:177::create_clan clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 1 clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:177::create_clan clan-pytest-with-core> clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-5njpynkk/test-flake \ clan-pytest-with-core> config \ clan-pytest-with-core> user.name \ clan-pytest-with-core> clan-tool clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:182::create_clan clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:182::create_clan clan-pytest-with-core> clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-5njpynkk/test-flake \ clan-pytest-with-core> config \ clan-pytest-with-core> user.email clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:184::create_clan clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 1 clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:184::create_clan clan-pytest-with-core> clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-5njpynkk/test-flake \ clan-pytest-with-core> config \ clan-pytest-with-core> user.email \ clan-pytest-with-core> clan@example.com clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:189::create_clan clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:189::create_clan clan-pytest-with-core> clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-5njpynkk/test-flake \ clan-pytest-with-core> add \ clan-pytest-with-core> . clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:203::create_clan clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:203::create_clan clan-pytest-with-core> clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-5njpynkk/test-flake \ clan-pytest-with-core> commit \ clan-pytest-with-core> -m 'Initial commit' clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:204::create_clan clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:204::create_clan clan-pytest-with-core> clan-pytest-with-core> Prefetching flake /build/pytest-5njpynkk/test-flake clan-pytest-with-core> warning: you don't have Internet access; disabling some network-dependent features clan-pytest-with-core> Cache miss for clanInternals.vars.settings.secretStore clan-pytest-with-core> ------------------------------ Captured log call ------------------------------- clan-pytest-with-core> DEBUG clan_cli.tests.helpers.cli:__init__.py:147 $ clan init /build/pytest-5njpynkk/test-flake --template=minimal --no-update --no-interactive clan-pytest-with-core> Caller: /build/src/clan_cli/init_test.py:123::test_init_minimal_template clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:147 age-keygen clan-pytest-with-core> Caller: /build/src/clan_cli/secrets/sops.py:382::generate_private_key clan-pytest-with-core> clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 Public key: age1c4ku48557lc2ghemn4dgl68ty48s0452pgwrqyeknzlltcvftddq2kk0yt clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:147 Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_cli/secrets/sops.py:382::generate_private_key clan-pytest-with-core> clan-pytest-with-core> INFO clan_cli.secrets.key:key.py:41 Generated age private key at '/build/pytest-5njpynkk/.config/sops/age/keys.txt' for your user. clan-pytest-with-core> Please back it up on a secure location or you will lose access to your secrets. clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:927 Prefetching flake /build/src/clan_lib/clan_core_templates clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 warning: you don't have Internet access; disabling some network-dependent features clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:789 Loading flake cache from file /build/clan-flake-cache/flakes-v2/61f7e410abb4ac31c6cde3e73e865823fc5f1087 clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:927 Prefetching flake /build/src/clan_lib/clan_core_templates clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 warning: you don't have Internet access; disabling some network-dependent features clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:789 Loading flake cache from file /build/clan-flake-cache/flakes-v2/61f7e410abb4ac31c6cde3e73e865823fc5f1087 clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1174 Cache miss for clanInternals.templates.clan."minimal" clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:789 Loading flake cache from file /build/clan-flake-cache/flakes-v2/61f7e410abb4ac31c6cde3e73e865823fc5f1087 clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:147 chmod \ clan-pytest-with-core> -R u+w \ clan-pytest-with-core> /build/pytest-5njpynkk/test-flake clan-pytest-with-core> Caller: /build/src/clan_lib/templates/filesystem.py:36::copy_from_nixstore clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:147 Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/templates/filesystem.py:36::copy_from_nixstore clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:147 git \ clan-pytest-with-core> -C /build/pytest-5njpynkk/test-flake \ clan-pytest-with-core> init clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:173::create_clan clan-pytest-with-core> clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 hint: Using 'master' as the name for the initial branch. This default branch name clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 hint: will change to "main" in Git 3.0. To configure the initial branch name clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 hint: to use in all of your new repositories, which will suppress this warning, clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 hint: call: clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 hint: clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 hint: git config --global init.defaultBranch clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 hint: clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 hint: 'development'. The just-created branch can be renamed via this command: clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 hint: clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 hint: git branch -m clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 hint: clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 hint: Disable this message with "git config set advice.defaultBranchName false" clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:147 Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:173::create_clan clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:147 git \ clan-pytest-with-core> -C /build/pytest-5njpynkk/test-flake \ clan-pytest-with-core> add \ clan-pytest-with-core> . clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:174::create_clan clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:147 Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:174::create_clan clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:147 git \ clan-pytest-with-core> -C /build/pytest-5njpynkk/test-flake \ clan-pytest-with-core> config \ clan-pytest-with-core> user.name clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:177::create_clan clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:147 Command exited with return code 1 clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:177::create_clan clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:147 git \ clan-pytest-with-core> -C /build/pytest-5njpynkk/test-flake \ clan-pytest-with-core> config \ clan-pytest-with-core> user.name \ clan-pytest-with-core> clan-tool clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:182::create_clan clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:147 Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:182::create_clan clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:147 git \ clan-pytest-with-core> -C /build/pytest-5njpynkk/test-flake \ clan-pytest-with-core> config \ clan-pytest-with-core> user.email clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:184::create_clan clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:147 Command exited with return code 1 clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:184::create_clan clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:147 git \ clan-pytest-with-core> -C /build/pytest-5njpynkk/test-flake \ clan-pytest-with-core> config \ clan-pytest-with-core> user.email \ clan-pytest-with-core> clan@example.com clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:189::create_clan clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:147 Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:189::create_clan clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:147 git \ clan-pytest-with-core> -C /build/pytest-5njpynkk/test-flake \ clan-pytest-with-core> add \ clan-pytest-with-core> . clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:203::create_clan clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:147 Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:203::create_clan clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:147 git \ clan-pytest-with-core> -C /build/pytest-5njpynkk/test-flake \ clan-pytest-with-core> commit \ clan-pytest-with-core> -m 'Initial commit' clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:204::create_clan clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:147 Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:204::create_clan clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:927 Prefetching flake /build/pytest-5njpynkk/test-flake clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 warning: you don't have Internet access; disabling some network-dependent features clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1174 Cache miss for clanInternals.vars.settings.secretStore clan-pytest-with-core> ___________________ test_init_with_local_template_reference ____________________ clan-pytest-with-core> [gw2] linux -- Python 3.14.7 /nix/store/lb41b0anx1f98y9y5s9mdv97gjgsq740-python3-3.14.7/bin/python clan-pytest-with-core> clan-pytest-with-core> self = Flake(identifier='/build/pytest-88dxnrik/new-clan', hash='sha256-E5noEwpWzchYlzH4AHtnQfux5BB8mkV0DITQ+uDVj0c=', store_...src/clan_lib/flake/flake.py", line 833, in _record_cache_miss\n stack_trace = "".join(traceback.format_stack())\n']) clan-pytest-with-core> selectors = ['clanInternals.vars.settings.secretStore'] clan-pytest-with-core> clan-pytest-with-core> def get_from_nix( clan-pytest-with-core> self, clan-pytest-with-core> selectors: list[str], clan-pytest-with-core> ) -> None: clan-pytest-with-core> """Retrieves specific attributes from a Nix flake using the provided selectors. clan-pytest-with-core> clan-pytest-with-core> This function interacts with the Nix build system to fetch and process clan-pytest-with-core> attributes from a flake. It uses the provided selectors to determine which clan-pytest-with-core> attributes to retrieve and optionally accepts additional Nix options for clan-pytest-with-core> customization. The results are cached for future use. clan-pytest-with-core> Used mostly as a lowlevel function for `precache` and `select` methods. clan-pytest-with-core> clan-pytest-with-core> Args: clan-pytest-with-core> selectors (list[str]): A list of attribute selectors to fetch from the flake. clan-pytest-with-core> nix_options (list[str] | None): Optional additional options to pass to the Nix build command. clan-pytest-with-core> clan-pytest-with-core> Raises: clan-pytest-with-core> ClanError: If the number of outputs does not match the number of selectors. clan-pytest-with-core> AssertionError: If the cache or flake cache path is not properly initialized. clan-pytest-with-core> clan-pytest-with-core> """ clan-pytest-with-core> if self._cache is None: clan-pytest-with-core> self.invalidate_cache() clan-pytest-with-core> if self._cache is None: clan-pytest-with-core> msg = "Cache cannot be None after invalidation" clan-pytest-with-core> raise ClanError(msg) clan-pytest-with-core> clan-pytest-with-core> nix_options = self.nix_options[:] if self.nix_options is not None else [] clan-pytest-with-core> clan-pytest-with-core> str_selectors = [ clan-pytest-with-core> selectors_as_json(parse_selector(selector)) for selector in selectors clan-pytest-with-core> ] clan-pytest-with-core> clan-pytest-with-core> config = nix_config() clan-pytest-with-core> clan-pytest-with-core> select_hash = "sha256-yxcNOha7Cfv2nhVpz9ZXSNKk0R7wt4AiBklJ8D24rVg=" clan-pytest-with-core> if not select_hash.startswith("sha256-"): clan-pytest-with-core> select_flake = Flake(str(select_source()), nix_options=nix_options) clan-pytest-with-core> select_flake.invalidate_cache() clan-pytest-with-core> if select_flake.hash is None: clan-pytest-with-core> msg = "this should be impossible as invalidate_cache() should always set `hash`" clan-pytest-with-core> raise ClanError(msg) clan-pytest-with-core> select_hash = select_flake.hash clan-pytest-with-core> clan-pytest-with-core> # fmt: off clan-pytest-with-core> nix_code = f""" clan-pytest-with-core> let clan-pytest-with-core> flake = builtins.getFlake "path:{self.store_path}?narHash={self.hash}"; clan-pytest-with-core> selectLib = ( clan-pytest-with-core> builtins.getFlake clan-pytest-with-core> "path:{select_source()}?narHash={select_hash}" clan-pytest-with-core> ).lib; clan-pytest-with-core> in clan-pytest-with-core> derivation {{ clan-pytest-with-core> name = "clan-flake-select"; clan-pytest-with-core> result = builtins.toJSON [ clan-pytest-with-core> {" ".join( clan-pytest-with-core> [ clan-pytest-with-core> f"(selectLib.applySelectors (builtins.fromJSON ''{attr}'') flake)" clan-pytest-with-core> for attr in str_selectors clan-pytest-with-core> ] clan-pytest-with-core> )} clan-pytest-with-core> ]; clan-pytest-with-core> clan-pytest-with-core> # We can always build this derivation locally, since /bin/sh is system independent, clan-pytest-with-core> # remote builders would introduce needless overhead. clan-pytest-with-core> preferLocalBuild = true; clan-pytest-with-core> # Save the roundtrip to check the binary caches for trivial substitutions clan-pytest-with-core> allowSubstitutes = false; clan-pytest-with-core> clan-pytest-with-core> passAsFile = [ "result" ]; clan-pytest-with-core> system = "{config["system"]}"; clan-pytest-with-core> builder = "/bin/sh"; clan-pytest-with-core> args = [ clan-pytest-with-core> "-c" clan-pytest-with-core> '' clan-pytest-with-core> read -r x < "$resultPath"; printf %s "$x" > $out clan-pytest-with-core> '' clan-pytest-with-core> ]; clan-pytest-with-core> }} clan-pytest-with-core> """ clan-pytest-with-core> trace = os.environ.get("CLAN_DEBUG_NIX_SELECTORS") == "1" clan-pytest-with-core> try: clan-pytest-with-core> build_output = Path( clan-pytest-with-core> > run( clan-pytest-with-core> nix_build(["--expr", nix_code, *nix_options]), clan-pytest-with-core> RunOpts(log=Log.NONE, trace=trace), clan-pytest-with-core> ).stdout.strip(), clan-pytest-with-core> ) clan-pytest-with-core> clan-pytest-with-core> /build/src/clan_lib/flake/flake.py:1076: clan-pytest-with-core> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ clan-pytest-with-core> clan-pytest-with-core> cmd = ['nix', '--extra-experimental-features', 'nix-command flakes', '--option', 'warn-dirty', 'false', ...] clan-pytest-with-core> options = RunOpts(input=None, stdout=None, stderr=None, env=None, cwd=PosixPath('/build/pytest-88dxnrik/test_flake'), log= clan-pytest-with-core> def run( clan-pytest-with-core> cmd: list[str], clan-pytest-with-core> options: RunOpts | None = None, clan-pytest-with-core> ) -> CmdOut: clan-pytest-with-core> if options is None: clan-pytest-with-core> options = RunOpts() clan-pytest-with-core> if options.cwd is None: clan-pytest-with-core> options.cwd = Path.cwd() clan-pytest-with-core> clan-pytest-with-core> async_ctx = get_async_ctx() clan-pytest-with-core> # Fill in the options from the thread-local data clan-pytest-with-core> # if they are not set in the options clan-pytest-with-core> if async_ctx: clan-pytest-with-core> if options.prefix is None: clan-pytest-with-core> options.prefix = async_ctx.prefix clan-pytest-with-core> if options.stdout is None: clan-pytest-with-core> options.stdout = async_ctx.stdout clan-pytest-with-core> if options.stderr is None: clan-pytest-with-core> options.stderr = async_ctx.stderr clan-pytest-with-core> clan-pytest-with-core> if options.requires_root_perm: clan-pytest-with-core> cmd = cmd_with_root(cmd, options.graphical_perm) clan-pytest-with-core> # Use our sudo ask proxy here as well clan-pytest-with-core> options.needs_user_terminal = True clan-pytest-with-core> clan-pytest-with-core> if cmdlog.isEnabledFor(logging.DEBUG) and options.trace: clan-pytest-with-core> if options.input and isinstance(options.input, bytes): clan-pytest-with-core> # Always redact sensitive input (e.g., private keys, passwords) clan-pytest-with-core> if options.sensitive_input: clan-pytest-with-core> filtered_input = "<>" clan-pytest-with-core> elif any( clan-pytest-with-core> not ch.isprintable() for ch in options.input.decode("ascii", "replace") clan-pytest-with-core> ): clan-pytest-with-core> filtered_input = "<>" clan-pytest-with-core> else: clan-pytest-with-core> filtered_input = options.input.decode("ascii", "replace") clan-pytest-with-core> clan-pytest-with-core> print_trace( clan-pytest-with-core> f"echo '{filtered_input}' | {indent_command(cmd)}", clan-pytest-with-core> cmdlog, clan-pytest-with-core> options.prefix, clan-pytest-with-core> ) clan-pytest-with-core> else: clan-pytest-with-core> print_trace(f"{indent_command(cmd)}", cmdlog, options.prefix) clan-pytest-with-core> clan-pytest-with-core> start = timeit.default_timer() clan-pytest-with-core> with ExitStack() as stack: clan-pytest-with-core> stdin = subprocess.PIPE if isinstance(options.input, bytes) else options.input clan-pytest-with-core> process = stack.enter_context( clan-pytest-with-core> subprocess.Popen( clan-pytest-with-core> cmd, clan-pytest-with-core> cwd=str(options.cwd), clan-pytest-with-core> env=options.env, clan-pytest-with-core> stdin=stdin, clan-pytest-with-core> stdout=subprocess.PIPE, clan-pytest-with-core> stderr=subprocess.PIPE, clan-pytest-with-core> start_new_session=not options.needs_user_terminal, clan-pytest-with-core> shell=options.shell, clan-pytest-with-core> ), clan-pytest-with-core> ) clan-pytest-with-core> clan-pytest-with-core> if options.needs_user_terminal: clan-pytest-with-core> # we didn't allocate a new session, so we can't terminate the process group clan-pytest-with-core> stack.enter_context(terminate_process(process)) clan-pytest-with-core> else: clan-pytest-with-core> stack.enter_context(terminate_process_group(process)) clan-pytest-with-core> clan-pytest-with-core> input_bytes = options.input if isinstance(options.input, bytes) else None clan-pytest-with-core> clan-pytest-with-core> stdout_buf, stderr_buf, stdout_raw = handle_io( clan-pytest-with-core> process, clan-pytest-with-core> options.log, clan-pytest-with-core> prefix=options.prefix, clan-pytest-with-core> msg_color=options.msg_color, clan-pytest-with-core> timeout=options.timeout, clan-pytest-with-core> input_bytes=input_bytes, clan-pytest-with-core> stdout=options.stdout, clan-pytest-with-core> stderr=options.stderr, clan-pytest-with-core> cmd=cmd, clan-pytest-with-core> cwd=options.cwd, clan-pytest-with-core> env=options.env, clan-pytest-with-core> ) clan-pytest-with-core> if not is_async_cancelled(): clan-pytest-with-core> process.wait() clan-pytest-with-core> clan-pytest-with-core> if TIME_TABLE: clan-pytest-with-core> TIME_TABLE.add(shlex.join(cmd), timeit.default_timer() - start) clan-pytest-with-core> clan-pytest-with-core> # Wait for the subprocess to finish clan-pytest-with-core> cmd_out = CmdOut( clan-pytest-with-core> stdout=stdout_buf, clan-pytest-with-core> stderr=stderr_buf, clan-pytest-with-core> cwd=options.cwd, clan-pytest-with-core> env=options.env, clan-pytest-with-core> command_list=cmd, clan-pytest-with-core> returncode=process.returncode, clan-pytest-with-core> msg=options.error_msg, clan-pytest-with-core> stdout_raw=stdout_raw, clan-pytest-with-core> ) clan-pytest-with-core> clan-pytest-with-core> if cmdlog.isEnabledFor(logging.DEBUG) and options.trace: clan-pytest-with-core> print_trace( clan-pytest-with-core> f"Command exited with return code {process.returncode}", clan-pytest-with-core> cmdlog, clan-pytest-with-core> options.prefix, clan-pytest-with-core> ) clan-pytest-with-core> clan-pytest-with-core> if options.check and process.returncode != 0: clan-pytest-with-core> if is_async_cancelled(): clan-pytest-with-core> cmd_out.msg = "Command cancelled" clan-pytest-with-core> > raise ClanCmdError(cmd_out) clan-pytest-with-core> E clan_lib.errors.ClanCmdError: clan-pytest-with-core> E =================================== Command ==================================== clan-pytest-with-core> E nix \ clan-pytest-with-core> E --extra-experimental-features 'nix-command flakes' \ clan-pytest-with-core> E --option warn-dirty \ clan-pytest-with-core> E false \ clan-pytest-with-core> E build \ clan-pytest-with-core> E --flake-registry '' \ clan-pytest-with-core> E --print-out-paths --print-build-logs \ clan-pytest-with-core> E --show-trace --no-link \ clan-pytest-with-core> E --expr ' clan-pytest-with-core> E let clan-pytest-with-core> E flake = builtins.getFlake "path:/nix/store/wkcmqqa4wmljq6dsg5cqfl4xpn6pc4cp-source?narHash=sha256-E5noEwpWzchYlzH4AHtnQfux5BB8mkV0DITQ+uDVj0c="; clan-pytest-with-core> E selectLib = ( clan-pytest-with-core> E builtins.getFlake clan-pytest-with-core> E "path:/nix/store/cba1x9mxnwr8b36cw41bya7g6d5v1p7d-source?narHash=sha256-yxcNOha7Cfv2nhVpz9ZXSNKk0R7wt4AiBklJ8D24rVg=" clan-pytest-with-core> E ).lib; clan-pytest-with-core> E in clan-pytest-with-core> E derivation { clan-pytest-with-core> E name = "clan-flake-select"; clan-pytest-with-core> E result = builtins.toJSON [ clan-pytest-with-core> E (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "secretStore"}]'"'"''"'"') flake) clan-pytest-with-core> E ]; clan-pytest-with-core> E clan-pytest-with-core> E # We can always build this derivation locally, since /bin/sh is system independent, clan-pytest-with-core> E # remote builders would introduce needless overhead. clan-pytest-with-core> E preferLocalBuild = true; clan-pytest-with-core> E # Save the roundtrip to check the binary caches for trivial substitutions clan-pytest-with-core> E allowSubstitutes = false; clan-pytest-with-core> E clan-pytest-with-core> E passAsFile = [ "result" ]; clan-pytest-with-core> E system = "x86_64-linux"; clan-pytest-with-core> E builder = "/bin/sh"; clan-pytest-with-core> E args = [ clan-pytest-with-core> E "-c" clan-pytest-with-core> E '"'"''"'"' clan-pytest-with-core> E read -r x < "$resultPath"; printf %s "$x" > $out clan-pytest-with-core> E '"'"''"'"' clan-pytest-with-core> E ]; clan-pytest-with-core> E } clan-pytest-with-core> E ' \ clan-pytest-with-core> E --store /build/store clan-pytest-with-core> E clan-pytest-with-core> E ==================================== Stderr ==================================== clan-pytest-with-core> E warning: you don't have Internet access; disabling some network-dependent features clan-pytest-with-core> E error: clan-pytest-with-core> E … while calling the 'derivationStrict' builtin clan-pytest-with-core> E at :37:12: clan-pytest-with-core> E 36| clan-pytest-with-core> E 37| strict = derivationStrict drvAttrs; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 38| clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating derivation 'clan-flake-select' clan-pytest-with-core> E whose name attribute is located at «string»:10:17 clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating attribute 'result' of derivation 'clan-flake-select' clan-pytest-with-core> E at «string»:11:17: clan-pytest-with-core> E 10| name = "clan-flake-select"; clan-pytest-with-core> E 11| result = builtins.toJSON [ clan-pytest-with-core> E | ^ clan-pytest-with-core> E 12| (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "secretStore"}]'') flake) clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'toJSON' builtin clan-pytest-with-core> E at «string»:11:26: clan-pytest-with-core> E 10| name = "clan-flake-select"; clan-pytest-with-core> E 11| result = builtins.toJSON [ clan-pytest-with-core> E | ^ clan-pytest-with-core> E 12| (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "secretStore"}]'') flake) clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating list element at index 0 clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at «string»:12:22: clan-pytest-with-core> E 11| result = builtins.toJSON [ clan-pytest-with-core> E 12| (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "secretStore"}]'') flake) clan-pytest-with-core> E | ^ clan-pytest-with-core> E 13| ]; clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'applySelectors' clan-pytest-with-core> E at /build/store/nix/store/cba1x9mxnwr8b36cw41bya7g6d5v1p7d-source/select.nix:262:16: clan-pytest-with-core> E 261| applySelectors = clan-pytest-with-core> E 262| selectors: obj: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 263| let clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/cba1x9mxnwr8b36cw41bya7g6d5v1p7d-source/select.nix:352:5: clan-pytest-with-core> E 351| in clan-pytest-with-core> E 352| recurse selectors 0 obj; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 353| clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'recurse' clan-pytest-with-core> E at /build/store/nix/store/cba1x9mxnwr8b36cw41bya7g6d5v1p7d-source/select.nix:265:25: clan-pytest-with-core> E 264| recurse = clan-pytest-with-core> E 265| selectors: idx: obj: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 266| # we are done clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating a branch condition clan-pytest-with-core> E at /build/store/nix/store/cba1x9mxnwr8b36cw41bya7g6d5v1p7d-source/select.nix:281:11: clan-pytest-with-core> E 280| # lists clan-pytest-with-core> E 281| if builtins.isList obj then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 282| if selector.type == "all" then clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'isList' builtin clan-pytest-with-core> E at /build/store/nix/store/cba1x9mxnwr8b36cw41bya7g6d5v1p7d-source/select.nix:281:14: clan-pytest-with-core> E 280| # lists clan-pytest-with-core> E 281| if builtins.isList obj then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 282| if selector.type == "all" then clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'getFlake' builtin clan-pytest-with-core> E at «string»:3:23: clan-pytest-with-core> E 2| let clan-pytest-with-core> E 3| flake = builtins.getFlake "path:/nix/store/wkcmqqa4wmljq6dsg5cqfl4xpn6pc4cp-source?narHash=sha256-E5noEwpWzchYlzH4AHtnQfux5BB8mkV0DITQ+uDVj0c="; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 4| selectLib = ( clan-pytest-with-core> E clan-pytest-with-core> E … while updating the lock file of flake 'path:/nix/store/wkcmqqa4wmljq6dsg5cqfl4xpn6pc4cp-source?lastModified=0&narHash=sha256-E5noEwpWzchYlzH4AHtnQfux5BB8mkV0DITQ%2BuDVj0c%3D' clan-pytest-with-core> E clan-pytest-with-core> E … while updating the flake input 'clan-core' clan-pytest-with-core> E clan-pytest-with-core> E error: cannot update unlocked flake input 'clan-core' in pure mode clan-pytest-with-core> E clan-pytest-with-core> E Return Code: 1 clan-pytest-with-core> clan-pytest-with-core> /build/src/clan_lib/cmd/__init__.py:451: ClanCmdError clan-pytest-with-core> clan-pytest-with-core> The above exception was the direct cause of the following exception: clan-pytest-with-core> clan-pytest-with-core> monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7fffe21e7e10> clan-pytest-with-core> temporary_home = PosixPath('/build/pytest-88dxnrik') clan-pytest-with-core> test_flake = FlakeForTest(path=PosixPath('/build/pytest-88dxnrik/test_flake')) clan-pytest-with-core> patch_get_clan_details = .get_clan_details at 0x7fffe220b530> clan-pytest-with-core> clan-pytest-with-core> @pytest.mark.broken_on_darwin clan-pytest-with-core> @pytest.mark.with_core clan-pytest-with-core> def test_init_with_local_template_reference( clan-pytest-with-core> monkeypatch: pytest.MonkeyPatch, clan-pytest-with-core> temporary_home: Path, clan-pytest-with-core> test_flake: FlakeForTest, clan-pytest-with-core> patch_get_clan_details: Any, # noqa: ARG001 clan-pytest-with-core> ) -> None: clan-pytest-with-core> monkeypatch.chdir(test_flake.path) clan-pytest-with-core> new_clan_dir = temporary_home / "new-clan" clan-pytest-with-core> monkeypatch.setenv("LOGNAME", "testuser") clan-pytest-with-core> clan-pytest-with-core> # TODO: should error with: localFlake does not export myLocalTemplate clan template clan-pytest-with-core> > cli.run( clan-pytest-with-core> [ clan-pytest-with-core> "init", clan-pytest-with-core> str(new_clan_dir), clan-pytest-with-core> "--template=.#default", clan-pytest-with-core> "--no-update", clan-pytest-with-core> "--no-interactive", clan-pytest-with-core> ], clan-pytest-with-core> ) clan-pytest-with-core> clan-pytest-with-core> /build/src/clan_cli/init_test.py:195: clan-pytest-with-core> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ clan-pytest-with-core> /build/src/clan_cli/tests/helpers/cli.py:22: in run clan-pytest-with-core> parsed.func(parsed) clan-pytest-with-core> /build/src/clan_cli/init.py:54: in init_command clan-pytest-with-core> register_admin_keys( clan-pytest-with-core> /build/src/clan_cli/vars/keygen.py:89: in register_admin_keys clan-pytest-with-core> backend = Flake(str(flake_dir)).select(vars_settings_secret_store()) clan-pytest-with-core> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ clan-pytest-with-core> /build/src/clan_lib/flake/flake.py:1177: in select clan-pytest-with-core> self.get_from_nix([selector]) clan-pytest-with-core> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ clan-pytest-with-core> clan-pytest-with-core> self = Flake(identifier='/build/pytest-88dxnrik/new-clan', hash='sha256-E5noEwpWzchYlzH4AHtnQfux5BB8mkV0DITQ+uDVj0c=', store_...src/clan_lib/flake/flake.py", line 833, in _record_cache_miss\n stack_trace = "".join(traceback.format_stack())\n']) clan-pytest-with-core> selectors = ['clanInternals.vars.settings.secretStore'] clan-pytest-with-core> clan-pytest-with-core> def get_from_nix( clan-pytest-with-core> self, clan-pytest-with-core> selectors: list[str], clan-pytest-with-core> ) -> None: clan-pytest-with-core> """Retrieves specific attributes from a Nix flake using the provided selectors. clan-pytest-with-core> clan-pytest-with-core> This function interacts with the Nix build system to fetch and process clan-pytest-with-core> attributes from a flake. It uses the provided selectors to determine which clan-pytest-with-core> attributes to retrieve and optionally accepts additional Nix options for clan-pytest-with-core> customization. The results are cached for future use. clan-pytest-with-core> Used mostly as a lowlevel function for `precache` and `select` methods. clan-pytest-with-core> clan-pytest-with-core> Args: clan-pytest-with-core> selectors (list[str]): A list of attribute selectors to fetch from the flake. clan-pytest-with-core> nix_options (list[str] | None): Optional additional options to pass to the Nix build command. clan-pytest-with-core> clan-pytest-with-core> Raises: clan-pytest-with-core> ClanError: If the number of outputs does not match the number of selectors. clan-pytest-with-core> AssertionError: If the cache or flake cache path is not properly initialized. clan-pytest-with-core> clan-pytest-with-core> """ clan-pytest-with-core> if self._cache is None: clan-pytest-with-core> self.invalidate_cache() clan-pytest-with-core> if self._cache is None: clan-pytest-with-core> msg = "Cache cannot be None after invalidation" clan-pytest-with-core> raise ClanError(msg) clan-pytest-with-core> clan-pytest-with-core> nix_options = self.nix_options[:] if self.nix_options is not None else [] clan-pytest-with-core> clan-pytest-with-core> str_selectors = [ clan-pytest-with-core> selectors_as_json(parse_selector(selector)) for selector in selectors clan-pytest-with-core> ] clan-pytest-with-core> clan-pytest-with-core> config = nix_config() clan-pytest-with-core> clan-pytest-with-core> select_hash = "sha256-yxcNOha7Cfv2nhVpz9ZXSNKk0R7wt4AiBklJ8D24rVg=" clan-pytest-with-core> if not select_hash.startswith("sha256-"): clan-pytest-with-core> select_flake = Flake(str(select_source()), nix_options=nix_options) clan-pytest-with-core> select_flake.invalidate_cache() clan-pytest-with-core> if select_flake.hash is None: clan-pytest-with-core> msg = "this should be impossible as invalidate_cache() should always set `hash`" clan-pytest-with-core> raise ClanError(msg) clan-pytest-with-core> select_hash = select_flake.hash clan-pytest-with-core> clan-pytest-with-core> # fmt: off clan-pytest-with-core> nix_code = f""" clan-pytest-with-core> let clan-pytest-with-core> flake = builtins.getFlake "path:{self.store_path}?narHash={self.hash}"; clan-pytest-with-core> selectLib = ( clan-pytest-with-core> builtins.getFlake clan-pytest-with-core> "path:{select_source()}?narHash={select_hash}" clan-pytest-with-core> ).lib; clan-pytest-with-core> in clan-pytest-with-core> derivation {{ clan-pytest-with-core> name = "clan-flake-select"; clan-pytest-with-core> result = builtins.toJSON [ clan-pytest-with-core> {" ".join( clan-pytest-with-core> [ clan-pytest-with-core> f"(selectLib.applySelectors (builtins.fromJSON ''{attr}'') flake)" clan-pytest-with-core> for attr in str_selectors clan-pytest-with-core> ] clan-pytest-with-core> )} clan-pytest-with-core> ]; clan-pytest-with-core> clan-pytest-with-core> # We can always build this derivation locally, since /bin/sh is system independent, clan-pytest-with-core> # remote builders would introduce needless overhead. clan-pytest-with-core> preferLocalBuild = true; clan-pytest-with-core> # Save the roundtrip to check the binary caches for trivial substitutions clan-pytest-with-core> allowSubstitutes = false; clan-pytest-with-core> clan-pytest-with-core> passAsFile = [ "result" ]; clan-pytest-with-core> system = "{config["system"]}"; clan-pytest-with-core> builder = "/bin/sh"; clan-pytest-with-core> args = [ clan-pytest-with-core> "-c" clan-pytest-with-core> '' clan-pytest-with-core> read -r x < "$resultPath"; printf %s "$x" > $out clan-pytest-with-core> '' clan-pytest-with-core> ]; clan-pytest-with-core> }} clan-pytest-with-core> """ clan-pytest-with-core> trace = os.environ.get("CLAN_DEBUG_NIX_SELECTORS") == "1" clan-pytest-with-core> try: clan-pytest-with-core> build_output = Path( clan-pytest-with-core> run( clan-pytest-with-core> nix_build(["--expr", nix_code, *nix_options]), clan-pytest-with-core> RunOpts(log=Log.NONE, trace=trace), clan-pytest-with-core> ).stdout.strip(), clan-pytest-with-core> ) clan-pytest-with-core> except ClanCmdError as e: clan-pytest-with-core> if "error: attribute 'clan' missing" in str(e): clan-pytest-with-core> msg = ("This flake does not export the 'clan' attribute. \n" clan-pytest-with-core> "Please write 'clan = clan.config;' into the outputs of your flake.nix.") clan-pytest-with-core> raise ClanSelectError( clan-pytest-with-core> flake_identifier=self.identifier, clan-pytest-with-core> selectors=selectors, clan-pytest-with-core> cmd_error=e, clan-pytest-with-core> description=msg, clan-pytest-with-core> ) from e clan-pytest-with-core> clan-pytest-with-core> # If the error is about a missing attribute, we raise a ClanSelectError clan-pytest-with-core> # with the failed selectors and the flake identifier. clan-pytest-with-core> > raise ClanSelectError( clan-pytest-with-core> flake_identifier=self.identifier, clan-pytest-with-core> selectors=selectors, clan-pytest-with-core> cmd_error=e, clan-pytest-with-core> ) from e clan-pytest-with-core> E clan_lib.flake.flake.ClanSelectError: Error on: $ clan select 'clanInternals.vars.settings.secretStore' clan-pytest-with-core> E Reason: cannot update unlocked flake input 'clan-core' in pure mode. Use flag '--debug' to see full nix trace. clan-pytest-with-core> clan-pytest-with-core> /build/src/clan_lib/flake/flake.py:1094: ClanSelectError clan-pytest-with-core> ---------------------------- Captured stdout setup ----------------------------- clan-pytest-with-core> file: /build/pytest-88dxnrik/test_flake/flake.nix clan-pytest-with-core> clan_core: None clan-pytest-with-core> flake: /build/pytest-88dxnrik/test_flake clan-pytest-with-core> Initialized empty Git repository in /build/pytest-88dxnrik/test_flake/.git/ clan-pytest-with-core> [main (root-commit) 0abaa94] Initial commit clan-pytest-with-core> 5 files changed, 76 insertions(+) clan-pytest-with-core> create mode 100644 .clan-flake clan-pytest-with-core> create mode 100644 fake-module.nix clan-pytest-with-core> create mode 100644 flake.lock clan-pytest-with-core> create mode 100644 flake.nix clan-pytest-with-core> create mode 100644 nixosModules/machine1.nix clan-pytest-with-core> ---------------------------- Captured stderr setup ----------------------------- clan-pytest-with-core> warning: you don't have Internet access; disabling some network-dependent features clan-pytest-with-core> warning: creating lock file "/build/pytest-88dxnrik/test_flake/flake.lock": clan-pytest-with-core> • Added input 'nixpkgs': clan-pytest-with-core> 'path:/nix/store/vlhb7haagkjabf20g1vg9kxi53fcpi17-source?lastModified=0&narHash=sha256-R4B%2BRRYmze9htmPZ8xeF19mchTSH99GdaqanKCW8CF8%3D' (1970-01-01) clan-pytest-with-core> !! $HOME does not point to a temp directory!! HOME=/build/pytest-88dxnrik clan-pytest-with-core> ------------------------------ Captured log setup ------------------------------ clan-pytest-with-core> WARNING clan_cli.tests.fixtures_flakes:fixtures_flakes.py:368 !! $HOME does not point to a temp directory!! HOME=/build/pytest-88dxnrik clan-pytest-with-core> ----------------------------- Captured stderr call ----------------------------- clan-pytest-with-core> [localhost] $ clan init /build/pytest-88dxnrik/new-clan '--template=.#default' --no-update --no-interactive clan-pytest-with-core> Caller: /build/src/clan_cli/init_test.py:195::test_init_with_local_template_reference clan-pytest-with-core> clan-pytest-with-core> age-keygen clan-pytest-with-core> Caller: /build/src/clan_cli/secrets/sops.py:382::generate_private_key clan-pytest-with-core> clan-pytest-with-core> Public key: age1kafny2hf0z2wzea9gzgd8zkf9srefc77smjxjhwc9pvp6luy6pzslys86u clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_cli/secrets/sops.py:382::generate_private_key clan-pytest-with-core> clan-pytest-with-core> Generated age private key at '/build/pytest-88dxnrik/.config/sops/age/keys.txt' for your user. clan-pytest-with-core> Please back it up on a secure location or you will lose access to your secrets. clan-pytest-with-core> nix \ clan-pytest-with-core> --extra-experimental-features 'nix-command flakes' \ clan-pytest-with-core> --option warn-dirty \ clan-pytest-with-core> false \ clan-pytest-with-core> flake \ clan-pytest-with-core> metadata \ clan-pytest-with-core> --json /build/pytest-88dxnrik/test_flake \ clan-pytest-with-core> --store /build/store clan-pytest-with-core> Caller: /build/src/clan_lib/nix/__init__.py:144::nix_metadata clan-pytest-with-core> clan-pytest-with-core> warning: you don't have Internet access; disabling some network-dependent features clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/nix/__init__.py:144::nix_metadata clan-pytest-with-core> clan-pytest-with-core> Prefetching flake /build/pytest-88dxnrik/test_flake clan-pytest-with-core> warning: you don't have Internet access; disabling some network-dependent features clan-pytest-with-core> flake.get_input_names is deprecated and will be removed clan-pytest-with-core> Cache miss for inputs.*.?_type clan-pytest-with-core> Prefetching flake /build/pytest-88dxnrik/test_flake clan-pytest-with-core> warning: you don't have Internet access; disabling some network-dependent features clan-pytest-with-core> Loading flake cache from file /build/clan-flake-cache/flakes-v2/c1468b422729d3461d4dd6c9c5e02c7941c8e6a1 clan-pytest-with-core> Cache miss for clan.templates.clan."default" clan-pytest-with-core> Template '.#default' not found in /build/pytest-88dxnrik/test_flake, trying builtin template clan-pytest-with-core> Prefetching flake /build/src/clan_lib/clan_core_templates clan-pytest-with-core> warning: you don't have Internet access; disabling some network-dependent features clan-pytest-with-core> Loading flake cache from file /build/clan-flake-cache/flakes-v2/61f7e410abb4ac31c6cde3e73e865823fc5f1087 clan-pytest-with-core> flake.get_input_names is deprecated and will be removed clan-pytest-with-core> Cache miss for inputs.*.?_type clan-pytest-with-core> Loading flake cache from file /build/clan-flake-cache/flakes-v2/61f7e410abb4ac31c6cde3e73e865823fc5f1087 clan-pytest-with-core> Cache miss for clan.templates.clan."default" clan-pytest-with-core> Loading flake cache from file /build/clan-flake-cache/flakes-v2/61f7e410abb4ac31c6cde3e73e865823fc5f1087 clan-pytest-with-core> chmod \ clan-pytest-with-core> -R u+w \ clan-pytest-with-core> /build/pytest-88dxnrik/new-clan clan-pytest-with-core> Caller: /build/src/clan_lib/templates/filesystem.py:36::copy_from_nixstore clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/templates/filesystem.py:36::copy_from_nixstore clan-pytest-with-core> clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-88dxnrik/new-clan \ clan-pytest-with-core> init clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:173::create_clan clan-pytest-with-core> clan-pytest-with-core> hint: Using 'master' as the name for the initial branch. This default branch name clan-pytest-with-core> hint: will change to "main" in Git 3.0. To configure the initial branch name clan-pytest-with-core> hint: to use in all of your new repositories, which will suppress this warning, clan-pytest-with-core> hint: call: clan-pytest-with-core> hint: clan-pytest-with-core> hint: git config --global init.defaultBranch clan-pytest-with-core> hint: clan-pytest-with-core> hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and clan-pytest-with-core> hint: 'development'. The just-created branch can be renamed via this command: clan-pytest-with-core> hint: clan-pytest-with-core> hint: git branch -m clan-pytest-with-core> hint: clan-pytest-with-core> hint: Disable this message with "git config set advice.defaultBranchName false" clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:173::create_clan clan-pytest-with-core> clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-88dxnrik/new-clan \ clan-pytest-with-core> add \ clan-pytest-with-core> . clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:174::create_clan clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:174::create_clan clan-pytest-with-core> clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-88dxnrik/new-clan \ clan-pytest-with-core> config \ clan-pytest-with-core> user.name clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:177::create_clan clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 1 clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:177::create_clan clan-pytest-with-core> clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-88dxnrik/new-clan \ clan-pytest-with-core> config \ clan-pytest-with-core> user.name \ clan-pytest-with-core> clan-tool clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:182::create_clan clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:182::create_clan clan-pytest-with-core> clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-88dxnrik/new-clan \ clan-pytest-with-core> config \ clan-pytest-with-core> user.email clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:184::create_clan clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 1 clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:184::create_clan clan-pytest-with-core> clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-88dxnrik/new-clan \ clan-pytest-with-core> config \ clan-pytest-with-core> user.email \ clan-pytest-with-core> clan@example.com clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:189::create_clan clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:189::create_clan clan-pytest-with-core> clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-88dxnrik/new-clan \ clan-pytest-with-core> add \ clan-pytest-with-core> . clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:203::create_clan clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:203::create_clan clan-pytest-with-core> clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-88dxnrik/new-clan \ clan-pytest-with-core> commit \ clan-pytest-with-core> -m 'Initial commit' clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:204::create_clan clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:204::create_clan clan-pytest-with-core> clan-pytest-with-core> Prefetching flake /build/pytest-88dxnrik/new-clan clan-pytest-with-core> warning: you don't have Internet access; disabling some network-dependent features clan-pytest-with-core> Cache miss for clanInternals.vars.settings.secretStore clan-pytest-with-core> ------------------------------ Captured log call ------------------------------- clan-pytest-with-core> DEBUG clan_cli.tests.helpers.cli:__init__.py:147 $ clan init /build/pytest-88dxnrik/new-clan '--template=.#default' --no-update --no-interactive clan-pytest-with-core> Caller: /build/src/clan_cli/init_test.py:195::test_init_with_local_template_reference clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:147 age-keygen clan-pytest-with-core> Caller: /build/src/clan_cli/secrets/sops.py:382::generate_private_key clan-pytest-with-core> clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 Public key: age1kafny2hf0z2wzea9gzgd8zkf9srefc77smjxjhwc9pvp6luy6pzslys86u clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:147 Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_cli/secrets/sops.py:382::generate_private_key clan-pytest-with-core> clan-pytest-with-core> INFO clan_cli.secrets.key:key.py:41 Generated age private key at '/build/pytest-88dxnrik/.config/sops/age/keys.txt' for your user. clan-pytest-with-core> Please back it up on a secure location or you will lose access to your secrets. clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:147 nix \ clan-pytest-with-core> --extra-experimental-features 'nix-command flakes' \ clan-pytest-with-core> --option warn-dirty \ clan-pytest-with-core> false \ clan-pytest-with-core> flake \ clan-pytest-with-core> metadata \ clan-pytest-with-core> --json /build/pytest-88dxnrik/test_flake \ clan-pytest-with-core> --store /build/store clan-pytest-with-core> Caller: /build/src/clan_lib/nix/__init__.py:144::nix_metadata clan-pytest-with-core> clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 warning: you don't have Internet access; disabling some network-dependent features clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:147 Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/nix/__init__.py:144::nix_metadata clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:927 Prefetching flake /build/pytest-88dxnrik/test_flake clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 warning: you don't have Internet access; disabling some network-dependent features clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:869 flake.get_input_names is deprecated and will be removed clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1174 Cache miss for inputs.*.?_type clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:927 Prefetching flake /build/pytest-88dxnrik/test_flake clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 warning: you don't have Internet access; disabling some network-dependent features clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:789 Loading flake cache from file /build/clan-flake-cache/flakes-v2/c1468b422729d3461d4dd6c9c5e02c7941c8e6a1 clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1174 Cache miss for clan.templates.clan."default" clan-pytest-with-core> INFO clan_lib.templates.handler:handler.py:142 Template '.#default' not found in /build/pytest-88dxnrik/test_flake, trying builtin template clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:927 Prefetching flake /build/src/clan_lib/clan_core_templates clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 warning: you don't have Internet access; disabling some network-dependent features clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:789 Loading flake cache from file /build/clan-flake-cache/flakes-v2/61f7e410abb4ac31c6cde3e73e865823fc5f1087 clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:869 flake.get_input_names is deprecated and will be removed clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1174 Cache miss for inputs.*.?_type clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:789 Loading flake cache from file /build/clan-flake-cache/flakes-v2/61f7e410abb4ac31c6cde3e73e865823fc5f1087 clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1174 Cache miss for clan.templates.clan."default" clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:789 Loading flake cache from file /build/clan-flake-cache/flakes-v2/61f7e410abb4ac31c6cde3e73e865823fc5f1087 clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:147 chmod \ clan-pytest-with-core> -R u+w \ clan-pytest-with-core> /build/pytest-88dxnrik/new-clan clan-pytest-with-core> Caller: /build/src/clan_lib/templates/filesystem.py:36::copy_from_nixstore clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:147 Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/templates/filesystem.py:36::copy_from_nixstore clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:147 git \ clan-pytest-with-core> -C /build/pytest-88dxnrik/new-clan \ clan-pytest-with-core> init clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:173::create_clan clan-pytest-with-core> clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 hint: Using 'master' as the name for the initial branch. This default branch name clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 hint: will change to "main" in Git 3.0. To configure the initial branch name clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 hint: to use in all of your new repositories, which will suppress this warning, clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 hint: call: clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 hint: clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 hint: git config --global init.defaultBranch clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 hint: clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 hint: 'development'. The just-created branch can be renamed via this command: clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 hint: clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 hint: git branch -m clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 hint: clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 hint: Disable this message with "git config set advice.defaultBranchName false" clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:147 Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:173::create_clan clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:147 git \ clan-pytest-with-core> -C /build/pytest-88dxnrik/new-clan \ clan-pytest-with-core> add \ clan-pytest-with-core> . clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:174::create_clan clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:147 Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:174::create_clan clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:147 git \ clan-pytest-with-core> -C /build/pytest-88dxnrik/new-clan \ clan-pytest-with-core> config \ clan-pytest-with-core> user.name clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:177::create_clan clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:147 Command exited with return code 1 clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:177::create_clan clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:147 git \ clan-pytest-with-core> -C /build/pytest-88dxnrik/new-clan \ clan-pytest-with-core> config \ clan-pytest-with-core> user.name \ clan-pytest-with-core> clan-tool clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:182::create_clan clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:147 Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:182::create_clan clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:147 git \ clan-pytest-with-core> -C /build/pytest-88dxnrik/new-clan \ clan-pytest-with-core> config \ clan-pytest-with-core> user.email clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:184::create_clan clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:147 Command exited with return code 1 clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:184::create_clan clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:147 git \ clan-pytest-with-core> -C /build/pytest-88dxnrik/new-clan \ clan-pytest-with-core> config \ clan-pytest-with-core> user.email \ clan-pytest-with-core> clan@example.com clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:189::create_clan clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:147 Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:189::create_clan clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:147 git \ clan-pytest-with-core> -C /build/pytest-88dxnrik/new-clan \ clan-pytest-with-core> add \ clan-pytest-with-core> . clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:203::create_clan clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:147 Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:203::create_clan clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:147 git \ clan-pytest-with-core> -C /build/pytest-88dxnrik/new-clan \ clan-pytest-with-core> commit \ clan-pytest-with-core> -m 'Initial commit' clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:204::create_clan clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:147 Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:204::create_clan clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:927 Prefetching flake /build/pytest-88dxnrik/new-clan clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 warning: you don't have Internet access; disabling some network-dependent features clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1174 Cache miss for clanInternals.vars.settings.secretStore clan-pytest-with-core> ______________________ test_init_substitutes_placeholders ______________________ clan-pytest-with-core> [gw2] linux -- Python 3.14.7 /nix/store/lb41b0anx1f98y9y5s9mdv97gjgsq740-python3-3.14.7/bin/python clan-pytest-with-core> clan-pytest-with-core> self = Flake(identifier='/build/pytest-g4i5u3kq/my-test-clan', hash='sha256-+iasi3P6wA7Sbp7dTEkCHcyTIXdlrJ7d7172i+QCY74=', st...src/clan_lib/flake/flake.py", line 833, in _record_cache_miss\n stack_trace = "".join(traceback.format_stack())\n']) clan-pytest-with-core> selectors = ['clanInternals.vars.settings.secretStore'] clan-pytest-with-core> clan-pytest-with-core> def get_from_nix( clan-pytest-with-core> self, clan-pytest-with-core> selectors: list[str], clan-pytest-with-core> ) -> None: clan-pytest-with-core> """Retrieves specific attributes from a Nix flake using the provided selectors. clan-pytest-with-core> clan-pytest-with-core> This function interacts with the Nix build system to fetch and process clan-pytest-with-core> attributes from a flake. It uses the provided selectors to determine which clan-pytest-with-core> attributes to retrieve and optionally accepts additional Nix options for clan-pytest-with-core> customization. The results are cached for future use. clan-pytest-with-core> Used mostly as a lowlevel function for `precache` and `select` methods. clan-pytest-with-core> clan-pytest-with-core> Args: clan-pytest-with-core> selectors (list[str]): A list of attribute selectors to fetch from the flake. clan-pytest-with-core> nix_options (list[str] | None): Optional additional options to pass to the Nix build command. clan-pytest-with-core> clan-pytest-with-core> Raises: clan-pytest-with-core> ClanError: If the number of outputs does not match the number of selectors. clan-pytest-with-core> AssertionError: If the cache or flake cache path is not properly initialized. clan-pytest-with-core> clan-pytest-with-core> """ clan-pytest-with-core> if self._cache is None: clan-pytest-with-core> self.invalidate_cache() clan-pytest-with-core> if self._cache is None: clan-pytest-with-core> msg = "Cache cannot be None after invalidation" clan-pytest-with-core> raise ClanError(msg) clan-pytest-with-core> clan-pytest-with-core> nix_options = self.nix_options[:] if self.nix_options is not None else [] clan-pytest-with-core> clan-pytest-with-core> str_selectors = [ clan-pytest-with-core> selectors_as_json(parse_selector(selector)) for selector in selectors clan-pytest-with-core> ] clan-pytest-with-core> clan-pytest-with-core> config = nix_config() clan-pytest-with-core> clan-pytest-with-core> select_hash = "sha256-yxcNOha7Cfv2nhVpz9ZXSNKk0R7wt4AiBklJ8D24rVg=" clan-pytest-with-core> if not select_hash.startswith("sha256-"): clan-pytest-with-core> select_flake = Flake(str(select_source()), nix_options=nix_options) clan-pytest-with-core> select_flake.invalidate_cache() clan-pytest-with-core> if select_flake.hash is None: clan-pytest-with-core> msg = "this should be impossible as invalidate_cache() should always set `hash`" clan-pytest-with-core> raise ClanError(msg) clan-pytest-with-core> select_hash = select_flake.hash clan-pytest-with-core> clan-pytest-with-core> # fmt: off clan-pytest-with-core> nix_code = f""" clan-pytest-with-core> let clan-pytest-with-core> flake = builtins.getFlake "path:{self.store_path}?narHash={self.hash}"; clan-pytest-with-core> selectLib = ( clan-pytest-with-core> builtins.getFlake clan-pytest-with-core> "path:{select_source()}?narHash={select_hash}" clan-pytest-with-core> ).lib; clan-pytest-with-core> in clan-pytest-with-core> derivation {{ clan-pytest-with-core> name = "clan-flake-select"; clan-pytest-with-core> result = builtins.toJSON [ clan-pytest-with-core> {" ".join( clan-pytest-with-core> [ clan-pytest-with-core> f"(selectLib.applySelectors (builtins.fromJSON ''{attr}'') flake)" clan-pytest-with-core> for attr in str_selectors clan-pytest-with-core> ] clan-pytest-with-core> )} clan-pytest-with-core> ]; clan-pytest-with-core> clan-pytest-with-core> # We can always build this derivation locally, since /bin/sh is system independent, clan-pytest-with-core> # remote builders would introduce needless overhead. clan-pytest-with-core> preferLocalBuild = true; clan-pytest-with-core> # Save the roundtrip to check the binary caches for trivial substitutions clan-pytest-with-core> allowSubstitutes = false; clan-pytest-with-core> clan-pytest-with-core> passAsFile = [ "result" ]; clan-pytest-with-core> system = "{config["system"]}"; clan-pytest-with-core> builder = "/bin/sh"; clan-pytest-with-core> args = [ clan-pytest-with-core> "-c" clan-pytest-with-core> '' clan-pytest-with-core> read -r x < "$resultPath"; printf %s "$x" > $out clan-pytest-with-core> '' clan-pytest-with-core> ]; clan-pytest-with-core> }} clan-pytest-with-core> """ clan-pytest-with-core> trace = os.environ.get("CLAN_DEBUG_NIX_SELECTORS") == "1" clan-pytest-with-core> try: clan-pytest-with-core> build_output = Path( clan-pytest-with-core> > run( clan-pytest-with-core> nix_build(["--expr", nix_code, *nix_options]), clan-pytest-with-core> RunOpts(log=Log.NONE, trace=trace), clan-pytest-with-core> ).stdout.strip(), clan-pytest-with-core> ) clan-pytest-with-core> clan-pytest-with-core> /build/src/clan_lib/flake/flake.py:1076: clan-pytest-with-core> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ clan-pytest-with-core> clan-pytest-with-core> cmd = ['nix', '--extra-experimental-features', 'nix-command flakes', '--option', 'warn-dirty', 'false', ...] clan-pytest-with-core> options = RunOpts(input=None, stdout=None, stderr=None, env=None, cwd=PosixPath('/build/pytest-g4i5u3kq'), log=, pr...al=False, timeout=inf, shell=False, requires_root_perm=False, graphical_perm=False, trace=False, sensitive_input=False) clan-pytest-with-core> clan-pytest-with-core> def run( clan-pytest-with-core> cmd: list[str], clan-pytest-with-core> options: RunOpts | None = None, clan-pytest-with-core> ) -> CmdOut: clan-pytest-with-core> if options is None: clan-pytest-with-core> options = RunOpts() clan-pytest-with-core> if options.cwd is None: clan-pytest-with-core> options.cwd = Path.cwd() clan-pytest-with-core> clan-pytest-with-core> async_ctx = get_async_ctx() clan-pytest-with-core> # Fill in the options from the thread-local data clan-pytest-with-core> # if they are not set in the options clan-pytest-with-core> if async_ctx: clan-pytest-with-core> if options.prefix is None: clan-pytest-with-core> options.prefix = async_ctx.prefix clan-pytest-with-core> if options.stdout is None: clan-pytest-with-core> options.stdout = async_ctx.stdout clan-pytest-with-core> if options.stderr is None: clan-pytest-with-core> options.stderr = async_ctx.stderr clan-pytest-with-core> clan-pytest-with-core> if options.requires_root_perm: clan-pytest-with-core> cmd = cmd_with_root(cmd, options.graphical_perm) clan-pytest-with-core> # Use our sudo ask proxy here as well clan-pytest-with-core> options.needs_user_terminal = True clan-pytest-with-core> clan-pytest-with-core> if cmdlog.isEnabledFor(logging.DEBUG) and options.trace: clan-pytest-with-core> if options.input and isinstance(options.input, bytes): clan-pytest-with-core> # Always redact sensitive input (e.g., private keys, passwords) clan-pytest-with-core> if options.sensitive_input: clan-pytest-with-core> filtered_input = "<>" clan-pytest-with-core> elif any( clan-pytest-with-core> not ch.isprintable() for ch in options.input.decode("ascii", "replace") clan-pytest-with-core> ): clan-pytest-with-core> filtered_input = "<>" clan-pytest-with-core> else: clan-pytest-with-core> filtered_input = options.input.decode("ascii", "replace") clan-pytest-with-core> clan-pytest-with-core> print_trace( clan-pytest-with-core> f"echo '{filtered_input}' | {indent_command(cmd)}", clan-pytest-with-core> cmdlog, clan-pytest-with-core> options.prefix, clan-pytest-with-core> ) clan-pytest-with-core> else: clan-pytest-with-core> print_trace(f"{indent_command(cmd)}", cmdlog, options.prefix) clan-pytest-with-core> clan-pytest-with-core> start = timeit.default_timer() clan-pytest-with-core> with ExitStack() as stack: clan-pytest-with-core> stdin = subprocess.PIPE if isinstance(options.input, bytes) else options.input clan-pytest-with-core> process = stack.enter_context( clan-pytest-with-core> subprocess.Popen( clan-pytest-with-core> cmd, clan-pytest-with-core> cwd=str(options.cwd), clan-pytest-with-core> env=options.env, clan-pytest-with-core> stdin=stdin, clan-pytest-with-core> stdout=subprocess.PIPE, clan-pytest-with-core> stderr=subprocess.PIPE, clan-pytest-with-core> start_new_session=not options.needs_user_terminal, clan-pytest-with-core> shell=options.shell, clan-pytest-with-core> ), clan-pytest-with-core> ) clan-pytest-with-core> clan-pytest-with-core> if options.needs_user_terminal: clan-pytest-with-core> # we didn't allocate a new session, so we can't terminate the process group clan-pytest-with-core> stack.enter_context(terminate_process(process)) clan-pytest-with-core> else: clan-pytest-with-core> stack.enter_context(terminate_process_group(process)) clan-pytest-with-core> clan-pytest-with-core> input_bytes = options.input if isinstance(options.input, bytes) else None clan-pytest-with-core> clan-pytest-with-core> stdout_buf, stderr_buf, stdout_raw = handle_io( clan-pytest-with-core> process, clan-pytest-with-core> options.log, clan-pytest-with-core> prefix=options.prefix, clan-pytest-with-core> msg_color=options.msg_color, clan-pytest-with-core> timeout=options.timeout, clan-pytest-with-core> input_bytes=input_bytes, clan-pytest-with-core> stdout=options.stdout, clan-pytest-with-core> stderr=options.stderr, clan-pytest-with-core> cmd=cmd, clan-pytest-with-core> cwd=options.cwd, clan-pytest-with-core> env=options.env, clan-pytest-with-core> ) clan-pytest-with-core> if not is_async_cancelled(): clan-pytest-with-core> process.wait() clan-pytest-with-core> clan-pytest-with-core> if TIME_TABLE: clan-pytest-with-core> TIME_TABLE.add(shlex.join(cmd), timeit.default_timer() - start) clan-pytest-with-core> clan-pytest-with-core> # Wait for the subprocess to finish clan-pytest-with-core> cmd_out = CmdOut( clan-pytest-with-core> stdout=stdout_buf, clan-pytest-with-core> stderr=stderr_buf, clan-pytest-with-core> cwd=options.cwd, clan-pytest-with-core> env=options.env, clan-pytest-with-core> command_list=cmd, clan-pytest-with-core> returncode=process.returncode, clan-pytest-with-core> msg=options.error_msg, clan-pytest-with-core> stdout_raw=stdout_raw, clan-pytest-with-core> ) clan-pytest-with-core> clan-pytest-with-core> if cmdlog.isEnabledFor(logging.DEBUG) and options.trace: clan-pytest-with-core> print_trace( clan-pytest-with-core> f"Command exited with return code {process.returncode}", clan-pytest-with-core> cmdlog, clan-pytest-with-core> options.prefix, clan-pytest-with-core> ) clan-pytest-with-core> clan-pytest-with-core> if options.check and process.returncode != 0: clan-pytest-with-core> if is_async_cancelled(): clan-pytest-with-core> cmd_out.msg = "Command cancelled" clan-pytest-with-core> > raise ClanCmdError(cmd_out) clan-pytest-with-core> E clan_lib.errors.ClanCmdError: clan-pytest-with-core> E =================================== Command ==================================== clan-pytest-with-core> E nix \ clan-pytest-with-core> E --extra-experimental-features 'nix-command flakes' \ clan-pytest-with-core> E --option warn-dirty \ clan-pytest-with-core> E false \ clan-pytest-with-core> E build \ clan-pytest-with-core> E --flake-registry '' \ clan-pytest-with-core> E --print-out-paths --print-build-logs \ clan-pytest-with-core> E --show-trace --no-link \ clan-pytest-with-core> E --expr ' clan-pytest-with-core> E let clan-pytest-with-core> E flake = builtins.getFlake "path:/nix/store/yf1l9812wwhs2v3jk8s1kvcmcmv6yzm0-source?narHash=sha256-+iasi3P6wA7Sbp7dTEkCHcyTIXdlrJ7d7172i+QCY74="; clan-pytest-with-core> E selectLib = ( clan-pytest-with-core> E builtins.getFlake clan-pytest-with-core> E "path:/nix/store/cba1x9mxnwr8b36cw41bya7g6d5v1p7d-source?narHash=sha256-yxcNOha7Cfv2nhVpz9ZXSNKk0R7wt4AiBklJ8D24rVg=" clan-pytest-with-core> E ).lib; clan-pytest-with-core> E in clan-pytest-with-core> E derivation { clan-pytest-with-core> E name = "clan-flake-select"; clan-pytest-with-core> E result = builtins.toJSON [ clan-pytest-with-core> E (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "secretStore"}]'"'"''"'"') flake) clan-pytest-with-core> E ]; clan-pytest-with-core> E clan-pytest-with-core> E # We can always build this derivation locally, since /bin/sh is system independent, clan-pytest-with-core> E # remote builders would introduce needless overhead. clan-pytest-with-core> E preferLocalBuild = true; clan-pytest-with-core> E # Save the roundtrip to check the binary caches for trivial substitutions clan-pytest-with-core> E allowSubstitutes = false; clan-pytest-with-core> E clan-pytest-with-core> E passAsFile = [ "result" ]; clan-pytest-with-core> E system = "x86_64-linux"; clan-pytest-with-core> E builder = "/bin/sh"; clan-pytest-with-core> E args = [ clan-pytest-with-core> E "-c" clan-pytest-with-core> E '"'"''"'"' clan-pytest-with-core> E read -r x < "$resultPath"; printf %s "$x" > $out clan-pytest-with-core> E '"'"''"'"' clan-pytest-with-core> E ]; clan-pytest-with-core> E } clan-pytest-with-core> E ' \ clan-pytest-with-core> E --store /build/store clan-pytest-with-core> E clan-pytest-with-core> E ==================================== Stderr ==================================== clan-pytest-with-core> E warning: you don't have Internet access; disabling some network-dependent features clan-pytest-with-core> E error: clan-pytest-with-core> E … while calling the 'derivationStrict' builtin clan-pytest-with-core> E at :37:12: clan-pytest-with-core> E 36| clan-pytest-with-core> E 37| strict = derivationStrict drvAttrs; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 38| clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating derivation 'clan-flake-select' clan-pytest-with-core> E whose name attribute is located at «string»:10:17 clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating attribute 'result' of derivation 'clan-flake-select' clan-pytest-with-core> E at «string»:11:17: clan-pytest-with-core> E 10| name = "clan-flake-select"; clan-pytest-with-core> E 11| result = builtins.toJSON [ clan-pytest-with-core> E | ^ clan-pytest-with-core> E 12| (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "secretStore"}]'') flake) clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'toJSON' builtin clan-pytest-with-core> E at «string»:11:26: clan-pytest-with-core> E 10| name = "clan-flake-select"; clan-pytest-with-core> E 11| result = builtins.toJSON [ clan-pytest-with-core> E | ^ clan-pytest-with-core> E 12| (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "secretStore"}]'') flake) clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating list element at index 0 clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at «string»:12:22: clan-pytest-with-core> E 11| result = builtins.toJSON [ clan-pytest-with-core> E 12| (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "secretStore"}]'') flake) clan-pytest-with-core> E | ^ clan-pytest-with-core> E 13| ]; clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'applySelectors' clan-pytest-with-core> E at /build/store/nix/store/cba1x9mxnwr8b36cw41bya7g6d5v1p7d-source/select.nix:262:16: clan-pytest-with-core> E 261| applySelectors = clan-pytest-with-core> E 262| selectors: obj: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 263| let clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/cba1x9mxnwr8b36cw41bya7g6d5v1p7d-source/select.nix:352:5: clan-pytest-with-core> E 351| in clan-pytest-with-core> E 352| recurse selectors 0 obj; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 353| clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'recurse' clan-pytest-with-core> E at /build/store/nix/store/cba1x9mxnwr8b36cw41bya7g6d5v1p7d-source/select.nix:265:25: clan-pytest-with-core> E 264| recurse = clan-pytest-with-core> E 265| selectors: idx: obj: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 266| # we are done clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating a branch condition clan-pytest-with-core> E at /build/store/nix/store/cba1x9mxnwr8b36cw41bya7g6d5v1p7d-source/select.nix:281:11: clan-pytest-with-core> E 280| # lists clan-pytest-with-core> E 281| if builtins.isList obj then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 282| if selector.type == "all" then clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'isList' builtin clan-pytest-with-core> E at /build/store/nix/store/cba1x9mxnwr8b36cw41bya7g6d5v1p7d-source/select.nix:281:14: clan-pytest-with-core> E 280| # lists clan-pytest-with-core> E 281| if builtins.isList obj then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 282| if selector.type == "all" then clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'getFlake' builtin clan-pytest-with-core> E at «string»:3:23: clan-pytest-with-core> E 2| let clan-pytest-with-core> E 3| flake = builtins.getFlake "path:/nix/store/yf1l9812wwhs2v3jk8s1kvcmcmv6yzm0-source?narHash=sha256-+iasi3P6wA7Sbp7dTEkCHcyTIXdlrJ7d7172i+QCY74="; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 4| selectLib = ( clan-pytest-with-core> E clan-pytest-with-core> E … while updating the lock file of flake 'path:/nix/store/yf1l9812wwhs2v3jk8s1kvcmcmv6yzm0-source?lastModified=0&narHash=sha256-%2Biasi3P6wA7Sbp7dTEkCHcyTIXdlrJ7d7172i%2BQCY74%3D' clan-pytest-with-core> E clan-pytest-with-core> E … while updating the flake input 'clan-core' clan-pytest-with-core> E clan-pytest-with-core> E error: cannot update unlocked flake input 'clan-core' in pure mode clan-pytest-with-core> E clan-pytest-with-core> E Return Code: 1 clan-pytest-with-core> clan-pytest-with-core> /build/src/clan_lib/cmd/__init__.py:451: ClanCmdError clan-pytest-with-core> clan-pytest-with-core> The above exception was the direct cause of the following exception: clan-pytest-with-core> clan-pytest-with-core> monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7fffe23597f0> clan-pytest-with-core> temporary_home = PosixPath('/build/pytest-g4i5u3kq') clan-pytest-with-core> patch_get_clan_details = .get_clan_details at 0x7fffe25da4b0> clan-pytest-with-core> clan-pytest-with-core> @pytest.mark.broken_on_darwin clan-pytest-with-core> @pytest.mark.with_core clan-pytest-with-core> def test_init_substitutes_placeholders( clan-pytest-with-core> monkeypatch: pytest.MonkeyPatch, clan-pytest-with-core> temporary_home: Path, clan-pytest-with-core> patch_get_clan_details: Any, # noqa: ARG001 clan-pytest-with-core> ) -> None: clan-pytest-with-core> """Test that clan init substitutes {{name}} and {{domain}} placeholders.""" clan-pytest-with-core> flake_dir = temporary_home / "my-test-clan" clan-pytest-with-core> clan-pytest-with-core> monkeypatch.setenv("LOGNAME", "testuser") clan-pytest-with-core> > cli.run( clan-pytest-with-core> [ clan-pytest-with-core> "init", clan-pytest-with-core> str(flake_dir), clan-pytest-with-core> "--template=default", clan-pytest-with-core> "--domain=clan", clan-pytest-with-core> "--no-update", clan-pytest-with-core> "--no-interactive", clan-pytest-with-core> ] clan-pytest-with-core> ) clan-pytest-with-core> clan-pytest-with-core> /build/src/clan_cli/init_test.py:219: clan-pytest-with-core> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ clan-pytest-with-core> /build/src/clan_cli/tests/helpers/cli.py:22: in run clan-pytest-with-core> parsed.func(parsed) clan-pytest-with-core> /build/src/clan_cli/init.py:54: in init_command clan-pytest-with-core> register_admin_keys( clan-pytest-with-core> /build/src/clan_cli/vars/keygen.py:89: in register_admin_keys clan-pytest-with-core> backend = Flake(str(flake_dir)).select(vars_settings_secret_store()) clan-pytest-with-core> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ clan-pytest-with-core> /build/src/clan_lib/flake/flake.py:1177: in select clan-pytest-with-core> self.get_from_nix([selector]) clan-pytest-with-core> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ clan-pytest-with-core> clan-pytest-with-core> self = Flake(identifier='/build/pytest-g4i5u3kq/my-test-clan', hash='sha256-+iasi3P6wA7Sbp7dTEkCHcyTIXdlrJ7d7172i+QCY74=', st...src/clan_lib/flake/flake.py", line 833, in _record_cache_miss\n stack_trace = "".join(traceback.format_stack())\n']) clan-pytest-with-core> selectors = ['clanInternals.vars.settings.secretStore'] clan-pytest-with-core> clan-pytest-with-core> def get_from_nix( clan-pytest-with-core> self, clan-pytest-with-core> selectors: list[str], clan-pytest-with-core> ) -> None: clan-pytest-with-core> """Retrieves specific attributes from a Nix flake using the provided selectors. clan-pytest-with-core> clan-pytest-with-core> This function interacts with the Nix build system to fetch and process clan-pytest-with-core> attributes from a flake. It uses the provided selectors to determine which clan-pytest-with-core> attributes to retrieve and optionally accepts additional Nix options for clan-pytest-with-core> customization. The results are cached for future use. clan-pytest-with-core> Used mostly as a lowlevel function for `precache` and `select` methods. clan-pytest-with-core> clan-pytest-with-core> Args: clan-pytest-with-core> selectors (list[str]): A list of attribute selectors to fetch from the flake. clan-pytest-with-core> nix_options (list[str] | None): Optional additional options to pass to the Nix build command. clan-pytest-with-core> clan-pytest-with-core> Raises: clan-pytest-with-core> ClanError: If the number of outputs does not match the number of selectors. clan-pytest-with-core> AssertionError: If the cache or flake cache path is not properly initialized. clan-pytest-with-core> clan-pytest-with-core> """ clan-pytest-with-core> if self._cache is None: clan-pytest-with-core> self.invalidate_cache() clan-pytest-with-core> if self._cache is None: clan-pytest-with-core> msg = "Cache cannot be None after invalidation" clan-pytest-with-core> raise ClanError(msg) clan-pytest-with-core> clan-pytest-with-core> nix_options = self.nix_options[:] if self.nix_options is not None else [] clan-pytest-with-core> clan-pytest-with-core> str_selectors = [ clan-pytest-with-core> selectors_as_json(parse_selector(selector)) for selector in selectors clan-pytest-with-core> ] clan-pytest-with-core> clan-pytest-with-core> config = nix_config() clan-pytest-with-core> clan-pytest-with-core> select_hash = "sha256-yxcNOha7Cfv2nhVpz9ZXSNKk0R7wt4AiBklJ8D24rVg=" clan-pytest-with-core> if not select_hash.startswith("sha256-"): clan-pytest-with-core> select_flake = Flake(str(select_source()), nix_options=nix_options) clan-pytest-with-core> select_flake.invalidate_cache() clan-pytest-with-core> if select_flake.hash is None: clan-pytest-with-core> msg = "this should be impossible as invalidate_cache() should always set `hash`" clan-pytest-with-core> raise ClanError(msg) clan-pytest-with-core> select_hash = select_flake.hash clan-pytest-with-core> clan-pytest-with-core> # fmt: off clan-pytest-with-core> nix_code = f""" clan-pytest-with-core> let clan-pytest-with-core> flake = builtins.getFlake "path:{self.store_path}?narHash={self.hash}"; clan-pytest-with-core> selectLib = ( clan-pytest-with-core> builtins.getFlake clan-pytest-with-core> "path:{select_source()}?narHash={select_hash}" clan-pytest-with-core> ).lib; clan-pytest-with-core> in clan-pytest-with-core> derivation {{ clan-pytest-with-core> name = "clan-flake-select"; clan-pytest-with-core> result = builtins.toJSON [ clan-pytest-with-core> {" ".join( clan-pytest-with-core> [ clan-pytest-with-core> f"(selectLib.applySelectors (builtins.fromJSON ''{attr}'') flake)" clan-pytest-with-core> for attr in str_selectors clan-pytest-with-core> ] clan-pytest-with-core> )} clan-pytest-with-core> ]; clan-pytest-with-core> clan-pytest-with-core> # We can always build this derivation locally, since /bin/sh is system independent, clan-pytest-with-core> # remote builders would introduce needless overhead. clan-pytest-with-core> preferLocalBuild = true; clan-pytest-with-core> # Save the roundtrip to check the binary caches for trivial substitutions clan-pytest-with-core> allowSubstitutes = false; clan-pytest-with-core> clan-pytest-with-core> passAsFile = [ "result" ]; clan-pytest-with-core> system = "{config["system"]}"; clan-pytest-with-core> builder = "/bin/sh"; clan-pytest-with-core> args = [ clan-pytest-with-core> "-c" clan-pytest-with-core> '' clan-pytest-with-core> read -r x < "$resultPath"; printf %s "$x" > $out clan-pytest-with-core> '' clan-pytest-with-core> ]; clan-pytest-with-core> }} clan-pytest-with-core> """ clan-pytest-with-core> trace = os.environ.get("CLAN_DEBUG_NIX_SELECTORS") == "1" clan-pytest-with-core> try: clan-pytest-with-core> build_output = Path( clan-pytest-with-core> run( clan-pytest-with-core> nix_build(["--expr", nix_code, *nix_options]), clan-pytest-with-core> RunOpts(log=Log.NONE, trace=trace), clan-pytest-with-core> ).stdout.strip(), clan-pytest-with-core> ) clan-pytest-with-core> except ClanCmdError as e: clan-pytest-with-core> if "error: attribute 'clan' missing" in str(e): clan-pytest-with-core> msg = ("This flake does not export the 'clan' attribute. \n" clan-pytest-with-core> "Please write 'clan = clan.config;' into the outputs of your flake.nix.") clan-pytest-with-core> raise ClanSelectError( clan-pytest-with-core> flake_identifier=self.identifier, clan-pytest-with-core> selectors=selectors, clan-pytest-with-core> cmd_error=e, clan-pytest-with-core> description=msg, clan-pytest-with-core> ) from e clan-pytest-with-core> clan-pytest-with-core> # If the error is about a missing attribute, we raise a ClanSelectError clan-pytest-with-core> # with the failed selectors and the flake identifier. clan-pytest-with-core> > raise ClanSelectError( clan-pytest-with-core> flake_identifier=self.identifier, clan-pytest-with-core> selectors=selectors, clan-pytest-with-core> cmd_error=e, clan-pytest-with-core> ) from e clan-pytest-with-core> E clan_lib.flake.flake.ClanSelectError: Error on: $ clan select 'clanInternals.vars.settings.secretStore' clan-pytest-with-core> E Reason: cannot update unlocked flake input 'clan-core' in pure mode. Use flag '--debug' to see full nix trace. clan-pytest-with-core> clan-pytest-with-core> /build/src/clan_lib/flake/flake.py:1094: ClanSelectError clan-pytest-with-core> ----------------------------- Captured stderr call ----------------------------- clan-pytest-with-core> [localhost] $ clan init /build/pytest-g4i5u3kq/my-test-clan --template=default --domain=clan --no-update --no-interactive clan-pytest-with-core> Caller: /build/src/clan_cli/init_test.py:219::test_init_substitutes_placeholders clan-pytest-with-core> clan-pytest-with-core> age-keygen clan-pytest-with-core> Caller: /build/src/clan_cli/secrets/sops.py:382::generate_private_key clan-pytest-with-core> clan-pytest-with-core> Public key: age13jhjpxj63texmm5l9rvt9t0d3676kq8msg9mq0ff4zj37asuc9jsuwjpl0 clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_cli/secrets/sops.py:382::generate_private_key clan-pytest-with-core> clan-pytest-with-core> Generated age private key at '/build/pytest-g4i5u3kq/.config/sops/age/keys.txt' for your user. clan-pytest-with-core> Please back it up on a secure location or you will lose access to your secrets. clan-pytest-with-core> Prefetching flake /build/src/clan_lib/clan_core_templates clan-pytest-with-core> warning: you don't have Internet access; disabling some network-dependent features clan-pytest-with-core> Loading flake cache from file /build/clan-flake-cache/flakes-v2/61f7e410abb4ac31c6cde3e73e865823fc5f1087 clan-pytest-with-core> Prefetching flake /build/src/clan_lib/clan_core_templates clan-pytest-with-core> warning: you don't have Internet access; disabling some network-dependent features clan-pytest-with-core> Loading flake cache from file /build/clan-flake-cache/flakes-v2/61f7e410abb4ac31c6cde3e73e865823fc5f1087 clan-pytest-with-core> (cached) $ clan select 'clanInternals.templates.clan."default"' clan-pytest-with-core> chmod \ clan-pytest-with-core> -R u+w \ clan-pytest-with-core> /build/pytest-g4i5u3kq/my-test-clan clan-pytest-with-core> Caller: /build/src/clan_lib/templates/filesystem.py:36::copy_from_nixstore clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/templates/filesystem.py:36::copy_from_nixstore clan-pytest-with-core> clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-g4i5u3kq/my-test-clan \ clan-pytest-with-core> init clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:173::create_clan clan-pytest-with-core> clan-pytest-with-core> hint: Using 'master' as the name for the initial branch. This default branch name clan-pytest-with-core> hint: will change to "main" in Git 3.0. To configure the initial branch name clan-pytest-with-core> hint: to use in all of your new repositories, which will suppress this warning, clan-pytest-with-core> hint: call: clan-pytest-with-core> hint: clan-pytest-with-core> hint: git config --global init.defaultBranch clan-pytest-with-core> hint: clan-pytest-with-core> hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and clan-pytest-with-core> hint: 'development'. The just-created branch can be renamed via this command: clan-pytest-with-core> hint: clan-pytest-with-core> hint: git branch -m clan-pytest-with-core> hint: clan-pytest-with-core> hint: Disable this message with "git config set advice.defaultBranchName false" clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:173::create_clan clan-pytest-with-core> clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-g4i5u3kq/my-test-clan \ clan-pytest-with-core> add \ clan-pytest-with-core> . clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:174::create_clan clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:174::create_clan clan-pytest-with-core> clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-g4i5u3kq/my-test-clan \ clan-pytest-with-core> config \ clan-pytest-with-core> user.name clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:177::create_clan clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 1 clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:177::create_clan clan-pytest-with-core> clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-g4i5u3kq/my-test-clan \ clan-pytest-with-core> config \ clan-pytest-with-core> user.name \ clan-pytest-with-core> clan-tool clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:182::create_clan clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:182::create_clan clan-pytest-with-core> clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-g4i5u3kq/my-test-clan \ clan-pytest-with-core> config \ clan-pytest-with-core> user.email clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:184::create_clan clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 1 clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:184::create_clan clan-pytest-with-core> clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-g4i5u3kq/my-test-clan \ clan-pytest-with-core> config \ clan-pytest-with-core> user.email \ clan-pytest-with-core> clan@example.com clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:189::create_clan clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:189::create_clan clan-pytest-with-core> clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-g4i5u3kq/my-test-clan \ clan-pytest-with-core> add \ clan-pytest-with-core> . clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:203::create_clan clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:203::create_clan clan-pytest-with-core> clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-g4i5u3kq/my-test-clan \ clan-pytest-with-core> commit \ clan-pytest-with-core> -m 'Initial commit' clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:204::create_clan clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:204::create_clan clan-pytest-with-core> clan-pytest-with-core> Prefetching flake /build/pytest-g4i5u3kq/my-test-clan clan-pytest-with-core> warning: you don't have Internet access; disabling some network-dependent features clan-pytest-with-core> Cache miss for clanInternals.vars.settings.secretStore clan-pytest-with-core> ------------------------------ Captured log call ------------------------------- clan-pytest-with-core> DEBUG clan_cli.tests.helpers.cli:__init__.py:147 $ clan init /build/pytest-g4i5u3kq/my-test-clan --template=default --domain=clan --no-update --no-interactive clan-pytest-with-core> Caller: /build/src/clan_cli/init_test.py:219::test_init_substitutes_placeholders clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:147 age-keygen clan-pytest-with-core> Caller: /build/src/clan_cli/secrets/sops.py:382::generate_private_key clan-pytest-with-core> clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 Public key: age13jhjpxj63texmm5l9rvt9t0d3676kq8msg9mq0ff4zj37asuc9jsuwjpl0 clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:147 Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_cli/secrets/sops.py:382::generate_private_key clan-pytest-with-core> clan-pytest-with-core> INFO clan_cli.secrets.key:key.py:41 Generated age private key at '/build/pytest-g4i5u3kq/.config/sops/age/keys.txt' for your user. clan-pytest-with-core> Please back it up on a secure location or you will lose access to your secrets. clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:927 Prefetching flake /build/src/clan_lib/clan_core_templates clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 warning: you don't have Internet access; disabling some network-dependent features clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:789 Loading flake cache from file /build/clan-flake-cache/flakes-v2/61f7e410abb4ac31c6cde3e73e865823fc5f1087 clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:927 Prefetching flake /build/src/clan_lib/clan_core_templates clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 warning: you don't have Internet access; disabling some network-dependent features clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:789 Loading flake cache from file /build/clan-flake-cache/flakes-v2/61f7e410abb4ac31c6cde3e73e865823fc5f1087 clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1179 (cached) $ clan select 'clanInternals.templates.clan."default"' clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:147 chmod \ clan-pytest-with-core> -R u+w \ clan-pytest-with-core> /build/pytest-g4i5u3kq/my-test-clan clan-pytest-with-core> Caller: /build/src/clan_lib/templates/filesystem.py:36::copy_from_nixstore clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:147 Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/templates/filesystem.py:36::copy_from_nixstore clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:147 git \ clan-pytest-with-core> -C /build/pytest-g4i5u3kq/my-test-clan \ clan-pytest-with-core> init clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:173::create_clan clan-pytest-with-core> clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 hint: Using 'master' as the name for the initial branch. This default branch name clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 hint: will change to "main" in Git 3.0. To configure the initial branch name clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 hint: to use in all of your new repositories, which will suppress this warning, clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 hint: call: clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 hint: clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 hint: git config --global init.defaultBranch clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 hint: clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 hint: 'development'. The just-created branch can be renamed via this command: clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 hint: clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 hint: git branch -m clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 hint: clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 hint: Disable this message with "git config set advice.defaultBranchName false" clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:147 Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:173::create_clan clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:147 git \ clan-pytest-with-core> -C /build/pytest-g4i5u3kq/my-test-clan \ clan-pytest-with-core> add \ clan-pytest-with-core> . clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:174::create_clan clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:147 Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:174::create_clan clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:147 git \ clan-pytest-with-core> -C /build/pytest-g4i5u3kq/my-test-clan \ clan-pytest-with-core> config \ clan-pytest-with-core> user.name clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:177::create_clan clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:147 Command exited with return code 1 clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:177::create_clan clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:147 git \ clan-pytest-with-core> -C /build/pytest-g4i5u3kq/my-test-clan \ clan-pytest-with-core> config \ clan-pytest-with-core> user.name \ clan-pytest-with-core> clan-tool clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:182::create_clan clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:147 Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:182::create_clan clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:147 git \ clan-pytest-with-core> -C /build/pytest-g4i5u3kq/my-test-clan \ clan-pytest-with-core> config \ clan-pytest-with-core> user.email clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:184::create_clan clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:147 Command exited with return code 1 clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:184::create_clan clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:147 git \ clan-pytest-with-core> -C /build/pytest-g4i5u3kq/my-test-clan \ clan-pytest-with-core> config \ clan-pytest-with-core> user.email \ clan-pytest-with-core> clan@example.com clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:189::create_clan clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:147 Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:189::create_clan clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:147 git \ clan-pytest-with-core> -C /build/pytest-g4i5u3kq/my-test-clan \ clan-pytest-with-core> add \ clan-pytest-with-core> . clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:203::create_clan clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:147 Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:203::create_clan clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:147 git \ clan-pytest-with-core> -C /build/pytest-g4i5u3kq/my-test-clan \ clan-pytest-with-core> commit \ clan-pytest-with-core> -m 'Initial commit' clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:204::create_clan clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:147 Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:204::create_clan clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:927 Prefetching flake /build/pytest-g4i5u3kq/my-test-clan clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 warning: you don't have Internet access; disabling some network-dependent features clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1174 Cache miss for clanInternals.vars.settings.secretStore clan-pytest-with-core> ______________ test_age_ensure_machine_key_provisions_age_keygen _______________ clan-pytest-with-core> [gw2] linux -- Python 3.14.7 /nix/store/lb41b0anx1f98y9y5s9mdv97gjgsq740-python3-3.14.7/bin/python clan-pytest-with-core> clan-pytest-with-core> self = Flake(identifier='/build/pytest-t7v77c82/flake', hash='sha256-1IUTkttjqQTgmnLKSwxu9LplyOZPYx3b/GBjUEtluhM=', store_pat...src/clan_lib/flake/flake.py", line 833, in _record_cache_miss\n stack_trace = "".join(traceback.format_stack())\n']) clan-pytest-with-core> selectors = ['clanInternals.vars.settings.?age'] clan-pytest-with-core> clan-pytest-with-core> def get_from_nix( clan-pytest-with-core> self, clan-pytest-with-core> selectors: list[str], clan-pytest-with-core> ) -> None: clan-pytest-with-core> """Retrieves specific attributes from a Nix flake using the provided selectors. clan-pytest-with-core> clan-pytest-with-core> This function interacts with the Nix build system to fetch and process clan-pytest-with-core> attributes from a flake. It uses the provided selectors to determine which clan-pytest-with-core> attributes to retrieve and optionally accepts additional Nix options for clan-pytest-with-core> customization. The results are cached for future use. clan-pytest-with-core> Used mostly as a lowlevel function for `precache` and `select` methods. clan-pytest-with-core> clan-pytest-with-core> Args: clan-pytest-with-core> selectors (list[str]): A list of attribute selectors to fetch from the flake. clan-pytest-with-core> nix_options (list[str] | None): Optional additional options to pass to the Nix build command. clan-pytest-with-core> clan-pytest-with-core> Raises: clan-pytest-with-core> ClanError: If the number of outputs does not match the number of selectors. clan-pytest-with-core> AssertionError: If the cache or flake cache path is not properly initialized. clan-pytest-with-core> clan-pytest-with-core> """ clan-pytest-with-core> if self._cache is None: clan-pytest-with-core> self.invalidate_cache() clan-pytest-with-core> if self._cache is None: clan-pytest-with-core> msg = "Cache cannot be None after invalidation" clan-pytest-with-core> raise ClanError(msg) clan-pytest-with-core> clan-pytest-with-core> nix_options = self.nix_options[:] if self.nix_options is not None else [] clan-pytest-with-core> clan-pytest-with-core> str_selectors = [ clan-pytest-with-core> selectors_as_json(parse_selector(selector)) for selector in selectors clan-pytest-with-core> ] clan-pytest-with-core> clan-pytest-with-core> config = nix_config() clan-pytest-with-core> clan-pytest-with-core> select_hash = "sha256-yxcNOha7Cfv2nhVpz9ZXSNKk0R7wt4AiBklJ8D24rVg=" clan-pytest-with-core> if not select_hash.startswith("sha256-"): clan-pytest-with-core> select_flake = Flake(str(select_source()), nix_options=nix_options) clan-pytest-with-core> select_flake.invalidate_cache() clan-pytest-with-core> if select_flake.hash is None: clan-pytest-with-core> msg = "this should be impossible as invalidate_cache() should always set `hash`" clan-pytest-with-core> raise ClanError(msg) clan-pytest-with-core> select_hash = select_flake.hash clan-pytest-with-core> clan-pytest-with-core> # fmt: off clan-pytest-with-core> nix_code = f""" clan-pytest-with-core> let clan-pytest-with-core> flake = builtins.getFlake "path:{self.store_path}?narHash={self.hash}"; clan-pytest-with-core> selectLib = ( clan-pytest-with-core> builtins.getFlake clan-pytest-with-core> "path:{select_source()}?narHash={select_hash}" clan-pytest-with-core> ).lib; clan-pytest-with-core> in clan-pytest-with-core> derivation {{ clan-pytest-with-core> name = "clan-flake-select"; clan-pytest-with-core> result = builtins.toJSON [ clan-pytest-with-core> {" ".join( clan-pytest-with-core> [ clan-pytest-with-core> f"(selectLib.applySelectors (builtins.fromJSON ''{attr}'') flake)" clan-pytest-with-core> for attr in str_selectors clan-pytest-with-core> ] clan-pytest-with-core> )} clan-pytest-with-core> ]; clan-pytest-with-core> clan-pytest-with-core> # We can always build this derivation locally, since /bin/sh is system independent, clan-pytest-with-core> # remote builders would introduce needless overhead. clan-pytest-with-core> preferLocalBuild = true; clan-pytest-with-core> # Save the roundtrip to check the binary caches for trivial substitutions clan-pytest-with-core> allowSubstitutes = false; clan-pytest-with-core> clan-pytest-with-core> passAsFile = [ "result" ]; clan-pytest-with-core> system = "{config["system"]}"; clan-pytest-with-core> builder = "/bin/sh"; clan-pytest-with-core> args = [ clan-pytest-with-core> "-c" clan-pytest-with-core> '' clan-pytest-with-core> read -r x < "$resultPath"; printf %s "$x" > $out clan-pytest-with-core> '' clan-pytest-with-core> ]; clan-pytest-with-core> }} clan-pytest-with-core> """ clan-pytest-with-core> trace = os.environ.get("CLAN_DEBUG_NIX_SELECTORS") == "1" clan-pytest-with-core> try: clan-pytest-with-core> build_output = Path( clan-pytest-with-core> > run( clan-pytest-with-core> nix_build(["--expr", nix_code, *nix_options]), clan-pytest-with-core> RunOpts(log=Log.NONE, trace=trace), clan-pytest-with-core> ).stdout.strip(), clan-pytest-with-core> ) clan-pytest-with-core> clan-pytest-with-core> /build/src/clan_lib/flake/flake.py:1076: clan-pytest-with-core> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ clan-pytest-with-core> clan-pytest-with-core> cmd = ['nix', '--extra-experimental-features', 'nix-command flakes', '--option', 'warn-dirty', 'false', ...] clan-pytest-with-core> options = RunOpts(input=None, stdout=None, stderr=None, env=None, cwd=PosixPath('/build/pytest-t7v77c82/flake'), log= clan-pytest-with-core> def run( clan-pytest-with-core> cmd: list[str], clan-pytest-with-core> options: RunOpts | None = None, clan-pytest-with-core> ) -> CmdOut: clan-pytest-with-core> if options is None: clan-pytest-with-core> options = RunOpts() clan-pytest-with-core> if options.cwd is None: clan-pytest-with-core> options.cwd = Path.cwd() clan-pytest-with-core> clan-pytest-with-core> async_ctx = get_async_ctx() clan-pytest-with-core> # Fill in the options from the thread-local data clan-pytest-with-core> # if they are not set in the options clan-pytest-with-core> if async_ctx: clan-pytest-with-core> if options.prefix is None: clan-pytest-with-core> options.prefix = async_ctx.prefix clan-pytest-with-core> if options.stdout is None: clan-pytest-with-core> options.stdout = async_ctx.stdout clan-pytest-with-core> if options.stderr is None: clan-pytest-with-core> options.stderr = async_ctx.stderr clan-pytest-with-core> clan-pytest-with-core> if options.requires_root_perm: clan-pytest-with-core> cmd = cmd_with_root(cmd, options.graphical_perm) clan-pytest-with-core> # Use our sudo ask proxy here as well clan-pytest-with-core> options.needs_user_terminal = True clan-pytest-with-core> clan-pytest-with-core> if cmdlog.isEnabledFor(logging.DEBUG) and options.trace: clan-pytest-with-core> if options.input and isinstance(options.input, bytes): clan-pytest-with-core> # Always redact sensitive input (e.g., private keys, passwords) clan-pytest-with-core> if options.sensitive_input: clan-pytest-with-core> filtered_input = "<>" clan-pytest-with-core> elif any( clan-pytest-with-core> not ch.isprintable() for ch in options.input.decode("ascii", "replace") clan-pytest-with-core> ): clan-pytest-with-core> filtered_input = "<>" clan-pytest-with-core> else: clan-pytest-with-core> filtered_input = options.input.decode("ascii", "replace") clan-pytest-with-core> clan-pytest-with-core> print_trace( clan-pytest-with-core> f"echo '{filtered_input}' | {indent_command(cmd)}", clan-pytest-with-core> cmdlog, clan-pytest-with-core> options.prefix, clan-pytest-with-core> ) clan-pytest-with-core> else: clan-pytest-with-core> print_trace(f"{indent_command(cmd)}", cmdlog, options.prefix) clan-pytest-with-core> clan-pytest-with-core> start = timeit.default_timer() clan-pytest-with-core> with ExitStack() as stack: clan-pytest-with-core> stdin = subprocess.PIPE if isinstance(options.input, bytes) else options.input clan-pytest-with-core> process = stack.enter_context( clan-pytest-with-core> subprocess.Popen( clan-pytest-with-core> cmd, clan-pytest-with-core> cwd=str(options.cwd), clan-pytest-with-core> env=options.env, clan-pytest-with-core> stdin=stdin, clan-pytest-with-core> stdout=subprocess.PIPE, clan-pytest-with-core> stderr=subprocess.PIPE, clan-pytest-with-core> start_new_session=not options.needs_user_terminal, clan-pytest-with-core> shell=options.shell, clan-pytest-with-core> ), clan-pytest-with-core> ) clan-pytest-with-core> clan-pytest-with-core> if options.needs_user_terminal: clan-pytest-with-core> # we didn't allocate a new session, so we can't terminate the process group clan-pytest-with-core> stack.enter_context(terminate_process(process)) clan-pytest-with-core> else: clan-pytest-with-core> stack.enter_context(terminate_process_group(process)) clan-pytest-with-core> clan-pytest-with-core> input_bytes = options.input if isinstance(options.input, bytes) else None clan-pytest-with-core> clan-pytest-with-core> stdout_buf, stderr_buf, stdout_raw = handle_io( clan-pytest-with-core> process, clan-pytest-with-core> options.log, clan-pytest-with-core> prefix=options.prefix, clan-pytest-with-core> msg_color=options.msg_color, clan-pytest-with-core> timeout=options.timeout, clan-pytest-with-core> input_bytes=input_bytes, clan-pytest-with-core> stdout=options.stdout, clan-pytest-with-core> stderr=options.stderr, clan-pytest-with-core> cmd=cmd, clan-pytest-with-core> cwd=options.cwd, clan-pytest-with-core> env=options.env, clan-pytest-with-core> ) clan-pytest-with-core> if not is_async_cancelled(): clan-pytest-with-core> process.wait() clan-pytest-with-core> clan-pytest-with-core> if TIME_TABLE: clan-pytest-with-core> TIME_TABLE.add(shlex.join(cmd), timeit.default_timer() - start) clan-pytest-with-core> clan-pytest-with-core> # Wait for the subprocess to finish clan-pytest-with-core> cmd_out = CmdOut( clan-pytest-with-core> stdout=stdout_buf, clan-pytest-with-core> stderr=stderr_buf, clan-pytest-with-core> cwd=options.cwd, clan-pytest-with-core> env=options.env, clan-pytest-with-core> command_list=cmd, clan-pytest-with-core> returncode=process.returncode, clan-pytest-with-core> msg=options.error_msg, clan-pytest-with-core> stdout_raw=stdout_raw, clan-pytest-with-core> ) clan-pytest-with-core> clan-pytest-with-core> if cmdlog.isEnabledFor(logging.DEBUG) and options.trace: clan-pytest-with-core> print_trace( clan-pytest-with-core> f"Command exited with return code {process.returncode}", clan-pytest-with-core> cmdlog, clan-pytest-with-core> options.prefix, clan-pytest-with-core> ) clan-pytest-with-core> clan-pytest-with-core> if options.check and process.returncode != 0: clan-pytest-with-core> if is_async_cancelled(): clan-pytest-with-core> cmd_out.msg = "Command cancelled" clan-pytest-with-core> > raise ClanCmdError(cmd_out) clan-pytest-with-core> E clan_lib.errors.ClanCmdError: clan-pytest-with-core> E =================================== Command ==================================== clan-pytest-with-core> E nix \ clan-pytest-with-core> E --extra-experimental-features 'nix-command flakes' \ clan-pytest-with-core> E --option warn-dirty \ clan-pytest-with-core> E false \ clan-pytest-with-core> E build \ clan-pytest-with-core> E --flake-registry '' \ clan-pytest-with-core> E --print-out-paths --print-build-logs \ clan-pytest-with-core> E --show-trace --no-link \ clan-pytest-with-core> E --expr ' clan-pytest-with-core> E let clan-pytest-with-core> E flake = builtins.getFlake "path:/nix/store/9zfdd0g8ns6fxlyxy91d4yrxq31cv108-source?narHash=sha256-1IUTkttjqQTgmnLKSwxu9LplyOZPYx3b/GBjUEtluhM="; clan-pytest-with-core> E selectLib = ( clan-pytest-with-core> E builtins.getFlake clan-pytest-with-core> E "path:/nix/store/cba1x9mxnwr8b36cw41bya7g6d5v1p7d-source?narHash=sha256-yxcNOha7Cfv2nhVpz9ZXSNKk0R7wt4AiBklJ8D24rVg=" clan-pytest-with-core> E ).lib; clan-pytest-with-core> E in clan-pytest-with-core> E derivation { clan-pytest-with-core> E name = "clan-flake-select"; clan-pytest-with-core> E result = builtins.toJSON [ clan-pytest-with-core> E (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "maybe", "value": "age"}]'"'"''"'"') flake) clan-pytest-with-core> E ]; clan-pytest-with-core> E clan-pytest-with-core> E # We can always build this derivation locally, since /bin/sh is system independent, clan-pytest-with-core> E # remote builders would introduce needless overhead. clan-pytest-with-core> E preferLocalBuild = true; clan-pytest-with-core> E # Save the roundtrip to check the binary caches for trivial substitutions clan-pytest-with-core> E allowSubstitutes = false; clan-pytest-with-core> E clan-pytest-with-core> E passAsFile = [ "result" ]; clan-pytest-with-core> E system = "x86_64-linux"; clan-pytest-with-core> E builder = "/bin/sh"; clan-pytest-with-core> E args = [ clan-pytest-with-core> E "-c" clan-pytest-with-core> E '"'"''"'"' clan-pytest-with-core> E read -r x < "$resultPath"; printf %s "$x" > $out clan-pytest-with-core> E '"'"''"'"' clan-pytest-with-core> E ]; clan-pytest-with-core> E } clan-pytest-with-core> E ' clan-pytest-with-core> E clan-pytest-with-core> E ==================================== Stderr ==================================== clan-pytest-with-core> E warning: you don't have Internet access; disabling some network-dependent features clan-pytest-with-core> E error: clan-pytest-with-core> E … while calling the 'derivationStrict' builtin clan-pytest-with-core> E at :37:12: clan-pytest-with-core> E 36| clan-pytest-with-core> E 37| strict = derivationStrict drvAttrs; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 38| clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating derivation 'clan-flake-select' clan-pytest-with-core> E whose name attribute is located at «string»:10:17 clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating attribute 'result' of derivation 'clan-flake-select' clan-pytest-with-core> E at «string»:11:17: clan-pytest-with-core> E 10| name = "clan-flake-select"; clan-pytest-with-core> E 11| result = builtins.toJSON [ clan-pytest-with-core> E | ^ clan-pytest-with-core> E 12| (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "maybe", "value": "age"}]'') flake) clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'toJSON' builtin clan-pytest-with-core> E at «string»:11:26: clan-pytest-with-core> E 10| name = "clan-flake-select"; clan-pytest-with-core> E 11| result = builtins.toJSON [ clan-pytest-with-core> E | ^ clan-pytest-with-core> E 12| (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "maybe", "value": "age"}]'') flake) clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating list element at index 0 clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'getFlake' builtin clan-pytest-with-core> E at «string»:5:17: clan-pytest-with-core> E 4| selectLib = ( clan-pytest-with-core> E 5| builtins.getFlake clan-pytest-with-core> E | ^ clan-pytest-with-core> E 6| "path:/nix/store/cba1x9mxnwr8b36cw41bya7g6d5v1p7d-source?narHash=sha256-yxcNOha7Cfv2nhVpz9ZXSNKk0R7wt4AiBklJ8D24rVg=" clan-pytest-with-core> E clan-pytest-with-core> E … while fetching the input 'path:/nix/store/cba1x9mxnwr8b36cw41bya7g6d5v1p7d-source?narHash=sha256-yxcNOha7Cfv2nhVpz9ZXSNKk0R7wt4AiBklJ8D24rVg%3D' clan-pytest-with-core> E clan-pytest-with-core> E error: chmod "/nix/store/cba1x9mxnwr8b36cw41bya7g6d5v1p7d-source": Operation not permitted clan-pytest-with-core> E clan-pytest-with-core> E Return Code: 1 clan-pytest-with-core> clan-pytest-with-core> /build/src/clan_lib/cmd/__init__.py:451: ClanCmdError clan-pytest-with-core> clan-pytest-with-core> The above exception was the direct cause of the following exception: clan-pytest-with-core> clan-pytest-with-core> monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7fffe2567350> clan-pytest-with-core> flake = clan-pytest-with-core> age_keys = [KeyPair(pubkey='age1dhwqzkah943xzc34tc3dlmfayyevcmdmxzjezdgdy33euxwf59vsp3vk3c', privkey='AGE-SECRET-KEY-1KF8E3SR3TTG...z7jca7s00wyeg2nt3aqnvaks7p4jfr', privkey='AGE-SECRET-KEY-1Z89SHU9KAF709TTAZDARUWKC7H9TPZW4L8A2PVYSYAF7QVLCNQZQZ07U5J')] clan-pytest-with-core> clan-pytest-with-core> @pytest.mark.broken_on_darwin clan-pytest-with-core> @pytest.mark.with_core clan-pytest-with-core> @pytest.mark.usefixtures("clear_nix_cache", "mock_nix_in_sandbox") clan-pytest-with-core> def test_age_ensure_machine_key_provisions_age_keygen( clan-pytest-with-core> monkeypatch: pytest.MonkeyPatch, clan-pytest-with-core> flake: ClanFlake, clan-pytest-with-core> age_keys: list[KeyPair], clan-pytest-with-core> ) -> None: clan-pytest-with-core> """age-keygen must be provisioned through nix_shell. clan-pytest-with-core> clan-pytest-with-core> A bare ["age-keygen"] invocation only works when the binary happens to be clan-pytest-with-core> on PATH already, so machine keypair generation fails outside a devshell. clan-pytest-with-core> """ clan-pytest-with-core> flake_obj, _ = setup_age_flake(flake, monkeypatch, age_keys[0]) clan-pytest-with-core> store = age.SecretStore(flake=flake_obj) clan-pytest-with-core> clan-pytest-with-core> class KeygenReachedError(Exception): clan-pytest-with-core> """Abort ensure_machine_key once the keygen command is known.""" clan-pytest-with-core> clan-pytest-with-core> recorded: list[list[str]] = [] clan-pytest-with-core> clan-pytest-with-core> def record_cmd(cmd: list[str], _opts: object = None) -> None: clan-pytest-with-core> recorded.append(cmd) clan-pytest-with-core> raise KeygenReachedError clan-pytest-with-core> clan-pytest-with-core> monkeypatch.setattr(age, "cmd_run", record_cmd) clan-pytest-with-core> # nix_shell is a passthrough inside the sandbox, which would hide the bug clan-pytest-with-core> monkeypatch.delenv("IN_NIX_SANDBOX", raising=False) clan-pytest-with-core> monkeypatch.delenv("CLAN_PROVIDED_PACKAGES", raising=False) clan-pytest-with-core> clan-pytest-with-core> with pytest.raises(KeygenReachedError): clan-pytest-with-core> > store.ensure_machine_key("my_machine") clan-pytest-with-core> clan-pytest-with-core> /build/src/clan_cli/tests/test_vars_age.py:700: clan-pytest-with-core> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ clan-pytest-with-core> /build/src/clan_lib/vars/secret_modules/age.py:310: in ensure_machine_key clan-pytest-with-core> if self.machine_pubkey_file(machine).exists(): clan-pytest-with-core> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ clan-pytest-with-core> /build/src/clan_lib/vars/secret_modules/age.py:198: in machine_pubkey_file clan-pytest-with-core> return self.machine_key_dir(machine) / "pub" clan-pytest-with-core> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ clan-pytest-with-core> /build/src/clan_lib/vars/secret_modules/age.py:195: in machine_key_dir clan-pytest-with-core> return self.secrets_dir() / "age-keys" / "machines" / machine clan-pytest-with-core> ^^^^^^^^^^^^^^^^^^ clan-pytest-with-core> /build/src/clan_lib/vars/secret_modules/age.py:118: in secrets_dir clan-pytest-with-core> if not self._external_store(): clan-pytest-with-core> ^^^^^^^^^^^^^^^^^^^^^^ clan-pytest-with-core> /build/src/clan_lib/vars/secret_modules/age.py:108: in _external_store clan-pytest-with-core> result = self.flake.select(vars_settings_age()) clan-pytest-with-core> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ clan-pytest-with-core> /build/src/clan_lib/fixtures/nix_sandbox_mock.py:86: in mock_flake_select clan-pytest-with-core> return real_flake_select(self, selector) clan-pytest-with-core> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ clan-pytest-with-core> /build/src/clan_lib/flake/flake.py:1177: in select clan-pytest-with-core> self.get_from_nix([selector]) clan-pytest-with-core> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ clan-pytest-with-core> clan-pytest-with-core> self = Flake(identifier='/build/pytest-t7v77c82/flake', hash='sha256-1IUTkttjqQTgmnLKSwxu9LplyOZPYx3b/GBjUEtluhM=', store_pat...src/clan_lib/flake/flake.py", line 833, in _record_cache_miss\n stack_trace = "".join(traceback.format_stack())\n']) clan-pytest-with-core> selectors = ['clanInternals.vars.settings.?age'] clan-pytest-with-core> clan-pytest-with-core> def get_from_nix( clan-pytest-with-core> self, clan-pytest-with-core> selectors: list[str], clan-pytest-with-core> ) -> None: clan-pytest-with-core> """Retrieves specific attributes from a Nix flake using the provided selectors. clan-pytest-with-core> clan-pytest-with-core> This function interacts with the Nix build system to fetch and process clan-pytest-with-core> attributes from a flake. It uses the provided selectors to determine which clan-pytest-with-core> attributes to retrieve and optionally accepts additional Nix options for clan-pytest-with-core> customization. The results are cached for future use. clan-pytest-with-core> Used mostly as a lowlevel function for `precache` and `select` methods. clan-pytest-with-core> clan-pytest-with-core> Args: clan-pytest-with-core> selectors (list[str]): A list of attribute selectors to fetch from the flake. clan-pytest-with-core> nix_options (list[str] | None): Optional additional options to pass to the Nix build command. clan-pytest-with-core> clan-pytest-with-core> Raises: clan-pytest-with-core> ClanError: If the number of outputs does not match the number of selectors. clan-pytest-with-core> AssertionError: If the cache or flake cache path is not properly initialized. clan-pytest-with-core> clan-pytest-with-core> """ clan-pytest-with-core> if self._cache is None: clan-pytest-with-core> self.invalidate_cache() clan-pytest-with-core> if self._cache is None: clan-pytest-with-core> msg = "Cache cannot be None after invalidation" clan-pytest-with-core> raise ClanError(msg) clan-pytest-with-core> clan-pytest-with-core> nix_options = self.nix_options[:] if self.nix_options is not None else [] clan-pytest-with-core> clan-pytest-with-core> str_selectors = [ clan-pytest-with-core> selectors_as_json(parse_selector(selector)) for selector in selectors clan-pytest-with-core> ] clan-pytest-with-core> clan-pytest-with-core> config = nix_config() clan-pytest-with-core> clan-pytest-with-core> select_hash = "sha256-yxcNOha7Cfv2nhVpz9ZXSNKk0R7wt4AiBklJ8D24rVg=" clan-pytest-with-core> if not select_hash.startswith("sha256-"): clan-pytest-with-core> select_flake = Flake(str(select_source()), nix_options=nix_options) clan-pytest-with-core> select_flake.invalidate_cache() clan-pytest-with-core> if select_flake.hash is None: clan-pytest-with-core> msg = "this should be impossible as invalidate_cache() should always set `hash`" clan-pytest-with-core> raise ClanError(msg) clan-pytest-with-core> select_hash = select_flake.hash clan-pytest-with-core> clan-pytest-with-core> # fmt: off clan-pytest-with-core> nix_code = f""" clan-pytest-with-core> let clan-pytest-with-core> flake = builtins.getFlake "path:{self.store_path}?narHash={self.hash}"; clan-pytest-with-core> selectLib = ( clan-pytest-with-core> builtins.getFlake clan-pytest-with-core> "path:{select_source()}?narHash={select_hash}" clan-pytest-with-core> ).lib; clan-pytest-with-core> in clan-pytest-with-core> derivation {{ clan-pytest-with-core> name = "clan-flake-select"; clan-pytest-with-core> result = builtins.toJSON [ clan-pytest-with-core> {" ".join( clan-pytest-with-core> [ clan-pytest-with-core> f"(selectLib.applySelectors (builtins.fromJSON ''{attr}'') flake)" clan-pytest-with-core> for attr in str_selectors clan-pytest-with-core> ] clan-pytest-with-core> )} clan-pytest-with-core> ]; clan-pytest-with-core> clan-pytest-with-core> # We can always build this derivation locally, since /bin/sh is system independent, clan-pytest-with-core> # remote builders would introduce needless overhead. clan-pytest-with-core> preferLocalBuild = true; clan-pytest-with-core> # Save the roundtrip to check the binary caches for trivial substitutions clan-pytest-with-core> allowSubstitutes = false; clan-pytest-with-core> clan-pytest-with-core> passAsFile = [ "result" ]; clan-pytest-with-core> system = "{config["system"]}"; clan-pytest-with-core> builder = "/bin/sh"; clan-pytest-with-core> args = [ clan-pytest-with-core> "-c" clan-pytest-with-core> '' clan-pytest-with-core> read -r x < "$resultPath"; printf %s "$x" > $out clan-pytest-with-core> '' clan-pytest-with-core> ]; clan-pytest-with-core> }} clan-pytest-with-core> """ clan-pytest-with-core> trace = os.environ.get("CLAN_DEBUG_NIX_SELECTORS") == "1" clan-pytest-with-core> try: clan-pytest-with-core> build_output = Path( clan-pytest-with-core> run( clan-pytest-with-core> nix_build(["--expr", nix_code, *nix_options]), clan-pytest-with-core> RunOpts(log=Log.NONE, trace=trace), clan-pytest-with-core> ).stdout.strip(), clan-pytest-with-core> ) clan-pytest-with-core> except ClanCmdError as e: clan-pytest-with-core> if "error: attribute 'clan' missing" in str(e): clan-pytest-with-core> msg = ("This flake does not export the 'clan' attribute. \n" clan-pytest-with-core> "Please write 'clan = clan.config;' into the outputs of your flake.nix.") clan-pytest-with-core> raise ClanSelectError( clan-pytest-with-core> flake_identifier=self.identifier, clan-pytest-with-core> selectors=selectors, clan-pytest-with-core> cmd_error=e, clan-pytest-with-core> description=msg, clan-pytest-with-core> ) from e clan-pytest-with-core> clan-pytest-with-core> # If the error is about a missing attribute, we raise a ClanSelectError clan-pytest-with-core> # with the failed selectors and the flake identifier. clan-pytest-with-core> > raise ClanSelectError( clan-pytest-with-core> flake_identifier=self.identifier, clan-pytest-with-core> selectors=selectors, clan-pytest-with-core> cmd_error=e, clan-pytest-with-core> ) from e clan-pytest-with-core> E clan_lib.flake.flake.ClanSelectError: Error on: $ clan select 'clanInternals.vars.settings.?age' clan-pytest-with-core> E Reason: chmod "/nix/store/cba1x9mxnwr8b36cw41bya7g6d5v1p7d-source": Operation not permitted. Use flag '--debug' to see full nix trace. clan-pytest-with-core> clan-pytest-with-core> /build/src/clan_lib/flake/flake.py:1094: ClanSelectError clan-pytest-with-core> ---------------------------- Captured stdout setup ----------------------------- clan-pytest-with-core> Initialized empty Git repository in /build/minimal-flake-5l5xu10l/flake/.git/ clan-pytest-with-core> [main (root-commit) 33a4fbc] Initial commit clan-pytest-with-core> 2 files changed, 232 insertions(+) clan-pytest-with-core> create mode 100644 flake.lock clan-pytest-with-core> create mode 100644 flake.nix clan-pytest-with-core> ---------------------------- Captured stderr setup ----------------------------- clan-pytest-with-core> !! $HOME does not point to a temp directory!! HOME=/build clan-pytest-with-core> nix \ clan-pytest-with-core> --extra-experimental-features 'nix-command flakes' \ clan-pytest-with-core> --option warn-dirty \ clan-pytest-with-core> false \ clan-pytest-with-core> flake \ clan-pytest-with-core> lock \ clan-pytest-with-core> --store /build/store clan-pytest-with-core> Caller: ~/src/clan_cli/tests/fixtures_flakes.py:228::init_from_template clan-pytest-with-core> clan-pytest-with-core> warning: you don't have Internet access; disabling some network-dependent features clan-pytest-with-core> warning: creating lock file "/build/minimal-flake-5l5xu10l/flake/flake.lock": clan-pytest-with-core> • Added input 'clan-core': clan-pytest-with-core> 'path:/nix/store/c4gps8k2ky7ix7h6cgr1ss6pflxcsxmg-clan-core-flake?lastModified=1&narHash=sha256-QScCORw3VQpaM/OipHW3rTp5/HHgyMdOgyWzWhk/x3A%3D' (1970-01-01) clan-pytest-with-core> • Added input 'clan-core/data-mesher': clan-pytest-with-core> 'path:/nix/store/7wwgyad06yqss534l35aa977v7217wdg-source?lastModified=1&narHash=sha256-9OA/YV/4bUmgnd81j7Jjjr0LBzV67bgYno3jOx16jLM%3D' (1970-01-01) clan-pytest-with-core> • Added input 'clan-core/data-mesher/flake-parts': clan-pytest-with-core> follows 'clan-core/flake-parts' clan-pytest-with-core> • Added input 'clan-core/data-mesher/nixpkgs': clan-pytest-with-core> follows 'clan-core/nixpkgs' clan-pytest-with-core> • Added input 'clan-core/data-mesher/treefmt-nix': clan-pytest-with-core> follows 'clan-core/treefmt-nix' clan-pytest-with-core> • Added input 'clan-core/disko': clan-pytest-with-core> 'path:/nix/store/adcpmshidndclaz4dxjsgklrx3gqhaxp-source?lastModified=1&narHash=sha256-uZkBR7yHdIKUFB5SZdfgh1qkGfI3XmYmI/lTiquxbck%3D' (1970-01-01) clan-pytest-with-core> • Added input 'clan-core/disko/nixpkgs': clan-pytest-with-core> follows 'clan-core/nixpkgs' clan-pytest-with-core> • Added input 'clan-core/flake-parts': clan-pytest-with-core> 'path:/nix/store/6xr58mfvs42ixw6428x3vm9l5h88l2z7-source?lastModified=1&narHash=sha256-zTwuwezD0w3hpga6a6P8emidzAZFyWqlNeRBlpWOOl8%3D' (1970-01-01) clan-pytest-with-core> • Added input 'clan-core/flake-parts/nixpkgs-lib': clan-pytest-with-core> follows 'clan-core/nixpkgs' clan-pytest-with-core> • Added input 'clan-core/nix-darwin': clan-pytest-with-core> 'path:/nix/store/8ggr67sci43hlp8ba6rhjrdhhj5490am-source?lastModified=1&narHash=sha256-oQFip%2Bv0luP8NIxJzmiW4Wu8bILsbFWom5l0zonl8hQ%3D' (1970-01-01) clan-pytest-with-core> • Added input 'clan-core/nix-darwin/nixpkgs': clan-pytest-with-core> follows 'clan-core/nixpkgs' clan-pytest-with-core> • Added input 'clan-core/nix-select': clan-pytest-with-core> 'path:/nix/store/cba1x9mxnwr8b36cw41bya7g6d5v1p7d-source?lastModified=1&narHash=sha256-yxcNOha7Cfv2nhVpz9ZXSNKk0R7wt4AiBklJ8D24rVg%3D' (1970-01-01) clan-pytest-with-core> • Added input 'clan-core/nixpkgs': clan-pytest-with-core> 'path:/nix/store/vlhb7haagkjabf20g1vg9kxi53fcpi17-source?lastModified=0&narHash=sha256-R4B%2BRRYmze9htmPZ8xeF19mchTSH99GdaqanKCW8CF8%3D' (1970-01-01) clan-pytest-with-core> • Added input 'clan-core/sops-nix': clan-pytest-with-core> 'path:/nix/store/0w8jfjkpbh7z0v22mwp2dsxmv14j7lwn-source?lastModified=1&narHash=sha256-nFxM%2BpKoZ8LJAEnUXARyCaOAloWgaW9kZQOSjWzKcTE%3D' (1970-01-01) clan-pytest-with-core> • Added input 'clan-core/sops-nix/nixpkgs': clan-pytest-with-core> follows 'clan-core/nixpkgs' clan-pytest-with-core> • Added input 'clan-core/systems': clan-pytest-with-core> 'path:/nix/store/3wgddllhk35g2vr8ybjczx2lkqnrsjw5-source?lastModified=1&narHash=sha256-uuanbkFk8a313Zfrxdcz8Us/yQtaxNnKJtX8v0ZPpd8%3D' (1970-01-01) clan-pytest-with-core> • Added input 'clan-core/treefmt-nix': clan-pytest-with-core> 'path:/nix/store/i1brh5cz5nli5dzvy4mbvpbwnh908xza-source?lastModified=1&narHash=sha256-vuzVwvjeucSnwKwMBpyP8r5IzdrMKCHEdwTrRFwUN7I%3D' (1970-01-01) clan-pytest-with-core> • Added input 'clan-core/treefmt-nix/nixpkgs': clan-pytest-with-core> follows 'clan-core/nixpkgs' clan-pytest-with-core> • Added input 'nixpkgs': clan-pytest-with-core> follows 'clan-core/nixpkgs' clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: ~/src/clan_cli/tests/fixtures_flakes.py:228::init_from_template clan-pytest-with-core> clan-pytest-with-core> !! $HOME does not point to a temp directory!! HOME=/build/pytest-t7v77c82 clan-pytest-with-core> ------------------------------ Captured log setup ------------------------------ clan-pytest-with-core> WARNING clan_cli.tests.fixtures_flakes:fixtures_flakes.py:193 !! $HOME does not point to a temp directory!! HOME=/build clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:147 nix \ clan-pytest-with-core> --extra-experimental-features 'nix-command flakes' \ clan-pytest-with-core> --option warn-dirty \ clan-pytest-with-core> false \ clan-pytest-with-core> flake \ clan-pytest-with-core> lock \ clan-pytest-with-core> --store /build/store clan-pytest-with-core> Caller: ~/src/clan_cli/tests/fixtures_flakes.py:228::init_from_template clan-pytest-with-core> clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 warning: you don't have Internet access; disabling some network-dependent features clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 warning: creating lock file "/build/minimal-flake-5l5xu10l/flake/flake.lock": clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 • Added input 'clan-core': clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 'path:/nix/store/c4gps8k2ky7ix7h6cgr1ss6pflxcsxmg-clan-core-flake?lastModified=1&narHash=sha256-QScCORw3VQpaM/OipHW3rTp5/HHgyMdOgyWzWhk/x3A%3D' (1970-01-01) clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 • Added input 'clan-core/data-mesher': clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 'path:/nix/store/7wwgyad06yqss534l35aa977v7217wdg-source?lastModified=1&narHash=sha256-9OA/YV/4bUmgnd81j7Jjjr0LBzV67bgYno3jOx16jLM%3D' (1970-01-01) clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 • Added input 'clan-core/data-mesher/flake-parts': clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 follows 'clan-core/flake-parts' clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 • Added input 'clan-core/data-mesher/nixpkgs': clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 follows 'clan-core/nixpkgs' clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 • Added input 'clan-core/data-mesher/treefmt-nix': clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 follows 'clan-core/treefmt-nix' clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 • Added input 'clan-core/disko': clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 'path:/nix/store/adcpmshidndclaz4dxjsgklrx3gqhaxp-source?lastModified=1&narHash=sha256-uZkBR7yHdIKUFB5SZdfgh1qkGfI3XmYmI/lTiquxbck%3D' (1970-01-01) clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 • Added input 'clan-core/disko/nixpkgs': clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 follows 'clan-core/nixpkgs' clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 • Added input 'clan-core/flake-parts': clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 'path:/nix/store/6xr58mfvs42ixw6428x3vm9l5h88l2z7-source?lastModified=1&narHash=sha256-zTwuwezD0w3hpga6a6P8emidzAZFyWqlNeRBlpWOOl8%3D' (1970-01-01) clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 • Added input 'clan-core/flake-parts/nixpkgs-lib': clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 follows 'clan-core/nixpkgs' clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 • Added input 'clan-core/nix-darwin': clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 'path:/nix/store/8ggr67sci43hlp8ba6rhjrdhhj5490am-source?lastModified=1&narHash=sha256-oQFip%2Bv0luP8NIxJzmiW4Wu8bILsbFWom5l0zonl8hQ%3D' (1970-01-01) clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 • Added input 'clan-core/nix-darwin/nixpkgs': clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 follows 'clan-core/nixpkgs' clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 • Added input 'clan-core/nix-select': clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 'path:/nix/store/cba1x9mxnwr8b36cw41bya7g6d5v1p7d-source?lastModified=1&narHash=sha256-yxcNOha7Cfv2nhVpz9ZXSNKk0R7wt4AiBklJ8D24rVg%3D' (1970-01-01) clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 • Added input 'clan-core/nixpkgs': clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 'path:/nix/store/vlhb7haagkjabf20g1vg9kxi53fcpi17-source?lastModified=0&narHash=sha256-R4B%2BRRYmze9htmPZ8xeF19mchTSH99GdaqanKCW8CF8%3D' (1970-01-01) clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 • Added input 'clan-core/sops-nix': clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 'path:/nix/store/0w8jfjkpbh7z0v22mwp2dsxmv14j7lwn-source?lastModified=1&narHash=sha256-nFxM%2BpKoZ8LJAEnUXARyCaOAloWgaW9kZQOSjWzKcTE%3D' (1970-01-01) clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 • Added input 'clan-core/sops-nix/nixpkgs': clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 follows 'clan-core/nixpkgs' clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 • Added input 'clan-core/systems': clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 'path:/nix/store/3wgddllhk35g2vr8ybjczx2lkqnrsjw5-source?lastModified=1&narHash=sha256-uuanbkFk8a313Zfrxdcz8Us/yQtaxNnKJtX8v0ZPpd8%3D' (1970-01-01) clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 • Added input 'clan-core/treefmt-nix': clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 'path:/nix/store/i1brh5cz5nli5dzvy4mbvpbwnh908xza-source?lastModified=1&narHash=sha256-vuzVwvjeucSnwKwMBpyP8r5IzdrMKCHEdwTrRFwUN7I%3D' (1970-01-01) clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 • Added input 'clan-core/treefmt-nix/nixpkgs': clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 follows 'clan-core/nixpkgs' clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 • Added input 'nixpkgs': clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 follows 'clan-core/nixpkgs' clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:147 Command exited with return code 0 clan-pytest-with-core> Caller: ~/src/clan_cli/tests/fixtures_flakes.py:228::init_from_template clan-pytest-with-core> clan-pytest-with-core> WARNING clan_cli.tests.fixtures_flakes:fixtures_flakes.py:193 !! $HOME does not point to a temp directory!! HOME=/build/pytest-t7v77c82 clan-pytest-with-core> ----------------------------- Captured stdout call ----------------------------- clan-pytest-with-core> [main 0ceb4d3] flake: update by flake generator clan-pytest-with-core> 2 files changed, 27 insertions(+) clan-pytest-with-core> create mode 100644 machines/my_machine/configuration.json clan-pytest-with-core> create mode 100644 machines/my_machine/configuration.nix clan-pytest-with-core> [main 43db1c7] setup age backend clan-pytest-with-core> 2 files changed, 4 insertions(+) clan-pytest-with-core> create mode 100644 .age/key.txt clan-pytest-with-core> create mode 100644 clan.nix clan-pytest-with-core> ----------------------------- Captured stderr call ----------------------------- clan-pytest-with-core> Prefetching flake /build/pytest-t7v77c82/flake clan-pytest-with-core> warning: you don't have Internet access; disabling some network-dependent features clan-pytest-with-core> Loading flake cache from file /build/clan-flake-cache/flakes-v2/4ff065b6332ef9c243918f8ff6e7a2633d9cffae clan-pytest-with-core> (cached) $ clan select clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> Prefetching flake /build/pytest-t7v77c82/flake clan-pytest-with-core> warning: you don't have Internet access; disabling some network-dependent features clan-pytest-with-core> Loading flake cache from file /build/clan-flake-cache/flakes-v2/2e2fd99a73e8a4def0630a2a827aff3ef3d1992f clan-pytest-with-core> (cached) $ clan select clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> Cache miss for clanInternals.vars.settings.?age clan-pytest-with-core> ------------------------------ Captured log call ------------------------------- clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:927 Prefetching flake /build/pytest-t7v77c82/flake clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 warning: you don't have Internet access; disabling some network-dependent features clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:789 Loading flake cache from file /build/clan-flake-cache/flakes-v2/4ff065b6332ef9c243918f8ff6e7a2633d9cffae clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1179 (cached) $ clan select clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:927 Prefetching flake /build/pytest-t7v77c82/flake clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 warning: you don't have Internet access; disabling some network-dependent features clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:789 Loading flake cache from file /build/clan-flake-cache/flakes-v2/2e2fd99a73e8a4def0630a2a827aff3ef3d1992f clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1179 (cached) $ clan select clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1174 Cache miss for clanInternals.vars.settings.?age clan-pytest-with-core> ________________________ test_create_flake_existing_git ________________________ clan-pytest-with-core> [gw13] linux -- Python 3.14.7 /nix/store/lb41b0anx1f98y9y5s9mdv97gjgsq740-python3-3.14.7/bin/python clan-pytest-with-core> clan-pytest-with-core> self = Flake(identifier='/build/pytest-a0v350kw/test-flake', hash='sha256-RglEqKfi/DQj/faY7359kgpQaBymLv7TdT52qXcQGB4=', stor...src/clan_lib/flake/flake.py", line 833, in _record_cache_miss\n stack_trace = "".join(traceback.format_stack())\n']) clan-pytest-with-core> selectors = ['clanInternals.vars.settings.secretStore'] clan-pytest-with-core> clan-pytest-with-core> def get_from_nix( clan-pytest-with-core> self, clan-pytest-with-core> selectors: list[str], clan-pytest-with-core> ) -> None: clan-pytest-with-core> """Retrieves specific attributes from a Nix flake using the provided selectors. clan-pytest-with-core> clan-pytest-with-core> This function interacts with the Nix build system to fetch and process clan-pytest-with-core> attributes from a flake. It uses the provided selectors to determine which clan-pytest-with-core> attributes to retrieve and optionally accepts additional Nix options for clan-pytest-with-core> customization. The results are cached for future use. clan-pytest-with-core> Used mostly as a lowlevel function for `precache` and `select` methods. clan-pytest-with-core> clan-pytest-with-core> Args: clan-pytest-with-core> selectors (list[str]): A list of attribute selectors to fetch from the flake. clan-pytest-with-core> nix_options (list[str] | None): Optional additional options to pass to the Nix build command. clan-pytest-with-core> clan-pytest-with-core> Raises: clan-pytest-with-core> ClanError: If the number of outputs does not match the number of selectors. clan-pytest-with-core> AssertionError: If the cache or flake cache path is not properly initialized. clan-pytest-with-core> clan-pytest-with-core> """ clan-pytest-with-core> if self._cache is None: clan-pytest-with-core> self.invalidate_cache() clan-pytest-with-core> if self._cache is None: clan-pytest-with-core> msg = "Cache cannot be None after invalidation" clan-pytest-with-core> raise ClanError(msg) clan-pytest-with-core> clan-pytest-with-core> nix_options = self.nix_options[:] if self.nix_options is not None else [] clan-pytest-with-core> clan-pytest-with-core> str_selectors = [ clan-pytest-with-core> selectors_as_json(parse_selector(selector)) for selector in selectors clan-pytest-with-core> ] clan-pytest-with-core> clan-pytest-with-core> config = nix_config() clan-pytest-with-core> clan-pytest-with-core> select_hash = "sha256-yxcNOha7Cfv2nhVpz9ZXSNKk0R7wt4AiBklJ8D24rVg=" clan-pytest-with-core> if not select_hash.startswith("sha256-"): clan-pytest-with-core> select_flake = Flake(str(select_source()), nix_options=nix_options) clan-pytest-with-core> select_flake.invalidate_cache() clan-pytest-with-core> if select_flake.hash is None: clan-pytest-with-core> msg = "this should be impossible as invalidate_cache() should always set `hash`" clan-pytest-with-core> raise ClanError(msg) clan-pytest-with-core> select_hash = select_flake.hash clan-pytest-with-core> clan-pytest-with-core> # fmt: off clan-pytest-with-core> nix_code = f""" clan-pytest-with-core> let clan-pytest-with-core> flake = builtins.getFlake "path:{self.store_path}?narHash={self.hash}"; clan-pytest-with-core> selectLib = ( clan-pytest-with-core> builtins.getFlake clan-pytest-with-core> "path:{select_source()}?narHash={select_hash}" clan-pytest-with-core> ).lib; clan-pytest-with-core> in clan-pytest-with-core> derivation {{ clan-pytest-with-core> name = "clan-flake-select"; clan-pytest-with-core> result = builtins.toJSON [ clan-pytest-with-core> {" ".join( clan-pytest-with-core> [ clan-pytest-with-core> f"(selectLib.applySelectors (builtins.fromJSON ''{attr}'') flake)" clan-pytest-with-core> for attr in str_selectors clan-pytest-with-core> ] clan-pytest-with-core> )} clan-pytest-with-core> ]; clan-pytest-with-core> clan-pytest-with-core> # We can always build this derivation locally, since /bin/sh is system independent, clan-pytest-with-core> # remote builders would introduce needless overhead. clan-pytest-with-core> preferLocalBuild = true; clan-pytest-with-core> # Save the roundtrip to check the binary caches for trivial substitutions clan-pytest-with-core> allowSubstitutes = false; clan-pytest-with-core> clan-pytest-with-core> passAsFile = [ "result" ]; clan-pytest-with-core> system = "{config["system"]}"; clan-pytest-with-core> builder = "/bin/sh"; clan-pytest-with-core> args = [ clan-pytest-with-core> "-c" clan-pytest-with-core> '' clan-pytest-with-core> read -r x < "$resultPath"; printf %s "$x" > $out clan-pytest-with-core> '' clan-pytest-with-core> ]; clan-pytest-with-core> }} clan-pytest-with-core> """ clan-pytest-with-core> trace = os.environ.get("CLAN_DEBUG_NIX_SELECTORS") == "1" clan-pytest-with-core> try: clan-pytest-with-core> build_output = Path( clan-pytest-with-core> > run( clan-pytest-with-core> nix_build(["--expr", nix_code, *nix_options]), clan-pytest-with-core> RunOpts(log=Log.NONE, trace=trace), clan-pytest-with-core> ).stdout.strip(), clan-pytest-with-core> ) clan-pytest-with-core> clan-pytest-with-core> /build/src/clan_lib/flake/flake.py:1076: clan-pytest-with-core> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ clan-pytest-with-core> clan-pytest-with-core> cmd = ['nix', '--extra-experimental-features', 'nix-command flakes', '--option', 'warn-dirty', 'false', ...] clan-pytest-with-core> options = RunOpts(input=None, stdout=None, stderr=None, env=None, cwd=PosixPath('/build/pytest-a0v350kw'), log=, pr...al=False, timeout=inf, shell=False, requires_root_perm=False, graphical_perm=False, trace=False, sensitive_input=False) clan-pytest-with-core> clan-pytest-with-core> def run( clan-pytest-with-core> cmd: list[str], clan-pytest-with-core> options: RunOpts | None = None, clan-pytest-with-core> ) -> CmdOut: clan-pytest-with-core> if options is None: clan-pytest-with-core> options = RunOpts() clan-pytest-with-core> if options.cwd is None: clan-pytest-with-core> options.cwd = Path.cwd() clan-pytest-with-core> clan-pytest-with-core> async_ctx = get_async_ctx() clan-pytest-with-core> # Fill in the options from the thread-local data clan-pytest-with-core> # if they are not set in the options clan-pytest-with-core> if async_ctx: clan-pytest-with-core> if options.prefix is None: clan-pytest-with-core> options.prefix = async_ctx.prefix clan-pytest-with-core> if options.stdout is None: clan-pytest-with-core> options.stdout = async_ctx.stdout clan-pytest-with-core> if options.stderr is None: clan-pytest-with-core> options.stderr = async_ctx.stderr clan-pytest-with-core> clan-pytest-with-core> if options.requires_root_perm: clan-pytest-with-core> cmd = cmd_with_root(cmd, options.graphical_perm) clan-pytest-with-core> # Use our sudo ask proxy here as well clan-pytest-with-core> options.needs_user_terminal = True clan-pytest-with-core> clan-pytest-with-core> if cmdlog.isEnabledFor(logging.DEBUG) and options.trace: clan-pytest-with-core> if options.input and isinstance(options.input, bytes): clan-pytest-with-core> # Always redact sensitive input (e.g., private keys, passwords) clan-pytest-with-core> if options.sensitive_input: clan-pytest-with-core> filtered_input = "<>" clan-pytest-with-core> elif any( clan-pytest-with-core> not ch.isprintable() for ch in options.input.decode("ascii", "replace") clan-pytest-with-core> ): clan-pytest-with-core> filtered_input = "<>" clan-pytest-with-core> else: clan-pytest-with-core> filtered_input = options.input.decode("ascii", "replace") clan-pytest-with-core> clan-pytest-with-core> print_trace( clan-pytest-with-core> f"echo '{filtered_input}' | {indent_command(cmd)}", clan-pytest-with-core> cmdlog, clan-pytest-with-core> options.prefix, clan-pytest-with-core> ) clan-pytest-with-core> else: clan-pytest-with-core> print_trace(f"{indent_command(cmd)}", cmdlog, options.prefix) clan-pytest-with-core> clan-pytest-with-core> start = timeit.default_timer() clan-pytest-with-core> with ExitStack() as stack: clan-pytest-with-core> stdin = subprocess.PIPE if isinstance(options.input, bytes) else options.input clan-pytest-with-core> process = stack.enter_context( clan-pytest-with-core> subprocess.Popen( clan-pytest-with-core> cmd, clan-pytest-with-core> cwd=str(options.cwd), clan-pytest-with-core> env=options.env, clan-pytest-with-core> stdin=stdin, clan-pytest-with-core> stdout=subprocess.PIPE, clan-pytest-with-core> stderr=subprocess.PIPE, clan-pytest-with-core> start_new_session=not options.needs_user_terminal, clan-pytest-with-core> shell=options.shell, clan-pytest-with-core> ), clan-pytest-with-core> ) clan-pytest-with-core> clan-pytest-with-core> if options.needs_user_terminal: clan-pytest-with-core> # we didn't allocate a new session, so we can't terminate the process group clan-pytest-with-core> stack.enter_context(terminate_process(process)) clan-pytest-with-core> else: clan-pytest-with-core> stack.enter_context(terminate_process_group(process)) clan-pytest-with-core> clan-pytest-with-core> input_bytes = options.input if isinstance(options.input, bytes) else None clan-pytest-with-core> clan-pytest-with-core> stdout_buf, stderr_buf, stdout_raw = handle_io( clan-pytest-with-core> process, clan-pytest-with-core> options.log, clan-pytest-with-core> prefix=options.prefix, clan-pytest-with-core> msg_color=options.msg_color, clan-pytest-with-core> timeout=options.timeout, clan-pytest-with-core> input_bytes=input_bytes, clan-pytest-with-core> stdout=options.stdout, clan-pytest-with-core> stderr=options.stderr, clan-pytest-with-core> cmd=cmd, clan-pytest-with-core> cwd=options.cwd, clan-pytest-with-core> env=options.env, clan-pytest-with-core> ) clan-pytest-with-core> if not is_async_cancelled(): clan-pytest-with-core> process.wait() clan-pytest-with-core> clan-pytest-with-core> if TIME_TABLE: clan-pytest-with-core> TIME_TABLE.add(shlex.join(cmd), timeit.default_timer() - start) clan-pytest-with-core> clan-pytest-with-core> # Wait for the subprocess to finish clan-pytest-with-core> cmd_out = CmdOut( clan-pytest-with-core> stdout=stdout_buf, clan-pytest-with-core> stderr=stderr_buf, clan-pytest-with-core> cwd=options.cwd, clan-pytest-with-core> env=options.env, clan-pytest-with-core> command_list=cmd, clan-pytest-with-core> returncode=process.returncode, clan-pytest-with-core> msg=options.error_msg, clan-pytest-with-core> stdout_raw=stdout_raw, clan-pytest-with-core> ) clan-pytest-with-core> clan-pytest-with-core> if cmdlog.isEnabledFor(logging.DEBUG) and options.trace: clan-pytest-with-core> print_trace( clan-pytest-with-core> f"Command exited with return code {process.returncode}", clan-pytest-with-core> cmdlog, clan-pytest-with-core> options.prefix, clan-pytest-with-core> ) clan-pytest-with-core> clan-pytest-with-core> if options.check and process.returncode != 0: clan-pytest-with-core> if is_async_cancelled(): clan-pytest-with-core> cmd_out.msg = "Command cancelled" clan-pytest-with-core> > raise ClanCmdError(cmd_out) clan-pytest-with-core> E clan_lib.errors.ClanCmdError: clan-pytest-with-core> E =================================== Command ==================================== clan-pytest-with-core> E nix \ clan-pytest-with-core> E --extra-experimental-features 'nix-command flakes' \ clan-pytest-with-core> E --option warn-dirty \ clan-pytest-with-core> E false \ clan-pytest-with-core> E build \ clan-pytest-with-core> E --flake-registry '' \ clan-pytest-with-core> E --print-out-paths --print-build-logs \ clan-pytest-with-core> E --show-trace --no-link \ clan-pytest-with-core> E --expr ' clan-pytest-with-core> E let clan-pytest-with-core> E flake = builtins.getFlake "path:/nix/store/0wza2isg1m2pkg0228ank9ic2h3d9ng3-source?narHash=sha256-RglEqKfi/DQj/faY7359kgpQaBymLv7TdT52qXcQGB4="; clan-pytest-with-core> E selectLib = ( clan-pytest-with-core> E builtins.getFlake clan-pytest-with-core> E "path:/nix/store/cba1x9mxnwr8b36cw41bya7g6d5v1p7d-source?narHash=sha256-yxcNOha7Cfv2nhVpz9ZXSNKk0R7wt4AiBklJ8D24rVg=" clan-pytest-with-core> E ).lib; clan-pytest-with-core> E in clan-pytest-with-core> E derivation { clan-pytest-with-core> E name = "clan-flake-select"; clan-pytest-with-core> E result = builtins.toJSON [ clan-pytest-with-core> E (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "secretStore"}]'"'"''"'"') flake) clan-pytest-with-core> E ]; clan-pytest-with-core> E clan-pytest-with-core> E # We can always build this derivation locally, since /bin/sh is system independent, clan-pytest-with-core> E # remote builders would introduce needless overhead. clan-pytest-with-core> E preferLocalBuild = true; clan-pytest-with-core> E # Save the roundtrip to check the binary caches for trivial substitutions clan-pytest-with-core> E allowSubstitutes = false; clan-pytest-with-core> E clan-pytest-with-core> E passAsFile = [ "result" ]; clan-pytest-with-core> E system = "x86_64-linux"; clan-pytest-with-core> E builder = "/bin/sh"; clan-pytest-with-core> E args = [ clan-pytest-with-core> E "-c" clan-pytest-with-core> E '"'"''"'"' clan-pytest-with-core> E read -r x < "$resultPath"; printf %s "$x" > $out clan-pytest-with-core> E '"'"''"'"' clan-pytest-with-core> E ]; clan-pytest-with-core> E } clan-pytest-with-core> E ' \ clan-pytest-with-core> E --store /build/store clan-pytest-with-core> E clan-pytest-with-core> E ==================================== Stderr ==================================== clan-pytest-with-core> E warning: you don't have Internet access; disabling some network-dependent features clan-pytest-with-core> E error: clan-pytest-with-core> E … while calling the 'derivationStrict' builtin clan-pytest-with-core> E at :37:12: clan-pytest-with-core> E 36| clan-pytest-with-core> E 37| strict = derivationStrict drvAttrs; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 38| clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating derivation 'clan-flake-select' clan-pytest-with-core> E whose name attribute is located at «string»:10:17 clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating attribute 'result' of derivation 'clan-flake-select' clan-pytest-with-core> E at «string»:11:17: clan-pytest-with-core> E 10| name = "clan-flake-select"; clan-pytest-with-core> E 11| result = builtins.toJSON [ clan-pytest-with-core> E | ^ clan-pytest-with-core> E 12| (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "secretStore"}]'') flake) clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'toJSON' builtin clan-pytest-with-core> E at «string»:11:26: clan-pytest-with-core> E 10| name = "clan-flake-select"; clan-pytest-with-core> E 11| result = builtins.toJSON [ clan-pytest-with-core> E | ^ clan-pytest-with-core> E 12| (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "secretStore"}]'') flake) clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating list element at index 0 clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at «string»:12:22: clan-pytest-with-core> E 11| result = builtins.toJSON [ clan-pytest-with-core> E 12| (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "secretStore"}]'') flake) clan-pytest-with-core> E | ^ clan-pytest-with-core> E 13| ]; clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'applySelectors' clan-pytest-with-core> E at /build/store/nix/store/cba1x9mxnwr8b36cw41bya7g6d5v1p7d-source/select.nix:262:16: clan-pytest-with-core> E 261| applySelectors = clan-pytest-with-core> E 262| selectors: obj: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 263| let clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/cba1x9mxnwr8b36cw41bya7g6d5v1p7d-source/select.nix:352:5: clan-pytest-with-core> E 351| in clan-pytest-with-core> E 352| recurse selectors 0 obj; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 353| clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'recurse' clan-pytest-with-core> E at /build/store/nix/store/cba1x9mxnwr8b36cw41bya7g6d5v1p7d-source/select.nix:265:25: clan-pytest-with-core> E 264| recurse = clan-pytest-with-core> E 265| selectors: idx: obj: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 266| # we are done clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating a branch condition clan-pytest-with-core> E at /build/store/nix/store/cba1x9mxnwr8b36cw41bya7g6d5v1p7d-source/select.nix:281:11: clan-pytest-with-core> E 280| # lists clan-pytest-with-core> E 281| if builtins.isList obj then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 282| if selector.type == "all" then clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'isList' builtin clan-pytest-with-core> E at /build/store/nix/store/cba1x9mxnwr8b36cw41bya7g6d5v1p7d-source/select.nix:281:14: clan-pytest-with-core> E 280| # lists clan-pytest-with-core> E 281| if builtins.isList obj then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 282| if selector.type == "all" then clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'getFlake' builtin clan-pytest-with-core> E at «string»:3:23: clan-pytest-with-core> E 2| let clan-pytest-with-core> E 3| flake = builtins.getFlake "path:/nix/store/0wza2isg1m2pkg0228ank9ic2h3d9ng3-source?narHash=sha256-RglEqKfi/DQj/faY7359kgpQaBymLv7TdT52qXcQGB4="; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 4| selectLib = ( clan-pytest-with-core> E clan-pytest-with-core> E … while updating the lock file of flake 'path:/nix/store/0wza2isg1m2pkg0228ank9ic2h3d9ng3-source?lastModified=0&narHash=sha256-RglEqKfi/DQj/faY7359kgpQaBymLv7TdT52qXcQGB4%3D' clan-pytest-with-core> E clan-pytest-with-core> E … while updating the flake input 'clan-core' clan-pytest-with-core> E clan-pytest-with-core> E error: cannot update unlocked flake input 'clan-core' in pure mode clan-pytest-with-core> E clan-pytest-with-core> E Return Code: 1 clan-pytest-with-core> clan-pytest-with-core> /build/src/clan_lib/cmd/__init__.py:451: ClanCmdError clan-pytest-with-core> clan-pytest-with-core> The above exception was the direct cause of the following exception: clan-pytest-with-core> clan-pytest-with-core> monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7fffe1709e50> clan-pytest-with-core> temporary_home = PosixPath('/build/pytest-a0v350kw') clan-pytest-with-core> clan_core = PosixPath('/nix/store/c4gps8k2ky7ix7h6cgr1ss6pflxcsxmg-clan-core-flake') clan-pytest-with-core> capture_output = clan-pytest-with-core> patch_get_clan_details = .get_clan_details at 0x7fffe2321e80> clan-pytest-with-core> clan-pytest-with-core> @pytest.mark.broken_on_darwin clan-pytest-with-core> @pytest.mark.with_core clan-pytest-with-core> def test_create_flake_existing_git( clan-pytest-with-core> monkeypatch: pytest.MonkeyPatch, clan-pytest-with-core> temporary_home: Path, clan-pytest-with-core> clan_core: Path, clan-pytest-with-core> capture_output: CaptureOutput, clan-pytest-with-core> patch_get_clan_details: Any, # noqa: ARG001 clan-pytest-with-core> ) -> None: clan-pytest-with-core> flake_dir = temporary_home / "test-flake" clan-pytest-with-core> clan-pytest-with-core> run(["git", "init", str(temporary_home)]) clan-pytest-with-core> clan-pytest-with-core> monkeypatch.setenv("LOGNAME", "testuser") clan-pytest-with-core> > cli.run( clan-pytest-with-core> [ clan-pytest-with-core> "init", clan-pytest-with-core> str(flake_dir), clan-pytest-with-core> "--template=default", clan-pytest-with-core> "--no-update", clan-pytest-with-core> "--no-interactive", clan-pytest-with-core> ] clan-pytest-with-core> ) clan-pytest-with-core> clan-pytest-with-core> /build/src/clan_cli/tests/test_create_flake.py:84: clan-pytest-with-core> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ clan-pytest-with-core> /build/src/clan_cli/tests/helpers/cli.py:22: in run clan-pytest-with-core> parsed.func(parsed) clan-pytest-with-core> /build/src/clan_cli/init.py:54: in init_command clan-pytest-with-core> register_admin_keys( clan-pytest-with-core> /build/src/clan_cli/vars/keygen.py:89: in register_admin_keys clan-pytest-with-core> backend = Flake(str(flake_dir)).select(vars_settings_secret_store()) clan-pytest-with-core> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ clan-pytest-with-core> /build/src/clan_lib/flake/flake.py:1177: in select clan-pytest-with-core> self.get_from_nix([selector]) clan-pytest-with-core> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ clan-pytest-with-core> clan-pytest-with-core> self = Flake(identifier='/build/pytest-a0v350kw/test-flake', hash='sha256-RglEqKfi/DQj/faY7359kgpQaBymLv7TdT52qXcQGB4=', stor...src/clan_lib/flake/flake.py", line 833, in _record_cache_miss\n stack_trace = "".join(traceback.format_stack())\n']) clan-pytest-with-core> selectors = ['clanInternals.vars.settings.secretStore'] clan-pytest-with-core> clan-pytest-with-core> def get_from_nix( clan-pytest-with-core> self, clan-pytest-with-core> selectors: list[str], clan-pytest-with-core> ) -> None: clan-pytest-with-core> """Retrieves specific attributes from a Nix flake using the provided selectors. clan-pytest-with-core> clan-pytest-with-core> This function interacts with the Nix build system to fetch and process clan-pytest-with-core> attributes from a flake. It uses the provided selectors to determine which clan-pytest-with-core> attributes to retrieve and optionally accepts additional Nix options for clan-pytest-with-core> customization. The results are cached for future use. clan-pytest-with-core> Used mostly as a lowlevel function for `precache` and `select` methods. clan-pytest-with-core> clan-pytest-with-core> Args: clan-pytest-with-core> selectors (list[str]): A list of attribute selectors to fetch from the flake. clan-pytest-with-core> nix_options (list[str] | None): Optional additional options to pass to the Nix build command. clan-pytest-with-core> clan-pytest-with-core> Raises: clan-pytest-with-core> ClanError: If the number of outputs does not match the number of selectors. clan-pytest-with-core> AssertionError: If the cache or flake cache path is not properly initialized. clan-pytest-with-core> clan-pytest-with-core> """ clan-pytest-with-core> if self._cache is None: clan-pytest-with-core> self.invalidate_cache() clan-pytest-with-core> if self._cache is None: clan-pytest-with-core> msg = "Cache cannot be None after invalidation" clan-pytest-with-core> raise ClanError(msg) clan-pytest-with-core> clan-pytest-with-core> nix_options = self.nix_options[:] if self.nix_options is not None else [] clan-pytest-with-core> clan-pytest-with-core> str_selectors = [ clan-pytest-with-core> selectors_as_json(parse_selector(selector)) for selector in selectors clan-pytest-with-core> ] clan-pytest-with-core> clan-pytest-with-core> config = nix_config() clan-pytest-with-core> clan-pytest-with-core> select_hash = "sha256-yxcNOha7Cfv2nhVpz9ZXSNKk0R7wt4AiBklJ8D24rVg=" clan-pytest-with-core> if not select_hash.startswith("sha256-"): clan-pytest-with-core> select_flake = Flake(str(select_source()), nix_options=nix_options) clan-pytest-with-core> select_flake.invalidate_cache() clan-pytest-with-core> if select_flake.hash is None: clan-pytest-with-core> msg = "this should be impossible as invalidate_cache() should always set `hash`" clan-pytest-with-core> raise ClanError(msg) clan-pytest-with-core> select_hash = select_flake.hash clan-pytest-with-core> clan-pytest-with-core> # fmt: off clan-pytest-with-core> nix_code = f""" clan-pytest-with-core> let clan-pytest-with-core> flake = builtins.getFlake "path:{self.store_path}?narHash={self.hash}"; clan-pytest-with-core> selectLib = ( clan-pytest-with-core> builtins.getFlake clan-pytest-with-core> "path:{select_source()}?narHash={select_hash}" clan-pytest-with-core> ).lib; clan-pytest-with-core> in clan-pytest-with-core> derivation {{ clan-pytest-with-core> name = "clan-flake-select"; clan-pytest-with-core> result = builtins.toJSON [ clan-pytest-with-core> {" ".join( clan-pytest-with-core> [ clan-pytest-with-core> f"(selectLib.applySelectors (builtins.fromJSON ''{attr}'') flake)" clan-pytest-with-core> for attr in str_selectors clan-pytest-with-core> ] clan-pytest-with-core> )} clan-pytest-with-core> ]; clan-pytest-with-core> clan-pytest-with-core> # We can always build this derivation locally, since /bin/sh is system independent, clan-pytest-with-core> # remote builders would introduce needless overhead. clan-pytest-with-core> preferLocalBuild = true; clan-pytest-with-core> # Save the roundtrip to check the binary caches for trivial substitutions clan-pytest-with-core> allowSubstitutes = false; clan-pytest-with-core> clan-pytest-with-core> passAsFile = [ "result" ]; clan-pytest-with-core> system = "{config["system"]}"; clan-pytest-with-core> builder = "/bin/sh"; clan-pytest-with-core> args = [ clan-pytest-with-core> "-c" clan-pytest-with-core> '' clan-pytest-with-core> read -r x < "$resultPath"; printf %s "$x" > $out clan-pytest-with-core> '' clan-pytest-with-core> ]; clan-pytest-with-core> }} clan-pytest-with-core> """ clan-pytest-with-core> trace = os.environ.get("CLAN_DEBUG_NIX_SELECTORS") == "1" clan-pytest-with-core> try: clan-pytest-with-core> build_output = Path( clan-pytest-with-core> run( clan-pytest-with-core> nix_build(["--expr", nix_code, *nix_options]), clan-pytest-with-core> RunOpts(log=Log.NONE, trace=trace), clan-pytest-with-core> ).stdout.strip(), clan-pytest-with-core> ) clan-pytest-with-core> except ClanCmdError as e: clan-pytest-with-core> if "error: attribute 'clan' missing" in str(e): clan-pytest-with-core> msg = ("This flake does not export the 'clan' attribute. \n" clan-pytest-with-core> "Please write 'clan = clan.config;' into the outputs of your flake.nix.") clan-pytest-with-core> raise ClanSelectError( clan-pytest-with-core> flake_identifier=self.identifier, clan-pytest-with-core> selectors=selectors, clan-pytest-with-core> cmd_error=e, clan-pytest-with-core> description=msg, clan-pytest-with-core> ) from e clan-pytest-with-core> clan-pytest-with-core> # If the error is about a missing attribute, we raise a ClanSelectError clan-pytest-with-core> # with the failed selectors and the flake identifier. clan-pytest-with-core> > raise ClanSelectError( clan-pytest-with-core> flake_identifier=self.identifier, clan-pytest-with-core> selectors=selectors, clan-pytest-with-core> cmd_error=e, clan-pytest-with-core> ) from e clan-pytest-with-core> E clan_lib.flake.flake.ClanSelectError: Error on: $ clan select 'clanInternals.vars.settings.secretStore' clan-pytest-with-core> E Reason: cannot update unlocked flake input 'clan-core' in pure mode. Use flag '--debug' to see full nix trace. clan-pytest-with-core> clan-pytest-with-core> /build/src/clan_lib/flake/flake.py:1094: ClanSelectError clan-pytest-with-core> ----------------------------- Captured stderr call ----------------------------- clan-pytest-with-core> git \ clan-pytest-with-core> init \ clan-pytest-with-core> /build/pytest-a0v350kw clan-pytest-with-core> Caller: /build/src/clan_cli/tests/test_create_flake.py:81::test_create_flake_existing_git clan-pytest-with-core> clan-pytest-with-core> hint: Using 'master' as the name for the initial branch. This default branch name clan-pytest-with-core> hint: will change to "main" in Git 3.0. To configure the initial branch name clan-pytest-with-core> hint: to use in all of your new repositories, which will suppress this warning, clan-pytest-with-core> hint: call: clan-pytest-with-core> hint: clan-pytest-with-core> hint: git config --global init.defaultBranch clan-pytest-with-core> hint: clan-pytest-with-core> hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and clan-pytest-with-core> hint: 'development'. The just-created branch can be renamed via this command: clan-pytest-with-core> hint: clan-pytest-with-core> hint: git branch -m clan-pytest-with-core> hint: clan-pytest-with-core> hint: Disable this message with "git config set advice.defaultBranchName false" clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_cli/tests/test_create_flake.py:81::test_create_flake_existing_git clan-pytest-with-core> clan-pytest-with-core> [localhost] $ clan init /build/pytest-a0v350kw/test-flake --template=default --no-update --no-interactive clan-pytest-with-core> Caller: /build/src/clan_cli/tests/test_create_flake.py:84::test_create_flake_existing_git clan-pytest-with-core> clan-pytest-with-core> age-keygen clan-pytest-with-core> Caller: /build/src/clan_cli/secrets/sops.py:382::generate_private_key clan-pytest-with-core> clan-pytest-with-core> Public key: age1l94mv0meg6hlqzjq7v4n2dcr90pq7d3pu3csuvlfsjv20tw7w5fqgaa9ql clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_cli/secrets/sops.py:382::generate_private_key clan-pytest-with-core> clan-pytest-with-core> Generated age private key at '/build/pytest-a0v350kw/.config/sops/age/keys.txt' for your user. clan-pytest-with-core> Please back it up on a secure location or you will lose access to your secrets. clan-pytest-with-core> nix \ clan-pytest-with-core> --extra-experimental-features 'nix-command flakes' \ clan-pytest-with-core> --option warn-dirty \ clan-pytest-with-core> false \ clan-pytest-with-core> flake \ clan-pytest-with-core> metadata \ clan-pytest-with-core> --json /build/pytest-a0v350kw \ clan-pytest-with-core> --store /build/store clan-pytest-with-core> Caller: /build/src/clan_lib/nix/__init__.py:144::nix_metadata clan-pytest-with-core> clan-pytest-with-core> warning: you don't have Internet access; disabling some network-dependent features clan-pytest-with-core> path '/build/pytest-a0v350kw' does not contain a 'flake.nix', searching up clan-pytest-with-core> error: path '/build/pytest-a0v350kw' is not part of a flake (neither it nor its parent directories contain a 'flake.nix' file) clan-pytest-with-core> Command exited with return code 1 clan-pytest-with-core> Caller: /build/src/clan_lib/nix/__init__.py:144::nix_metadata clan-pytest-with-core> clan-pytest-with-core> Found a repository, but it is not a valid flake: /build/pytest-a0v350kw. Falling back to builtin template. clan-pytest-with-core> Prefetching flake /build/src/clan_lib/clan_core_templates clan-pytest-with-core> warning: you don't have Internet access; disabling some network-dependent features clan-pytest-with-core> Loading flake cache from file /build/clan-flake-cache/flakes-v2/61f7e410abb4ac31c6cde3e73e865823fc5f1087 clan-pytest-with-core> Prefetching flake /build/src/clan_lib/clan_core_templates clan-pytest-with-core> warning: you don't have Internet access; disabling some network-dependent features clan-pytest-with-core> Loading flake cache from file /build/clan-flake-cache/flakes-v2/61f7e410abb4ac31c6cde3e73e865823fc5f1087 clan-pytest-with-core> (cached) $ clan select 'clanInternals.templates.clan."default"' clan-pytest-with-core> chmod \ clan-pytest-with-core> -R u+w \ clan-pytest-with-core> /build/pytest-a0v350kw/test-flake clan-pytest-with-core> Caller: /build/src/clan_lib/templates/filesystem.py:36::copy_from_nixstore clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/templates/filesystem.py:36::copy_from_nixstore clan-pytest-with-core> clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-a0v350kw/test-flake \ clan-pytest-with-core> init clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:173::create_clan clan-pytest-with-core> clan-pytest-with-core> hint: Using 'master' as the name for the initial branch. This default branch name clan-pytest-with-core> hint: will change to "main" in Git 3.0. To configure the initial branch name clan-pytest-with-core> hint: to use in all of your new repositories, which will suppress this warning, clan-pytest-with-core> hint: call: clan-pytest-with-core> hint: clan-pytest-with-core> hint: git config --global init.defaultBranch clan-pytest-with-core> hint: clan-pytest-with-core> hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and clan-pytest-with-core> hint: 'development'. The just-created branch can be renamed via this command: clan-pytest-with-core> hint: clan-pytest-with-core> hint: git branch -m clan-pytest-with-core> hint: clan-pytest-with-core> hint: Disable this message with "git config set advice.defaultBranchName false" clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:173::create_clan clan-pytest-with-core> clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-a0v350kw/test-flake \ clan-pytest-with-core> add \ clan-pytest-with-core> . clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:174::create_clan clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:174::create_clan clan-pytest-with-core> clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-a0v350kw/test-flake \ clan-pytest-with-core> config \ clan-pytest-with-core> user.name clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:177::create_clan clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 1 clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:177::create_clan clan-pytest-with-core> clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-a0v350kw/test-flake \ clan-pytest-with-core> config \ clan-pytest-with-core> user.name \ clan-pytest-with-core> clan-tool clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:182::create_clan clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:182::create_clan clan-pytest-with-core> clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-a0v350kw/test-flake \ clan-pytest-with-core> config \ clan-pytest-with-core> user.email clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:184::create_clan clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 1 clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:184::create_clan clan-pytest-with-core> clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-a0v350kw/test-flake \ clan-pytest-with-core> config \ clan-pytest-with-core> user.email \ clan-pytest-with-core> clan@example.com clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:189::create_clan clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:189::create_clan clan-pytest-with-core> clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-a0v350kw/test-flake \ clan-pytest-with-core> add \ clan-pytest-with-core> . clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:203::create_clan clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:203::create_clan clan-pytest-with-core> clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-a0v350kw/test-flake \ clan-pytest-with-core> commit \ clan-pytest-with-core> -m 'Initial commit' clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:204::create_clan clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:204::create_clan clan-pytest-with-core> clan-pytest-with-core> Prefetching flake /build/pytest-a0v350kw/test-flake clan-pytest-with-core> warning: you don't have Internet access; disabling some network-dependent features clan-pytest-with-core> Cache miss for clanInternals.vars.settings.secretStore clan-pytest-with-core> ------------------------------ Captured log call ------------------------------- clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:147 git \ clan-pytest-with-core> init \ clan-pytest-with-core> /build/pytest-a0v350kw clan-pytest-with-core> Caller: /build/src/clan_cli/tests/test_create_flake.py:81::test_create_flake_existing_git clan-pytest-with-core> clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 hint: Using 'master' as the name for the initial branch. This default branch name clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 hint: will change to "main" in Git 3.0. To configure the initial branch name clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 hint: to use in all of your new repositories, which will suppress this warning, clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 hint: call: clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 hint: clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 hint: git config --global init.defaultBranch clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 hint: clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 hint: 'development'. The just-created branch can be renamed via this command: clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 hint: clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 hint: git branch -m clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 hint: clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 hint: Disable this message with "git config set advice.defaultBranchName false" clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:147 Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_cli/tests/test_create_flake.py:81::test_create_flake_existing_git clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_cli.tests.helpers.cli:__init__.py:147 $ clan init /build/pytest-a0v350kw/test-flake --template=default --no-update --no-interactive clan-pytest-with-core> Caller: /build/src/clan_cli/tests/test_create_flake.py:84::test_create_flake_existing_git clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:147 age-keygen clan-pytest-with-core> Caller: /build/src/clan_cli/secrets/sops.py:382::generate_private_key clan-pytest-with-core> clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 Public key: age1l94mv0meg6hlqzjq7v4n2dcr90pq7d3pu3csuvlfsjv20tw7w5fqgaa9ql clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:147 Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_cli/secrets/sops.py:382::generate_private_key clan-pytest-with-core> clan-pytest-with-core> INFO clan_cli.secrets.key:key.py:41 Generated age private key at '/build/pytest-a0v350kw/.config/sops/age/keys.txt' for your user. clan-pytest-with-core> Please back it up on a secure location or you will lose access to your secrets. clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:147 nix \ clan-pytest-with-core> --extra-experimental-features 'nix-command flakes' \ clan-pytest-with-core> --option warn-dirty \ clan-pytest-with-core> false \ clan-pytest-with-core> flake \ clan-pytest-with-core> metadata \ clan-pytest-with-core> --json /build/pytest-a0v350kw \ clan-pytest-with-core> --store /build/store clan-pytest-with-core> Caller: /build/src/clan_lib/nix/__init__.py:144::nix_metadata clan-pytest-with-core> clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 warning: you don't have Internet access; disabling some network-dependent features clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 path '/build/pytest-a0v350kw' does not contain a 'flake.nix', searching up clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 error: path '/build/pytest-a0v350kw' is not part of a flake (neither it nor its parent directories contain a 'flake.nix' file) clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:147 Command exited with return code 1 clan-pytest-with-core> Caller: /build/src/clan_lib/nix/__init__.py:144::nix_metadata clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.clan.create:create.py:134 Found a repository, but it is not a valid flake: /build/pytest-a0v350kw. Falling back to builtin template. clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:927 Prefetching flake /build/src/clan_lib/clan_core_templates clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 warning: you don't have Internet access; disabling some network-dependent features clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:789 Loading flake cache from file /build/clan-flake-cache/flakes-v2/61f7e410abb4ac31c6cde3e73e865823fc5f1087 clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:927 Prefetching flake /build/src/clan_lib/clan_core_templates clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 warning: you don't have Internet access; disabling some network-dependent features clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:789 Loading flake cache from file /build/clan-flake-cache/flakes-v2/61f7e410abb4ac31c6cde3e73e865823fc5f1087 clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1179 (cached) $ clan select 'clanInternals.templates.clan."default"' clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:147 chmod \ clan-pytest-with-core> -R u+w \ clan-pytest-with-core> /build/pytest-a0v350kw/test-flake clan-pytest-with-core> Caller: /build/src/clan_lib/templates/filesystem.py:36::copy_from_nixstore clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:147 Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/templates/filesystem.py:36::copy_from_nixstore clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:147 git \ clan-pytest-with-core> -C /build/pytest-a0v350kw/test-flake \ clan-pytest-with-core> init clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:173::create_clan clan-pytest-with-core> clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 hint: Using 'master' as the name for the initial branch. This default branch name clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 hint: will change to "main" in Git 3.0. To configure the initial branch name clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 hint: to use in all of your new repositories, which will suppress this warning, clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 hint: call: clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 hint: clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 hint: git config --global init.defaultBranch clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 hint: clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 hint: 'development'. The just-created branch can be renamed via this command: clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 hint: clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 hint: git branch -m clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 hint: clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 hint: Disable this message with "git config set advice.defaultBranchName false" clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:147 Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:173::create_clan clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:147 git \ clan-pytest-with-core> -C /build/pytest-a0v350kw/test-flake \ clan-pytest-with-core> add \ clan-pytest-with-core> . clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:174::create_clan clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:147 Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:174::create_clan clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:147 git \ clan-pytest-with-core> -C /build/pytest-a0v350kw/test-flake \ clan-pytest-with-core> config \ clan-pytest-with-core> user.name clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:177::create_clan clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:147 Command exited with return code 1 clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:177::create_clan clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:147 git \ clan-pytest-with-core> -C /build/pytest-a0v350kw/test-flake \ clan-pytest-with-core> config \ clan-pytest-with-core> user.name \ clan-pytest-with-core> clan-tool clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:182::create_clan clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:147 Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:182::create_clan clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:147 git \ clan-pytest-with-core> -C /build/pytest-a0v350kw/test-flake \ clan-pytest-with-core> config \ clan-pytest-with-core> user.email clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:184::create_clan clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:147 Command exited with return code 1 clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:184::create_clan clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:147 git \ clan-pytest-with-core> -C /build/pytest-a0v350kw/test-flake \ clan-pytest-with-core> config \ clan-pytest-with-core> user.email \ clan-pytest-with-core> clan@example.com clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:189::create_clan clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:147 Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:189::create_clan clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:147 git \ clan-pytest-with-core> -C /build/pytest-a0v350kw/test-flake \ clan-pytest-with-core> add \ clan-pytest-with-core> . clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:203::create_clan clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:147 Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:203::create_clan clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:147 git \ clan-pytest-with-core> -C /build/pytest-a0v350kw/test-flake \ clan-pytest-with-core> commit \ clan-pytest-with-core> -m 'Initial commit' clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:204::create_clan clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:147 Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:204::create_clan clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:927 Prefetching flake /build/pytest-a0v350kw/test-flake clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 warning: you don't have Internet access; disabling some network-dependent features clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1174 Cache miss for clanInternals.vars.settings.secretStore clan-pytest-with-core> _______________________________ test_ui_template _______________________________ clan-pytest-with-core> [gw13] linux -- Python 3.14.7 /nix/store/lb41b0anx1f98y9y5s9mdv97gjgsq740-python3-3.14.7/bin/python clan-pytest-with-core> clan-pytest-with-core> self = Flake(identifier='/build/pytest-ruoxg1r0/test-flake', hash='sha256-gM0cIDoL350QkMDLgp3ekm+zCIYLTpdcLCSWY+qqtCA=', stor...src/clan_lib/flake/flake.py", line 833, in _record_cache_miss\n stack_trace = "".join(traceback.format_stack())\n']) clan-pytest-with-core> selectors = ['clanInternals.vars.settings.secretStore'] clan-pytest-with-core> clan-pytest-with-core> def get_from_nix( clan-pytest-with-core> self, clan-pytest-with-core> selectors: list[str], clan-pytest-with-core> ) -> None: clan-pytest-with-core> """Retrieves specific attributes from a Nix flake using the provided selectors. clan-pytest-with-core> clan-pytest-with-core> This function interacts with the Nix build system to fetch and process clan-pytest-with-core> attributes from a flake. It uses the provided selectors to determine which clan-pytest-with-core> attributes to retrieve and optionally accepts additional Nix options for clan-pytest-with-core> customization. The results are cached for future use. clan-pytest-with-core> Used mostly as a lowlevel function for `precache` and `select` methods. clan-pytest-with-core> clan-pytest-with-core> Args: clan-pytest-with-core> selectors (list[str]): A list of attribute selectors to fetch from the flake. clan-pytest-with-core> nix_options (list[str] | None): Optional additional options to pass to the Nix build command. clan-pytest-with-core> clan-pytest-with-core> Raises: clan-pytest-with-core> ClanError: If the number of outputs does not match the number of selectors. clan-pytest-with-core> AssertionError: If the cache or flake cache path is not properly initialized. clan-pytest-with-core> clan-pytest-with-core> """ clan-pytest-with-core> if self._cache is None: clan-pytest-with-core> self.invalidate_cache() clan-pytest-with-core> if self._cache is None: clan-pytest-with-core> msg = "Cache cannot be None after invalidation" clan-pytest-with-core> raise ClanError(msg) clan-pytest-with-core> clan-pytest-with-core> nix_options = self.nix_options[:] if self.nix_options is not None else [] clan-pytest-with-core> clan-pytest-with-core> str_selectors = [ clan-pytest-with-core> selectors_as_json(parse_selector(selector)) for selector in selectors clan-pytest-with-core> ] clan-pytest-with-core> clan-pytest-with-core> config = nix_config() clan-pytest-with-core> clan-pytest-with-core> select_hash = "sha256-yxcNOha7Cfv2nhVpz9ZXSNKk0R7wt4AiBklJ8D24rVg=" clan-pytest-with-core> if not select_hash.startswith("sha256-"): clan-pytest-with-core> select_flake = Flake(str(select_source()), nix_options=nix_options) clan-pytest-with-core> select_flake.invalidate_cache() clan-pytest-with-core> if select_flake.hash is None: clan-pytest-with-core> msg = "this should be impossible as invalidate_cache() should always set `hash`" clan-pytest-with-core> raise ClanError(msg) clan-pytest-with-core> select_hash = select_flake.hash clan-pytest-with-core> clan-pytest-with-core> # fmt: off clan-pytest-with-core> nix_code = f""" clan-pytest-with-core> let clan-pytest-with-core> flake = builtins.getFlake "path:{self.store_path}?narHash={self.hash}"; clan-pytest-with-core> selectLib = ( clan-pytest-with-core> builtins.getFlake clan-pytest-with-core> "path:{select_source()}?narHash={select_hash}" clan-pytest-with-core> ).lib; clan-pytest-with-core> in clan-pytest-with-core> derivation {{ clan-pytest-with-core> name = "clan-flake-select"; clan-pytest-with-core> result = builtins.toJSON [ clan-pytest-with-core> {" ".join( clan-pytest-with-core> [ clan-pytest-with-core> f"(selectLib.applySelectors (builtins.fromJSON ''{attr}'') flake)" clan-pytest-with-core> for attr in str_selectors clan-pytest-with-core> ] clan-pytest-with-core> )} clan-pytest-with-core> ]; clan-pytest-with-core> clan-pytest-with-core> # We can always build this derivation locally, since /bin/sh is system independent, clan-pytest-with-core> # remote builders would introduce needless overhead. clan-pytest-with-core> preferLocalBuild = true; clan-pytest-with-core> # Save the roundtrip to check the binary caches for trivial substitutions clan-pytest-with-core> allowSubstitutes = false; clan-pytest-with-core> clan-pytest-with-core> passAsFile = [ "result" ]; clan-pytest-with-core> system = "{config["system"]}"; clan-pytest-with-core> builder = "/bin/sh"; clan-pytest-with-core> args = [ clan-pytest-with-core> "-c" clan-pytest-with-core> '' clan-pytest-with-core> read -r x < "$resultPath"; printf %s "$x" > $out clan-pytest-with-core> '' clan-pytest-with-core> ]; clan-pytest-with-core> }} clan-pytest-with-core> """ clan-pytest-with-core> trace = os.environ.get("CLAN_DEBUG_NIX_SELECTORS") == "1" clan-pytest-with-core> try: clan-pytest-with-core> build_output = Path( clan-pytest-with-core> > run( clan-pytest-with-core> nix_build(["--expr", nix_code, *nix_options]), clan-pytest-with-core> RunOpts(log=Log.NONE, trace=trace), clan-pytest-with-core> ).stdout.strip(), clan-pytest-with-core> ) clan-pytest-with-core> clan-pytest-with-core> /build/src/clan_lib/flake/flake.py:1076: clan-pytest-with-core> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ clan-pytest-with-core> clan-pytest-with-core> cmd = ['nix', '--extra-experimental-features', 'nix-command flakes', '--option', 'warn-dirty', 'false', ...] clan-pytest-with-core> options = RunOpts(input=None, stdout=None, stderr=None, env=None, cwd=PosixPath('/build/pytest-ruoxg1r0'), log=, pr...al=False, timeout=inf, shell=False, requires_root_perm=False, graphical_perm=False, trace=False, sensitive_input=False) clan-pytest-with-core> clan-pytest-with-core> def run( clan-pytest-with-core> cmd: list[str], clan-pytest-with-core> options: RunOpts | None = None, clan-pytest-with-core> ) -> CmdOut: clan-pytest-with-core> if options is None: clan-pytest-with-core> options = RunOpts() clan-pytest-with-core> if options.cwd is None: clan-pytest-with-core> options.cwd = Path.cwd() clan-pytest-with-core> clan-pytest-with-core> async_ctx = get_async_ctx() clan-pytest-with-core> # Fill in the options from the thread-local data clan-pytest-with-core> # if they are not set in the options clan-pytest-with-core> if async_ctx: clan-pytest-with-core> if options.prefix is None: clan-pytest-with-core> options.prefix = async_ctx.prefix clan-pytest-with-core> if options.stdout is None: clan-pytest-with-core> options.stdout = async_ctx.stdout clan-pytest-with-core> if options.stderr is None: clan-pytest-with-core> options.stderr = async_ctx.stderr clan-pytest-with-core> clan-pytest-with-core> if options.requires_root_perm: clan-pytest-with-core> cmd = cmd_with_root(cmd, options.graphical_perm) clan-pytest-with-core> # Use our sudo ask proxy here as well clan-pytest-with-core> options.needs_user_terminal = True clan-pytest-with-core> clan-pytest-with-core> if cmdlog.isEnabledFor(logging.DEBUG) and options.trace: clan-pytest-with-core> if options.input and isinstance(options.input, bytes): clan-pytest-with-core> # Always redact sensitive input (e.g., private keys, passwords) clan-pytest-with-core> if options.sensitive_input: clan-pytest-with-core> filtered_input = "<>" clan-pytest-with-core> elif any( clan-pytest-with-core> not ch.isprintable() for ch in options.input.decode("ascii", "replace") clan-pytest-with-core> ): clan-pytest-with-core> filtered_input = "<>" clan-pytest-with-core> else: clan-pytest-with-core> filtered_input = options.input.decode("ascii", "replace") clan-pytest-with-core> clan-pytest-with-core> print_trace( clan-pytest-with-core> f"echo '{filtered_input}' | {indent_command(cmd)}", clan-pytest-with-core> cmdlog, clan-pytest-with-core> options.prefix, clan-pytest-with-core> ) clan-pytest-with-core> else: clan-pytest-with-core> print_trace(f"{indent_command(cmd)}", cmdlog, options.prefix) clan-pytest-with-core> clan-pytest-with-core> start = timeit.default_timer() clan-pytest-with-core> with ExitStack() as stack: clan-pytest-with-core> stdin = subprocess.PIPE if isinstance(options.input, bytes) else options.input clan-pytest-with-core> process = stack.enter_context( clan-pytest-with-core> subprocess.Popen( clan-pytest-with-core> cmd, clan-pytest-with-core> cwd=str(options.cwd), clan-pytest-with-core> env=options.env, clan-pytest-with-core> stdin=stdin, clan-pytest-with-core> stdout=subprocess.PIPE, clan-pytest-with-core> stderr=subprocess.PIPE, clan-pytest-with-core> start_new_session=not options.needs_user_terminal, clan-pytest-with-core> shell=options.shell, clan-pytest-with-core> ), clan-pytest-with-core> ) clan-pytest-with-core> clan-pytest-with-core> if options.needs_user_terminal: clan-pytest-with-core> # we didn't allocate a new session, so we can't terminate the process group clan-pytest-with-core> stack.enter_context(terminate_process(process)) clan-pytest-with-core> else: clan-pytest-with-core> stack.enter_context(terminate_process_group(process)) clan-pytest-with-core> clan-pytest-with-core> input_bytes = options.input if isinstance(options.input, bytes) else None clan-pytest-with-core> clan-pytest-with-core> stdout_buf, stderr_buf, stdout_raw = handle_io( clan-pytest-with-core> process, clan-pytest-with-core> options.log, clan-pytest-with-core> prefix=options.prefix, clan-pytest-with-core> msg_color=options.msg_color, clan-pytest-with-core> timeout=options.timeout, clan-pytest-with-core> input_bytes=input_bytes, clan-pytest-with-core> stdout=options.stdout, clan-pytest-with-core> stderr=options.stderr, clan-pytest-with-core> cmd=cmd, clan-pytest-with-core> cwd=options.cwd, clan-pytest-with-core> env=options.env, clan-pytest-with-core> ) clan-pytest-with-core> if not is_async_cancelled(): clan-pytest-with-core> process.wait() clan-pytest-with-core> clan-pytest-with-core> if TIME_TABLE: clan-pytest-with-core> TIME_TABLE.add(shlex.join(cmd), timeit.default_timer() - start) clan-pytest-with-core> clan-pytest-with-core> # Wait for the subprocess to finish clan-pytest-with-core> cmd_out = CmdOut( clan-pytest-with-core> stdout=stdout_buf, clan-pytest-with-core> stderr=stderr_buf, clan-pytest-with-core> cwd=options.cwd, clan-pytest-with-core> env=options.env, clan-pytest-with-core> command_list=cmd, clan-pytest-with-core> returncode=process.returncode, clan-pytest-with-core> msg=options.error_msg, clan-pytest-with-core> stdout_raw=stdout_raw, clan-pytest-with-core> ) clan-pytest-with-core> clan-pytest-with-core> if cmdlog.isEnabledFor(logging.DEBUG) and options.trace: clan-pytest-with-core> print_trace( clan-pytest-with-core> f"Command exited with return code {process.returncode}", clan-pytest-with-core> cmdlog, clan-pytest-with-core> options.prefix, clan-pytest-with-core> ) clan-pytest-with-core> clan-pytest-with-core> if options.check and process.returncode != 0: clan-pytest-with-core> if is_async_cancelled(): clan-pytest-with-core> cmd_out.msg = "Command cancelled" clan-pytest-with-core> > raise ClanCmdError(cmd_out) clan-pytest-with-core> E clan_lib.errors.ClanCmdError: clan-pytest-with-core> E =================================== Command ==================================== clan-pytest-with-core> E nix \ clan-pytest-with-core> E --extra-experimental-features 'nix-command flakes' \ clan-pytest-with-core> E --option warn-dirty \ clan-pytest-with-core> E false \ clan-pytest-with-core> E build \ clan-pytest-with-core> E --flake-registry '' \ clan-pytest-with-core> E --print-out-paths --print-build-logs \ clan-pytest-with-core> E --show-trace --no-link \ clan-pytest-with-core> E --expr ' clan-pytest-with-core> E let clan-pytest-with-core> E flake = builtins.getFlake "path:/nix/store/fy6gya5x7sm3ylalc2fph31c2rlzrxha-source?narHash=sha256-gM0cIDoL350QkMDLgp3ekm+zCIYLTpdcLCSWY+qqtCA="; clan-pytest-with-core> E selectLib = ( clan-pytest-with-core> E builtins.getFlake clan-pytest-with-core> E "path:/nix/store/cba1x9mxnwr8b36cw41bya7g6d5v1p7d-source?narHash=sha256-yxcNOha7Cfv2nhVpz9ZXSNKk0R7wt4AiBklJ8D24rVg=" clan-pytest-with-core> E ).lib; clan-pytest-with-core> E in clan-pytest-with-core> E derivation { clan-pytest-with-core> E name = "clan-flake-select"; clan-pytest-with-core> E result = builtins.toJSON [ clan-pytest-with-core> E (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "secretStore"}]'"'"''"'"') flake) clan-pytest-with-core> E ]; clan-pytest-with-core> E clan-pytest-with-core> E # We can always build this derivation locally, since /bin/sh is system independent, clan-pytest-with-core> E # remote builders would introduce needless overhead. clan-pytest-with-core> E preferLocalBuild = true; clan-pytest-with-core> E # Save the roundtrip to check the binary caches for trivial substitutions clan-pytest-with-core> E allowSubstitutes = false; clan-pytest-with-core> E clan-pytest-with-core> E passAsFile = [ "result" ]; clan-pytest-with-core> E system = "x86_64-linux"; clan-pytest-with-core> E builder = "/bin/sh"; clan-pytest-with-core> E args = [ clan-pytest-with-core> E "-c" clan-pytest-with-core> E '"'"''"'"' clan-pytest-with-core> E read -r x < "$resultPath"; printf %s "$x" > $out clan-pytest-with-core> E '"'"''"'"' clan-pytest-with-core> E ]; clan-pytest-with-core> E } clan-pytest-with-core> E ' \ clan-pytest-with-core> E --store /build/store clan-pytest-with-core> E clan-pytest-with-core> E ==================================== Stderr ==================================== clan-pytest-with-core> E warning: you don't have Internet access; disabling some network-dependent features clan-pytest-with-core> E error: clan-pytest-with-core> E … while calling the 'derivationStrict' builtin clan-pytest-with-core> E at :37:12: clan-pytest-with-core> E 36| clan-pytest-with-core> E 37| strict = derivationStrict drvAttrs; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 38| clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating derivation 'clan-flake-select' clan-pytest-with-core> E whose name attribute is located at «string»:10:17 clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating attribute 'result' of derivation 'clan-flake-select' clan-pytest-with-core> E at «string»:11:17: clan-pytest-with-core> E 10| name = "clan-flake-select"; clan-pytest-with-core> E 11| result = builtins.toJSON [ clan-pytest-with-core> E | ^ clan-pytest-with-core> E 12| (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "secretStore"}]'') flake) clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'toJSON' builtin clan-pytest-with-core> E at «string»:11:26: clan-pytest-with-core> E 10| name = "clan-flake-select"; clan-pytest-with-core> E 11| result = builtins.toJSON [ clan-pytest-with-core> E | ^ clan-pytest-with-core> E 12| (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "secretStore"}]'') flake) clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating list element at index 0 clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at «string»:12:22: clan-pytest-with-core> E 11| result = builtins.toJSON [ clan-pytest-with-core> E 12| (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "secretStore"}]'') flake) clan-pytest-with-core> E | ^ clan-pytest-with-core> E 13| ]; clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'applySelectors' clan-pytest-with-core> E at /build/store/nix/store/cba1x9mxnwr8b36cw41bya7g6d5v1p7d-source/select.nix:262:16: clan-pytest-with-core> E 261| applySelectors = clan-pytest-with-core> E 262| selectors: obj: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 263| let clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/cba1x9mxnwr8b36cw41bya7g6d5v1p7d-source/select.nix:352:5: clan-pytest-with-core> E 351| in clan-pytest-with-core> E 352| recurse selectors 0 obj; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 353| clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'recurse' clan-pytest-with-core> E at /build/store/nix/store/cba1x9mxnwr8b36cw41bya7g6d5v1p7d-source/select.nix:265:25: clan-pytest-with-core> E 264| recurse = clan-pytest-with-core> E 265| selectors: idx: obj: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 266| # we are done clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating a branch condition clan-pytest-with-core> E at /build/store/nix/store/cba1x9mxnwr8b36cw41bya7g6d5v1p7d-source/select.nix:281:11: clan-pytest-with-core> E 280| # lists clan-pytest-with-core> E 281| if builtins.isList obj then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 282| if selector.type == "all" then clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'isList' builtin clan-pytest-with-core> E at /build/store/nix/store/cba1x9mxnwr8b36cw41bya7g6d5v1p7d-source/select.nix:281:14: clan-pytest-with-core> E 280| # lists clan-pytest-with-core> E 281| if builtins.isList obj then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 282| if selector.type == "all" then clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'getFlake' builtin clan-pytest-with-core> E at «string»:3:23: clan-pytest-with-core> E 2| let clan-pytest-with-core> E 3| flake = builtins.getFlake "path:/nix/store/fy6gya5x7sm3ylalc2fph31c2rlzrxha-source?narHash=sha256-gM0cIDoL350QkMDLgp3ekm+zCIYLTpdcLCSWY+qqtCA="; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 4| selectLib = ( clan-pytest-with-core> E clan-pytest-with-core> E … while updating the lock file of flake 'path:/nix/store/fy6gya5x7sm3ylalc2fph31c2rlzrxha-source?lastModified=0&narHash=sha256-gM0cIDoL350QkMDLgp3ekm%2BzCIYLTpdcLCSWY%2BqqtCA%3D' clan-pytest-with-core> E clan-pytest-with-core> E … while updating the flake input 'clan-core' clan-pytest-with-core> E clan-pytest-with-core> E error: cannot update unlocked flake input 'clan-core' in pure mode clan-pytest-with-core> E clan-pytest-with-core> E Return Code: 1 clan-pytest-with-core> clan-pytest-with-core> /build/src/clan_lib/cmd/__init__.py:451: ClanCmdError clan-pytest-with-core> clan-pytest-with-core> The above exception was the direct cause of the following exception: clan-pytest-with-core> clan-pytest-with-core> monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7fffe273f980> clan-pytest-with-core> temporary_home = PosixPath('/build/pytest-ruoxg1r0') clan-pytest-with-core> clan_core = PosixPath('/nix/store/c4gps8k2ky7ix7h6cgr1ss6pflxcsxmg-clan-core-flake') clan-pytest-with-core> capture_output = clan-pytest-with-core> patch_get_clan_details = .get_clan_details at 0x7fffe234a400> clan-pytest-with-core> clan-pytest-with-core> @pytest.mark.broken_on_darwin clan-pytest-with-core> @pytest.mark.with_core clan-pytest-with-core> def test_ui_template( clan-pytest-with-core> monkeypatch: pytest.MonkeyPatch, clan-pytest-with-core> temporary_home: Path, clan-pytest-with-core> clan_core: Path, clan-pytest-with-core> capture_output: CaptureOutput, clan-pytest-with-core> patch_get_clan_details: Any, # noqa: ARG001 clan-pytest-with-core> ) -> None: clan-pytest-with-core> flake_dir = temporary_home / "test-flake" clan-pytest-with-core> clan-pytest-with-core> monkeypatch.setenv("LOGNAME", "testuser") clan-pytest-with-core> > cli.run( clan-pytest-with-core> [ clan-pytest-with-core> "init", clan-pytest-with-core> str(flake_dir), clan-pytest-with-core> "--template=minimal", clan-pytest-with-core> "--no-update", clan-pytest-with-core> "--no-interactive", clan-pytest-with-core> ] clan-pytest-with-core> ) clan-pytest-with-core> clan-pytest-with-core> /build/src/clan_cli/tests/test_create_flake.py:129: clan-pytest-with-core> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ clan-pytest-with-core> /build/src/clan_cli/tests/helpers/cli.py:22: in run clan-pytest-with-core> parsed.func(parsed) clan-pytest-with-core> /build/src/clan_cli/init.py:54: in init_command clan-pytest-with-core> register_admin_keys( clan-pytest-with-core> /build/src/clan_cli/vars/keygen.py:89: in register_admin_keys clan-pytest-with-core> backend = Flake(str(flake_dir)).select(vars_settings_secret_store()) clan-pytest-with-core> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ clan-pytest-with-core> /build/src/clan_lib/flake/flake.py:1177: in select clan-pytest-with-core> self.get_from_nix([selector]) clan-pytest-with-core> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ clan-pytest-with-core> clan-pytest-with-core> self = Flake(identifier='/build/pytest-ruoxg1r0/test-flake', hash='sha256-gM0cIDoL350QkMDLgp3ekm+zCIYLTpdcLCSWY+qqtCA=', stor...src/clan_lib/flake/flake.py", line 833, in _record_cache_miss\n stack_trace = "".join(traceback.format_stack())\n']) clan-pytest-with-core> selectors = ['clanInternals.vars.settings.secretStore'] clan-pytest-with-core> clan-pytest-with-core> def get_from_nix( clan-pytest-with-core> self, clan-pytest-with-core> selectors: list[str], clan-pytest-with-core> ) -> None: clan-pytest-with-core> """Retrieves specific attributes from a Nix flake using the provided selectors. clan-pytest-with-core> clan-pytest-with-core> This function interacts with the Nix build system to fetch and process clan-pytest-with-core> attributes from a flake. It uses the provided selectors to determine which clan-pytest-with-core> attributes to retrieve and optionally accepts additional Nix options for clan-pytest-with-core> customization. The results are cached for future use. clan-pytest-with-core> Used mostly as a lowlevel function for `precache` and `select` methods. clan-pytest-with-core> clan-pytest-with-core> Args: clan-pytest-with-core> selectors (list[str]): A list of attribute selectors to fetch from the flake. clan-pytest-with-core> nix_options (list[str] | None): Optional additional options to pass to the Nix build command. clan-pytest-with-core> clan-pytest-with-core> Raises: clan-pytest-with-core> ClanError: If the number of outputs does not match the number of selectors. clan-pytest-with-core> AssertionError: If the cache or flake cache path is not properly initialized. clan-pytest-with-core> clan-pytest-with-core> """ clan-pytest-with-core> if self._cache is None: clan-pytest-with-core> self.invalidate_cache() clan-pytest-with-core> if self._cache is None: clan-pytest-with-core> msg = "Cache cannot be None after invalidation" clan-pytest-with-core> raise ClanError(msg) clan-pytest-with-core> clan-pytest-with-core> nix_options = self.nix_options[:] if self.nix_options is not None else [] clan-pytest-with-core> clan-pytest-with-core> str_selectors = [ clan-pytest-with-core> selectors_as_json(parse_selector(selector)) for selector in selectors clan-pytest-with-core> ] clan-pytest-with-core> clan-pytest-with-core> config = nix_config() clan-pytest-with-core> clan-pytest-with-core> select_hash = "sha256-yxcNOha7Cfv2nhVpz9ZXSNKk0R7wt4AiBklJ8D24rVg=" clan-pytest-with-core> if not select_hash.startswith("sha256-"): clan-pytest-with-core> select_flake = Flake(str(select_source()), nix_options=nix_options) clan-pytest-with-core> select_flake.invalidate_cache() clan-pytest-with-core> if select_flake.hash is None: clan-pytest-with-core> msg = "this should be impossible as invalidate_cache() should always set `hash`" clan-pytest-with-core> raise ClanError(msg) clan-pytest-with-core> select_hash = select_flake.hash clan-pytest-with-core> clan-pytest-with-core> # fmt: off clan-pytest-with-core> nix_code = f""" clan-pytest-with-core> let clan-pytest-with-core> flake = builtins.getFlake "path:{self.store_path}?narHash={self.hash}"; clan-pytest-with-core> selectLib = ( clan-pytest-with-core> builtins.getFlake clan-pytest-with-core> "path:{select_source()}?narHash={select_hash}" clan-pytest-with-core> ).lib; clan-pytest-with-core> in clan-pytest-with-core> derivation {{ clan-pytest-with-core> name = "clan-flake-select"; clan-pytest-with-core> result = builtins.toJSON [ clan-pytest-with-core> {" ".join( clan-pytest-with-core> [ clan-pytest-with-core> f"(selectLib.applySelectors (builtins.fromJSON ''{attr}'') flake)" clan-pytest-with-core> for attr in str_selectors clan-pytest-with-core> ] clan-pytest-with-core> )} clan-pytest-with-core> ]; clan-pytest-with-core> clan-pytest-with-core> # We can always build this derivation locally, since /bin/sh is system independent, clan-pytest-with-core> # remote builders would introduce needless overhead. clan-pytest-with-core> preferLocalBuild = true; clan-pytest-with-core> # Save the roundtrip to check the binary caches for trivial substitutions clan-pytest-with-core> allowSubstitutes = false; clan-pytest-with-core> clan-pytest-with-core> passAsFile = [ "result" ]; clan-pytest-with-core> system = "{config["system"]}"; clan-pytest-with-core> builder = "/bin/sh"; clan-pytest-with-core> args = [ clan-pytest-with-core> "-c" clan-pytest-with-core> '' clan-pytest-with-core> read -r x < "$resultPath"; printf %s "$x" > $out clan-pytest-with-core> '' clan-pytest-with-core> ]; clan-pytest-with-core> }} clan-pytest-with-core> """ clan-pytest-with-core> trace = os.environ.get("CLAN_DEBUG_NIX_SELECTORS") == "1" clan-pytest-with-core> try: clan-pytest-with-core> build_output = Path( clan-pytest-with-core> run( clan-pytest-with-core> nix_build(["--expr", nix_code, *nix_options]), clan-pytest-with-core> RunOpts(log=Log.NONE, trace=trace), clan-pytest-with-core> ).stdout.strip(), clan-pytest-with-core> ) clan-pytest-with-core> except ClanCmdError as e: clan-pytest-with-core> if "error: attribute 'clan' missing" in str(e): clan-pytest-with-core> msg = ("This flake does not export the 'clan' attribute. \n" clan-pytest-with-core> "Please write 'clan = clan.config;' into the outputs of your flake.nix.") clan-pytest-with-core> raise ClanSelectError( clan-pytest-with-core> flake_identifier=self.identifier, clan-pytest-with-core> selectors=selectors, clan-pytest-with-core> cmd_error=e, clan-pytest-with-core> description=msg, clan-pytest-with-core> ) from e clan-pytest-with-core> clan-pytest-with-core> # If the error is about a missing attribute, we raise a ClanSelectError clan-pytest-with-core> # with the failed selectors and the flake identifier. clan-pytest-with-core> > raise ClanSelectError( clan-pytest-with-core> flake_identifier=self.identifier, clan-pytest-with-core> selectors=selectors, clan-pytest-with-core> cmd_error=e, clan-pytest-with-core> ) from e clan-pytest-with-core> E clan_lib.flake.flake.ClanSelectError: Error on: $ clan select 'clanInternals.vars.settings.secretStore' clan-pytest-with-core> E Reason: cannot update unlocked flake input 'clan-core' in pure mode. Use flag '--debug' to see full nix trace. clan-pytest-with-core> clan-pytest-with-core> /build/src/clan_lib/flake/flake.py:1094: ClanSelectError clan-pytest-with-core> ----------------------------- Captured stderr call ----------------------------- clan-pytest-with-core> [localhost] $ clan init /build/pytest-ruoxg1r0/test-flake --template=minimal --no-update --no-interactive clan-pytest-with-core> Caller: /build/src/clan_cli/tests/test_create_flake.py:129::test_ui_template clan-pytest-with-core> clan-pytest-with-core> age-keygen clan-pytest-with-core> Caller: /build/src/clan_cli/secrets/sops.py:382::generate_private_key clan-pytest-with-core> clan-pytest-with-core> Public key: age1s585veaz42mw9d6jwelr6u5pk30734v7npmxcf59j3lnpflz5smslee04m clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_cli/secrets/sops.py:382::generate_private_key clan-pytest-with-core> clan-pytest-with-core> Generated age private key at '/build/pytest-ruoxg1r0/.config/sops/age/keys.txt' for your user. clan-pytest-with-core> Please back it up on a secure location or you will lose access to your secrets. clan-pytest-with-core> Prefetching flake /build/src/clan_lib/clan_core_templates clan-pytest-with-core> warning: you don't have Internet access; disabling some network-dependent features clan-pytest-with-core> Loading flake cache from file /build/clan-flake-cache/flakes-v2/61f7e410abb4ac31c6cde3e73e865823fc5f1087 clan-pytest-with-core> Prefetching flake /build/src/clan_lib/clan_core_templates clan-pytest-with-core> warning: you don't have Internet access; disabling some network-dependent features clan-pytest-with-core> Loading flake cache from file /build/clan-flake-cache/flakes-v2/61f7e410abb4ac31c6cde3e73e865823fc5f1087 clan-pytest-with-core> (cached) $ clan select 'clanInternals.templates.clan."minimal"' clan-pytest-with-core> chmod \ clan-pytest-with-core> -R u+w \ clan-pytest-with-core> /build/pytest-ruoxg1r0/test-flake clan-pytest-with-core> Caller: /build/src/clan_lib/templates/filesystem.py:36::copy_from_nixstore clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/templates/filesystem.py:36::copy_from_nixstore clan-pytest-with-core> clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-ruoxg1r0/test-flake \ clan-pytest-with-core> init clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:173::create_clan clan-pytest-with-core> clan-pytest-with-core> hint: Using 'master' as the name for the initial branch. This default branch name clan-pytest-with-core> hint: will change to "main" in Git 3.0. To configure the initial branch name clan-pytest-with-core> hint: to use in all of your new repositories, which will suppress this warning, clan-pytest-with-core> hint: call: clan-pytest-with-core> hint: clan-pytest-with-core> hint: git config --global init.defaultBranch clan-pytest-with-core> hint: clan-pytest-with-core> hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and clan-pytest-with-core> hint: 'development'. The just-created branch can be renamed via this command: clan-pytest-with-core> hint: clan-pytest-with-core> hint: git branch -m clan-pytest-with-core> hint: clan-pytest-with-core> hint: Disable this message with "git config set advice.defaultBranchName false" clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:173::create_clan clan-pytest-with-core> clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-ruoxg1r0/test-flake \ clan-pytest-with-core> add \ clan-pytest-with-core> . clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:174::create_clan clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:174::create_clan clan-pytest-with-core> clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-ruoxg1r0/test-flake \ clan-pytest-with-core> config \ clan-pytest-with-core> user.name clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:177::create_clan clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 1 clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:177::create_clan clan-pytest-with-core> clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-ruoxg1r0/test-flake \ clan-pytest-with-core> config \ clan-pytest-with-core> user.name \ clan-pytest-with-core> clan-tool clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:182::create_clan clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:182::create_clan clan-pytest-with-core> clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-ruoxg1r0/test-flake \ clan-pytest-with-core> config \ clan-pytest-with-core> user.email clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:184::create_clan clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 1 clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:184::create_clan clan-pytest-with-core> clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-ruoxg1r0/test-flake \ clan-pytest-with-core> config \ clan-pytest-with-core> user.email \ clan-pytest-with-core> clan@example.com clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:189::create_clan clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:189::create_clan clan-pytest-with-core> clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-ruoxg1r0/test-flake \ clan-pytest-with-core> add \ clan-pytest-with-core> . clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:203::create_clan clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:203::create_clan clan-pytest-with-core> clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-ruoxg1r0/test-flake \ clan-pytest-with-core> commit \ clan-pytest-with-core> -m 'Initial commit' clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:204::create_clan clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:204::create_clan clan-pytest-with-core> clan-pytest-with-core> Prefetching flake /build/pytest-ruoxg1r0/test-flake clan-pytest-with-core> warning: you don't have Internet access; disabling some network-dependent features clan-pytest-with-core> Cache miss for clanInternals.vars.settings.secretStore clan-pytest-with-core> ------------------------------ Captured log call ------------------------------- clan-pytest-with-core> DEBUG clan_cli.tests.helpers.cli:__init__.py:147 $ clan init /build/pytest-ruoxg1r0/test-flake --template=minimal --no-update --no-interactive clan-pytest-with-core> Caller: /build/src/clan_cli/tests/test_create_flake.py:129::test_ui_template clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:147 age-keygen clan-pytest-with-core> Caller: /build/src/clan_cli/secrets/sops.py:382::generate_private_key clan-pytest-with-core> clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 Public key: age1s585veaz42mw9d6jwelr6u5pk30734v7npmxcf59j3lnpflz5smslee04m clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:147 Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_cli/secrets/sops.py:382::generate_private_key clan-pytest-with-core> clan-pytest-with-core> INFO clan_cli.secrets.key:key.py:41 Generated age private key at '/build/pytest-ruoxg1r0/.config/sops/age/keys.txt' for your user. clan-pytest-with-core> Please back it up on a secure location or you will lose access to your secrets. clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:927 Prefetching flake /build/src/clan_lib/clan_core_templates clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 warning: you don't have Internet access; disabling some network-dependent features clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:789 Loading flake cache from file /build/clan-flake-cache/flakes-v2/61f7e410abb4ac31c6cde3e73e865823fc5f1087 clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:927 Prefetching flake /build/src/clan_lib/clan_core_templates clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 warning: you don't have Internet access; disabling some network-dependent features clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:789 Loading flake cache from file /build/clan-flake-cache/flakes-v2/61f7e410abb4ac31c6cde3e73e865823fc5f1087 clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1179 (cached) $ clan select 'clanInternals.templates.clan."minimal"' clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:147 chmod \ clan-pytest-with-core> -R u+w \ clan-pytest-with-core> /build/pytest-ruoxg1r0/test-flake clan-pytest-with-core> Caller: /build/src/clan_lib/templates/filesystem.py:36::copy_from_nixstore clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:147 Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/templates/filesystem.py:36::copy_from_nixstore clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:147 git \ clan-pytest-with-core> -C /build/pytest-ruoxg1r0/test-flake \ clan-pytest-with-core> init clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:173::create_clan clan-pytest-with-core> clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 hint: Using 'master' as the name for the initial branch. This default branch name clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 hint: will change to "main" in Git 3.0. To configure the initial branch name clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 hint: to use in all of your new repositories, which will suppress this warning, clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 hint: call: clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 hint: clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 hint: git config --global init.defaultBranch clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 hint: clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 hint: 'development'. The just-created branch can be renamed via this command: clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 hint: clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 hint: git branch -m clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 hint: clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 hint: Disable this message with "git config set advice.defaultBranchName false" clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:147 Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:173::create_clan clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:147 git \ clan-pytest-with-core> -C /build/pytest-ruoxg1r0/test-flake \ clan-pytest-with-core> add \ clan-pytest-with-core> . clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:174::create_clan clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:147 Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:174::create_clan clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:147 git \ clan-pytest-with-core> -C /build/pytest-ruoxg1r0/test-flake \ clan-pytest-with-core> config \ clan-pytest-with-core> user.name clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:177::create_clan clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:147 Command exited with return code 1 clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:177::create_clan clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:147 git \ clan-pytest-with-core> -C /build/pytest-ruoxg1r0/test-flake \ clan-pytest-with-core> config \ clan-pytest-with-core> user.name \ clan-pytest-with-core> clan-tool clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:182::create_clan clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:147 Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:182::create_clan clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:147 git \ clan-pytest-with-core> -C /build/pytest-ruoxg1r0/test-flake \ clan-pytest-with-core> config \ clan-pytest-with-core> user.email clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:184::create_clan clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:147 Command exited with return code 1 clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:184::create_clan clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:147 git \ clan-pytest-with-core> -C /build/pytest-ruoxg1r0/test-flake \ clan-pytest-with-core> config \ clan-pytest-with-core> user.email \ clan-pytest-with-core> clan@example.com clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:189::create_clan clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:147 Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:189::create_clan clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:147 git \ clan-pytest-with-core> -C /build/pytest-ruoxg1r0/test-flake \ clan-pytest-with-core> add \ clan-pytest-with-core> . clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:203::create_clan clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:147 Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:203::create_clan clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:147 git \ clan-pytest-with-core> -C /build/pytest-ruoxg1r0/test-flake \ clan-pytest-with-core> commit \ clan-pytest-with-core> -m 'Initial commit' clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:204::create_clan clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:147 Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:204::create_clan clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:927 Prefetching flake /build/pytest-ruoxg1r0/test-flake clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 warning: you don't have Internet access; disabling some network-dependent features clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1174 Cache miss for clanInternals.vars.settings.secretStore clan-pytest-with-core> --------------------------- Captured stdout teardown --------------------------- clan-pytest-with-core> FAILED [ 2%] clan-pytest-with-core> _______________ test_create_flake_in_git_repo_without_flake_nix ________________ clan-pytest-with-core> [gw7] linux -- Python 3.14.7 /nix/store/lb41b0anx1f98y9y5s9mdv97gjgsq740-python3-3.14.7/bin/python clan-pytest-with-core> clan-pytest-with-core> self = Flake(identifier='/build/pytest-u7ootkda/my-new-clan', hash='sha256-iJBartEsr8guwWj8WkhKvdbX6sHJ61e2/AWvOsjMg3A=', sto...src/clan_lib/flake/flake.py", line 833, in _record_cache_miss\n stack_trace = "".join(traceback.format_stack())\n']) clan-pytest-with-core> selectors = ['clanInternals.vars.settings.secretStore'] clan-pytest-with-core> clan-pytest-with-core> def get_from_nix( clan-pytest-with-core> self, clan-pytest-with-core> selectors: list[str], clan-pytest-with-core> ) -> None: clan-pytest-with-core> """Retrieves specific attributes from a Nix flake using the provided selectors. clan-pytest-with-core> clan-pytest-with-core> This function interacts with the Nix build system to fetch and process clan-pytest-with-core> attributes from a flake. It uses the provided selectors to determine which clan-pytest-with-core> attributes to retrieve and optionally accepts additional Nix options for clan-pytest-with-core> customization. The results are cached for future use. clan-pytest-with-core> Used mostly as a lowlevel function for `precache` and `select` methods. clan-pytest-with-core> clan-pytest-with-core> Args: clan-pytest-with-core> selectors (list[str]): A list of attribute selectors to fetch from the flake. clan-pytest-with-core> nix_options (list[str] | None): Optional additional options to pass to the Nix build command. clan-pytest-with-core> clan-pytest-with-core> Raises: clan-pytest-with-core> ClanError: If the number of outputs does not match the number of selectors. clan-pytest-with-core> AssertionError: If the cache or flake cache path is not properly initialized. clan-pytest-with-core> clan-pytest-with-core> """ clan-pytest-with-core> if self._cache is None: clan-pytest-with-core> self.invalidate_cache() clan-pytest-with-core> if self._cache is None: clan-pytest-with-core> msg = "Cache cannot be None after invalidation" clan-pytest-with-core> raise ClanError(msg) clan-pytest-with-core> clan-pytest-with-core> nix_options = self.nix_options[:] if self.nix_options is not None else [] clan-pytest-with-core> clan-pytest-with-core> str_selectors = [ clan-pytest-with-core> selectors_as_json(parse_selector(selector)) for selector in selectors clan-pytest-with-core> ] clan-pytest-with-core> clan-pytest-with-core> config = nix_config() clan-pytest-with-core> clan-pytest-with-core> select_hash = "sha256-yxcNOha7Cfv2nhVpz9ZXSNKk0R7wt4AiBklJ8D24rVg=" clan-pytest-with-core> if not select_hash.startswith("sha256-"): clan-pytest-with-core> select_flake = Flake(str(select_source()), nix_options=nix_options) clan-pytest-with-core> select_flake.invalidate_cache() clan-pytest-with-core> if select_flake.hash is None: clan-pytest-with-core> msg = "this should be impossible as invalidate_cache() should always set `hash`" clan-pytest-with-core> raise ClanError(msg) clan-pytest-with-core> select_hash = select_flake.hash clan-pytest-with-core> clan-pytest-with-core> # fmt: off clan-pytest-with-core> nix_code = f""" clan-pytest-with-core> let clan-pytest-with-core> flake = builtins.getFlake "path:{self.store_path}?narHash={self.hash}"; clan-pytest-with-core> selectLib = ( clan-pytest-with-core> builtins.getFlake clan-pytest-with-core> "path:{select_source()}?narHash={select_hash}" clan-pytest-with-core> ).lib; clan-pytest-with-core> in clan-pytest-with-core> derivation {{ clan-pytest-with-core> name = "clan-flake-select"; clan-pytest-with-core> result = builtins.toJSON [ clan-pytest-with-core> {" ".join( clan-pytest-with-core> [ clan-pytest-with-core> f"(selectLib.applySelectors (builtins.fromJSON ''{attr}'') flake)" clan-pytest-with-core> for attr in str_selectors clan-pytest-with-core> ] clan-pytest-with-core> )} clan-pytest-with-core> ]; clan-pytest-with-core> clan-pytest-with-core> # We can always build this derivation locally, since /bin/sh is system independent, clan-pytest-with-core> # remote builders would introduce needless overhead. clan-pytest-with-core> preferLocalBuild = true; clan-pytest-with-core> # Save the roundtrip to check the binary caches for trivial substitutions clan-pytest-with-core> allowSubstitutes = false; clan-pytest-with-core> clan-pytest-with-core> passAsFile = [ "result" ]; clan-pytest-with-core> system = "{config["system"]}"; clan-pytest-with-core> builder = "/bin/sh"; clan-pytest-with-core> args = [ clan-pytest-with-core> "-c" clan-pytest-with-core> '' clan-pytest-with-core> read -r x < "$resultPath"; printf %s "$x" > $out clan-pytest-with-core> '' clan-pytest-with-core> ]; clan-pytest-with-core> }} clan-pytest-with-core> """ clan-pytest-with-core> trace = os.environ.get("CLAN_DEBUG_NIX_SELECTORS") == "1" clan-pytest-with-core> try: clan-pytest-with-core> build_output = Path( clan-pytest-with-core> > run( clan-pytest-with-core> nix_build(["--expr", nix_code, *nix_options]), clan-pytest-with-core> RunOpts(log=Log.NONE, trace=trace), clan-pytest-with-core> ).stdout.strip(), clan-pytest-with-core> ) clan-pytest-with-core> clan-pytest-with-core> /build/src/clan_lib/flake/flake.py:1076: clan-pytest-with-core> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ clan-pytest-with-core> clan-pytest-with-core> cmd = ['nix', '--extra-experimental-features', 'nix-command flakes', '--option', 'warn-dirty', 'false', ...] clan-pytest-with-core> options = RunOpts(input=None, stdout=None, stderr=None, env=None, cwd=PosixPath('/build/pytest-u7ootkda'), log=, pr...al=False, timeout=inf, shell=False, requires_root_perm=False, graphical_perm=False, trace=False, sensitive_input=False) clan-pytest-with-core> clan-pytest-with-core> def run( clan-pytest-with-core> cmd: list[str], clan-pytest-with-core> options: RunOpts | None = None, clan-pytest-with-core> ) -> CmdOut: clan-pytest-with-core> if options is None: clan-pytest-with-core> options = RunOpts() clan-pytest-with-core> if options.cwd is None: clan-pytest-with-core> options.cwd = Path.cwd() clan-pytest-with-core> clan-pytest-with-core> async_ctx = get_async_ctx() clan-pytest-with-core> # Fill in the options from the thread-local data clan-pytest-with-core> # if they are not set in the options clan-pytest-with-core> if async_ctx: clan-pytest-with-core> if options.prefix is None: clan-pytest-with-core> options.prefix = async_ctx.prefix clan-pytest-with-core> if options.stdout is None: clan-pytest-with-core> options.stdout = async_ctx.stdout clan-pytest-with-core> if options.stderr is None: clan-pytest-with-core> options.stderr = async_ctx.stderr clan-pytest-with-core> clan-pytest-with-core> if options.requires_root_perm: clan-pytest-with-core> cmd = cmd_with_root(cmd, options.graphical_perm) clan-pytest-with-core> # Use our sudo ask proxy here as well clan-pytest-with-core> options.needs_user_terminal = True clan-pytest-with-core> clan-pytest-with-core> if cmdlog.isEnabledFor(logging.DEBUG) and options.trace: clan-pytest-with-core> if options.input and isinstance(options.input, bytes): clan-pytest-with-core> # Always redact sensitive input (e.g., private keys, passwords) clan-pytest-with-core> if options.sensitive_input: clan-pytest-with-core> filtered_input = "<>" clan-pytest-with-core> elif any( clan-pytest-with-core> not ch.isprintable() for ch in options.input.decode("ascii", "replace") clan-pytest-with-core> ): clan-pytest-with-core> filtered_input = "<>" clan-pytest-with-core> else: clan-pytest-with-core> filtered_input = options.input.decode("ascii", "replace") clan-pytest-with-core> clan-pytest-with-core> print_trace( clan-pytest-with-core> f"echo '{filtered_input}' | {indent_command(cmd)}", clan-pytest-with-core> cmdlog, clan-pytest-with-core> options.prefix, clan-pytest-with-core> ) clan-pytest-with-core> else: clan-pytest-with-core> print_trace(f"{indent_command(cmd)}", cmdlog, options.prefix) clan-pytest-with-core> clan-pytest-with-core> start = timeit.default_timer() clan-pytest-with-core> with ExitStack() as stack: clan-pytest-with-core> stdin = subprocess.PIPE if isinstance(options.input, bytes) else options.input clan-pytest-with-core> process = stack.enter_context( clan-pytest-with-core> subprocess.Popen( clan-pytest-with-core> cmd, clan-pytest-with-core> cwd=str(options.cwd), clan-pytest-with-core> env=options.env, clan-pytest-with-core> stdin=stdin, clan-pytest-with-core> stdout=subprocess.PIPE, clan-pytest-with-core> stderr=subprocess.PIPE, clan-pytest-with-core> start_new_session=not options.needs_user_terminal, clan-pytest-with-core> shell=options.shell, clan-pytest-with-core> ), clan-pytest-with-core> ) clan-pytest-with-core> clan-pytest-with-core> if options.needs_user_terminal: clan-pytest-with-core> # we didn't allocate a new session, so we can't terminate the process group clan-pytest-with-core> stack.enter_context(terminate_process(process)) clan-pytest-with-core> else: clan-pytest-with-core> stack.enter_context(terminate_process_group(process)) clan-pytest-with-core> clan-pytest-with-core> input_bytes = options.input if isinstance(options.input, bytes) else None clan-pytest-with-core> clan-pytest-with-core> stdout_buf, stderr_buf, stdout_raw = handle_io( clan-pytest-with-core> process, clan-pytest-with-core> options.log, clan-pytest-with-core> prefix=options.prefix, clan-pytest-with-core> msg_color=options.msg_color, clan-pytest-with-core> timeout=options.timeout, clan-pytest-with-core> input_bytes=input_bytes, clan-pytest-with-core> stdout=options.stdout, clan-pytest-with-core> stderr=options.stderr, clan-pytest-with-core> cmd=cmd, clan-pytest-with-core> cwd=options.cwd, clan-pytest-with-core> env=options.env, clan-pytest-with-core> ) clan-pytest-with-core> if not is_async_cancelled(): clan-pytest-with-core> process.wait() clan-pytest-with-core> clan-pytest-with-core> if TIME_TABLE: clan-pytest-with-core> TIME_TABLE.add(shlex.join(cmd), timeit.default_timer() - start) clan-pytest-with-core> clan-pytest-with-core> # Wait for the subprocess to finish clan-pytest-with-core> cmd_out = CmdOut( clan-pytest-with-core> stdout=stdout_buf, clan-pytest-with-core> stderr=stderr_buf, clan-pytest-with-core> cwd=options.cwd, clan-pytest-with-core> env=options.env, clan-pytest-with-core> command_list=cmd, clan-pytest-with-core> returncode=process.returncode, clan-pytest-with-core> msg=options.error_msg, clan-pytest-with-core> stdout_raw=stdout_raw, clan-pytest-with-core> ) clan-pytest-with-core> clan-pytest-with-core> if cmdlog.isEnabledFor(logging.DEBUG) and options.trace: clan-pytest-with-core> print_trace( clan-pytest-with-core> f"Command exited with return code {process.returncode}", clan-pytest-with-core> cmdlog, clan-pytest-with-core> options.prefix, clan-pytest-with-core> ) clan-pytest-with-core> clan-pytest-with-core> if options.check and process.returncode != 0: clan-pytest-with-core> if is_async_cancelled(): clan-pytest-with-core> cmd_out.msg = "Command cancelled" clan-pytest-with-core> > raise ClanCmdError(cmd_out) clan-pytest-with-core> E clan_lib.errors.ClanCmdError: clan-pytest-with-core> E =================================== Command ==================================== clan-pytest-with-core> E nix \ clan-pytest-with-core> E --extra-experimental-features 'nix-command flakes' \ clan-pytest-with-core> E --option warn-dirty \ clan-pytest-with-core> E false \ clan-pytest-with-core> E build \ clan-pytest-with-core> E --flake-registry '' \ clan-pytest-with-core> E --print-out-paths --print-build-logs \ clan-pytest-with-core> E --no-link --expr \ clan-pytest-with-core> E ' clan-pytest-with-core> E let clan-pytest-with-core> E flake = builtins.getFlake "path:/nix/store/n14yzbb0vd4a5w0nnj01qdmsj83sdrr7-source?narHash=sha256-iJBartEsr8guwWj8WkhKvdbX6sHJ61e2/AWvOsjMg3A="; clan-pytest-with-core> E selectLib = ( clan-pytest-with-core> E builtins.getFlake clan-pytest-with-core> E "path:/nix/store/cba1x9mxnwr8b36cw41bya7g6d5v1p7d-source?narHash=sha256-yxcNOha7Cfv2nhVpz9ZXSNKk0R7wt4AiBklJ8D24rVg=" clan-pytest-with-core> E ).lib; clan-pytest-with-core> E in clan-pytest-with-core> E derivation { clan-pytest-with-core> E name = "clan-flake-select"; clan-pytest-with-core> E result = builtins.toJSON [ clan-pytest-with-core> E (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "secretStore"}]'"'"''"'"') flake) clan-pytest-with-core> E ]; clan-pytest-with-core> E clan-pytest-with-core> E # We can always build this derivation locally, since /bin/sh is system independent, clan-pytest-with-core> E # remote builders would introduce needless overhead. clan-pytest-with-core> E preferLocalBuild = true; clan-pytest-with-core> E # Save the roundtrip to check the binary caches for trivial substitutions clan-pytest-with-core> E allowSubstitutes = false; clan-pytest-with-core> E clan-pytest-with-core> E passAsFile = [ "result" ]; clan-pytest-with-core> E system = "x86_64-linux"; clan-pytest-with-core> E builder = "/bin/sh"; clan-pytest-with-core> E args = [ clan-pytest-with-core> E "-c" clan-pytest-with-core> E '"'"''"'"' clan-pytest-with-core> E read -r x < "$resultPath"; printf %s "$x" > $out clan-pytest-with-core> E '"'"''"'"' clan-pytest-with-core> E ]; clan-pytest-with-core> E } clan-pytest-with-core> E ' \ clan-pytest-with-core> E --store /build/store clan-pytest-with-core> E clan-pytest-with-core> E ==================================== Stderr ==================================== clan-pytest-with-core> E warning: you don't have Internet access; disabling some network-dependent features clan-pytest-with-core> E error: clan-pytest-with-core> E … while calling the 'derivationStrict' builtin clan-pytest-with-core> E at :37:12: clan-pytest-with-core> E 36| clan-pytest-with-core> E 37| strict = derivationStrict drvAttrs; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 38| clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating derivation 'clan-flake-select' clan-pytest-with-core> E whose name attribute is located at «string»:10:17 clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating attribute 'result' of derivation 'clan-flake-select' clan-pytest-with-core> E at «string»:11:17: clan-pytest-with-core> E 10| name = "clan-flake-select"; clan-pytest-with-core> E 11| result = builtins.toJSON [ clan-pytest-with-core> E | ^ clan-pytest-with-core> E 12| (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "secretStore"}]'') flake) clan-pytest-with-core> E clan-pytest-with-core> E (stack trace truncated; use '--show-trace' to show the full, detailed trace) clan-pytest-with-core> E clan-pytest-with-core> E error: cannot update unlocked flake input 'clan-core' in pure mode clan-pytest-with-core> E clan-pytest-with-core> E Return Code: 1 clan-pytest-with-core> clan-pytest-with-core> /build/src/clan_lib/cmd/__init__.py:451: ClanCmdError clan-pytest-with-core> clan-pytest-with-core> The above exception was the direct cause of the following exception: clan-pytest-with-core> clan-pytest-with-core> monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7fffe24b58d0> clan-pytest-with-core> temporary_home = PosixPath('/build/pytest-u7ootkda') clan-pytest-with-core> caplog = <_pytest.logging.LogCaptureFixture object at 0x7fffe23f1160> clan-pytest-with-core> patch_get_clan_details = .get_clan_details at 0x7fffe2159170> clan-pytest-with-core> clan-pytest-with-core> @pytest.mark.broken_on_darwin clan-pytest-with-core> @pytest.mark.with_core clan-pytest-with-core> def test_create_flake_in_git_repo_without_flake_nix( clan-pytest-with-core> monkeypatch: pytest.MonkeyPatch, clan-pytest-with-core> temporary_home: Path, clan-pytest-with-core> caplog: pytest.LogCaptureFixture, clan-pytest-with-core> patch_get_clan_details: Any, # noqa: ARG001 clan-pytest-with-core> ) -> None: clan-pytest-with-core> """Regression: creating a clan inside a plain git repo must not fail or log errors.""" clan-pytest-with-core> run(["git", "init", str(temporary_home)]) clan-pytest-with-core> clan-pytest-with-core> new_clan_dir = temporary_home / "my-new-clan" clan-pytest-with-core> monkeypatch.setenv("LOGNAME", "testuser") clan-pytest-with-core> clan-pytest-with-core> with caplog.at_level(logging.WARNING): clan-pytest-with-core> > cli.run( clan-pytest-with-core> [ clan-pytest-with-core> "init", clan-pytest-with-core> str(new_clan_dir), clan-pytest-with-core> "--template=default", clan-pytest-with-core> "--no-update", clan-pytest-with-core> "--no-interactive", clan-pytest-with-core> ], clan-pytest-with-core> ) clan-pytest-with-core> clan-pytest-with-core> /build/src/clan_cli/tests/test_create_flake.py:177: clan-pytest-with-core> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ clan-pytest-with-core> /build/src/clan_cli/tests/helpers/cli.py:22: in run clan-pytest-with-core> parsed.func(parsed) clan-pytest-with-core> /build/src/clan_cli/init.py:54: in init_command clan-pytest-with-core> register_admin_keys( clan-pytest-with-core> /build/src/clan_cli/vars/keygen.py:89: in register_admin_keys clan-pytest-with-core> backend = Flake(str(flake_dir)).select(vars_settings_secret_store()) clan-pytest-with-core> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ clan-pytest-with-core> /build/src/clan_lib/flake/flake.py:1177: in select clan-pytest-with-core> self.get_from_nix([selector]) clan-pytest-with-core> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ clan-pytest-with-core> clan-pytest-with-core> self = Flake(identifier='/build/pytest-u7ootkda/my-new-clan', hash='sha256-iJBartEsr8guwWj8WkhKvdbX6sHJ61e2/AWvOsjMg3A=', sto...src/clan_lib/flake/flake.py", line 833, in _record_cache_miss\n stack_trace = "".join(traceback.format_stack())\n']) clan-pytest-with-core> selectors = ['clanInternals.vars.settings.secretStore'] clan-pytest-with-core> clan-pytest-with-core> def get_from_nix( clan-pytest-with-core> self, clan-pytest-with-core> selectors: list[str], clan-pytest-with-core> ) -> None: clan-pytest-with-core> """Retrieves specific attributes from a Nix flake using the provided selectors. clan-pytest-with-core> clan-pytest-with-core> This function interacts with the Nix build system to fetch and process clan-pytest-with-core> attributes from a flake. It uses the provided selectors to determine which clan-pytest-with-core> attributes to retrieve and optionally accepts additional Nix options for clan-pytest-with-core> customization. The results are cached for future use. clan-pytest-with-core> Used mostly as a lowlevel function for `precache` and `select` methods. clan-pytest-with-core> clan-pytest-with-core> Args: clan-pytest-with-core> selectors (list[str]): A list of attribute selectors to fetch from the flake. clan-pytest-with-core> nix_options (list[str] | None): Optional additional options to pass to the Nix build command. clan-pytest-with-core> clan-pytest-with-core> Raises: clan-pytest-with-core> ClanError: If the number of outputs does not match the number of selectors. clan-pytest-with-core> AssertionError: If the cache or flake cache path is not properly initialized. clan-pytest-with-core> clan-pytest-with-core> """ clan-pytest-with-core> if self._cache is None: clan-pytest-with-core> self.invalidate_cache() clan-pytest-with-core> if self._cache is None: clan-pytest-with-core> msg = "Cache cannot be None after invalidation" clan-pytest-with-core> raise ClanError(msg) clan-pytest-with-core> clan-pytest-with-core> nix_options = self.nix_options[:] if self.nix_options is not None else [] clan-pytest-with-core> clan-pytest-with-core> str_selectors = [ clan-pytest-with-core> selectors_as_json(parse_selector(selector)) for selector in selectors clan-pytest-with-core> ] clan-pytest-with-core> clan-pytest-with-core> config = nix_config() clan-pytest-with-core> clan-pytest-with-core> select_hash = "sha256-yxcNOha7Cfv2nhVpz9ZXSNKk0R7wt4AiBklJ8D24rVg=" clan-pytest-with-core> if not select_hash.startswith("sha256-"): clan-pytest-with-core> select_flake = Flake(str(select_source()), nix_options=nix_options) clan-pytest-with-core> select_flake.invalidate_cache() clan-pytest-with-core> if select_flake.hash is None: clan-pytest-with-core> msg = "this should be impossible as invalidate_cache() should always set `hash`" clan-pytest-with-core> raise ClanError(msg) clan-pytest-with-core> select_hash = select_flake.hash clan-pytest-with-core> clan-pytest-with-core> # fmt: off clan-pytest-with-core> nix_code = f""" clan-pytest-with-core> let clan-pytest-with-core> flake = builtins.getFlake "path:{self.store_path}?narHash={self.hash}"; clan-pytest-with-core> selectLib = ( clan-pytest-with-core> builtins.getFlake clan-pytest-with-core> "path:{select_source()}?narHash={select_hash}" clan-pytest-with-core> ).lib; clan-pytest-with-core> in clan-pytest-with-core> derivation {{ clan-pytest-with-core> name = "clan-flake-select"; clan-pytest-with-core> result = builtins.toJSON [ clan-pytest-with-core> {" ".join( clan-pytest-with-core> [ clan-pytest-with-core> f"(selectLib.applySelectors (builtins.fromJSON ''{attr}'') flake)" clan-pytest-with-core> for attr in str_selectors clan-pytest-with-core> ] clan-pytest-with-core> )} clan-pytest-with-core> ]; clan-pytest-with-core> clan-pytest-with-core> # We can always build this derivation locally, since /bin/sh is system independent, clan-pytest-with-core> # remote builders would introduce needless overhead. clan-pytest-with-core> preferLocalBuild = true; clan-pytest-with-core> # Save the roundtrip to check the binary caches for trivial substitutions clan-pytest-with-core> allowSubstitutes = false; clan-pytest-with-core> clan-pytest-with-core> passAsFile = [ "result" ]; clan-pytest-with-core> system = "{config["system"]}"; clan-pytest-with-core> builder = "/bin/sh"; clan-pytest-with-core> args = [ clan-pytest-with-core> "-c" clan-pytest-with-core> '' clan-pytest-with-core> read -r x < "$resultPath"; printf %s "$x" > $out clan-pytest-with-core> '' clan-pytest-with-core> ]; clan-pytest-with-core> }} clan-pytest-with-core> """ clan-pytest-with-core> trace = os.environ.get("CLAN_DEBUG_NIX_SELECTORS") == "1" clan-pytest-with-core> try: clan-pytest-with-core> build_output = Path( clan-pytest-with-core> run( clan-pytest-with-core> nix_build(["--expr", nix_code, *nix_options]), clan-pytest-with-core> RunOpts(log=Log.NONE, trace=trace), clan-pytest-with-core> ).stdout.strip(), clan-pytest-with-core> ) clan-pytest-with-core> except ClanCmdError as e: clan-pytest-with-core> if "error: attribute 'clan' missing" in str(e): clan-pytest-with-core> msg = ("This flake does not export the 'clan' attribute. \n" clan-pytest-with-core> "Please write 'clan = clan.config;' into the outputs of your flake.nix.") clan-pytest-with-core> raise ClanSelectError( clan-pytest-with-core> flake_identifier=self.identifier, clan-pytest-with-core> selectors=selectors, clan-pytest-with-core> cmd_error=e, clan-pytest-with-core> description=msg, clan-pytest-with-core> ) from e clan-pytest-with-core> clan-pytest-with-core> # If the error is about a missing attribute, we raise a ClanSelectError clan-pytest-with-core> # with the failed selectors and the flake identifier. clan-pytest-with-core> > raise ClanSelectError( clan-pytest-with-core> flake_identifier=self.identifier, clan-pytest-with-core> selectors=selectors, clan-pytest-with-core> cmd_error=e, clan-pytest-with-core> ) from e clan-pytest-with-core> E clan_lib.flake.flake.ClanSelectError: Error on: $ clan select 'clanInternals.vars.settings.secretStore' clan-pytest-with-core> E Reason: cannot update unlocked flake input 'clan-core' in pure mode. Use flag '--debug' to see full nix trace. clan-pytest-with-core> clan-pytest-with-core> /build/src/clan_lib/flake/flake.py:1094: ClanSelectError clan-pytest-with-core> ----------------------------- Captured stderr call ----------------------------- clan-pytest-with-core> git \ clan-pytest-with-core> init \ clan-pytest-with-core> /build/pytest-u7ootkda clan-pytest-with-core> Caller: /build/src/clan_cli/tests/test_create_flake.py:171::test_create_flake_in_git_repo_without_flake_nix clan-pytest-with-core> clan-pytest-with-core> hint: Using 'master' as the name for the initial branch. This default branch name clan-pytest-with-core> hint: will change to "main" in Git 3.0. To configure the initial branch name clan-pytest-with-core> hint: to use in all of your new repositories, which will suppress this warning, clan-pytest-with-core> hint: call: clan-pytest-with-core> hint: clan-pytest-with-core> hint: git config --global init.defaultBranch clan-pytest-with-core> hint: clan-pytest-with-core> hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and clan-pytest-with-core> hint: 'development'. The just-created branch can be renamed via this command: clan-pytest-with-core> hint: clan-pytest-with-core> hint: git branch -m clan-pytest-with-core> hint: clan-pytest-with-core> hint: Disable this message with "git config set advice.defaultBranchName false" clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_cli/tests/test_create_flake.py:171::test_create_flake_in_git_repo_without_flake_nix clan-pytest-with-core> clan-pytest-with-core> ------------------------------ Captured log call ------------------------------- clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:147 git \ clan-pytest-with-core> init \ clan-pytest-with-core> /build/pytest-u7ootkda clan-pytest-with-core> Caller: /build/src/clan_cli/tests/test_create_flake.py:171::test_create_flake_in_git_repo_without_flake_nix clan-pytest-with-core> clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 hint: Using 'master' as the name for the initial branch. This default branch name clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 hint: will change to "main" in Git 3.0. To configure the initial branch name clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 hint: to use in all of your new repositories, which will suppress this warning, clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 hint: call: clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 hint: clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 hint: git config --global init.defaultBranch clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 hint: clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 hint: 'development'. The just-created branch can be renamed via this command: clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 hint: clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 hint: git branch -m clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 hint: clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 hint: Disable this message with "git config set advice.defaultBranchName false" clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:147 Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_cli/tests/test_create_flake.py:171::test_create_flake_in_git_repo_without_flake_nix clan-pytest-with-core> ______________ test_create_flake_fallback_from_non_clan_directory ______________ clan-pytest-with-core> [gw7] linux -- Python 3.14.7 /nix/store/lb41b0anx1f98y9y5s9mdv97gjgsq740-python3-3.14.7/bin/python clan-pytest-with-core> clan-pytest-with-core> self = Flake(identifier='/build/pytest-5qq66sd4/new-clan', hash='sha256-PD0Kpfnpx8suRx8DjY4f060ujpEOzWR+NEaGWZjJ9YU=', store_...src/clan_lib/flake/flake.py", line 833, in _record_cache_miss\n stack_trace = "".join(traceback.format_stack())\n']) clan-pytest-with-core> selectors = ['clanInternals.vars.settings.secretStore'] clan-pytest-with-core> clan-pytest-with-core> def get_from_nix( clan-pytest-with-core> self, clan-pytest-with-core> selectors: list[str], clan-pytest-with-core> ) -> None: clan-pytest-with-core> """Retrieves specific attributes from a Nix flake using the provided selectors. clan-pytest-with-core> clan-pytest-with-core> This function interacts with the Nix build system to fetch and process clan-pytest-with-core> attributes from a flake. It uses the provided selectors to determine which clan-pytest-with-core> attributes to retrieve and optionally accepts additional Nix options for clan-pytest-with-core> customization. The results are cached for future use. clan-pytest-with-core> Used mostly as a lowlevel function for `precache` and `select` methods. clan-pytest-with-core> clan-pytest-with-core> Args: clan-pytest-with-core> selectors (list[str]): A list of attribute selectors to fetch from the flake. clan-pytest-with-core> nix_options (list[str] | None): Optional additional options to pass to the Nix build command. clan-pytest-with-core> clan-pytest-with-core> Raises: clan-pytest-with-core> ClanError: If the number of outputs does not match the number of selectors. clan-pytest-with-core> AssertionError: If the cache or flake cache path is not properly initialized. clan-pytest-with-core> clan-pytest-with-core> """ clan-pytest-with-core> if self._cache is None: clan-pytest-with-core> self.invalidate_cache() clan-pytest-with-core> if self._cache is None: clan-pytest-with-core> msg = "Cache cannot be None after invalidation" clan-pytest-with-core> raise ClanError(msg) clan-pytest-with-core> clan-pytest-with-core> nix_options = self.nix_options[:] if self.nix_options is not None else [] clan-pytest-with-core> clan-pytest-with-core> str_selectors = [ clan-pytest-with-core> selectors_as_json(parse_selector(selector)) for selector in selectors clan-pytest-with-core> ] clan-pytest-with-core> clan-pytest-with-core> config = nix_config() clan-pytest-with-core> clan-pytest-with-core> select_hash = "sha256-yxcNOha7Cfv2nhVpz9ZXSNKk0R7wt4AiBklJ8D24rVg=" clan-pytest-with-core> if not select_hash.startswith("sha256-"): clan-pytest-with-core> select_flake = Flake(str(select_source()), nix_options=nix_options) clan-pytest-with-core> select_flake.invalidate_cache() clan-pytest-with-core> if select_flake.hash is None: clan-pytest-with-core> msg = "this should be impossible as invalidate_cache() should always set `hash`" clan-pytest-with-core> raise ClanError(msg) clan-pytest-with-core> select_hash = select_flake.hash clan-pytest-with-core> clan-pytest-with-core> # fmt: off clan-pytest-with-core> nix_code = f""" clan-pytest-with-core> let clan-pytest-with-core> flake = builtins.getFlake "path:{self.store_path}?narHash={self.hash}"; clan-pytest-with-core> selectLib = ( clan-pytest-with-core> builtins.getFlake clan-pytest-with-core> "path:{select_source()}?narHash={select_hash}" clan-pytest-with-core> ).lib; clan-pytest-with-core> in clan-pytest-with-core> derivation {{ clan-pytest-with-core> name = "clan-flake-select"; clan-pytest-with-core> result = builtins.toJSON [ clan-pytest-with-core> {" ".join( clan-pytest-with-core> [ clan-pytest-with-core> f"(selectLib.applySelectors (builtins.fromJSON ''{attr}'') flake)" clan-pytest-with-core> for attr in str_selectors clan-pytest-with-core> ] clan-pytest-with-core> )} clan-pytest-with-core> ]; clan-pytest-with-core> clan-pytest-with-core> # We can always build this derivation locally, since /bin/sh is system independent, clan-pytest-with-core> # remote builders would introduce needless overhead. clan-pytest-with-core> preferLocalBuild = true; clan-pytest-with-core> # Save the roundtrip to check the binary caches for trivial substitutions clan-pytest-with-core> allowSubstitutes = false; clan-pytest-with-core> clan-pytest-with-core> passAsFile = [ "result" ]; clan-pytest-with-core> system = "{config["system"]}"; clan-pytest-with-core> builder = "/bin/sh"; clan-pytest-with-core> args = [ clan-pytest-with-core> "-c" clan-pytest-with-core> '' clan-pytest-with-core> read -r x < "$resultPath"; printf %s "$x" > $out clan-pytest-with-core> '' clan-pytest-with-core> ]; clan-pytest-with-core> }} clan-pytest-with-core> """ clan-pytest-with-core> trace = os.environ.get("CLAN_DEBUG_NIX_SELECTORS") == "1" clan-pytest-with-core> try: clan-pytest-with-core> build_output = Path( clan-pytest-with-core> > run( clan-pytest-with-core> nix_build(["--expr", nix_code, *nix_options]), clan-pytest-with-core> RunOpts(log=Log.NONE, trace=trace), clan-pytest-with-core> ).stdout.strip(), clan-pytest-with-core> ) clan-pytest-with-core> clan-pytest-with-core> /build/src/clan_lib/flake/flake.py:1076: clan-pytest-with-core> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ clan-pytest-with-core> clan-pytest-with-core> cmd = ['nix', '--extra-experimental-features', 'nix-command flakes', '--option', 'warn-dirty', 'false', ...] clan-pytest-with-core> options = RunOpts(input=None, stdout=None, stderr=None, env=None, cwd=PosixPath('/build/pytest-5qq66sd4/test_flake'), log= clan-pytest-with-core> def run( clan-pytest-with-core> cmd: list[str], clan-pytest-with-core> options: RunOpts | None = None, clan-pytest-with-core> ) -> CmdOut: clan-pytest-with-core> if options is None: clan-pytest-with-core> options = RunOpts() clan-pytest-with-core> if options.cwd is None: clan-pytest-with-core> options.cwd = Path.cwd() clan-pytest-with-core> clan-pytest-with-core> async_ctx = get_async_ctx() clan-pytest-with-core> # Fill in the options from the thread-local data clan-pytest-with-core> # if they are not set in the options clan-pytest-with-core> if async_ctx: clan-pytest-with-core> if options.prefix is None: clan-pytest-with-core> options.prefix = async_ctx.prefix clan-pytest-with-core> if options.stdout is None: clan-pytest-with-core> options.stdout = async_ctx.stdout clan-pytest-with-core> if options.stderr is None: clan-pytest-with-core> options.stderr = async_ctx.stderr clan-pytest-with-core> clan-pytest-with-core> if options.requires_root_perm: clan-pytest-with-core> cmd = cmd_with_root(cmd, options.graphical_perm) clan-pytest-with-core> # Use our sudo ask proxy here as well clan-pytest-with-core> options.needs_user_terminal = True clan-pytest-with-core> clan-pytest-with-core> if cmdlog.isEnabledFor(logging.DEBUG) and options.trace: clan-pytest-with-core> if options.input and isinstance(options.input, bytes): clan-pytest-with-core> # Always redact sensitive input (e.g., private keys, passwords) clan-pytest-with-core> if options.sensitive_input: clan-pytest-with-core> filtered_input = "<>" clan-pytest-with-core> elif any( clan-pytest-with-core> not ch.isprintable() for ch in options.input.decode("ascii", "replace") clan-pytest-with-core> ): clan-pytest-with-core> filtered_input = "<>" clan-pytest-with-core> else: clan-pytest-with-core> filtered_input = options.input.decode("ascii", "replace") clan-pytest-with-core> clan-pytest-with-core> print_trace( clan-pytest-with-core> f"echo '{filtered_input}' | {indent_command(cmd)}", clan-pytest-with-core> cmdlog, clan-pytest-with-core> options.prefix, clan-pytest-with-core> ) clan-pytest-with-core> else: clan-pytest-with-core> print_trace(f"{indent_command(cmd)}", cmdlog, options.prefix) clan-pytest-with-core> clan-pytest-with-core> start = timeit.default_timer() clan-pytest-with-core> with ExitStack() as stack: clan-pytest-with-core> stdin = subprocess.PIPE if isinstance(options.input, bytes) else options.input clan-pytest-with-core> process = stack.enter_context( clan-pytest-with-core> subprocess.Popen( clan-pytest-with-core> cmd, clan-pytest-with-core> cwd=str(options.cwd), clan-pytest-with-core> env=options.env, clan-pytest-with-core> stdin=stdin, clan-pytest-with-core> stdout=subprocess.PIPE, clan-pytest-with-core> stderr=subprocess.PIPE, clan-pytest-with-core> start_new_session=not options.needs_user_terminal, clan-pytest-with-core> shell=options.shell, clan-pytest-with-core> ), clan-pytest-with-core> ) clan-pytest-with-core> clan-pytest-with-core> if options.needs_user_terminal: clan-pytest-with-core> # we didn't allocate a new session, so we can't terminate the process group clan-pytest-with-core> stack.enter_context(terminate_process(process)) clan-pytest-with-core> else: clan-pytest-with-core> stack.enter_context(terminate_process_group(process)) clan-pytest-with-core> clan-pytest-with-core> input_bytes = options.input if isinstance(options.input, bytes) else None clan-pytest-with-core> clan-pytest-with-core> stdout_buf, stderr_buf, stdout_raw = handle_io( clan-pytest-with-core> process, clan-pytest-with-core> options.log, clan-pytest-with-core> prefix=options.prefix, clan-pytest-with-core> msg_color=options.msg_color, clan-pytest-with-core> timeout=options.timeout, clan-pytest-with-core> input_bytes=input_bytes, clan-pytest-with-core> stdout=options.stdout, clan-pytest-with-core> stderr=options.stderr, clan-pytest-with-core> cmd=cmd, clan-pytest-with-core> cwd=options.cwd, clan-pytest-with-core> env=options.env, clan-pytest-with-core> ) clan-pytest-with-core> if not is_async_cancelled(): clan-pytest-with-core> process.wait() clan-pytest-with-core> clan-pytest-with-core> if TIME_TABLE: clan-pytest-with-core> TIME_TABLE.add(shlex.join(cmd), timeit.default_timer() - start) clan-pytest-with-core> clan-pytest-with-core> # Wait for the subprocess to finish clan-pytest-with-core> cmd_out = CmdOut( clan-pytest-with-core> stdout=stdout_buf, clan-pytest-with-core> stderr=stderr_buf, clan-pytest-with-core> cwd=options.cwd, clan-pytest-with-core> env=options.env, clan-pytest-with-core> command_list=cmd, clan-pytest-with-core> returncode=process.returncode, clan-pytest-with-core> msg=options.error_msg, clan-pytest-with-core> stdout_raw=stdout_raw, clan-pytest-with-core> ) clan-pytest-with-core> clan-pytest-with-core> if cmdlog.isEnabledFor(logging.DEBUG) and options.trace: clan-pytest-with-core> print_trace( clan-pytest-with-core> f"Command exited with return code {process.returncode}", clan-pytest-with-core> cmdlog, clan-pytest-with-core> options.prefix, clan-pytest-with-core> ) clan-pytest-with-core> clan-pytest-with-core> if options.check and process.returncode != 0: clan-pytest-with-core> if is_async_cancelled(): clan-pytest-with-core> cmd_out.msg = "Command cancelled" clan-pytest-with-core> > raise ClanCmdError(cmd_out) clan-pytest-with-core> E clan_lib.errors.ClanCmdError: clan-pytest-with-core> E =================================== Command ==================================== clan-pytest-with-core> E nix \ clan-pytest-with-core> E --extra-experimental-features 'nix-command flakes' \ clan-pytest-with-core> E --option warn-dirty \ clan-pytest-with-core> E false \ clan-pytest-with-core> E build \ clan-pytest-with-core> E --flake-registry '' \ clan-pytest-with-core> E --print-out-paths --print-build-logs \ clan-pytest-with-core> E --show-trace --no-link \ clan-pytest-with-core> E --expr ' clan-pytest-with-core> E let clan-pytest-with-core> E flake = builtins.getFlake "path:/nix/store/99rjv6rjs49dayvv936b4g8cnp5n225y-source?narHash=sha256-PD0Kpfnpx8suRx8DjY4f060ujpEOzWR+NEaGWZjJ9YU="; clan-pytest-with-core> E selectLib = ( clan-pytest-with-core> E builtins.getFlake clan-pytest-with-core> E "path:/nix/store/cba1x9mxnwr8b36cw41bya7g6d5v1p7d-source?narHash=sha256-yxcNOha7Cfv2nhVpz9ZXSNKk0R7wt4AiBklJ8D24rVg=" clan-pytest-with-core> E ).lib; clan-pytest-with-core> E in clan-pytest-with-core> E derivation { clan-pytest-with-core> E name = "clan-flake-select"; clan-pytest-with-core> E result = builtins.toJSON [ clan-pytest-with-core> E (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "secretStore"}]'"'"''"'"') flake) clan-pytest-with-core> E ]; clan-pytest-with-core> E clan-pytest-with-core> E # We can always build this derivation locally, since /bin/sh is system independent, clan-pytest-with-core> E # remote builders would introduce needless overhead. clan-pytest-with-core> E preferLocalBuild = true; clan-pytest-with-core> E # Save the roundtrip to check the binary caches for trivial substitutions clan-pytest-with-core> E allowSubstitutes = false; clan-pytest-with-core> E clan-pytest-with-core> E passAsFile = [ "result" ]; clan-pytest-with-core> E system = "x86_64-linux"; clan-pytest-with-core> E builder = "/bin/sh"; clan-pytest-with-core> E args = [ clan-pytest-with-core> E "-c" clan-pytest-with-core> E '"'"''"'"' clan-pytest-with-core> E read -r x < "$resultPath"; printf %s "$x" > $out clan-pytest-with-core> E '"'"''"'"' clan-pytest-with-core> E ]; clan-pytest-with-core> E } clan-pytest-with-core> E ' \ clan-pytest-with-core> E --store /build/store clan-pytest-with-core> E clan-pytest-with-core> E ==================================== Stderr ==================================== clan-pytest-with-core> E warning: you don't have Internet access; disabling some network-dependent features clan-pytest-with-core> E error: clan-pytest-with-core> E … while calling the 'derivationStrict' builtin clan-pytest-with-core> E at :37:12: clan-pytest-with-core> E 36| clan-pytest-with-core> E 37| strict = derivationStrict drvAttrs; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 38| clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating derivation 'clan-flake-select' clan-pytest-with-core> E whose name attribute is located at «string»:10:17 clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating attribute 'result' of derivation 'clan-flake-select' clan-pytest-with-core> E at «string»:11:17: clan-pytest-with-core> E 10| name = "clan-flake-select"; clan-pytest-with-core> E 11| result = builtins.toJSON [ clan-pytest-with-core> E | ^ clan-pytest-with-core> E 12| (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "secretStore"}]'') flake) clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'toJSON' builtin clan-pytest-with-core> E at «string»:11:26: clan-pytest-with-core> E 10| name = "clan-flake-select"; clan-pytest-with-core> E 11| result = builtins.toJSON [ clan-pytest-with-core> E | ^ clan-pytest-with-core> E 12| (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "secretStore"}]'') flake) clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating list element at index 0 clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at «string»:12:22: clan-pytest-with-core> E 11| result = builtins.toJSON [ clan-pytest-with-core> E 12| (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "secretStore"}]'') flake) clan-pytest-with-core> E | ^ clan-pytest-with-core> E 13| ]; clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'applySelectors' clan-pytest-with-core> E at /build/store/nix/store/cba1x9mxnwr8b36cw41bya7g6d5v1p7d-source/select.nix:262:16: clan-pytest-with-core> E 261| applySelectors = clan-pytest-with-core> E 262| selectors: obj: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 263| let clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/cba1x9mxnwr8b36cw41bya7g6d5v1p7d-source/select.nix:352:5: clan-pytest-with-core> E 351| in clan-pytest-with-core> E 352| recurse selectors 0 obj; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 353| clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'recurse' clan-pytest-with-core> E at /build/store/nix/store/cba1x9mxnwr8b36cw41bya7g6d5v1p7d-source/select.nix:265:25: clan-pytest-with-core> E 264| recurse = clan-pytest-with-core> E 265| selectors: idx: obj: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 266| # we are done clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating a branch condition clan-pytest-with-core> E at /build/store/nix/store/cba1x9mxnwr8b36cw41bya7g6d5v1p7d-source/select.nix:281:11: clan-pytest-with-core> E 280| # lists clan-pytest-with-core> E 281| if builtins.isList obj then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 282| if selector.type == "all" then clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'isList' builtin clan-pytest-with-core> E at /build/store/nix/store/cba1x9mxnwr8b36cw41bya7g6d5v1p7d-source/select.nix:281:14: clan-pytest-with-core> E 280| # lists clan-pytest-with-core> E 281| if builtins.isList obj then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 282| if selector.type == "all" then clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'getFlake' builtin clan-pytest-with-core> E at «string»:3:23: clan-pytest-with-core> E 2| let clan-pytest-with-core> E 3| flake = builtins.getFlake "path:/nix/store/99rjv6rjs49dayvv936b4g8cnp5n225y-source?narHash=sha256-PD0Kpfnpx8suRx8DjY4f060ujpEOzWR+NEaGWZjJ9YU="; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 4| selectLib = ( clan-pytest-with-core> E clan-pytest-with-core> E … while updating the lock file of flake 'path:/nix/store/99rjv6rjs49dayvv936b4g8cnp5n225y-source?lastModified=0&narHash=sha256-PD0Kpfnpx8suRx8DjY4f060ujpEOzWR%2BNEaGWZjJ9YU%3D' clan-pytest-with-core> E clan-pytest-with-core> E … while updating the flake input 'clan-core' clan-pytest-with-core> E clan-pytest-with-core> E error: cannot update unlocked flake input 'clan-core' in pure mode clan-pytest-with-core> E clan-pytest-with-core> E Return Code: 1 clan-pytest-with-core> clan-pytest-with-core> /build/src/clan_lib/cmd/__init__.py:451: ClanCmdError clan-pytest-with-core> clan-pytest-with-core> The above exception was the direct cause of the following exception: clan-pytest-with-core> clan-pytest-with-core> monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7fffe2612a90> clan-pytest-with-core> temporary_home = PosixPath('/build/pytest-5qq66sd4') clan-pytest-with-core> test_flake = FlakeForTest(path=PosixPath('/build/pytest-5qq66sd4/test_flake')) clan-pytest-with-core> patch_get_clan_details = .get_clan_details at 0x7fffe215a2a0> clan-pytest-with-core> clan-pytest-with-core> @pytest.mark.broken_on_darwin clan-pytest-with-core> @pytest.mark.with_core clan-pytest-with-core> def test_create_flake_fallback_from_non_clan_directory( clan-pytest-with-core> monkeypatch: pytest.MonkeyPatch, clan-pytest-with-core> temporary_home: Path, clan-pytest-with-core> test_flake: FlakeForTest, clan-pytest-with-core> patch_get_clan_details: Any, # noqa: ARG001 clan-pytest-with-core> ) -> None: clan-pytest-with-core> """Test that clan flakes create falls back to builtin templates from non-clan flake.""" clan-pytest-with-core> monkeypatch.chdir(test_flake.path) clan-pytest-with-core> new_clan_dir = temporary_home / "new-clan" clan-pytest-with-core> monkeypatch.setenv("LOGNAME", "testuser") clan-pytest-with-core> clan-pytest-with-core> > cli.run( clan-pytest-with-core> [ clan-pytest-with-core> "init", clan-pytest-with-core> str(new_clan_dir), clan-pytest-with-core> "--template=default", clan-pytest-with-core> "--no-update", clan-pytest-with-core> "--no-interactive", clan-pytest-with-core> ], clan-pytest-with-core> ) clan-pytest-with-core> clan-pytest-with-core> /build/src/clan_cli/tests/test_create_flake.py:206: clan-pytest-with-core> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ clan-pytest-with-core> /build/src/clan_cli/tests/helpers/cli.py:22: in run clan-pytest-with-core> parsed.func(parsed) clan-pytest-with-core> /build/src/clan_cli/init.py:54: in init_command clan-pytest-with-core> register_admin_keys( clan-pytest-with-core> /build/src/clan_cli/vars/keygen.py:89: in register_admin_keys clan-pytest-with-core> backend = Flake(str(flake_dir)).select(vars_settings_secret_store()) clan-pytest-with-core> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ clan-pytest-with-core> /build/src/clan_lib/flake/flake.py:1177: in select clan-pytest-with-core> self.get_from_nix([selector]) clan-pytest-with-core> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ clan-pytest-with-core> clan-pytest-with-core> self = Flake(identifier='/build/pytest-5qq66sd4/new-clan', hash='sha256-PD0Kpfnpx8suRx8DjY4f060ujpEOzWR+NEaGWZjJ9YU=', store_...src/clan_lib/flake/flake.py", line 833, in _record_cache_miss\n stack_trace = "".join(traceback.format_stack())\n']) clan-pytest-with-core> selectors = ['clanInternals.vars.settings.secretStore'] clan-pytest-with-core> clan-pytest-with-core> def get_from_nix( clan-pytest-with-core> self, clan-pytest-with-core> selectors: list[str], clan-pytest-with-core> ) -> None: clan-pytest-with-core> """Retrieves specific attributes from a Nix flake using the provided selectors. clan-pytest-with-core> clan-pytest-with-core> This function interacts with the Nix build system to fetch and process clan-pytest-with-core> attributes from a flake. It uses the provided selectors to determine which clan-pytest-with-core> attributes to retrieve and optionally accepts additional Nix options for clan-pytest-with-core> customization. The results are cached for future use. clan-pytest-with-core> Used mostly as a lowlevel function for `precache` and `select` methods. clan-pytest-with-core> clan-pytest-with-core> Args: clan-pytest-with-core> selectors (list[str]): A list of attribute selectors to fetch from the flake. clan-pytest-with-core> nix_options (list[str] | None): Optional additional options to pass to the Nix build command. clan-pytest-with-core> clan-pytest-with-core> Raises: clan-pytest-with-core> ClanError: If the number of outputs does not match the number of selectors. clan-pytest-with-core> AssertionError: If the cache or flake cache path is not properly initialized. clan-pytest-with-core> clan-pytest-with-core> """ clan-pytest-with-core> if self._cache is None: clan-pytest-with-core> self.invalidate_cache() clan-pytest-with-core> if self._cache is None: clan-pytest-with-core> msg = "Cache cannot be None after invalidation" clan-pytest-with-core> raise ClanError(msg) clan-pytest-with-core> clan-pytest-with-core> nix_options = self.nix_options[:] if self.nix_options is not None else [] clan-pytest-with-core> clan-pytest-with-core> str_selectors = [ clan-pytest-with-core> selectors_as_json(parse_selector(selector)) for selector in selectors clan-pytest-with-core> ] clan-pytest-with-core> clan-pytest-with-core> config = nix_config() clan-pytest-with-core> clan-pytest-with-core> select_hash = "sha256-yxcNOha7Cfv2nhVpz9ZXSNKk0R7wt4AiBklJ8D24rVg=" clan-pytest-with-core> if not select_hash.startswith("sha256-"): clan-pytest-with-core> select_flake = Flake(str(select_source()), nix_options=nix_options) clan-pytest-with-core> select_flake.invalidate_cache() clan-pytest-with-core> if select_flake.hash is None: clan-pytest-with-core> msg = "this should be impossible as invalidate_cache() should always set `hash`" clan-pytest-with-core> raise ClanError(msg) clan-pytest-with-core> select_hash = select_flake.hash clan-pytest-with-core> clan-pytest-with-core> # fmt: off clan-pytest-with-core> nix_code = f""" clan-pytest-with-core> let clan-pytest-with-core> flake = builtins.getFlake "path:{self.store_path}?narHash={self.hash}"; clan-pytest-with-core> selectLib = ( clan-pytest-with-core> builtins.getFlake clan-pytest-with-core> "path:{select_source()}?narHash={select_hash}" clan-pytest-with-core> ).lib; clan-pytest-with-core> in clan-pytest-with-core> derivation {{ clan-pytest-with-core> name = "clan-flake-select"; clan-pytest-with-core> result = builtins.toJSON [ clan-pytest-with-core> {" ".join( clan-pytest-with-core> [ clan-pytest-with-core> f"(selectLib.applySelectors (builtins.fromJSON ''{attr}'') flake)" clan-pytest-with-core> for attr in str_selectors clan-pytest-with-core> ] clan-pytest-with-core> )} clan-pytest-with-core> ]; clan-pytest-with-core> clan-pytest-with-core> # We can always build this derivation locally, since /bin/sh is system independent, clan-pytest-with-core> # remote builders would introduce needless overhead. clan-pytest-with-core> preferLocalBuild = true; clan-pytest-with-core> # Save the roundtrip to check the binary caches for trivial substitutions clan-pytest-with-core> allowSubstitutes = false; clan-pytest-with-core> clan-pytest-with-core> passAsFile = [ "result" ]; clan-pytest-with-core> system = "{config["system"]}"; clan-pytest-with-core> builder = "/bin/sh"; clan-pytest-with-core> args = [ clan-pytest-with-core> "-c" clan-pytest-with-core> '' clan-pytest-with-core> read -r x < "$resultPath"; printf %s "$x" > $out clan-pytest-with-core> '' clan-pytest-with-core> ]; clan-pytest-with-core> }} clan-pytest-with-core> """ clan-pytest-with-core> trace = os.environ.get("CLAN_DEBUG_NIX_SELECTORS") == "1" clan-pytest-with-core> try: clan-pytest-with-core> build_output = Path( clan-pytest-with-core> run( clan-pytest-with-core> nix_build(["--expr", nix_code, *nix_options]), clan-pytest-with-core> RunOpts(log=Log.NONE, trace=trace), clan-pytest-with-core> ).stdout.strip(), clan-pytest-with-core> ) clan-pytest-with-core> except ClanCmdError as e: clan-pytest-with-core> if "error: attribute 'clan' missing" in str(e): clan-pytest-with-core> msg = ("This flake does not export the 'clan' attribute. \n" clan-pytest-with-core> "Please write 'clan = clan.config;' into the outputs of your flake.nix.") clan-pytest-with-core> raise ClanSelectError( clan-pytest-with-core> flake_identifier=self.identifier, clan-pytest-with-core> selectors=selectors, clan-pytest-with-core> cmd_error=e, clan-pytest-with-core> description=msg, clan-pytest-with-core> ) from e clan-pytest-with-core> clan-pytest-with-core> # If the error is about a missing attribute, we raise a ClanSelectError clan-pytest-with-core> # with the failed selectors and the flake identifier. clan-pytest-with-core> > raise ClanSelectError( clan-pytest-with-core> flake_identifier=self.identifier, clan-pytest-with-core> selectors=selectors, clan-pytest-with-core> cmd_error=e, clan-pytest-with-core> ) from e clan-pytest-with-core> E clan_lib.flake.flake.ClanSelectError: Error on: $ clan select 'clanInternals.vars.settings.secretStore' clan-pytest-with-core> E Reason: cannot update unlocked flake input 'clan-core' in pure mode. Use flag '--debug' to see full nix trace. clan-pytest-with-core> clan-pytest-with-core> /build/src/clan_lib/flake/flake.py:1094: ClanSelectError clan-pytest-with-core> ---------------------------- Captured stdout setup ----------------------------- clan-pytest-with-core> file: /build/pytest-5qq66sd4/test_flake/flake.nix clan-pytest-with-core> clan_core: None clan-pytest-with-core> flake: /build/pytest-5qq66sd4/test_flake clan-pytest-with-core> Initialized empty Git repository in /build/pytest-5qq66sd4/test_flake/.git/ clan-pytest-with-core> [main (root-commit) 9c3dd27] Initial commit clan-pytest-with-core> 5 files changed, 76 insertions(+) clan-pytest-with-core> create mode 100644 .clan-flake clan-pytest-with-core> create mode 100644 fake-module.nix clan-pytest-with-core> create mode 100644 flake.lock clan-pytest-with-core> create mode 100644 flake.nix clan-pytest-with-core> create mode 100644 nixosModules/machine1.nix clan-pytest-with-core> ---------------------------- Captured stderr setup ----------------------------- clan-pytest-with-core> warning: you don't have Internet access; disabling some network-dependent features clan-pytest-with-core> warning: creating lock file "/build/pytest-5qq66sd4/test_flake/flake.lock": clan-pytest-with-core> • Added input 'nixpkgs': clan-pytest-with-core> 'path:/nix/store/vlhb7haagkjabf20g1vg9kxi53fcpi17-source?lastModified=0&narHash=sha256-R4B%2BRRYmze9htmPZ8xeF19mchTSH99GdaqanKCW8CF8%3D' (1970-01-01) clan-pytest-with-core> !! $HOME does not point to a temp directory!! HOME=/build/pytest-5qq66sd4 clan-pytest-with-core> ------------------------------ Captured log setup ------------------------------ clan-pytest-with-core> WARNING clan_cli.tests.fixtures_flakes:fixtures_flakes.py:368 !! $HOME does not point to a temp directory!! HOME=/build/pytest-5qq66sd4 clan-pytest-with-core> ----------------------------- Captured stderr call ----------------------------- clan-pytest-with-core> [localhost] $ clan init /build/pytest-5qq66sd4/new-clan --template=default --no-update --no-interactive clan-pytest-with-core> Caller: /build/src/clan_cli/tests/test_create_flake.py:206::test_create_flake_fallback_from_non_clan_directory clan-pytest-with-core> clan-pytest-with-core> age-keygen clan-pytest-with-core> Caller: /build/src/clan_cli/secrets/sops.py:382::generate_private_key clan-pytest-with-core> clan-pytest-with-core> Public key: age1rrk8ycjqv9daugv5tndvqv5f6q70qzpq0sehhryhmmujrrzmwuaqtddm2d clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_cli/secrets/sops.py:382::generate_private_key clan-pytest-with-core> clan-pytest-with-core> Generated age private key at '/build/pytest-5qq66sd4/.config/sops/age/keys.txt' for your user. clan-pytest-with-core> Please back it up on a secure location or you will lose access to your secrets. clan-pytest-with-core> nix \ clan-pytest-with-core> --extra-experimental-features 'nix-command flakes' \ clan-pytest-with-core> --option warn-dirty \ clan-pytest-with-core> false \ clan-pytest-with-core> flake \ clan-pytest-with-core> metadata \ clan-pytest-with-core> --json /build/pytest-5qq66sd4/test_flake \ clan-pytest-with-core> --store /build/store clan-pytest-with-core> Caller: /build/src/clan_lib/nix/__init__.py:144::nix_metadata clan-pytest-with-core> clan-pytest-with-core> warning: you don't have Internet access; disabling some network-dependent features clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/nix/__init__.py:144::nix_metadata clan-pytest-with-core> clan-pytest-with-core> Prefetching flake /build/pytest-5qq66sd4/test_flake clan-pytest-with-core> warning: you don't have Internet access; disabling some network-dependent features clan-pytest-with-core> Loading flake cache from file /build/clan-flake-cache/flakes-v2/c1468b422729d3461d4dd6c9c5e02c7941c8e6a1 clan-pytest-with-core> Prefetching flake /build/pytest-5qq66sd4/test_flake clan-pytest-with-core> warning: you don't have Internet access; disabling some network-dependent features clan-pytest-with-core> Loading flake cache from file /build/clan-flake-cache/flakes-v2/c1468b422729d3461d4dd6c9c5e02c7941c8e6a1 clan-pytest-with-core> Cache miss for clanInternals.templates.clan."default" clan-pytest-with-core> Template 'default' not found in /build/pytest-5qq66sd4/test_flake, trying builtin template clan-pytest-with-core> Prefetching flake /build/src/clan_lib/clan_core_templates clan-pytest-with-core> warning: you don't have Internet access; disabling some network-dependent features clan-pytest-with-core> Loading flake cache from file /build/clan-flake-cache/flakes-v2/61f7e410abb4ac31c6cde3e73e865823fc5f1087 clan-pytest-with-core> (cached) $ clan select 'clanInternals.templates.clan."default"' clan-pytest-with-core> chmod \ clan-pytest-with-core> -R u+w \ clan-pytest-with-core> /build/pytest-5qq66sd4/new-clan clan-pytest-with-core> Caller: /build/src/clan_lib/templates/filesystem.py:36::copy_from_nixstore clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/templates/filesystem.py:36::copy_from_nixstore clan-pytest-with-core> clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-5qq66sd4/new-clan \ clan-pytest-with-core> init clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:173::create_clan clan-pytest-with-core> clan-pytest-with-core> hint: Using 'master' as the name for the initial branch. This default branch name clan-pytest-with-core> hint: will change to "main" in Git 3.0. To configure the initial branch name clan-pytest-with-core> hint: to use in all of your new repositories, which will suppress this warning, clan-pytest-with-core> hint: call: clan-pytest-with-core> hint: clan-pytest-with-core> hint: git config --global init.defaultBranch clan-pytest-with-core> hint: clan-pytest-with-core> hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and clan-pytest-with-core> hint: 'development'. The just-created branch can be renamed via this command: clan-pytest-with-core> hint: clan-pytest-with-core> hint: git branch -m clan-pytest-with-core> hint: clan-pytest-with-core> hint: Disable this message with "git config set advice.defaultBranchName false" clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:173::create_clan clan-pytest-with-core> clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-5qq66sd4/new-clan \ clan-pytest-with-core> add \ clan-pytest-with-core> . clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:174::create_clan clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:174::create_clan clan-pytest-with-core> clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-5qq66sd4/new-clan \ clan-pytest-with-core> config \ clan-pytest-with-core> user.name clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:177::create_clan clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 1 clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:177::create_clan clan-pytest-with-core> clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-5qq66sd4/new-clan \ clan-pytest-with-core> config \ clan-pytest-with-core> user.name \ clan-pytest-with-core> clan-tool clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:182::create_clan clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:182::create_clan clan-pytest-with-core> clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-5qq66sd4/new-clan \ clan-pytest-with-core> config \ clan-pytest-with-core> user.email clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:184::create_clan clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 1 clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:184::create_clan clan-pytest-with-core> clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-5qq66sd4/new-clan \ clan-pytest-with-core> config \ clan-pytest-with-core> user.email \ clan-pytest-with-core> clan@example.com clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:189::create_clan clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:189::create_clan clan-pytest-with-core> clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-5qq66sd4/new-clan \ clan-pytest-with-core> add \ clan-pytest-with-core> . clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:203::create_clan clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:203::create_clan clan-pytest-with-core> clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-5qq66sd4/new-clan \ clan-pytest-with-core> commit \ clan-pytest-with-core> -m 'Initial commit' clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:204::create_clan clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:204::create_clan clan-pytest-with-core> clan-pytest-with-core> Prefetching flake /build/pytest-5qq66sd4/new-clan clan-pytest-with-core> warning: you don't have Internet access; disabling some network-dependent features clan-pytest-with-core> Cache miss for clanInternals.vars.settings.secretStore clan-pytest-with-core> ------------------------------ Captured log call ------------------------------- clan-pytest-with-core> DEBUG clan_cli.tests.helpers.cli:__init__.py:147 $ clan init /build/pytest-5qq66sd4/new-clan --template=default --no-update --no-interactive clan-pytest-with-core> Caller: /build/src/clan_cli/tests/test_create_flake.py:206::test_create_flake_fallback_from_non_clan_directory clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:147 age-keygen clan-pytest-with-core> Caller: /build/src/clan_cli/secrets/sops.py:382::generate_private_key clan-pytest-with-core> clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 Public key: age1rrk8ycjqv9daugv5tndvqv5f6q70qzpq0sehhryhmmujrrzmwuaqtddm2d clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:147 Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_cli/secrets/sops.py:382::generate_private_key clan-pytest-with-core> clan-pytest-with-core> INFO clan_cli.secrets.key:key.py:41 Generated age private key at '/build/pytest-5qq66sd4/.config/sops/age/keys.txt' for your user. clan-pytest-with-core> Please back it up on a secure location or you will lose access to your secrets. clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:147 nix \ clan-pytest-with-core> --extra-experimental-features 'nix-command flakes' \ clan-pytest-with-core> --option warn-dirty \ clan-pytest-with-core> false \ clan-pytest-with-core> flake \ clan-pytest-with-core> metadata \ clan-pytest-with-core> --json /build/pytest-5qq66sd4/test_flake \ clan-pytest-with-core> --store /build/store clan-pytest-with-core> Caller: /build/src/clan_lib/nix/__init__.py:144::nix_metadata clan-pytest-with-core> clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 warning: you don't have Internet access; disabling some network-dependent features clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:147 Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/nix/__init__.py:144::nix_metadata clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:927 Prefetching flake /build/pytest-5qq66sd4/test_flake clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 warning: you don't have Internet access; disabling some network-dependent features clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:789 Loading flake cache from file /build/clan-flake-cache/flakes-v2/c1468b422729d3461d4dd6c9c5e02c7941c8e6a1 clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:927 Prefetching flake /build/pytest-5qq66sd4/test_flake clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 warning: you don't have Internet access; disabling some network-dependent features clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:789 Loading flake cache from file /build/clan-flake-cache/flakes-v2/c1468b422729d3461d4dd6c9c5e02c7941c8e6a1 clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1174 Cache miss for clanInternals.templates.clan."default" clan-pytest-with-core> INFO clan_lib.templates.handler:handler.py:142 Template 'default' not found in /build/pytest-5qq66sd4/test_flake, trying builtin template clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:927 Prefetching flake /build/src/clan_lib/clan_core_templates clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 warning: you don't have Internet access; disabling some network-dependent features clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:789 Loading flake cache from file /build/clan-flake-cache/flakes-v2/61f7e410abb4ac31c6cde3e73e865823fc5f1087 clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1179 (cached) $ clan select 'clanInternals.templates.clan."default"' clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:147 chmod \ clan-pytest-with-core> -R u+w \ clan-pytest-with-core> /build/pytest-5qq66sd4/new-clan clan-pytest-with-core> Caller: /build/src/clan_lib/templates/filesystem.py:36::copy_from_nixstore clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:147 Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/templates/filesystem.py:36::copy_from_nixstore clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:147 git \ clan-pytest-with-core> -C /build/pytest-5qq66sd4/new-clan \ clan-pytest-with-core> init clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:173::create_clan clan-pytest-with-core> clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 hint: Using 'master' as the name for the initial branch. This default branch name clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 hint: will change to "main" in Git 3.0. To configure the initial branch name clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 hint: to use in all of your new repositories, which will suppress this warning, clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 hint: call: clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 hint: clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 hint: git config --global init.defaultBranch clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 hint: clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 hint: 'development'. The just-created branch can be renamed via this command: clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 hint: clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 hint: git branch -m clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 hint: clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 hint: Disable this message with "git config set advice.defaultBranchName false" clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:147 Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:173::create_clan clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:147 git \ clan-pytest-with-core> -C /build/pytest-5qq66sd4/new-clan \ clan-pytest-with-core> add \ clan-pytest-with-core> . clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:174::create_clan clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:147 Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:174::create_clan clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:147 git \ clan-pytest-with-core> -C /build/pytest-5qq66sd4/new-clan \ clan-pytest-with-core> config \ clan-pytest-with-core> user.name clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:177::create_clan clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:147 Command exited with return code 1 clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:177::create_clan clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:147 git \ clan-pytest-with-core> -C /build/pytest-5qq66sd4/new-clan \ clan-pytest-with-core> config \ clan-pytest-with-core> user.name \ clan-pytest-with-core> clan-tool clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:182::create_clan clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:147 Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:182::create_clan clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:147 git \ clan-pytest-with-core> -C /build/pytest-5qq66sd4/new-clan \ clan-pytest-with-core> config \ clan-pytest-with-core> user.email clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:184::create_clan clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:147 Command exited with return code 1 clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:184::create_clan clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:147 git \ clan-pytest-with-core> -C /build/pytest-5qq66sd4/new-clan \ clan-pytest-with-core> config \ clan-pytest-with-core> user.email \ clan-pytest-with-core> clan@example.com clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:189::create_clan clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:147 Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:189::create_clan clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:147 git \ clan-pytest-with-core> -C /build/pytest-5qq66sd4/new-clan \ clan-pytest-with-core> add \ clan-pytest-with-core> . clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:203::create_clan clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:147 Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:203::create_clan clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:147 git \ clan-pytest-with-core> -C /build/pytest-5qq66sd4/new-clan \ clan-pytest-with-core> commit \ clan-pytest-with-core> -m 'Initial commit' clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:204::create_clan clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:147 Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:204::create_clan clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:927 Prefetching flake /build/pytest-5qq66sd4/new-clan clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 warning: you don't have Internet access; disabling some network-dependent features clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1174 Cache miss for clanInternals.vars.settings.secretStore clan-pytest-with-core> _______________ test_create_flake_with_local_template_reference ________________ clan-pytest-with-core> [gw0] linux -- Python 3.14.7 /nix/store/lb41b0anx1f98y9y5s9mdv97gjgsq740-python3-3.14.7/bin/python clan-pytest-with-core> clan-pytest-with-core> self = Flake(identifier='/build/pytest-yajjqlfw/new-clan', hash='sha256-N3X3rmTVbHvU7PZTvlX5WM2YoLpt08Wp7KEiotjmq98=', store_...src/clan_lib/flake/flake.py", line 833, in _record_cache_miss\n stack_trace = "".join(traceback.format_stack())\n']) clan-pytest-with-core> selectors = ['clanInternals.vars.settings.secretStore'] clan-pytest-with-core> clan-pytest-with-core> def get_from_nix( clan-pytest-with-core> self, clan-pytest-with-core> selectors: list[str], clan-pytest-with-core> ) -> None: clan-pytest-with-core> """Retrieves specific attributes from a Nix flake using the provided selectors. clan-pytest-with-core> clan-pytest-with-core> This function interacts with the Nix build system to fetch and process clan-pytest-with-core> attributes from a flake. It uses the provided selectors to determine which clan-pytest-with-core> attributes to retrieve and optionally accepts additional Nix options for clan-pytest-with-core> customization. The results are cached for future use. clan-pytest-with-core> Used mostly as a lowlevel function for `precache` and `select` methods. clan-pytest-with-core> clan-pytest-with-core> Args: clan-pytest-with-core> selectors (list[str]): A list of attribute selectors to fetch from the flake. clan-pytest-with-core> nix_options (list[str] | None): Optional additional options to pass to the Nix build command. clan-pytest-with-core> clan-pytest-with-core> Raises: clan-pytest-with-core> ClanError: If the number of outputs does not match the number of selectors. clan-pytest-with-core> AssertionError: If the cache or flake cache path is not properly initialized. clan-pytest-with-core> clan-pytest-with-core> """ clan-pytest-with-core> if self._cache is None: clan-pytest-with-core> self.invalidate_cache() clan-pytest-with-core> if self._cache is None: clan-pytest-with-core> msg = "Cache cannot be None after invalidation" clan-pytest-with-core> raise ClanError(msg) clan-pytest-with-core> clan-pytest-with-core> nix_options = self.nix_options[:] if self.nix_options is not None else [] clan-pytest-with-core> clan-pytest-with-core> str_selectors = [ clan-pytest-with-core> selectors_as_json(parse_selector(selector)) for selector in selectors clan-pytest-with-core> ] clan-pytest-with-core> clan-pytest-with-core> config = nix_config() clan-pytest-with-core> clan-pytest-with-core> select_hash = "sha256-yxcNOha7Cfv2nhVpz9ZXSNKk0R7wt4AiBklJ8D24rVg=" clan-pytest-with-core> if not select_hash.startswith("sha256-"): clan-pytest-with-core> select_flake = Flake(str(select_source()), nix_options=nix_options) clan-pytest-with-core> select_flake.invalidate_cache() clan-pytest-with-core> if select_flake.hash is None: clan-pytest-with-core> msg = "this should be impossible as invalidate_cache() should always set `hash`" clan-pytest-with-core> raise ClanError(msg) clan-pytest-with-core> select_hash = select_flake.hash clan-pytest-with-core> clan-pytest-with-core> # fmt: off clan-pytest-with-core> nix_code = f""" clan-pytest-with-core> let clan-pytest-with-core> flake = builtins.getFlake "path:{self.store_path}?narHash={self.hash}"; clan-pytest-with-core> selectLib = ( clan-pytest-with-core> builtins.getFlake clan-pytest-with-core> "path:{select_source()}?narHash={select_hash}" clan-pytest-with-core> ).lib; clan-pytest-with-core> in clan-pytest-with-core> derivation {{ clan-pytest-with-core> name = "clan-flake-select"; clan-pytest-with-core> result = builtins.toJSON [ clan-pytest-with-core> {" ".join( clan-pytest-with-core> [ clan-pytest-with-core> f"(selectLib.applySelectors (builtins.fromJSON ''{attr}'') flake)" clan-pytest-with-core> for attr in str_selectors clan-pytest-with-core> ] clan-pytest-with-core> )} clan-pytest-with-core> ]; clan-pytest-with-core> clan-pytest-with-core> # We can always build this derivation locally, since /bin/sh is system independent, clan-pytest-with-core> # remote builders would introduce needless overhead. clan-pytest-with-core> preferLocalBuild = true; clan-pytest-with-core> # Save the roundtrip to check the binary caches for trivial substitutions clan-pytest-with-core> allowSubstitutes = false; clan-pytest-with-core> clan-pytest-with-core> passAsFile = [ "result" ]; clan-pytest-with-core> system = "{config["system"]}"; clan-pytest-with-core> builder = "/bin/sh"; clan-pytest-with-core> args = [ clan-pytest-with-core> "-c" clan-pytest-with-core> '' clan-pytest-with-core> read -r x < "$resultPath"; printf %s "$x" > $out clan-pytest-with-core> '' clan-pytest-with-core> ]; clan-pytest-with-core> }} clan-pytest-with-core> """ clan-pytest-with-core> trace = os.environ.get("CLAN_DEBUG_NIX_SELECTORS") == "1" clan-pytest-with-core> try: clan-pytest-with-core> build_output = Path( clan-pytest-with-core> > run( clan-pytest-with-core> nix_build(["--expr", nix_code, *nix_options]), clan-pytest-with-core> RunOpts(log=Log.NONE, trace=trace), clan-pytest-with-core> ).stdout.strip(), clan-pytest-with-core> ) clan-pytest-with-core> clan-pytest-with-core> /build/src/clan_lib/flake/flake.py:1076: clan-pytest-with-core> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ clan-pytest-with-core> clan-pytest-with-core> cmd = ['nix', '--extra-experimental-features', 'nix-command flakes', '--option', 'warn-dirty', 'false', ...] clan-pytest-with-core> options = RunOpts(input=None, stdout=None, stderr=None, env=None, cwd=PosixPath('/build/pytest-yajjqlfw/test_flake'), log= clan-pytest-with-core> def run( clan-pytest-with-core> cmd: list[str], clan-pytest-with-core> options: RunOpts | None = None, clan-pytest-with-core> ) -> CmdOut: clan-pytest-with-core> if options is None: clan-pytest-with-core> options = RunOpts() clan-pytest-with-core> if options.cwd is None: clan-pytest-with-core> options.cwd = Path.cwd() clan-pytest-with-core> clan-pytest-with-core> async_ctx = get_async_ctx() clan-pytest-with-core> # Fill in the options from the thread-local data clan-pytest-with-core> # if they are not set in the options clan-pytest-with-core> if async_ctx: clan-pytest-with-core> if options.prefix is None: clan-pytest-with-core> options.prefix = async_ctx.prefix clan-pytest-with-core> if options.stdout is None: clan-pytest-with-core> options.stdout = async_ctx.stdout clan-pytest-with-core> if options.stderr is None: clan-pytest-with-core> options.stderr = async_ctx.stderr clan-pytest-with-core> clan-pytest-with-core> if options.requires_root_perm: clan-pytest-with-core> cmd = cmd_with_root(cmd, options.graphical_perm) clan-pytest-with-core> # Use our sudo ask proxy here as well clan-pytest-with-core> options.needs_user_terminal = True clan-pytest-with-core> clan-pytest-with-core> if cmdlog.isEnabledFor(logging.DEBUG) and options.trace: clan-pytest-with-core> if options.input and isinstance(options.input, bytes): clan-pytest-with-core> # Always redact sensitive input (e.g., private keys, passwords) clan-pytest-with-core> if options.sensitive_input: clan-pytest-with-core> filtered_input = "<>" clan-pytest-with-core> elif any( clan-pytest-with-core> not ch.isprintable() for ch in options.input.decode("ascii", "replace") clan-pytest-with-core> ): clan-pytest-with-core> filtered_input = "<>" clan-pytest-with-core> else: clan-pytest-with-core> filtered_input = options.input.decode("ascii", "replace") clan-pytest-with-core> clan-pytest-with-core> print_trace( clan-pytest-with-core> f"echo '{filtered_input}' | {indent_command(cmd)}", clan-pytest-with-core> cmdlog, clan-pytest-with-core> options.prefix, clan-pytest-with-core> ) clan-pytest-with-core> else: clan-pytest-with-core> print_trace(f"{indent_command(cmd)}", cmdlog, options.prefix) clan-pytest-with-core> clan-pytest-with-core> start = timeit.default_timer() clan-pytest-with-core> with ExitStack() as stack: clan-pytest-with-core> stdin = subprocess.PIPE if isinstance(options.input, bytes) else options.input clan-pytest-with-core> process = stack.enter_context( clan-pytest-with-core> subprocess.Popen( clan-pytest-with-core> cmd, clan-pytest-with-core> cwd=str(options.cwd), clan-pytest-with-core> env=options.env, clan-pytest-with-core> stdin=stdin, clan-pytest-with-core> stdout=subprocess.PIPE, clan-pytest-with-core> stderr=subprocess.PIPE, clan-pytest-with-core> start_new_session=not options.needs_user_terminal, clan-pytest-with-core> shell=options.shell, clan-pytest-with-core> ), clan-pytest-with-core> ) clan-pytest-with-core> clan-pytest-with-core> if options.needs_user_terminal: clan-pytest-with-core> # we didn't allocate a new session, so we can't terminate the process group clan-pytest-with-core> stack.enter_context(terminate_process(process)) clan-pytest-with-core> else: clan-pytest-with-core> stack.enter_context(terminate_process_group(process)) clan-pytest-with-core> clan-pytest-with-core> input_bytes = options.input if isinstance(options.input, bytes) else None clan-pytest-with-core> clan-pytest-with-core> stdout_buf, stderr_buf, stdout_raw = handle_io( clan-pytest-with-core> process, clan-pytest-with-core> options.log, clan-pytest-with-core> prefix=options.prefix, clan-pytest-with-core> msg_color=options.msg_color, clan-pytest-with-core> timeout=options.timeout, clan-pytest-with-core> input_bytes=input_bytes, clan-pytest-with-core> stdout=options.stdout, clan-pytest-with-core> stderr=options.stderr, clan-pytest-with-core> cmd=cmd, clan-pytest-with-core> cwd=options.cwd, clan-pytest-with-core> env=options.env, clan-pytest-with-core> ) clan-pytest-with-core> if not is_async_cancelled(): clan-pytest-with-core> process.wait() clan-pytest-with-core> clan-pytest-with-core> if TIME_TABLE: clan-pytest-with-core> TIME_TABLE.add(shlex.join(cmd), timeit.default_timer() - start) clan-pytest-with-core> clan-pytest-with-core> # Wait for the subprocess to finish clan-pytest-with-core> cmd_out = CmdOut( clan-pytest-with-core> stdout=stdout_buf, clan-pytest-with-core> stderr=stderr_buf, clan-pytest-with-core> cwd=options.cwd, clan-pytest-with-core> env=options.env, clan-pytest-with-core> command_list=cmd, clan-pytest-with-core> returncode=process.returncode, clan-pytest-with-core> msg=options.error_msg, clan-pytest-with-core> stdout_raw=stdout_raw, clan-pytest-with-core> ) clan-pytest-with-core> clan-pytest-with-core> if cmdlog.isEnabledFor(logging.DEBUG) and options.trace: clan-pytest-with-core> print_trace( clan-pytest-with-core> f"Command exited with return code {process.returncode}", clan-pytest-with-core> cmdlog, clan-pytest-with-core> options.prefix, clan-pytest-with-core> ) clan-pytest-with-core> clan-pytest-with-core> if options.check and process.returncode != 0: clan-pytest-with-core> if is_async_cancelled(): clan-pytest-with-core> cmd_out.msg = "Command cancelled" clan-pytest-with-core> > raise ClanCmdError(cmd_out) clan-pytest-with-core> E clan_lib.errors.ClanCmdError: clan-pytest-with-core> E =================================== Command ==================================== clan-pytest-with-core> E nix \ clan-pytest-with-core> E --extra-experimental-features 'nix-command flakes' \ clan-pytest-with-core> E --option warn-dirty \ clan-pytest-with-core> E false \ clan-pytest-with-core> E build \ clan-pytest-with-core> E --flake-registry '' \ clan-pytest-with-core> E --print-out-paths --print-build-logs \ clan-pytest-with-core> E --show-trace --no-link \ clan-pytest-with-core> E --expr ' clan-pytest-with-core> E let clan-pytest-with-core> E flake = builtins.getFlake "path:/nix/store/nzi279cc8zqdbksg3c6hvd3rf24ircxd-source?narHash=sha256-N3X3rmTVbHvU7PZTvlX5WM2YoLpt08Wp7KEiotjmq98="; clan-pytest-with-core> E selectLib = ( clan-pytest-with-core> E builtins.getFlake clan-pytest-with-core> E "path:/nix/store/cba1x9mxnwr8b36cw41bya7g6d5v1p7d-source?narHash=sha256-yxcNOha7Cfv2nhVpz9ZXSNKk0R7wt4AiBklJ8D24rVg=" clan-pytest-with-core> E ).lib; clan-pytest-with-core> E in clan-pytest-with-core> E derivation { clan-pytest-with-core> E name = "clan-flake-select"; clan-pytest-with-core> E result = builtins.toJSON [ clan-pytest-with-core> E (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "secretStore"}]'"'"''"'"') flake) clan-pytest-with-core> E ]; clan-pytest-with-core> E clan-pytest-with-core> E # We can always build this derivation locally, since /bin/sh is system independent, clan-pytest-with-core> E # remote builders would introduce needless overhead. clan-pytest-with-core> E preferLocalBuild = true; clan-pytest-with-core> E # Save the roundtrip to check the binary caches for trivial substitutions clan-pytest-with-core> E allowSubstitutes = false; clan-pytest-with-core> E clan-pytest-with-core> E passAsFile = [ "result" ]; clan-pytest-with-core> E system = "x86_64-linux"; clan-pytest-with-core> E builder = "/bin/sh"; clan-pytest-with-core> E args = [ clan-pytest-with-core> E "-c" clan-pytest-with-core> E '"'"''"'"' clan-pytest-with-core> E read -r x < "$resultPath"; printf %s "$x" > $out clan-pytest-with-core> E '"'"''"'"' clan-pytest-with-core> E ]; clan-pytest-with-core> E } clan-pytest-with-core> E ' \ clan-pytest-with-core> E --store /build/store clan-pytest-with-core> E clan-pytest-with-core> E ==================================== Stderr ==================================== clan-pytest-with-core> E warning: you don't have Internet access; disabling some network-dependent features clan-pytest-with-core> E error: clan-pytest-with-core> E … while calling the 'derivationStrict' builtin clan-pytest-with-core> E at :37:12: clan-pytest-with-core> E 36| clan-pytest-with-core> E 37| strict = derivationStrict drvAttrs; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 38| clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating derivation 'clan-flake-select' clan-pytest-with-core> E whose name attribute is located at «string»:10:17 clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating attribute 'result' of derivation 'clan-flake-select' clan-pytest-with-core> E at «string»:11:17: clan-pytest-with-core> E 10| name = "clan-flake-select"; clan-pytest-with-core> E 11| result = builtins.toJSON [ clan-pytest-with-core> E | ^ clan-pytest-with-core> E 12| (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "secretStore"}]'') flake) clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'toJSON' builtin clan-pytest-with-core> E at «string»:11:26: clan-pytest-with-core> E 10| name = "clan-flake-select"; clan-pytest-with-core> E 11| result = builtins.toJSON [ clan-pytest-with-core> E | ^ clan-pytest-with-core> E 12| (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "secretStore"}]'') flake) clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating list element at index 0 clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at «string»:12:22: clan-pytest-with-core> E 11| result = builtins.toJSON [ clan-pytest-with-core> E 12| (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "secretStore"}]'') flake) clan-pytest-with-core> E | ^ clan-pytest-with-core> E 13| ]; clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'applySelectors' clan-pytest-with-core> E at /build/store/nix/store/cba1x9mxnwr8b36cw41bya7g6d5v1p7d-source/select.nix:262:16: clan-pytest-with-core> E 261| applySelectors = clan-pytest-with-core> E 262| selectors: obj: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 263| let clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/cba1x9mxnwr8b36cw41bya7g6d5v1p7d-source/select.nix:352:5: clan-pytest-with-core> E 351| in clan-pytest-with-core> E 352| recurse selectors 0 obj; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 353| clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'recurse' clan-pytest-with-core> E at /build/store/nix/store/cba1x9mxnwr8b36cw41bya7g6d5v1p7d-source/select.nix:265:25: clan-pytest-with-core> E 264| recurse = clan-pytest-with-core> E 265| selectors: idx: obj: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 266| # we are done clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating a branch condition clan-pytest-with-core> E at /build/store/nix/store/cba1x9mxnwr8b36cw41bya7g6d5v1p7d-source/select.nix:281:11: clan-pytest-with-core> E 280| # lists clan-pytest-with-core> E 281| if builtins.isList obj then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 282| if selector.type == "all" then clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'isList' builtin clan-pytest-with-core> E at /build/store/nix/store/cba1x9mxnwr8b36cw41bya7g6d5v1p7d-source/select.nix:281:14: clan-pytest-with-core> E 280| # lists clan-pytest-with-core> E 281| if builtins.isList obj then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 282| if selector.type == "all" then clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'getFlake' builtin clan-pytest-with-core> E at «string»:3:23: clan-pytest-with-core> E 2| let clan-pytest-with-core> E 3| flake = builtins.getFlake "path:/nix/store/nzi279cc8zqdbksg3c6hvd3rf24ircxd-source?narHash=sha256-N3X3rmTVbHvU7PZTvlX5WM2YoLpt08Wp7KEiotjmq98="; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 4| selectLib = ( clan-pytest-with-core> E clan-pytest-with-core> E … while updating the lock file of flake 'path:/nix/store/nzi279cc8zqdbksg3c6hvd3rf24ircxd-source?lastModified=0&narHash=sha256-N3X3rmTVbHvU7PZTvlX5WM2YoLpt08Wp7KEiotjmq98%3D' clan-pytest-with-core> E clan-pytest-with-core> E … while updating the flake input 'clan-core' clan-pytest-with-core> E clan-pytest-with-core> E error: cannot update unlocked flake input 'clan-core' in pure mode clan-pytest-with-core> E clan-pytest-with-core> E Return Code: 1 clan-pytest-with-core> clan-pytest-with-core> /build/src/clan_lib/cmd/__init__.py:451: ClanCmdError clan-pytest-with-core> clan-pytest-with-core> The above exception was the direct cause of the following exception: clan-pytest-with-core> clan-pytest-with-core> monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7fffe215dd60> clan-pytest-with-core> temporary_home = PosixPath('/build/pytest-yajjqlfw') clan-pytest-with-core> test_flake = FlakeForTest(path=PosixPath('/build/pytest-yajjqlfw/test_flake')) clan-pytest-with-core> patch_get_clan_details = .get_clan_details at 0x7fffe18a92d0> clan-pytest-with-core> clan-pytest-with-core> @pytest.mark.broken_on_darwin clan-pytest-with-core> @pytest.mark.with_core clan-pytest-with-core> def test_create_flake_with_local_template_reference( clan-pytest-with-core> monkeypatch: pytest.MonkeyPatch, clan-pytest-with-core> temporary_home: Path, clan-pytest-with-core> test_flake: FlakeForTest, clan-pytest-with-core> patch_get_clan_details: Any, # noqa: ARG001 clan-pytest-with-core> ) -> None: clan-pytest-with-core> monkeypatch.chdir(test_flake.path) clan-pytest-with-core> new_clan_dir = temporary_home / "new-clan" clan-pytest-with-core> monkeypatch.setenv("LOGNAME", "testuser") clan-pytest-with-core> clan-pytest-with-core> # TODO: should error with: localFlake does not export myLocalTemplate clan template clan-pytest-with-core> > cli.run( clan-pytest-with-core> [ clan-pytest-with-core> "init", clan-pytest-with-core> str(new_clan_dir), clan-pytest-with-core> "--template=.#default", clan-pytest-with-core> "--no-update", clan-pytest-with-core> "--no-interactive", clan-pytest-with-core> ], clan-pytest-with-core> ) clan-pytest-with-core> clan-pytest-with-core> /build/src/clan_cli/tests/test_create_flake.py:232: clan-pytest-with-core> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ clan-pytest-with-core> /build/src/clan_cli/tests/helpers/cli.py:22: in run clan-pytest-with-core> parsed.func(parsed) clan-pytest-with-core> /build/src/clan_cli/init.py:54: in init_command clan-pytest-with-core> register_admin_keys( clan-pytest-with-core> /build/src/clan_cli/vars/keygen.py:89: in register_admin_keys clan-pytest-with-core> backend = Flake(str(flake_dir)).select(vars_settings_secret_store()) clan-pytest-with-core> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ clan-pytest-with-core> /build/src/clan_lib/flake/flake.py:1177: in select clan-pytest-with-core> self.get_from_nix([selector]) clan-pytest-with-core> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ clan-pytest-with-core> clan-pytest-with-core> self = Flake(identifier='/build/pytest-yajjqlfw/new-clan', hash='sha256-N3X3rmTVbHvU7PZTvlX5WM2YoLpt08Wp7KEiotjmq98=', store_...src/clan_lib/flake/flake.py", line 833, in _record_cache_miss\n stack_trace = "".join(traceback.format_stack())\n']) clan-pytest-with-core> selectors = ['clanInternals.vars.settings.secretStore'] clan-pytest-with-core> clan-pytest-with-core> def get_from_nix( clan-pytest-with-core> self, clan-pytest-with-core> selectors: list[str], clan-pytest-with-core> ) -> None: clan-pytest-with-core> """Retrieves specific attributes from a Nix flake using the provided selectors. clan-pytest-with-core> clan-pytest-with-core> This function interacts with the Nix build system to fetch and process clan-pytest-with-core> attributes from a flake. It uses the provided selectors to determine which clan-pytest-with-core> attributes to retrieve and optionally accepts additional Nix options for clan-pytest-with-core> customization. The results are cached for future use. clan-pytest-with-core> Used mostly as a lowlevel function for `precache` and `select` methods. clan-pytest-with-core> clan-pytest-with-core> Args: clan-pytest-with-core> selectors (list[str]): A list of attribute selectors to fetch from the flake. clan-pytest-with-core> nix_options (list[str] | None): Optional additional options to pass to the Nix build command. clan-pytest-with-core> clan-pytest-with-core> Raises: clan-pytest-with-core> ClanError: If the number of outputs does not match the number of selectors. clan-pytest-with-core> AssertionError: If the cache or flake cache path is not properly initialized. clan-pytest-with-core> clan-pytest-with-core> """ clan-pytest-with-core> if self._cache is None: clan-pytest-with-core> self.invalidate_cache() clan-pytest-with-core> if self._cache is None: clan-pytest-with-core> msg = "Cache cannot be None after invalidation" clan-pytest-with-core> raise ClanError(msg) clan-pytest-with-core> clan-pytest-with-core> nix_options = self.nix_options[:] if self.nix_options is not None else [] clan-pytest-with-core> clan-pytest-with-core> str_selectors = [ clan-pytest-with-core> selectors_as_json(parse_selector(selector)) for selector in selectors clan-pytest-with-core> ] clan-pytest-with-core> clan-pytest-with-core> config = nix_config() clan-pytest-with-core> clan-pytest-with-core> select_hash = "sha256-yxcNOha7Cfv2nhVpz9ZXSNKk0R7wt4AiBklJ8D24rVg=" clan-pytest-with-core> if not select_hash.startswith("sha256-"): clan-pytest-with-core> select_flake = Flake(str(select_source()), nix_options=nix_options) clan-pytest-with-core> select_flake.invalidate_cache() clan-pytest-with-core> if select_flake.hash is None: clan-pytest-with-core> msg = "this should be impossible as invalidate_cache() should always set `hash`" clan-pytest-with-core> raise ClanError(msg) clan-pytest-with-core> select_hash = select_flake.hash clan-pytest-with-core> clan-pytest-with-core> # fmt: off clan-pytest-with-core> nix_code = f""" clan-pytest-with-core> let clan-pytest-with-core> flake = builtins.getFlake "path:{self.store_path}?narHash={self.hash}"; clan-pytest-with-core> selectLib = ( clan-pytest-with-core> builtins.getFlake clan-pytest-with-core> "path:{select_source()}?narHash={select_hash}" clan-pytest-with-core> ).lib; clan-pytest-with-core> in clan-pytest-with-core> derivation {{ clan-pytest-with-core> name = "clan-flake-select"; clan-pytest-with-core> result = builtins.toJSON [ clan-pytest-with-core> {" ".join( clan-pytest-with-core> [ clan-pytest-with-core> f"(selectLib.applySelectors (builtins.fromJSON ''{attr}'') flake)" clan-pytest-with-core> for attr in str_selectors clan-pytest-with-core> ] clan-pytest-with-core> )} clan-pytest-with-core> ]; clan-pytest-with-core> clan-pytest-with-core> # We can always build this derivation locally, since /bin/sh is system independent, clan-pytest-with-core> # remote builders would introduce needless overhead. clan-pytest-with-core> preferLocalBuild = true; clan-pytest-with-core> # Save the roundtrip to check the binary caches for trivial substitutions clan-pytest-with-core> allowSubstitutes = false; clan-pytest-with-core> clan-pytest-with-core> passAsFile = [ "result" ]; clan-pytest-with-core> system = "{config["system"]}"; clan-pytest-with-core> builder = "/bin/sh"; clan-pytest-with-core> args = [ clan-pytest-with-core> "-c" clan-pytest-with-core> '' clan-pytest-with-core> read -r x < "$resultPath"; printf %s "$x" > $out clan-pytest-with-core> '' clan-pytest-with-core> ]; clan-pytest-with-core> }} clan-pytest-with-core> """ clan-pytest-with-core> trace = os.environ.get("CLAN_DEBUG_NIX_SELECTORS") == "1" clan-pytest-with-core> try: clan-pytest-with-core> build_output = Path( clan-pytest-with-core> run( clan-pytest-with-core> nix_build(["--expr", nix_code, *nix_options]), clan-pytest-with-core> RunOpts(log=Log.NONE, trace=trace), clan-pytest-with-core> ).stdout.strip(), clan-pytest-with-core> ) clan-pytest-with-core> except ClanCmdError as e: clan-pytest-with-core> if "error: attribute 'clan' missing" in str(e): clan-pytest-with-core> msg = ("This flake does not export the 'clan' attribute. \n" clan-pytest-with-core> "Please write 'clan = clan.config;' into the outputs of your flake.nix.") clan-pytest-with-core> raise ClanSelectError( clan-pytest-with-core> flake_identifier=self.identifier, clan-pytest-with-core> selectors=selectors, clan-pytest-with-core> cmd_error=e, clan-pytest-with-core> description=msg, clan-pytest-with-core> ) from e clan-pytest-with-core> clan-pytest-with-core> # If the error is about a missing attribute, we raise a ClanSelectError clan-pytest-with-core> # with the failed selectors and the flake identifier. clan-pytest-with-core> > raise ClanSelectError( clan-pytest-with-core> flake_identifier=self.identifier, clan-pytest-with-core> selectors=selectors, clan-pytest-with-core> cmd_error=e, clan-pytest-with-core> ) from e clan-pytest-with-core> E clan_lib.flake.flake.ClanSelectError: Error on: $ clan select 'clanInternals.vars.settings.secretStore' clan-pytest-with-core> E Reason: cannot update unlocked flake input 'clan-core' in pure mode. Use flag '--debug' to see full nix trace. clan-pytest-with-core> clan-pytest-with-core> /build/src/clan_lib/flake/flake.py:1094: ClanSelectError clan-pytest-with-core> ---------------------------- Captured stdout setup ----------------------------- clan-pytest-with-core> file: /build/pytest-yajjqlfw/test_flake/flake.nix clan-pytest-with-core> clan_core: None clan-pytest-with-core> flake: /build/pytest-yajjqlfw/test_flake clan-pytest-with-core> Initialized empty Git repository in /build/pytest-yajjqlfw/test_flake/.git/ clan-pytest-with-core> [main (root-commit) f7a98f7] Initial commit clan-pytest-with-core> 5 files changed, 76 insertions(+) clan-pytest-with-core> create mode 100644 .clan-flake clan-pytest-with-core> create mode 100644 fake-module.nix clan-pytest-with-core> create mode 100644 flake.lock clan-pytest-with-core> create mode 100644 flake.nix clan-pytest-with-core> create mode 100644 nixosModules/machine1.nix clan-pytest-with-core> ---------------------------- Captured stderr setup ----------------------------- clan-pytest-with-core> warning: you don't have Internet access; disabling some network-dependent features clan-pytest-with-core> warning: creating lock file "/build/pytest-yajjqlfw/test_flake/flake.lock": clan-pytest-with-core> • Added input 'nixpkgs': clan-pytest-with-core> 'path:/nix/store/vlhb7haagkjabf20g1vg9kxi53fcpi17-source?lastModified=0&narHash=sha256-R4B%2BRRYmze9htmPZ8xeF19mchTSH99GdaqanKCW8CF8%3D' (1970-01-01) clan-pytest-with-core> !! $HOME does not point to a temp directory!! HOME=/build/pytest-yajjqlfw clan-pytest-with-core> ------------------------------ Captured log setup ------------------------------ clan-pytest-with-core> WARNING clan_cli.tests.fixtures_flakes:fixtures_flakes.py:368 !! $HOME does not point to a temp directory!! HOME=/build/pytest-yajjqlfw clan-pytest-with-core> ----------------------------- Captured stderr call ----------------------------- clan-pytest-with-core> [localhost] $ clan init /build/pytest-yajjqlfw/new-clan '--template=.#default' --no-update --no-interactive clan-pytest-with-core> Caller: /build/src/clan_cli/tests/test_create_flake.py:232::test_create_flake_with_local_template_reference clan-pytest-with-core> clan-pytest-with-core> age-keygen clan-pytest-with-core> Caller: /build/src/clan_cli/secrets/sops.py:382::generate_private_key clan-pytest-with-core> clan-pytest-with-core> Public key: age1nw0hp9kld82l80zw6v9uws7aqq22c5vrq0gqw9dqnjhs6usk6vvsyg76lf clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_cli/secrets/sops.py:382::generate_private_key clan-pytest-with-core> clan-pytest-with-core> Generated age private key at '/build/pytest-yajjqlfw/.config/sops/age/keys.txt' for your user. clan-pytest-with-core> Please back it up on a secure location or you will lose access to your secrets. clan-pytest-with-core> nix \ clan-pytest-with-core> --extra-experimental-features 'nix-command flakes' \ clan-pytest-with-core> --option warn-dirty \ clan-pytest-with-core> false \ clan-pytest-with-core> flake \ clan-pytest-with-core> metadata \ clan-pytest-with-core> --json /build/pytest-yajjqlfw/test_flake \ clan-pytest-with-core> --store /build/store clan-pytest-with-core> Caller: /build/src/clan_lib/nix/__init__.py:144::nix_metadata clan-pytest-with-core> clan-pytest-with-core> warning: you don't have Internet access; disabling some network-dependent features clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/nix/__init__.py:144::nix_metadata clan-pytest-with-core> clan-pytest-with-core> Prefetching flake /build/pytest-yajjqlfw/test_flake clan-pytest-with-core> warning: you don't have Internet access; disabling some network-dependent features clan-pytest-with-core> Loading flake cache from file /build/clan-flake-cache/flakes-v2/c1468b422729d3461d4dd6c9c5e02c7941c8e6a1 clan-pytest-with-core> flake.get_input_names is deprecated and will be removed clan-pytest-with-core> (cached) $ clan select 'inputs.*.?_type' clan-pytest-with-core> Prefetching flake /build/pytest-yajjqlfw/test_flake clan-pytest-with-core> warning: you don't have Internet access; disabling some network-dependent features clan-pytest-with-core> Loading flake cache from file /build/clan-flake-cache/flakes-v2/c1468b422729d3461d4dd6c9c5e02c7941c8e6a1 clan-pytest-with-core> Cache miss for clan.templates.clan."default" clan-pytest-with-core> Template '.#default' not found in /build/pytest-yajjqlfw/test_flake, trying builtin template clan-pytest-with-core> Prefetching flake /build/src/clan_lib/clan_core_templates clan-pytest-with-core> warning: you don't have Internet access; disabling some network-dependent features clan-pytest-with-core> Loading flake cache from file /build/clan-flake-cache/flakes-v2/61f7e410abb4ac31c6cde3e73e865823fc5f1087 clan-pytest-with-core> flake.get_input_names is deprecated and will be removed clan-pytest-with-core> (cached) $ clan select 'inputs.*.?_type' clan-pytest-with-core> (cached) $ clan select 'clan.templates.clan."default"' clan-pytest-with-core> chmod \ clan-pytest-with-core> -R u+w \ clan-pytest-with-core> /build/pytest-yajjqlfw/new-clan clan-pytest-with-core> Caller: /build/src/clan_lib/templates/filesystem.py:36::copy_from_nixstore clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/templates/filesystem.py:36::copy_from_nixstore clan-pytest-with-core> clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-yajjqlfw/new-clan \ clan-pytest-with-core> init clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:173::create_clan clan-pytest-with-core> clan-pytest-with-core> hint: Using 'master' as the name for the initial branch. This default branch name clan-pytest-with-core> hint: will change to "main" in Git 3.0. To configure the initial branch name clan-pytest-with-core> hint: to use in all of your new repositories, which will suppress this warning, clan-pytest-with-core> hint: call: clan-pytest-with-core> hint: clan-pytest-with-core> hint: git config --global init.defaultBranch clan-pytest-with-core> hint: clan-pytest-with-core> hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and clan-pytest-with-core> hint: 'development'. The just-created branch can be renamed via this command: clan-pytest-with-core> hint: clan-pytest-with-core> hint: git branch -m clan-pytest-with-core> hint: clan-pytest-with-core> hint: Disable this message with "git config set advice.defaultBranchName false" clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:173::create_clan clan-pytest-with-core> clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-yajjqlfw/new-clan \ clan-pytest-with-core> add \ clan-pytest-with-core> . clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:174::create_clan clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:174::create_clan clan-pytest-with-core> clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-yajjqlfw/new-clan \ clan-pytest-with-core> config \ clan-pytest-with-core> user.name clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:177::create_clan clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 1 clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:177::create_clan clan-pytest-with-core> clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-yajjqlfw/new-clan \ clan-pytest-with-core> config \ clan-pytest-with-core> user.name \ clan-pytest-with-core> clan-tool clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:182::create_clan clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:182::create_clan clan-pytest-with-core> clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-yajjqlfw/new-clan \ clan-pytest-with-core> config \ clan-pytest-with-core> user.email clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:184::create_clan clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 1 clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:184::create_clan clan-pytest-with-core> clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-yajjqlfw/new-clan \ clan-pytest-with-core> config \ clan-pytest-with-core> user.email \ clan-pytest-with-core> clan@example.com clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:189::create_clan clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:189::create_clan clan-pytest-with-core> clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-yajjqlfw/new-clan \ clan-pytest-with-core> add \ clan-pytest-with-core> . clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:203::create_clan clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:203::create_clan clan-pytest-with-core> clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-yajjqlfw/new-clan \ clan-pytest-with-core> commit \ clan-pytest-with-core> -m 'Initial commit' clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:204::create_clan clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:204::create_clan clan-pytest-with-core> clan-pytest-with-core> Prefetching flake /build/pytest-yajjqlfw/new-clan clan-pytest-with-core> warning: you don't have Internet access; disabling some network-dependent features clan-pytest-with-core> Cache miss for clanInternals.vars.settings.secretStore clan-pytest-with-core> ------------------------------ Captured log call ------------------------------- clan-pytest-with-core> DEBUG clan_cli.tests.helpers.cli:__init__.py:147 $ clan init /build/pytest-yajjqlfw/new-clan '--template=.#default' --no-update --no-interactive clan-pytest-with-core> Caller: /build/src/clan_cli/tests/test_create_flake.py:232::test_create_flake_with_local_template_reference clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:147 age-keygen clan-pytest-with-core> Caller: /build/src/clan_cli/secrets/sops.py:382::generate_private_key clan-pytest-with-core> clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 Public key: age1nw0hp9kld82l80zw6v9uws7aqq22c5vrq0gqw9dqnjhs6usk6vvsyg76lf clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:147 Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_cli/secrets/sops.py:382::generate_private_key clan-pytest-with-core> clan-pytest-with-core> INFO clan_cli.secrets.key:key.py:41 Generated age private key at '/build/pytest-yajjqlfw/.config/sops/age/keys.txt' for your user. clan-pytest-with-core> Please back it up on a secure location or you will lose access to your secrets. clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:147 nix \ clan-pytest-with-core> --extra-experimental-features 'nix-command flakes' \ clan-pytest-with-core> --option warn-dirty \ clan-pytest-with-core> false \ clan-pytest-with-core> flake \ clan-pytest-with-core> metadata \ clan-pytest-with-core> --json /build/pytest-yajjqlfw/test_flake \ clan-pytest-with-core> --store /build/store clan-pytest-with-core> Caller: /build/src/clan_lib/nix/__init__.py:144::nix_metadata clan-pytest-with-core> clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 warning: you don't have Internet access; disabling some network-dependent features clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:147 Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/nix/__init__.py:144::nix_metadata clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:927 Prefetching flake /build/pytest-yajjqlfw/test_flake clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 warning: you don't have Internet access; disabling some network-dependent features clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:789 Loading flake cache from file /build/clan-flake-cache/flakes-v2/c1468b422729d3461d4dd6c9c5e02c7941c8e6a1 clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:869 flake.get_input_names is deprecated and will be removed clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1179 (cached) $ clan select 'inputs.*.?_type' clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:927 Prefetching flake /build/pytest-yajjqlfw/test_flake clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 warning: you don't have Internet access; disabling some network-dependent features clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:789 Loading flake cache from file /build/clan-flake-cache/flakes-v2/c1468b422729d3461d4dd6c9c5e02c7941c8e6a1 clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1174 Cache miss for clan.templates.clan."default" clan-pytest-with-core> INFO clan_lib.templates.handler:handler.py:142 Template '.#default' not found in /build/pytest-yajjqlfw/test_flake, trying builtin template clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:927 Prefetching flake /build/src/clan_lib/clan_core_templates clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 warning: you don't have Internet access; disabling some network-dependent features clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:789 Loading flake cache from file /build/clan-flake-cache/flakes-v2/61f7e410abb4ac31c6cde3e73e865823fc5f1087 clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:869 flake.get_input_names is deprecated and will be removed clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1179 (cached) $ clan select 'inputs.*.?_type' clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1179 (cached) $ clan select 'clan.templates.clan."default"' clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:147 chmod \ clan-pytest-with-core> -R u+w \ clan-pytest-with-core> /build/pytest-yajjqlfw/new-clan clan-pytest-with-core> Caller: /build/src/clan_lib/templates/filesystem.py:36::copy_from_nixstore clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:147 Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/templates/filesystem.py:36::copy_from_nixstore clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:147 git \ clan-pytest-with-core> -C /build/pytest-yajjqlfw/new-clan \ clan-pytest-with-core> init clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:173::create_clan clan-pytest-with-core> clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 hint: Using 'master' as the name for the initial branch. This default branch name clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 hint: will change to "main" in Git 3.0. To configure the initial branch name clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 hint: to use in all of your new repositories, which will suppress this warning, clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 hint: call: clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 hint: clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 hint: git config --global init.defaultBranch clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 hint: clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 hint: 'development'. The just-created branch can be renamed via this command: clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 hint: clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 hint: git branch -m clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 hint: clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 hint: Disable this message with "git config set advice.defaultBranchName false" clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:147 Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:173::create_clan clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:147 git \ clan-pytest-with-core> -C /build/pytest-yajjqlfw/new-clan \ clan-pytest-with-core> add \ clan-pytest-with-core> . clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:174::create_clan clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:147 Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:174::create_clan clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:147 git \ clan-pytest-with-core> -C /build/pytest-yajjqlfw/new-clan \ clan-pytest-with-core> config \ clan-pytest-with-core> user.name clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:177::create_clan clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:147 Command exited with return code 1 clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:177::create_clan clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:147 git \ clan-pytest-with-core> -C /build/pytest-yajjqlfw/new-clan \ clan-pytest-with-core> config \ clan-pytest-with-core> user.name \ clan-pytest-with-core> clan-tool clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:182::create_clan clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:147 Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:182::create_clan clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:147 git \ clan-pytest-with-core> -C /build/pytest-yajjqlfw/new-clan \ clan-pytest-with-core> config \ clan-pytest-with-core> user.email clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:184::create_clan clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:147 Command exited with return code 1 clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:184::create_clan clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:147 git \ clan-pytest-with-core> -C /build/pytest-yajjqlfw/new-clan \ clan-pytest-with-core> config \ clan-pytest-with-core> user.email \ clan-pytest-with-core> clan@example.com clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:189::create_clan clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:147 Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:189::create_clan clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:147 git \ clan-pytest-with-core> -C /build/pytest-yajjqlfw/new-clan \ clan-pytest-with-core> add \ clan-pytest-with-core> . clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:203::create_clan clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:147 Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:203::create_clan clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:147 git \ clan-pytest-with-core> -C /build/pytest-yajjqlfw/new-clan \ clan-pytest-with-core> commit \ clan-pytest-with-core> -m 'Initial commit' clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:204::create_clan clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:147 Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:204::create_clan clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:927 Prefetching flake /build/pytest-yajjqlfw/new-clan clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 warning: you don't have Internet access; disabling some network-dependent features clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1174 Cache miss for clanInternals.vars.settings.secretStore clan-pytest-with-core> ______________________________ test_create_flake _______________________________ clan-pytest-with-core> [gw11] linux -- Python 3.14.7 /nix/store/lb41b0anx1f98y9y5s9mdv97gjgsq740-python3-3.14.7/bin/python clan-pytest-with-core> clan-pytest-with-core> self = Flake(identifier='/build/pytest-vukamg3t/test-flake', hash='sha256-dYnxhFcHWOxtQI0OOJjlk+S0ackGRI9XfyZfjnOqAWc=', stor...src/clan_lib/flake/flake.py", line 833, in _record_cache_miss\n stack_trace = "".join(traceback.format_stack())\n']) clan-pytest-with-core> selectors = ['clanInternals.vars.settings.secretStore'] clan-pytest-with-core> clan-pytest-with-core> def get_from_nix( clan-pytest-with-core> self, clan-pytest-with-core> selectors: list[str], clan-pytest-with-core> ) -> None: clan-pytest-with-core> """Retrieves specific attributes from a Nix flake using the provided selectors. clan-pytest-with-core> clan-pytest-with-core> This function interacts with the Nix build system to fetch and process clan-pytest-with-core> attributes from a flake. It uses the provided selectors to determine which clan-pytest-with-core> attributes to retrieve and optionally accepts additional Nix options for clan-pytest-with-core> customization. The results are cached for future use. clan-pytest-with-core> Used mostly as a lowlevel function for `precache` and `select` methods. clan-pytest-with-core> clan-pytest-with-core> Args: clan-pytest-with-core> selectors (list[str]): A list of attribute selectors to fetch from the flake. clan-pytest-with-core> nix_options (list[str] | None): Optional additional options to pass to the Nix build command. clan-pytest-with-core> clan-pytest-with-core> Raises: clan-pytest-with-core> ClanError: If the number of outputs does not match the number of selectors. clan-pytest-with-core> AssertionError: If the cache or flake cache path is not properly initialized. clan-pytest-with-core> clan-pytest-with-core> """ clan-pytest-with-core> if self._cache is None: clan-pytest-with-core> self.invalidate_cache() clan-pytest-with-core> if self._cache is None: clan-pytest-with-core> msg = "Cache cannot be None after invalidation" clan-pytest-with-core> raise ClanError(msg) clan-pytest-with-core> clan-pytest-with-core> nix_options = self.nix_options[:] if self.nix_options is not None else [] clan-pytest-with-core> clan-pytest-with-core> str_selectors = [ clan-pytest-with-core> selectors_as_json(parse_selector(selector)) for selector in selectors clan-pytest-with-core> ] clan-pytest-with-core> clan-pytest-with-core> config = nix_config() clan-pytest-with-core> clan-pytest-with-core> select_hash = "sha256-yxcNOha7Cfv2nhVpz9ZXSNKk0R7wt4AiBklJ8D24rVg=" clan-pytest-with-core> if not select_hash.startswith("sha256-"): clan-pytest-with-core> select_flake = Flake(str(select_source()), nix_options=nix_options) clan-pytest-with-core> select_flake.invalidate_cache() clan-pytest-with-core> if select_flake.hash is None: clan-pytest-with-core> msg = "this should be impossible as invalidate_cache() should always set `hash`" clan-pytest-with-core> raise ClanError(msg) clan-pytest-with-core> select_hash = select_flake.hash clan-pytest-with-core> clan-pytest-with-core> # fmt: off clan-pytest-with-core> nix_code = f""" clan-pytest-with-core> let clan-pytest-with-core> flake = builtins.getFlake "path:{self.store_path}?narHash={self.hash}"; clan-pytest-with-core> selectLib = ( clan-pytest-with-core> builtins.getFlake clan-pytest-with-core> "path:{select_source()}?narHash={select_hash}" clan-pytest-with-core> ).lib; clan-pytest-with-core> in clan-pytest-with-core> derivation {{ clan-pytest-with-core> name = "clan-flake-select"; clan-pytest-with-core> result = builtins.toJSON [ clan-pytest-with-core> {" ".join( clan-pytest-with-core> [ clan-pytest-with-core> f"(selectLib.applySelectors (builtins.fromJSON ''{attr}'') flake)" clan-pytest-with-core> for attr in str_selectors clan-pytest-with-core> ] clan-pytest-with-core> )} clan-pytest-with-core> ]; clan-pytest-with-core> clan-pytest-with-core> # We can always build this derivation locally, since /bin/sh is system independent, clan-pytest-with-core> # remote builders would introduce needless overhead. clan-pytest-with-core> preferLocalBuild = true; clan-pytest-with-core> # Save the roundtrip to check the binary caches for trivial substitutions clan-pytest-with-core> allowSubstitutes = false; clan-pytest-with-core> clan-pytest-with-core> passAsFile = [ "result" ]; clan-pytest-with-core> system = "{config["system"]}"; clan-pytest-with-core> builder = "/bin/sh"; clan-pytest-with-core> args = [ clan-pytest-with-core> "-c" clan-pytest-with-core> '' clan-pytest-with-core> read -r x < "$resultPath"; printf %s "$x" > $out clan-pytest-with-core> '' clan-pytest-with-core> ]; clan-pytest-with-core> }} clan-pytest-with-core> """ clan-pytest-with-core> trace = os.environ.get("CLAN_DEBUG_NIX_SELECTORS") == "1" clan-pytest-with-core> try: clan-pytest-with-core> build_output = Path( clan-pytest-with-core> > run( clan-pytest-with-core> nix_build(["--expr", nix_code, *nix_options]), clan-pytest-with-core> RunOpts(log=Log.NONE, trace=trace), clan-pytest-with-core> ).stdout.strip(), clan-pytest-with-core> ) clan-pytest-with-core> clan-pytest-with-core> /build/src/clan_lib/flake/flake.py:1076: clan-pytest-with-core> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ clan-pytest-with-core> clan-pytest-with-core> cmd = ['nix', '--extra-experimental-features', 'nix-command flakes', '--option', 'warn-dirty', 'false', ...] clan-pytest-with-core> options = RunOpts(input=None, stdout=None, stderr=None, env=None, cwd=PosixPath('/build/pytest-vukamg3t'), log=, pr...al=False, timeout=inf, shell=False, requires_root_perm=False, graphical_perm=False, trace=False, sensitive_input=False) clan-pytest-with-core> clan-pytest-with-core> def run( clan-pytest-with-core> cmd: list[str], clan-pytest-with-core> options: RunOpts | None = None, clan-pytest-with-core> ) -> CmdOut: clan-pytest-with-core> if options is None: clan-pytest-with-core> options = RunOpts() clan-pytest-with-core> if options.cwd is None: clan-pytest-with-core> options.cwd = Path.cwd() clan-pytest-with-core> clan-pytest-with-core> async_ctx = get_async_ctx() clan-pytest-with-core> # Fill in the options from the thread-local data clan-pytest-with-core> # if they are not set in the options clan-pytest-with-core> if async_ctx: clan-pytest-with-core> if options.prefix is None: clan-pytest-with-core> options.prefix = async_ctx.prefix clan-pytest-with-core> if options.stdout is None: clan-pytest-with-core> options.stdout = async_ctx.stdout clan-pytest-with-core> if options.stderr is None: clan-pytest-with-core> options.stderr = async_ctx.stderr clan-pytest-with-core> clan-pytest-with-core> if options.requires_root_perm: clan-pytest-with-core> cmd = cmd_with_root(cmd, options.graphical_perm) clan-pytest-with-core> # Use our sudo ask proxy here as well clan-pytest-with-core> options.needs_user_terminal = True clan-pytest-with-core> clan-pytest-with-core> if cmdlog.isEnabledFor(logging.DEBUG) and options.trace: clan-pytest-with-core> if options.input and isinstance(options.input, bytes): clan-pytest-with-core> # Always redact sensitive input (e.g., private keys, passwords) clan-pytest-with-core> if options.sensitive_input: clan-pytest-with-core> filtered_input = "<>" clan-pytest-with-core> elif any( clan-pytest-with-core> not ch.isprintable() for ch in options.input.decode("ascii", "replace") clan-pytest-with-core> ): clan-pytest-with-core> filtered_input = "<>" clan-pytest-with-core> else: clan-pytest-with-core> filtered_input = options.input.decode("ascii", "replace") clan-pytest-with-core> clan-pytest-with-core> print_trace( clan-pytest-with-core> f"echo '{filtered_input}' | {indent_command(cmd)}", clan-pytest-with-core> cmdlog, clan-pytest-with-core> options.prefix, clan-pytest-with-core> ) clan-pytest-with-core> else: clan-pytest-with-core> print_trace(f"{indent_command(cmd)}", cmdlog, options.prefix) clan-pytest-with-core> clan-pytest-with-core> start = timeit.default_timer() clan-pytest-with-core> with ExitStack() as stack: clan-pytest-with-core> stdin = subprocess.PIPE if isinstance(options.input, bytes) else options.input clan-pytest-with-core> process = stack.enter_context( clan-pytest-with-core> subprocess.Popen( clan-pytest-with-core> cmd, clan-pytest-with-core> cwd=str(options.cwd), clan-pytest-with-core> env=options.env, clan-pytest-with-core> stdin=stdin, clan-pytest-with-core> stdout=subprocess.PIPE, clan-pytest-with-core> stderr=subprocess.PIPE, clan-pytest-with-core> start_new_session=not options.needs_user_terminal, clan-pytest-with-core> shell=options.shell, clan-pytest-with-core> ), clan-pytest-with-core> ) clan-pytest-with-core> clan-pytest-with-core> if options.needs_user_terminal: clan-pytest-with-core> # we didn't allocate a new session, so we can't terminate the process group clan-pytest-with-core> stack.enter_context(terminate_process(process)) clan-pytest-with-core> else: clan-pytest-with-core> stack.enter_context(terminate_process_group(process)) clan-pytest-with-core> clan-pytest-with-core> input_bytes = options.input if isinstance(options.input, bytes) else None clan-pytest-with-core> clan-pytest-with-core> stdout_buf, stderr_buf, stdout_raw = handle_io( clan-pytest-with-core> process, clan-pytest-with-core> options.log, clan-pytest-with-core> prefix=options.prefix, clan-pytest-with-core> msg_color=options.msg_color, clan-pytest-with-core> timeout=options.timeout, clan-pytest-with-core> input_bytes=input_bytes, clan-pytest-with-core> stdout=options.stdout, clan-pytest-with-core> stderr=options.stderr, clan-pytest-with-core> cmd=cmd, clan-pytest-with-core> cwd=options.cwd, clan-pytest-with-core> env=options.env, clan-pytest-with-core> ) clan-pytest-with-core> if not is_async_cancelled(): clan-pytest-with-core> process.wait() clan-pytest-with-core> clan-pytest-with-core> if TIME_TABLE: clan-pytest-with-core> TIME_TABLE.add(shlex.join(cmd), timeit.default_timer() - start) clan-pytest-with-core> clan-pytest-with-core> # Wait for the subprocess to finish clan-pytest-with-core> cmd_out = CmdOut( clan-pytest-with-core> stdout=stdout_buf, clan-pytest-with-core> stderr=stderr_buf, clan-pytest-with-core> cwd=options.cwd, clan-pytest-with-core> env=options.env, clan-pytest-with-core> command_list=cmd, clan-pytest-with-core> returncode=process.returncode, clan-pytest-with-core> msg=options.error_msg, clan-pytest-with-core> stdout_raw=stdout_raw, clan-pytest-with-core> ) clan-pytest-with-core> clan-pytest-with-core> if cmdlog.isEnabledFor(logging.DEBUG) and options.trace: clan-pytest-with-core> print_trace( clan-pytest-with-core> f"Command exited with return code {process.returncode}", clan-pytest-with-core> cmdlog, clan-pytest-with-core> options.prefix, clan-pytest-with-core> ) clan-pytest-with-core> clan-pytest-with-core> if options.check and process.returncode != 0: clan-pytest-with-core> if is_async_cancelled(): clan-pytest-with-core> cmd_out.msg = "Command cancelled" clan-pytest-with-core> > raise ClanCmdError(cmd_out) clan-pytest-with-core> E clan_lib.errors.ClanCmdError: clan-pytest-with-core> E =================================== Command ==================================== clan-pytest-with-core> E nix \ clan-pytest-with-core> E --extra-experimental-features 'nix-command flakes' \ clan-pytest-with-core> E --option warn-dirty \ clan-pytest-with-core> E false \ clan-pytest-with-core> E build \ clan-pytest-with-core> E --flake-registry '' \ clan-pytest-with-core> E --print-out-paths --print-build-logs \ clan-pytest-with-core> E --show-trace --no-link \ clan-pytest-with-core> E --expr ' clan-pytest-with-core> E let clan-pytest-with-core> E flake = builtins.getFlake "path:/nix/store/l9y532w82yx38arzv9ynqaf8yyjmn9wb-source?narHash=sha256-dYnxhFcHWOxtQI0OOJjlk+S0ackGRI9XfyZfjnOqAWc="; clan-pytest-with-core> E selectLib = ( clan-pytest-with-core> E builtins.getFlake clan-pytest-with-core> E "path:/nix/store/cba1x9mxnwr8b36cw41bya7g6d5v1p7d-source?narHash=sha256-yxcNOha7Cfv2nhVpz9ZXSNKk0R7wt4AiBklJ8D24rVg=" clan-pytest-with-core> E ).lib; clan-pytest-with-core> E in clan-pytest-with-core> E derivation { clan-pytest-with-core> E name = "clan-flake-select"; clan-pytest-with-core> E result = builtins.toJSON [ clan-pytest-with-core> E (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "secretStore"}]'"'"''"'"') flake) clan-pytest-with-core> E ]; clan-pytest-with-core> E clan-pytest-with-core> E # We can always build this derivation locally, since /bin/sh is system independent, clan-pytest-with-core> E # remote builders would introduce needless overhead. clan-pytest-with-core> E preferLocalBuild = true; clan-pytest-with-core> E # Save the roundtrip to check the binary caches for trivial substitutions clan-pytest-with-core> E allowSubstitutes = false; clan-pytest-with-core> E clan-pytest-with-core> E passAsFile = [ "result" ]; clan-pytest-with-core> E system = "x86_64-linux"; clan-pytest-with-core> E builder = "/bin/sh"; clan-pytest-with-core> E args = [ clan-pytest-with-core> E "-c" clan-pytest-with-core> E '"'"''"'"' clan-pytest-with-core> E read -r x < "$resultPath"; printf %s "$x" > $out clan-pytest-with-core> E '"'"''"'"' clan-pytest-with-core> E ]; clan-pytest-with-core> E } clan-pytest-with-core> E ' \ clan-pytest-with-core> E --store /build/store clan-pytest-with-core> E clan-pytest-with-core> E ==================================== Stderr ==================================== clan-pytest-with-core> E warning: you don't have Internet access; disabling some network-dependent features clan-pytest-with-core> E error: clan-pytest-with-core> E … while calling the 'derivationStrict' builtin clan-pytest-with-core> E at :37:12: clan-pytest-with-core> E 36| clan-pytest-with-core> E 37| strict = derivationStrict drvAttrs; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 38| clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating derivation 'clan-flake-select' clan-pytest-with-core> E whose name attribute is located at «string»:10:17 clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating attribute 'result' of derivation 'clan-flake-select' clan-pytest-with-core> E at «string»:11:17: clan-pytest-with-core> E 10| name = "clan-flake-select"; clan-pytest-with-core> E 11| result = builtins.toJSON [ clan-pytest-with-core> E | ^ clan-pytest-with-core> E 12| (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "secretStore"}]'') flake) clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'toJSON' builtin clan-pytest-with-core> E at «string»:11:26: clan-pytest-with-core> E 10| name = "clan-flake-select"; clan-pytest-with-core> E 11| result = builtins.toJSON [ clan-pytest-with-core> E | ^ clan-pytest-with-core> E 12| (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "secretStore"}]'') flake) clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating list element at index 0 clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at «string»:12:22: clan-pytest-with-core> E 11| result = builtins.toJSON [ clan-pytest-with-core> E 12| (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "secretStore"}]'') flake) clan-pytest-with-core> E | ^ clan-pytest-with-core> E 13| ]; clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'applySelectors' clan-pytest-with-core> E at /build/store/nix/store/cba1x9mxnwr8b36cw41bya7g6d5v1p7d-source/select.nix:262:16: clan-pytest-with-core> E 261| applySelectors = clan-pytest-with-core> E 262| selectors: obj: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 263| let clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/cba1x9mxnwr8b36cw41bya7g6d5v1p7d-source/select.nix:352:5: clan-pytest-with-core> E 351| in clan-pytest-with-core> E 352| recurse selectors 0 obj; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 353| clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'recurse' clan-pytest-with-core> E at /build/store/nix/store/cba1x9mxnwr8b36cw41bya7g6d5v1p7d-source/select.nix:265:25: clan-pytest-with-core> E 264| recurse = clan-pytest-with-core> E 265| selectors: idx: obj: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 266| # we are done clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating a branch condition clan-pytest-with-core> E at /build/store/nix/store/cba1x9mxnwr8b36cw41bya7g6d5v1p7d-source/select.nix:281:11: clan-pytest-with-core> E 280| # lists clan-pytest-with-core> E 281| if builtins.isList obj then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 282| if selector.type == "all" then clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'isList' builtin clan-pytest-with-core> E at /build/store/nix/store/cba1x9mxnwr8b36cw41bya7g6d5v1p7d-source/select.nix:281:14: clan-pytest-with-core> E 280| # lists clan-pytest-with-core> E 281| if builtins.isList obj then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 282| if selector.type == "all" then clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'getFlake' builtin clan-pytest-with-core> E at «string»:3:23: clan-pytest-with-core> E 2| let clan-pytest-with-core> E 3| flake = builtins.getFlake "path:/nix/store/l9y532w82yx38arzv9ynqaf8yyjmn9wb-source?narHash=sha256-dYnxhFcHWOxtQI0OOJjlk+S0ackGRI9XfyZfjnOqAWc="; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 4| selectLib = ( clan-pytest-with-core> E clan-pytest-with-core> E … while updating the lock file of flake 'path:/nix/store/l9y532w82yx38arzv9ynqaf8yyjmn9wb-source?lastModified=0&narHash=sha256-dYnxhFcHWOxtQI0OOJjlk%2BS0ackGRI9XfyZfjnOqAWc%3D' clan-pytest-with-core> E clan-pytest-with-core> E … while updating the flake input 'clan-core' clan-pytest-with-core> E clan-pytest-with-core> E error: cannot update unlocked flake input 'clan-core' in pure mode clan-pytest-with-core> E clan-pytest-with-core> E Return Code: 1 clan-pytest-with-core> clan-pytest-with-core> /build/src/clan_lib/cmd/__init__.py:451: ClanCmdError clan-pytest-with-core> clan-pytest-with-core> The above exception was the direct cause of the following exception: clan-pytest-with-core> clan-pytest-with-core> monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7fffe183bf50> clan-pytest-with-core> temporary_home = PosixPath('/build/pytest-vukamg3t') clan-pytest-with-core> clan_core = PosixPath('/nix/store/c4gps8k2ky7ix7h6cgr1ss6pflxcsxmg-clan-core-flake') clan-pytest-with-core> capture_output = clan-pytest-with-core> patch_get_clan_details = .get_clan_details at 0x7fffe2572da0> clan-pytest-with-core> clan-pytest-with-core> @pytest.mark.broken_on_darwin clan-pytest-with-core> @pytest.mark.with_core clan-pytest-with-core> def test_create_flake( clan-pytest-with-core> monkeypatch: pytest.MonkeyPatch, clan-pytest-with-core> temporary_home: Path, clan-pytest-with-core> clan_core: Path, clan-pytest-with-core> capture_output: CaptureOutput, clan-pytest-with-core> patch_get_clan_details: Any, # noqa: ARG001 clan-pytest-with-core> ) -> None: clan-pytest-with-core> flake_dir = temporary_home / "test-flake" clan-pytest-with-core> clan-pytest-with-core> monkeypatch.setenv("LOGNAME", "testuser") clan-pytest-with-core> clan-pytest-with-core> > cli.run( clan-pytest-with-core> [ clan-pytest-with-core> "init", clan-pytest-with-core> str(flake_dir), clan-pytest-with-core> "--template=default", clan-pytest-with-core> "--no-update", clan-pytest-with-core> "--no-interactive", clan-pytest-with-core> ] clan-pytest-with-core> ) clan-pytest-with-core> clan-pytest-with-core> /build/src/clan_cli/tests/test_create_flake.py:29: clan-pytest-with-core> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ clan-pytest-with-core> /build/src/clan_cli/tests/helpers/cli.py:22: in run clan-pytest-with-core> parsed.func(parsed) clan-pytest-with-core> /build/src/clan_cli/init.py:54: in init_command clan-pytest-with-core> register_admin_keys( clan-pytest-with-core> /build/src/clan_cli/vars/keygen.py:89: in register_admin_keys clan-pytest-with-core> backend = Flake(str(flake_dir)).select(vars_settings_secret_store()) clan-pytest-with-core> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ clan-pytest-with-core> /build/src/clan_lib/flake/flake.py:1177: in select clan-pytest-with-core> self.get_from_nix([selector]) clan-pytest-with-core> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ clan-pytest-with-core> clan-pytest-with-core> self = Flake(identifier='/build/pytest-vukamg3t/test-flake', hash='sha256-dYnxhFcHWOxtQI0OOJjlk+S0ackGRI9XfyZfjnOqAWc=', stor...src/clan_lib/flake/flake.py", line 833, in _record_cache_miss\n stack_trace = "".join(traceback.format_stack())\n']) clan-pytest-with-core> selectors = ['clanInternals.vars.settings.secretStore'] clan-pytest-with-core> clan-pytest-with-core> def get_from_nix( clan-pytest-with-core> self, clan-pytest-with-core> selectors: list[str], clan-pytest-with-core> ) -> None: clan-pytest-with-core> """Retrieves specific attributes from a Nix flake using the provided selectors. clan-pytest-with-core> clan-pytest-with-core> This function interacts with the Nix build system to fetch and process clan-pytest-with-core> attributes from a flake. It uses the provided selectors to determine which clan-pytest-with-core> attributes to retrieve and optionally accepts additional Nix options for clan-pytest-with-core> customization. The results are cached for future use. clan-pytest-with-core> Used mostly as a lowlevel function for `precache` and `select` methods. clan-pytest-with-core> clan-pytest-with-core> Args: clan-pytest-with-core> selectors (list[str]): A list of attribute selectors to fetch from the flake. clan-pytest-with-core> nix_options (list[str] | None): Optional additional options to pass to the Nix build command. clan-pytest-with-core> clan-pytest-with-core> Raises: clan-pytest-with-core> ClanError: If the number of outputs does not match the number of selectors. clan-pytest-with-core> AssertionError: If the cache or flake cache path is not properly initialized. clan-pytest-with-core> clan-pytest-with-core> """ clan-pytest-with-core> if self._cache is None: clan-pytest-with-core> self.invalidate_cache() clan-pytest-with-core> if self._cache is None: clan-pytest-with-core> msg = "Cache cannot be None after invalidation" clan-pytest-with-core> raise ClanError(msg) clan-pytest-with-core> clan-pytest-with-core> nix_options = self.nix_options[:] if self.nix_options is not None else [] clan-pytest-with-core> clan-pytest-with-core> str_selectors = [ clan-pytest-with-core> selectors_as_json(parse_selector(selector)) for selector in selectors clan-pytest-with-core> ] clan-pytest-with-core> clan-pytest-with-core> config = nix_config() clan-pytest-with-core> clan-pytest-with-core> select_hash = "sha256-yxcNOha7Cfv2nhVpz9ZXSNKk0R7wt4AiBklJ8D24rVg=" clan-pytest-with-core> if not select_hash.startswith("sha256-"): clan-pytest-with-core> select_flake = Flake(str(select_source()), nix_options=nix_options) clan-pytest-with-core> select_flake.invalidate_cache() clan-pytest-with-core> if select_flake.hash is None: clan-pytest-with-core> msg = "this should be impossible as invalidate_cache() should always set `hash`" clan-pytest-with-core> raise ClanError(msg) clan-pytest-with-core> select_hash = select_flake.hash clan-pytest-with-core> clan-pytest-with-core> # fmt: off clan-pytest-with-core> nix_code = f""" clan-pytest-with-core> let clan-pytest-with-core> flake = builtins.getFlake "path:{self.store_path}?narHash={self.hash}"; clan-pytest-with-core> selectLib = ( clan-pytest-with-core> builtins.getFlake clan-pytest-with-core> "path:{select_source()}?narHash={select_hash}" clan-pytest-with-core> ).lib; clan-pytest-with-core> in clan-pytest-with-core> derivation {{ clan-pytest-with-core> name = "clan-flake-select"; clan-pytest-with-core> result = builtins.toJSON [ clan-pytest-with-core> {" ".join( clan-pytest-with-core> [ clan-pytest-with-core> f"(selectLib.applySelectors (builtins.fromJSON ''{attr}'') flake)" clan-pytest-with-core> for attr in str_selectors clan-pytest-with-core> ] clan-pytest-with-core> )} clan-pytest-with-core> ]; clan-pytest-with-core> clan-pytest-with-core> # We can always build this derivation locally, since /bin/sh is system independent, clan-pytest-with-core> # remote builders would introduce needless overhead. clan-pytest-with-core> preferLocalBuild = true; clan-pytest-with-core> # Save the roundtrip to check the binary caches for trivial substitutions clan-pytest-with-core> allowSubstitutes = false; clan-pytest-with-core> clan-pytest-with-core> passAsFile = [ "result" ]; clan-pytest-with-core> system = "{config["system"]}"; clan-pytest-with-core> builder = "/bin/sh"; clan-pytest-with-core> args = [ clan-pytest-with-core> "-c" clan-pytest-with-core> '' clan-pytest-with-core> read -r x < "$resultPath"; printf %s "$x" > $out clan-pytest-with-core> '' clan-pytest-with-core> ]; clan-pytest-with-core> }} clan-pytest-with-core> """ clan-pytest-with-core> trace = os.environ.get("CLAN_DEBUG_NIX_SELECTORS") == "1" clan-pytest-with-core> try: clan-pytest-with-core> build_output = Path( clan-pytest-with-core> run( clan-pytest-with-core> nix_build(["--expr", nix_code, *nix_options]), clan-pytest-with-core> RunOpts(log=Log.NONE, trace=trace), clan-pytest-with-core> ).stdout.strip(), clan-pytest-with-core> ) clan-pytest-with-core> except ClanCmdError as e: clan-pytest-with-core> if "error: attribute 'clan' missing" in str(e): clan-pytest-with-core> msg = ("This flake does not export the 'clan' attribute. \n" clan-pytest-with-core> "Please write 'clan = clan.config;' into the outputs of your flake.nix.") clan-pytest-with-core> raise ClanSelectError( clan-pytest-with-core> flake_identifier=self.identifier, clan-pytest-with-core> selectors=selectors, clan-pytest-with-core> cmd_error=e, clan-pytest-with-core> description=msg, clan-pytest-with-core> ) from e clan-pytest-with-core> clan-pytest-with-core> # If the error is about a missing attribute, we raise a ClanSelectError clan-pytest-with-core> # with the failed selectors and the flake identifier. clan-pytest-with-core> > raise ClanSelectError( clan-pytest-with-core> flake_identifier=self.identifier, clan-pytest-with-core> selectors=selectors, clan-pytest-with-core> cmd_error=e, clan-pytest-with-core> ) from e clan-pytest-with-core> E clan_lib.flake.flake.ClanSelectError: Error on: $ clan select 'clanInternals.vars.settings.secretStore' clan-pytest-with-core> E Reason: cannot update unlocked flake input 'clan-core' in pure mode. Use flag '--debug' to see full nix trace. clan-pytest-with-core> clan-pytest-with-core> /build/src/clan_lib/flake/flake.py:1094: ClanSelectError clan-pytest-with-core> ----------------------------- Captured stderr call ----------------------------- clan-pytest-with-core> [localhost] $ clan init /build/pytest-vukamg3t/test-flake --template=default --no-update --no-interactive clan-pytest-with-core> Caller: /build/src/clan_cli/tests/test_create_flake.py:29::test_create_flake clan-pytest-with-core> clan-pytest-with-core> age-keygen clan-pytest-with-core> Caller: /build/src/clan_cli/secrets/sops.py:382::generate_private_key clan-pytest-with-core> clan-pytest-with-core> Public key: age1g2xsjmng7xz5enrts7svhl3qqem80gygttu5mpl5aal9ql52esjqf2jpe7 clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_cli/secrets/sops.py:382::generate_private_key clan-pytest-with-core> clan-pytest-with-core> Generated age private key at '/build/pytest-vukamg3t/.config/sops/age/keys.txt' for your user. clan-pytest-with-core> Please back it up on a secure location or you will lose access to your secrets. clan-pytest-with-core> Prefetching flake /build/src/clan_lib/clan_core_templates clan-pytest-with-core> warning: you don't have Internet access; disabling some network-dependent features clan-pytest-with-core> Loading flake cache from file /build/clan-flake-cache/flakes-v2/61f7e410abb4ac31c6cde3e73e865823fc5f1087 clan-pytest-with-core> Prefetching flake /build/src/clan_lib/clan_core_templates clan-pytest-with-core> warning: you don't have Internet access; disabling some network-dependent features clan-pytest-with-core> Loading flake cache from file /build/clan-flake-cache/flakes-v2/61f7e410abb4ac31c6cde3e73e865823fc5f1087 clan-pytest-with-core> (cached) $ clan select 'clanInternals.templates.clan."default"' clan-pytest-with-core> chmod \ clan-pytest-with-core> -R u+w \ clan-pytest-with-core> /build/pytest-vukamg3t/test-flake clan-pytest-with-core> Caller: /build/src/clan_lib/templates/filesystem.py:36::copy_from_nixstore clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/templates/filesystem.py:36::copy_from_nixstore clan-pytest-with-core> clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-vukamg3t/test-flake \ clan-pytest-with-core> init clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:173::create_clan clan-pytest-with-core> clan-pytest-with-core> hint: Using 'master' as the name for the initial branch. This default branch name clan-pytest-with-core> hint: will change to "main" in Git 3.0. To configure the initial branch name clan-pytest-with-core> hint: to use in all of your new repositories, which will suppress this warning, clan-pytest-with-core> hint: call: clan-pytest-with-core> hint: clan-pytest-with-core> hint: git config --global init.defaultBranch clan-pytest-with-core> hint: clan-pytest-with-core> hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and clan-pytest-with-core> hint: 'development'. The just-created branch can be renamed via this command: clan-pytest-with-core> hint: clan-pytest-with-core> hint: git branch -m clan-pytest-with-core> hint: clan-pytest-with-core> hint: Disable this message with "git config set advice.defaultBranchName false" clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:173::create_clan clan-pytest-with-core> clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-vukamg3t/test-flake \ clan-pytest-with-core> add \ clan-pytest-with-core> . clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:174::create_clan clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:174::create_clan clan-pytest-with-core> clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-vukamg3t/test-flake \ clan-pytest-with-core> config \ clan-pytest-with-core> user.name clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:177::create_clan clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 1 clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:177::create_clan clan-pytest-with-core> clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-vukamg3t/test-flake \ clan-pytest-with-core> config \ clan-pytest-with-core> user.name \ clan-pytest-with-core> clan-tool clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:182::create_clan clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:182::create_clan clan-pytest-with-core> clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-vukamg3t/test-flake \ clan-pytest-with-core> config \ clan-pytest-with-core> user.email clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:184::create_clan clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 1 clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:184::create_clan clan-pytest-with-core> clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-vukamg3t/test-flake \ clan-pytest-with-core> config \ clan-pytest-with-core> user.email \ clan-pytest-with-core> clan@example.com clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:189::create_clan clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:189::create_clan clan-pytest-with-core> clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-vukamg3t/test-flake \ clan-pytest-with-core> add \ clan-pytest-with-core> . clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:203::create_clan clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:203::create_clan clan-pytest-with-core> clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-vukamg3t/test-flake \ clan-pytest-with-core> commit \ clan-pytest-with-core> -m 'Initial commit' clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:204::create_clan clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:204::create_clan clan-pytest-with-core> clan-pytest-with-core> Prefetching flake /build/pytest-vukamg3t/test-flake clan-pytest-with-core> warning: you don't have Internet access; disabling some network-dependent features clan-pytest-with-core> Cache miss for clanInternals.vars.settings.secretStore clan-pytest-with-core> ------------------------------ Captured log call ------------------------------- clan-pytest-with-core> DEBUG clan_cli.tests.helpers.cli:__init__.py:147 $ clan init /build/pytest-vukamg3t/test-flake --template=default --no-update --no-interactive clan-pytest-with-core> Caller: /build/src/clan_cli/tests/test_create_flake.py:29::test_create_flake clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:147 age-keygen clan-pytest-with-core> Caller: /build/src/clan_cli/secrets/sops.py:382::generate_private_key clan-pytest-with-core> clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 Public key: age1g2xsjmng7xz5enrts7svhl3qqem80gygttu5mpl5aal9ql52esjqf2jpe7 clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:147 Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_cli/secrets/sops.py:382::generate_private_key clan-pytest-with-core> clan-pytest-with-core> INFO clan_cli.secrets.key:key.py:41 Generated age private key at '/build/pytest-vukamg3t/.config/sops/age/keys.txt' for your user. clan-pytest-with-core> Please back it up on a secure location or you will lose access to your secrets. clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:927 Prefetching flake /build/src/clan_lib/clan_core_templates clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 warning: you don't have Internet access; disabling some network-dependent features clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:789 Loading flake cache from file /build/clan-flake-cache/flakes-v2/61f7e410abb4ac31c6cde3e73e865823fc5f1087 clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:927 Prefetching flake /build/src/clan_lib/clan_core_templates clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 warning: you don't have Internet access; disabling some network-dependent features clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:789 Loading flake cache from file /build/clan-flake-cache/flakes-v2/61f7e410abb4ac31c6cde3e73e865823fc5f1087 clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1179 (cached) $ clan select 'clanInternals.templates.clan."default"' clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:147 chmod \ clan-pytest-with-core> -R u+w \ clan-pytest-with-core> /build/pytest-vukamg3t/test-flake clan-pytest-with-core> Caller: /build/src/clan_lib/templates/filesystem.py:36::copy_from_nixstore clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:147 Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/templates/filesystem.py:36::copy_from_nixstore clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:147 git \ clan-pytest-with-core> -C /build/pytest-vukamg3t/test-flake \ clan-pytest-with-core> init clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:173::create_clan clan-pytest-with-core> clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 hint: Using 'master' as the name for the initial branch. This default branch name clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 hint: will change to "main" in Git 3.0. To configure the initial branch name clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 hint: to use in all of your new repositories, which will suppress this warning, clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 hint: call: clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 hint: clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 hint: git config --global init.defaultBranch clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 hint: clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 hint: 'development'. The just-created branch can be renamed via this command: clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 hint: clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 hint: git branch -m clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 hint: clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 hint: Disable this message with "git config set advice.defaultBranchName false" clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:147 Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:173::create_clan clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:147 git \ clan-pytest-with-core> -C /build/pytest-vukamg3t/test-flake \ clan-pytest-with-core> add \ clan-pytest-with-core> . clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:174::create_clan clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:147 Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:174::create_clan clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:147 git \ clan-pytest-with-core> -C /build/pytest-vukamg3t/test-flake \ clan-pytest-with-core> config \ clan-pytest-with-core> user.name clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:177::create_clan clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:147 Command exited with return code 1 clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:177::create_clan clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:147 git \ clan-pytest-with-core> -C /build/pytest-vukamg3t/test-flake \ clan-pytest-with-core> config \ clan-pytest-with-core> user.name \ clan-pytest-with-core> clan-tool clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:182::create_clan clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:147 Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:182::create_clan clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:147 git \ clan-pytest-with-core> -C /build/pytest-vukamg3t/test-flake \ clan-pytest-with-core> config \ clan-pytest-with-core> user.email clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:184::create_clan clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:147 Command exited with return code 1 clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:184::create_clan clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:147 git \ clan-pytest-with-core> -C /build/pytest-vukamg3t/test-flake \ clan-pytest-with-core> config \ clan-pytest-with-core> user.email \ clan-pytest-with-core> clan@example.com clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:189::create_clan clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:147 Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:189::create_clan clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:147 git \ clan-pytest-with-core> -C /build/pytest-vukamg3t/test-flake \ clan-pytest-with-core> add \ clan-pytest-with-core> . clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:203::create_clan clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:147 Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:203::create_clan clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:147 git \ clan-pytest-with-core> -C /build/pytest-vukamg3t/test-flake \ clan-pytest-with-core> commit \ clan-pytest-with-core> -m 'Initial commit' clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:204::create_clan clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:147 Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:204::create_clan clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:927 Prefetching flake /build/pytest-vukamg3t/test-flake clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 warning: you don't have Internet access; disabling some network-dependent features clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1174 Cache miss for clanInternals.vars.settings.secretStore clan-pytest-with-core> ============================= slowest 5 durations ============================== clan-pytest-with-core> 18.52s call clan_lib/tests/test_create.py::test_clan_create_api clan-pytest-with-core> 15.79s call clan_cli/tests/test_vars_generate.py::test_generate_public_and_secret_vars clan-pytest-with-core> 15.74s call clan_lib/flash/test_list.py::test_flash_config clan-pytest-with-core> 14.93s call clan_cli/tests/test_vars_prompts.py::test_prompt_prefill_on_regeneration clan-pytest-with-core> 12.89s call clan_cli/tests/test_vars_shared.py::test_import_survives_generate clan-pytest-with-core> =========================== short test summary info ============================ clan-pytest-with-core> FAILED clan_cli/init_test.py::test_init - clan_lib.flake.flake.ClanSelectError: Error on: $ clan select 'clanInternal... clan-pytest-with-core> FAILED clan_cli/init_test.py::test_init_fallback_from_non_clan_directory - clan_lib.flake.flake.ClanSelectError: Error on: $ clan select 'clanInternal... clan-pytest-with-core> FAILED clan_cli/init_test.py::test_init_existing_git - clan_lib.flake.flake.ClanSelectError: Error on: $ clan select 'clanInternal... clan-pytest-with-core> FAILED clan_cli/init_test.py::test_init_minimal_template - clan_lib.flake.flake.ClanSelectError: Error on: $ clan select 'clanInternal... clan-pytest-with-core> FAILED clan_cli/init_test.py::test_init_with_local_template_reference - clan_lib.flake.flake.ClanSelectError: Error on: $ clan select 'clanInternal... clan-pytest-with-core> FAILED clan_cli/init_test.py::test_init_substitutes_placeholders - clan_lib.flake.flake.ClanSelectError: Error on: $ clan select 'clanInternal... clan-pytest-with-core> FAILED clan_cli/tests/test_vars_age.py::test_age_ensure_machine_key_provisions_age_keygen - clan_lib.flake.flake.ClanSelectError: Error on: $ clan select 'clanInternal... clan-pytest-with-core> FAILED clan_cli/tests/test_create_flake.py::test_create_flake_existing_git - clan_lib.flake.flake.ClanSelectError: Error on: $ clan select 'clanInternal... clan-pytest-with-core> FAILED clan_cli/tests/test_create_flake.py::test_ui_template - clan_lib.flake.flake.ClanSelectError: Error on: $ clan select 'clanInternal... clan-pytest-with-core> FAILED clan_cli/tests/test_create_flake.py::test_create_flake_in_git_repo_without_flake_nix - clan_lib.flake.flake.ClanSelectError: Error on: $ clan select 'clanInternal... clan-pytest-with-core> FAILED clan_cli/tests/test_create_flake.py::test_create_flake_fallback_from_non_clan_directory - clan_lib.flake.flake.ClanSelectError: Error on: $ clan select 'clanInternal... clan-pytest-with-core> FAILED clan_cli/tests/test_create_flake.py::test_create_flake_with_local_template_reference - clan_lib.flake.flake.ClanSelectError: Error on: $ clan select 'clanInternal... clan-pytest-with-core> FAILED clan_cli/tests/test_create_flake.py::test_create_flake - clan_lib.flake.flake.ClanSelectError: Error on: $ clan select 'clanInternal... clan-pytest-with-core> ================== 13 failed, 227 passed, 1 skipped in 42.45s ================== clan-pytest-with-core> + exitHandler clan-pytest-with-core> + exitCode=1 clan-pytest-with-core> + set +e clan-pytest-with-core> + '[' -n '' ']' clan-pytest-with-core> + (( 1 != 0 )) clan-pytest-with-core> + runHook failureHook clan-pytest-with-core> + local hookName=failureHook clan-pytest-with-core> + shift clan-pytest-with-core> + local 'hooksSlice=failureHooks[@]' clan-pytest-with-core> + local hook clan-pytest-with-core> + for hook in "_callImplicitHook 0 $hookName" ${!hooksSlice+"${!hooksSlice}"} clan-pytest-with-core> + _logHook failureHook '_callImplicitHook 0 failureHook' clan-pytest-with-core> + [[ -z 2 ]] clan-pytest-with-core> + local hookKind=failureHook clan-pytest-with-core> + local 'hookExpr=_callImplicitHook 0 failureHook' clan-pytest-with-core> + shift 2 clan-pytest-with-core> + declare -F '_callImplicitHook 0 failureHook' clan-pytest-with-core> + type -p '_callImplicitHook 0 failureHook' clan-pytest-with-core> + [[ _callImplicitHook 0 failureHook != _callImplicitHook* ]] clan-pytest-with-core> + _eval '_callImplicitHook 0 failureHook' clan-pytest-with-core> + declare -F '_callImplicitHook 0 failureHook' clan-pytest-with-core> + eval '_callImplicitHook 0 failureHook' clan-pytest-with-core> ++ _callImplicitHook 0 failureHook clan-pytest-with-core> ++ local def=0 clan-pytest-with-core> ++ local hookName=failureHook clan-pytest-with-core> ++ declare -F failureHook clan-pytest-with-core> ++ type -p failureHook clan-pytest-with-core> ++ '[' -n '' ']' clan-pytest-with-core> ++ return 0 clan-pytest-with-core> + return 0 clan-pytest-with-core> + '[' -n '' ']' clan-pytest-with-core> + return 1 error: Cannot build '/nix/store/7xcwyrggdjzr4f7a3hchr90w46zz2mcs-clan-pytest-with-core.drv'. Reason: builder failed with exit code 1. Output paths: /nix/store/3yafcvn0dcy6nlmpjhnnbdpwadz1iw9g-clan-pytest-with-core Last 25 log lines: > + shift > + local 'hooksSlice=failureHooks[@]' > + local hook > + for hook in "_callImplicitHook 0 $hookName" ${!hooksSlice+"${!hooksSlice}"} > + _logHook failureHook '_callImplicitHook 0 failureHook' > + [[ -z 2 ]] > + local hookKind=failureHook > + local 'hookExpr=_callImplicitHook 0 failureHook' > + shift 2 > + declare -F '_callImplicitHook 0 failureHook' > + type -p '_callImplicitHook 0 failureHook' > + [[ _callImplicitHook 0 failureHook != _callImplicitHook* ]] > + _eval '_callImplicitHook 0 failureHook' > + declare -F '_callImplicitHook 0 failureHook' > + eval '_callImplicitHook 0 failureHook' > ++ _callImplicitHook 0 failureHook > ++ local def=0 > ++ local hookName=failureHook > ++ declare -F failureHook > ++ type -p failureHook > ++ '[' -n '' ']' > ++ return 0 > + return 0 > + '[' -n '' ']' > + return 1 For full logs, run: nix log /nix/store/7xcwyrggdjzr4f7a3hchr90w46zz2mcs-clan-pytest-with-core.drv