these 2 derivations will be built: /nix/store/9dq0w6ysk3y69d38npangxsbdngzwjmg-clan-cli-source.drv /nix/store/kglpgl03i60sk9rg46gdyacngrk7yw5r-clan-pytest-with-core.drv building '/nix/store/9dq0w6ysk3y69d38npangxsbdngzwjmg-clan-cli-source.drv' on 'ssh-ng://builder@build-x86-01.clan.lol' building '/nix/store/9dq0w6ysk3y69d38npangxsbdngzwjmg-clan-cli-source.drv' building '/nix/store/kglpgl03i60sk9rg46gdyacngrk7yw5r-clan-pytest-with-core.drv' on 'ssh-ng://builder@build-x86-01.clan.lol' building '/nix/store/kglpgl03i60sk9rg46gdyacngrk7yw5r-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/abcfxlxwnqqdzwmbqxf33ql32qnqmcx0-closure-info ]] clan-pytest-with-core> ++++ nproc clan-pytest-with-core> +++ /nix/store/ibg16grw5is7i7ilnflc5xmj6fwksqkl-findutils-4.11.0/bin/xargs -r -P32 /nix/store/97d5ygrvqj55f4nx1x34wfdcc7qn11c0-coreutils-9.11/bin/cp --recursive --no-dereference --reflink=auto --target-directory /build/store/nix/store clan-pytest-with-core> +++ /nix/store/r4yd7hpfwpx5s8ily1ipwjc17cl087mn-nix-2.34.8/bin/nix-store --load-db --store /build/store clan-pytest-with-core> +++ export CLAN_CORE_PATH=/nix/store/x4g1qsn1nq0q56zn8h9c7xaiysv7bsf2-clan-core-flake clan-pytest-with-core> +++ CLAN_CORE_PATH=/nix/store/x4g1qsn1nq0q56zn8h9c7xaiysv7bsf2-clan-core-flake clan-pytest-with-core> +++ export PYTHONWARNINGS=error clan-pytest-with-core> +++ PYTHONWARNINGS=error clan-pytest-with-core> +++ export NIXPKGS=/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source clan-pytest-with-core> +++ NIXPKGS=/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-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 0x7fffe8757380> 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: timeout-2.4.0, subprocess-1.6.0, xdist-3.8.0 clan-pytest-with-core> 16 workers [233 items] clan-pytest-with-core> scheduling tests via LoadScheduling clan-pytest-with-core> clan-pytest-with-core> clan_lib/persist/write_rules_test.py::test_write_integration clan-pytest-with-core> clan_lib/tests/test_inventory_checks.py::test_role_max_machines_passes_across_instances clan-pytest-with-core> clan_lib/machines/actions_test.py::test_set_machine_no_op clan-pytest-with-core> clan_lib/persist/inventory_store_test.py::test_manipulate_list[lists.nix] clan-pytest-with-core> clan_lib/machines/actions_test.py::test_list_machines_full clan-pytest-with-core> clan_lib/services/modules_test.py::test_delete_service_instance clan-pytest-with-core> clan_lib/vars/migrations/test_migrate_zerotier.py::TestMigrateZerotier::test_legacy clan-pytest-with-core> clan_lib/flash/test_list.py::test_flash_config clan-pytest-with-core> clan_lib/tests/test_inventory_checks.py::test_collect_inventory_checks_empty_when_passing clan-pytest-with-core> clan_lib/vars/migrations/test_migrate_zerotier.py::TestMigrateZerotier::test_multi_network_error clan-pytest-with-core> clan_lib/tests/test_create.py::test_clan_create_api clan-pytest-with-core> clan_lib/machines/actions_test.py::test_get_machine_writeability clan-pytest-with-core> clan_lib/vars/migrations/test_migrate_zerotier.py::TestMigrateZerotier::test_legacy_with_empty_skeletons clan-pytest-with-core> clan_lib/flake/flake_cache_test.py::test_flake_caching clan-pytest-with-core> clan_lib/flake/flake_cache_test.py::test_cache_gc clan-pytest-with-core> clan_lib/services/modules_test.py::test_get_service_readmes clan-pytest-with-core> [gw11] [ 0%] PASSED clan_lib/flake/flake_cache_test.py::test_cache_gc clan-pytest-with-core> clan_lib/flake/flake_cache_test.py::test_get_nonexistent_after_maybe clan-pytest-with-core> [gw11] [ 0%] PASSED clan_lib/flake/flake_cache_test.py::test_get_nonexistent_after_maybe clan-pytest-with-core> clan_lib/dirs/dirs_test.py::test_get_clan_directories_default clan-pytest-with-core> [gw3] [ 1%] 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_collect_inventory_checks_reports_error clan-pytest-with-core> [gw3] [ 1%] PASSED clan_lib/tests/test_inventory_checks.py::test_collect_inventory_checks_reports_error clan-pytest-with-core> clan_lib/tests/test_inventory_checks.py::test_collect_inventory_checks_role_max_machines clan-pytest-with-core> [gw11] [ 2%] PASSED clan_lib/dirs/dirs_test.py::test_get_clan_directories_default clan-pytest-with-core> clan_lib/dirs/dirs_test.py::test_get_clan_directories_invalid_flake clan-pytest-with-core> [gw11] [ 2%] PASSED clan_lib/dirs/dirs_test.py::test_get_clan_directories_invalid_flake clan-pytest-with-core> clan_lib/dirs/dirs_test.py::test_get_clan_directories_with_direct_directory_config clan-pytest-with-core> [gw3] [ 3%] PASSED clan_lib/tests/test_inventory_checks.py::test_collect_inventory_checks_role_max_machines clan-pytest-with-core> clan_lib/clan/test_create.py::test_create_with_name clan-pytest-with-core> [gw11] [ 3%] PASSED clan_lib/dirs/dirs_test.py::test_get_clan_directories_with_direct_directory_config clan-pytest-with-core> clan_lib/clan/test_create.py::test_create_simple clan-pytest-with-core> [gw3] [ 3%] 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[default] clan-pytest-with-core> [gw11] [ 4%] PASSED clan_lib/clan/test_create.py::test_create_simple clan-pytest-with-core> clan_lib/clan/test_create.py::test_can_handle_path_without_slash clan-pytest-with-core> [gw10] [ 4%] PASSED 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> [gw13] [ 5%] PASSED clan_lib/flake/flake_cache_test.py::test_flake_caching clan-pytest-with-core> clan_lib/flake/flake_cache_test.py::test_cache_persistence clan-pytest-with-core> [gw3] [ 5%] PASSED clan_lib/clan/test_create.py::test_create_substitutes_placeholders[default] clan-pytest-with-core> clan_lib/clan/test_create.py::test_create_substitutes_placeholders[minimal] clan-pytest-with-core> [gw11] [ 6%] PASSED clan_lib/clan/test_create.py::test_can_handle_path_without_slash clan-pytest-with-core> clan_lib/clan/test_create.py::test_default_cant_be_modified_by_api clan-pytest-with-core> [gw9] [ 6%] FAILED clan_lib/flash/test_list.py::test_flash_config clan-pytest-with-core> clan_lib/flash/test_list.py::test_list_keymaps clan-pytest-with-core> [gw9] [ 6%] PASSED clan_lib/flash/test_list.py::test_list_keymaps clan-pytest-with-core> clan_lib/flake/flake_test.py::test_conditional_all_selector clan-pytest-with-core> [gw10] [ 7%] 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> [gw3] [ 7%] PASSED clan_lib/clan/test_create.py::test_create_substitutes_placeholders[minimal] clan-pytest-with-core> clan_lib/clan/test_create.py::test_minimal_can_be_modified_by_api clan-pytest-with-core> [gw11] [ 8%] PASSED clan_lib/clan/test_create.py::test_default_cant_be_modified_by_api clan-pytest-with-core> clan_lib/clan/test_create.py::test_create_invalid_name clan-pytest-with-core> [gw11] [ 8%] PASSED clan_lib/clan/test_create.py::test_create_invalid_name clan-pytest-with-core> clan_lib/clan/get_test.py::test_get_clan_details_invalid_flake clan-pytest-with-core> [gw11] [ 9%] PASSED clan_lib/clan/get_test.py::test_get_clan_details_invalid_flake clan-pytest-with-core> clan_lib/clan/get_test.py::test_get_clan_details clan-pytest-with-core> [gw9] [ 9%] PASSED clan_lib/flake/flake_test.py::test_conditional_all_selector clan-pytest-with-core> clan_lib/clan/check_test.py::test_check_clan_valid clan-pytest-with-core> [gw10] [ 9%] PASSED clan_lib/machines/actions_test.py::test_list_nixos_machines clan-pytest-with-core> clan_lib/api/directory_test.py::test_get_clan_dir_default clan-pytest-with-core> [gw11] [ 10%] PASSED clan_lib/clan/get_test.py::test_get_clan_details clan-pytest-with-core> clan_lib/api/directory_settings_test.py::test_secrets_groups_with_directory_setting clan-pytest-with-core> [gw3] [ 10%] PASSED clan_lib/clan/test_create.py::test_minimal_can_be_modified_by_api clan-pytest-with-core> [gw10] [ 11%] PASSED clan_lib/api/directory_test.py::test_get_clan_dir_default clan-pytest-with-core> clan_lib/api/directory_settings_test.py::test_secrets_users_list_with_directory_setting clan-pytest-with-core> clan_lib/api/directory_test.py::test_get_clan_dir_custom clan-pytest-with-core> [gw10] [ 11%] PASSED clan_lib/api/directory_test.py::test_get_clan_dir_custom clan-pytest-with-core> clan_lib/api/directory_settings_test.py::test_vars_keygen_with_directory_setting clan-pytest-with-core> [gw9] [ 12%] PASSED clan_lib/clan/check_test.py::test_check_clan_valid clan-pytest-with-core> clan_lib/api/directory_test.py::test_get_relative_clan_directory_default clan-pytest-with-core> [gw10] [ 12%] PASSED clan_lib/api/directory_settings_test.py::test_vars_keygen_with_directory_setting clan-pytest-with-core> clan_lib/api/directory_settings_test.py::test_secrets_users_with_directory_setting clan-pytest-with-core> [gw9] [ 12%] PASSED clan_lib/api/directory_test.py::test_get_relative_clan_directory_default clan-pytest-with-core> clan_lib/api/directory_test.py::test_get_relative_clan_directory_custom clan-pytest-with-core> [gw5] [ 13%] FAILED clan_lib/tests/test_create.py::test_clan_create_api clan-pytest-with-core> clan_lib/tags/list_test.py::test_list_inventory_tags clan-pytest-with-core> [gw10] [ 13%] 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_vars_generate_age_with_directory_setting clan-pytest-with-core> [gw9] [ 14%] PASSED clan_lib/api/directory_test.py::test_get_relative_clan_directory_custom clan-pytest-with-core> clan_lib/api/directory_test.py::test_get_relative_clan_directory_invalid_flake clan-pytest-with-core> [gw3] [ 14%] 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> [gw9] [ 15%] PASSED clan_lib/api/directory_test.py::test_get_relative_clan_directory_invalid_flake clan-pytest-with-core> clan_cli/tests/test_vars_shared.py::test_multi_machine_shared_vars clan-pytest-with-core> [gw11] [ 15%] PASSED clan_lib/api/directory_settings_test.py::test_secrets_groups_with_directory_setting clan-pytest-with-core> clan_lib/api/directory_settings_test.py::test_secrets_remove_with_directory_setting clan-pytest-with-core> [gw3] [ 15%] 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_secrets_set_with_directory_setting clan-pytest-with-core> [gw13] [ 16%] PASSED clan_lib/flake/flake_cache_test.py::test_cache_persistence clan-pytest-with-core> clan_lib/flake/flake_cache_test.py::test_caching_works clan-pytest-with-core> [gw11] [ 16%] PASSED clan_lib/api/directory_settings_test.py::test_secrets_remove_with_directory_setting clan-pytest-with-core> clan_lib/api/directory_settings_test.py::test_secrets_key_generate_with_directory_setting clan-pytest-with-core> [gw5] [ 17%] PASSED clan_lib/tags/list_test.py::test_list_inventory_tags clan-pytest-with-core> clan_lib/services/modules_test.py::test_list_service_instances clan-pytest-with-core> [gw13] [ 17%] PASSED clan_lib/flake/flake_cache_test.py::test_caching_works clan-pytest-with-core> clan_cli/tests/test_vars_shared.py::test_shared_generator_allows_machine_specific_differences clan-pytest-with-core> [gw3] [ 18%] PASSED clan_lib/api/directory_settings_test.py::test_secrets_set_with_directory_setting clan-pytest-with-core> clan_lib/api/directory_settings_test.py::test_secrets_list_with_directory_setting clan-pytest-with-core> [gw11] [ 18%] PASSED clan_lib/api/directory_settings_test.py::test_secrets_key_generate_with_directory_setting clan-pytest-with-core> clan_lib/api/directory_settings_test.py::test_vars_generate_with_directory_setting clan-pytest-with-core> [gw10] [ 18%] FAILED clan_lib/api/directory_settings_test.py::test_vars_generate_age_with_directory_setting clan-pytest-with-core> clan_lib/docs_test.py::test_guides_url_pages_exist clan-pytest-with-core> [gw3] [ 19%] PASSED clan_lib/api/directory_settings_test.py::test_secrets_list_with_directory_setting clan-pytest-with-core> clan_cli/tests/test_vars_shared.py::test_password_store_set_shared_var_for_multiple_machines clan-pytest-with-core> [gw5] [ 19%] PASSED clan_lib/services/modules_test.py::test_list_service_instances 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> [gw10] [ 20%] PASSED clan_lib/docs_test.py::test_guides_url_pages_exist clan-pytest-with-core> clan_cli/tests/test_vars_shared.py::test_shared_vars_regeneration clan-pytest-with-core> [gw9] [ 20%] FAILED 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> [gw13] [ 21%] FAILED clan_cli/tests/test_vars_shared.py::test_shared_generator_allows_machine_specific_differences 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> [gw11] [ 21%] FAILED clan_lib/api/directory_settings_test.py::test_vars_generate_with_directory_setting clan-pytest-with-core> clan_cli/tests/test_vars_shared.py::test_export_age_import_sops clan-pytest-with-core> [gw3] [ 21%] FAILED 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 clan-pytest-with-core> [gw5] [ 22%] FAILED 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> [gw9] [ 22%] FAILED clan_cli/tests/test_vars_shared.py::test_add_machine_to_existing_shared_secret clan-pytest-with-core> clan_cli/tests/test_vars_shared.py::test_share_mode_switch_regenerates_secret clan-pytest-with-core> [gw10] [ 23%] FAILED clan_cli/tests/test_vars_shared.py::test_shared_vars_regeneration clan-pytest-with-core> clan_cli/tests/test_vars_prompts.py::test_prompt_prefill_on_regeneration clan-pytest-with-core> [gw13] [ 23%] FAILED 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> [gw11] [ 24%] FAILED clan_cli/tests/test_vars_shared.py::test_export_age_import_sops clan-pytest-with-core> clan_cli/tests/test_vars_shared.py::test_import_survives_generate clan-pytest-with-core> [gw3] [ 24%] FAILED clan_cli/tests/test_vars_shared.py::test_cross_machine_shared_dependency clan-pytest-with-core> clan_cli/tests/test_vars_shared.py::test_export_sops_import_age clan-pytest-with-core> [gw4] [ 24%] PASSED clan_lib/tests/test_inventory_checks.py::test_role_max_machines_passes_across_instances clan-pytest-with-core> clan_lib/tests/test_inventory_checks.py::test_role_min_machines_passes_across_instances clan-pytest-with-core> [gw1] [ 25%] PASSED clan_lib/vars/migrations/test_migrate_zerotier.py::TestMigrateZerotier::test_multi_network_error clan-pytest-with-core> clan_lib/vars/migrations/test_migrate_zerotier.py::TestMigrateZerotier::test_mixed_state clan-pytest-with-core> [gw12] [ 25%] 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> [gw15] [ 26%] PASSED clan_lib/persist/write_rules_test.py::test_write_integration clan-pytest-with-core> clan_lib/persist/inventory_store_test.py::test_simple_read_write[1.nix] clan-pytest-with-core> [gw4] [ 26%] PASSED clan_lib/tests/test_inventory_checks.py::test_role_min_machines_passes_across_instances 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> [gw6] [ 27%] PASSED clan_lib/services/modules_test.py::test_get_service_readmes clan-pytest-with-core> clan_lib/services/modules_test.py::test_list_service_modules clan-pytest-with-core> [gw5] [ 27%] FAILED clan_cli/tests/test_vars_shared.py::test_sops_set_shared_var_for_multiple_machines clan-pytest-with-core> clan_cli/tests/test_vars_shared.py::test_age_set_shared_var_for_multiple_machines clan-pytest-with-core> [gw9] [ 27%] FAILED clan_cli/tests/test_vars_shared.py::test_share_mode_switch_regenerates_secret clan-pytest-with-core> clan_cli/tests/test_vars_prompts.py::test_persisted_prompt_reused_not_reasked clan-pytest-with-core> [gw4] [ 28%] PASSED clan_lib/tests/test_inventory_checks.py::test_role_min_machines_fails_in_one_of_two_instances clan-pytest-with-core> clan_cli/tests/test_vars_generate.py::test_sops_fix_commits_all_changes clan-pytest-with-core> [gw2] [ 28%] PASSED clan_lib/vars/migrations/test_migrate_zerotier.py::TestMigrateZerotier::test_legacy_with_empty_skeletons clan-pytest-with-core> clan_lib/vars/migrations/test_migrate_zerotier.py::TestMigrateZerotier::test_old_final_real clan-pytest-with-core> [gw1] [ 29%] 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_canonical_shared_only clan-pytest-with-core> [gw12] [ 29%] PASSED clan_lib/machines/actions_test.py::test_set_machine_fully_defined_in_nix clan-pytest-with-core> clan_lib/machines/actions_test.py::test_set_machine_manage_tags clan-pytest-with-core> [gw13] [ 30%] FAILED clan_cli/tests/test_vars_shared.py::test_sops_fix_removes_machine_from_no_deploy_shared_secret clan-pytest-with-core> clan_cli/tests/test_vars_generate.py::test_generate_secret_var_sops_with_default_group clan-pytest-with-core> [gw10] [ 30%] FAILED clan_cli/tests/test_vars_prompts.py::test_prompt_prefill_on_regeneration clan-pytest-with-core> clan_cli/tests/test_vars_prompts.py::test_api_set_prompts clan-pytest-with-core> [gw6] [ 30%] PASSED clan_lib/services/modules_test.py::test_list_service_modules clan-pytest-with-core> clan_lib/services/modules_test.py::test_update_service_instance clan-pytest-with-core> [gw2] [ 31%] PASSED clan_lib/vars/migrations/test_migrate_zerotier.py::TestMigrateZerotier::test_old_final_real clan-pytest-with-core> clan_lib/tests/test_known_selectors.py::test_known_selectors_exist clan-pytest-with-core> [gw11] [ 31%] FAILED clan_cli/tests/test_vars_shared.py::test_import_survives_generate clan-pytest-with-core> clan_cli/tests/test_vars_prompts.py::test_prompt clan-pytest-with-core> [gw3] [ 32%] FAILED clan_cli/tests/test_vars_shared.py::test_export_sops_import_age clan-pytest-with-core> clan_cli/tests/test_vars_generate.py::test_generate_secret_for_multiple_machines clan-pytest-with-core> [gw1] [ 32%] PASSED clan_lib/vars/migrations/test_migrate_zerotier.py::TestMigrateZerotier::test_canonical_shared_only clan-pytest-with-core> clan_cli/tests/test_vars_generate.py::test_exports_without_generators_evaluates clan-pytest-with-core> [gw9] [ 33%] FAILED clan_cli/tests/test_vars_prompts.py::test_persisted_prompt_reused_not_reasked clan-pytest-with-core> clan_cli/tests/test_vars_generate_inventory_checks.py::test_vars_generate_blocked_by_check_errors clan-pytest-with-core> [gw10] [ 33%] FAILED 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> [gw5] [ 33%] FAILED clan_cli/tests/test_vars_shared.py::test_age_set_shared_var_for_multiple_machines 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> [gw12] [ 34%] PASSED clan_lib/machines/actions_test.py::test_set_machine_manage_tags clan-pytest-with-core> clan_cli/tests/test_vars_errors.py::test_non_existing_dependency_raises_error clan-pytest-with-core> [gw9] [ 34%] 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_generate.py::test_generate_public_and_secret_vars clan-pytest-with-core> [gw1] [ 35%] PASSED clan_cli/tests/test_vars_generate.py::test_exports_without_generators_evaluates clan-pytest-with-core> clan_cli/tests/test_vars_generate.py::test_binary_secret_roundtrip clan-pytest-with-core> [gw15] [ 35%] 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> [gw4] [ 36%] FAILED 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> [gw13] [ 36%] FAILED clan_cli/tests/test_vars_generate.py::test_generate_secret_var_sops_with_default_group clan-pytest-with-core> clan_cli/tests/test_vars_generate.py::test_generate_shared_secret_sops clan-pytest-with-core> [gw11] [ 36%] FAILED clan_cli/tests/test_vars_prompts.py::test_prompt clan-pytest-with-core> clan_cli/tests/test_vars_errors.py::test_shared_generator_conflicting_definition_raises_error clan-pytest-with-core> [gw3] [ 37%] FAILED 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> [gw6] [ 37%] PASSED clan_lib/services/modules_test.py::test_update_service_instance clan-pytest-with-core> clan_cli/tests/test_vars_errors.py::test_generator_script_fails_with_nonzero_exit clan-pytest-with-core> [gw9] [ 38%] FAILED clan_cli/tests/test_vars_generate.py::test_generate_public_and_secret_vars clan-pytest-with-core> clan_cli/tests/test_vars_cache.py::test_generate_secret_var_sops_minimal_select_calls clan-pytest-with-core> [gw10] [ 38%] FAILED clan_cli/tests/test_vars_prompts.py::test_get_generator_prompt_previous_values clan-pytest-with-core> clan_cli/tests/test_vars_cache.py::test_invalidation clan-pytest-with-core> [gw5] [ 39%] FAILED 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_generate.py::test_flake_level_generators clan-pytest-with-core> [gw4] [ 39%] PASSED clan_cli/tests/test_vars_generate.py::test_groups_add_secret_commits_changes clan-pytest-with-core> [gw12] [ 39%] FAILED clan_cli/tests/test_vars_errors.py::test_non_existing_dependency_raises_error clan-pytest-with-core> [gw1] [ 40%] FAILED clan_cli/tests/test_vars_generate.py::test_binary_secret_roundtrip clan-pytest-with-core> clan_cli/tests/test_vars_age.py::test_age_get_identity_env_vars clan-pytest-with-core> clan_cli/tests/test_vars_cache.py::test_dynamic_invalidation clan-pytest-with-core> clan_cli/tests/test_vars_errors.py::test_generator_script_missing_output_file clan-pytest-with-core> [gw4] [ 40%] PASSED clan_cli/tests/test_vars_age.py::test_age_get_identity_env_vars clan-pytest-with-core> clan_cli/tests/test_vars_age.py::test_age_get_identity_fallback_paths clan-pytest-with-core> [gw4] [ 41%] 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_set_and_get_per_machine clan-pytest-with-core> [gw5] [ 41%] FAILED clan_cli/tests/test_vars_generate.py::test_flake_level_generators clan-pytest-with-core> clan_cli/tests/test_vars_age.py::test_age_get_identity_none_found clan-pytest-with-core> [gw5] [ 42%] 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> [gw13] [ 42%] FAILED 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> [gw3] [ 42%] FAILED 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 clan-pytest-with-core> [gw4] [ 43%] 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> [gw11] [ 43%] FAILED 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> [gw3] [ 44%] PASSED clan_cli/tests/test_vars_generate.py::test_create_sops_age_secrets clan-pytest-with-core> clan_cli/tests/test_vars_age.py::test_age_incremental_generate_shared_secret clan-pytest-with-core> [gw5] [ 44%] 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_get_shared_finds_any_machine_key clan-pytest-with-core> [gw10] [ 45%] FAILED clan_cli/tests/test_vars_cache.py::test_invalidation clan-pytest-with-core> [gw6] [ 45%] PASSED clan_cli/tests/test_vars_errors.py::test_generator_script_fails_with_nonzero_exit clan-pytest-with-core> 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_errors.py::test_circular_dependency_raises_error clan-pytest-with-core> [gw1] [ 45%] FAILED 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> [gw9] [ 46%] FAILED clan_cli/tests/test_vars_cache.py::test_generate_secret_var_sops_minimal_select_calls clan-pytest-with-core> clan_cli/tests/test_vars_cache.py::test_cache_misses_for_vars_operations clan-pytest-with-core> [gw2] [ 46%] FAILED clan_lib/tests/test_known_selectors.py::test_known_selectors_exist 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> [gw12] [ 47%] FAILED clan_cli/tests/test_vars_errors.py::test_generator_script_missing_output_file clan-pytest-with-core> clan_cli/tests/test_vars_age.py::test_age_ensure_machine_key clan-pytest-with-core> [gw5] [ 47%] 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> [gw4] [ 48%] 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_error_get_nonexistent clan-pytest-with-core> [gw12] [ 48%] 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_rekey_machine_key clan-pytest-with-core> [gw4] [ 48%] 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_deploy_false_shared_encrypted_to_user_keys clan-pytest-with-core> [gw5] [ 49%] 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_deploy_false_per_machine_encrypted_to_user_keys clan-pytest-with-core> [gw12] [ 49%] 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_deploy_true_per_machine_encrypted_to_machine_key clan-pytest-with-core> [gw13] [ 50%] FAILED clan_cli/tests/test_vars_generate.py::test_generate_secret_var_password_store clan-pytest-with-core> clan_cli/tests/test_vars_age.py::test_age_fix_shared_reencrypt clan-pytest-with-core> [gw4] [ 50%] 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_shared_encrypted_to_machine_keys clan-pytest-with-core> [gw5] [ 51%] 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_deploy_false_per_machine_rekeys_on_user_change clan-pytest-with-core> [gw12] [ 51%] 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_fix_deploy_false_shared_rekeys_on_user_change clan-pytest-with-core> [gw13] [ 51%] PASSED clan_cli/tests/test_vars_age.py::test_age_fix_shared_reencrypt clan-pytest-with-core> [gw4] [ 52%] 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_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> [gw3] [ 52%] FAILED clan_cli/tests/test_vars_age.py::test_age_incremental_generate_shared_secret clan-pytest-with-core> clan_cli/tests/test_vars_age.py::test_age_error_missing_machine_pubkey clan-pytest-with-core> [gw4] [ 53%] 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_get_works_for_deploy_false_shared clan-pytest-with-core> [gw13] [ 53%] 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_get_works_for_deploy_false_per_machine clan-pytest-with-core> [gw5] [ 54%] 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_age.py::test_age_transition_deploy_true_to_false_shared clan-pytest-with-core> [gw6] [ 54%] FAILED clan_cli/tests/test_vars_errors.py::test_circular_dependency_raises_error clan-pytest-with-core> clan_cli/tests/test_vars_age.py::test_age_delete_store_leaves_shared_secrets_untouched clan-pytest-with-core> [gw3] [ 54%] 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_populate_dir_skips_deploy_false clan-pytest-with-core> [gw1] [ 55%] FAILED clan_cli/tests/test_vars_cache.py::test_get_generators_only_decrypts_requested_machines clan-pytest-with-core> clan_cli/tests/test_vars_age.py::test_age_sidecar_created_for_shared_secret clan-pytest-with-core> [gw15] [ 55%] PASSED clan_lib/persist/inventory_store_test.py::test_simple_deferred[deferred.nix] clan-pytest-with-core> clan_cli/tests/test_vars_age.py::test_generate_secret_var_age clan-pytest-with-core> [gw13] [ 56%] PASSED clan_cli/tests/test_vars_age.py::test_age_get_works_for_deploy_false_per_machine clan-pytest-with-core> [gw10] [ 56%] FAILED 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_age.py::test_age_delete_cleanup clan-pytest-with-core> clan_cli/tests/test_vars_age.py::test_age_fix_skips_when_recipients_unchanged clan-pytest-with-core> [gw12] [ 57%] 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_false_to_true_shared clan-pytest-with-core> [gw4] [ 57%] 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_sidecar_created_for_machine_key clan-pytest-with-core> [gw9] [ 57%] FAILED clan_cli/tests/test_vars_cache.py::test_cache_misses_for_vars_operations clan-pytest-with-core> clan_cli/tests/test_vars_age.py::test_age_no_sidecar_for_per_machine_secret clan-pytest-with-core> [gw3] [ 58%] PASSED clan_cli/tests/test_vars_age.py::test_age_populate_dir_skips_deploy_false clan-pytest-with-core> clan_cli/tests/test_vars_age.py::test_age_fix_rekeys_machine_key_when_user_key_removed clan-pytest-with-core> [gw6] [ 58%] PASSED clan_cli/tests/test_vars_age.py::test_age_delete_store_leaves_shared_secrets_untouched clan-pytest-with-core> [gw10] [ 59%] 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_fix_rekeys_machine_key_when_user_key_added clan-pytest-with-core> clan_cli/tests/test_secrets_cli.py::test_users clan-pytest-with-core> [gw4] [ 59%] PASSED clan_cli/tests/test_vars_age.py::test_age_sidecar_created_for_machine_key clan-pytest-with-core> clan_cli/tests/test_secrets_cli.py::test_machines clan-pytest-with-core> [gw1] [ 60%] 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_fix_noop_when_nothing_changed clan-pytest-with-core> [gw13] [ 60%] PASSED clan_cli/tests/test_vars_age.py::test_age_fix_skips_when_recipients_unchanged clan-pytest-with-core> [gw5] [ 60%] PASSED clan_cli/tests/test_vars_age.py::test_age_transition_deploy_true_to_false_shared clan-pytest-with-core> [gw2] [ 61%] FAILED clan_cli/tests/test_vars_errors.py::test_shared_vars_must_never_depend_on_machine_specific_vars clan-pytest-with-core> clan_cli/tests/test_upload_single_file.py::test_upload_single_file clan-pytest-with-core> 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_age.py::test_age_fix_reencrypts_when_recipients_changed clan-pytest-with-core> [gw9] [ 61%] PASSED clan_cli/tests/test_vars_age.py::test_age_no_sidecar_for_per_machine_secret clan-pytest-with-core> clan_cli/tests/test_secrets_cli.py::test_groups clan-pytest-with-core> [gw9] [ 62%] SKIPPED clan_cli/tests/test_secrets_cli.py::test_groups clan-pytest-with-core> clan_cli/tests/test_machines_cli.py::test_machines_update_nonexistent_machine clan-pytest-with-core> [gw12] [ 62%] PASSED clan_cli/tests/test_vars_age.py::test_age_transition_deploy_false_to_true_shared clan-pytest-with-core> clan_cli/tests/test_secrets_cli.py::test_multiple_user_keys clan-pytest-with-core> [gw1] [ 63%] PASSED clan_cli/tests/test_vars_age.py::test_age_fix_noop_when_nothing_changed clan-pytest-with-core> clan_cli/tests/test_secrets_cli.py::test_secrets_key_generate_reports_registered_user clan-pytest-with-core> [gw9] [ 63%] 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> [gw5] [ 63%] PASSED clan_cli/tests/test_vars_age.py::test_age_fix_reencrypts_when_recipients_changed clan-pytest-with-core> clan_cli/tests/test_machines_cli.py::test_machines_update_with_tags [localhost] $ clan secrets set --flake /build/pytest-nrmvewwf/test_flake_with_core bob_secret_CsApuHiwiq 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-nrmvewwf/test_flake_with_core clan-pytest-with-core> clan-pytest-with-core> [gw11] [ 64%] FAILED clan_cli/tests/test_vars_errors.py::test_accessing_path_before_generate_shows_helpful_error clan-pytest-with-core> clan_cli/tests/test_vars_age.py::test_age_error_get_no_machine_key warning: you don't have Internet access; disabling some network-dependent features clan-pytest-with-core> clan-pytest-with-core> [gw6] [ 64%] PASSED clan_cli/tests/test_vars_age.py::test_age_fix_rekeys_machine_key_when_user_key_added Cache miss for clanInternals.?secrets.?age.?plugins clan-pytest-with-core> clan-pytest-with-core> clan_cli/tests/test_secrets_cli.py::test_secrets_key_generate_gpg clan-pytest-with-core> [gw9] [ 65%] PASSED clan_cli/tests/test_machines_cli.py::test_machines_update_typo_in_machine_name clan-pytest-with-core> clan_cli/tests/test_inventory_serde.py::test_inventory_deserialize_variants[test_flake_with_core1] 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> clan-pytest-with-core> [gw5] [ 65%] PASSED clan_cli/tests/test_machines_cli.py::test_machines_update_with_tags clan-pytest-with-core> clan_cli/tests/test_install_secret_path.py::test_sops_install_secret_path[default] 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/tmp_5e1k_a6 \ clan-pytest-with-core> encrypt \ clan-pytest-with-core> --in-place /dev/shm/tmp3sxe3g6d 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-nrmvewwf/test_flake_with_core \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-nrmvewwf/test_flake_with_core/sops/secrets/bob_secret_CsApuHiwiq/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_CsApuHiwiq/users/bob to git clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-nrmvewwf/test_flake_with_core \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-nrmvewwf/test_flake_with_core/sops/secrets/bob_secret_CsApuHiwiq/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_CsApuHiwiq/secret to git clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-nrmvewwf/test_flake_with_core \ clan-pytest-with-core> diff \ clan-pytest-with-core> --cached --exit-code \ clan-pytest-with-core> -- /build/pytest-nrmvewwf/test_flake_with_core/sops/secrets/bob_secret_CsApuHiwiq/users/bob \ clan-pytest-with-core> /build/pytest-nrmvewwf/test_flake_with_core/sops/secrets/bob_secret_CsApuHiwiq/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-nrmvewwf/test_flake_with_core \ clan-pytest-with-core> commit \ clan-pytest-with-core> -m 'secrets: update bob_secret_CsApuHiwiq' \ clan-pytest-with-core> --no-verify /build/pytest-nrmvewwf/test_flake_with_core/sops/secrets/bob_secret_CsApuHiwiq/users/bob \ clan-pytest-with-core> /build/pytest-nrmvewwf/test_flake_with_core/sops/secrets/bob_secret_CsApuHiwiq/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_CsApuHiwiq/users/bob, sops/secrets/bob_secret_CsApuHiwiq/secret clan-pytest-with-core> clan-pytest-with-core> [gw1] [ 66%] PASSED clan_cli/tests/test_secrets_cli.py::test_secrets_key_generate_reports_registered_user clan-pytest-with-core> clan_cli/tests/test_inventory_serde.py::test_inventory_deserialize_variants[test_flake_with_core0] [localhost] $ clan secrets set --flake /build/pytest-nrmvewwf/test_flake_with_core bob_secret_ijwsbWkXld 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-nrmvewwf/test_flake_with_core clan-pytest-with-core> [localhost] $ clan secrets users add --flake /build/pytest-f0lb9l8k/test_flake_with_core --pgp-key 9A9B2741C8062D3D3DF1302D8B049E262A5CA255 testuser clan-pytest-with-core> Caller: /build/src/clan_cli/tests/test_secrets_cli.py:1036::test_secrets_key_generate_gpg clan-pytest-with-core> clan-pytest-with-core> Prefetching flake /build/pytest-f0lb9l8k/test_flake_with_core clan-pytest-with-core> clan-pytest-with-core> [gw3] [ 66%] PASSED clan_cli/tests/test_vars_age.py::test_age_fix_rekeys_machine_key_when_user_key_removed warning: you don't have Internet access; disabling some network-dependent features clan-pytest-with-core> clan-pytest-with-core> clan_cli/tests/test_secrets_cli.py::test_secrets 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> clan-pytest-with-core> [gw13] [ 66%] PASSED clan_cli/tests/test_upload_single_file.py::test_upload_single_file clan-pytest-with-core> clan_cli/tests/test_machines_cli.py::test_machine_subcommands 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/0cecfc668b186543263649fd04d192ca10abe070 clan-pytest-with-core> (cached) $ clan select clanInternals.inventoryClass.relativeDirectory 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> git \ clan-pytest-with-core> -C /build/pytest-f0lb9l8k/test_flake_with_core \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-f0lb9l8k/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> sops \ clan-pytest-with-core> --config /build/tmpf40jn2f1 \ clan-pytest-with-core> encrypt \ clan-pytest-with-core> --in-place /dev/shm/tmp8570srfv 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_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-f0lb9l8k/test_flake_with_core \ clan-pytest-with-core> diff \ clan-pytest-with-core> --cached --exit-code \ clan-pytest-with-core> -- /build/pytest-f0lb9l8k/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-f0lb9l8k/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-f0lb9l8k/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> clan-pytest-with-core> [gw15] [ 67%] FAILED clan_cli/tests/test_vars_age.py::test_generate_secret_var_age 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> clan_cli/tests/test_vars_age.py::test_generate_secret_var_age_minimal_select_calls clan-pytest-with-core> [gw9] [ 67%] PASSED clan_cli/tests/test_inventory_serde.py::test_inventory_deserialize_variants[test_flake_with_core1] clan-pytest-with-core> clan_cli/tests/test_install_secret_path.py::test_password_store_upload_directory[custom] 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-nrmvewwf/test_flake_with_core \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-nrmvewwf/test_flake_with_core/sops/secrets/bob_secret_ijwsbWkXld/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_ijwsbWkXld/users/bob to git clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-nrmvewwf/test_flake_with_core \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-nrmvewwf/test_flake_with_core/sops/secrets/bob_secret_ijwsbWkXld/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_ijwsbWkXld/secret to git clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-nrmvewwf/test_flake_with_core \ clan-pytest-with-core> diff \ clan-pytest-with-core> --cached --exit-code \ clan-pytest-with-core> -- /build/pytest-nrmvewwf/test_flake_with_core/sops/secrets/bob_secret_ijwsbWkXld/users/bob \ clan-pytest-with-core> /build/pytest-nrmvewwf/test_flake_with_core/sops/secrets/bob_secret_ijwsbWkXld/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-nrmvewwf/test_flake_with_core \ clan-pytest-with-core> commit \ clan-pytest-with-core> -m 'secrets: update bob_secret_ijwsbWkXld' \ clan-pytest-with-core> --no-verify /build/pytest-nrmvewwf/test_flake_with_core/sops/secrets/bob_secret_ijwsbWkXld/users/bob \ clan-pytest-with-core> /build/pytest-nrmvewwf/test_flake_with_core/sops/secrets/bob_secret_ijwsbWkXld/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_ijwsbWkXld/users/bob, sops/secrets/bob_secret_ijwsbWkXld/secret clan-pytest-with-core> clan-pytest-with-core> [gw1] [ 68%] PASSED clan_cli/tests/test_inventory_serde.py::test_inventory_deserialize_variants[test_flake_with_core0] clan-pytest-with-core> clan_cli/tests/test_hardware_config.py::test_should_prompt_for_hardware_config [localhost] $ clan secrets users remove-key --flake /build/pytest-nrmvewwf/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-nrmvewwf/test_flake_with_core clan-pytest-with-core> [localhost] $ clan secrets key generate --flake /build/pytest-sy79p3v6/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: age13wwu5hhp6fd03r4zgy5p7cw5462twehya7u9996a9eglukw7ueks7lar82 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-sy79p3v6/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 age13wwu5hhp6fd03r4zgy5p7cw5462twehya7u9996a9eglukw7ueks7lar82 clan-pytest-with-core> Add your age public key to the repository with: clan-pytest-with-core> clan secrets users add --age-key age13wwu5hhp6fd03r4zgy5p7cw5462twehya7u9996a9eglukw7ueks7lar82 clan-pytest-with-core> clan-pytest-with-core> [gw11] [ 68%] PASSED clan_cli/tests/test_vars_age.py::test_age_error_get_no_machine_key clan-pytest-with-core> clan_cli/tests/test_install_secret_path.py::test_sops_install_secret_path[custom] warning: you don't have Internet access; disabling some network-dependent features clan-pytest-with-core> [localhost] $ clan secrets set --flake /build/pytest-f0lb9l8k/test_flake_with_core secret-name clan-pytest-with-core> Caller: /build/src/clan_cli/tests/test_secrets_cli.py:1070::test_secrets_key_generate_gpg clan-pytest-with-core> clan-pytest-with-core> Prefetching flake /build/pytest-f0lb9l8k/test_flake_with_core clan-pytest-with-core> sops \ clan-pytest-with-core> --config /build/tmpnfa0xppx \ clan-pytest-with-core> updatekeys \ clan-pytest-with-core> --yes /build/pytest-nrmvewwf/test_flake_with_core/sops/secrets/bob_secret_CsApuHiwiq/secret clan-pytest-with-core> Caller: /build/src/clan_cli/secrets/sops.py:320::sops_run clan-pytest-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/5f066f16a8cfa715bcde847969ebd9a2daddeb22 clan-pytest-with-core> 2026/08/18 10:51:29 Syncing keys for file /build/pytest-nrmvewwf/test_flake_with_core/sops/secrets/bob_secret_CsApuHiwiq/secret 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> 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/08/18 10:51:29 File /build/pytest-nrmvewwf/test_flake_with_core/sops/secrets/bob_secret_CsApuHiwiq/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/tmpcnghnu0k \ clan-pytest-with-core> updatekeys \ clan-pytest-with-core> --yes /build/pytest-nrmvewwf/test_flake_with_core/sops/secrets/bob_secret_ijwsbWkXld/secret clan-pytest-with-core> Caller: /build/src/clan_cli/secrets/sops.py:320::sops_run clan-pytest-with-core> clan-pytest-with-core> [localhost] $ clan secrets users add --flake /build/pytest-sy79p3v6/test_flake_with_core testuser age13wwu5hhp6fd03r4zgy5p7cw5462twehya7u9996a9eglukw7ueks7lar82 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-sy79p3v6/test_flake_with_core clan-pytest-with-core> 2026/08/18 10:51:29 Syncing keys for file /build/pytest-nrmvewwf/test_flake_with_core/sops/secrets/bob_secret_ijwsbWkXld/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/08/18 10:51:29 File /build/pytest-nrmvewwf/test_flake_with_core/sops/secrets/bob_secret_ijwsbWkXld/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-nrmvewwf/test_flake_with_core \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-nrmvewwf/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-nrmvewwf/test_flake_with_core \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-nrmvewwf/test_flake_with_core/sops/secrets/bob_secret_CsApuHiwiq/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_CsApuHiwiq/secret to git clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-nrmvewwf/test_flake_with_core \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-nrmvewwf/test_flake_with_core/sops/secrets/bob_secret_ijwsbWkXld/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_ijwsbWkXld/secret to git clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-nrmvewwf/test_flake_with_core \ clan-pytest-with-core> diff \ clan-pytest-with-core> --cached --exit-code \ clan-pytest-with-core> -- /build/pytest-nrmvewwf/test_flake_with_core/sops/users/bob \ clan-pytest-with-core> /build/pytest-nrmvewwf/test_flake_with_core/sops/secrets/bob_secret_CsApuHiwiq/secret \ clan-pytest-with-core> /build/pytest-nrmvewwf/test_flake_with_core/sops/secrets/bob_secret_ijwsbWkXld/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-nrmvewwf/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-nrmvewwf/test_flake_with_core/sops/users/bob \ clan-pytest-with-core> /build/pytest-nrmvewwf/test_flake_with_core/sops/secrets/bob_secret_CsApuHiwiq/secret \ clan-pytest-with-core> /build/pytest-nrmvewwf/test_flake_with_core/sops/secrets/bob_secret_ijwsbWkXld/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> 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/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_CsApuHiwiq/secret, sops/secrets/bob_secret_ijwsbWkXld/secret clan-pytest-with-core> Loading flake cache from file /build/clan-flake-cache/flakes-v2/0cecfc668b186543263649fd04d192ca10abe070 clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-sy79p3v6/test_flake_with_core \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-sy79p3v6/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-sy79p3v6/test_flake_with_core \ clan-pytest-with-core> diff \ clan-pytest-with-core> --cached --exit-code \ clan-pytest-with-core> -- /build/pytest-sy79p3v6/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-sy79p3v6/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-sy79p3v6/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> [gw1] [ 69%] PASSED clan_cli/tests/test_hardware_config.py::test_should_prompt_for_hardware_config clan-pytest-with-core> clan_cli/tests/test_create_flake.py::test_create_flake_in_git_repo_without_flake_nix [localhost] $ clan secrets users add-key --flake /build/pytest-nrmvewwf/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-nrmvewwf/test_flake_with_core clan-pytest-with-core> [localhost] $ clan secrets get --flake /build/pytest-sy79p3v6/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-sy79p3v6/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/5f066f16a8cfa715bcde847969ebd9a2daddeb22 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/tmpk8z4xqfc \ clan-pytest-with-core> encrypt \ clan-pytest-with-core> --in-place /dev/shm/tmpzbn8gax5 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/tmpjiupt46u \ clan-pytest-with-core> updatekeys \ clan-pytest-with-core> --yes /build/pytest-nrmvewwf/test_flake_with_core/sops/secrets/bob_secret_CsApuHiwiq/secret clan-pytest-with-core> Caller: /build/src/clan_cli/secrets/sops.py:320::sops_run clan-pytest-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> 2026/08/18 10:51:29 Syncing keys for file /build/pytest-nrmvewwf/test_flake_with_core/sops/secrets/bob_secret_CsApuHiwiq/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/08/18 10:51:29 File /build/pytest-nrmvewwf/test_flake_with_core/sops/secrets/bob_secret_CsApuHiwiq/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/tmp6ymzpba2 \ clan-pytest-with-core> updatekeys \ clan-pytest-with-core> --yes /build/pytest-nrmvewwf/test_flake_with_core/sops/secrets/bob_secret_ijwsbWkXld/secret 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-f0lb9l8k/test_flake_with_core \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-f0lb9l8k/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-f0lb9l8k/test_flake_with_core \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-f0lb9l8k/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-f0lb9l8k/test_flake_with_core \ clan-pytest-with-core> diff \ clan-pytest-with-core> --cached --exit-code \ clan-pytest-with-core> -- /build/pytest-f0lb9l8k/test_flake_with_core/sops/secrets/secret-name/users/testuser \ clan-pytest-with-core> /build/pytest-f0lb9l8k/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-f0lb9l8k/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-f0lb9l8k/test_flake_with_core/sops/secrets/secret-name/users/testuser \ clan-pytest-with-core> /build/pytest-f0lb9l8k/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> 2026/08/18 10:51:29 Syncing keys for file /build/pytest-nrmvewwf/test_flake_with_core/sops/secrets/bob_secret_ijwsbWkXld/secret clan-pytest-with-core> Committed 2 files to git: sops/secrets/secret-name/users/testuser, sops/secrets/secret-name/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/08/18 10:51:29 File /build/pytest-nrmvewwf/test_flake_with_core/sops/secrets/bob_secret_ijwsbWkXld/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-nrmvewwf/test_flake_with_core \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-nrmvewwf/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-nrmvewwf/test_flake_with_core \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-nrmvewwf/test_flake_with_core/sops/secrets/bob_secret_CsApuHiwiq/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_CsApuHiwiq/secret to git clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-nrmvewwf/test_flake_with_core \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-nrmvewwf/test_flake_with_core/sops/secrets/bob_secret_ijwsbWkXld/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_ijwsbWkXld/secret to git clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-nrmvewwf/test_flake_with_core \ clan-pytest-with-core> diff \ clan-pytest-with-core> --cached --exit-code \ clan-pytest-with-core> -- /build/pytest-nrmvewwf/test_flake_with_core/sops/users/bob \ clan-pytest-with-core> /build/pytest-nrmvewwf/test_flake_with_core/sops/secrets/bob_secret_CsApuHiwiq/secret \ clan-pytest-with-core> /build/pytest-nrmvewwf/test_flake_with_core/sops/secrets/bob_secret_ijwsbWkXld/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-nrmvewwf/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-nrmvewwf/test_flake_with_core/sops/users/bob \ clan-pytest-with-core> /build/pytest-nrmvewwf/test_flake_with_core/sops/secrets/bob_secret_CsApuHiwiq/secret \ clan-pytest-with-core> /build/pytest-nrmvewwf/test_flake_with_core/sops/secrets/bob_secret_ijwsbWkXld/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_CsApuHiwiq/secret, sops/secrets/bob_secret_ijwsbWkXld/secret clan-pytest-with-core> [localhost] $ clan secrets users add --flake /build/pytest-nrmvewwf/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-nrmvewwf/test_flake_with_core clan-pytest-with-core> clan-pytest-with-core> [gw1] [ 69%] PASSED 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_with_local_template_reference [localhost] $ clan secrets set --flake /build/pytest-sy79p3v6/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-sy79p3v6/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-nrmvewwf/test_flake_with_core \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-nrmvewwf/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-nrmvewwf/test_flake_with_core \ clan-pytest-with-core> diff \ clan-pytest-with-core> --cached --exit-code \ clan-pytest-with-core> -- /build/pytest-nrmvewwf/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-nrmvewwf/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-nrmvewwf/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> 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/93916f24e82d38b67651a13944aa36e98c41d0c1 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> clan-pytest-with-core> [gw2] [ 69%] FAILED clan_cli/tests/test_vars_errors.py::test_fails_when_files_are_left_from_other_backend clan-pytest-with-core> clan_cli/tests/test_machines_cli.py::test_machine_create_with_custom_directory 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-sy79p3v6/test_flake_with_core/../age.key: age13wwu5hhp6fd03r4zgy5p7cw5462twehya7u9996a9eglukw7ueks7lar82 clan-pytest-with-core> sops \ clan-pytest-with-core> --config /build/tmplj_e87kj \ clan-pytest-with-core> encrypt \ clan-pytest-with-core> --in-place /dev/shm/tmpnrtxiwm4 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-sy79p3v6/test_flake_with_core \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-sy79p3v6/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> [localhost] $ clan secrets users remove --flake /build/pytest-azkalvdy/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-azkalvdy/test_flake_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-sy79p3v6/test_flake_with_core \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-sy79p3v6/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-sy79p3v6/test_flake_with_core \ clan-pytest-with-core> diff \ clan-pytest-with-core> --cached --exit-code \ clan-pytest-with-core> -- /build/pytest-sy79p3v6/test_flake_with_core/sops/secrets/initialkey/users/testuser \ clan-pytest-with-core> /build/pytest-sy79p3v6/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-sy79p3v6/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-sy79p3v6/test_flake_with_core/sops/secrets/initialkey/users/testuser \ clan-pytest-with-core> /build/pytest-sy79p3v6/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 --flake /build/pytest-nrmvewwf/test_flake_with_core alice_secret_EsPwLqMkqN 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-nrmvewwf/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/3bcfe529e875f90350f9d5aec28c74fb27e239fc 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> 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> [localhost] $ clan secrets machines remove --flake /build/pytest-ut8rti0o/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-ut8rti0o/test_flake_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/tmpk7dsufc7 \ clan-pytest-with-core> encrypt \ clan-pytest-with-core> --in-place /dev/shm/tmp3yii6fqs clan-pytest-with-core> Caller: /build/src/clan_cli/secrets/sops.py:320::sops_run 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_cli/secrets/sops.py:320::sops_run clan-pytest-with-core> clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-nrmvewwf/test_flake_with_core \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-nrmvewwf/test_flake_with_core/sops/secrets/alice_secret_EsPwLqMkqN/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> Loading flake cache from file /build/clan-flake-cache/flakes-v2/161532b941902a3d57d4d7d0b8b5910840e7bd4a 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> 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_EsPwLqMkqN/users/alice to git clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-nrmvewwf/test_flake_with_core \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-nrmvewwf/test_flake_with_core/sops/secrets/alice_secret_EsPwLqMkqN/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_EsPwLqMkqN/secret to git clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-nrmvewwf/test_flake_with_core \ clan-pytest-with-core> diff \ clan-pytest-with-core> --cached --exit-code \ clan-pytest-with-core> -- /build/pytest-nrmvewwf/test_flake_with_core/sops/secrets/alice_secret_EsPwLqMkqN/users/alice \ clan-pytest-with-core> /build/pytest-nrmvewwf/test_flake_with_core/sops/secrets/alice_secret_EsPwLqMkqN/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-nrmvewwf/test_flake_with_core \ clan-pytest-with-core> commit \ clan-pytest-with-core> -m 'secrets: update alice_secret_EsPwLqMkqN' \ clan-pytest-with-core> --no-verify /build/pytest-nrmvewwf/test_flake_with_core/sops/secrets/alice_secret_EsPwLqMkqN/users/alice \ clan-pytest-with-core> /build/pytest-nrmvewwf/test_flake_with_core/sops/secrets/alice_secret_EsPwLqMkqN/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_EsPwLqMkqN/users/alice, sops/secrets/alice_secret_EsPwLqMkqN/secret clan-pytest-with-core> Loading flake cache from file /build/clan-flake-cache/flakes-v2/3bcfe529e875f90350f9d5aec28c74fb27e239fc clan-pytest-with-core> sops \ clan-pytest-with-core> --config /build/tmpf5wsaebb \ clan-pytest-with-core> updatekeys \ clan-pytest-with-core> --yes /build/pytest-azkalvdy/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/08/18 10:51:29 Syncing keys for file /build/pytest-azkalvdy/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/08/18 10:51:29 File /build/pytest-azkalvdy/test_flake_with_core/sops/secrets/user_secret/secret synced with new keys clan-pytest-with-core> clan-pytest-with-core> [gw6] [ 70%] PASSED clan_cli/tests/test_secrets_cli.py::test_secrets_key_generate_gpg 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-azkalvdy/test_flake_with_core \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-azkalvdy/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> clan-pytest-with-core> clan_cli/tests/test_install_secret_path.py::test_password_store_upload_directory[default] 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-azkalvdy/test_flake_with_core \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-azkalvdy/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-azkalvdy/test_flake_with_core \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-azkalvdy/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-azkalvdy/test_flake_with_core \ clan-pytest-with-core> diff \ clan-pytest-with-core> --cached --exit-code \ clan-pytest-with-core> -- /build/pytest-azkalvdy/test_flake_with_core/sops/users/foo \ clan-pytest-with-core> /build/pytest-azkalvdy/test_flake_with_core/sops/secrets/user_secret/users/foo \ clan-pytest-with-core> /build/pytest-azkalvdy/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-azkalvdy/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-azkalvdy/test_flake_with_core/sops/users/foo \ clan-pytest-with-core> /build/pytest-azkalvdy/test_flake_with_core/sops/secrets/user_secret/users/foo \ clan-pytest-with-core> /build/pytest-azkalvdy/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> Loading flake cache from file /build/clan-flake-cache/flakes-v2/161532b941902a3d57d4d7d0b8b5910840e7bd4a clan-pytest-with-core> sops \ clan-pytest-with-core> --config /build/tmptvseo92a \ clan-pytest-with-core> updatekeys \ clan-pytest-with-core> --yes /build/pytest-ut8rti0o/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> [localhost] $ clan secrets set --edit --flake /build/pytest-sy79p3v6/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-sy79p3v6/test_flake_with_core clan-pytest-with-core> [localhost] $ clan secrets users remove --flake /build/pytest-azkalvdy/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-azkalvdy/test_flake_with_core clan-pytest-with-core> 2026/08/18 10:51:29 Syncing keys for file /build/pytest-ut8rti0o/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/08/18 10:51:29 File /build/pytest-ut8rti0o/test_flake_with_core/sops/secrets/machine_secret/secret synced with new keys 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_cli/secrets/sops.py:320::sops_run clan-pytest-with-core> clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-ut8rti0o/test_flake_with_core \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-ut8rti0o/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> [localhost] $ clan secrets users add --flake /build/pytest-nrmvewwf/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-nrmvewwf/test_flake_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-ut8rti0o/test_flake_with_core \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-ut8rti0o/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> 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_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-ut8rti0o/test_flake_with_core \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-ut8rti0o/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-ut8rti0o/test_flake_with_core \ clan-pytest-with-core> diff \ clan-pytest-with-core> --cached --exit-code \ clan-pytest-with-core> -- /build/pytest-ut8rti0o/test_flake_with_core/sops/machines/foo \ clan-pytest-with-core> /build/pytest-ut8rti0o/test_flake_with_core/sops/secrets/machine_secret/machines/foo \ clan-pytest-with-core> /build/pytest-ut8rti0o/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> warning: you don't have Internet access; disabling some network-dependent features 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-ut8rti0o/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-ut8rti0o/test_flake_with_core/sops/machines/foo \ clan-pytest-with-core> /build/pytest-ut8rti0o/test_flake_with_core/sops/secrets/machine_secret/machines/foo \ clan-pytest-with-core> /build/pytest-ut8rti0o/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_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-sy79p3v6/test_flake_with_core/../age.key: age13wwu5hhp6fd03r4zgy5p7cw5462twehya7u9996a9eglukw7ueks7lar82 clan-pytest-with-core> Cache miss for clanInternals.inventoryClass.relativeDirectory 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> warning: you don't have Internet access; disabling some network-dependent features clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-nrmvewwf/test_flake_with_core \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-nrmvewwf/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-nrmvewwf/test_flake_with_core \ clan-pytest-with-core> diff \ clan-pytest-with-core> --cached --exit-code \ clan-pytest-with-core> -- /build/pytest-nrmvewwf/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> File has not changed, exiting. clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-sy79p3v6/test_flake_with_core \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-sy79p3v6/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 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-nrmvewwf/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-nrmvewwf/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> [localhost] $ clan secrets machines remove --flake /build/pytest-ut8rti0o/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-ut8rti0o/test_flake_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-sy79p3v6/test_flake_with_core \ clan-pytest-with-core> diff \ clan-pytest-with-core> --cached --exit-code \ clan-pytest-with-core> -- /build/pytest-sy79p3v6/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> 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 rename --flake /build/pytest-sy79p3v6/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-sy79p3v6/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> warning: you don't have Internet access; disabling some network-dependent features clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-sy79p3v6/test_flake_with_core \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-sy79p3v6/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-sy79p3v6/test_flake_with_core \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-sy79p3v6/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-sy79p3v6/test_flake_with_core \ clan-pytest-with-core> diff \ clan-pytest-with-core> --cached --exit-code \ clan-pytest-with-core> -- /build/pytest-sy79p3v6/test_flake_with_core/sops/secrets/initialkey \ clan-pytest-with-core> /build/pytest-sy79p3v6/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> Cache miss for clanInternals.?secrets.?age.?plugins 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-sy79p3v6/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-sy79p3v6/test_flake_with_core/sops/secrets/initialkey \ clan-pytest-with-core> /build/pytest-sy79p3v6/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> [localhost] $ clan secrets set --flake /build/pytest-nrmvewwf/test_flake_with_core charlie_secret_kWCbKWAGPM 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-nrmvewwf/test_flake_with_core clan-pytest-with-core> clan-pytest-with-core> [gw1] [ 70%] PASSED clan_cli/tests/test_create_flake.py::test_create_flake_with_local_template_reference warning: you don't have Internet access; disabling some network-dependent features clan-pytest-with-core> clan-pytest-with-core> clan_cli/tests/test_clan_nix_attrset.py::test_clan_core_templates 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> Cache miss for clanInternals.?secrets.?age.?plugins 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/tmp7ofa8q31 \ clan-pytest-with-core> encrypt \ clan-pytest-with-core> --in-place /dev/shm/tmp__c7q7a3 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> [gw9] [ 71%] FAILED clan_cli/tests/test_install_secret_path.py::test_password_store_upload_directory[custom] clan-pytest-with-core> clan_cli/tests/test_create_flake.py::test_ui_template 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-nrmvewwf/test_flake_with_core \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-nrmvewwf/test_flake_with_core/sops/secrets/charlie_secret_kWCbKWAGPM/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> Loading flake cache from file /build/clan-flake-cache/flakes-v2/6f7da077dedbf1a413fdea1663c4f9b4b37324b4 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_kWCbKWAGPM/users/charlie to git clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-nrmvewwf/test_flake_with_core \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-nrmvewwf/test_flake_with_core/sops/secrets/charlie_secret_kWCbKWAGPM/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_kWCbKWAGPM/secret to git clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-nrmvewwf/test_flake_with_core \ clan-pytest-with-core> diff \ clan-pytest-with-core> --cached --exit-code \ clan-pytest-with-core> -- /build/pytest-nrmvewwf/test_flake_with_core/sops/secrets/charlie_secret_kWCbKWAGPM/users/charlie \ clan-pytest-with-core> /build/pytest-nrmvewwf/test_flake_with_core/sops/secrets/charlie_secret_kWCbKWAGPM/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-nrmvewwf/test_flake_with_core \ clan-pytest-with-core> commit \ clan-pytest-with-core> -m 'secrets: update charlie_secret_kWCbKWAGPM' \ clan-pytest-with-core> --no-verify /build/pytest-nrmvewwf/test_flake_with_core/sops/secrets/charlie_secret_kWCbKWAGPM/users/charlie \ clan-pytest-with-core> /build/pytest-nrmvewwf/test_flake_with_core/sops/secrets/charlie_secret_kWCbKWAGPM/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_kWCbKWAGPM/users/charlie, sops/secrets/charlie_secret_kWCbKWAGPM/secret clan-pytest-with-core> Loading flake cache from file /build/clan-flake-cache/flakes-v2/eec871d04713185b5475cccc603180d6e8f3ed33 clan-pytest-with-core> clan-pytest-with-core> [gw10] [ 71%] PASSED clan_cli/tests/test_secrets_cli.py::test_users clan-pytest-with-core> clan_cli/tests/test_secrets_cli.py::test_secrets_users_add_age_plugin_error clan-pytest-with-core> [gw4] [ 72%] PASSED clan_cli/tests/test_secrets_cli.py::test_machines clan-pytest-with-core> clan_cli/tests/test_secrets_cli.py::test_secrets_key_generate_new_appends [localhost] $ clan secrets machines add --flake /build/pytest-sy79p3v6/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-sy79p3v6/test_flake_with_core clan-pytest-with-core> [localhost] $ clan machines delete --flake /build/pytest-75mc4nfk/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-75mc4nfk/test_flake_with_core clan-pytest-with-core> [localhost] $ clan secrets set --flake /build/pytest-nrmvewwf/test_flake_with_core charlie_secret_LOxHQLYDCE 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-nrmvewwf/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-sy79p3v6/test_flake_with_core \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-sy79p3v6/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-sy79p3v6/test_flake_with_core \ clan-pytest-with-core> diff \ clan-pytest-with-core> --cached --exit-code \ clan-pytest-with-core> -- /build/pytest-sy79p3v6/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> warning: you don't have Internet access; disabling some network-dependent features 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-sy79p3v6/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-sy79p3v6/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> Loading flake cache from file /build/clan-flake-cache/flakes-v2/450b946c93611d8107a9bcd5e208145c91fde368 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-75mc4nfk/test_flake_with_core \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-75mc4nfk/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:131::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Committed sops/machines/machine1 to git 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-75mc4nfk/test_flake_with_core \ clan-pytest-with-core> diff \ clan-pytest-with-core> --cached --exit-code \ clan-pytest-with-core> -- /build/pytest-75mc4nfk/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> warning: you don't have Internet access; disabling some network-dependent features 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-75mc4nfk/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-75mc4nfk/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> 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_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> 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/tmpxjykpb0j \ clan-pytest-with-core> encrypt \ clan-pytest-with-core> --in-place /dev/shm/tmpsah8oym0 clan-pytest-with-core> Caller: /build/src/clan_cli/secrets/sops.py:320::sops_run clan-pytest-with-core> clan-pytest-with-core> [localhost] $ clan secrets machines add-secret --flake /build/pytest-sy79p3v6/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-sy79p3v6/test_flake_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-nrmvewwf/test_flake_with_core \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-nrmvewwf/test_flake_with_core/sops/secrets/charlie_secret_LOxHQLYDCE/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> clan-pytest-with-core> [gw5] [ 72%] FAILED clan_cli/tests/test_install_secret_path.py::test_sops_install_secret_path[default] clan-pytest-with-core> clan_cli/tests/test_import_sops_cli.py::test_import_sops 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_LOxHQLYDCE/users/charlie to git clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-nrmvewwf/test_flake_with_core \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-nrmvewwf/test_flake_with_core/sops/secrets/charlie_secret_LOxHQLYDCE/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_LOxHQLYDCE/secret to git clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-nrmvewwf/test_flake_with_core \ clan-pytest-with-core> diff \ clan-pytest-with-core> --cached --exit-code \ clan-pytest-with-core> -- /build/pytest-nrmvewwf/test_flake_with_core/sops/secrets/charlie_secret_LOxHQLYDCE/users/charlie \ clan-pytest-with-core> /build/pytest-nrmvewwf/test_flake_with_core/sops/secrets/charlie_secret_LOxHQLYDCE/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-nrmvewwf/test_flake_with_core \ clan-pytest-with-core> commit \ clan-pytest-with-core> -m 'secrets: update charlie_secret_LOxHQLYDCE' \ clan-pytest-with-core> --no-verify /build/pytest-nrmvewwf/test_flake_with_core/sops/secrets/charlie_secret_LOxHQLYDCE/users/charlie \ clan-pytest-with-core> /build/pytest-nrmvewwf/test_flake_with_core/sops/secrets/charlie_secret_LOxHQLYDCE/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> 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/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_LOxHQLYDCE/users/charlie, sops/secrets/charlie_secret_LOxHQLYDCE/secret clan-pytest-with-core> clan-pytest-with-core> [gw10] [ 72%] PASSED clan_cli/tests/test_secrets_cli.py::test_secrets_users_add_age_plugin_error sops \ clan-pytest-with-core> --config /build/tmp17oi19ve \ clan-pytest-with-core> updatekeys \ clan-pytest-with-core> --yes /build/pytest-sy79p3v6/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> clan_cli/ssh/test_deploy_info.py::test_qrcode_scan 2026/08/18 10:51:29 Syncing keys for file /build/pytest-sy79p3v6/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> age13wwu5hhp6fd03r4zgy5p7cw5462twehya7u9996a9eglukw7ueks7lar82 clan-pytest-with-core> +++ age14tva0txcrl0zes05x7gkx56qd6wd9q3nwecjac74xxzz4l47r44sv3fz62 clan-pytest-with-core> 2026/08/18 10:51:29 File /build/pytest-sy79p3v6/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-sy79p3v6/test_flake_with_core \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-sy79p3v6/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-sy79p3v6/test_flake_with_core \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-sy79p3v6/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-sy79p3v6/test_flake_with_core \ clan-pytest-with-core> diff \ clan-pytest-with-core> --cached --exit-code \ clan-pytest-with-core> -- /build/pytest-sy79p3v6/test_flake_with_core/sops/secrets/key/machines/machine1 \ clan-pytest-with-core> /build/pytest-sy79p3v6/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-sy79p3v6/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-sy79p3v6/test_flake_with_core/sops/secrets/key/machines/machine1 \ clan-pytest-with-core> /build/pytest-sy79p3v6/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> Loading flake cache from file /build/clan-flake-cache/flakes-v2/450b946c93611d8107a9bcd5e208145c91fde368 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> [gw10] [ 73%] PASSED clan_cli/ssh/test_deploy_info.py::test_qrcode_scan 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] [localhost] $ clan secrets set --flake /build/pytest-nrmvewwf/test_flake_with_core charlie_secret_oClsgzkMWR 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-nrmvewwf/test_flake_with_core clan-pytest-with-core> clan-pytest-with-core> [gw4] [ 73%] PASSED clan_cli/tests/test_secrets_cli.py::test_secrets_key_generate_new_appends clan-pytest-with-core> clan_cli/ssh/test_deploy_info.py::test_ssh_shell_from_deploy clan-pytest-with-core> [gw8] [ 74%] PASSED clan_lib/machines/actions_test.py::test_list_machines_full clan-pytest-with-core> clan_lib/machines/actions_test.py::test_list_inventory_machines 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> clan-pytest-with-core> [gw15] [ 74%] FAILED clan_cli/tests/test_vars_age.py::test_generate_secret_var_age_minimal_select_calls 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> clan-pytest-with-core> clan_cli/tests/test_create_flake.py::test_create_flake_existing_git sops \ clan-pytest-with-core> --config /build/tmpscvkc71_ \ clan-pytest-with-core> encrypt \ clan-pytest-with-core> --in-place /dev/shm/tmpmt2jqz8c 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-nrmvewwf/test_flake_with_core \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-nrmvewwf/test_flake_with_core/sops/secrets/charlie_secret_oClsgzkMWR/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_oClsgzkMWR/users/charlie to git clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-nrmvewwf/test_flake_with_core \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-nrmvewwf/test_flake_with_core/sops/secrets/charlie_secret_oClsgzkMWR/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_oClsgzkMWR/secret to git clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-nrmvewwf/test_flake_with_core \ clan-pytest-with-core> diff \ clan-pytest-with-core> --cached --exit-code \ clan-pytest-with-core> -- /build/pytest-nrmvewwf/test_flake_with_core/sops/secrets/charlie_secret_oClsgzkMWR/users/charlie \ clan-pytest-with-core> /build/pytest-nrmvewwf/test_flake_with_core/sops/secrets/charlie_secret_oClsgzkMWR/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> 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> git \ clan-pytest-with-core> -C /build/pytest-nrmvewwf/test_flake_with_core \ clan-pytest-with-core> commit \ clan-pytest-with-core> -m 'secrets: update charlie_secret_oClsgzkMWR' \ clan-pytest-with-core> --no-verify /build/pytest-nrmvewwf/test_flake_with_core/sops/secrets/charlie_secret_oClsgzkMWR/users/charlie \ clan-pytest-with-core> /build/pytest-nrmvewwf/test_flake_with_core/sops/secrets/charlie_secret_oClsgzkMWR/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> clan-pytest-with-core> [gw1] [ 75%] PASSED clan_cli/tests/test_clan_nix_attrset.py::test_clan_core_templates 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_oClsgzkMWR/users/charlie, sops/secrets/charlie_secret_oClsgzkMWR/secret clan-pytest-with-core> 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:372::get_public_age_key_from_private_key clan-pytest-with-core> clan-pytest-with-core> [localhost] $ clan secrets machines add --flake /build/pytest-sy79p3v6/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-sy79p3v6/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> [gw11] [ 75%] FAILED clan_cli/tests/test_install_secret_path.py::test_sops_install_secret_path[custom] clan-pytest-with-core> clan_cli/tests/test_create_flake.py::test_create_flake_fallback_from_non_clan_directory sops \ clan-pytest-with-core> --config /build/tmpywh26jnn \ clan-pytest-with-core> updatekeys \ clan-pytest-with-core> --yes /build/pytest-sy79p3v6/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> [gw2] [ 75%] PASSED clan_cli/tests/test_machines_cli.py::test_machine_create_with_custom_directory clan-pytest-with-core> clan_cli/tests/test_backups.py::test_backups 2026/08/18 10:51:29 Syncing keys for file /build/pytest-sy79p3v6/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> age13wwu5hhp6fd03r4zgy5p7cw5462twehya7u9996a9eglukw7ueks7lar82 clan-pytest-with-core> +++ age1dhwqzkah943xzc34tc3dlmfayyevcmdmxzjezdgdy33euxwf59vsp3vk3c clan-pytest-with-core> --- age14tva0txcrl0zes05x7gkx56qd6wd9q3nwecjac74xxzz4l47r44sv3fz62 clan-pytest-with-core> 2026/08/18 10:51:29 File /build/pytest-sy79p3v6/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-sy79p3v6/test_flake_with_core \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-sy79p3v6/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-sy79p3v6/test_flake_with_core \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-sy79p3v6/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-sy79p3v6/test_flake_with_core \ clan-pytest-with-core> diff \ clan-pytest-with-core> --cached --exit-code \ clan-pytest-with-core> -- /build/pytest-sy79p3v6/test_flake_with_core/sops/machines/machine1 \ clan-pytest-with-core> /build/pytest-sy79p3v6/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-sy79p3v6/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-sy79p3v6/test_flake_with_core/sops/machines/machine1 \ clan-pytest-with-core> /build/pytest-sy79p3v6/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 users remove-key --flake /build/pytest-nrmvewwf/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-nrmvewwf/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/tmp_v5xvec1 \ clan-pytest-with-core> updatekeys \ clan-pytest-with-core> --yes /build/pytest-nrmvewwf/test_flake_with_core/sops/secrets/charlie_secret_LOxHQLYDCE/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> [gw8] [ 76%] PASSED clan_lib/machines/actions_test.py::test_list_inventory_machines clan-pytest-with-core> clan_lib/machines/actions_test.py::test_list_machines_instance_refs clan-pytest-with-core> [gw6] [ 76%] FAILED clan_cli/tests/test_install_secret_path.py::test_password_store_upload_directory[default] clan-pytest-with-core> clan_cli/templates/list_test.py::test_templates_list 2026/08/18 10:51:30 Syncing keys for file /build/pytest-nrmvewwf/test_flake_with_core/sops/secrets/charlie_secret_LOxHQLYDCE/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/08/18 10:51:30 File /build/pytest-nrmvewwf/test_flake_with_core/sops/secrets/charlie_secret_LOxHQLYDCE/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/tmpsp72d66b \ clan-pytest-with-core> updatekeys \ clan-pytest-with-core> --yes /build/pytest-nrmvewwf/test_flake_with_core/sops/secrets/charlie_secret_kWCbKWAGPM/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> [gw1] [ 77%] PASSED clan_cli/templates/list_test.py::test_templates_list_outside_clan clan-pytest-with-core> clan_cli/machines/list_test.py::test_machines_list_with_tags_no_matches 2026/08/18 10:51:30 Syncing keys for file /build/pytest-nrmvewwf/test_flake_with_core/sops/secrets/charlie_secret_kWCbKWAGPM/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/08/18 10:51:30 File /build/pytest-nrmvewwf/test_flake_with_core/sops/secrets/charlie_secret_kWCbKWAGPM/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/tmpy8e19sqd \ clan-pytest-with-core> updatekeys \ clan-pytest-with-core> --yes /build/pytest-nrmvewwf/test_flake_with_core/sops/secrets/charlie_secret_oClsgzkMWR/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/08/18 10:51:30 Syncing keys for file /build/pytest-nrmvewwf/test_flake_with_core/sops/secrets/charlie_secret_oClsgzkMWR/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/08/18 10:51:30 File /build/pytest-nrmvewwf/test_flake_with_core/sops/secrets/charlie_secret_oClsgzkMWR/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-nrmvewwf/test_flake_with_core \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-nrmvewwf/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-nrmvewwf/test_flake_with_core \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-nrmvewwf/test_flake_with_core/sops/secrets/charlie_secret_LOxHQLYDCE/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_LOxHQLYDCE/secret to git clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-nrmvewwf/test_flake_with_core \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-nrmvewwf/test_flake_with_core/sops/secrets/charlie_secret_kWCbKWAGPM/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> [localhost] $ clan secrets machines remove-secret --flake /build/pytest-sy79p3v6/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-sy79p3v6/test_flake_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_kWCbKWAGPM/secret to git clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-nrmvewwf/test_flake_with_core \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-nrmvewwf/test_flake_with_core/sops/secrets/charlie_secret_oClsgzkMWR/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_oClsgzkMWR/secret to git clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-nrmvewwf/test_flake_with_core \ clan-pytest-with-core> diff \ clan-pytest-with-core> --cached --exit-code \ clan-pytest-with-core> -- /build/pytest-nrmvewwf/test_flake_with_core/sops/users/charlie \ clan-pytest-with-core> /build/pytest-nrmvewwf/test_flake_with_core/sops/secrets/charlie_secret_LOxHQLYDCE/secret \ clan-pytest-with-core> /build/pytest-nrmvewwf/test_flake_with_core/sops/secrets/charlie_secret_kWCbKWAGPM/secret \ clan-pytest-with-core> /build/pytest-nrmvewwf/test_flake_with_core/sops/secrets/charlie_secret_oClsgzkMWR/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-nrmvewwf/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-nrmvewwf/test_flake_with_core/sops/users/charlie \ clan-pytest-with-core> /build/pytest-nrmvewwf/test_flake_with_core/sops/secrets/charlie_secret_LOxHQLYDCE/secret \ clan-pytest-with-core> /build/pytest-nrmvewwf/test_flake_with_core/sops/secrets/charlie_secret_kWCbKWAGPM/secret \ clan-pytest-with-core> /build/pytest-nrmvewwf/test_flake_with_core/sops/secrets/charlie_secret_oClsgzkMWR/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_LOxHQLYDCE/secret, sops/secrets/charlie_secret_kWCbKWAGPM/secret, sops/secrets/charlie_secret_oClsgzkMWR/secret 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/tmp5k3m7sdf \ clan-pytest-with-core> updatekeys \ clan-pytest-with-core> --yes /build/pytest-sy79p3v6/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> [localhost] $ clan secrets users add-key --flake /build/pytest-nrmvewwf/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-nrmvewwf/test_flake_with_core clan-pytest-with-core> 2026/08/18 10:51:30 Syncing keys for file /build/pytest-sy79p3v6/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> age13wwu5hhp6fd03r4zgy5p7cw5462twehya7u9996a9eglukw7ueks7lar82 clan-pytest-with-core> --- age1dhwqzkah943xzc34tc3dlmfayyevcmdmxzjezdgdy33euxwf59vsp3vk3c clan-pytest-with-core> 2026/08/18 10:51:30 File /build/pytest-sy79p3v6/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-sy79p3v6/test_flake_with_core \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-sy79p3v6/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-sy79p3v6/test_flake_with_core \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-sy79p3v6/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-sy79p3v6/test_flake_with_core \ clan-pytest-with-core> diff \ clan-pytest-with-core> --cached --exit-code \ clan-pytest-with-core> -- /build/pytest-sy79p3v6/test_flake_with_core/sops/secrets/key/machines/machine1 \ clan-pytest-with-core> /build/pytest-sy79p3v6/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> warning: you don't have Internet access; disabling some network-dependent features 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-sy79p3v6/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-sy79p3v6/test_flake_with_core/sops/secrets/key/machines/machine1 \ clan-pytest-with-core> /build/pytest-sy79p3v6/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> sops \ clan-pytest-with-core> --config /build/tmphkc3vt_b \ clan-pytest-with-core> updatekeys \ clan-pytest-with-core> --yes /build/pytest-nrmvewwf/test_flake_with_core/sops/secrets/charlie_secret_LOxHQLYDCE/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/08/18 10:51:30 Syncing keys for file /build/pytest-nrmvewwf/test_flake_with_core/sops/secrets/charlie_secret_LOxHQLYDCE/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/08/18 10:51:30 File /build/pytest-nrmvewwf/test_flake_with_core/sops/secrets/charlie_secret_LOxHQLYDCE/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> clan-pytest-with-core> [gw6] [ 77%] PASSED clan_cli/templates/list_test.py::test_templates_list sops \ clan-pytest-with-core> --config /build/tmpeyucgk1y \ clan-pytest-with-core> updatekeys \ clan-pytest-with-core> --yes /build/pytest-nrmvewwf/test_flake_with_core/sops/secrets/charlie_secret_kWCbKWAGPM/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_cli/machines/install_test.py::test_install_prints_destructive_warning_by_default clan-pytest-with-core> [gw0] [ 78%] 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_canonical clan-pytest-with-core> [gw1] [ 78%] 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_core0-explicit_names0-filter_tags0-expected_names0] clan-pytest-with-core> [gw11] [ 78%] PASSED clan_cli/tests/test_create_flake.py::test_create_flake_fallback_from_non_clan_directory clan-pytest-with-core> clan_cli/machines/install_test.py::test_install_resolves_target_from_inventory [localhost] $ clan secrets users add --flake /build/pytest-sy79p3v6/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-sy79p3v6/test_flake_with_core clan-pytest-with-core> 2026/08/18 10:51:30 Syncing keys for file /build/pytest-nrmvewwf/test_flake_with_core/sops/secrets/charlie_secret_kWCbKWAGPM/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/08/18 10:51:30 File /build/pytest-nrmvewwf/test_flake_with_core/sops/secrets/charlie_secret_kWCbKWAGPM/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/tmpvkcs3rg5 \ clan-pytest-with-core> updatekeys \ clan-pytest-with-core> --yes /build/pytest-nrmvewwf/test_flake_with_core/sops/secrets/charlie_secret_oClsgzkMWR/secret clan-pytest-with-core> Caller: /build/src/clan_cli/secrets/sops.py:320::sops_run clan-pytest-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-sy79p3v6/test_flake_with_core \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-sy79p3v6/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-sy79p3v6/test_flake_with_core \ clan-pytest-with-core> diff \ clan-pytest-with-core> --cached --exit-code \ clan-pytest-with-core> -- /build/pytest-sy79p3v6/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-sy79p3v6/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-sy79p3v6/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> 2026/08/18 10:51:30 Syncing keys for file /build/pytest-nrmvewwf/test_flake_with_core/sops/secrets/charlie_secret_oClsgzkMWR/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/08/18 10:51:30 File /build/pytest-nrmvewwf/test_flake_with_core/sops/secrets/charlie_secret_oClsgzkMWR/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> clan-pytest-with-core> [gw8] [ 79%] PASSED clan_lib/machines/actions_test.py::test_list_machines_instance_refs git \ clan-pytest-with-core> -C /build/pytest-nrmvewwf/test_flake_with_core \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-nrmvewwf/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> clan-pytest-with-core> clan_cli/machines/install_test.py::test_install_prefers_explicit_target_host_flag [localhost] $ clan secrets users add-secret --flake /build/pytest-sy79p3v6/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-sy79p3v6/test_flake_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-nrmvewwf/test_flake_with_core \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-nrmvewwf/test_flake_with_core/sops/secrets/charlie_secret_LOxHQLYDCE/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_LOxHQLYDCE/secret to git clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-nrmvewwf/test_flake_with_core \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-nrmvewwf/test_flake_with_core/sops/secrets/charlie_secret_kWCbKWAGPM/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_kWCbKWAGPM/secret to git clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-nrmvewwf/test_flake_with_core \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-nrmvewwf/test_flake_with_core/sops/secrets/charlie_secret_oClsgzkMWR/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_oClsgzkMWR/secret to git clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-nrmvewwf/test_flake_with_core \ clan-pytest-with-core> diff \ clan-pytest-with-core> --cached --exit-code \ clan-pytest-with-core> -- /build/pytest-nrmvewwf/test_flake_with_core/sops/users/charlie \ clan-pytest-with-core> /build/pytest-nrmvewwf/test_flake_with_core/sops/secrets/charlie_secret_LOxHQLYDCE/secret \ clan-pytest-with-core> /build/pytest-nrmvewwf/test_flake_with_core/sops/secrets/charlie_secret_kWCbKWAGPM/secret \ clan-pytest-with-core> /build/pytest-nrmvewwf/test_flake_with_core/sops/secrets/charlie_secret_oClsgzkMWR/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-nrmvewwf/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-nrmvewwf/test_flake_with_core/sops/users/charlie \ clan-pytest-with-core> /build/pytest-nrmvewwf/test_flake_with_core/sops/secrets/charlie_secret_LOxHQLYDCE/secret \ clan-pytest-with-core> /build/pytest-nrmvewwf/test_flake_with_core/sops/secrets/charlie_secret_kWCbKWAGPM/secret \ clan-pytest-with-core> /build/pytest-nrmvewwf/test_flake_with_core/sops/secrets/charlie_secret_oClsgzkMWR/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_LOxHQLYDCE/secret, sops/secrets/charlie_secret_kWCbKWAGPM/secret, sops/secrets/charlie_secret_oClsgzkMWR/secret clan-pytest-with-core> clan-pytest-with-core> [gw12] [ 79%] PASSED clan_cli/tests/test_secrets_cli.py::test_multiple_user_keys warning: you don't have Internet access; disabling some network-dependent features clan-pytest-with-core> clan-pytest-with-core> clan_cli/tests/test_machines_cli.py::test_machine_delete sops \ clan-pytest-with-core> --config /build/tmp7h86kaz8 \ clan-pytest-with-core> updatekeys \ clan-pytest-with-core> --yes /build/pytest-sy79p3v6/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/08/18 10:51:30 Syncing keys for file /build/pytest-sy79p3v6/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> age13wwu5hhp6fd03r4zgy5p7cw5462twehya7u9996a9eglukw7ueks7lar82 clan-pytest-with-core> +++ age14tva0txcrl0zes05x7gkx56qd6wd9q3nwecjac74xxzz4l47r44sv3fz62 clan-pytest-with-core> 2026/08/18 10:51:30 File /build/pytest-sy79p3v6/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-sy79p3v6/test_flake_with_core \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-sy79p3v6/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-sy79p3v6/test_flake_with_core \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-sy79p3v6/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-sy79p3v6/test_flake_with_core \ clan-pytest-with-core> diff \ clan-pytest-with-core> --cached --exit-code \ clan-pytest-with-core> -- /build/pytest-sy79p3v6/test_flake_with_core/sops/secrets/key/users/user1 \ clan-pytest-with-core> /build/pytest-sy79p3v6/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-sy79p3v6/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-sy79p3v6/test_flake_with_core/sops/secrets/key/users/user1 \ clan-pytest-with-core> /build/pytest-sy79p3v6/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> clan-pytest-with-core> [gw1] [ 80%] 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> 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> [gw13] [ 80%] FAILED clan_cli/tests/test_machines_cli.py::test_machine_subcommands clan-pytest-with-core> clan_cli/tests/test_create_flake.py::test_create_flake clan-pytest-with-core> [localhost] $ clan secrets users remove-secret --flake /build/pytest-sy79p3v6/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-sy79p3v6/test_flake_with_core clan-pytest-with-core> [gw7] [ 81%] FAILED clan_lib/machines/actions_test.py::test_get_machine_writeability clan-pytest-with-core> clan_lib/machines/actions_test.py::test_machine_state warning: you don't have Internet access; disabling some network-dependent features clan-pytest-with-core> sops \ clan-pytest-with-core> --config /build/tmpot1kdhsy \ clan-pytest-with-core> updatekeys \ clan-pytest-with-core> --yes /build/pytest-sy79p3v6/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> 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> show \ clan-pytest-with-core> --json --show-trace \ clan-pytest-with-core> /build/pytest-r_81pnib/test-flake \ clan-pytest-with-core> --store /build/store clan-pytest-with-core> Caller: /build/src/clan_cli/tests/test_create_flake.py:152::test_ui_template clan-pytest-with-core> clan-pytest-with-core> clan-pytest-with-core> [gw1] [ 81%] 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/flash/list_test.py::test_flash_list_languages 2026/08/18 10:51:30 Syncing keys for file /build/pytest-sy79p3v6/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> age13wwu5hhp6fd03r4zgy5p7cw5462twehya7u9996a9eglukw7ueks7lar82 clan-pytest-with-core> --- age14tva0txcrl0zes05x7gkx56qd6wd9q3nwecjac74xxzz4l47r44sv3fz62 clan-pytest-with-core> 2026/08/18 10:51:30 File /build/pytest-sy79p3v6/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-sy79p3v6/test_flake_with_core \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-sy79p3v6/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-sy79p3v6/test_flake_with_core \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-sy79p3v6/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> 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/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-sy79p3v6/test_flake_with_core \ clan-pytest-with-core> diff \ clan-pytest-with-core> --cached --exit-code \ clan-pytest-with-core> -- /build/pytest-sy79p3v6/test_flake_with_core/sops/secrets/key/users/user1 \ clan-pytest-with-core> /build/pytest-sy79p3v6/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-sy79p3v6/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-sy79p3v6/test_flake_with_core/sops/secrets/key/users/user1 \ clan-pytest-with-core> /build/pytest-sy79p3v6/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> evaluating ''... clan-pytest-with-core> clan-pytest-with-core> [gw6] [ 81%] PASSED clan_cli/machines/install_test.py::test_install_prints_destructive_warning_by_default 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> 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> [gw8] [ 82%] PASSED clan_cli/machines/install_test.py::test_install_prefers_explicit_target_host_flag clan-pytest-with-core> clan_cli/machines/build_test.py::test_build_machine_without_hostplatform_raises_friendly_error[test_flake_with_core0] [localhost] $ clan secrets groups add-secret --flake /build/pytest-sy79p3v6/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-sy79p3v6/test_flake_with_core clan-pytest-with-core> evaluating 'clan'... clan-pytest-with-core> evaluating 'clanInternals'... clan-pytest-with-core> evaluating 'nixosConfigurations'... clan-pytest-with-core> evaluating 'nixosConfigurations.machine1'... clan-pytest-with-core> evaluating 'nixosModules'... clan-pytest-with-core> evaluating 'nixosModules.clan-machine-machine1'... clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_cli/tests/test_create_flake.py:152::test_ui_template clan-pytest-with-core> clan-pytest-with-core> clan-pytest-with-core> [gw9] [ 82%] PASSED clan_cli/tests/test_create_flake.py::test_ui_template warning: you don't have Internet access; disabling some network-dependent features clan-pytest-with-core> clan-pytest-with-core> clan_cli/templates/apply_test.py::test_templates_apply_machine_and_disk clan-pytest-with-core> [gw1] [ 83%] PASSED clan_cli/flash/list_test.py::test_flash_list_languages clan-pytest-with-core> clan_cli/clan/show_test.py::test_clan_show [localhost] $ clan secrets groups add-user --flake /build/pytest-sy79p3v6/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-sy79p3v6/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-sy79p3v6/test_flake_with_core \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-sy79p3v6/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-sy79p3v6/test_flake_with_core \ clan-pytest-with-core> diff \ clan-pytest-with-core> --cached --exit-code \ clan-pytest-with-core> -- /build/pytest-sy79p3v6/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-sy79p3v6/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-sy79p3v6/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-sy79p3v6/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-sy79p3v6/test_flake_with_core clan-pytest-with-core> clan-pytest-with-core> [gw7] [ 83%] PASSED clan_lib/machines/actions_test.py::test_machine_state clan-pytest-with-core> clan_lib/flash/test_list.py::test_language_list warning: you don't have Internet access; disabling some network-dependent features clan-pytest-with-core> clan-pytest-with-core> [gw6] [ 84%] 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/init_test.py::test_init git \ clan-pytest-with-core> -C /build/pytest-sy79p3v6/test_flake_with_core \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-sy79p3v6/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-sy79p3v6/test_flake_with_core \ clan-pytest-with-core> diff \ clan-pytest-with-core> --cached --exit-code \ clan-pytest-with-core> -- /build/pytest-sy79p3v6/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-sy79p3v6/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-sy79p3v6/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> clan-pytest-with-core> [gw0] [ 84%] 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 [localhost] $ clan secrets groups add-secret --flake /build/pytest-sy79p3v6/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-sy79p3v6/test_flake_with_core clan-pytest-with-core> clan-pytest-with-core> [gw14] [ 84%] PASSED clan_lib/services/modules_test.py::test_delete_service_instance clan-pytest-with-core> clan_lib/services/modules_test.py::test_delete_static_service_instance warning: you don't have Internet access; disabling some network-dependent features clan-pytest-with-core> clan-pytest-with-core> [gw1] [ 85%] PASSED clan_cli/clan/show_test.py::test_clan_show clan-pytest-with-core> clan_cli/init_test.py::test_init_fallback_from_non_clan_directory sops \ clan-pytest-with-core> --config /build/tmp5r4c15um \ clan-pytest-with-core> updatekeys \ clan-pytest-with-core> --yes /build/pytest-sy79p3v6/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> [gw7] [ 85%] PASSED clan_lib/flash/test_list.py::test_language_list clan-pytest-with-core> clan_cli/init_test.py::test_init_with_local_template_reference 2026/08/18 10:51:30 Syncing keys for file /build/pytest-sy79p3v6/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> age13wwu5hhp6fd03r4zgy5p7cw5462twehya7u9996a9eglukw7ueks7lar82 clan-pytest-with-core> +++ age14tva0txcrl0zes05x7gkx56qd6wd9q3nwecjac74xxzz4l47r44sv3fz62 clan-pytest-with-core> 2026/08/18 10:51:30 File /build/pytest-sy79p3v6/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-sy79p3v6/test_flake_with_core \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-sy79p3v6/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-sy79p3v6/test_flake_with_core \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-sy79p3v6/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-sy79p3v6/test_flake_with_core \ clan-pytest-with-core> diff \ clan-pytest-with-core> --cached --exit-code \ clan-pytest-with-core> -- /build/pytest-sy79p3v6/test_flake_with_core/sops/secrets/key/groups/admin-group \ clan-pytest-with-core> /build/pytest-sy79p3v6/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-sy79p3v6/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-sy79p3v6/test_flake_with_core/sops/secrets/key/groups/admin-group \ clan-pytest-with-core> /build/pytest-sy79p3v6/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> clan-pytest-with-core> [gw2] [ 86%] FAILED clan_cli/tests/test_backups.py::test_backups clan-pytest-with-core> clan_cli/machines/install_test.py::test_install_errors_without_target_host 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 set --flake /build/pytest-sy79p3v6/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-sy79p3v6/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-sy79p3v6/test_flake_with_core/../age.key: age13wwu5hhp6fd03r4zgy5p7cw5462twehya7u9996a9eglukw7ueks7lar82 clan-pytest-with-core> sops \ clan-pytest-with-core> --config /build/tmpiljlg3qf \ clan-pytest-with-core> encrypt \ clan-pytest-with-core> --in-place /dev/shm/tmpkyi40jmu 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-sy79p3v6/test_flake_with_core \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-sy79p3v6/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> 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> show \ clan-pytest-with-core> --json --show-trace \ clan-pytest-with-core> /build/pytest-w05e_l4s/test-flake \ clan-pytest-with-core> --store /build/store clan-pytest-with-core> Caller: /build/src/clan_cli/tests/test_create_flake.py:107::test_create_flake_existing_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-sy79p3v6/test_flake_with_core \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-sy79p3v6/test_flake_with_core/sops/secrets/key2/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/key2/users/testuser to git clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-sy79p3v6/test_flake_with_core \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-sy79p3v6/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-sy79p3v6/test_flake_with_core \ clan-pytest-with-core> diff \ clan-pytest-with-core> --cached --exit-code \ clan-pytest-with-core> -- /build/pytest-sy79p3v6/test_flake_with_core/sops/secrets/key2/groups/admin-group \ clan-pytest-with-core> /build/pytest-sy79p3v6/test_flake_with_core/sops/secrets/key2/users/testuser \ clan-pytest-with-core> /build/pytest-sy79p3v6/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-sy79p3v6/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-sy79p3v6/test_flake_with_core/sops/secrets/key2/groups/admin-group \ clan-pytest-with-core> /build/pytest-sy79p3v6/test_flake_with_core/sops/secrets/key2/users/testuser \ clan-pytest-with-core> /build/pytest-sy79p3v6/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/secrets/key2/groups/admin-group, sops/secrets/key2/users/testuser, sops/secrets/key2/secret clan-pytest-with-core> warning: you don't have Internet access; disabling some network-dependent features clan-pytest-with-core> evaluating ''... clan-pytest-with-core> evaluating 'clan'... clan-pytest-with-core> evaluating 'clanInternals'... clan-pytest-with-core> evaluating 'devShells'... clan-pytest-with-core> evaluating 'devShells.aarch64-darwin'... clan-pytest-with-core> evaluating 'devShells.aarch64-darwin.default'... clan-pytest-with-core> warning: devShells.aarch64-darwin.default omitted (use '--all-systems' to show) clan-pytest-with-core> evaluating 'devShells.aarch64-linux'... clan-pytest-with-core> evaluating 'devShells.aarch64-linux.default'... clan-pytest-with-core> warning: devShells.aarch64-linux.default omitted (use '--all-systems' to show) clan-pytest-with-core> evaluating 'devShells.x86_64-linux'... clan-pytest-with-core> evaluating 'devShells.x86_64-linux.default'... clan-pytest-with-core> clan-pytest-with-core> [gw1] [ 86%] PASSED clan_cli/init_test.py::test_init_fallback_from_non_clan_directory clan-pytest-with-core> clan_cli/completions_test.py::test_complete_machines_with_prefix [localhost] $ clan secrets users add --flake /build/pytest-sy79p3v6/test_flake_with_core --pgp-key 9A9B2741C8062D3D3DF1302D8B049E262A5CA255 user2 clan-pytest-with-core> Caller: /build/src/clan_cli/tests/test_secrets_cli.py:920::test_secrets clan-pytest-with-core> clan-pytest-with-core> Prefetching flake /build/pytest-sy79p3v6/test_flake_with_core clan-pytest-with-core> clan-pytest-with-core> [gw7] [ 87%] PASSED clan_cli/init_test.py::test_init_with_local_template_reference clan-pytest-with-core> clan_cli/completions_test.py::test_complete_machines_without_flake warning: you don't have Internet access; disabling some network-dependent features clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-sy79p3v6/test_flake_with_core \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-sy79p3v6/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-sy79p3v6/test_flake_with_core \ clan-pytest-with-core> diff \ clan-pytest-with-core> --cached --exit-code \ clan-pytest-with-core> -- /build/pytest-sy79p3v6/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-sy79p3v6/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-sy79p3v6/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-sy79p3v6/test_flake_with_core admin-group user2 clan-pytest-with-core> Caller: /build/src/clan_cli/tests/test_secrets_cli.py:934::test_secrets clan-pytest-with-core> clan-pytest-with-core> Prefetching flake /build/pytest-sy79p3v6/test_flake_with_core clan-pytest-with-core> clan-pytest-with-core> [gw4] [ 87%] FAILED clan_cli/ssh/test_deploy_info.py::test_ssh_shell_from_deploy 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] evaluating 'nixosConfigurations'... clan-pytest-with-core> evaluating 'nixosConfigurations.machine1'... clan-pytest-with-core> evaluating 'nixosModules'... clan-pytest-with-core> evaluating 'nixosModules.clan-machine-machine1'... clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_cli/tests/test_create_flake.py:107::test_create_flake_existing_git clan-pytest-with-core> clan-pytest-with-core> clan-pytest-with-core> [gw15] [ 87%] PASSED clan_cli/tests/test_create_flake.py::test_create_flake_existing_git clan-pytest-with-core> clan_cli/machines/machines_test.py::test_inventory_machine_detect_class[test_flake_with_core0] warning: you don't have Internet access; disabling some network-dependent features clan-pytest-with-core> sops \ clan-pytest-with-core> --config /build/tmphp6vy_ux \ clan-pytest-with-core> updatekeys \ clan-pytest-with-core> --yes /build/pytest-sy79p3v6/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> [gw0] [ 88%] PASSED clan_lib/vars/migrations/test_migrate_zerotier.py::TestMigrateZerotier::test_idempotent clan-pytest-with-core> clan_cli/completions_test.py::test_complete_machines 2026/08/18 10:51:31 Syncing keys for file /build/pytest-sy79p3v6/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> age13wwu5hhp6fd03r4zgy5p7cw5462twehya7u9996a9eglukw7ueks7lar82 clan-pytest-with-core> age14tva0txcrl0zes05x7gkx56qd6wd9q3nwecjac74xxzz4l47r44sv3fz62 clan-pytest-with-core> +++ 9A9B2741C8062D3D3DF1302D8B049E262A5CA255 clan-pytest-with-core> 2026/08/18 10:51:31 File /build/pytest-sy79p3v6/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> clan-pytest-with-core> [gw1] [ 88%] PASSED clan_cli/completions_test.py::test_complete_machines_with_prefix sops \ clan-pytest-with-core> --config /build/tmpmikljufw \ clan-pytest-with-core> updatekeys \ clan-pytest-with-core> --yes /build/pytest-sy79p3v6/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> clan-pytest-with-core> [gw7] [ 89%] PASSED clan_cli/completions_test.py::test_complete_machines_without_flake 2026/08/18 10:51:31 Syncing keys for file /build/pytest-sy79p3v6/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> age13wwu5hhp6fd03r4zgy5p7cw5462twehya7u9996a9eglukw7ueks7lar82 clan-pytest-with-core> age14tva0txcrl0zes05x7gkx56qd6wd9q3nwecjac74xxzz4l47r44sv3fz62 clan-pytest-with-core> +++ 9A9B2741C8062D3D3DF1302D8B049E262A5CA255 clan-pytest-with-core> 2026/08/18 10:51:31 File /build/pytest-sy79p3v6/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-sy79p3v6/test_flake_with_core \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-sy79p3v6/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-sy79p3v6/test_flake_with_core \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-sy79p3v6/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-sy79p3v6/test_flake_with_core \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-sy79p3v6/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-sy79p3v6/test_flake_with_core \ clan-pytest-with-core> diff \ clan-pytest-with-core> --cached --exit-code \ clan-pytest-with-core> -- /build/pytest-sy79p3v6/test_flake_with_core/sops/groups/admin-group/users/user2 \ clan-pytest-with-core> /build/pytest-sy79p3v6/test_flake_with_core/sops/secrets/key/secret \ clan-pytest-with-core> /build/pytest-sy79p3v6/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-sy79p3v6/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-sy79p3v6/test_flake_with_core/sops/groups/admin-group/users/user2 \ clan-pytest-with-core> /build/pytest-sy79p3v6/test_flake_with_core/sops/secrets/key/secret \ clan-pytest-with-core> /build/pytest-sy79p3v6/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> clan-pytest-with-core> [gw10] [ 89%] 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> [gw5] [ 90%] PASSED clan_cli/tests/test_import_sops_cli.py::test_import_sops 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> [gw0] [ 90%] PASSED clan_cli/completions_test.py::test_complete_machines [localhost] $ clan secrets groups remove-user --flake /build/pytest-sy79p3v6/test_flake_with_core admin-group user2 clan-pytest-with-core> Caller: /build/src/clan_cli/tests/test_secrets_cli.py:953::test_secrets clan-pytest-with-core> clan-pytest-with-core> Prefetching flake /build/pytest-sy79p3v6/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/tmp_uo9sbav \ clan-pytest-with-core> updatekeys \ clan-pytest-with-core> --yes /build/pytest-sy79p3v6/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/08/18 10:51:31 Syncing keys for file /build/pytest-sy79p3v6/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> age13wwu5hhp6fd03r4zgy5p7cw5462twehya7u9996a9eglukw7ueks7lar82 clan-pytest-with-core> age14tva0txcrl0zes05x7gkx56qd6wd9q3nwecjac74xxzz4l47r44sv3fz62 clan-pytest-with-core> --- 9A9B2741C8062D3D3DF1302D8B049E262A5CA255 clan-pytest-with-core> 2026/08/18 10:51:31 File /build/pytest-sy79p3v6/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/tmpygjfzngd \ clan-pytest-with-core> updatekeys \ clan-pytest-with-core> --yes /build/pytest-sy79p3v6/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/08/18 10:51:31 Syncing keys for file /build/pytest-sy79p3v6/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> age13wwu5hhp6fd03r4zgy5p7cw5462twehya7u9996a9eglukw7ueks7lar82 clan-pytest-with-core> age14tva0txcrl0zes05x7gkx56qd6wd9q3nwecjac74xxzz4l47r44sv3fz62 clan-pytest-with-core> --- 9A9B2741C8062D3D3DF1302D8B049E262A5CA255 clan-pytest-with-core> 2026/08/18 10:51:31 File /build/pytest-sy79p3v6/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-sy79p3v6/test_flake_with_core \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-sy79p3v6/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-sy79p3v6/test_flake_with_core \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-sy79p3v6/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-sy79p3v6/test_flake_with_core \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-sy79p3v6/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> clan-pytest-with-core> [gw9] [ 90%] PASSED clan_cli/templates/apply_test.py::test_templates_apply_machine_and_disk 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-sy79p3v6/test_flake_with_core \ clan-pytest-with-core> diff \ clan-pytest-with-core> --cached --exit-code \ clan-pytest-with-core> -- /build/pytest-sy79p3v6/test_flake_with_core/sops/groups/admin-group/users/user2 \ clan-pytest-with-core> /build/pytest-sy79p3v6/test_flake_with_core/sops/secrets/key/secret \ clan-pytest-with-core> /build/pytest-sy79p3v6/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> clan-pytest-with-core> clan_cli/init_test.py::test_init_minimal_template git \ clan-pytest-with-core> -C /build/pytest-sy79p3v6/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-sy79p3v6/test_flake_with_core/sops/groups/admin-group/users/user2 \ clan-pytest-with-core> /build/pytest-sy79p3v6/test_flake_with_core/sops/secrets/key/secret \ clan-pytest-with-core> /build/pytest-sy79p3v6/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> clan-pytest-with-core> [gw14] [ 91%] PASSED clan_lib/services/modules_test.py::test_delete_static_service_instance clan-pytest-with-core> clan_lib/services/modules_test.py::test_inline_extra_modules 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> clan-pytest-with-core> [gw10] [ 91%] 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> [gw5] [ 92%] 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> [gw8] [ 92%] 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/init_test.py::test_init_existing_git 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> show \ clan-pytest-with-core> --json --show-trace \ clan-pytest-with-core> /build/pytest-qmpcc14x/test-flake \ clan-pytest-with-core> --store /build/store clan-pytest-with-core> Caller: /build/src/clan_cli/tests/test_create_flake.py:60::test_create_flake clan-pytest-with-core> clan-pytest-with-core> warning: you don't have Internet access; disabling some network-dependent features clan-pytest-with-core> evaluating ''... clan-pytest-with-core> [localhost] $ clan secrets groups remove-secret --flake /build/pytest-sy79p3v6/test_flake_with_core admin-group key clan-pytest-with-core> Caller: /build/src/clan_cli/tests/test_secrets_cli.py:973::test_secrets clan-pytest-with-core> clan-pytest-with-core> Prefetching flake /build/pytest-sy79p3v6/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/tmplexz8inb \ clan-pytest-with-core> updatekeys \ clan-pytest-with-core> --yes /build/pytest-sy79p3v6/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> evaluating 'clan'... clan-pytest-with-core> evaluating 'clanInternals'... clan-pytest-with-core> evaluating 'devShells'... clan-pytest-with-core> evaluating 'devShells.aarch64-darwin'... clan-pytest-with-core> evaluating 'devShells.aarch64-darwin.default'... clan-pytest-with-core> warning: devShells.aarch64-darwin.default omitted (use '--all-systems' to show) clan-pytest-with-core> evaluating 'devShells.aarch64-linux'... clan-pytest-with-core> evaluating 'devShells.aarch64-linux.default'... clan-pytest-with-core> warning: devShells.aarch64-linux.default omitted (use '--all-systems' to show) clan-pytest-with-core> evaluating 'devShells.x86_64-linux'... clan-pytest-with-core> evaluating 'devShells.x86_64-linux.default'... clan-pytest-with-core> 2026/08/18 10:51:31 Syncing keys for file /build/pytest-sy79p3v6/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> age13wwu5hhp6fd03r4zgy5p7cw5462twehya7u9996a9eglukw7ueks7lar82 clan-pytest-with-core> --- age14tva0txcrl0zes05x7gkx56qd6wd9q3nwecjac74xxzz4l47r44sv3fz62 clan-pytest-with-core> 2026/08/18 10:51:31 File /build/pytest-sy79p3v6/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-sy79p3v6/test_flake_with_core \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-sy79p3v6/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-sy79p3v6/test_flake_with_core \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-sy79p3v6/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-sy79p3v6/test_flake_with_core \ clan-pytest-with-core> diff \ clan-pytest-with-core> --cached --exit-code \ clan-pytest-with-core> -- /build/pytest-sy79p3v6/test_flake_with_core/sops/secrets/key/groups/admin-group \ clan-pytest-with-core> /build/pytest-sy79p3v6/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-sy79p3v6/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-sy79p3v6/test_flake_with_core/sops/secrets/key/groups/admin-group \ clan-pytest-with-core> /build/pytest-sy79p3v6/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-sy79p3v6/test_flake_with_core key clan-pytest-with-core> Caller: /build/src/clan_cli/tests/test_secrets_cli.py:985::test_secrets clan-pytest-with-core> clan-pytest-with-core> Prefetching flake /build/pytest-sy79p3v6/test_flake_with_core clan-pytest-with-core> clan-pytest-with-core> [gw15] [ 93%] PASSED clan_cli/machines/machines_test.py::test_inventory_machine_detect_class[test_flake_with_core0] warning: you don't have Internet access; disabling some network-dependent features clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-sy79p3v6/test_flake_with_core \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-sy79p3v6/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-sy79p3v6/test_flake_with_core \ clan-pytest-with-core> diff \ clan-pytest-with-core> --cached --exit-code \ clan-pytest-with-core> -- /build/pytest-sy79p3v6/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-sy79p3v6/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-sy79p3v6/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> evaluating 'nixosConfigurations'... clan-pytest-with-core> evaluating 'nixosConfigurations.machine1'... clan-pytest-with-core> evaluating 'nixosModules'... clan-pytest-with-core> evaluating 'nixosModules.clan-machine-machine1'... clan-pytest-with-core> [localhost] $ clan secrets remove --flake /build/pytest-sy79p3v6/test_flake_with_core key2 clan-pytest-with-core> Caller: /build/src/clan_cli/tests/test_secrets_cli.py:986::test_secrets clan-pytest-with-core> clan-pytest-with-core> Prefetching flake /build/pytest-sy79p3v6/test_flake_with_core clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_cli/tests/test_create_flake.py:60::test_create_flake clan-pytest-with-core> clan-pytest-with-core> clan-pytest-with-core> [gw13] [ 93%] PASSED clan_cli/tests/test_create_flake.py::test_create_flake clan-pytest-with-core> clan_cli/flash/list_test.py::test_flash_list_keymaps clan-pytest-with-core> [gw2] [ 93%] FAILED clan_cli/machines/install_test.py::test_install_errors_without_target_host clan-pytest-with-core> clan_cli/completions_test.py::test_complete_machines_with_created_machine warning: you don't have Internet access; disabling some network-dependent features clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-sy79p3v6/test_flake_with_core \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-sy79p3v6/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-sy79p3v6/test_flake_with_core \ clan-pytest-with-core> diff \ clan-pytest-with-core> --cached --exit-code \ clan-pytest-with-core> -- /build/pytest-sy79p3v6/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-sy79p3v6/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-sy79p3v6/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> 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> show \ clan-pytest-with-core> --json --show-trace \ clan-pytest-with-core> /build/pytest-l193__r5/test-flake \ clan-pytest-with-core> --store /build/store clan-pytest-with-core> Caller: /build/src/clan_cli/init_test.py:54::test_init clan-pytest-with-core> clan-pytest-with-core> warning: you don't have Internet access; disabling some network-dependent features clan-pytest-with-core> evaluating ''... clan-pytest-with-core> clan-pytest-with-core> [gw13] [ 94%] PASSED clan_cli/flash/list_test.py::test_flash_list_keymaps clan-pytest-with-core> [gw3] [ 94%] PASSED clan_cli/tests/test_secrets_cli.py::test_secrets clan-pytest-with-core> clan_cli/tests/test_hardware_config.py::test_should_prompt_for_facter_update evaluating 'clan'... clan-pytest-with-core> evaluating 'clanInternals'... clan-pytest-with-core> evaluating 'devShells'... clan-pytest-with-core> evaluating 'devShells.aarch64-darwin'... clan-pytest-with-core> evaluating 'devShells.aarch64-darwin.default'... clan-pytest-with-core> warning: devShells.aarch64-darwin.default omitted (use '--all-systems' to show) clan-pytest-with-core> evaluating 'devShells.aarch64-linux'... clan-pytest-with-core> evaluating 'devShells.aarch64-linux.default'... clan-pytest-with-core> warning: devShells.aarch64-linux.default omitted (use '--all-systems' to show) clan-pytest-with-core> evaluating 'devShells.x86_64-linux'... clan-pytest-with-core> evaluating 'devShells.x86_64-linux.default'... clan-pytest-with-core> clan-pytest-with-core> [gw14] [ 95%] PASSED clan_lib/services/modules_test.py::test_inline_extra_modules evaluating 'nixosConfigurations'... clan-pytest-with-core> evaluating 'nixosConfigurations.machine1'... clan-pytest-with-core> evaluating 'nixosModules'... clan-pytest-with-core> evaluating 'nixosModules.clan-machine-machine1'... clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_cli/init_test.py:54::test_init clan-pytest-with-core> clan-pytest-with-core> clan-pytest-with-core> [gw6] [ 95%] PASSED clan_cli/init_test.py::test_init clan-pytest-with-core> clan_cli/init_test.py::test_init_substitutes_placeholders clan-pytest-with-core> [gw3] [ 96%] PASSED clan_cli/tests/test_hardware_config.py::test_should_prompt_for_facter_update clan-pytest-with-core> [gw6] [ 96%] PASSED clan_cli/init_test.py::test_init_substitutes_placeholders clan-pytest-with-core> [gw2] [ 96%] PASSED clan_cli/completions_test.py::test_complete_machines_with_created_machine 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> show \ clan-pytest-with-core> --json --show-trace \ clan-pytest-with-core> /build/pytest-mpdzca52/test-flake \ clan-pytest-with-core> --store /build/store clan-pytest-with-core> Caller: /build/src/clan_cli/init_test.py:146::test_init_minimal_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> evaluating ''... clan-pytest-with-core> evaluating 'clan'... clan-pytest-with-core> evaluating 'clanInternals'... clan-pytest-with-core> evaluating 'nixosConfigurations'... clan-pytest-with-core> evaluating 'nixosConfigurations.machine1'... clan-pytest-with-core> evaluating 'nixosModules'... clan-pytest-with-core> evaluating 'nixosModules.clan-machine-machine1'... clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_cli/init_test.py:146::test_init_minimal_template clan-pytest-with-core> clan-pytest-with-core> clan-pytest-with-core> [gw9] [ 97%] PASSED clan_cli/init_test.py::test_init_minimal_template 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> show \ clan-pytest-with-core> --json --show-trace \ clan-pytest-with-core> /build/pytest-px0zg26r/test-flake \ clan-pytest-with-core> --store /build/store clan-pytest-with-core> Caller: /build/src/clan_cli/init_test.py:101::test_init_existing_git clan-pytest-with-core> clan-pytest-with-core> warning: you don't have Internet access; disabling some network-dependent features clan-pytest-with-core> evaluating ''... clan-pytest-with-core> evaluating 'clan'... clan-pytest-with-core> evaluating 'clanInternals'... clan-pytest-with-core> evaluating 'devShells'... clan-pytest-with-core> evaluating 'devShells.aarch64-darwin'... clan-pytest-with-core> evaluating 'devShells.aarch64-darwin.default'... clan-pytest-with-core> warning: devShells.aarch64-darwin.default omitted (use '--all-systems' to show) clan-pytest-with-core> evaluating 'devShells.aarch64-linux'... clan-pytest-with-core> evaluating 'devShells.aarch64-linux.default'... clan-pytest-with-core> warning: devShells.aarch64-linux.default omitted (use '--all-systems' to show) clan-pytest-with-core> evaluating 'devShells.x86_64-linux'... clan-pytest-with-core> evaluating 'devShells.x86_64-linux.default'... clan-pytest-with-core> evaluating 'nixosConfigurations'... clan-pytest-with-core> evaluating 'nixosConfigurations.machine1'... clan-pytest-with-core> evaluating 'nixosModules'... clan-pytest-with-core> evaluating 'nixosModules.clan-machine-machine1'... clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_cli/init_test.py:101::test_init_existing_git clan-pytest-with-core> clan-pytest-with-core> clan-pytest-with-core> [gw8] [ 97%] PASSED clan_cli/init_test.py::test_init_existing_git clan-pytest-with-core> [gw12] [ 98%] FAILED clan_cli/tests/test_machines_cli.py::test_machine_delete clan-pytest-with-core> clan_cli/generate_test_vars/test_generate_test_vars.py::test_generate_test_vars clan-pytest-with-core> [gw4] [ 98%] 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> [gw11] [ 99%] PASSED clan_cli/machines/install_test.py::test_install_resolves_target_from_inventory clan-pytest-with-core> clan_cli/machines/build_test.py::test_get_machines_for_build_nonexistent_machine clan-pytest-with-core> [gw11] [ 99%] PASSED clan_cli/machines/build_test.py::test_get_machines_for_build_nonexistent_machine clan-pytest-with-core> [gw12] [100%] PASSED clan_cli/generate_test_vars/test_generate_test_vars.py::test_generate_test_vars clan-pytest-with-core> clan-pytest-with-core> =================================== FAILURES =================================== clan-pytest-with-core> ______________________________ test_flash_config _______________________________ clan-pytest-with-core> [gw9] linux -- Python 3.14.7 /nix/store/3n4qphl9s728sz8frmpqqrv9b1m87g68-python3-3.14.7/bin/python clan-pytest-with-core> clan-pytest-with-core> flake = clan-pytest-with-core> test_root = PosixPath('/build/src/clan_cli/tests') 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_flash_config(flake: ClanFlake, test_root: Path) -> None: clan-pytest-with-core> languages = list_languages() clan-pytest-with-core> keymaps = list_keymaps() clan-pytest-with-core> clan-pytest-with-core> host_key = test_root / "data" / "ssh_host_ed25519_key" clan-pytest-with-core> clan-pytest-with-core> test_langs = list( clan-pytest-with-core> filter( clan-pytest-with-core> lambda x: "zh_CN" in x, clan-pytest-with-core> languages, clan-pytest-with-core> ) clan-pytest-with-core> ) clan-pytest-with-core> clan-pytest-with-core> for test_lang in test_langs: clan-pytest-with-core> log.info(f"Testing language: {test_lang}") clan-pytest-with-core> sys_config = SystemConfig( clan-pytest-with-core> language=test_lang, clan-pytest-with-core> keymap=keymaps[3], clan-pytest-with-core> ssh_keys_path=[str(host_key)], clan-pytest-with-core> ) clan-pytest-with-core> clan-pytest-with-core> result = build_system_config_nix(sys_config) clan-pytest-with-core> clan-pytest-with-core> config = flake.machines["my_machine"] = create_test_machine_config( clan-pytest-with-core> nix_config()["system"] clan-pytest-with-core> ) clan-pytest-with-core> config["boot"]["loader"]["grub"]["devices"] = ["/dev/vda"] clan-pytest-with-core> config["fileSystems"]["/"]["device"] = "/dev/vda" clan-pytest-with-core> config["fileSystems"]["/"]["fsType"] = "ext4" clan-pytest-with-core> config.update(result) clan-pytest-with-core> flake.refresh() clan-pytest-with-core> clan-pytest-with-core> # In the sandbox, building fails due to network restrictions (can't download dependencies) clan-pytest-with-core> # Outside the sandbox, the build should succeed clan-pytest-with-core> in_sandbox = os.environ.get("IN_NIX_SANDBOX") == "1" clan-pytest-with-core> clan-pytest-with-core> machine = Machine(name="my_machine", flake=Flake(str(flake.path))) clan-pytest-with-core> if in_sandbox: clan-pytest-with-core> # In sandbox: expect build to fail due to network restrictions clan-pytest-with-core> with pytest.raises(ClanSelectError) as select_error: clan-pytest-with-core> Path( clan-pytest-with-core> machine.flake.select( clan-pytest-with-core> machine_toplevel(current_system(), machine.name) clan-pytest-with-core> ) clan-pytest-with-core> ) clan-pytest-with-core> # The error should be a select_error without a failed_attr clan-pytest-with-core> cmd_error = select_error.value.__cause__ clan-pytest-with-core> assert cmd_error is not None clan-pytest-with-core> assert isinstance(cmd_error, ClanCmdError) clan-pytest-with-core> > assert "nixos-system-my_machine" in str(cmd_error.cmd.stderr) clan-pytest-with-core> E assert 'nixos-system-my_machine' in 'warning: you don\'t have Internet access; disabling some network-dependent features\nerror:\n … while calling the \'derivationStrict\' builtin\n at :37:12:\n 36|\n 37| strict = derivationStrict drvAttrs;\n | ^\n 38|\n\n … while evaluating derivation \'clan-flake-select\'\n whose name attribute is located at «string»:10:17\n\n … while evaluating attribute \'result\' of derivation \'clan-flake-select\'\n at «string»:11:17:\n 10| name = "clan-flake-select";\n 11| result = builtins.toJSON [\n | ^\n 12| (selectLib.applySelectors (builtins.fromJSON \'\'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "str", "value": "my_machine"}, {"type": "str", "value": "config"}, {"type": "str", "value": "system"}, {"type": "str", "value": "build"}, {"type": "str", "value": "toplevel"}]\'\') flake)\n\n … while calling the \'toJSON\' builtin\n at «string»:11:26:\n ... | ^\n 108|\n\n … while evaluating the attribute \'pkgs.isDefined\'\n at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1154:21:\n 1153| definitionsWithLocations = res.defsFinal;\n 1154| inherit (res) isDefined;\n | ^\n 1155| inherit (res.checkedAndMerged) valueMeta;\n\n … while evaluating the attribute \'isDefined\'\n at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1310:5:\n 1309|\n 1310| isDefined = defsFinal != [ ];\n | ^\n 1311|\n\n (6 duplicate frames omitted)\n\n error: attribute \'system\' missing\n at /build/store/nix/store/y3h139bhv4373m1hab367ma4p5i95i2f-source/modules/clan/module.nix:164:24:\n 163| (lib.modules.importApply ../../nixosModules/machineModules/overridePkgs.nix {\n 164| pkgs = nixpkgsMatrix.${config.inventory.machines.${name}.nixpkgs}.system.${system}.pkgs;\n | ^\n 165| })\n Did you mean systems?\n' clan-pytest-with-core> E + where 'warning: you don\'t have Internet access; disabling some network-dependent features\nerror:\n … while calling the \'derivationStrict\' builtin\n at :37:12:\n 36|\n 37| strict = derivationStrict drvAttrs;\n | ^\n 38|\n\n … while evaluating derivation \'clan-flake-select\'\n whose name attribute is located at «string»:10:17\n\n … while evaluating attribute \'result\' of derivation \'clan-flake-select\'\n at «string»:11:17:\n 10| name = "clan-flake-select";\n 11| result = builtins.toJSON [\n | ^\n 12| (selectLib.applySelectors (builtins.fromJSON \'\'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "str", "value": "my_machine"}, {"type": "str", "value": "config"}, {"type": "str", "value": "system"}, {"type": "str", "value": "build"}, {"type": "str", "value": "toplevel"}]\'\') flake)\n\n … while calling the \'toJSON\' builtin\n at «string»:11:26:\n ... | ^\n 108|\n\n … while evaluating the attribute \'pkgs.isDefined\'\n at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1154:21:\n 1153| definitionsWithLocations = res.defsFinal;\n 1154| inherit (res) isDefined;\n | ^\n 1155| inherit (res.checkedAndMerged) valueMeta;\n\n … while evaluating the attribute \'isDefined\'\n at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1310:5:\n 1309|\n 1310| isDefined = defsFinal != [ ];\n | ^\n 1311|\n\n (6 duplicate frames omitted)\n\n error: attribute \'system\' missing\n at /build/store/nix/store/y3h139bhv4373m1hab367ma4p5i95i2f-source/modules/clan/module.nix:164:24:\n 163| (lib.modules.importApply ../../nixosModules/machineModules/overridePkgs.nix {\n 164| pkgs = nixpkgsMatrix.${config.inventory.machines.${name}.nixpkgs}.system.${system}.pkgs;\n | ^\n 165| })\n Did you mean systems?\n' = str('warning: you don\'t have Internet access; disabling some network-dependent features\nerror:\n … while calling the \'derivationStrict\' builtin\n at :37:12:\n 36|\n 37| strict = derivationStrict drvAttrs;\n | ^\n 38|\n\n … while evaluating derivation \'clan-flake-select\'\n whose name attribute is located at «string»:10:17\n\n … while evaluating attribute \'result\' of derivation \'clan-flake-select\'\n at «string»:11:17:\n 10| name = "clan-flake-select";\n 11| result = builtins.toJSON [\n | ^\n 12| (selectLib.applySelectors (builtins.fromJSON \'\'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "str", "value": "my_machine"}, {"type": "str", "value": "config"}, {"type": "str", "value": "system"}, {"type": "str", "value": "build"}, {"type": "str", "value": "toplevel"}]\'\') flake)\n\n … while calling the \'toJSON\' builtin\n at «string»:11:26:\n ... | ^\n 108|\n\n … while evaluating the attribute \'pkgs.isDefined\'\n at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1154:21:\n 1153| definitionsWithLocations = res.defsFinal;\n 1154| inherit (res) isDefined;\n | ^\n 1155| inherit (res.checkedAndMerged) valueMeta;\n\n … while evaluating the attribute \'isDefined\'\n at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1310:5:\n 1309|\n 1310| isDefined = defsFinal != [ ];\n | ^\n 1311|\n\n (6 duplicate frames omitted)\n\n error: attribute \'system\' missing\n at /build/store/nix/store/y3h139bhv4373m1hab367ma4p5i95i2f-source/modules/clan/module.nix:164:24:\n 163| (lib.modules.importApply ../../nixosModules/machineModules/overridePkgs.nix {\n 164| pkgs = nixpkgsMatrix.${config.inventory.machines.${name}.nixpkgs}.system.${system}.pkgs;\n | ^\n 165| })\n Did you mean systems?\n') clan-pytest-with-core> E + where 'warning: you don\'t have Internet access; disabling some network-dependent features\nerror:\n … while calling the \'derivationStrict\' builtin\n at :37:12:\n 36|\n 37| strict = derivationStrict drvAttrs;\n | ^\n 38|\n\n … while evaluating derivation \'clan-flake-select\'\n whose name attribute is located at «string»:10:17\n\n … while evaluating attribute \'result\' of derivation \'clan-flake-select\'\n at «string»:11:17:\n 10| name = "clan-flake-select";\n 11| result = builtins.toJSON [\n | ^\n 12| (selectLib.applySelectors (builtins.fromJSON \'\'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "str", "value": "my_machine"}, {"type": "str", "value": "config"}, {"type": "str", "value": "system"}, {"type": "str", "value": "build"}, {"type": "str", "value": "toplevel"}]\'\') flake)\n\n … while calling the \'toJSON\' builtin\n at «string»:11:26:\n ... | ^\n 108|\n\n … while evaluating the attribute \'pkgs.isDefined\'\n at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1154:21:\n 1153| definitionsWithLocations = res.defsFinal;\n 1154| inherit (res) isDefined;\n | ^\n 1155| inherit (res.checkedAndMerged) valueMeta;\n\n … while evaluating the attribute \'isDefined\'\n at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1310:5:\n 1309|\n 1310| isDefined = defsFinal != [ ];\n | ^\n 1311|\n\n (6 duplicate frames omitted)\n\n error: attribute \'system\' missing\n at /build/store/nix/store/y3h139bhv4373m1hab367ma4p5i95i2f-source/modules/clan/module.nix:164:24:\n 163| (lib.modules.importApply ../../nixosModules/machineModules/overridePkgs.nix {\n 164| pkgs = nixpkgsMatrix.${config.inventory.machines.${name}.nixpkgs}.system.${system}.pkgs;\n | ^\n 165| })\n Did you mean systems?\n' = CmdOut(stdout='', stderr='warning: you don\'t have Internet access; disabling some network-dependent features\nerror:\n … while calling the \'derivationStrict\' builtin\n at :37:12:\n 36|\n 37| strict = derivationStrict drvAttrs;\n | ^\n 38|\n\n … while evaluating derivation \'clan-flake-select\'\n whose name attribute is located at «string»:10:17\n\n … while evaluating attribute \'result\' of derivation \'clan-flake-select\'\n at «string»:11:17:\n 10| name = "clan-flake-select";\n 11| result = builtins.toJSON [\n | ^\n 12| (selectLib.applySelectors (builtins.fromJSON \'\'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "str", "value": "my_machine"}, {"type": "str", "value": "config"}, {"type": "str", "value": "system"}, {"type": "str", "value": "build"}, {"type": "str", "value": "toplevel"}]\'\') flake)\n\n … while calling the \'toJSON\' builtin\n at ... result = builtins.toJSON [\n (selectLib.applySelectors (builtins.fromJSON \'\'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "str", "value": "my_machine"}, {"type": "str", "value": "config"}, {"type": "str", "value": "system"}, {"type": "str", "value": "build"}, {"type": "str", "value": "toplevel"}]\'\') flake)\n ];\n\n # We can always build this derivation locally, since /bin/sh is system independent,\n # remote builders would introduce needless overhead.\n preferLocalBuild = true;\n # Save the roundtrip to check the binary caches for trivial substitutions\n allowSubstitutes = false;\n\n passAsFile = [ "result" ];\n system = "x86_64-linux";\n builder = "/bin/sh";\n args = [\n "-c"\n \'\'\n read -r x < "$resultPath"; printf %s "$x" > $out\n \'\'\n ];\n }\n ', '--store', '/build/store'], returncode=1, msg=None, stdout_raw=b'').stderr clan-pytest-with-core> E + where CmdOut(stdout='', stderr='warning: you don\'t have Internet access; disabling some network-dependent features\nerror:\n … while calling the \'derivationStrict\' builtin\n at :37:12:\n 36|\n 37| strict = derivationStrict drvAttrs;\n | ^\n 38|\n\n … while evaluating derivation \'clan-flake-select\'\n whose name attribute is located at «string»:10:17\n\n … while evaluating attribute \'result\' of derivation \'clan-flake-select\'\n at «string»:11:17:\n 10| name = "clan-flake-select";\n 11| result = builtins.toJSON [\n | ^\n 12| (selectLib.applySelectors (builtins.fromJSON \'\'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "str", "value": "my_machine"}, {"type": "str", "value": "config"}, {"type": "str", "value": "system"}, {"type": "str", "value": "build"}, {"type": "str", "value": "toplevel"}]\'\') flake)\n\n … while calling the \'toJSON\' builtin\n at ... result = builtins.toJSON [\n (selectLib.applySelectors (builtins.fromJSON \'\'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "str", "value": "my_machine"}, {"type": "str", "value": "config"}, {"type": "str", "value": "system"}, {"type": "str", "value": "build"}, {"type": "str", "value": "toplevel"}]\'\') flake)\n ];\n\n # We can always build this derivation locally, since /bin/sh is system independent,\n # remote builders would introduce needless overhead.\n preferLocalBuild = true;\n # Save the roundtrip to check the binary caches for trivial substitutions\n allowSubstitutes = false;\n\n passAsFile = [ "result" ];\n system = "x86_64-linux";\n builder = "/bin/sh";\n args = [\n "-c"\n \'\'\n read -r x < "$resultPath"; printf %s "$x" > $out\n \'\'\n ];\n }\n ', '--store', '/build/store'], returncode=1, msg=None, stdout_raw=b'') = ClanCmdError(\n=================================== Command ====================================\nnix \\n --extra-experimental-features 'nix-command flakes' \\n --option warn-dirty \\n false \\n build \\n --flake-registry '' \\n --print-out-paths --print-build-logs \\n --show-trace --no-link \\n --expr '\n let\n flake = builtins.getFlake "path:/nix/store/7n3zp4snx4l8fjhdil1q9dynq23q64wi-source?narHash=sha256-Es/7RrDAwGxjtGPntRo79irsun7vCKfUuCff13eKRg4=";\n selectLib = (\n builtins.getFlake\n "path:/nix/store/cba1x9mxnwr8b36cw41bya7g6d5v1p7d-source?narHash=sha256-yxcNOha7Cfv2nhVpz9ZXSNKk0R7wt4AiBklJ8D24rVg="\n ).lib;\n in\n derivation {\n name = "clan-flake-select";\n result = builtins.toJSON [\n (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "str", "value": "my_machine"}, {"type": "str", "value": "config"}, {"type": "str", "value": "system"}, {"type": "str", "value": "build"}, {"type": "...kgs;\n | ^\n 108|\n\n … while evaluating the attribute 'pkgs.isDefined'\n at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1154:21:\n 1153| definitionsWithLocations = res.defsFinal;\n 1154| inherit (res) isDefined;\n | ^\n 1155| inherit (res.checkedAndMerged) valueMeta;\n\n … while evaluating the attribute 'isDefined'\n at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1310:5:\n 1309|\n 1310| isDefined = defsFinal != [ ];\n | ^\n 1311|\n\n (6 duplicate frames omitted)\n\n error: attribute 'system' missing\n at /build/store/nix/store/y3h139bhv4373m1hab367ma4p5i95i2f-source/modules/clan/module.nix:164:24:\n 163| (lib.modules.importApply ../../nixosModules/machineModules/overridePkgs.nix {\n 164| pkgs = nixpkgsMatrix.${config.inventory.machines.${name}.nixpkgs}.system.${system}.pkgs;\n | ^\n 165| })\n Did you mean systems?\n\nReturn Code: 1\n).cmd clan-pytest-with-core> clan-pytest-with-core> /build/src/clan_lib/flash/test_list.py:80: AssertionError clan-pytest-with-core> ---------------------------- Captured stdout setup ----------------------------- clan-pytest-with-core> Initialized empty Git repository in /build/minimal-flake-t0t1tcpk/flake/.git/ clan-pytest-with-core> [main (root-commit) 38a444b] 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-t0t1tcpk/flake/flake.lock": clan-pytest-with-core> • Added input 'clan-core': clan-pytest-with-core> 'path:/nix/store/x4g1qsn1nq0q56zn8h9c7xaiysv7bsf2-clan-core-flake?lastModified=1&narHash=sha256-Ynx5u312tlxJbGJCSevw5zZVxrd02FisWE1my%2B%2BFRSw%3D' (1970-01-01) clan-pytest-with-core> • Added input 'clan-core/data-mesher': clan-pytest-with-core> 'path:/nix/store/kdjkigwckgrfz0yg0d9z7kj2xkf084vs-source?lastModified=1&narHash=sha256-Yase/4e4aNN9QvUMqPH9ngbAmlcJCqLmFL0zuURdkuA%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/w2c23ykc12mswlg8hrrjzb5gv9gvkzwq-source?lastModified=1&narHash=sha256-RxWs5ND31KzTG7wvMM%2BPMfUjyNpmIEr999lqNARaM5o%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/lrxvs4l9bqbgjfz7w9bkfg5zqq442jxc-source?lastModified=1&narHash=sha256-4dtXQk/NMePegK/nWp5NSeuZKLATItOq61lpEvmXqGw%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/p17akwn814w226jq2cdkkhcw4psb0ga9-source?lastModified=0&narHash=sha256-tkD1h/1jLJ6qZHjG7/TOZT1qqI1ej3VPPCufHQyv1Uo%3D' (1970-01-01) clan-pytest-with-core> • Added input 'clan-core/sops-nix': clan-pytest-with-core> 'path:/nix/store/s154mmk8ahvc71gq8xfkbzlk240yvniv-source?lastModified=1&narHash=sha256-gkig4nPi1CWc4Z50GBsjE4ygSE7hMpl/TwID2an2Cck%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/9m1jsz5b9ggmjij2vkmafnhn26g96jjn-source?lastModified=1&narHash=sha256-brhZ8DmuGtzkCYHJg4HEd602amKm89Y9ytsFZ5uWD1w%3D' (1970-01-01) clan-pytest-with-core> • Added input 'clan-core/treefmt-nix': clan-pytest-with-core> 'path:/nix/store/7sjy8935654h3220n5gbaclf5nfw4nzx-source?lastModified=1&narHash=sha256-WSFCsDSE5ffgD2MqzkM2CYjeFiKhRF/dJUN8uedb6YE%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-l_ds3t54 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:143 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-t0t1tcpk/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/x4g1qsn1nq0q56zn8h9c7xaiysv7bsf2-clan-core-flake?lastModified=1&narHash=sha256-Ynx5u312tlxJbGJCSevw5zZVxrd02FisWE1my%2B%2BFRSw%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/kdjkigwckgrfz0yg0d9z7kj2xkf084vs-source?lastModified=1&narHash=sha256-Yase/4e4aNN9QvUMqPH9ngbAmlcJCqLmFL0zuURdkuA%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/w2c23ykc12mswlg8hrrjzb5gv9gvkzwq-source?lastModified=1&narHash=sha256-RxWs5ND31KzTG7wvMM%2BPMfUjyNpmIEr999lqNARaM5o%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/lrxvs4l9bqbgjfz7w9bkfg5zqq442jxc-source?lastModified=1&narHash=sha256-4dtXQk/NMePegK/nWp5NSeuZKLATItOq61lpEvmXqGw%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/p17akwn814w226jq2cdkkhcw4psb0ga9-source?lastModified=0&narHash=sha256-tkD1h/1jLJ6qZHjG7/TOZT1qqI1ej3VPPCufHQyv1Uo%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/s154mmk8ahvc71gq8xfkbzlk240yvniv-source?lastModified=1&narHash=sha256-gkig4nPi1CWc4Z50GBsjE4ygSE7hMpl/TwID2an2Cck%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/9m1jsz5b9ggmjij2vkmafnhn26g96jjn-source?lastModified=1&narHash=sha256-brhZ8DmuGtzkCYHJg4HEd602amKm89Y9ytsFZ5uWD1w%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/7sjy8935654h3220n5gbaclf5nfw4nzx-source?lastModified=1&narHash=sha256-WSFCsDSE5ffgD2MqzkM2CYjeFiKhRF/dJUN8uedb6YE%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:143 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-l_ds3t54 clan-pytest-with-core> ----------------------------- Captured stdout call ----------------------------- clan-pytest-with-core> [main 954d977] flake: update by flake generator clan-pytest-with-core> 2 files changed, 63 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> ----------------------------- Captured stderr call ----------------------------- 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> build \ clan-pytest-with-core> --flake-registry '' \ clan-pytest-with-core> --print-out-paths --print-build-logs \ clan-pytest-with-core> --show-trace --no-link \ clan-pytest-with-core> '/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source#glibcLocales' \ clan-pytest-with-core> --store /build/store clan-pytest-with-core> Caller: /build/src/clan_lib/flash/list.py:37::list_languages 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/flash/list.py:37::list_languages clan-pytest-with-core> 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> build \ clan-pytest-with-core> --flake-registry '' \ clan-pytest-with-core> --print-out-paths --print-build-logs \ clan-pytest-with-core> --show-trace --no-link \ clan-pytest-with-core> '/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source#kbd.out' \ clan-pytest-with-core> --store /build/store clan-pytest-with-core> Caller: /build/src/clan_lib/flash/list.py:71::list_keymaps 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/flash/list.py:71::list_keymaps clan-pytest-with-core> clan-pytest-with-core> Testing language: zh_CN.UTF-8 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> build \ clan-pytest-with-core> --flake-registry '' \ clan-pytest-with-core> --print-out-paths --print-build-logs \ clan-pytest-with-core> --show-trace --no-link \ clan-pytest-with-core> '/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source#glibcLocales' \ clan-pytest-with-core> --store /build/store clan-pytest-with-core> Caller: /build/src/clan_lib/flash/list.py:37::list_languages 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/flash/list.py:37::list_languages clan-pytest-with-core> 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> build \ clan-pytest-with-core> --flake-registry '' \ clan-pytest-with-core> --print-out-paths --print-build-logs \ clan-pytest-with-core> --show-trace --no-link \ clan-pytest-with-core> '/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source#kbd.out' \ clan-pytest-with-core> --store /build/store clan-pytest-with-core> Caller: /build/src/clan_lib/flash/list.py:71::list_keymaps 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/flash/list.py:71::list_keymaps clan-pytest-with-core> 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> Prefetching flake /build/pytest-l_ds3t54/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/febbcab65441be6ccc547560fd0155faadebbbb7 clan-pytest-with-core> (cached) $ clan select clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> Prefetching flake /build/pytest-l_ds3t54/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.machines.x86_64-linux."my_machine".config.system.build.toplevel clan-pytest-with-core> ------------------------------ Captured log call ------------------------------- clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:143 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> build \ clan-pytest-with-core> --flake-registry '' \ clan-pytest-with-core> --print-out-paths --print-build-logs \ clan-pytest-with-core> --show-trace --no-link \ clan-pytest-with-core> '/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source#glibcLocales' \ clan-pytest-with-core> --store /build/store clan-pytest-with-core> Caller: /build/src/clan_lib/flash/list.py:37::list_languages 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:143 Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/flash/list.py:37::list_languages clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:143 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> build \ clan-pytest-with-core> --flake-registry '' \ clan-pytest-with-core> --print-out-paths --print-build-logs \ clan-pytest-with-core> --show-trace --no-link \ clan-pytest-with-core> '/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source#kbd.out' \ clan-pytest-with-core> --store /build/store clan-pytest-with-core> Caller: /build/src/clan_lib/flash/list.py:71::list_keymaps 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:143 Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/flash/list.py:71::list_keymaps clan-pytest-with-core> clan-pytest-with-core> INFO clan_lib.flash.test_list:test_list.py:45 Testing language: zh_CN.UTF-8 clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:143 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> build \ clan-pytest-with-core> --flake-registry '' \ clan-pytest-with-core> --print-out-paths --print-build-logs \ clan-pytest-with-core> --show-trace --no-link \ clan-pytest-with-core> '/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source#glibcLocales' \ clan-pytest-with-core> --store /build/store clan-pytest-with-core> Caller: /build/src/clan_lib/flash/list.py:37::list_languages 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:143 Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/flash/list.py:37::list_languages clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:143 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> build \ clan-pytest-with-core> --flake-registry '' \ clan-pytest-with-core> --print-out-paths --print-build-logs \ clan-pytest-with-core> --show-trace --no-link \ clan-pytest-with-core> '/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source#kbd.out' \ clan-pytest-with-core> --store /build/store clan-pytest-with-core> Caller: /build/src/clan_lib/flash/list.py:71::list_keymaps 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:143 Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/flash/list.py:71::list_keymaps clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:143 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:143 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.flake.flake:flake.py:927 Prefetching flake /build/pytest-l_ds3t54/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/febbcab65441be6ccc547560fd0155faadebbbb7 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-l_ds3t54/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.machines.x86_64-linux."my_machine".config.system.build.toplevel clan-pytest-with-core> _____________________________ test_clan_create_api _____________________________ clan-pytest-with-core> [gw5] linux -- Python 3.14.7 /nix/store/3n4qphl9s728sz8frmpqqrv9b1m87g68-python3-3.14.7/bin/python clan-pytest-with-core> clan-pytest-with-core> self = Flake(identifier='/build/pytest-qw1kcofd/default', hash='sha256-3yqHIIGpqElyzdFYzZzgTxPvXw4okiG6+Cdt2WR8Y9o=', store_p...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.?secrets.?age.?plugins', 'clanInternals.inventoryClass.relativeDirectory', 'clanInternals.machines.x86...ps.?defaultGroups', 'clanInternals.machines.x86_64-linux.{test-clan}.config.clan.core.vars.settings.publicModule', ...] 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-qw1kcofd'), 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/07sh6315z9s3wlvxl7bbf39gw30sfspg-source?narHash=sha256-3yqHIIGpqElyzdFYzZzgTxPvXw4okiG6+Cdt2WR8Y9o="; 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": "maybe", "value": "secrets"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "plugins"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "inventoryClass"}, {"type": "str", "value": "relativeDirectory"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "test-clan"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "share"}, {"type": "str", "value": "dependencies"}, {"type": "str", "value": "prompts"}, {"type": "str", "value": "validationHash"}]}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "test-clan"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "str", "value": "files"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "secret"}, {"type": "str", "value": "deploy"}, {"type": "str", "value": "owner"}, {"type": "str", "value": "group"}, {"type": "str", "value": "mode"}, {"type": "str", "value": "neededFor"}]}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "test-clan"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "defaultGroups"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "test-clan"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "publicModule"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "test-clan"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "secretModule"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "test-clan"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "secretUploadDirectory"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "test-clan"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "passCommand"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "test-clan"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "secretLocation"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "maybe", "value": "recipients"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "test-clan"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "secretLocation"}]'"'"''"'"') 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": "maybe", "value": "secrets"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "plugins"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "inventoryClass"}, {"type": "str", "value": "relativeDirectory"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "test-clan"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "share"}, {"type": "str", "value": "dependencies"}, {"type": "str", "value": "prompts"}, {"type": "str", "value": "validationHash"}]}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "test-clan"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "str", "value": "files"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "secret"}, {"type": "str", "value": "deploy"}, {"type": "str", "value": "owner"}, {"type": "str", "value": "group"}, {"type": "str", "value": "mode"}, {"type": "str", "value": "neededFor"}]}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "test-clan"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "defaultGroups"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "test-clan"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "publicModule"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "test-clan"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "secretModule"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "test-clan"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "secretUploadDirectory"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "test-clan"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "passCommand"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "test-clan"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "secretLocation"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "maybe", "value": "recipients"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "test-clan"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "secretLocation"}]'') 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": "maybe", "value": "secrets"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "plugins"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "inventoryClass"}, {"type": "str", "value": "relativeDirectory"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "test-clan"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "share"}, {"type": "str", "value": "dependencies"}, {"type": "str", "value": "prompts"}, {"type": "str", "value": "validationHash"}]}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "test-clan"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "str", "value": "files"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "secret"}, {"type": "str", "value": "deploy"}, {"type": "str", "value": "owner"}, {"type": "str", "value": "group"}, {"type": "str", "value": "mode"}, {"type": "str", "value": "neededFor"}]}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "test-clan"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "defaultGroups"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "test-clan"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "publicModule"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "test-clan"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "secretModule"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "test-clan"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "secretUploadDirectory"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "test-clan"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "passCommand"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "test-clan"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "secretLocation"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "maybe", "value": "recipients"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "test-clan"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "secretLocation"}]'') flake) clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating list element at index 2 clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating attribute 'test-clan' clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/cba1x9mxnwr8b36cw41bya7g6d5v1p7d-source/select.nix:325:37: clan-pytest-with-core> E 324| in clan-pytest-with-core> E 325| builtins.mapAttrs (_: v: recurse selectors (idx + 1) v) filteredAttrs clan-pytest-with-core> E | ^ clan-pytest-with-core> E 326| else if selector.type == "maybe" then 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:325:40: clan-pytest-with-core> E 324| in clan-pytest-with-core> E 325| builtins.mapAttrs (_: v: recurse selectors (idx + 1) v) filteredAttrs clan-pytest-with-core> E | ^ clan-pytest-with-core> E 326| else if selector.type == "maybe" then 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 … from call site clan-pytest-with-core> E at /build/store/nix/store/cba1x9mxnwr8b36cw41bya7g6d5v1p7d-source/select.nix:312:15: clan-pytest-with-core> E 311| else if selector.type == "str" then clan-pytest-with-core> E 312| recurse selectors (idx + 1) (builtins.getAttr selector.value obj) clan-pytest-with-core> E | ^ clan-pytest-with-core> E 313| else if selector.type == "set" then 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 'getAttr' builtin clan-pytest-with-core> E at /build/store/nix/store/cba1x9mxnwr8b36cw41bya7g6d5v1p7d-source/select.nix:312:44: clan-pytest-with-core> E 311| else if selector.type == "str" then clan-pytest-with-core> E 312| recurse selectors (idx + 1) (builtins.getAttr selector.value obj) clan-pytest-with-core> E | ^ clan-pytest-with-core> E 313| else if selector.type == "set" then clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'seq' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:401:18: clan-pytest-with-core> E 400| options = checked options; clan-pytest-with-core> E 401| config = checked (removeAttrs config [ "_module" ]); clan-pytest-with-core> E | ^ clan-pytest-with-core> E 402| _module = checked (config._module); 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:304:9: clan-pytest-with-core> E 303| checkUnmatched = clan-pytest-with-core> E 304| if config._module.check && config._module.freeformType == null && merged.unmatchedDefns != [ ] then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 305| let clan-pytest-with-core> E clan-pytest-with-core> E … in the right operand of the AND (&&) operator clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:304:72: clan-pytest-with-core> E 303| checkUnmatched = clan-pytest-with-core> E 304| if config._module.check && config._module.freeformType == null && merged.unmatchedDefns != [ ] then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 305| let clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'unmatchedDefns' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:940:7: clan-pytest-with-core> E 939| # Transforms unmatchedDefnsByName into a list of definitions clan-pytest-with-core> E 940| unmatchedDefns = clan-pytest-with-core> E | ^ clan-pytest-with-core> E 941| if configs == [ ] then clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'concatLists' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:946:11: clan-pytest-with-core> E 945| else clan-pytest-with-core> E 946| concatLists ( clan-pytest-with-core> E | ^ clan-pytest-with-core> E 947| mapAttrsToList ( clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:948:21: clan-pytest-with-core> E 947| mapAttrsToList ( clan-pytest-with-core> E 948| name: defs: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 949| map ( clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'map' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:949:15: clan-pytest-with-core> E 948| name: defs: clan-pytest-with-core> E 949| map ( clan-pytest-with-core> E | ^ clan-pytest-with-core> E 950| def: clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:932:22: clan-pytest-with-core> E 931| # Propagate all unmatched definitions from nested option sets clan-pytest-with-core> E 932| mapAttrs (n: v: v.unmatchedDefns) resultsByName clan-pytest-with-core> E | ^ clan-pytest-with-core> E 933| # Plus the definitions for the current prefix that don't have a matching option clan-pytest-with-core> E clan-pytest-with-core> E (10 duplicate frames omitted) clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:932:25: clan-pytest-with-core> E 931| # Propagate all unmatched definitions from nested option sets clan-pytest-with-core> E 932| mapAttrs (n: v: v.unmatchedDefns) resultsByName clan-pytest-with-core> E | ^ clan-pytest-with-core> E 933| # Plus the definitions for the current prefix that don't have a matching option clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:876:15: clan-pytest-with-core> E 875| resultsByName = mapAttrs ( clan-pytest-with-core> E 876| name: decls: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 877| # We're descending into attribute ‘name’. 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:888:9: clan-pytest-with-core> E 887| in clan-pytest-with-core> E 888| if length optionDecls == length decls then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 889| let clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'length' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:888:12: clan-pytest-with-core> E 887| in clan-pytest-with-core> E 888| if length optionDecls == length decls then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 889| let clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'filter' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:882:25: clan-pytest-with-core> E 881| defns' = rawDefinitionsByName.${name} or [ ]; clan-pytest-with-core> E 882| optionDecls = filter ( clan-pytest-with-core> E | ^ clan-pytest-with-core> E 883| m: clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:883:13: clan-pytest-with-core> E 882| optionDecls = filter ( clan-pytest-with-core> E 883| m: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 884| m.options ? _type clan-pytest-with-core> E clan-pytest-with-core> E … in the left operand of the AND (&&) operator clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:885:13: clan-pytest-with-core> E 884| m.options ? _type clan-pytest-with-core> E 885| && (m.options._type == "option" || throwDeclarationTypeError loc m.options._type m._file) clan-pytest-with-core> E | ^ clan-pytest-with-core> E 886| ) decls; clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'options' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:807:15: clan-pytest-with-core> E 806| pos = unsafeGetAttrPos n subtree; clan-pytest-with-core> E 807| options = option; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 808| }) subtree clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:289:73: clan-pytest-with-core> E 288| len = length attrPath; clan-pytest-with-core> E 289| atDepth = n: if n == len then value else { ${elemAt attrPath n} = atDepth (n + 1); }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 290| in clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'atDepth' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:289:17: clan-pytest-with-core> E 288| len = length attrPath; clan-pytest-with-core> E 289| atDepth = n: if n == len then value else { ${elemAt attrPath n} = atDepth (n + 1); }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 290| in clan-pytest-with-core> E clan-pytest-with-core> E … in the right operand of the update (//) operator clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:2047:9: clan-pytest-with-core> E 2046| } clan-pytest-with-core> E 2047| // optionalAttrs (toType != null) { clan-pytest-with-core> E | ^ clan-pytest-with-core> E 2048| type = toType; clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:2047:12: clan-pytest-with-core> E 2046| } clan-pytest-with-core> E 2047| // optionalAttrs (toType != null) { clan-pytest-with-core> E | ^ clan-pytest-with-core> E 2048| type = toType; clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'optionalAttrs' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:1492:25: clan-pytest-with-core> E 1491| */ clan-pytest-with-core> E 1492| optionalAttrs = cond: as: if cond then as else { }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1493| 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:1492:29: clan-pytest-with-core> E 1491| */ clan-pytest-with-core> E 1492| optionalAttrs = cond: as: if cond then as else { }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1493| clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:2036:17: clan-pytest-with-core> E 2035| let clan-pytest-with-core> E 2036| opt = attrByPath to { } options; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 2037| in clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'attrByPath' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:89:24: clan-pytest-with-core> E 88| attrByPath = clan-pytest-with-core> E 89| attrPath: default: set: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 90| let clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:106:5: clan-pytest-with-core> E 105| in clan-pytest-with-core> E 106| attrByPath' 0 set; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 107| clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'attrByPath'' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:93:12: clan-pytest-with-core> E 92| attrByPath' = clan-pytest-with-core> E 93| n: s: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 94| ( clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:102:35: clan-pytest-with-core> E 101| in clan-pytest-with-core> E 102| if s ? ${attr} then attrByPath' (n + 1) s.${attr} else default clan-pytest-with-core> E | ^ clan-pytest-with-core> E 103| ) clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'attrByPath'' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:93:12: clan-pytest-with-core> E 92| attrByPath' = clan-pytest-with-core> E 93| n: s: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 94| ( clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:102:35: clan-pytest-with-core> E 101| in clan-pytest-with-core> E 102| if s ? ${attr} then attrByPath' (n + 1) s.${attr} else default clan-pytest-with-core> E | ^ clan-pytest-with-core> E 103| ) clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'attrByPath'' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:93:12: clan-pytest-with-core> E 92| attrByPath' = clan-pytest-with-core> E 93| n: s: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 94| ( clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:102:35: clan-pytest-with-core> E 101| in clan-pytest-with-core> E 102| if s ? ${attr} then attrByPath' (n + 1) s.${attr} else default clan-pytest-with-core> E | ^ clan-pytest-with-core> E 103| ) clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'attrByPath'' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:93:12: clan-pytest-with-core> E 92| attrByPath' = clan-pytest-with-core> E 93| n: s: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 94| ( clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:102:55: clan-pytest-with-core> E 101| in clan-pytest-with-core> E 102| if s ? ${attr} then attrByPath' (n + 1) s.${attr} else default clan-pytest-with-core> E | ^ clan-pytest-with-core> E 103| ) clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:927:37: clan-pytest-with-core> E 926| clan-pytest-with-core> E 927| matchedOptions = mapAttrs (n: v: v.matchedOptions) resultsByName; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 928| clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'matchedOptions' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:893:13: clan-pytest-with-core> E 892| { clan-pytest-with-core> E 893| matchedOptions = evalOptionValue loc opt defns'; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 894| unmatchedDefns = [ ]; clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:893:30: clan-pytest-with-core> E 892| { clan-pytest-with-core> E 893| matchedOptions = evalOptionValue loc opt defns'; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 894| unmatchedDefns = [ ]; clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'evalOptionValue' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1103:15: clan-pytest-with-core> E 1102| evalOptionValue = clan-pytest-with-core> E 1103| loc: opt: defs: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1104| let clan-pytest-with-core> E clan-pytest-with-core> E … in the left operand of the update (//) operator clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1148:5: clan-pytest-with-core> E 1147| warnDeprecation opt clan-pytest-with-core> E 1148| // { clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1149| value = addErrorContext "while evaluating the option `${showOption loc}':" value; 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1141:9: clan-pytest-with-core> E 1140| warnDeprecation = clan-pytest-with-core> E 1141| if (opt.type.deprecationMessage != null) then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1142| warn "The type `types.${opt.type.name}' of option `${showOption loc}' defined in ${showFiles opt.declarations} is deprecated. ${opt.type.deprecationMessage}" clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:890:19: clan-pytest-with-core> E 889| let clan-pytest-with-core> E 890| opt = fixupOptionType loc (mergeOptionDecls loc decls); clan-pytest-with-core> E | ^ clan-pytest-with-core> E 891| in clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'fixupOptionType' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1473:10: clan-pytest-with-core> E 1472| fixupOptionType = clan-pytest-with-core> E 1473| loc: opt: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1474| if opt.type.getSubModules or null == null then 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1474:5: clan-pytest-with-core> E 1473| loc: opt: clan-pytest-with-core> E 1474| if opt.type.getSubModules or null == null then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1475| opt // { type = opt.type or types.unspecified; } clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'type.getSubModules' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/nixos/modules/services/hardware/bluetooth.nix:72:9: clan-pytest-with-core> E 71| settings = mkOption { clan-pytest-with-core> E 72| type = cfgFmt.type; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 73| default = { }; clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/nixos/modules/services/hardware/bluetooth.nix:26:12: clan-pytest-with-core> E 25| clan-pytest-with-core> E 26| cfgFmt = pkgs.formats.ini { }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 27| clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:727:15: clan-pytest-with-core> E 726| extraArgs = mapAttrs ( clan-pytest-with-core> E 727| name: _: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 728| addErrorContext (context name) ( clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the module argument `pkgs' in "/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/nixos/modules/services/hardware/bluetooth.nix": clan-pytest-with-core> E clan-pytest-with-core> E … noting that argument `pkgs` is not externally provided, so querying `_module.args` instead, requiring `config` clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:731:13: clan-pytest-with-core> E 730| "noting that argument `${name}` is not externally provided, so querying `_module.args` instead, requiring `config`" clan-pytest-with-core> E 731| config._module.args.${name} clan-pytest-with-core> E | ^ clan-pytest-with-core> E 732| ) clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/types.nix:1029:18: clan-pytest-with-core> E 1028| value = mapAttrs ( clan-pytest-with-core> E 1029| n: v: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1030| if lazy then clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'optionalValue.value' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1312:5: clan-pytest-with-core> E 1311| clan-pytest-with-core> E 1312| optionalValue = if isDefined then { value = mergedValue; } else { }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1313| }; 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1312:21: clan-pytest-with-core> E 1311| clan-pytest-with-core> E 1312| optionalValue = if isDefined then { value = mergedValue; } else { }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1313| }; clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'values' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1240:11: clan-pytest-with-core> E 1239| { clan-pytest-with-core> E 1240| values = defsSorted; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1241| inherit (defsFiltered) highestPrio; 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1211:11: clan-pytest-with-core> E 1210| # Avoid sorting if we don't have to. clan-pytest-with-core> E 1211| if any (def: def.value._type or "" == "order") defsFiltered.values then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1212| sortProperties defsFiltered.values clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'any' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1211:14: clan-pytest-with-core> E 1210| # Avoid sorting if we don't have to. clan-pytest-with-core> E 1211| if any (def: def.value._type or "" == "order") defsFiltered.values then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1212| sortProperties defsFiltered.values clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1211:19: clan-pytest-with-core> E 1210| # Avoid sorting if we don't have to. clan-pytest-with-core> E 1211| if any (def: def.value._type or "" == "order") defsFiltered.values then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1212| sortProperties defsFiltered.values clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'value._type' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1422:67: clan-pytest-with-core> E 1421| strip = clan-pytest-with-core> E 1422| def: if def.value._type or "" == "override" then def // { value = def.value.content; } else def; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1423| in clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'value.content' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1566:22: clan-pytest-with-core> E 1565| _type = "override"; clan-pytest-with-core> E 1566| inherit priority content; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1567| }; 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/nixos/modules/misc/nixpkgs.nix:107:15: clan-pytest-with-core> E 106| clan-pytest-with-core> E 107| finalPkgs = if opt.pkgs.isDefined then cfg.pkgs.appendOverlays cfg.overlays else defaultPkgs; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 108| clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'pkgs.isDefined' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1154:21: clan-pytest-with-core> E 1153| definitionsWithLocations = res.defsFinal; clan-pytest-with-core> E 1154| inherit (res) isDefined; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1155| inherit (res.checkedAndMerged) valueMeta; clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'isDefined' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1310:5: clan-pytest-with-core> E 1309| clan-pytest-with-core> E 1310| isDefined = defsFinal != [ ]; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1311| clan-pytest-with-core> E clan-pytest-with-core> E (6 duplicate frames omitted) clan-pytest-with-core> E clan-pytest-with-core> E error: attribute 'system' missing clan-pytest-with-core> E at /build/store/nix/store/y3h139bhv4373m1hab367ma4p5i95i2f-source/modules/clan/module.nix:164:24: clan-pytest-with-core> E 163| (lib.modules.importApply ../../nixosModules/machineModules/overridePkgs.nix { clan-pytest-with-core> E 164| pkgs = nixpkgsMatrix.${config.inventory.machines.${name}.nixpkgs}.system.${system}.pkgs; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 165| }) clan-pytest-with-core> E Did you mean systems? 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> temporary_home = PosixPath('/build/pytest-qw1kcofd') clan-pytest-with-core> test_lib_root = PosixPath('/build/src/clan_lib/tests') clan-pytest-with-core> clan_core = PosixPath('/nix/store/x4g1qsn1nq0q56zn8h9c7xaiysv7bsf2-clan-core-flake') clan-pytest-with-core> hosts = [Remote(address='127.0.0.1', command_prefix='local_test', user='nixbld', port=60785, private_key=PosixPath('/build/src...', verbose_ssh=False, ssh_options={}, socks_port=None, socks_wrapper=None, _control_path_dir=None, _askpass_path=None)] clan-pytest-with-core> patch_get_clan_details = .get_clan_details at 0x7fffe64f7ed0> clan-pytest-with-core> clan-pytest-with-core> @pytest.mark.with_core clan-pytest-with-core> @pytest.mark.skipif(sys.platform == "darwin", reason="sshd fails to start on darwin") clan-pytest-with-core> def test_clan_create_api( clan-pytest-with-core> temporary_home: Path, # noqa: ARG001 clan-pytest-with-core> test_lib_root: Path, clan-pytest-with-core> clan_core: Path, clan-pytest-with-core> hosts: list[Remote], clan-pytest-with-core> patch_get_clan_details: Any, # noqa: ARG001 clan-pytest-with-core> ) -> None: clan-pytest-with-core> host_ip = hosts[0].address clan-pytest-with-core> host_user = hosts[0].user clan-pytest-with-core> vm_name = "test-clan" clan-pytest-with-core> clan-pytest-with-core> priv_key_var = hosts[0].private_key clan-pytest-with-core> ssh_port_var = str(hosts[0].port) clan-pytest-with-core> clan-pytest-with-core> assert priv_key_var is not None clan-pytest-with-core> private_key = Path(priv_key_var).expanduser() clan-pytest-with-core> clan-pytest-with-core> assert host_user is not None clan-pytest-with-core> clan-pytest-with-core> assert private_key.exists() clan-pytest-with-core> assert private_key.is_file() clan-pytest-with-core> clan-pytest-with-core> public_key = Path(f"{private_key}.pub") clan-pytest-with-core> assert public_key.exists() clan-pytest-with-core> assert public_key.is_file() clan-pytest-with-core> clan-pytest-with-core> dest_clan_dir = Path("~/default").expanduser() clan-pytest-with-core> clan-pytest-with-core> # ===== CREATE CLAN ====== clan-pytest-with-core> # TODO: We need to generate a lock file for the templates clan-pytest-with-core> clan_cli.clan.create.create_clan( clan-pytest-with-core> clan_cli.clan.create.CreateOptions( clan-pytest-with-core> template="minimal", clan-pytest-with-core> dest=dest_clan_dir, clan-pytest-with-core> update_clan=False, clan-pytest-with-core> ), clan-pytest-with-core> ) clan-pytest-with-core> assert dest_clan_dir.is_dir() clan-pytest-with-core> assert (dest_clan_dir / "flake.nix").is_file() clan-pytest-with-core> clan-pytest-with-core> # TODO: We need a way to generate the lock file for the templates clan-pytest-with-core> fix_flake_inputs(dest_clan_dir, clan_core) clan-pytest-with-core> clan-pytest-with-core> # ===== CREATE SOPS KEY ====== clan-pytest-with-core> sops_keys = maybe_get_admin_public_keys() clan-pytest-with-core> if sops_keys is None: clan-pytest-with-core> # TODO: In the UI we need a view for this clan-pytest-with-core> sops_keys = [generate_key()] clan-pytest-with-core> else: clan-pytest-with-core> msg = "SOPS key already exists, please remove it before running this test" clan-pytest-with-core> raise ClanError(msg) clan-pytest-with-core> clan-pytest-with-core> # TODO: This needs to be exposed in the UI and we need a view for this clan-pytest-with-core> add_user( clan-pytest-with-core> dest_clan_dir, clan-pytest-with-core> name="testuser", clan-pytest-with-core> keys=sops_keys, clan-pytest-with-core> force=False, clan-pytest-with-core> flake_dir=dest_clan_dir, clan-pytest-with-core> ) clan-pytest-with-core> clan-pytest-with-core> # ===== CREATE MACHINE/s ====== clan-pytest-with-core> clan_dir_flake = Flake(str(dest_clan_dir)) clan-pytest-with-core> machines: list[Machine] = [] clan-pytest-with-core> clan-pytest-with-core> host = Remote( clan-pytest-with-core> user=host_user, clan-pytest-with-core> address=host_ip, clan-pytest-with-core> port=int(ssh_port_var), clan-pytest-with-core> command_prefix=vm_name, clan-pytest-with-core> ) clan-pytest-with-core> # TODO: We need to merge Host and Machine class these duplicate targetHost stuff is a nightmare clan-pytest-with-core> inv_machine = MachineInput( clan-pytest-with-core> name=vm_name, clan-pytest-with-core> deploy=MachineDeployInput(targetHost=f"{host.target}:{ssh_port_var}"), clan-pytest-with-core> ) clan-pytest-with-core> create_machine( clan-pytest-with-core> ClanCreateOptions( clan-pytest-with-core> clan_dir_flake, clan-pytest-with-core> inv_machine, clan-pytest-with-core> target_host=f"{host.target}:{ssh_port_var}", clan-pytest-with-core> ), clan-pytest-with-core> ) clan-pytest-with-core> machine = Machine(name=vm_name, flake=clan_dir_flake) clan-pytest-with-core> machines.append(machine) clan-pytest-with-core> assert len(machines) == 1 clan-pytest-with-core> clan-pytest-with-core> # Invalidate cache because of new machine creation clan-pytest-with-core> clan_dir_flake.invalidate_cache() clan-pytest-with-core> clan-pytest-with-core> target_host = machine.target_host().override( clan-pytest-with-core> private_key=private_key, clan-pytest-with-core> host_key_check="none", clan-pytest-with-core> ) clan-pytest-with-core> clan-pytest-with-core> target_host.check_machine_ssh_reachable() clan-pytest-with-core> target_host.check_machine_ssh_login() clan-pytest-with-core> clan-pytest-with-core> ssh_keys = [ clan-pytest-with-core> SSHKeyPair( clan-pytest-with-core> private=private_key, clan-pytest-with-core> public=public_key, clan-pytest-with-core> ), clan-pytest-with-core> ] clan-pytest-with-core> clan-pytest-with-core> # ===== CREATE BASE INVENTORY ====== clan-pytest-with-core> inventory_conf = create_base_inventory(ssh_keys) clan-pytest-with-core> store = InventoryStore(clan_dir_flake) clan-pytest-with-core> inventory = store.read() clan-pytest-with-core> clan-pytest-with-core> service_modules = list_service_modules(clan_dir_flake) clan-pytest-with-core> clan-pytest-with-core> admin_module = next( clan-pytest-with-core> m for m in service_modules.modules if m.usage_ref.get("name") == "admin" clan-pytest-with-core> ) clan-pytest-with-core> assert admin_module.info.manifest.name == "clan-core/admin" clan-pytest-with-core> clan-pytest-with-core> set_value_by_path(inventory, "instances", inventory_conf.instances) clan-pytest-with-core> store.write( clan-pytest-with-core> inventory, clan-pytest-with-core> "base config", clan-pytest-with-core> ) clan-pytest-with-core> clan-pytest-with-core> # Invalidate cache because of new inventory clan-pytest-with-core> clan_dir_flake.invalidate_cache() clan-pytest-with-core> clan-pytest-with-core> > generators = get_generators(machines=[machine], full_closure=True) clan-pytest-with-core> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ clan-pytest-with-core> clan-pytest-with-core> /build/src/clan_lib/tests/test_create.py:224: clan-pytest-with-core> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ clan-pytest-with-core> /build/src/clan_lib/vars/generate.py:146: in get_generators clan-pytest-with-core> flake.precache(get_generators_precache_selectors(list(all_machines))) clan-pytest-with-core> /build/src/clan_lib/flake/flake.py:1151: in precache clan-pytest-with-core> self.get_from_nix(not_fetched_selectors) clan-pytest-with-core> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ clan-pytest-with-core> clan-pytest-with-core> self = Flake(identifier='/build/pytest-qw1kcofd/default', hash='sha256-3yqHIIGpqElyzdFYzZzgTxPvXw4okiG6+Cdt2WR8Y9o=', store_p...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.?secrets.?age.?plugins', 'clanInternals.inventoryClass.relativeDirectory', 'clanInternals.machines.x86...ps.?defaultGroups', 'clanInternals.machines.x86_64-linux.{test-clan}.config.clan.core.vars.settings.publicModule', ...] 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 while executing:$ clan select 'clanInternals.?secrets.?age.?plugins' clan-pytest-with-core> E $ clan select 'clanInternals.inventoryClass.relativeDirectory' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{test-clan}.config.clan.core.vars.generators.*.{share,dependencies,prompts,validationHash}' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{test-clan}.config.clan.core.vars.generators.*.files.*.{secret,deploy,owner,group,mode,neededFor}' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{test-clan}.config.clan.core.?sops.?defaultGroups' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{test-clan}.config.clan.core.vars.settings.publicModule' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{test-clan}.config.clan.core.vars.settings.secretModule' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{test-clan}.config.clan.core.vars.?sops.?secretUploadDirectory' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{test-clan}.config.clan.core.vars.?password-store.?passCommand' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{test-clan}.config.clan.core.vars.?password-store.?secretLocation' clan-pytest-with-core> E $ clan select 'clanInternals.vars.settings.?recipients' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{test-clan}.config.clan.core.vars.?age.?secretLocation' clan-pytest-with-core> E Reason: attribute 'system' missing clan-pytest-with-core> E at /build/store/nix/store/y3h139bhv4373m1hab367ma4p5i95i2f-source/modules/clan/module.nix:164:24: clan-pytest-with-core> E 163| (lib.modules.importApply ../../nixosModules/machineModules/overridePkgs.nix { clan-pytest-with-core> E 164| pkgs = nixpkgsMatrix.${config.inventory.machines.${name}.nixpkgs}.system.${system}.pkgs; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 165| }) clan-pytest-with-core> E Did you mean systems?. 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 setup ----------------------------- clan-pytest-with-core> getpwnam: nixbld -> /build/sshd-08_7lg0_/bin/shell clan-pytest-with-core> getpwnam: nixbld -> /build/sshd-08_7lg0_/bin/shell clan-pytest-with-core> ----------------------------- Captured stderr call ----------------------------- 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."minimal" 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-qw1kcofd/default 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-qw1kcofd/default \ clan-pytest-with-core> init clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:156::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:156::create_clan clan-pytest-with-core> clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-qw1kcofd/default \ clan-pytest-with-core> add \ clan-pytest-with-core> . clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:157::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:157::create_clan clan-pytest-with-core> clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-qw1kcofd/default \ clan-pytest-with-core> config \ clan-pytest-with-core> user.name clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:160::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:160::create_clan clan-pytest-with-core> clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-qw1kcofd/default \ 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:165::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:165::create_clan clan-pytest-with-core> clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-qw1kcofd/default \ clan-pytest-with-core> config \ clan-pytest-with-core> user.email clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:167::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:167::create_clan clan-pytest-with-core> clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-qw1kcofd/default \ 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:172::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:172::create_clan clan-pytest-with-core> clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-qw1kcofd/default \ clan-pytest-with-core> add \ clan-pytest-with-core> . clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:186::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:186::create_clan clan-pytest-with-core> clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-qw1kcofd/default \ clan-pytest-with-core> commit \ clan-pytest-with-core> -m 'Initial commit' clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:187::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:187::create_clan clan-pytest-with-core> clan-pytest-with-core> Prefetching flake /build/pytest-qw1kcofd/default clan-pytest-with-core> warning: you don't have Internet access; disabling some network-dependent features 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> update \ clan-pytest-with-core> --store /build/store clan-pytest-with-core> Caller: /build/src/clan_lib/tests/test_create.py:93::fix_flake_inputs 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/pytest-qw1kcofd/default/flake.lock": clan-pytest-with-core> • Added input 'clan-core': clan-pytest-with-core> 'path:/nix/store/x4g1qsn1nq0q56zn8h9c7xaiysv7bsf2-clan-core-flake?lastModified=1&narHash=sha256-Ynx5u312tlxJbGJCSevw5zZVxrd02FisWE1my%2B%2BFRSw%3D' (1970-01-01) clan-pytest-with-core> • Added input 'clan-core/data-mesher': clan-pytest-with-core> 'path:/nix/store/kdjkigwckgrfz0yg0d9z7kj2xkf084vs-source?lastModified=1&narHash=sha256-Yase/4e4aNN9QvUMqPH9ngbAmlcJCqLmFL0zuURdkuA%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/w2c23ykc12mswlg8hrrjzb5gv9gvkzwq-source?lastModified=1&narHash=sha256-RxWs5ND31KzTG7wvMM%2BPMfUjyNpmIEr999lqNARaM5o%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/lrxvs4l9bqbgjfz7w9bkfg5zqq442jxc-source?lastModified=1&narHash=sha256-4dtXQk/NMePegK/nWp5NSeuZKLATItOq61lpEvmXqGw%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/p17akwn814w226jq2cdkkhcw4psb0ga9-source?lastModified=0&narHash=sha256-tkD1h/1jLJ6qZHjG7/TOZT1qqI1ej3VPPCufHQyv1Uo%3D' (1970-01-01) clan-pytest-with-core> • Added input 'clan-core/sops-nix': clan-pytest-with-core> 'path:/nix/store/s154mmk8ahvc71gq8xfkbzlk240yvniv-source?lastModified=1&narHash=sha256-gkig4nPi1CWc4Z50GBsjE4ygSE7hMpl/TwID2an2Cck%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/9m1jsz5b9ggmjij2vkmafnhn26g96jjn-source?lastModified=1&narHash=sha256-brhZ8DmuGtzkCYHJg4HEd602amKm89Y9ytsFZ5uWD1w%3D' (1970-01-01) clan-pytest-with-core> • Added input 'clan-core/treefmt-nix': clan-pytest-with-core> 'path:/nix/store/7sjy8935654h3220n5gbaclf5nfw4nzx-source?lastModified=1&narHash=sha256-WSFCsDSE5ffgD2MqzkM2CYjeFiKhRF/dJUN8uedb6YE%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: /build/src/clan_lib/tests/test_create.py:93::fix_flake_inputs 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: age18ngkdynu5rylhqew27djsljys5axyp4mnkkzcq5au8keccd8tcaq9ve64h 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-qw1kcofd/.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> git \ clan-pytest-with-core> -C /build/pytest-qw1kcofd/default \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-qw1kcofd/default/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-qw1kcofd/default \ clan-pytest-with-core> diff \ clan-pytest-with-core> --cached --exit-code \ clan-pytest-with-core> -- /build/pytest-qw1kcofd/default/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-qw1kcofd/default \ clan-pytest-with-core> commit \ clan-pytest-with-core> -m 'secrets: add user testuser' \ clan-pytest-with-core> --no-verify /build/pytest-qw1kcofd/default/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> Prefetching flake /build/pytest-qw1kcofd/default 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> Prefetching flake /build/pytest-qw1kcofd/default 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/3e25631a119f765497af938b462cd83fc6482893 clan-pytest-with-core> Cache miss for clanInternals.templates.machine."new-machine" clan-pytest-with-core> Loading flake cache from file /build/clan-flake-cache/flakes-v2/3e25631a119f765497af938b462cd83fc6482893 clan-pytest-with-core> Cache miss for clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> Loading flake cache from file /build/clan-flake-cache/flakes-v2/3e25631a119f765497af938b462cd83fc6482893 clan-pytest-with-core> chmod \ clan-pytest-with-core> -R u+w \ clan-pytest-with-core> /build/pytest-qw1kcofd/default/machines/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> (cached) $ clan select 'clanInternals.inventoryClass.inventorySerialization.{instances,machines,meta}' clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-qw1kcofd/default \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-qw1kcofd/default/machines/test-clan 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 machines/test-clan to git clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-qw1kcofd/default \ clan-pytest-with-core> diff \ clan-pytest-with-core> --cached --exit-code \ clan-pytest-with-core> -- /build/pytest-qw1kcofd/default/machines/test-clan 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-qw1kcofd/default \ clan-pytest-with-core> commit \ clan-pytest-with-core> -m 'machines: add test-clan' \ clan-pytest-with-core> --no-verify /build/pytest-qw1kcofd/default/machines/test-clan 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 machines/test-clan to git clan-pytest-with-core> Prefetching flake /build/pytest-qw1kcofd/default 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> Cache miss for clanInternals.inventoryClass.introspection clan-pytest-with-core> Loading flake cache from file /build/clan-flake-cache/flakes-v2/b384bb0e7719933d2d517aec10c2a300e44a47fc 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-qw1kcofd/default \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-qw1kcofd/default/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-qw1kcofd/default \ clan-pytest-with-core> diff \ clan-pytest-with-core> --cached --exit-code \ clan-pytest-with-core> -- /build/pytest-qw1kcofd/default/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-qw1kcofd/default \ clan-pytest-with-core> commit \ clan-pytest-with-core> -m 'inventory.json: add machine test-clan' \ clan-pytest-with-core> --no-verify /build/pytest-qw1kcofd/default/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> Prefetching flake /build/pytest-qw1kcofd/default clan-pytest-with-core> warning: you don't have Internet access; disabling some network-dependent features clan-pytest-with-core> Prefetching flake /build/pytest-qw1kcofd/default 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> Prefetching flake /build/pytest-qw1kcofd/default 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/4b2333a45640912e92274219cd6612b0b8c42966 clan-pytest-with-core> (cached) $ clan select 'clanInternals.inventoryClass.inventorySerialization.{instances,machines,meta}' clan-pytest-with-core> Using targetHost from inventory for test-clan: nixbld@127.0.0.1:60785 clan-pytest-with-core> Checking SSH reachability for nixbld@127.0.0.1 on port 60785 clan-pytest-with-core> nc \ clan-pytest-with-core> -z -w \ clan-pytest-with-core> 20 \ clan-pytest-with-core> 127.0.0.1 \ clan-pytest-with-core> 60785 clan-pytest-with-core> Caller: /build/src/clan_lib/network/check.py:117::check_machine_ssh_reachable clan-pytest-with-core> clan-pytest-with-core> Connection to 127.0.0.1 60785 port [tcp/*] succeeded! clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/network/check.py:117::check_machine_ssh_reachable clan-pytest-with-core> clan-pytest-with-core> [test-clan] $ true clan-pytest-with-core> [test-clan] ssh \ clan-pytest-with-core> nixbld@127.0.0.1 \ clan-pytest-with-core> -p 60785 \ clan-pytest-with-core> -o StrictHostKeyChecking=no \ clan-pytest-with-core> -o UserKnownHostsFile=/dev/null \ clan-pytest-with-core> -i /build/src/clan_cli/tests/data/ssh_host_ed25519_key \ clan-pytest-with-core> -o ControlMaster=auto \ clan-pytest-with-core> -o ControlPersist=1m \ clan-pytest-with-core> -o ControlPath=/build/clan-sshc0ih61pp/socket \ clan-pytest-with-core> -- bash \ clan-pytest-with-core> -c ''"'"'exec "$@"'"'"'' \ clan-pytest-with-core> -- true clan-pytest-with-core> Caller: /build/src/clan_lib/ssh/remote.py:334::run clan-pytest-with-core> clan-pytest-with-core> [test-clan] Warning: Permanently added '[127.0.0.1]:60785' (ED25519) to the list of known hosts. clan-pytest-with-core> getpwnam: nixbld -> /build/sshd-08_7lg0_/bin/shell clan-pytest-with-core> getpwnam: nixbld -> /build/sshd-08_7lg0_/bin/shell clan-pytest-with-core> [test-clan] + [[ -f /etc/profile ]] clan-pytest-with-core> [test-clan] + export PATH=/build/sshd-08_7lg0_/bin:/nix/store/5lx37y9wdv2bs30y9fxy78yg4x541f4q-age-1.3.1/bin:/nix/store/l7xvdplxx4rjjjcgdnh36vfn2ncs3kqq-age-plugin-1p-0.1.0/bin:/nix/store/gd2dhjapjri528w1h7r4h9n5c020ckd9-age-plugin-fido2-hmac-0.5.0/bin:/nix/store/0n2ppaynrmy47xlqcf6yh9clahx887sk-age-plugin-ledger-0.1.2/bin:/nix/store/z2jibmmclnb5xb4nfi1lyvy9yggwpmh1-age-plugin-sss-0.4.0/bin:/nix/store/zs0nqpa086kvpz0l54na7i3hgypk8n7z-age-plugin-tpm-1.0.1/bin:/nix/store/0ipj48gnniplb0ypycwlpd42ycvywajz-age-plugin-yubikey-0.5.1/bin:/nix/store/wz4xwadg5vjnl88yban6whz8hczq3mxv-avahi-0.8/bin:/nix/store/90nk33c4fkyg4x4dfk5cykqiryf2nlqq-bash-interactive-5.3p15/bin:/nix/store/lqndphylsxqwbwm804n473pb4sqb98sh-bubblewrap-0.11.2/bin:/nix/store/r0s65q0pccsj47l0qykff8aal4hhsfln-dialog-1.3-20260107/bin:/nix/store/f8r2gbn2p20jrcb45gni2x8w80cs0l2h-disko-1.13.0/bin:/nix/store/mb36p3lpy2aw6wpsikh76g4wb38hcgx3-dumbpipe-0.39.0/bin:/nix/store/g34yxdpqdinm5drqffi49qa307rl5csa-e2fsprogs-1.47.4-bin/bin:/nix/store/8wxs6573l730vxkqd6wp58kvxa19csll-git-2.55.0/bin:/nix/store/6mn5l9xg2f3pw0qks2f3jhpgbdkp4a0q-gnupg-2.4.9/bin:/nix/store/dcf058bgy73v0fz2i4y7f3nkqnds8zcl-kbd-2.9.0/bin:/nix/store/7bhapzm8yysfn95778hrlh9gp0rxpvz6-python3.14-mypy-2.1.0/bin:/nix/store/3n4qphl9s728sz8frmpqqrv9b1m87g68-python3-3.14.7/bin:/nix/store/v92byab1kwwdj8gcpjjbn0n342436n2b-libressl-4.3.2-nc/bin:/nix/store/nw907r8schkz2kjnfqsi1n8d128z7zv1-nix-2.31.5/bin:/nix/store/q0y8sa4cgj626d7g2j7pnwfwqnijjny9-attr-2.6.0-bin/bin:/nix/store/3clw748dpsfwzpihfgc3rndfzf3h4gn1-acl-2.4.0-bin/bin:/nix/store/8r0yih41d6pyr4m7a4mhlcx4krwdzbgz-libarchive-3.8.8/bin:/nix/store/d4vvjf2zix40pq13w778cz4hkyna90ii-openssl-3.6.3-bin/bin:/nix/store/n8gclhlmq0afni67gnsyl9nmjzl5vgg1-nixos-anywhere-1.13.0/bin:/nix/store/2gpyjkhxkzhrih3vzzv1vyddx8ac1fan-openssh-10.4p1/bin:/nix/store/fkhy9dkh7blq06vw3l5c6vw1n31n2apz-password-store-1.7.4/bin:/nix/store/zaras0n7msd736zcsamln1fgjazlfi3m-passage-1.7.4a2/bin:/nix/store/l2crp2qfq1f1fw8mbg45rf2qsgrwixc0-qrencode-4.1.1-bin/bin:/nix/store/5zdskjaigxmdzjnsmws8cc9dp6ldf7ax-rsync-3.4.4/bin:/nix/store/v6dj4yfin0gzz84kmzwby5g1hcn9irlw-ShellCheck-0.11.0/bin:/nix/store/h2pahw3bk6l7l8rrkwbcl2pv30r5238v-sops-3.13.3/bin:/nix/store/r1005dhll0k4n5k0ld3x1gzr0yhd1xv9-sshpass-1.10/bin:/nix/store/jh88q9kzjv14msw0kb3kjsrm3qvvg4z3-tor-0.4.9.11/bin:/nix/store/vjzb6g655k28h4fn5pc8zl608zzsi5j4-torsocks-2.5.0/bin:/nix/store/156fzvaz2nsq2hk0fkzn9jwk90bnzyn9-util-linux-2.42.2-bin/bin:/nix/store/2zcxx0sbw4cmsfc6lczkaq7fjhjdhi5y-qtdeclarative-5.15.19-bin/bin:/nix/store/agsj0pz53npd4j1k02j8vkhfwjls19yl-qtwayland-5.15.19-bin/bin:/nix/store/has1pcm7j5pdhd8ppc033mbpzpi45cbb-zbar-0.23.93/bin:/nix/store/3d1c302vw7kc8a5vknhmn34c0pd7zm6m-gcc-wrapper-15.3.0/bin:/nix/store/7sh9061yj9yl20ndc00rqw4d0bd80m1j-gcc-15.3.0/bin:/nix/store/c2fgns4y4c4xjvc6pq024abmxyy4dl28-glibc-2.42-67-bin/bin:/nix/store/97d5ygrvqj55f4nx1x34wfdcc7qn11c0-coreutils-9.11/bin:/nix/store/j5rd8xm5zqgzcb0l19942ms7r96q0hip-binutils-wrapper-2.46/bin:/nix/store/8lkj89binl0xhraqxb8bwmv0q4p3pnlr-binutils-2.46/bin:/nix/store/vb2r4qcfsaiwlazpandq6vkn01k0srl9-python3-3.14.7-env/bin:/nix/store/iyinjjn7gv8c77w9qgicfmz4mc4dwq5j-patchelf-0.15.2/bin:/nix/store/97d5ygrvqj55f4nx1x34wfdcc7qn11c0-coreutils-9.11/bin:/nix/store/ibg16grw5is7i7ilnflc5xmj6fwksqkl-findutils-4.11.0/bin:/nix/store/z4i4dnz72g21r3kh8rvjhmi2mpg60vmp-diffutils-3.12/bin:/nix/store/rxd8p6g4k4s0sx4q1szmzvp9rsmhmfys-gnused-4.10/bin:/nix/store/4dgym2zhac9vy0vrih4gsplh0wpfl13m-gnugrep-3.12/bin:/nix/store/ny5hzk3l36pldfsjkh56ia7y55xr23vd-gawk-5.4.1/bin:/nix/store/1lvpa59092swv6mg5hgb0iz8n84z7ksm-gnutar-1.35/bin:/nix/store/5hfc0j56yc4xynq7m4xzi5c9qd2i156f-gzip-1.14/bin:/nix/store/j327d6d2y2a6bc90556jd4wn8n2zb4cf-bzip2-1.0.8-bin/bin:/nix/store/whkpgw1564fpbicxrk77dyv36ygjn9sx-gnumake-4.4.1/bin:/nix/store/byi2zpy2bgcf3dr6y0l8m50rmjj8z7q1-bash-5.3p15/bin:/nix/store/m9r9szj3pajhrphi775ll57jzggcw52k-patch-2.8/bin:/nix/store/wmigyr20bmik4kjqfzm4isql6q5lw8ih-xz-5.8.3-bin/bin:/nix/store/36cxvi2s369aw85pp7fyzq2dqv459d7c-file-5.48/bin clan-pytest-with-core> [test-clan] + PATH=/build/sshd-08_7lg0_/bin:/nix/store/5lx37y9wdv2bs30y9fxy78yg4x541f4 clan-pytest-with-core> [test-clan] q-age-1.3.1/bin:/nix/store/l7xvdplxx4rjjjcgdnh36vfn2ncs3kqq-age-plugin-1p-0.1.0/bin:/nix/store/gd2dhjapjri528w1h7r4h9n5c020ckd9-age-plugin-fido2-hmac-0.5.0/bin:/nix/store/0n2ppaynrmy47xlqcf6yh9clahx887sk-age-plugin-ledger-0.1.2/bin:/nix/store/z2jibmmclnb5xb4nfi1lyvy9yggwpmh1-age-plugin-sss-0.4.0/bin:/nix/store/zs0nqpa086kvpz0l54na7i3hgypk8n7z-age-plugin-tpm-1.0.1/bin:/nix/store/0ipj48gnniplb0ypycwlpd42ycvywajz-age-plugin-yubikey-0.5.1/bin:/nix/store/wz4xwadg5vjnl88yban6whz8hczq3mxv-avahi-0.8/bin:/nix/store/90nk33c4fkyg4x4dfk5cykqiryf2nlqq-bash-interactive-5.3p15/bin:/nix/store/lqndphylsxqwbwm804n473pb4sqb98sh-bubblewrap-0.11.2/bin:/nix/store/r0s65q0pccsj47l0qykff8aal4hhsfln-dialog-1.3-20260107/bin:/nix/store/f8r2gbn2p20jrcb45gni2x8w80cs0l2h-disko-1.13.0/bin:/nix/store/mb36p3lpy2aw6wpsikh76g4wb38hcgx3-dumbpipe-0.39.0/bin:/nix/store/g34yxdpqdinm5drqffi49qa307rl5csa-e2fsprogs-1.47.4-bin/bin:/nix/store/8wxs6573l730vxkqd6wp58kvxa19csll-git-2.55.0/bin:/nix/store/6mn5l9xg2f3pw0qks2f3jhpgbdkp4a0q-gnupg-2.4.9/bin:/nix/store/dcf058bgy73v0fz2i4y7f3nkqnds8zcl-kbd-2.9.0/bin:/nix/store/7bhapzm8yysfn95778hrlh9gp0rxpvz6-python3.14-mypy-2.1.0/bin:/nix/store/3n4qphl9s728sz8frmpqqrv9b1m87g68-python3-3.14.7/bin:/nix/store/v92byab1kwwdj8gcpjjbn0n342436n2b-libressl-4.3.2-nc/bin:/nix/store/nw907r8schkz2kjnfqsi1n8d128z7zv1-nix-2.31.5/bin:/nix/store/q0y8sa4cgj626d7g2j7pnwfwqnijjny9-attr-2.6.0-bin/bin:/nix/store/3clw748dpsfwzpihfgc3rndfzf3h4gn1-acl-2.4.0-bin/bin:/nix/store/8r0yih41d6pyr4m7a4mhlcx4krwdzbgz-libarchive-3.8.8/bin:/nix/store/d4vvjf2zix40pq13w778cz4hkyna90ii-openssl-3.6.3-bin/bin:/nix/store/n8gclhlmq0afni67gnsyl9nmjzl5vgg1-nixos-anywhere-1.13.0/bin:/nix/store/2gpyjkhxkzhrih3vzzv1vyddx8ac1fan-openssh-10.4p1/bin:/nix/store/fkhy9dkh7blq06vw3l5c6vw1n31n2apz-password-store-1.7.4/bin:/nix/store/zaras0n7msd736zcsamln1fgjazlfi3m-passage-1.7.4a2/bin:/nix/store/l2crp2qfq1f1fw8mbg45rf2qsgrwixc0-qrencode-4.1.1-bin/bin:/nix/store/5zdskjaigxmdzjnsmws8cc9dp6ldf7ax-rsync-3.4.4/bin:/nix/store/v6dj4yfin0gzz84kmzwby5g1hcn9irlw-ShellCheck-0.11.0/bin:/nix/store/h2pahw3bk6l7l8rrkwbcl2pv30r5238v-sops-3.13.3/bin:/nix/store/r1005dhll0k4n5k0ld3x1gzr0yhd1xv9-sshpass-1.10/bin:/nix/store/jh88q9kzjv14msw0kb3kjsrm3qvvg4z3-tor-0.4.9.11/bin:/nix/store/vjzb6g655k28h4fn5pc8zl608zzsi5j4-torsocks-2.5.0/bin:/nix/store/156fzvaz2nsq2hk0fkzn9jwk90bnzyn9-util-linux-2.42.2-bin/bin:/nix/store/2zcxx0sbw4cmsfc6lczkaq7fjhjdhi5y-qtdeclarative-5.15.19-bin/bin:/nix/store/agsj0pz53npd4j1k02j8vkhfwjls19yl-qtwayland-5.15.19-bin/bin:/nix/store/has1pcm7j5pdhd8ppc033mbpzpi45cbb-zbar-0.23.93/bin:/nix/store/3d1c302vw7kc8a5vknhmn34c0pd7zm6m-gcc-wrapper-15.3.0/bin:/nix/store/7sh9061yj9yl20ndc00rqw4d0bd80m1j-gcc-15.3.0/bin:/nix/store/c2fgns4y4c4xjvc6pq024abmxyy4dl28-glibc-2.42-67-bin/bin:/nix/store/97d5ygrvqj55f4nx1x34wfdcc7qn11c0-coreutils-9.11/bin:/nix/store/j5rd8xm5zqgzcb0l19942ms7r96q0hip-binutils-wrapper-2.46/bin:/nix/store/8lkj89binl0xhraqxb8bwmv0q4p3pnlr-binutils-2.46/bin:/nix/store/vb2r4qcfsaiwlazpandq6vkn01k0srl9-python3-3.14.7-env/bin:/nix/store/iyinjjn7gv8c77w9qgicfmz4mc4dwq5j-patchelf-0.15.2/bin:/nix/store/97d5ygrvqj55f4nx1x34wfdcc7qn11c0-coreutils-9.11/bin:/nix/store/ibg16grw5is7i7ilnflc5xmj6fwksqkl-findutils-4.11.0/bin:/nix/store/z4i4dnz72g21r3kh8rvjhmi2mpg60vmp-diffutils-3.12/bin:/nix/store/rxd8p6g4k4s0sx4q1szmzvp9rsmhmfys-gnused-4.10/bin:/nix/store/4dgym2zhac9vy0vrih4gsplh0wpfl13m-gnugrep-3.12/bin:/nix/store/ny5hzk3l36pldfsjkh56ia7y55xr23vd-gawk-5.4.1/bin:/nix/store/1lvpa59092swv6mg5hgb0iz8n84z7ksm-gnutar-1.35/bin:/nix/store/5hfc0j56yc4xynq7m4xzi5c9qd2i156f-gzip-1.14/bin:/nix/store/j327d6d2y2a6bc90556jd4wn8n2zb4cf-bzip2-1.0.8-bin/bin:/nix/store/whkpgw1564fpbicxrk77dyv36ygjn9sx-gnumake-4.4.1/bin:/nix/store/byi2zpy2bgcf3dr6y0l8m50rmjj8z7q1-bash-5.3p15/bin:/nix/store/m9r9szj3pajhrphi775ll57jzggcw52k-patch-2.8/bin:/nix/store/wmigyr20bmik4kjqfzm4isql6q5lw8ih-xz-5.8.3-bin/bin:/nix/store/36cxvi2s369aw85pp7fyzq2dqv459d7c-file-5.48/bin clan-pytest-with-core> [test-clan] + exec /nix/store/90nk33c4fkyg4x4dfk5cykqiryf2nlqq-bash-interactive-5.3p15/bin/bash -l -c 'bash -c '\''exec "$@"'\'' -- true' clan-pytest-with-core> [test-clan] Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/ssh/remote.py:334::run clan-pytest-with-core> clan-pytest-with-core> (cached) $ clan select 'clanInternals.inventoryClass.inventorySerialization.{instances,machines,meta}' clan-pytest-with-core> Cache miss for clanInternals.inventoryClass.modulesPerSource clan-pytest-with-core> Loading flake cache from file /build/clan-flake-cache/flakes-v2/4b2333a45640912e92274219cd6612b0b8c42966 clan-pytest-with-core> Cache miss for clanInternals.inventoryClass.staticModules clan-pytest-with-core> Loading flake cache from file /build/clan-flake-cache/flakes-v2/4b2333a45640912e92274219cd6612b0b8c42966 clan-pytest-with-core> (cached) $ clan select 'clanInternals.inventoryClass.inventorySerialization.{instances,machines,meta}' clan-pytest-with-core> Cache miss for clanInternals.inventoryClass.introspection clan-pytest-with-core> Loading flake cache from file /build/clan-flake-cache/flakes-v2/4b2333a45640912e92274219cd6612b0b8c42966 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-qw1kcofd/default \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-qw1kcofd/default/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-qw1kcofd/default \ clan-pytest-with-core> diff \ clan-pytest-with-core> --cached --exit-code \ clan-pytest-with-core> -- /build/pytest-qw1kcofd/default/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-qw1kcofd/default \ clan-pytest-with-core> commit \ clan-pytest-with-core> -m 'inventory.json: base config' \ clan-pytest-with-core> --no-verify /build/pytest-qw1kcofd/default/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> Prefetching flake /build/pytest-qw1kcofd/default clan-pytest-with-core> warning: you don't have Internet access; disabling some network-dependent features clan-pytest-with-core> Prefetching flake /build/pytest-qw1kcofd/default 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> Precaching selectors: clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.machines clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.instances clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.meta clan-pytest-with-core> - (not cached) clanInternals.?secrets.?age.?plugins clan-pytest-with-core> - (not cached) clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{test-clan}.config.clan.core.vars.generators.*.{share,dependencies,prompts,validationHash} clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{test-clan}.config.clan.core.vars.generators.*.files.*.{secret,deploy,owner,group,mode,neededFor} clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{test-clan}.config.clan.core.?sops.?defaultGroups clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{test-clan}.config.clan.core.vars.settings.publicModule clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{test-clan}.config.clan.core.vars.settings.secretModule clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{test-clan}.config.clan.core.vars.?sops.?secretUploadDirectory clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{test-clan}.config.clan.core.vars.?password-store.?passCommand clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{test-clan}.config.clan.core.vars.?password-store.?secretLocation clan-pytest-with-core> - (not cached) clanInternals.vars.settings.?recipients clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{test-clan}.config.clan.core.vars.?age.?secretLocation clan-pytest-with-core> ------------------------------ Captured log call ------------------------------- 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."minimal" clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:143 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:143 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:143 chmod \ clan-pytest-with-core> -R u+w \ clan-pytest-with-core> /build/pytest-qw1kcofd/default 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:143 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:143 git \ clan-pytest-with-core> -C /build/pytest-qw1kcofd/default \ clan-pytest-with-core> init clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:156::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:143 Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:156::create_clan clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:143 git \ clan-pytest-with-core> -C /build/pytest-qw1kcofd/default \ clan-pytest-with-core> add \ clan-pytest-with-core> . clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:157::create_clan clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:143 Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:157::create_clan clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:143 git \ clan-pytest-with-core> -C /build/pytest-qw1kcofd/default \ clan-pytest-with-core> config \ clan-pytest-with-core> user.name clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:160::create_clan clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:143 Command exited with return code 1 clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:160::create_clan clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:143 git \ clan-pytest-with-core> -C /build/pytest-qw1kcofd/default \ 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:165::create_clan clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:143 Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:165::create_clan clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:143 git \ clan-pytest-with-core> -C /build/pytest-qw1kcofd/default \ clan-pytest-with-core> config \ clan-pytest-with-core> user.email clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:167::create_clan clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:143 Command exited with return code 1 clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:167::create_clan clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:143 git \ clan-pytest-with-core> -C /build/pytest-qw1kcofd/default \ 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:172::create_clan clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:143 Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:172::create_clan clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:143 git \ clan-pytest-with-core> -C /build/pytest-qw1kcofd/default \ clan-pytest-with-core> add \ clan-pytest-with-core> . clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:186::create_clan clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:143 Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:186::create_clan clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:143 git \ clan-pytest-with-core> -C /build/pytest-qw1kcofd/default \ clan-pytest-with-core> commit \ clan-pytest-with-core> -m 'Initial commit' clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:187::create_clan clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:143 Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/clan/create.py:187::create_clan clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:927 Prefetching flake /build/pytest-qw1kcofd/default 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:143 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> update \ clan-pytest-with-core> --store /build/store clan-pytest-with-core> Caller: /build/src/clan_lib/tests/test_create.py:93::fix_flake_inputs 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/pytest-qw1kcofd/default/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/x4g1qsn1nq0q56zn8h9c7xaiysv7bsf2-clan-core-flake?lastModified=1&narHash=sha256-Ynx5u312tlxJbGJCSevw5zZVxrd02FisWE1my%2B%2BFRSw%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/kdjkigwckgrfz0yg0d9z7kj2xkf084vs-source?lastModified=1&narHash=sha256-Yase/4e4aNN9QvUMqPH9ngbAmlcJCqLmFL0zuURdkuA%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/w2c23ykc12mswlg8hrrjzb5gv9gvkzwq-source?lastModified=1&narHash=sha256-RxWs5ND31KzTG7wvMM%2BPMfUjyNpmIEr999lqNARaM5o%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/lrxvs4l9bqbgjfz7w9bkfg5zqq442jxc-source?lastModified=1&narHash=sha256-4dtXQk/NMePegK/nWp5NSeuZKLATItOq61lpEvmXqGw%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/p17akwn814w226jq2cdkkhcw4psb0ga9-source?lastModified=0&narHash=sha256-tkD1h/1jLJ6qZHjG7/TOZT1qqI1ej3VPPCufHQyv1Uo%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/s154mmk8ahvc71gq8xfkbzlk240yvniv-source?lastModified=1&narHash=sha256-gkig4nPi1CWc4Z50GBsjE4ygSE7hMpl/TwID2an2Cck%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/9m1jsz5b9ggmjij2vkmafnhn26g96jjn-source?lastModified=1&narHash=sha256-brhZ8DmuGtzkCYHJg4HEd602amKm89Y9ytsFZ5uWD1w%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/7sjy8935654h3220n5gbaclf5nfw4nzx-source?lastModified=1&narHash=sha256-WSFCsDSE5ffgD2MqzkM2CYjeFiKhRF/dJUN8uedb6YE%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:143 Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/tests/test_create.py:93::fix_flake_inputs clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:143 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: age18ngkdynu5rylhqew27djsljys5axyp4mnkkzcq5au8keccd8tcaq9ve64h clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:143 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-qw1kcofd/.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:143 git \ clan-pytest-with-core> -C /build/pytest-qw1kcofd/default \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-qw1kcofd/default/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> DEBUG clan_lib.cmd:__init__.py:143 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> DEBUG clan_lib.git:__init__.py:98 Adding sops/users/testuser to git clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:143 git \ clan-pytest-with-core> -C /build/pytest-qw1kcofd/default \ clan-pytest-with-core> diff \ clan-pytest-with-core> --cached --exit-code \ clan-pytest-with-core> -- /build/pytest-qw1kcofd/default/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> DEBUG clan_lib.cmd:__init__.py:143 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> DEBUG clan_lib.cmd:__init__.py:143 git \ clan-pytest-with-core> -C /build/pytest-qw1kcofd/default \ clan-pytest-with-core> commit \ clan-pytest-with-core> -m 'secrets: add user testuser' \ clan-pytest-with-core> --no-verify /build/pytest-qw1kcofd/default/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> DEBUG clan_lib.cmd:__init__.py:143 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> INFO clan_lib.git:__init__.py:141 Committed sops/users/testuser to git clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:927 Prefetching flake /build/pytest-qw1kcofd/default 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.inventoryClass.inventorySerialization.{instances,machines,meta} clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:927 Prefetching flake /build/pytest-qw1kcofd/default 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/3e25631a119f765497af938b462cd83fc6482893 clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1174 Cache miss for clanInternals.templates.machine."new-machine" clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:789 Loading flake cache from file /build/clan-flake-cache/flakes-v2/3e25631a119f765497af938b462cd83fc6482893 clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1174 Cache miss for clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:789 Loading flake cache from file /build/clan-flake-cache/flakes-v2/3e25631a119f765497af938b462cd83fc6482893 clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:143 chmod \ clan-pytest-with-core> -R u+w \ clan-pytest-with-core> /build/pytest-qw1kcofd/default/machines/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:143 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.flake.flake:flake.py:1179 (cached) $ clan select 'clanInternals.inventoryClass.inventorySerialization.{instances,machines,meta}' clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:143 git \ clan-pytest-with-core> -C /build/pytest-qw1kcofd/default \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-qw1kcofd/default/machines/test-clan 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> DEBUG clan_lib.cmd:__init__.py:143 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> DEBUG clan_lib.git:__init__.py:98 Adding machines/test-clan to git clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:143 git \ clan-pytest-with-core> -C /build/pytest-qw1kcofd/default \ clan-pytest-with-core> diff \ clan-pytest-with-core> --cached --exit-code \ clan-pytest-with-core> -- /build/pytest-qw1kcofd/default/machines/test-clan 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> DEBUG clan_lib.cmd:__init__.py:143 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> DEBUG clan_lib.cmd:__init__.py:143 git \ clan-pytest-with-core> -C /build/pytest-qw1kcofd/default \ clan-pytest-with-core> commit \ clan-pytest-with-core> -m 'machines: add test-clan' \ clan-pytest-with-core> --no-verify /build/pytest-qw1kcofd/default/machines/test-clan 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> DEBUG clan_lib.cmd:__init__.py:143 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> INFO clan_lib.git:__init__.py:141 Committed machines/test-clan to git clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:927 Prefetching flake /build/pytest-qw1kcofd/default 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.inventoryClass.inventorySerialization.{instances,machines,meta} clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1174 Cache miss for clanInternals.inventoryClass.introspection clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:789 Loading flake cache from file /build/clan-flake-cache/flakes-v2/b384bb0e7719933d2d517aec10c2a300e44a47fc clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1179 (cached) $ clan select 'clanInternals.inventoryClass.inventorySerialization.{instances,machines,meta}' clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:143 git \ clan-pytest-with-core> -C /build/pytest-qw1kcofd/default \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-qw1kcofd/default/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> DEBUG clan_lib.cmd:__init__.py:143 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> DEBUG clan_lib.git:__init__.py:98 Adding inventory.json to git clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:143 git \ clan-pytest-with-core> -C /build/pytest-qw1kcofd/default \ clan-pytest-with-core> diff \ clan-pytest-with-core> --cached --exit-code \ clan-pytest-with-core> -- /build/pytest-qw1kcofd/default/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> DEBUG clan_lib.cmd:__init__.py:143 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> DEBUG clan_lib.cmd:__init__.py:143 git \ clan-pytest-with-core> -C /build/pytest-qw1kcofd/default \ clan-pytest-with-core> commit \ clan-pytest-with-core> -m 'inventory.json: add machine test-clan' \ clan-pytest-with-core> --no-verify /build/pytest-qw1kcofd/default/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> DEBUG clan_lib.cmd:__init__.py:143 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> INFO clan_lib.git:__init__.py:141 Committed inventory.json to git clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:927 Prefetching flake /build/pytest-qw1kcofd/default 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-qw1kcofd/default 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.inventoryClass.inventorySerialization.{instances,machines,meta} clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:927 Prefetching flake /build/pytest-qw1kcofd/default 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/4b2333a45640912e92274219cd6612b0b8c42966 clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1179 (cached) $ clan select 'clanInternals.inventoryClass.inventorySerialization.{instances,machines,meta}' clan-pytest-with-core> DEBUG clan_lib.network.network:network.py:228 Using targetHost from inventory for test-clan: nixbld@127.0.0.1:60785 clan-pytest-with-core> DEBUG clan_lib.network.check:check.py:87 Checking SSH reachability for nixbld@127.0.0.1 on port 60785 clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:143 nc \ clan-pytest-with-core> -z -w \ clan-pytest-with-core> 20 \ clan-pytest-with-core> 127.0.0.1 \ clan-pytest-with-core> 60785 clan-pytest-with-core> Caller: /build/src/clan_lib/network/check.py:117::check_machine_ssh_reachable clan-pytest-with-core> clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 Connection to 127.0.0.1 60785 port [tcp/*] succeeded! clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:143 Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/network/check.py:117::check_machine_ssh_reachable clan-pytest-with-core> clan-pytest-with-core> INFO clan_lib.ssh.remote:remote.py:304 $ true clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:143 ssh \ clan-pytest-with-core> nixbld@127.0.0.1 \ clan-pytest-with-core> -p 60785 \ clan-pytest-with-core> -o StrictHostKeyChecking=no \ clan-pytest-with-core> -o UserKnownHostsFile=/dev/null \ clan-pytest-with-core> -i /build/src/clan_cli/tests/data/ssh_host_ed25519_key \ clan-pytest-with-core> -o ControlMaster=auto \ clan-pytest-with-core> -o ControlPersist=1m \ clan-pytest-with-core> -o ControlPath=/build/clan-sshc0ih61pp/socket \ clan-pytest-with-core> -- bash \ clan-pytest-with-core> -c ''"'"'exec "$@"'"'"'' \ clan-pytest-with-core> -- true clan-pytest-with-core> Caller: /build/src/clan_lib/ssh/remote.py:334::run clan-pytest-with-core> clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 Warning: Permanently added '[127.0.0.1]:60785' (ED25519) to the list of known hosts. clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 + [[ -f /etc/profile ]] clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 + export PATH=/build/sshd-08_7lg0_/bin:/nix/store/5lx37y9wdv2bs30y9fxy78yg4x541f4q-age-1.3.1/bin:/nix/store/l7xvdplxx4rjjjcgdnh36vfn2ncs3kqq-age-plugin-1p-0.1.0/bin:/nix/store/gd2dhjapjri528w1h7r4h9n5c020ckd9-age-plugin-fido2-hmac-0.5.0/bin:/nix/store/0n2ppaynrmy47xlqcf6yh9clahx887sk-age-plugin-ledger-0.1.2/bin:/nix/store/z2jibmmclnb5xb4nfi1lyvy9yggwpmh1-age-plugin-sss-0.4.0/bin:/nix/store/zs0nqpa086kvpz0l54na7i3hgypk8n7z-age-plugin-tpm-1.0.1/bin:/nix/store/0ipj48gnniplb0ypycwlpd42ycvywajz-age-plugin-yubikey-0.5.1/bin:/nix/store/wz4xwadg5vjnl88yban6whz8hczq3mxv-avahi-0.8/bin:/nix/store/90nk33c4fkyg4x4dfk5cykqiryf2nlqq-bash-interactive-5.3p15/bin:/nix/store/lqndphylsxqwbwm804n473pb4sqb98sh-bubblewrap-0.11.2/bin:/nix/store/r0s65q0pccsj47l0qykff8aal4hhsfln-dialog-1.3-20260107/bin:/nix/store/f8r2gbn2p20jrcb45gni2x8w80cs0l2h-disko-1.13.0/bin:/nix/store/mb36p3lpy2aw6wpsikh76g4wb38hcgx3-dumbpipe-0.39.0/bin:/nix/store/g34yxdpqdinm5drqffi49qa307rl5csa-e2fsprogs-1.47.4-bin/bin:/nix/store/8wxs6573l730vxkqd6wp58kvxa19csll-git-2.55.0/bin:/nix/store/6mn5l9xg2f3pw0qks2f3jhpgbdkp4a0q-gnupg-2.4.9/bin:/nix/store/dcf058bgy73v0fz2i4y7f3nkqnds8zcl-kbd-2.9.0/bin:/nix/store/7bhapzm8yysfn95778hrlh9gp0rxpvz6-python3.14-mypy-2.1.0/bin:/nix/store/3n4qphl9s728sz8frmpqqrv9b1m87g68-python3-3.14.7/bin:/nix/store/v92byab1kwwdj8gcpjjbn0n342436n2b-libressl-4.3.2-nc/bin:/nix/store/nw907r8schkz2kjnfqsi1n8d128z7zv1-nix-2.31.5/bin:/nix/store/q0y8sa4cgj626d7g2j7pnwfwqnijjny9-attr-2.6.0-bin/bin:/nix/store/3clw748dpsfwzpihfgc3rndfzf3h4gn1-acl-2.4.0-bin/bin:/nix/store/8r0yih41d6pyr4m7a4mhlcx4krwdzbgz-libarchive-3.8.8/bin:/nix/store/d4vvjf2zix40pq13w778cz4hkyna90ii-openssl-3.6.3-bin/bin:/nix/store/n8gclhlmq0afni67gnsyl9nmjzl5vgg1-nixos-anywhere-1.13.0/bin:/nix/store/2gpyjkhxkzhrih3vzzv1vyddx8ac1fan-openssh-10.4p1/bin:/nix/store/fkhy9dkh7blq06vw3l5c6vw1n31n2apz-password-store-1.7.4/bin:/nix/store/zaras0n7msd736zcsamln1fgjazlfi3m-passage-1.7.4a2/bin:/nix/store/l2crp2qfq1f1fw8mbg45rf2qsgrwixc0-qrencode-4.1.1-bin/bin:/nix/store/5zdskjaigxmdzjnsmws8cc9dp6ldf7ax-rsync-3.4.4/bin:/nix/store/v6dj4yfin0gzz84kmzwby5g1hcn9irlw-ShellCheck-0.11.0/bin:/nix/store/h2pahw3bk6l7l8rrkwbcl2pv30r5238v-sops-3.13.3/bin:/nix/store/r1005dhll0k4n5k0ld3x1gzr0yhd1xv9-sshpass-1.10/bin:/nix/store/jh88q9kzjv14msw0kb3kjsrm3qvvg4z3-tor-0.4.9.11/bin:/nix/store/vjzb6g655k28h4fn5pc8zl608zzsi5j4-torsocks-2.5.0/bin:/nix/store/156fzvaz2nsq2hk0fkzn9jwk90bnzyn9-util-linux-2.42.2-bin/bin:/nix/store/2zcxx0sbw4cmsfc6lczkaq7fjhjdhi5y-qtdeclarative-5.15.19-bin/bin:/nix/store/agsj0pz53npd4j1k02j8vkhfwjls19yl-qtwayland-5.15.19-bin/bin:/nix/store/has1pcm7j5pdhd8ppc033mbpzpi45cbb-zbar-0.23.93/bin:/nix/store/3d1c302vw7kc8a5vknhmn34c0pd7zm6m-gcc-wrapper-15.3.0/bin:/nix/store/7sh9061yj9yl20ndc00rqw4d0bd80m1j-gcc-15.3.0/bin:/nix/store/c2fgns4y4c4xjvc6pq024abmxyy4dl28-glibc-2.42-67-bin/bin:/nix/store/97d5ygrvqj55f4nx1x34wfdcc7qn11c0-coreutils-9.11/bin:/nix/store/j5rd8xm5zqgzcb0l19942ms7r96q0hip-binutils-wrapper-2.46/bin:/nix/store/8lkj89binl0xhraqxb8bwmv0q4p3pnlr-binutils-2.46/bin:/nix/store/vb2r4qcfsaiwlazpandq6vkn01k0srl9-python3-3.14.7-env/bin:/nix/store/iyinjjn7gv8c77w9qgicfmz4mc4dwq5j-patchelf-0.15.2/bin:/nix/store/97d5ygrvqj55f4nx1x34wfdcc7qn11c0-coreutils-9.11/bin:/nix/store/ibg16grw5is7i7ilnflc5xmj6fwksqkl-findutils-4.11.0/bin:/nix/store/z4i4dnz72g21r3kh8rvjhmi2mpg60vmp-diffutils-3.12/bin:/nix/store/rxd8p6g4k4s0sx4q1szmzvp9rsmhmfys-gnused-4.10/bin:/nix/store/4dgym2zhac9vy0vrih4gsplh0wpfl13m-gnugrep-3.12/bin:/nix/store/ny5hzk3l36pldfsjkh56ia7y55xr23vd-gawk-5.4.1/bin:/nix/store/1lvpa59092swv6mg5hgb0iz8n84z7ksm-gnutar-1.35/bin:/nix/store/5hfc0j56yc4xynq7m4xzi5c9qd2i156f-gzip-1.14/bin:/nix/store/j327d6d2y2a6bc90556jd4wn8n2zb4cf-bzip2-1.0.8-bin/bin:/nix/store/whkpgw1564fpbicxrk77dyv36ygjn9sx-gnumake-4.4.1/bin:/nix/store/byi2zpy2bgcf3dr6y0l8m50rmjj8z7q1-bash-5.3p15/bin:/nix/store/m9r9szj3pajhrphi775ll57jzggcw52k-patch-2.8/bin:/nix/store/wmigyr20bmik4kjqfzm4isql6q5lw8ih-xz-5.8.3-bin/bin:/nix/store/36cxvi2s369aw85pp7fyzq2dqv459d7c-file-5.48/bin clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 + PATH=/build/sshd-08_7lg0_/bin:/nix/store/5lx37y9wdv2bs30y9fxy78yg4x541f4 clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 q-age-1.3.1/bin:/nix/store/l7xvdplxx4rjjjcgdnh36vfn2ncs3kqq-age-plugin-1p-0.1.0/bin:/nix/store/gd2dhjapjri528w1h7r4h9n5c020ckd9-age-plugin-fido2-hmac-0.5.0/bin:/nix/store/0n2ppaynrmy47xlqcf6yh9clahx887sk-age-plugin-ledger-0.1.2/bin:/nix/store/z2jibmmclnb5xb4nfi1lyvy9yggwpmh1-age-plugin-sss-0.4.0/bin:/nix/store/zs0nqpa086kvpz0l54na7i3hgypk8n7z-age-plugin-tpm-1.0.1/bin:/nix/store/0ipj48gnniplb0ypycwlpd42ycvywajz-age-plugin-yubikey-0.5.1/bin:/nix/store/wz4xwadg5vjnl88yban6whz8hczq3mxv-avahi-0.8/bin:/nix/store/90nk33c4fkyg4x4dfk5cykqiryf2nlqq-bash-interactive-5.3p15/bin:/nix/store/lqndphylsxqwbwm804n473pb4sqb98sh-bubblewrap-0.11.2/bin:/nix/store/r0s65q0pccsj47l0qykff8aal4hhsfln-dialog-1.3-20260107/bin:/nix/store/f8r2gbn2p20jrcb45gni2x8w80cs0l2h-disko-1.13.0/bin:/nix/store/mb36p3lpy2aw6wpsikh76g4wb38hcgx3-dumbpipe-0.39.0/bin:/nix/store/g34yxdpqdinm5drqffi49qa307rl5csa-e2fsprogs-1.47.4-bin/bin:/nix/store/8wxs6573l730vxkqd6wp58kvxa19csll-git-2.55.0/bin:/nix/store/6mn5l9xg2f3pw0qks2f3jhpgbdkp4a0q-gnupg-2.4.9/bin:/nix/store/dcf058bgy73v0fz2i4y7f3nkqnds8zcl-kbd-2.9.0/bin:/nix/store/7bhapzm8yysfn95778hrlh9gp0rxpvz6-python3.14-mypy-2.1.0/bin:/nix/store/3n4qphl9s728sz8frmpqqrv9b1m87g68-python3-3.14.7/bin:/nix/store/v92byab1kwwdj8gcpjjbn0n342436n2b-libressl-4.3.2-nc/bin:/nix/store/nw907r8schkz2kjnfqsi1n8d128z7zv1-nix-2.31.5/bin:/nix/store/q0y8sa4cgj626d7g2j7pnwfwqnijjny9-attr-2.6.0-bin/bin:/nix/store/3clw748dpsfwzpihfgc3rndfzf3h4gn1-acl-2.4.0-bin/bin:/nix/store/8r0yih41d6pyr4m7a4mhlcx4krwdzbgz-libarchive-3.8.8/bin:/nix/store/d4vvjf2zix40pq13w778cz4hkyna90ii-openssl-3.6.3-bin/bin:/nix/store/n8gclhlmq0afni67gnsyl9nmjzl5vgg1-nixos-anywhere-1.13.0/bin:/nix/store/2gpyjkhxkzhrih3vzzv1vyddx8ac1fan-openssh-10.4p1/bin:/nix/store/fkhy9dkh7blq06vw3l5c6vw1n31n2apz-password-store-1.7.4/bin:/nix/store/zaras0n7msd736zcsamln1fgjazlfi3m-passage-1.7.4a2/bin:/nix/store/l2crp2qfq1f1fw8mbg45rf2qsgrwixc0-qrencode-4.1.1-bin/bin:/nix/store/5zdskjaigxmdzjnsmws8cc9dp6ldf7ax-rsync-3.4.4/bin:/nix/store/v6dj4yfin0gzz84kmzwby5g1hcn9irlw-ShellCheck-0.11.0/bin:/nix/store/h2pahw3bk6l7l8rrkwbcl2pv30r5238v-sops-3.13.3/bin:/nix/store/r1005dhll0k4n5k0ld3x1gzr0yhd1xv9-sshpass-1.10/bin:/nix/store/jh88q9kzjv14msw0kb3kjsrm3qvvg4z3-tor-0.4.9.11/bin:/nix/store/vjzb6g655k28h4fn5pc8zl608zzsi5j4-torsocks-2.5.0/bin:/nix/store/156fzvaz2nsq2hk0fkzn9jwk90bnzyn9-util-linux-2.42.2-bin/bin:/nix/store/2zcxx0sbw4cmsfc6lczkaq7fjhjdhi5y-qtdeclarative-5.15.19-bin/bin:/nix/store/agsj0pz53npd4j1k02j8vkhfwjls19yl-qtwayland-5.15.19-bin/bin:/nix/store/has1pcm7j5pdhd8ppc033mbpzpi45cbb-zbar-0.23.93/bin:/nix/store/3d1c302vw7kc8a5vknhmn34c0pd7zm6m-gcc-wrapper-15.3.0/bin:/nix/store/7sh9061yj9yl20ndc00rqw4d0bd80m1j-gcc-15.3.0/bin:/nix/store/c2fgns4y4c4xjvc6pq024abmxyy4dl28-glibc-2.42-67-bin/bin:/nix/store/97d5ygrvqj55f4nx1x34wfdcc7qn11c0-coreutils-9.11/bin:/nix/store/j5rd8xm5zqgzcb0l19942ms7r96q0hip-binutils-wrapper-2.46/bin:/nix/store/8lkj89binl0xhraqxb8bwmv0q4p3pnlr-binutils-2.46/bin:/nix/store/vb2r4qcfsaiwlazpandq6vkn01k0srl9-python3-3.14.7-env/bin:/nix/store/iyinjjn7gv8c77w9qgicfmz4mc4dwq5j-patchelf-0.15.2/bin:/nix/store/97d5ygrvqj55f4nx1x34wfdcc7qn11c0-coreutils-9.11/bin:/nix/store/ibg16grw5is7i7ilnflc5xmj6fwksqkl-findutils-4.11.0/bin:/nix/store/z4i4dnz72g21r3kh8rvjhmi2mpg60vmp-diffutils-3.12/bin:/nix/store/rxd8p6g4k4s0sx4q1szmzvp9rsmhmfys-gnused-4.10/bin:/nix/store/4dgym2zhac9vy0vrih4gsplh0wpfl13m-gnugrep-3.12/bin:/nix/store/ny5hzk3l36pldfsjkh56ia7y55xr23vd-gawk-5.4.1/bin:/nix/store/1lvpa59092swv6mg5hgb0iz8n84z7ksm-gnutar-1.35/bin:/nix/store/5hfc0j56yc4xynq7m4xzi5c9qd2i156f-gzip-1.14/bin:/nix/store/j327d6d2y2a6bc90556jd4wn8n2zb4cf-bzip2-1.0.8-bin/bin:/nix/store/whkpgw1564fpbicxrk77dyv36ygjn9sx-gnumake-4.4.1/bin:/nix/store/byi2zpy2bgcf3dr6y0l8m50rmjj8z7q1-bash-5.3p15/bin:/nix/store/m9r9szj3pajhrphi775ll57jzggcw52k-patch-2.8/bin:/nix/store/wmigyr20bmik4kjqfzm4isql6q5lw8ih-xz-5.8.3-bin/bin:/nix/store/36cxvi2s369aw85pp7fyzq2dqv459d7c-file-5.48/bin clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 + exec /nix/store/90nk33c4fkyg4x4dfk5cykqiryf2nlqq-bash-interactive-5.3p15/bin/bash -l -c 'bash -c '\''exec "$@"'\'' -- true' clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:143 Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_lib/ssh/remote.py:334::run clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1179 (cached) $ clan select 'clanInternals.inventoryClass.inventorySerialization.{instances,machines,meta}' clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1174 Cache miss for clanInternals.inventoryClass.modulesPerSource clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:789 Loading flake cache from file /build/clan-flake-cache/flakes-v2/4b2333a45640912e92274219cd6612b0b8c42966 clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1174 Cache miss for clanInternals.inventoryClass.staticModules clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:789 Loading flake cache from file /build/clan-flake-cache/flakes-v2/4b2333a45640912e92274219cd6612b0b8c42966 clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1179 (cached) $ clan select 'clanInternals.inventoryClass.inventorySerialization.{instances,machines,meta}' clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1174 Cache miss for clanInternals.inventoryClass.introspection clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:789 Loading flake cache from file /build/clan-flake-cache/flakes-v2/4b2333a45640912e92274219cd6612b0b8c42966 clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1179 (cached) $ clan select 'clanInternals.inventoryClass.inventorySerialization.{instances,machines,meta}' clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:143 git \ clan-pytest-with-core> -C /build/pytest-qw1kcofd/default \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-qw1kcofd/default/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> DEBUG clan_lib.cmd:__init__.py:143 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> DEBUG clan_lib.git:__init__.py:98 Adding inventory.json to git clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:143 git \ clan-pytest-with-core> -C /build/pytest-qw1kcofd/default \ clan-pytest-with-core> diff \ clan-pytest-with-core> --cached --exit-code \ clan-pytest-with-core> -- /build/pytest-qw1kcofd/default/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> DEBUG clan_lib.cmd:__init__.py:143 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> DEBUG clan_lib.cmd:__init__.py:143 git \ clan-pytest-with-core> -C /build/pytest-qw1kcofd/default \ clan-pytest-with-core> commit \ clan-pytest-with-core> -m 'inventory.json: base config' \ clan-pytest-with-core> --no-verify /build/pytest-qw1kcofd/default/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> DEBUG clan_lib.cmd:__init__.py:143 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> INFO clan_lib.git:__init__.py:141 Committed inventory.json to git clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:927 Prefetching flake /build/pytest-qw1kcofd/default 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-qw1kcofd/default 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.inventoryClass.inventorySerialization.{instances,machines,meta} clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1144 Precaching selectors: clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.machines clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.instances clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.meta clan-pytest-with-core> - (not cached) clanInternals.?secrets.?age.?plugins clan-pytest-with-core> - (not cached) clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{test-clan}.config.clan.core.vars.generators.*.{share,dependencies,prompts,validationHash} clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{test-clan}.config.clan.core.vars.generators.*.files.*.{secret,deploy,owner,group,mode,neededFor} clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{test-clan}.config.clan.core.?sops.?defaultGroups clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{test-clan}.config.clan.core.vars.settings.publicModule clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{test-clan}.config.clan.core.vars.settings.secretModule clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{test-clan}.config.clan.core.vars.?sops.?secretUploadDirectory clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{test-clan}.config.clan.core.vars.?password-store.?passCommand clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{test-clan}.config.clan.core.vars.?password-store.?secretLocation clan-pytest-with-core> - (not cached) clanInternals.vars.settings.?recipients clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{test-clan}.config.clan.core.vars.?age.?secretLocation clan-pytest-with-core> ________________ test_vars_generate_age_with_directory_setting _________________ clan-pytest-with-core> [gw10] linux -- Python 3.14.7 /nix/store/3n4qphl9s728sz8frmpqqrv9b1m87g68-python3-3.14.7/bin/python clan-pytest-with-core> clan-pytest-with-core> self = Flake(identifier='/build/pytest-of-nixbld/pytest-0/popen-gw10/test_vars_generate_age_with_di0/my-clan', hash='sha256-t...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.?secrets.?age.?plugins', 'clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.gener...ngs.publicModule', 'clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.settings.secretModule', ...] 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> 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/src'), log=, prefix=None, m...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/105hlxpdmf9cin1pnlmaxrhxamww2rw3-source?narHash=sha256-tK3kJU5uqwDELf4eX6cP+3oQjsfCKeLr45pnf1R/Sm0="; 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": "maybe", "value": "secrets"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "plugins"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "share"}, {"type": "str", "value": "dependencies"}, {"type": "str", "value": "prompts"}, {"type": "str", "value": "validationHash"}]}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "str", "value": "files"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "secret"}, {"type": "str", "value": "deploy"}, {"type": "str", "value": "owner"}, {"type": "str", "value": "group"}, {"type": "str", "value": "mode"}, {"type": "str", "value": "neededFor"}]}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "defaultGroups"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "publicModule"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "secretModule"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "secretUploadDirectory"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "passCommand"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "secretLocation"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "maybe", "value": "recipients"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "secretLocation"}]'"'"''"'"') 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": "maybe", "value": "secrets"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "plugins"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "share"}, {"type": "str", "value": "dependencies"}, {"type": "str", "value": "prompts"}, {"type": "str", "value": "validationHash"}]}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "str", "value": "files"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "secret"}, {"type": "str", "value": "deploy"}, {"type": "str", "value": "owner"}, {"type": "str", "value": "group"}, {"type": "str", "value": "mode"}, {"type": "str", "value": "neededFor"}]}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "defaultGroups"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "publicModule"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "secretModule"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "secretUploadDirectory"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "passCommand"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "secretLocation"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "maybe", "value": "recipients"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "secretLocation"}]'') 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": "maybe", "value": "secrets"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "plugins"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "share"}, {"type": "str", "value": "dependencies"}, {"type": "str", "value": "prompts"}, {"type": "str", "value": "validationHash"}]}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "str", "value": "files"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "secret"}, {"type": "str", "value": "deploy"}, {"type": "str", "value": "owner"}, {"type": "str", "value": "group"}, {"type": "str", "value": "mode"}, {"type": "str", "value": "neededFor"}]}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "defaultGroups"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "publicModule"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "secretModule"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "secretUploadDirectory"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "passCommand"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "secretLocation"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "maybe", "value": "recipients"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "secretLocation"}]'') flake) clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating list element at index 1 clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating attribute 'my_machine' clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/cba1x9mxnwr8b36cw41bya7g6d5v1p7d-source/select.nix:325:37: clan-pytest-with-core> E 324| in clan-pytest-with-core> E 325| builtins.mapAttrs (_: v: recurse selectors (idx + 1) v) filteredAttrs clan-pytest-with-core> E | ^ clan-pytest-with-core> E 326| else if selector.type == "maybe" then 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:325:40: clan-pytest-with-core> E 324| in clan-pytest-with-core> E 325| builtins.mapAttrs (_: v: recurse selectors (idx + 1) v) filteredAttrs clan-pytest-with-core> E | ^ clan-pytest-with-core> E 326| else if selector.type == "maybe" then 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 … from call site clan-pytest-with-core> E at /build/store/nix/store/cba1x9mxnwr8b36cw41bya7g6d5v1p7d-source/select.nix:312:15: clan-pytest-with-core> E 311| else if selector.type == "str" then clan-pytest-with-core> E 312| recurse selectors (idx + 1) (builtins.getAttr selector.value obj) clan-pytest-with-core> E | ^ clan-pytest-with-core> E 313| else if selector.type == "set" then 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 'getAttr' builtin clan-pytest-with-core> E at /build/store/nix/store/cba1x9mxnwr8b36cw41bya7g6d5v1p7d-source/select.nix:312:44: clan-pytest-with-core> E 311| else if selector.type == "str" then clan-pytest-with-core> E 312| recurse selectors (idx + 1) (builtins.getAttr selector.value obj) clan-pytest-with-core> E | ^ clan-pytest-with-core> E 313| else if selector.type == "set" then clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'seq' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:401:18: clan-pytest-with-core> E 400| options = checked options; clan-pytest-with-core> E 401| config = checked (removeAttrs config [ "_module" ]); clan-pytest-with-core> E | ^ clan-pytest-with-core> E 402| _module = checked (config._module); 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:304:9: clan-pytest-with-core> E 303| checkUnmatched = clan-pytest-with-core> E 304| if config._module.check && config._module.freeformType == null && merged.unmatchedDefns != [ ] then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 305| let clan-pytest-with-core> E clan-pytest-with-core> E … in the right operand of the AND (&&) operator clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:304:72: clan-pytest-with-core> E 303| checkUnmatched = clan-pytest-with-core> E 304| if config._module.check && config._module.freeformType == null && merged.unmatchedDefns != [ ] then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 305| let clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'unmatchedDefns' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:940:7: clan-pytest-with-core> E 939| # Transforms unmatchedDefnsByName into a list of definitions clan-pytest-with-core> E 940| unmatchedDefns = clan-pytest-with-core> E | ^ clan-pytest-with-core> E 941| if configs == [ ] then clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'concatLists' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:946:11: clan-pytest-with-core> E 945| else clan-pytest-with-core> E 946| concatLists ( clan-pytest-with-core> E | ^ clan-pytest-with-core> E 947| mapAttrsToList ( clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:948:21: clan-pytest-with-core> E 947| mapAttrsToList ( clan-pytest-with-core> E 948| name: defs: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 949| map ( clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'map' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:949:15: clan-pytest-with-core> E 948| name: defs: clan-pytest-with-core> E 949| map ( clan-pytest-with-core> E | ^ clan-pytest-with-core> E 950| def: clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:932:22: clan-pytest-with-core> E 931| # Propagate all unmatched definitions from nested option sets clan-pytest-with-core> E 932| mapAttrs (n: v: v.unmatchedDefns) resultsByName clan-pytest-with-core> E | ^ clan-pytest-with-core> E 933| # Plus the definitions for the current prefix that don't have a matching option clan-pytest-with-core> E clan-pytest-with-core> E (10 duplicate frames omitted) clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:932:25: clan-pytest-with-core> E 931| # Propagate all unmatched definitions from nested option sets clan-pytest-with-core> E 932| mapAttrs (n: v: v.unmatchedDefns) resultsByName clan-pytest-with-core> E | ^ clan-pytest-with-core> E 933| # Plus the definitions for the current prefix that don't have a matching option clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:876:15: clan-pytest-with-core> E 875| resultsByName = mapAttrs ( clan-pytest-with-core> E 876| name: decls: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 877| # We're descending into attribute ‘name’. 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:888:9: clan-pytest-with-core> E 887| in clan-pytest-with-core> E 888| if length optionDecls == length decls then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 889| let clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'length' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:888:12: clan-pytest-with-core> E 887| in clan-pytest-with-core> E 888| if length optionDecls == length decls then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 889| let clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'filter' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:882:25: clan-pytest-with-core> E 881| defns' = rawDefinitionsByName.${name} or [ ]; clan-pytest-with-core> E 882| optionDecls = filter ( clan-pytest-with-core> E | ^ clan-pytest-with-core> E 883| m: clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:883:13: clan-pytest-with-core> E 882| optionDecls = filter ( clan-pytest-with-core> E 883| m: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 884| m.options ? _type clan-pytest-with-core> E clan-pytest-with-core> E … in the left operand of the AND (&&) operator clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:885:13: clan-pytest-with-core> E 884| m.options ? _type clan-pytest-with-core> E 885| && (m.options._type == "option" || throwDeclarationTypeError loc m.options._type m._file) clan-pytest-with-core> E | ^ clan-pytest-with-core> E 886| ) decls; clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'options' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:807:15: clan-pytest-with-core> E 806| pos = unsafeGetAttrPos n subtree; clan-pytest-with-core> E 807| options = option; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 808| }) subtree clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:289:73: clan-pytest-with-core> E 288| len = length attrPath; clan-pytest-with-core> E 289| atDepth = n: if n == len then value else { ${elemAt attrPath n} = atDepth (n + 1); }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 290| in clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'atDepth' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:289:17: clan-pytest-with-core> E 288| len = length attrPath; clan-pytest-with-core> E 289| atDepth = n: if n == len then value else { ${elemAt attrPath n} = atDepth (n + 1); }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 290| in clan-pytest-with-core> E clan-pytest-with-core> E … in the right operand of the update (//) operator clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:2047:9: clan-pytest-with-core> E 2046| } clan-pytest-with-core> E 2047| // optionalAttrs (toType != null) { clan-pytest-with-core> E | ^ clan-pytest-with-core> E 2048| type = toType; clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:2047:12: clan-pytest-with-core> E 2046| } clan-pytest-with-core> E 2047| // optionalAttrs (toType != null) { clan-pytest-with-core> E | ^ clan-pytest-with-core> E 2048| type = toType; clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'optionalAttrs' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:1492:25: clan-pytest-with-core> E 1491| */ clan-pytest-with-core> E 1492| optionalAttrs = cond: as: if cond then as else { }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1493| 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:1492:29: clan-pytest-with-core> E 1491| */ clan-pytest-with-core> E 1492| optionalAttrs = cond: as: if cond then as else { }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1493| clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:2036:17: clan-pytest-with-core> E 2035| let clan-pytest-with-core> E 2036| opt = attrByPath to { } options; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 2037| in clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'attrByPath' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:89:24: clan-pytest-with-core> E 88| attrByPath = clan-pytest-with-core> E 89| attrPath: default: set: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 90| let clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:106:5: clan-pytest-with-core> E 105| in clan-pytest-with-core> E 106| attrByPath' 0 set; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 107| clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'attrByPath'' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:93:12: clan-pytest-with-core> E 92| attrByPath' = clan-pytest-with-core> E 93| n: s: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 94| ( clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:102:35: clan-pytest-with-core> E 101| in clan-pytest-with-core> E 102| if s ? ${attr} then attrByPath' (n + 1) s.${attr} else default clan-pytest-with-core> E | ^ clan-pytest-with-core> E 103| ) clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'attrByPath'' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:93:12: clan-pytest-with-core> E 92| attrByPath' = clan-pytest-with-core> E 93| n: s: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 94| ( clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:102:35: clan-pytest-with-core> E 101| in clan-pytest-with-core> E 102| if s ? ${attr} then attrByPath' (n + 1) s.${attr} else default clan-pytest-with-core> E | ^ clan-pytest-with-core> E 103| ) clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'attrByPath'' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:93:12: clan-pytest-with-core> E 92| attrByPath' = clan-pytest-with-core> E 93| n: s: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 94| ( clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:102:35: clan-pytest-with-core> E 101| in clan-pytest-with-core> E 102| if s ? ${attr} then attrByPath' (n + 1) s.${attr} else default clan-pytest-with-core> E | ^ clan-pytest-with-core> E 103| ) clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'attrByPath'' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:93:12: clan-pytest-with-core> E 92| attrByPath' = clan-pytest-with-core> E 93| n: s: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 94| ( clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:102:55: clan-pytest-with-core> E 101| in clan-pytest-with-core> E 102| if s ? ${attr} then attrByPath' (n + 1) s.${attr} else default clan-pytest-with-core> E | ^ clan-pytest-with-core> E 103| ) clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:927:37: clan-pytest-with-core> E 926| clan-pytest-with-core> E 927| matchedOptions = mapAttrs (n: v: v.matchedOptions) resultsByName; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 928| clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'matchedOptions' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:893:13: clan-pytest-with-core> E 892| { clan-pytest-with-core> E 893| matchedOptions = evalOptionValue loc opt defns'; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 894| unmatchedDefns = [ ]; clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:893:30: clan-pytest-with-core> E 892| { clan-pytest-with-core> E 893| matchedOptions = evalOptionValue loc opt defns'; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 894| unmatchedDefns = [ ]; clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'evalOptionValue' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1103:15: clan-pytest-with-core> E 1102| evalOptionValue = clan-pytest-with-core> E 1103| loc: opt: defs: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1104| let clan-pytest-with-core> E clan-pytest-with-core> E … in the left operand of the update (//) operator clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1148:5: clan-pytest-with-core> E 1147| warnDeprecation opt clan-pytest-with-core> E 1148| // { clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1149| value = addErrorContext "while evaluating the option `${showOption loc}':" value; 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1141:9: clan-pytest-with-core> E 1140| warnDeprecation = clan-pytest-with-core> E 1141| if (opt.type.deprecationMessage != null) then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1142| warn "The type `types.${opt.type.name}' of option `${showOption loc}' defined in ${showFiles opt.declarations} is deprecated. ${opt.type.deprecationMessage}" clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:890:19: clan-pytest-with-core> E 889| let clan-pytest-with-core> E 890| opt = fixupOptionType loc (mergeOptionDecls loc decls); clan-pytest-with-core> E | ^ clan-pytest-with-core> E 891| in clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'fixupOptionType' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1473:10: clan-pytest-with-core> E 1472| fixupOptionType = clan-pytest-with-core> E 1473| loc: opt: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1474| if opt.type.getSubModules or null == null then 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1474:5: clan-pytest-with-core> E 1473| loc: opt: clan-pytest-with-core> E 1474| if opt.type.getSubModules or null == null then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1475| opt // { type = opt.type or types.unspecified; } clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'type.getSubModules' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/nixos/modules/services/hardware/bluetooth.nix:72:9: clan-pytest-with-core> E 71| settings = mkOption { clan-pytest-with-core> E 72| type = cfgFmt.type; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 73| default = { }; clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/nixos/modules/services/hardware/bluetooth.nix:26:12: clan-pytest-with-core> E 25| clan-pytest-with-core> E 26| cfgFmt = pkgs.formats.ini { }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 27| clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:727:15: clan-pytest-with-core> E 726| extraArgs = mapAttrs ( clan-pytest-with-core> E 727| name: _: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 728| addErrorContext (context name) ( clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the module argument `pkgs' in "/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/nixos/modules/services/hardware/bluetooth.nix": clan-pytest-with-core> E clan-pytest-with-core> E … noting that argument `pkgs` is not externally provided, so querying `_module.args` instead, requiring `config` clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:731:13: clan-pytest-with-core> E 730| "noting that argument `${name}` is not externally provided, so querying `_module.args` instead, requiring `config`" clan-pytest-with-core> E 731| config._module.args.${name} clan-pytest-with-core> E | ^ clan-pytest-with-core> E 732| ) clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/types.nix:1029:18: clan-pytest-with-core> E 1028| value = mapAttrs ( clan-pytest-with-core> E 1029| n: v: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1030| if lazy then clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'optionalValue.value' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1312:5: clan-pytest-with-core> E 1311| clan-pytest-with-core> E 1312| optionalValue = if isDefined then { value = mergedValue; } else { }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1313| }; 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1312:21: clan-pytest-with-core> E 1311| clan-pytest-with-core> E 1312| optionalValue = if isDefined then { value = mergedValue; } else { }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1313| }; clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'values' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1240:11: clan-pytest-with-core> E 1239| { clan-pytest-with-core> E 1240| values = defsSorted; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1241| inherit (defsFiltered) highestPrio; 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1211:11: clan-pytest-with-core> E 1210| # Avoid sorting if we don't have to. clan-pytest-with-core> E 1211| if any (def: def.value._type or "" == "order") defsFiltered.values then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1212| sortProperties defsFiltered.values clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'any' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1211:14: clan-pytest-with-core> E 1210| # Avoid sorting if we don't have to. clan-pytest-with-core> E 1211| if any (def: def.value._type or "" == "order") defsFiltered.values then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1212| sortProperties defsFiltered.values clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1211:19: clan-pytest-with-core> E 1210| # Avoid sorting if we don't have to. clan-pytest-with-core> E 1211| if any (def: def.value._type or "" == "order") defsFiltered.values then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1212| sortProperties defsFiltered.values clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'value._type' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1422:67: clan-pytest-with-core> E 1421| strip = clan-pytest-with-core> E 1422| def: if def.value._type or "" == "override" then def // { value = def.value.content; } else def; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1423| in clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'value.content' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1566:22: clan-pytest-with-core> E 1565| _type = "override"; clan-pytest-with-core> E 1566| inherit priority content; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1567| }; 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/nixos/modules/misc/nixpkgs.nix:107:15: clan-pytest-with-core> E 106| clan-pytest-with-core> E 107| finalPkgs = if opt.pkgs.isDefined then cfg.pkgs.appendOverlays cfg.overlays else defaultPkgs; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 108| clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'pkgs.isDefined' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1154:21: clan-pytest-with-core> E 1153| definitionsWithLocations = res.defsFinal; clan-pytest-with-core> E 1154| inherit (res) isDefined; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1155| inherit (res.checkedAndMerged) valueMeta; clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'isDefined' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1310:5: clan-pytest-with-core> E 1309| clan-pytest-with-core> E 1310| isDefined = defsFinal != [ ]; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1311| clan-pytest-with-core> E clan-pytest-with-core> E (6 duplicate frames omitted) clan-pytest-with-core> E clan-pytest-with-core> E error: attribute 'system' missing clan-pytest-with-core> E at /build/store/nix/store/y3h139bhv4373m1hab367ma4p5i95i2f-source/modules/clan/module.nix:164:24: clan-pytest-with-core> E 163| (lib.modules.importApply ../../nixosModules/machineModules/overridePkgs.nix { clan-pytest-with-core> E 164| pkgs = nixpkgsMatrix.${config.inventory.machines.${name}.nixpkgs}.system.${system}.pkgs; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 165| }) clan-pytest-with-core> E Did you mean systems? clan-pytest-with-core> E clan-pytest-with-core> E Return Code: 1 clan-pytest-with-core> clan-pytest-with-core> 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> clan_flake = .factory at 0x7fffe622a1f0> clan-pytest-with-core> age_keys = [KeyPair(pubkey='age1dhwqzkah943xzc34tc3dlmfayyevcmdmxzjezdgdy33euxwf59vsp3vk3c', privkey='AGE-SECRET-KEY-1KF8E3SR3TTG...z7jca7s00wyeg2nt3aqnvaks7p4jfr', privkey='AGE-SECRET-KEY-1Z89SHU9KAF709TTAZDARUWKC7H9TPZW4L8A2PVYSYAF7QVLCNQZQZ07U5J')] clan-pytest-with-core> monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7fffe661c350> 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_vars_generate_age_with_directory_setting( clan-pytest-with-core> clan_flake: Callable[..., Flake], clan-pytest-with-core> age_keys: list[KeyPair], clan-pytest-with-core> monkeypatch: pytest.MonkeyPatch, clan-pytest-with-core> ) -> None: clan-pytest-with-core> """Test that vars generate with the age backend creates files in the custom directory.""" clan-pytest-with-core> # Set up clan.nix with age recipients clan-pytest-with-core> raw = CLAN_NIX_WITH_DIRECTORY_AND_AGE_MACHINE.rstrip().rstrip("}") clan-pytest-with-core> raw += f'\n vars.settings.recipients.hosts.my_machine = ["{age_keys[0].pubkey}"];\n}}\n' clan-pytest-with-core> clan-pytest-with-core> flake = clan_flake(raw=raw) clan-pytest-with-core> clan_dir = flake.path / "clan" clan-pytest-with-core> clan_dir.mkdir(exist_ok=True) clan-pytest-with-core> # The clan/ directory must contain at least one tracked file so git clan-pytest-with-core> # includes it and Nix can see it in the store. clan-pytest-with-core> (clan_dir / ".gitkeep").touch() clan-pytest-with-core> clan-pytest-with-core> # Set up age identity for decryption clan-pytest-with-core> monkeypatch.setenv("AGE_KEY", age_keys[0].privkey) clan-pytest-with-core> clan-pytest-with-core> init_git(flake.path) clan-pytest-with-core> clan-pytest-with-core> > cli.run(["vars", "generate", "--flake", str(flake.path), "my_machine"]) clan-pytest-with-core> clan-pytest-with-core> clan_lib/api/directory_settings_test.py:469: clan-pytest-with-core> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ clan-pytest-with-core> clan_cli/tests/helpers/cli.py:22: in run clan-pytest-with-core> parsed.func(parsed) clan-pytest-with-core> clan_cli/vars/generate.py:33: in generate_command clan-pytest-with-core> run_generators( clan-pytest-with-core> clan_lib/vars/generate.py:306: in run_generators clan-pytest-with-core> all_generators = get_generators(machines, full_closure=True) clan-pytest-with-core> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ clan-pytest-with-core> clan_lib/vars/generate.py:146: in get_generators clan-pytest-with-core> flake.precache(get_generators_precache_selectors(list(all_machines))) clan-pytest-with-core> clan_lib/flake/flake.py:1151: in precache clan-pytest-with-core> self.get_from_nix(not_fetched_selectors) clan-pytest-with-core> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ clan-pytest-with-core> clan-pytest-with-core> self = Flake(identifier='/build/pytest-of-nixbld/pytest-0/popen-gw10/test_vars_generate_age_with_di0/my-clan', hash='sha256-t...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.?secrets.?age.?plugins', 'clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.gener...ngs.publicModule', 'clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.settings.secretModule', ...] 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 while executing:$ clan select 'clanInternals.?secrets.?age.?plugins' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.generators.*.{share,dependencies,prompts,validationHash}' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.generators.*.files.*.{secret,deploy,owner,group,mode,neededFor}' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.?sops.?defaultGroups' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.settings.publicModule' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.settings.secretModule' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.?sops.?secretUploadDirectory' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.?password-store.?passCommand' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.?password-store.?secretLocation' clan-pytest-with-core> E $ clan select 'clanInternals.vars.settings.?recipients' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.?age.?secretLocation' clan-pytest-with-core> E Reason: attribute 'system' missing clan-pytest-with-core> E at /build/store/nix/store/y3h139bhv4373m1hab367ma4p5i95i2f-source/modules/clan/module.nix:164:24: clan-pytest-with-core> E 163| (lib.modules.importApply ../../nixosModules/machineModules/overridePkgs.nix { clan-pytest-with-core> E 164| pkgs = nixpkgsMatrix.${config.inventory.machines.${name}.nixpkgs}.system.${system}.pkgs; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 165| }) clan-pytest-with-core> E Did you mean systems?. Use flag '--debug' to see full nix trace. clan-pytest-with-core> clan-pytest-with-core> clan_lib/flake/flake.py:1094: ClanSelectError clan-pytest-with-core> ----------------------------- Captured stdout call ----------------------------- clan-pytest-with-core> Reinitialized existing Git repository in /build/pytest-of-nixbld/pytest-0/popen-gw10/test_vars_generate_age_with_di0/my-clan/.git/ clan-pytest-with-core> [master 511f0f5] Initial commit clan-pytest-with-core> 2 files changed, 21 insertions(+), 1 deletion(-) clan-pytest-with-core> create mode 100644 clan/.gitkeep clan-pytest-with-core> ----------------------------- Captured stderr call ----------------------------- clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-of-nixbld/pytest-0/popen-gw10/test_vars_generate_age_with_di0/my-clan \ clan-pytest-with-core> init clan-pytest-with-core> Caller: ~/src/clan_lib/clan/create.py:156::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: ~/src/clan_lib/clan/create.py:156::create_clan clan-pytest-with-core> clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-of-nixbld/pytest-0/popen-gw10/test_vars_generate_age_with_di0/my-clan \ clan-pytest-with-core> add \ clan-pytest-with-core> . clan-pytest-with-core> Caller: ~/src/clan_lib/clan/create.py:157::create_clan clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: ~/src/clan_lib/clan/create.py:157::create_clan clan-pytest-with-core> clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-of-nixbld/pytest-0/popen-gw10/test_vars_generate_age_with_di0/my-clan \ clan-pytest-with-core> config \ clan-pytest-with-core> user.name clan-pytest-with-core> Caller: ~/src/clan_lib/clan/create.py:160::create_clan clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 1 clan-pytest-with-core> Caller: ~/src/clan_lib/clan/create.py:160::create_clan clan-pytest-with-core> clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-of-nixbld/pytest-0/popen-gw10/test_vars_generate_age_with_di0/my-clan \ clan-pytest-with-core> config \ clan-pytest-with-core> user.name \ clan-pytest-with-core> clan-tool clan-pytest-with-core> Caller: ~/src/clan_lib/clan/create.py:165::create_clan clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: ~/src/clan_lib/clan/create.py:165::create_clan clan-pytest-with-core> clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-of-nixbld/pytest-0/popen-gw10/test_vars_generate_age_with_di0/my-clan \ clan-pytest-with-core> config \ clan-pytest-with-core> user.email clan-pytest-with-core> Caller: ~/src/clan_lib/clan/create.py:167::create_clan clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 1 clan-pytest-with-core> Caller: ~/src/clan_lib/clan/create.py:167::create_clan clan-pytest-with-core> clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-of-nixbld/pytest-0/popen-gw10/test_vars_generate_age_with_di0/my-clan \ clan-pytest-with-core> config \ clan-pytest-with-core> user.email \ clan-pytest-with-core> clan@example.com clan-pytest-with-core> Caller: ~/src/clan_lib/clan/create.py:172::create_clan clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: ~/src/clan_lib/clan/create.py:172::create_clan clan-pytest-with-core> clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-of-nixbld/pytest-0/popen-gw10/test_vars_generate_age_with_di0/my-clan \ clan-pytest-with-core> add \ clan-pytest-with-core> . clan-pytest-with-core> Caller: ~/src/clan_lib/clan/create.py:186::create_clan clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: ~/src/clan_lib/clan/create.py:186::create_clan clan-pytest-with-core> clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-of-nixbld/pytest-0/popen-gw10/test_vars_generate_age_with_di0/my-clan \ clan-pytest-with-core> commit \ clan-pytest-with-core> -m 'Initial commit' clan-pytest-with-core> Caller: ~/src/clan_lib/clan/create.py:187::create_clan clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: ~/src/clan_lib/clan/create.py:187::create_clan clan-pytest-with-core> clan-pytest-with-core> Prefetching flake /build/pytest-of-nixbld/pytest-0/popen-gw10/test_vars_generate_age_with_di0/my-clan 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/c034a164aa1321b113259b8b85694bd30a06e4b6 clan-pytest-with-core> (cached) $ clan select 'clanInternals.inventoryClass.inventorySerialization.{instances,machines,meta}' clan-pytest-with-core> Prefetching flake /build/pytest-of-nixbld/pytest-0/popen-gw10/test_vars_generate_age_with_di0/my-clan clan-pytest-with-core> warning: you don't have Internet access; disabling some network-dependent features clan-pytest-with-core> warning: re-init: ignored --initial-branch=main clan-pytest-with-core> [localhost] $ clan vars generate --flake /build/pytest-of-nixbld/pytest-0/popen-gw10/test_vars_generate_age_with_di0/my-clan my_machine clan-pytest-with-core> Caller: ~/src/clan_lib/api/directory_settings_test.py:469::test_vars_generate_age_with_directory_setting clan-pytest-with-core> clan-pytest-with-core> Prefetching flake /build/pytest-of-nixbld/pytest-0/popen-gw10/test_vars_generate_age_with_di0/my-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.cliChecks clan-pytest-with-core> Cache miss for clanInternals.inventoryClass.inventorySerialization.{instances,machines,meta} clan-pytest-with-core> Loading flake cache from file /build/clan-flake-cache/flakes-v2/39307dc08e5e15da46dffb1663e5284b9691a6bf clan-pytest-with-core> Cache miss for clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> Loading flake cache from file /build/clan-flake-cache/flakes-v2/39307dc08e5e15da46dffb1663e5284b9691a6bf clan-pytest-with-core> (cached) $ clan select 'clanInternals.inventoryClass.inventorySerialization.{instances,machines,meta}' clan-pytest-with-core> Precaching selectors: clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.machines clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.instances clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.meta clan-pytest-with-core> - (not cached) clanInternals.?secrets.?age.?plugins clan-pytest-with-core> - (cached) clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.generators.*.{share,dependencies,prompts,validationHash} clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.generators.*.files.*.{secret,deploy,owner,group,mode,neededFor} clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.?sops.?defaultGroups clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.settings.publicModule clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.settings.secretModule clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.?sops.?secretUploadDirectory clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.?password-store.?passCommand clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.?password-store.?secretLocation clan-pytest-with-core> - (not cached) clanInternals.vars.settings.?recipients clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.?age.?secretLocation clan-pytest-with-core> ------------------------------ Captured log call ------------------------------- clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:143 git \ clan-pytest-with-core> -C /build/pytest-of-nixbld/pytest-0/popen-gw10/test_vars_generate_age_with_di0/my-clan \ clan-pytest-with-core> init clan-pytest-with-core> Caller: ~/src/clan_lib/clan/create.py:156::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:143 Command exited with return code 0 clan-pytest-with-core> Caller: ~/src/clan_lib/clan/create.py:156::create_clan clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:143 git \ clan-pytest-with-core> -C /build/pytest-of-nixbld/pytest-0/popen-gw10/test_vars_generate_age_with_di0/my-clan \ clan-pytest-with-core> add \ clan-pytest-with-core> . clan-pytest-with-core> Caller: ~/src/clan_lib/clan/create.py:157::create_clan clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:143 Command exited with return code 0 clan-pytest-with-core> Caller: ~/src/clan_lib/clan/create.py:157::create_clan clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:143 git \ clan-pytest-with-core> -C /build/pytest-of-nixbld/pytest-0/popen-gw10/test_vars_generate_age_with_di0/my-clan \ clan-pytest-with-core> config \ clan-pytest-with-core> user.name clan-pytest-with-core> Caller: ~/src/clan_lib/clan/create.py:160::create_clan clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:143 Command exited with return code 1 clan-pytest-with-core> Caller: ~/src/clan_lib/clan/create.py:160::create_clan clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:143 git \ clan-pytest-with-core> -C /build/pytest-of-nixbld/pytest-0/popen-gw10/test_vars_generate_age_with_di0/my-clan \ clan-pytest-with-core> config \ clan-pytest-with-core> user.name \ clan-pytest-with-core> clan-tool clan-pytest-with-core> Caller: ~/src/clan_lib/clan/create.py:165::create_clan clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:143 Command exited with return code 0 clan-pytest-with-core> Caller: ~/src/clan_lib/clan/create.py:165::create_clan clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:143 git \ clan-pytest-with-core> -C /build/pytest-of-nixbld/pytest-0/popen-gw10/test_vars_generate_age_with_di0/my-clan \ clan-pytest-with-core> config \ clan-pytest-with-core> user.email clan-pytest-with-core> Caller: ~/src/clan_lib/clan/create.py:167::create_clan clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:143 Command exited with return code 1 clan-pytest-with-core> Caller: ~/src/clan_lib/clan/create.py:167::create_clan clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:143 git \ clan-pytest-with-core> -C /build/pytest-of-nixbld/pytest-0/popen-gw10/test_vars_generate_age_with_di0/my-clan \ clan-pytest-with-core> config \ clan-pytest-with-core> user.email \ clan-pytest-with-core> clan@example.com clan-pytest-with-core> Caller: ~/src/clan_lib/clan/create.py:172::create_clan clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:143 Command exited with return code 0 clan-pytest-with-core> Caller: ~/src/clan_lib/clan/create.py:172::create_clan clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:143 git \ clan-pytest-with-core> -C /build/pytest-of-nixbld/pytest-0/popen-gw10/test_vars_generate_age_with_di0/my-clan \ clan-pytest-with-core> add \ clan-pytest-with-core> . clan-pytest-with-core> Caller: ~/src/clan_lib/clan/create.py:186::create_clan clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:143 Command exited with return code 0 clan-pytest-with-core> Caller: ~/src/clan_lib/clan/create.py:186::create_clan clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:143 git \ clan-pytest-with-core> -C /build/pytest-of-nixbld/pytest-0/popen-gw10/test_vars_generate_age_with_di0/my-clan \ clan-pytest-with-core> commit \ clan-pytest-with-core> -m 'Initial commit' clan-pytest-with-core> Caller: ~/src/clan_lib/clan/create.py:187::create_clan clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:143 Command exited with return code 0 clan-pytest-with-core> Caller: ~/src/clan_lib/clan/create.py:187::create_clan clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:927 Prefetching flake /build/pytest-of-nixbld/pytest-0/popen-gw10/test_vars_generate_age_with_di0/my-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:789 Loading flake cache from file /build/clan-flake-cache/flakes-v2/c034a164aa1321b113259b8b85694bd30a06e4b6 clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1179 (cached) $ clan select 'clanInternals.inventoryClass.inventorySerialization.{instances,machines,meta}' clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:927 Prefetching flake /build/pytest-of-nixbld/pytest-0/popen-gw10/test_vars_generate_age_with_di0/my-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_cli.tests.helpers.cli:__init__.py:143 $ clan vars generate --flake /build/pytest-of-nixbld/pytest-0/popen-gw10/test_vars_generate_age_with_di0/my-clan my_machine clan-pytest-with-core> Caller: ~/src/clan_lib/api/directory_settings_test.py:469::test_vars_generate_age_with_directory_setting clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:927 Prefetching flake /build/pytest-of-nixbld/pytest-0/popen-gw10/test_vars_generate_age_with_di0/my-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.cliChecks clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1174 Cache miss for clanInternals.inventoryClass.inventorySerialization.{instances,machines,meta} clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:789 Loading flake cache from file /build/clan-flake-cache/flakes-v2/39307dc08e5e15da46dffb1663e5284b9691a6bf clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1174 Cache miss for clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:789 Loading flake cache from file /build/clan-flake-cache/flakes-v2/39307dc08e5e15da46dffb1663e5284b9691a6bf clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1179 (cached) $ clan select 'clanInternals.inventoryClass.inventorySerialization.{instances,machines,meta}' clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1144 Precaching selectors: clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.machines clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.instances clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.meta clan-pytest-with-core> - (not cached) clanInternals.?secrets.?age.?plugins clan-pytest-with-core> - (cached) clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.generators.*.{share,dependencies,prompts,validationHash} clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.generators.*.files.*.{secret,deploy,owner,group,mode,neededFor} clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.?sops.?defaultGroups clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.settings.publicModule clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.settings.secretModule clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.?sops.?secretUploadDirectory clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.?password-store.?passCommand clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.?password-store.?secretLocation clan-pytest-with-core> - (not cached) clanInternals.vars.settings.?recipients clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.?age.?secretLocation clan-pytest-with-core> ________________________ test_multi_machine_shared_vars ________________________ clan-pytest-with-core> [gw9] linux -- Python 3.14.7 /nix/store/3n4qphl9s728sz8frmpqqrv9b1m87g68-python3-3.14.7/bin/python clan-pytest-with-core> clan-pytest-with-core> self = Flake(identifier='/build/pytest-_srar2yl/flake', hash='sha256-AKgwTaidy5xICDIudPxEMbneqYHIg2g8RZ7RmzCzRv8=', 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.?secrets.?age.?plugins', 'clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.var...licModule', 'clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.settings.secretModule', ...] 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-_srar2yl/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/699x253r7rrywwnjypcshy0gchzxhr7f-source?narHash=sha256-AKgwTaidy5xICDIudPxEMbneqYHIg2g8RZ7RmzCzRv8="; 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": "maybe", "value": "secrets"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "plugins"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "share"}, {"type": "str", "value": "dependencies"}, {"type": "str", "value": "prompts"}, {"type": "str", "value": "validationHash"}]}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "str", "value": "files"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "secret"}, {"type": "str", "value": "deploy"}, {"type": "str", "value": "owner"}, {"type": "str", "value": "group"}, {"type": "str", "value": "mode"}, {"type": "str", "value": "neededFor"}]}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "defaultGroups"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "publicModule"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "secretModule"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "secretUploadDirectory"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "passCommand"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "secretLocation"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "maybe", "value": "recipients"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "secretLocation"}]'"'"''"'"') 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": "maybe", "value": "secrets"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "plugins"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "share"}, {"type": "str", "value": "dependencies"}, {"type": "str", "value": "prompts"}, {"type": "str", "value": "validationHash"}]}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "str", "value": "files"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "secret"}, {"type": "str", "value": "deploy"}, {"type": "str", "value": "owner"}, {"type": "str", "value": "group"}, {"type": "str", "value": "mode"}, {"type": "str", "value": "neededFor"}]}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "defaultGroups"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "publicModule"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "secretModule"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "secretUploadDirectory"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "passCommand"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "secretLocation"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "maybe", "value": "recipients"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "secretLocation"}]'') 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": "maybe", "value": "secrets"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "plugins"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "share"}, {"type": "str", "value": "dependencies"}, {"type": "str", "value": "prompts"}, {"type": "str", "value": "validationHash"}]}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "str", "value": "files"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "secret"}, {"type": "str", "value": "deploy"}, {"type": "str", "value": "owner"}, {"type": "str", "value": "group"}, {"type": "str", "value": "mode"}, {"type": "str", "value": "neededFor"}]}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "defaultGroups"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "publicModule"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "secretModule"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "secretUploadDirectory"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "passCommand"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "secretLocation"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "maybe", "value": "recipients"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "secretLocation"}]'') flake) clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating list element at index 1 clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating attribute 'machine1' clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/cba1x9mxnwr8b36cw41bya7g6d5v1p7d-source/select.nix:325:37: clan-pytest-with-core> E 324| in clan-pytest-with-core> E 325| builtins.mapAttrs (_: v: recurse selectors (idx + 1) v) filteredAttrs clan-pytest-with-core> E | ^ clan-pytest-with-core> E 326| else if selector.type == "maybe" then 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:325:40: clan-pytest-with-core> E 324| in clan-pytest-with-core> E 325| builtins.mapAttrs (_: v: recurse selectors (idx + 1) v) filteredAttrs clan-pytest-with-core> E | ^ clan-pytest-with-core> E 326| else if selector.type == "maybe" then 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 … from call site clan-pytest-with-core> E at /build/store/nix/store/cba1x9mxnwr8b36cw41bya7g6d5v1p7d-source/select.nix:312:15: clan-pytest-with-core> E 311| else if selector.type == "str" then clan-pytest-with-core> E 312| recurse selectors (idx + 1) (builtins.getAttr selector.value obj) clan-pytest-with-core> E | ^ clan-pytest-with-core> E 313| else if selector.type == "set" then 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 'getAttr' builtin clan-pytest-with-core> E at /build/store/nix/store/cba1x9mxnwr8b36cw41bya7g6d5v1p7d-source/select.nix:312:44: clan-pytest-with-core> E 311| else if selector.type == "str" then clan-pytest-with-core> E 312| recurse selectors (idx + 1) (builtins.getAttr selector.value obj) clan-pytest-with-core> E | ^ clan-pytest-with-core> E 313| else if selector.type == "set" then clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'seq' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:401:18: clan-pytest-with-core> E 400| options = checked options; clan-pytest-with-core> E 401| config = checked (removeAttrs config [ "_module" ]); clan-pytest-with-core> E | ^ clan-pytest-with-core> E 402| _module = checked (config._module); 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:304:9: clan-pytest-with-core> E 303| checkUnmatched = clan-pytest-with-core> E 304| if config._module.check && config._module.freeformType == null && merged.unmatchedDefns != [ ] then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 305| let clan-pytest-with-core> E clan-pytest-with-core> E … in the right operand of the AND (&&) operator clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:304:72: clan-pytest-with-core> E 303| checkUnmatched = clan-pytest-with-core> E 304| if config._module.check && config._module.freeformType == null && merged.unmatchedDefns != [ ] then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 305| let clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'unmatchedDefns' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:940:7: clan-pytest-with-core> E 939| # Transforms unmatchedDefnsByName into a list of definitions clan-pytest-with-core> E 940| unmatchedDefns = clan-pytest-with-core> E | ^ clan-pytest-with-core> E 941| if configs == [ ] then clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'concatLists' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:946:11: clan-pytest-with-core> E 945| else clan-pytest-with-core> E 946| concatLists ( clan-pytest-with-core> E | ^ clan-pytest-with-core> E 947| mapAttrsToList ( clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:948:21: clan-pytest-with-core> E 947| mapAttrsToList ( clan-pytest-with-core> E 948| name: defs: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 949| map ( clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'map' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:949:15: clan-pytest-with-core> E 948| name: defs: clan-pytest-with-core> E 949| map ( clan-pytest-with-core> E | ^ clan-pytest-with-core> E 950| def: clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:932:22: clan-pytest-with-core> E 931| # Propagate all unmatched definitions from nested option sets clan-pytest-with-core> E 932| mapAttrs (n: v: v.unmatchedDefns) resultsByName clan-pytest-with-core> E | ^ clan-pytest-with-core> E 933| # Plus the definitions for the current prefix that don't have a matching option clan-pytest-with-core> E clan-pytest-with-core> E (10 duplicate frames omitted) clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:932:25: clan-pytest-with-core> E 931| # Propagate all unmatched definitions from nested option sets clan-pytest-with-core> E 932| mapAttrs (n: v: v.unmatchedDefns) resultsByName clan-pytest-with-core> E | ^ clan-pytest-with-core> E 933| # Plus the definitions for the current prefix that don't have a matching option clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:876:15: clan-pytest-with-core> E 875| resultsByName = mapAttrs ( clan-pytest-with-core> E 876| name: decls: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 877| # We're descending into attribute ‘name’. 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:888:9: clan-pytest-with-core> E 887| in clan-pytest-with-core> E 888| if length optionDecls == length decls then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 889| let clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'length' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:888:12: clan-pytest-with-core> E 887| in clan-pytest-with-core> E 888| if length optionDecls == length decls then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 889| let clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'filter' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:882:25: clan-pytest-with-core> E 881| defns' = rawDefinitionsByName.${name} or [ ]; clan-pytest-with-core> E 882| optionDecls = filter ( clan-pytest-with-core> E | ^ clan-pytest-with-core> E 883| m: clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:883:13: clan-pytest-with-core> E 882| optionDecls = filter ( clan-pytest-with-core> E 883| m: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 884| m.options ? _type clan-pytest-with-core> E clan-pytest-with-core> E … in the left operand of the AND (&&) operator clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:885:13: clan-pytest-with-core> E 884| m.options ? _type clan-pytest-with-core> E 885| && (m.options._type == "option" || throwDeclarationTypeError loc m.options._type m._file) clan-pytest-with-core> E | ^ clan-pytest-with-core> E 886| ) decls; clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'options' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:807:15: clan-pytest-with-core> E 806| pos = unsafeGetAttrPos n subtree; clan-pytest-with-core> E 807| options = option; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 808| }) subtree clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:289:73: clan-pytest-with-core> E 288| len = length attrPath; clan-pytest-with-core> E 289| atDepth = n: if n == len then value else { ${elemAt attrPath n} = atDepth (n + 1); }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 290| in clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'atDepth' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:289:17: clan-pytest-with-core> E 288| len = length attrPath; clan-pytest-with-core> E 289| atDepth = n: if n == len then value else { ${elemAt attrPath n} = atDepth (n + 1); }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 290| in clan-pytest-with-core> E clan-pytest-with-core> E … in the right operand of the update (//) operator clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:2047:9: clan-pytest-with-core> E 2046| } clan-pytest-with-core> E 2047| // optionalAttrs (toType != null) { clan-pytest-with-core> E | ^ clan-pytest-with-core> E 2048| type = toType; clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:2047:12: clan-pytest-with-core> E 2046| } clan-pytest-with-core> E 2047| // optionalAttrs (toType != null) { clan-pytest-with-core> E | ^ clan-pytest-with-core> E 2048| type = toType; clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'optionalAttrs' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:1492:25: clan-pytest-with-core> E 1491| */ clan-pytest-with-core> E 1492| optionalAttrs = cond: as: if cond then as else { }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1493| 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:1492:29: clan-pytest-with-core> E 1491| */ clan-pytest-with-core> E 1492| optionalAttrs = cond: as: if cond then as else { }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1493| clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:2036:17: clan-pytest-with-core> E 2035| let clan-pytest-with-core> E 2036| opt = attrByPath to { } options; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 2037| in clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'attrByPath' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:89:24: clan-pytest-with-core> E 88| attrByPath = clan-pytest-with-core> E 89| attrPath: default: set: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 90| let clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:106:5: clan-pytest-with-core> E 105| in clan-pytest-with-core> E 106| attrByPath' 0 set; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 107| clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'attrByPath'' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:93:12: clan-pytest-with-core> E 92| attrByPath' = clan-pytest-with-core> E 93| n: s: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 94| ( clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:102:35: clan-pytest-with-core> E 101| in clan-pytest-with-core> E 102| if s ? ${attr} then attrByPath' (n + 1) s.${attr} else default clan-pytest-with-core> E | ^ clan-pytest-with-core> E 103| ) clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'attrByPath'' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:93:12: clan-pytest-with-core> E 92| attrByPath' = clan-pytest-with-core> E 93| n: s: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 94| ( clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:102:35: clan-pytest-with-core> E 101| in clan-pytest-with-core> E 102| if s ? ${attr} then attrByPath' (n + 1) s.${attr} else default clan-pytest-with-core> E | ^ clan-pytest-with-core> E 103| ) clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'attrByPath'' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:93:12: clan-pytest-with-core> E 92| attrByPath' = clan-pytest-with-core> E 93| n: s: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 94| ( clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:102:35: clan-pytest-with-core> E 101| in clan-pytest-with-core> E 102| if s ? ${attr} then attrByPath' (n + 1) s.${attr} else default clan-pytest-with-core> E | ^ clan-pytest-with-core> E 103| ) clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'attrByPath'' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:93:12: clan-pytest-with-core> E 92| attrByPath' = clan-pytest-with-core> E 93| n: s: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 94| ( clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:102:55: clan-pytest-with-core> E 101| in clan-pytest-with-core> E 102| if s ? ${attr} then attrByPath' (n + 1) s.${attr} else default clan-pytest-with-core> E | ^ clan-pytest-with-core> E 103| ) clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:927:37: clan-pytest-with-core> E 926| clan-pytest-with-core> E 927| matchedOptions = mapAttrs (n: v: v.matchedOptions) resultsByName; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 928| clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'matchedOptions' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:893:13: clan-pytest-with-core> E 892| { clan-pytest-with-core> E 893| matchedOptions = evalOptionValue loc opt defns'; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 894| unmatchedDefns = [ ]; clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:893:30: clan-pytest-with-core> E 892| { clan-pytest-with-core> E 893| matchedOptions = evalOptionValue loc opt defns'; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 894| unmatchedDefns = [ ]; clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'evalOptionValue' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1103:15: clan-pytest-with-core> E 1102| evalOptionValue = clan-pytest-with-core> E 1103| loc: opt: defs: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1104| let clan-pytest-with-core> E clan-pytest-with-core> E … in the left operand of the update (//) operator clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1148:5: clan-pytest-with-core> E 1147| warnDeprecation opt clan-pytest-with-core> E 1148| // { clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1149| value = addErrorContext "while evaluating the option `${showOption loc}':" value; 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1141:9: clan-pytest-with-core> E 1140| warnDeprecation = clan-pytest-with-core> E 1141| if (opt.type.deprecationMessage != null) then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1142| warn "The type `types.${opt.type.name}' of option `${showOption loc}' defined in ${showFiles opt.declarations} is deprecated. ${opt.type.deprecationMessage}" clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:890:19: clan-pytest-with-core> E 889| let clan-pytest-with-core> E 890| opt = fixupOptionType loc (mergeOptionDecls loc decls); clan-pytest-with-core> E | ^ clan-pytest-with-core> E 891| in clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'fixupOptionType' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1473:10: clan-pytest-with-core> E 1472| fixupOptionType = clan-pytest-with-core> E 1473| loc: opt: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1474| if opt.type.getSubModules or null == null then 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1474:5: clan-pytest-with-core> E 1473| loc: opt: clan-pytest-with-core> E 1474| if opt.type.getSubModules or null == null then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1475| opt // { type = opt.type or types.unspecified; } clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'type.getSubModules' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/nixos/modules/services/hardware/bluetooth.nix:72:9: clan-pytest-with-core> E 71| settings = mkOption { clan-pytest-with-core> E 72| type = cfgFmt.type; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 73| default = { }; clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/nixos/modules/services/hardware/bluetooth.nix:26:12: clan-pytest-with-core> E 25| clan-pytest-with-core> E 26| cfgFmt = pkgs.formats.ini { }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 27| clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:727:15: clan-pytest-with-core> E 726| extraArgs = mapAttrs ( clan-pytest-with-core> E 727| name: _: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 728| addErrorContext (context name) ( clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the module argument `pkgs' in "/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/nixos/modules/services/hardware/bluetooth.nix": clan-pytest-with-core> E clan-pytest-with-core> E … noting that argument `pkgs` is not externally provided, so querying `_module.args` instead, requiring `config` clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:731:13: clan-pytest-with-core> E 730| "noting that argument `${name}` is not externally provided, so querying `_module.args` instead, requiring `config`" clan-pytest-with-core> E 731| config._module.args.${name} clan-pytest-with-core> E | ^ clan-pytest-with-core> E 732| ) clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/types.nix:1029:18: clan-pytest-with-core> E 1028| value = mapAttrs ( clan-pytest-with-core> E 1029| n: v: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1030| if lazy then clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'optionalValue.value' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1312:5: clan-pytest-with-core> E 1311| clan-pytest-with-core> E 1312| optionalValue = if isDefined then { value = mergedValue; } else { }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1313| }; 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1312:21: clan-pytest-with-core> E 1311| clan-pytest-with-core> E 1312| optionalValue = if isDefined then { value = mergedValue; } else { }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1313| }; clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'values' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1240:11: clan-pytest-with-core> E 1239| { clan-pytest-with-core> E 1240| values = defsSorted; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1241| inherit (defsFiltered) highestPrio; 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1211:11: clan-pytest-with-core> E 1210| # Avoid sorting if we don't have to. clan-pytest-with-core> E 1211| if any (def: def.value._type or "" == "order") defsFiltered.values then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1212| sortProperties defsFiltered.values clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'any' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1211:14: clan-pytest-with-core> E 1210| # Avoid sorting if we don't have to. clan-pytest-with-core> E 1211| if any (def: def.value._type or "" == "order") defsFiltered.values then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1212| sortProperties defsFiltered.values clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1211:19: clan-pytest-with-core> E 1210| # Avoid sorting if we don't have to. clan-pytest-with-core> E 1211| if any (def: def.value._type or "" == "order") defsFiltered.values then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1212| sortProperties defsFiltered.values clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'value._type' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1422:67: clan-pytest-with-core> E 1421| strip = clan-pytest-with-core> E 1422| def: if def.value._type or "" == "override" then def // { value = def.value.content; } else def; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1423| in clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'value.content' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1566:22: clan-pytest-with-core> E 1565| _type = "override"; clan-pytest-with-core> E 1566| inherit priority content; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1567| }; 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/nixos/modules/misc/nixpkgs.nix:107:15: clan-pytest-with-core> E 106| clan-pytest-with-core> E 107| finalPkgs = if opt.pkgs.isDefined then cfg.pkgs.appendOverlays cfg.overlays else defaultPkgs; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 108| clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'pkgs.isDefined' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1154:21: clan-pytest-with-core> E 1153| definitionsWithLocations = res.defsFinal; clan-pytest-with-core> E 1154| inherit (res) isDefined; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1155| inherit (res.checkedAndMerged) valueMeta; clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'isDefined' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1310:5: clan-pytest-with-core> E 1309| clan-pytest-with-core> E 1310| isDefined = defsFinal != [ ]; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1311| clan-pytest-with-core> E clan-pytest-with-core> E (6 duplicate frames omitted) clan-pytest-with-core> E clan-pytest-with-core> E error: attribute 'system' missing clan-pytest-with-core> E at /build/store/nix/store/y3h139bhv4373m1hab367ma4p5i95i2f-source/modules/clan/module.nix:164:24: clan-pytest-with-core> E 163| (lib.modules.importApply ../../nixosModules/machineModules/overridePkgs.nix { clan-pytest-with-core> E 164| pkgs = nixpkgsMatrix.${config.inventory.machines.${name}.nixpkgs}.system.${system}.pkgs; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 165| }) clan-pytest-with-core> E Did you mean systems? 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 0x7fffe67a0850> clan-pytest-with-core> flake_with_sops = 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_multi_machine_shared_vars( clan-pytest-with-core> monkeypatch: pytest.MonkeyPatch, clan-pytest-with-core> flake_with_sops: ClanFlake, clan-pytest-with-core> ) -> None: clan-pytest-with-core> """Ensure that shared vars are regenerated only when they should, and also can be clan-pytest-with-core> accessed by all machines that should have access. clan-pytest-with-core> clan-pytest-with-core> Specifically: clan-pytest-with-core> - make sure shared wars are not regenerated when a second machines is added clan-pytest-with-core> - make sure vars can still be accessed by all machines, after they are regenerated clan-pytest-with-core> """ clan-pytest-with-core> flake = flake_with_sops clan-pytest-with-core> clan-pytest-with-core> machine1_config = flake.machines["machine1"] = create_test_machine_config() clan-pytest-with-core> shared_generator = machine1_config["clan"]["core"]["vars"]["generators"][ clan-pytest-with-core> "shared_generator" clan-pytest-with-core> ] clan-pytest-with-core> shared_generator["share"] = True clan-pytest-with-core> shared_generator["files"]["my_secret"]["secret"] = True clan-pytest-with-core> shared_generator["files"]["my_value"]["secret"] = False clan-pytest-with-core> shared_generator["script"] = ( clan-pytest-with-core> 'echo "$RANDOM" > "$out"/my_value && echo "$RANDOM" > "$out"/my_secret' clan-pytest-with-core> ) clan-pytest-with-core> # machine 2 is equivalent to machine 1 clan-pytest-with-core> flake.machines["machine2"] = machine1_config clan-pytest-with-core> flake.refresh() clan-pytest-with-core> monkeypatch.chdir(flake.path) clan-pytest-with-core> machine1 = Machine(name="machine1", flake=Flake(str(flake.path))) clan-pytest-with-core> machine2 = Machine(name="machine2", flake=Flake(str(flake.path))) clan-pytest-with-core> sops_store_1 = sops.SecretStore(machine1.flake) clan-pytest-with-core> sops_store_2 = sops.SecretStore(machine2.flake) clan-pytest-with-core> in_repo_store_1 = in_repo_mod.VarsStore(machine1.flake) clan-pytest-with-core> in_repo_store_2 = in_repo_mod.VarsStore(machine2.flake) clan-pytest-with-core> # Create generators with machine context for testing clan-pytest-with-core> generator_m1 = Generator( clan-pytest-with-core> _flake=machine1.flake, clan-pytest-with-core> key=GeneratorId(name="shared_generator", placement=Shared()), clan-pytest-with-core> ) clan-pytest-with-core> generator_m2 = Generator( clan-pytest-with-core> _flake=machine2.flake, clan-pytest-with-core> key=GeneratorId(name="shared_generator", placement=Shared()), clan-pytest-with-core> ) clan-pytest-with-core> # generate for machine 1 clan-pytest-with-core> > cli.run(["vars", "generate", "--flake", str(flake.path), "machine1"]) clan-pytest-with-core> clan-pytest-with-core> /build/src/clan_cli/tests/test_vars_shared.py:146: 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/vars/generate.py:33: in generate_command clan-pytest-with-core> run_generators( clan-pytest-with-core> /build/src/clan_lib/vars/generate.py:306: in run_generators clan-pytest-with-core> all_generators = get_generators(machines, full_closure=True) clan-pytest-with-core> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ clan-pytest-with-core> /build/src/clan_lib/vars/generate.py:146: in get_generators clan-pytest-with-core> flake.precache(get_generators_precache_selectors(list(all_machines))) clan-pytest-with-core> /build/src/clan_lib/flake/flake.py:1151: in precache clan-pytest-with-core> self.get_from_nix(not_fetched_selectors) clan-pytest-with-core> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ clan-pytest-with-core> clan-pytest-with-core> self = Flake(identifier='/build/pytest-_srar2yl/flake', hash='sha256-AKgwTaidy5xICDIudPxEMbneqYHIg2g8RZ7RmzCzRv8=', 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.?secrets.?age.?plugins', 'clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.var...licModule', 'clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.settings.secretModule', ...] 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 while executing:$ clan select 'clanInternals.?secrets.?age.?plugins' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.generators.*.{share,dependencies,prompts,validationHash}' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.generators.*.files.*.{secret,deploy,owner,group,mode,neededFor}' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.?sops.?defaultGroups' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.settings.publicModule' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.settings.secretModule' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.?sops.?secretUploadDirectory' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.?password-store.?passCommand' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.?password-store.?secretLocation' clan-pytest-with-core> E $ clan select 'clanInternals.vars.settings.?recipients' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.?age.?secretLocation' clan-pytest-with-core> E Reason: attribute 'system' missing clan-pytest-with-core> E at /build/store/nix/store/y3h139bhv4373m1hab367ma4p5i95i2f-source/modules/clan/module.nix:164:24: clan-pytest-with-core> E 163| (lib.modules.importApply ../../nixosModules/machineModules/overridePkgs.nix { clan-pytest-with-core> E 164| pkgs = nixpkgsMatrix.${config.inventory.machines.${name}.nixpkgs}.system.${system}.pkgs; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 165| }) clan-pytest-with-core> E Did you mean systems?. 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 setup ----------------------------- clan-pytest-with-core> !! $HOME does not point to a temp directory!! HOME=/build/pytest-_srar2yl clan-pytest-with-core> [localhost] $ clan vars keygen --flake /build/pytest-_srar2yl/flake --user admin --no-interactive clan-pytest-with-core> Caller: /build/src/clan_cli/tests/age_keys.py:31::init clan-pytest-with-core> clan-pytest-with-core> Prefetching flake /build/pytest-_srar2yl/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/febbcab65441be6ccc547560fd0155faadebbbb7 clan-pytest-with-core> (cached) $ clan select clanInternals.inventoryClass.relativeDirectory 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> git \ clan-pytest-with-core> -C /build/pytest-_srar2yl/flake \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-_srar2yl/flake/sops/users/admin 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/admin to git clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-_srar2yl/flake \ clan-pytest-with-core> diff \ clan-pytest-with-core> --cached --exit-code \ clan-pytest-with-core> -- /build/pytest-_srar2yl/flake/sops/users/admin 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-_srar2yl/flake \ clan-pytest-with-core> commit \ clan-pytest-with-core> -m 'secrets: add user admin' \ clan-pytest-with-core> --no-verify /build/pytest-_srar2yl/flake/sops/users/admin 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/admin to git 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/pytest-_srar2yl clan-pytest-with-core> DEBUG clan_cli.tests.helpers.cli:__init__.py:143 $ clan vars keygen --flake /build/pytest-_srar2yl/flake --user admin --no-interactive clan-pytest-with-core> Caller: /build/src/clan_cli/tests/age_keys.py:31::init clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:927 Prefetching flake /build/pytest-_srar2yl/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/febbcab65441be6ccc547560fd0155faadebbbb7 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.cmd:__init__.py:143 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> DEBUG clan_lib.cmd:__init__.py:143 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> DEBUG clan_cli.secrets.sops:sops.py:99 Found age public key from a private key in the environment (SOPS_AGE_KEY): age1dhwqzkah943xzc34tc3dlmfayyevcmdmxzjezdgdy33euxwf59vsp3vk3c clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:143 git \ clan-pytest-with-core> -C /build/pytest-_srar2yl/flake \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-_srar2yl/flake/sops/users/admin 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> DEBUG clan_lib.cmd:__init__.py:143 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> DEBUG clan_lib.git:__init__.py:98 Adding sops/users/admin to git clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:143 git \ clan-pytest-with-core> -C /build/pytest-_srar2yl/flake \ clan-pytest-with-core> diff \ clan-pytest-with-core> --cached --exit-code \ clan-pytest-with-core> -- /build/pytest-_srar2yl/flake/sops/users/admin 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> DEBUG clan_lib.cmd:__init__.py:143 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> DEBUG clan_lib.cmd:__init__.py:143 git \ clan-pytest-with-core> -C /build/pytest-_srar2yl/flake \ clan-pytest-with-core> commit \ clan-pytest-with-core> -m 'secrets: add user admin' \ clan-pytest-with-core> --no-verify /build/pytest-_srar2yl/flake/sops/users/admin 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> DEBUG clan_lib.cmd:__init__.py:143 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> INFO clan_lib.git:__init__.py:141 Committed sops/users/admin to git clan-pytest-with-core> ----------------------------- Captured stdout call ----------------------------- clan-pytest-with-core> [main 7773563] flake: update by flake generator clan-pytest-with-core> 4 files changed, 76 insertions(+) clan-pytest-with-core> create mode 100644 machines/machine1/configuration.json clan-pytest-with-core> create mode 100644 machines/machine1/configuration.nix clan-pytest-with-core> create mode 100644 machines/machine2/configuration.json clan-pytest-with-core> create mode 100644 machines/machine2/configuration.nix clan-pytest-with-core> ----------------------------- Captured stderr call ----------------------------- clan-pytest-with-core> Prefetching flake /build/pytest-_srar2yl/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.inventoryClass.relativeDirectory clan-pytest-with-core> Prefetching flake /build/pytest-_srar2yl/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/d2c0050d97832c3ac5193485b93705d00938c15e clan-pytest-with-core> (cached) $ clan select clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> Prefetching flake /build/pytest-_srar2yl/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.inventoryClass.relativeDirectory clan-pytest-with-core> Prefetching flake /build/pytest-_srar2yl/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/97a1bfae7db51b87781206ccdf669a975879b037 clan-pytest-with-core> (cached) $ clan select clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> (cached) $ clan select clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> (cached) $ clan select clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> [localhost] $ clan vars generate --flake /build/pytest-_srar2yl/flake machine1 clan-pytest-with-core> Caller: /build/src/clan_cli/tests/test_vars_shared.py:146::test_multi_machine_shared_vars clan-pytest-with-core> clan-pytest-with-core> Prefetching flake /build/pytest-_srar2yl/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/97a1bfae7db51b87781206ccdf669a975879b037 clan-pytest-with-core> Cache miss for clanInternals.cliChecks clan-pytest-with-core> Loading flake cache from file /build/clan-flake-cache/flakes-v2/97a1bfae7db51b87781206ccdf669a975879b037 clan-pytest-with-core> Cache miss for clanInternals.inventoryClass.inventorySerialization.{instances,machines,meta} clan-pytest-with-core> Loading flake cache from file /build/clan-flake-cache/flakes-v2/97a1bfae7db51b87781206ccdf669a975879b037 clan-pytest-with-core> (cached) $ clan select clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> (cached) $ clan select 'clanInternals.inventoryClass.inventorySerialization.{instances,machines,meta}' clan-pytest-with-core> Precaching selectors: clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.machines clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.instances clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.meta clan-pytest-with-core> - (not cached) clanInternals.?secrets.?age.?plugins clan-pytest-with-core> - (cached) clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.generators.*.{share,dependencies,prompts,validationHash} clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.generators.*.files.*.{secret,deploy,owner,group,mode,neededFor} clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.?sops.?defaultGroups clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.settings.publicModule clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.settings.secretModule clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.?sops.?secretUploadDirectory clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.?password-store.?passCommand clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.?password-store.?secretLocation clan-pytest-with-core> - (not cached) clanInternals.vars.settings.?recipients clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.?age.?secretLocation clan-pytest-with-core> ------------------------------ Captured log call ------------------------------- clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:927 Prefetching flake /build/pytest-_srar2yl/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.inventoryClass.relativeDirectory clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:927 Prefetching flake /build/pytest-_srar2yl/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/d2c0050d97832c3ac5193485b93705d00938c15e 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-_srar2yl/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.inventoryClass.relativeDirectory clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:927 Prefetching flake /build/pytest-_srar2yl/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/97a1bfae7db51b87781206ccdf669a975879b037 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:1179 (cached) $ clan select clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1179 (cached) $ clan select clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> DEBUG clan_cli.tests.helpers.cli:__init__.py:143 $ clan vars generate --flake /build/pytest-_srar2yl/flake machine1 clan-pytest-with-core> Caller: /build/src/clan_cli/tests/test_vars_shared.py:146::test_multi_machine_shared_vars clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:927 Prefetching flake /build/pytest-_srar2yl/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/97a1bfae7db51b87781206ccdf669a975879b037 clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1174 Cache miss for clanInternals.cliChecks clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:789 Loading flake cache from file /build/clan-flake-cache/flakes-v2/97a1bfae7db51b87781206ccdf669a975879b037 clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1174 Cache miss for clanInternals.inventoryClass.inventorySerialization.{instances,machines,meta} clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:789 Loading flake cache from file /build/clan-flake-cache/flakes-v2/97a1bfae7db51b87781206ccdf669a975879b037 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:1179 (cached) $ clan select 'clanInternals.inventoryClass.inventorySerialization.{instances,machines,meta}' clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1144 Precaching selectors: clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.machines clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.instances clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.meta clan-pytest-with-core> - (not cached) clanInternals.?secrets.?age.?plugins clan-pytest-with-core> - (cached) clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.generators.*.{share,dependencies,prompts,validationHash} clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.generators.*.files.*.{secret,deploy,owner,group,mode,neededFor} clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.?sops.?defaultGroups clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.settings.publicModule clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.settings.secretModule clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.?sops.?secretUploadDirectory clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.?password-store.?passCommand clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.?password-store.?secretLocation clan-pytest-with-core> - (not cached) clanInternals.vars.settings.?recipients clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.?age.?secretLocation clan-pytest-with-core> __________ test_shared_generator_allows_machine_specific_differences ___________ clan-pytest-with-core> [gw13] linux -- Python 3.14.7 /nix/store/3n4qphl9s728sz8frmpqqrv9b1m87g68-python3-3.14.7/bin/python clan-pytest-with-core> clan-pytest-with-core> self = Flake(identifier='/build/pytest-9i2b2ye9/flake', hash='sha256-QH7g+4maVOJgGHpZIdQTC8BI2Txooc7ZLfIYfi9BvT4=', 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.?secrets.?age.?plugins', 'clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.var...licModule', 'clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.settings.secretModule', ...] 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-9i2b2ye9/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/5qi8f39xa1z13q4i9qbrnd9c3pirnkcw-source?narHash=sha256-QH7g+4maVOJgGHpZIdQTC8BI2Txooc7ZLfIYfi9BvT4="; 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": "maybe", "value": "secrets"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "plugins"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "share"}, {"type": "str", "value": "dependencies"}, {"type": "str", "value": "prompts"}, {"type": "str", "value": "validationHash"}]}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "str", "value": "files"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "secret"}, {"type": "str", "value": "deploy"}, {"type": "str", "value": "owner"}, {"type": "str", "value": "group"}, {"type": "str", "value": "mode"}, {"type": "str", "value": "neededFor"}]}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "defaultGroups"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "publicModule"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "secretModule"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "secretUploadDirectory"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "passCommand"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "secretLocation"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "maybe", "value": "recipients"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "secretLocation"}]'"'"''"'"') 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": "maybe", "value": "secrets"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "plugins"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "share"}, {"type": "str", "value": "dependencies"}, {"type": "str", "value": "prompts"}, {"type": "str", "value": "validationHash"}]}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "str", "value": "files"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "secret"}, {"type": "str", "value": "deploy"}, {"type": "str", "value": "owner"}, {"type": "str", "value": "group"}, {"type": "str", "value": "mode"}, {"type": "str", "value": "neededFor"}]}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "defaultGroups"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "publicModule"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "secretModule"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "secretUploadDirectory"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "passCommand"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "secretLocation"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "maybe", "value": "recipients"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "secretLocation"}]'') 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": "maybe", "value": "secrets"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "plugins"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "share"}, {"type": "str", "value": "dependencies"}, {"type": "str", "value": "prompts"}, {"type": "str", "value": "validationHash"}]}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "str", "value": "files"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "secret"}, {"type": "str", "value": "deploy"}, {"type": "str", "value": "owner"}, {"type": "str", "value": "group"}, {"type": "str", "value": "mode"}, {"type": "str", "value": "neededFor"}]}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "defaultGroups"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "publicModule"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "secretModule"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "secretUploadDirectory"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "passCommand"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "secretLocation"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "maybe", "value": "recipients"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "secretLocation"}]'') flake) clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating list element at index 1 clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating attribute 'machine1' clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/cba1x9mxnwr8b36cw41bya7g6d5v1p7d-source/select.nix:325:37: clan-pytest-with-core> E 324| in clan-pytest-with-core> E 325| builtins.mapAttrs (_: v: recurse selectors (idx + 1) v) filteredAttrs clan-pytest-with-core> E | ^ clan-pytest-with-core> E 326| else if selector.type == "maybe" then 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:325:40: clan-pytest-with-core> E 324| in clan-pytest-with-core> E 325| builtins.mapAttrs (_: v: recurse selectors (idx + 1) v) filteredAttrs clan-pytest-with-core> E | ^ clan-pytest-with-core> E 326| else if selector.type == "maybe" then 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 … from call site clan-pytest-with-core> E at /build/store/nix/store/cba1x9mxnwr8b36cw41bya7g6d5v1p7d-source/select.nix:312:15: clan-pytest-with-core> E 311| else if selector.type == "str" then clan-pytest-with-core> E 312| recurse selectors (idx + 1) (builtins.getAttr selector.value obj) clan-pytest-with-core> E | ^ clan-pytest-with-core> E 313| else if selector.type == "set" then 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 'getAttr' builtin clan-pytest-with-core> E at /build/store/nix/store/cba1x9mxnwr8b36cw41bya7g6d5v1p7d-source/select.nix:312:44: clan-pytest-with-core> E 311| else if selector.type == "str" then clan-pytest-with-core> E 312| recurse selectors (idx + 1) (builtins.getAttr selector.value obj) clan-pytest-with-core> E | ^ clan-pytest-with-core> E 313| else if selector.type == "set" then clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'seq' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:401:18: clan-pytest-with-core> E 400| options = checked options; clan-pytest-with-core> E 401| config = checked (removeAttrs config [ "_module" ]); clan-pytest-with-core> E | ^ clan-pytest-with-core> E 402| _module = checked (config._module); 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:304:9: clan-pytest-with-core> E 303| checkUnmatched = clan-pytest-with-core> E 304| if config._module.check && config._module.freeformType == null && merged.unmatchedDefns != [ ] then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 305| let clan-pytest-with-core> E clan-pytest-with-core> E … in the right operand of the AND (&&) operator clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:304:72: clan-pytest-with-core> E 303| checkUnmatched = clan-pytest-with-core> E 304| if config._module.check && config._module.freeformType == null && merged.unmatchedDefns != [ ] then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 305| let clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'unmatchedDefns' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:940:7: clan-pytest-with-core> E 939| # Transforms unmatchedDefnsByName into a list of definitions clan-pytest-with-core> E 940| unmatchedDefns = clan-pytest-with-core> E | ^ clan-pytest-with-core> E 941| if configs == [ ] then clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'concatLists' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:946:11: clan-pytest-with-core> E 945| else clan-pytest-with-core> E 946| concatLists ( clan-pytest-with-core> E | ^ clan-pytest-with-core> E 947| mapAttrsToList ( clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:948:21: clan-pytest-with-core> E 947| mapAttrsToList ( clan-pytest-with-core> E 948| name: defs: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 949| map ( clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'map' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:949:15: clan-pytest-with-core> E 948| name: defs: clan-pytest-with-core> E 949| map ( clan-pytest-with-core> E | ^ clan-pytest-with-core> E 950| def: clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:932:22: clan-pytest-with-core> E 931| # Propagate all unmatched definitions from nested option sets clan-pytest-with-core> E 932| mapAttrs (n: v: v.unmatchedDefns) resultsByName clan-pytest-with-core> E | ^ clan-pytest-with-core> E 933| # Plus the definitions for the current prefix that don't have a matching option clan-pytest-with-core> E clan-pytest-with-core> E (10 duplicate frames omitted) clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:932:25: clan-pytest-with-core> E 931| # Propagate all unmatched definitions from nested option sets clan-pytest-with-core> E 932| mapAttrs (n: v: v.unmatchedDefns) resultsByName clan-pytest-with-core> E | ^ clan-pytest-with-core> E 933| # Plus the definitions for the current prefix that don't have a matching option clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:876:15: clan-pytest-with-core> E 875| resultsByName = mapAttrs ( clan-pytest-with-core> E 876| name: decls: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 877| # We're descending into attribute ‘name’. 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:888:9: clan-pytest-with-core> E 887| in clan-pytest-with-core> E 888| if length optionDecls == length decls then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 889| let clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'length' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:888:12: clan-pytest-with-core> E 887| in clan-pytest-with-core> E 888| if length optionDecls == length decls then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 889| let clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'filter' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:882:25: clan-pytest-with-core> E 881| defns' = rawDefinitionsByName.${name} or [ ]; clan-pytest-with-core> E 882| optionDecls = filter ( clan-pytest-with-core> E | ^ clan-pytest-with-core> E 883| m: clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:883:13: clan-pytest-with-core> E 882| optionDecls = filter ( clan-pytest-with-core> E 883| m: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 884| m.options ? _type clan-pytest-with-core> E clan-pytest-with-core> E … in the left operand of the AND (&&) operator clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:885:13: clan-pytest-with-core> E 884| m.options ? _type clan-pytest-with-core> E 885| && (m.options._type == "option" || throwDeclarationTypeError loc m.options._type m._file) clan-pytest-with-core> E | ^ clan-pytest-with-core> E 886| ) decls; clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'options' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:807:15: clan-pytest-with-core> E 806| pos = unsafeGetAttrPos n subtree; clan-pytest-with-core> E 807| options = option; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 808| }) subtree clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:289:73: clan-pytest-with-core> E 288| len = length attrPath; clan-pytest-with-core> E 289| atDepth = n: if n == len then value else { ${elemAt attrPath n} = atDepth (n + 1); }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 290| in clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'atDepth' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:289:17: clan-pytest-with-core> E 288| len = length attrPath; clan-pytest-with-core> E 289| atDepth = n: if n == len then value else { ${elemAt attrPath n} = atDepth (n + 1); }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 290| in clan-pytest-with-core> E clan-pytest-with-core> E … in the right operand of the update (//) operator clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:2047:9: clan-pytest-with-core> E 2046| } clan-pytest-with-core> E 2047| // optionalAttrs (toType != null) { clan-pytest-with-core> E | ^ clan-pytest-with-core> E 2048| type = toType; clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:2047:12: clan-pytest-with-core> E 2046| } clan-pytest-with-core> E 2047| // optionalAttrs (toType != null) { clan-pytest-with-core> E | ^ clan-pytest-with-core> E 2048| type = toType; clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'optionalAttrs' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:1492:25: clan-pytest-with-core> E 1491| */ clan-pytest-with-core> E 1492| optionalAttrs = cond: as: if cond then as else { }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1493| 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:1492:29: clan-pytest-with-core> E 1491| */ clan-pytest-with-core> E 1492| optionalAttrs = cond: as: if cond then as else { }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1493| clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:2036:17: clan-pytest-with-core> E 2035| let clan-pytest-with-core> E 2036| opt = attrByPath to { } options; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 2037| in clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'attrByPath' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:89:24: clan-pytest-with-core> E 88| attrByPath = clan-pytest-with-core> E 89| attrPath: default: set: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 90| let clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:106:5: clan-pytest-with-core> E 105| in clan-pytest-with-core> E 106| attrByPath' 0 set; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 107| clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'attrByPath'' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:93:12: clan-pytest-with-core> E 92| attrByPath' = clan-pytest-with-core> E 93| n: s: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 94| ( clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:102:35: clan-pytest-with-core> E 101| in clan-pytest-with-core> E 102| if s ? ${attr} then attrByPath' (n + 1) s.${attr} else default clan-pytest-with-core> E | ^ clan-pytest-with-core> E 103| ) clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'attrByPath'' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:93:12: clan-pytest-with-core> E 92| attrByPath' = clan-pytest-with-core> E 93| n: s: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 94| ( clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:102:35: clan-pytest-with-core> E 101| in clan-pytest-with-core> E 102| if s ? ${attr} then attrByPath' (n + 1) s.${attr} else default clan-pytest-with-core> E | ^ clan-pytest-with-core> E 103| ) clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'attrByPath'' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:93:12: clan-pytest-with-core> E 92| attrByPath' = clan-pytest-with-core> E 93| n: s: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 94| ( clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:102:35: clan-pytest-with-core> E 101| in clan-pytest-with-core> E 102| if s ? ${attr} then attrByPath' (n + 1) s.${attr} else default clan-pytest-with-core> E | ^ clan-pytest-with-core> E 103| ) clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'attrByPath'' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:93:12: clan-pytest-with-core> E 92| attrByPath' = clan-pytest-with-core> E 93| n: s: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 94| ( clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:102:55: clan-pytest-with-core> E 101| in clan-pytest-with-core> E 102| if s ? ${attr} then attrByPath' (n + 1) s.${attr} else default clan-pytest-with-core> E | ^ clan-pytest-with-core> E 103| ) clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:927:37: clan-pytest-with-core> E 926| clan-pytest-with-core> E 927| matchedOptions = mapAttrs (n: v: v.matchedOptions) resultsByName; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 928| clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'matchedOptions' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:893:13: clan-pytest-with-core> E 892| { clan-pytest-with-core> E 893| matchedOptions = evalOptionValue loc opt defns'; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 894| unmatchedDefns = [ ]; clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:893:30: clan-pytest-with-core> E 892| { clan-pytest-with-core> E 893| matchedOptions = evalOptionValue loc opt defns'; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 894| unmatchedDefns = [ ]; clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'evalOptionValue' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1103:15: clan-pytest-with-core> E 1102| evalOptionValue = clan-pytest-with-core> E 1103| loc: opt: defs: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1104| let clan-pytest-with-core> E clan-pytest-with-core> E … in the left operand of the update (//) operator clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1148:5: clan-pytest-with-core> E 1147| warnDeprecation opt clan-pytest-with-core> E 1148| // { clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1149| value = addErrorContext "while evaluating the option `${showOption loc}':" value; 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1141:9: clan-pytest-with-core> E 1140| warnDeprecation = clan-pytest-with-core> E 1141| if (opt.type.deprecationMessage != null) then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1142| warn "The type `types.${opt.type.name}' of option `${showOption loc}' defined in ${showFiles opt.declarations} is deprecated. ${opt.type.deprecationMessage}" clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:890:19: clan-pytest-with-core> E 889| let clan-pytest-with-core> E 890| opt = fixupOptionType loc (mergeOptionDecls loc decls); clan-pytest-with-core> E | ^ clan-pytest-with-core> E 891| in clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'fixupOptionType' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1473:10: clan-pytest-with-core> E 1472| fixupOptionType = clan-pytest-with-core> E 1473| loc: opt: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1474| if opt.type.getSubModules or null == null then 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1474:5: clan-pytest-with-core> E 1473| loc: opt: clan-pytest-with-core> E 1474| if opt.type.getSubModules or null == null then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1475| opt // { type = opt.type or types.unspecified; } clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'type.getSubModules' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/nixos/modules/services/hardware/bluetooth.nix:72:9: clan-pytest-with-core> E 71| settings = mkOption { clan-pytest-with-core> E 72| type = cfgFmt.type; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 73| default = { }; clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/nixos/modules/services/hardware/bluetooth.nix:26:12: clan-pytest-with-core> E 25| clan-pytest-with-core> E 26| cfgFmt = pkgs.formats.ini { }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 27| clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:727:15: clan-pytest-with-core> E 726| extraArgs = mapAttrs ( clan-pytest-with-core> E 727| name: _: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 728| addErrorContext (context name) ( clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the module argument `pkgs' in "/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/nixos/modules/services/hardware/bluetooth.nix": clan-pytest-with-core> E clan-pytest-with-core> E … noting that argument `pkgs` is not externally provided, so querying `_module.args` instead, requiring `config` clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:731:13: clan-pytest-with-core> E 730| "noting that argument `${name}` is not externally provided, so querying `_module.args` instead, requiring `config`" clan-pytest-with-core> E 731| config._module.args.${name} clan-pytest-with-core> E | ^ clan-pytest-with-core> E 732| ) clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/types.nix:1029:18: clan-pytest-with-core> E 1028| value = mapAttrs ( clan-pytest-with-core> E 1029| n: v: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1030| if lazy then clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'optionalValue.value' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1312:5: clan-pytest-with-core> E 1311| clan-pytest-with-core> E 1312| optionalValue = if isDefined then { value = mergedValue; } else { }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1313| }; 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1312:21: clan-pytest-with-core> E 1311| clan-pytest-with-core> E 1312| optionalValue = if isDefined then { value = mergedValue; } else { }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1313| }; clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'values' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1240:11: clan-pytest-with-core> E 1239| { clan-pytest-with-core> E 1240| values = defsSorted; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1241| inherit (defsFiltered) highestPrio; 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1211:11: clan-pytest-with-core> E 1210| # Avoid sorting if we don't have to. clan-pytest-with-core> E 1211| if any (def: def.value._type or "" == "order") defsFiltered.values then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1212| sortProperties defsFiltered.values clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'any' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1211:14: clan-pytest-with-core> E 1210| # Avoid sorting if we don't have to. clan-pytest-with-core> E 1211| if any (def: def.value._type or "" == "order") defsFiltered.values then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1212| sortProperties defsFiltered.values clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1211:19: clan-pytest-with-core> E 1210| # Avoid sorting if we don't have to. clan-pytest-with-core> E 1211| if any (def: def.value._type or "" == "order") defsFiltered.values then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1212| sortProperties defsFiltered.values clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'value._type' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1422:67: clan-pytest-with-core> E 1421| strip = clan-pytest-with-core> E 1422| def: if def.value._type or "" == "override" then def // { value = def.value.content; } else def; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1423| in clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'value.content' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1566:22: clan-pytest-with-core> E 1565| _type = "override"; clan-pytest-with-core> E 1566| inherit priority content; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1567| }; 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/nixos/modules/misc/nixpkgs.nix:107:15: clan-pytest-with-core> E 106| clan-pytest-with-core> E 107| finalPkgs = if opt.pkgs.isDefined then cfg.pkgs.appendOverlays cfg.overlays else defaultPkgs; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 108| clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'pkgs.isDefined' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1154:21: clan-pytest-with-core> E 1153| definitionsWithLocations = res.defsFinal; clan-pytest-with-core> E 1154| inherit (res) isDefined; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1155| inherit (res.checkedAndMerged) valueMeta; clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'isDefined' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1310:5: clan-pytest-with-core> E 1309| clan-pytest-with-core> E 1310| isDefined = defsFinal != [ ]; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1311| clan-pytest-with-core> E clan-pytest-with-core> E (6 duplicate frames omitted) clan-pytest-with-core> E clan-pytest-with-core> E error: attribute 'system' missing clan-pytest-with-core> E at /build/store/nix/store/y3h139bhv4373m1hab367ma4p5i95i2f-source/modules/clan/module.nix:164:24: clan-pytest-with-core> E 163| (lib.modules.importApply ../../nixosModules/machineModules/overridePkgs.nix { clan-pytest-with-core> E 164| pkgs = nixpkgsMatrix.${config.inventory.machines.${name}.nixpkgs}.system.${system}.pkgs; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 165| }) clan-pytest-with-core> E Did you mean systems? 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 0x7fffe63e3790> clan-pytest-with-core> flake_with_sops = 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_shared_generator_allows_machine_specific_differences( clan-pytest-with-core> monkeypatch: pytest.MonkeyPatch, clan-pytest-with-core> flake_with_sops: ClanFlake, clan-pytest-with-core> ) -> None: clan-pytest-with-core> """Test that vars generation doesn't raise an error when two machines clan-pytest-with-core> only differ in machine-specific fields like owner, group and mode. clan-pytest-with-core> """ clan-pytest-with-core> flake = flake_with_sops clan-pytest-with-core> clan-pytest-with-core> machine1_config = flake.machines["machine1"] = create_test_machine_config() clan-pytest-with-core> shared_gen1 = machine1_config["clan"]["core"]["vars"]["generators"][ clan-pytest-with-core> "shared_generator" clan-pytest-with-core> ] clan-pytest-with-core> shared_gen1["share"] = True clan-pytest-with-core> shared_gen1["files"]["file"]["owner"] = "root" clan-pytest-with-core> shared_gen1["files"]["file"]["group"] = "root" clan-pytest-with-core> shared_gen1["files"]["file"]["mode"] = "0400" clan-pytest-with-core> shared_gen1["script"] = 'echo -n "secret" > "$out"/file' clan-pytest-with-core> clan-pytest-with-core> machine2_config = flake.machines["machine2"] = create_test_machine_config() clan-pytest-with-core> shared_gen2 = machine2_config["clan"]["core"]["vars"]["generators"][ clan-pytest-with-core> "shared_generator" clan-pytest-with-core> ] clan-pytest-with-core> shared_gen2["share"] = True clan-pytest-with-core> shared_gen2["files"]["file"]["owner"] = "user" clan-pytest-with-core> shared_gen2["files"]["file"]["group"] = "wheel" clan-pytest-with-core> shared_gen2["files"]["file"]["mode"] = "0440" clan-pytest-with-core> shared_gen2["script"] = 'echo -n "secret" > "$out"/file' clan-pytest-with-core> clan-pytest-with-core> flake.refresh() clan-pytest-with-core> monkeypatch.chdir(flake.path) clan-pytest-with-core> clan-pytest-with-core> > cli.run(["vars", "generate", "--flake", str(flake.path)]) clan-pytest-with-core> clan-pytest-with-core> /build/src/clan_cli/tests/test_vars_shared.py:362: 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/vars/generate.py:33: in generate_command clan-pytest-with-core> run_generators( clan-pytest-with-core> /build/src/clan_lib/vars/generate.py:306: in run_generators clan-pytest-with-core> all_generators = get_generators(machines, full_closure=True) clan-pytest-with-core> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ clan-pytest-with-core> /build/src/clan_lib/vars/generate.py:146: in get_generators clan-pytest-with-core> flake.precache(get_generators_precache_selectors(list(all_machines))) clan-pytest-with-core> /build/src/clan_lib/flake/flake.py:1151: in precache clan-pytest-with-core> self.get_from_nix(not_fetched_selectors) clan-pytest-with-core> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ clan-pytest-with-core> clan-pytest-with-core> self = Flake(identifier='/build/pytest-9i2b2ye9/flake', hash='sha256-QH7g+4maVOJgGHpZIdQTC8BI2Txooc7ZLfIYfi9BvT4=', 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.?secrets.?age.?plugins', 'clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.var...licModule', 'clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.settings.secretModule', ...] 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 while executing:$ clan select 'clanInternals.?secrets.?age.?plugins' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.generators.*.{share,dependencies,prompts,validationHash}' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.generators.*.files.*.{secret,deploy,owner,group,mode,neededFor}' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.?sops.?defaultGroups' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.settings.publicModule' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.settings.secretModule' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.?sops.?secretUploadDirectory' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.?password-store.?passCommand' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.?password-store.?secretLocation' clan-pytest-with-core> E $ clan select 'clanInternals.vars.settings.?recipients' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.?age.?secretLocation' clan-pytest-with-core> E Reason: attribute 'system' missing clan-pytest-with-core> E at /build/store/nix/store/y3h139bhv4373m1hab367ma4p5i95i2f-source/modules/clan/module.nix:164:24: clan-pytest-with-core> E 163| (lib.modules.importApply ../../nixosModules/machineModules/overridePkgs.nix { clan-pytest-with-core> E 164| pkgs = nixpkgsMatrix.${config.inventory.machines.${name}.nixpkgs}.system.${system}.pkgs; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 165| }) clan-pytest-with-core> E Did you mean systems?. 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 setup ----------------------------- clan-pytest-with-core> !! $HOME does not point to a temp directory!! HOME=/build/pytest-9i2b2ye9 clan-pytest-with-core> [localhost] $ clan vars keygen --flake /build/pytest-9i2b2ye9/flake --user admin --no-interactive clan-pytest-with-core> Caller: /build/src/clan_cli/tests/age_keys.py:31::init clan-pytest-with-core> clan-pytest-with-core> Prefetching flake /build/pytest-9i2b2ye9/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/febbcab65441be6ccc547560fd0155faadebbbb7 clan-pytest-with-core> (cached) $ clan select clanInternals.inventoryClass.relativeDirectory 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> git \ clan-pytest-with-core> -C /build/pytest-9i2b2ye9/flake \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-9i2b2ye9/flake/sops/users/admin 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/admin to git clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-9i2b2ye9/flake \ clan-pytest-with-core> diff \ clan-pytest-with-core> --cached --exit-code \ clan-pytest-with-core> -- /build/pytest-9i2b2ye9/flake/sops/users/admin 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-9i2b2ye9/flake \ clan-pytest-with-core> commit \ clan-pytest-with-core> -m 'secrets: add user admin' \ clan-pytest-with-core> --no-verify /build/pytest-9i2b2ye9/flake/sops/users/admin 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/admin to git 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/pytest-9i2b2ye9 clan-pytest-with-core> DEBUG clan_cli.tests.helpers.cli:__init__.py:143 $ clan vars keygen --flake /build/pytest-9i2b2ye9/flake --user admin --no-interactive clan-pytest-with-core> Caller: /build/src/clan_cli/tests/age_keys.py:31::init clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:927 Prefetching flake /build/pytest-9i2b2ye9/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/febbcab65441be6ccc547560fd0155faadebbbb7 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.cmd:__init__.py:143 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> DEBUG clan_lib.cmd:__init__.py:143 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> DEBUG clan_cli.secrets.sops:sops.py:99 Found age public key from a private key in the environment (SOPS_AGE_KEY): age1dhwqzkah943xzc34tc3dlmfayyevcmdmxzjezdgdy33euxwf59vsp3vk3c clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:143 git \ clan-pytest-with-core> -C /build/pytest-9i2b2ye9/flake \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-9i2b2ye9/flake/sops/users/admin 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> DEBUG clan_lib.cmd:__init__.py:143 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> DEBUG clan_lib.git:__init__.py:98 Adding sops/users/admin to git clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:143 git \ clan-pytest-with-core> -C /build/pytest-9i2b2ye9/flake \ clan-pytest-with-core> diff \ clan-pytest-with-core> --cached --exit-code \ clan-pytest-with-core> -- /build/pytest-9i2b2ye9/flake/sops/users/admin 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> DEBUG clan_lib.cmd:__init__.py:143 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> DEBUG clan_lib.cmd:__init__.py:143 git \ clan-pytest-with-core> -C /build/pytest-9i2b2ye9/flake \ clan-pytest-with-core> commit \ clan-pytest-with-core> -m 'secrets: add user admin' \ clan-pytest-with-core> --no-verify /build/pytest-9i2b2ye9/flake/sops/users/admin 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> DEBUG clan_lib.cmd:__init__.py:143 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> INFO clan_lib.git:__init__.py:141 Committed sops/users/admin to git clan-pytest-with-core> ----------------------------- Captured stdout call ----------------------------- clan-pytest-with-core> [main c238f69] flake: update by flake generator clan-pytest-with-core> 4 files changed, 74 insertions(+) clan-pytest-with-core> create mode 100644 machines/machine1/configuration.json clan-pytest-with-core> create mode 100644 machines/machine1/configuration.nix clan-pytest-with-core> create mode 100644 machines/machine2/configuration.json clan-pytest-with-core> create mode 100644 machines/machine2/configuration.nix clan-pytest-with-core> ----------------------------- Captured stderr call ----------------------------- clan-pytest-with-core> Prefetching flake /build/pytest-9i2b2ye9/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/d2c0050d97832c3ac5193485b93705d00938c15e clan-pytest-with-core> (cached) $ clan select clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> Prefetching flake /build/pytest-9i2b2ye9/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/d2c0050d97832c3ac5193485b93705d00938c15e clan-pytest-with-core> (cached) $ clan select clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> [localhost] $ clan vars generate --flake /build/pytest-9i2b2ye9/flake clan-pytest-with-core> Caller: /build/src/clan_cli/tests/test_vars_shared.py:362::test_shared_generator_allows_machine_specific_differences clan-pytest-with-core> clan-pytest-with-core> Prefetching flake /build/pytest-9i2b2ye9/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.cliChecks clan-pytest-with-core> Cache miss for clanInternals.inventoryClass.inventorySerialization.{instances,machines,meta} clan-pytest-with-core> Loading flake cache from file /build/clan-flake-cache/flakes-v2/4d434052395b7214fd336fa770fbde229db8c328 clan-pytest-with-core> Cache miss for clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> Loading flake cache from file /build/clan-flake-cache/flakes-v2/4d434052395b7214fd336fa770fbde229db8c328 clan-pytest-with-core> (cached) $ clan select 'clanInternals.inventoryClass.inventorySerialization.{instances,machines,meta}' clan-pytest-with-core> Precaching selectors: clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.machines clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.instances clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.meta clan-pytest-with-core> - (not cached) clanInternals.?secrets.?age.?plugins clan-pytest-with-core> - (cached) clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.generators.*.{share,dependencies,prompts,validationHash} clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.generators.*.files.*.{secret,deploy,owner,group,mode,neededFor} clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.?sops.?defaultGroups clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.settings.publicModule clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.settings.secretModule clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.?sops.?secretUploadDirectory clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.?password-store.?passCommand clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.?password-store.?secretLocation clan-pytest-with-core> - (not cached) clanInternals.vars.settings.?recipients clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.?age.?secretLocation clan-pytest-with-core> ------------------------------ Captured log call ------------------------------- clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:927 Prefetching flake /build/pytest-9i2b2ye9/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/d2c0050d97832c3ac5193485b93705d00938c15e 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-9i2b2ye9/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/d2c0050d97832c3ac5193485b93705d00938c15e clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1179 (cached) $ clan select clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> DEBUG clan_cli.tests.helpers.cli:__init__.py:143 $ clan vars generate --flake /build/pytest-9i2b2ye9/flake clan-pytest-with-core> Caller: /build/src/clan_cli/tests/test_vars_shared.py:362::test_shared_generator_allows_machine_specific_differences clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:927 Prefetching flake /build/pytest-9i2b2ye9/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.cliChecks clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1174 Cache miss for clanInternals.inventoryClass.inventorySerialization.{instances,machines,meta} clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:789 Loading flake cache from file /build/clan-flake-cache/flakes-v2/4d434052395b7214fd336fa770fbde229db8c328 clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1174 Cache miss for clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:789 Loading flake cache from file /build/clan-flake-cache/flakes-v2/4d434052395b7214fd336fa770fbde229db8c328 clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1179 (cached) $ clan select 'clanInternals.inventoryClass.inventorySerialization.{instances,machines,meta}' clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1144 Precaching selectors: clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.machines clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.instances clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.meta clan-pytest-with-core> - (not cached) clanInternals.?secrets.?age.?plugins clan-pytest-with-core> - (cached) clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.generators.*.{share,dependencies,prompts,validationHash} clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.generators.*.files.*.{secret,deploy,owner,group,mode,neededFor} clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.?sops.?defaultGroups clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.settings.publicModule clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.settings.secretModule clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.?sops.?secretUploadDirectory clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.?password-store.?passCommand clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.?password-store.?secretLocation clan-pytest-with-core> - (not cached) clanInternals.vars.settings.?recipients clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.?age.?secretLocation clan-pytest-with-core> __________________ test_vars_generate_with_directory_setting ___________________ clan-pytest-with-core> [gw11] linux -- Python 3.14.7 /nix/store/3n4qphl9s728sz8frmpqqrv9b1m87g68-python3-3.14.7/bin/python clan-pytest-with-core> clan-pytest-with-core> self = Flake(identifier='/build/pytest-of-nixbld/pytest-0/popen-gw11/test_vars_generate_with_direct0/my-clan', hash='sha256-E...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.?secrets.?age.?plugins', 'clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.gener...ngs.publicModule', 'clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.settings.secretModule', ...] 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> 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/src'), log=, prefix=None, m...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/gaw5w5khrhhka354sgwgdlhflvdsdc70-source?narHash=sha256-EtOgF4r84zsr3kRP+MLh88t7YFNpbrVSfQJB2jBYXaI="; 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": "maybe", "value": "secrets"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "plugins"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "share"}, {"type": "str", "value": "dependencies"}, {"type": "str", "value": "prompts"}, {"type": "str", "value": "validationHash"}]}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "str", "value": "files"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "secret"}, {"type": "str", "value": "deploy"}, {"type": "str", "value": "owner"}, {"type": "str", "value": "group"}, {"type": "str", "value": "mode"}, {"type": "str", "value": "neededFor"}]}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "defaultGroups"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "publicModule"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "secretModule"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "secretUploadDirectory"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "passCommand"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "secretLocation"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "maybe", "value": "recipients"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "secretLocation"}]'"'"''"'"') 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": "maybe", "value": "secrets"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "plugins"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "share"}, {"type": "str", "value": "dependencies"}, {"type": "str", "value": "prompts"}, {"type": "str", "value": "validationHash"}]}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "str", "value": "files"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "secret"}, {"type": "str", "value": "deploy"}, {"type": "str", "value": "owner"}, {"type": "str", "value": "group"}, {"type": "str", "value": "mode"}, {"type": "str", "value": "neededFor"}]}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "defaultGroups"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "publicModule"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "secretModule"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "secretUploadDirectory"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "passCommand"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "secretLocation"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "maybe", "value": "recipients"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "secretLocation"}]'') 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": "maybe", "value": "secrets"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "plugins"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "share"}, {"type": "str", "value": "dependencies"}, {"type": "str", "value": "prompts"}, {"type": "str", "value": "validationHash"}]}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "str", "value": "files"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "secret"}, {"type": "str", "value": "deploy"}, {"type": "str", "value": "owner"}, {"type": "str", "value": "group"}, {"type": "str", "value": "mode"}, {"type": "str", "value": "neededFor"}]}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "defaultGroups"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "publicModule"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "secretModule"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "secretUploadDirectory"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "passCommand"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "secretLocation"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "maybe", "value": "recipients"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "secretLocation"}]'') flake) clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating list element at index 1 clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating attribute 'my_machine' clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/cba1x9mxnwr8b36cw41bya7g6d5v1p7d-source/select.nix:325:37: clan-pytest-with-core> E 324| in clan-pytest-with-core> E 325| builtins.mapAttrs (_: v: recurse selectors (idx + 1) v) filteredAttrs clan-pytest-with-core> E | ^ clan-pytest-with-core> E 326| else if selector.type == "maybe" then 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:325:40: clan-pytest-with-core> E 324| in clan-pytest-with-core> E 325| builtins.mapAttrs (_: v: recurse selectors (idx + 1) v) filteredAttrs clan-pytest-with-core> E | ^ clan-pytest-with-core> E 326| else if selector.type == "maybe" then 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 … from call site clan-pytest-with-core> E at /build/store/nix/store/cba1x9mxnwr8b36cw41bya7g6d5v1p7d-source/select.nix:312:15: clan-pytest-with-core> E 311| else if selector.type == "str" then clan-pytest-with-core> E 312| recurse selectors (idx + 1) (builtins.getAttr selector.value obj) clan-pytest-with-core> E | ^ clan-pytest-with-core> E 313| else if selector.type == "set" then 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 'getAttr' builtin clan-pytest-with-core> E at /build/store/nix/store/cba1x9mxnwr8b36cw41bya7g6d5v1p7d-source/select.nix:312:44: clan-pytest-with-core> E 311| else if selector.type == "str" then clan-pytest-with-core> E 312| recurse selectors (idx + 1) (builtins.getAttr selector.value obj) clan-pytest-with-core> E | ^ clan-pytest-with-core> E 313| else if selector.type == "set" then clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'seq' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:401:18: clan-pytest-with-core> E 400| options = checked options; clan-pytest-with-core> E 401| config = checked (removeAttrs config [ "_module" ]); clan-pytest-with-core> E | ^ clan-pytest-with-core> E 402| _module = checked (config._module); 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:304:9: clan-pytest-with-core> E 303| checkUnmatched = clan-pytest-with-core> E 304| if config._module.check && config._module.freeformType == null && merged.unmatchedDefns != [ ] then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 305| let clan-pytest-with-core> E clan-pytest-with-core> E … in the right operand of the AND (&&) operator clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:304:72: clan-pytest-with-core> E 303| checkUnmatched = clan-pytest-with-core> E 304| if config._module.check && config._module.freeformType == null && merged.unmatchedDefns != [ ] then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 305| let clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'unmatchedDefns' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:940:7: clan-pytest-with-core> E 939| # Transforms unmatchedDefnsByName into a list of definitions clan-pytest-with-core> E 940| unmatchedDefns = clan-pytest-with-core> E | ^ clan-pytest-with-core> E 941| if configs == [ ] then clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'concatLists' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:946:11: clan-pytest-with-core> E 945| else clan-pytest-with-core> E 946| concatLists ( clan-pytest-with-core> E | ^ clan-pytest-with-core> E 947| mapAttrsToList ( clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:948:21: clan-pytest-with-core> E 947| mapAttrsToList ( clan-pytest-with-core> E 948| name: defs: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 949| map ( clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'map' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:949:15: clan-pytest-with-core> E 948| name: defs: clan-pytest-with-core> E 949| map ( clan-pytest-with-core> E | ^ clan-pytest-with-core> E 950| def: clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:932:22: clan-pytest-with-core> E 931| # Propagate all unmatched definitions from nested option sets clan-pytest-with-core> E 932| mapAttrs (n: v: v.unmatchedDefns) resultsByName clan-pytest-with-core> E | ^ clan-pytest-with-core> E 933| # Plus the definitions for the current prefix that don't have a matching option clan-pytest-with-core> E clan-pytest-with-core> E (10 duplicate frames omitted) clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:932:25: clan-pytest-with-core> E 931| # Propagate all unmatched definitions from nested option sets clan-pytest-with-core> E 932| mapAttrs (n: v: v.unmatchedDefns) resultsByName clan-pytest-with-core> E | ^ clan-pytest-with-core> E 933| # Plus the definitions for the current prefix that don't have a matching option clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:876:15: clan-pytest-with-core> E 875| resultsByName = mapAttrs ( clan-pytest-with-core> E 876| name: decls: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 877| # We're descending into attribute ‘name’. 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:888:9: clan-pytest-with-core> E 887| in clan-pytest-with-core> E 888| if length optionDecls == length decls then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 889| let clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'length' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:888:12: clan-pytest-with-core> E 887| in clan-pytest-with-core> E 888| if length optionDecls == length decls then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 889| let clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'filter' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:882:25: clan-pytest-with-core> E 881| defns' = rawDefinitionsByName.${name} or [ ]; clan-pytest-with-core> E 882| optionDecls = filter ( clan-pytest-with-core> E | ^ clan-pytest-with-core> E 883| m: clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:883:13: clan-pytest-with-core> E 882| optionDecls = filter ( clan-pytest-with-core> E 883| m: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 884| m.options ? _type clan-pytest-with-core> E clan-pytest-with-core> E … in the left operand of the AND (&&) operator clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:885:13: clan-pytest-with-core> E 884| m.options ? _type clan-pytest-with-core> E 885| && (m.options._type == "option" || throwDeclarationTypeError loc m.options._type m._file) clan-pytest-with-core> E | ^ clan-pytest-with-core> E 886| ) decls; clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'options' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:807:15: clan-pytest-with-core> E 806| pos = unsafeGetAttrPos n subtree; clan-pytest-with-core> E 807| options = option; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 808| }) subtree clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:289:73: clan-pytest-with-core> E 288| len = length attrPath; clan-pytest-with-core> E 289| atDepth = n: if n == len then value else { ${elemAt attrPath n} = atDepth (n + 1); }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 290| in clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'atDepth' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:289:17: clan-pytest-with-core> E 288| len = length attrPath; clan-pytest-with-core> E 289| atDepth = n: if n == len then value else { ${elemAt attrPath n} = atDepth (n + 1); }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 290| in clan-pytest-with-core> E clan-pytest-with-core> E … in the right operand of the update (//) operator clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:2047:9: clan-pytest-with-core> E 2046| } clan-pytest-with-core> E 2047| // optionalAttrs (toType != null) { clan-pytest-with-core> E | ^ clan-pytest-with-core> E 2048| type = toType; clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:2047:12: clan-pytest-with-core> E 2046| } clan-pytest-with-core> E 2047| // optionalAttrs (toType != null) { clan-pytest-with-core> E | ^ clan-pytest-with-core> E 2048| type = toType; clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'optionalAttrs' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:1492:25: clan-pytest-with-core> E 1491| */ clan-pytest-with-core> E 1492| optionalAttrs = cond: as: if cond then as else { }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1493| 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:1492:29: clan-pytest-with-core> E 1491| */ clan-pytest-with-core> E 1492| optionalAttrs = cond: as: if cond then as else { }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1493| clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:2036:17: clan-pytest-with-core> E 2035| let clan-pytest-with-core> E 2036| opt = attrByPath to { } options; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 2037| in clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'attrByPath' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:89:24: clan-pytest-with-core> E 88| attrByPath = clan-pytest-with-core> E 89| attrPath: default: set: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 90| let clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:106:5: clan-pytest-with-core> E 105| in clan-pytest-with-core> E 106| attrByPath' 0 set; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 107| clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'attrByPath'' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:93:12: clan-pytest-with-core> E 92| attrByPath' = clan-pytest-with-core> E 93| n: s: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 94| ( clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:102:35: clan-pytest-with-core> E 101| in clan-pytest-with-core> E 102| if s ? ${attr} then attrByPath' (n + 1) s.${attr} else default clan-pytest-with-core> E | ^ clan-pytest-with-core> E 103| ) clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'attrByPath'' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:93:12: clan-pytest-with-core> E 92| attrByPath' = clan-pytest-with-core> E 93| n: s: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 94| ( clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:102:35: clan-pytest-with-core> E 101| in clan-pytest-with-core> E 102| if s ? ${attr} then attrByPath' (n + 1) s.${attr} else default clan-pytest-with-core> E | ^ clan-pytest-with-core> E 103| ) clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'attrByPath'' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:93:12: clan-pytest-with-core> E 92| attrByPath' = clan-pytest-with-core> E 93| n: s: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 94| ( clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:102:35: clan-pytest-with-core> E 101| in clan-pytest-with-core> E 102| if s ? ${attr} then attrByPath' (n + 1) s.${attr} else default clan-pytest-with-core> E | ^ clan-pytest-with-core> E 103| ) clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'attrByPath'' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:93:12: clan-pytest-with-core> E 92| attrByPath' = clan-pytest-with-core> E 93| n: s: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 94| ( clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:102:55: clan-pytest-with-core> E 101| in clan-pytest-with-core> E 102| if s ? ${attr} then attrByPath' (n + 1) s.${attr} else default clan-pytest-with-core> E | ^ clan-pytest-with-core> E 103| ) clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:927:37: clan-pytest-with-core> E 926| clan-pytest-with-core> E 927| matchedOptions = mapAttrs (n: v: v.matchedOptions) resultsByName; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 928| clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'matchedOptions' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:893:13: clan-pytest-with-core> E 892| { clan-pytest-with-core> E 893| matchedOptions = evalOptionValue loc opt defns'; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 894| unmatchedDefns = [ ]; clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:893:30: clan-pytest-with-core> E 892| { clan-pytest-with-core> E 893| matchedOptions = evalOptionValue loc opt defns'; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 894| unmatchedDefns = [ ]; clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'evalOptionValue' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1103:15: clan-pytest-with-core> E 1102| evalOptionValue = clan-pytest-with-core> E 1103| loc: opt: defs: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1104| let clan-pytest-with-core> E clan-pytest-with-core> E … in the left operand of the update (//) operator clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1148:5: clan-pytest-with-core> E 1147| warnDeprecation opt clan-pytest-with-core> E 1148| // { clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1149| value = addErrorContext "while evaluating the option `${showOption loc}':" value; 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1141:9: clan-pytest-with-core> E 1140| warnDeprecation = clan-pytest-with-core> E 1141| if (opt.type.deprecationMessage != null) then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1142| warn "The type `types.${opt.type.name}' of option `${showOption loc}' defined in ${showFiles opt.declarations} is deprecated. ${opt.type.deprecationMessage}" clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:890:19: clan-pytest-with-core> E 889| let clan-pytest-with-core> E 890| opt = fixupOptionType loc (mergeOptionDecls loc decls); clan-pytest-with-core> E | ^ clan-pytest-with-core> E 891| in clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'fixupOptionType' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1473:10: clan-pytest-with-core> E 1472| fixupOptionType = clan-pytest-with-core> E 1473| loc: opt: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1474| if opt.type.getSubModules or null == null then 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1474:5: clan-pytest-with-core> E 1473| loc: opt: clan-pytest-with-core> E 1474| if opt.type.getSubModules or null == null then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1475| opt // { type = opt.type or types.unspecified; } clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'type.getSubModules' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/nixos/modules/services/hardware/bluetooth.nix:72:9: clan-pytest-with-core> E 71| settings = mkOption { clan-pytest-with-core> E 72| type = cfgFmt.type; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 73| default = { }; clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/nixos/modules/services/hardware/bluetooth.nix:26:12: clan-pytest-with-core> E 25| clan-pytest-with-core> E 26| cfgFmt = pkgs.formats.ini { }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 27| clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:727:15: clan-pytest-with-core> E 726| extraArgs = mapAttrs ( clan-pytest-with-core> E 727| name: _: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 728| addErrorContext (context name) ( clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the module argument `pkgs' in "/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/nixos/modules/services/hardware/bluetooth.nix": clan-pytest-with-core> E clan-pytest-with-core> E … noting that argument `pkgs` is not externally provided, so querying `_module.args` instead, requiring `config` clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:731:13: clan-pytest-with-core> E 730| "noting that argument `${name}` is not externally provided, so querying `_module.args` instead, requiring `config`" clan-pytest-with-core> E 731| config._module.args.${name} clan-pytest-with-core> E | ^ clan-pytest-with-core> E 732| ) clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/types.nix:1029:18: clan-pytest-with-core> E 1028| value = mapAttrs ( clan-pytest-with-core> E 1029| n: v: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1030| if lazy then clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'optionalValue.value' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1312:5: clan-pytest-with-core> E 1311| clan-pytest-with-core> E 1312| optionalValue = if isDefined then { value = mergedValue; } else { }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1313| }; 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1312:21: clan-pytest-with-core> E 1311| clan-pytest-with-core> E 1312| optionalValue = if isDefined then { value = mergedValue; } else { }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1313| }; clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'values' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1240:11: clan-pytest-with-core> E 1239| { clan-pytest-with-core> E 1240| values = defsSorted; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1241| inherit (defsFiltered) highestPrio; 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1211:11: clan-pytest-with-core> E 1210| # Avoid sorting if we don't have to. clan-pytest-with-core> E 1211| if any (def: def.value._type or "" == "order") defsFiltered.values then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1212| sortProperties defsFiltered.values clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'any' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1211:14: clan-pytest-with-core> E 1210| # Avoid sorting if we don't have to. clan-pytest-with-core> E 1211| if any (def: def.value._type or "" == "order") defsFiltered.values then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1212| sortProperties defsFiltered.values clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1211:19: clan-pytest-with-core> E 1210| # Avoid sorting if we don't have to. clan-pytest-with-core> E 1211| if any (def: def.value._type or "" == "order") defsFiltered.values then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1212| sortProperties defsFiltered.values clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'value._type' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1422:67: clan-pytest-with-core> E 1421| strip = clan-pytest-with-core> E 1422| def: if def.value._type or "" == "override" then def // { value = def.value.content; } else def; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1423| in clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'value.content' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1566:22: clan-pytest-with-core> E 1565| _type = "override"; clan-pytest-with-core> E 1566| inherit priority content; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1567| }; 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/nixos/modules/misc/nixpkgs.nix:107:15: clan-pytest-with-core> E 106| clan-pytest-with-core> E 107| finalPkgs = if opt.pkgs.isDefined then cfg.pkgs.appendOverlays cfg.overlays else defaultPkgs; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 108| clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'pkgs.isDefined' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1154:21: clan-pytest-with-core> E 1153| definitionsWithLocations = res.defsFinal; clan-pytest-with-core> E 1154| inherit (res) isDefined; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1155| inherit (res.checkedAndMerged) valueMeta; clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'isDefined' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1310:5: clan-pytest-with-core> E 1309| clan-pytest-with-core> E 1310| isDefined = defsFinal != [ ]; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1311| clan-pytest-with-core> E clan-pytest-with-core> E (6 duplicate frames omitted) clan-pytest-with-core> E clan-pytest-with-core> E error: attribute 'system' missing clan-pytest-with-core> E at /build/store/nix/store/y3h139bhv4373m1hab367ma4p5i95i2f-source/modules/clan/module.nix:164:24: clan-pytest-with-core> E 163| (lib.modules.importApply ../../nixosModules/machineModules/overridePkgs.nix { clan-pytest-with-core> E 164| pkgs = nixpkgsMatrix.${config.inventory.machines.${name}.nixpkgs}.system.${system}.pkgs; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 165| }) clan-pytest-with-core> E Did you mean systems? clan-pytest-with-core> E clan-pytest-with-core> E Return Code: 1 clan-pytest-with-core> clan-pytest-with-core> 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> clan_flake = .factory at 0x7fffe5966a30> clan-pytest-with-core> sops_setup = 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_vars_generate_with_directory_setting( clan-pytest-with-core> clan_flake: Callable[..., Flake], clan-pytest-with-core> sops_setup: SopsSetup, clan-pytest-with-core> ) -> None: clan-pytest-with-core> """Test that vars generate creates files in the custom directory.""" clan-pytest-with-core> flake = clan_flake(raw=CLAN_NIX_WITH_DIRECTORY_AND_MACHINE) clan-pytest-with-core> clan_dir = flake.path / "clan" clan-pytest-with-core> clan_dir.mkdir(exist_ok=True) clan-pytest-with-core> clan-pytest-with-core> init_git(flake.path) clan-pytest-with-core> sops_setup.init(flake.path) clan-pytest-with-core> clan-pytest-with-core> > cli.run(["vars", "generate", "--flake", str(flake.path), "my_machine"]) clan-pytest-with-core> clan-pytest-with-core> clan_lib/api/directory_settings_test.py:388: clan-pytest-with-core> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ clan-pytest-with-core> clan_cli/tests/helpers/cli.py:22: in run clan-pytest-with-core> parsed.func(parsed) clan-pytest-with-core> clan_cli/vars/generate.py:33: in generate_command clan-pytest-with-core> run_generators( clan-pytest-with-core> clan_lib/vars/generate.py:306: in run_generators clan-pytest-with-core> all_generators = get_generators(machines, full_closure=True) clan-pytest-with-core> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ clan-pytest-with-core> clan_lib/vars/generate.py:146: in get_generators clan-pytest-with-core> flake.precache(get_generators_precache_selectors(list(all_machines))) clan-pytest-with-core> clan_lib/flake/flake.py:1151: in precache clan-pytest-with-core> self.get_from_nix(not_fetched_selectors) clan-pytest-with-core> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ clan-pytest-with-core> clan-pytest-with-core> self = Flake(identifier='/build/pytest-of-nixbld/pytest-0/popen-gw11/test_vars_generate_with_direct0/my-clan', hash='sha256-E...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.?secrets.?age.?plugins', 'clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.gener...ngs.publicModule', 'clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.settings.secretModule', ...] 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 while executing:$ clan select 'clanInternals.?secrets.?age.?plugins' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.generators.*.{share,dependencies,prompts,validationHash}' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.generators.*.files.*.{secret,deploy,owner,group,mode,neededFor}' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.?sops.?defaultGroups' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.settings.publicModule' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.settings.secretModule' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.?sops.?secretUploadDirectory' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.?password-store.?passCommand' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.?password-store.?secretLocation' clan-pytest-with-core> E $ clan select 'clanInternals.vars.settings.?recipients' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.?age.?secretLocation' clan-pytest-with-core> E Reason: attribute 'system' missing clan-pytest-with-core> E at /build/store/nix/store/y3h139bhv4373m1hab367ma4p5i95i2f-source/modules/clan/module.nix:164:24: clan-pytest-with-core> E 163| (lib.modules.importApply ../../nixosModules/machineModules/overridePkgs.nix { clan-pytest-with-core> E 164| pkgs = nixpkgsMatrix.${config.inventory.machines.${name}.nixpkgs}.system.${system}.pkgs; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 165| }) clan-pytest-with-core> E Did you mean systems?. Use flag '--debug' to see full nix trace. clan-pytest-with-core> clan-pytest-with-core> clan_lib/flake/flake.py:1094: ClanSelectError clan-pytest-with-core> ----------------------------- Captured stdout call ----------------------------- clan-pytest-with-core> Reinitialized existing Git repository in /build/pytest-of-nixbld/pytest-0/popen-gw11/test_vars_generate_with_direct0/my-clan/.git/ clan-pytest-with-core> [master f9a904e] Initial commit clan-pytest-with-core> 1 file changed, 17 insertions(+), 1 deletion(-) clan-pytest-with-core> ----------------------------- Captured stderr call ----------------------------- clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-of-nixbld/pytest-0/popen-gw11/test_vars_generate_with_direct0/my-clan \ clan-pytest-with-core> init clan-pytest-with-core> Caller: ~/src/clan_lib/clan/create.py:156::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: ~/src/clan_lib/clan/create.py:156::create_clan clan-pytest-with-core> clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-of-nixbld/pytest-0/popen-gw11/test_vars_generate_with_direct0/my-clan \ clan-pytest-with-core> add \ clan-pytest-with-core> . clan-pytest-with-core> Caller: ~/src/clan_lib/clan/create.py:157::create_clan clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: ~/src/clan_lib/clan/create.py:157::create_clan clan-pytest-with-core> clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-of-nixbld/pytest-0/popen-gw11/test_vars_generate_with_direct0/my-clan \ clan-pytest-with-core> config \ clan-pytest-with-core> user.name clan-pytest-with-core> Caller: ~/src/clan_lib/clan/create.py:160::create_clan clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 1 clan-pytest-with-core> Caller: ~/src/clan_lib/clan/create.py:160::create_clan clan-pytest-with-core> clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-of-nixbld/pytest-0/popen-gw11/test_vars_generate_with_direct0/my-clan \ clan-pytest-with-core> config \ clan-pytest-with-core> user.name \ clan-pytest-with-core> clan-tool clan-pytest-with-core> Caller: ~/src/clan_lib/clan/create.py:165::create_clan clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: ~/src/clan_lib/clan/create.py:165::create_clan clan-pytest-with-core> clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-of-nixbld/pytest-0/popen-gw11/test_vars_generate_with_direct0/my-clan \ clan-pytest-with-core> config \ clan-pytest-with-core> user.email clan-pytest-with-core> Caller: ~/src/clan_lib/clan/create.py:167::create_clan clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 1 clan-pytest-with-core> Caller: ~/src/clan_lib/clan/create.py:167::create_clan clan-pytest-with-core> clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-of-nixbld/pytest-0/popen-gw11/test_vars_generate_with_direct0/my-clan \ clan-pytest-with-core> config \ clan-pytest-with-core> user.email \ clan-pytest-with-core> clan@example.com clan-pytest-with-core> Caller: ~/src/clan_lib/clan/create.py:172::create_clan clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: ~/src/clan_lib/clan/create.py:172::create_clan clan-pytest-with-core> clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-of-nixbld/pytest-0/popen-gw11/test_vars_generate_with_direct0/my-clan \ clan-pytest-with-core> add \ clan-pytest-with-core> . clan-pytest-with-core> Caller: ~/src/clan_lib/clan/create.py:186::create_clan clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: ~/src/clan_lib/clan/create.py:186::create_clan clan-pytest-with-core> clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-of-nixbld/pytest-0/popen-gw11/test_vars_generate_with_direct0/my-clan \ clan-pytest-with-core> commit \ clan-pytest-with-core> -m 'Initial commit' clan-pytest-with-core> Caller: ~/src/clan_lib/clan/create.py:187::create_clan clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: ~/src/clan_lib/clan/create.py:187::create_clan clan-pytest-with-core> clan-pytest-with-core> Prefetching flake /build/pytest-of-nixbld/pytest-0/popen-gw11/test_vars_generate_with_direct0/my-clan 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/c034a164aa1321b113259b8b85694bd30a06e4b6 clan-pytest-with-core> (cached) $ clan select 'clanInternals.inventoryClass.inventorySerialization.{instances,machines,meta}' clan-pytest-with-core> Prefetching flake /build/pytest-of-nixbld/pytest-0/popen-gw11/test_vars_generate_with_direct0/my-clan clan-pytest-with-core> warning: you don't have Internet access; disabling some network-dependent features clan-pytest-with-core> warning: re-init: ignored --initial-branch=main clan-pytest-with-core> [localhost] $ clan vars keygen --flake /build/pytest-of-nixbld/pytest-0/popen-gw11/test_vars_generate_with_direct0/my-clan --user admin --no-interactive clan-pytest-with-core> Caller: ~/src/clan_cli/tests/age_keys.py:31::init clan-pytest-with-core> clan-pytest-with-core> Prefetching flake /build/pytest-of-nixbld/pytest-0/popen-gw11/test_vars_generate_with_direct0/my-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.inventoryClass.relativeDirectory clan-pytest-with-core> echo '<>' | age-keygen \ clan-pytest-with-core> -y clan-pytest-with-core> Caller: ~/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: ~/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> git \ clan-pytest-with-core> -C /build/pytest-of-nixbld/pytest-0/popen-gw11/test_vars_generate_with_direct0/my-clan \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-of-nixbld/pytest-0/popen-gw11/test_vars_generate_with_direct0/my-clan/clan/sops/users/admin clan-pytest-with-core> Caller: ~/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: ~/src/clan_lib/git/__init__.py:89::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Adding clan/sops/users/admin to git clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-of-nixbld/pytest-0/popen-gw11/test_vars_generate_with_direct0/my-clan \ clan-pytest-with-core> diff \ clan-pytest-with-core> --cached --exit-code \ clan-pytest-with-core> -- /build/pytest-of-nixbld/pytest-0/popen-gw11/test_vars_generate_with_direct0/my-clan/clan/sops/users/admin clan-pytest-with-core> Caller: ~/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: ~/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-of-nixbld/pytest-0/popen-gw11/test_vars_generate_with_direct0/my-clan \ clan-pytest-with-core> commit \ clan-pytest-with-core> -m 'secrets: add user admin' \ clan-pytest-with-core> --no-verify /build/pytest-of-nixbld/pytest-0/popen-gw11/test_vars_generate_with_direct0/my-clan/clan/sops/users/admin clan-pytest-with-core> Caller: ~/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: ~/src/clan_lib/git/__init__.py:131::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> Committed clan/sops/users/admin to git clan-pytest-with-core> [localhost] $ clan vars generate --flake /build/pytest-of-nixbld/pytest-0/popen-gw11/test_vars_generate_with_direct0/my-clan my_machine clan-pytest-with-core> Caller: ~/src/clan_lib/api/directory_settings_test.py:388::test_vars_generate_with_directory_setting clan-pytest-with-core> clan-pytest-with-core> Prefetching flake /build/pytest-of-nixbld/pytest-0/popen-gw11/test_vars_generate_with_direct0/my-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.cliChecks clan-pytest-with-core> Cache miss for clanInternals.inventoryClass.inventorySerialization.{instances,machines,meta} clan-pytest-with-core> Loading flake cache from file /build/clan-flake-cache/flakes-v2/fa0a5026a0a6cfed6d6f682ad12875345d1a8066 clan-pytest-with-core> Cache miss for clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> Loading flake cache from file /build/clan-flake-cache/flakes-v2/fa0a5026a0a6cfed6d6f682ad12875345d1a8066 clan-pytest-with-core> (cached) $ clan select 'clanInternals.inventoryClass.inventorySerialization.{instances,machines,meta}' clan-pytest-with-core> Precaching selectors: clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.machines clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.instances clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.meta clan-pytest-with-core> - (not cached) clanInternals.?secrets.?age.?plugins clan-pytest-with-core> - (cached) clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.generators.*.{share,dependencies,prompts,validationHash} clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.generators.*.files.*.{secret,deploy,owner,group,mode,neededFor} clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.?sops.?defaultGroups clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.settings.publicModule clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.settings.secretModule clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.?sops.?secretUploadDirectory clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.?password-store.?passCommand clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.?password-store.?secretLocation clan-pytest-with-core> - (not cached) clanInternals.vars.settings.?recipients clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.?age.?secretLocation clan-pytest-with-core> ------------------------------ Captured log call ------------------------------- clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:143 git \ clan-pytest-with-core> -C /build/pytest-of-nixbld/pytest-0/popen-gw11/test_vars_generate_with_direct0/my-clan \ clan-pytest-with-core> init clan-pytest-with-core> Caller: ~/src/clan_lib/clan/create.py:156::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:143 Command exited with return code 0 clan-pytest-with-core> Caller: ~/src/clan_lib/clan/create.py:156::create_clan clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:143 git \ clan-pytest-with-core> -C /build/pytest-of-nixbld/pytest-0/popen-gw11/test_vars_generate_with_direct0/my-clan \ clan-pytest-with-core> add \ clan-pytest-with-core> . clan-pytest-with-core> Caller: ~/src/clan_lib/clan/create.py:157::create_clan clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:143 Command exited with return code 0 clan-pytest-with-core> Caller: ~/src/clan_lib/clan/create.py:157::create_clan clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:143 git \ clan-pytest-with-core> -C /build/pytest-of-nixbld/pytest-0/popen-gw11/test_vars_generate_with_direct0/my-clan \ clan-pytest-with-core> config \ clan-pytest-with-core> user.name clan-pytest-with-core> Caller: ~/src/clan_lib/clan/create.py:160::create_clan clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:143 Command exited with return code 1 clan-pytest-with-core> Caller: ~/src/clan_lib/clan/create.py:160::create_clan clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:143 git \ clan-pytest-with-core> -C /build/pytest-of-nixbld/pytest-0/popen-gw11/test_vars_generate_with_direct0/my-clan \ clan-pytest-with-core> config \ clan-pytest-with-core> user.name \ clan-pytest-with-core> clan-tool clan-pytest-with-core> Caller: ~/src/clan_lib/clan/create.py:165::create_clan clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:143 Command exited with return code 0 clan-pytest-with-core> Caller: ~/src/clan_lib/clan/create.py:165::create_clan clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:143 git \ clan-pytest-with-core> -C /build/pytest-of-nixbld/pytest-0/popen-gw11/test_vars_generate_with_direct0/my-clan \ clan-pytest-with-core> config \ clan-pytest-with-core> user.email clan-pytest-with-core> Caller: ~/src/clan_lib/clan/create.py:167::create_clan clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:143 Command exited with return code 1 clan-pytest-with-core> Caller: ~/src/clan_lib/clan/create.py:167::create_clan clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:143 git \ clan-pytest-with-core> -C /build/pytest-of-nixbld/pytest-0/popen-gw11/test_vars_generate_with_direct0/my-clan \ clan-pytest-with-core> config \ clan-pytest-with-core> user.email \ clan-pytest-with-core> clan@example.com clan-pytest-with-core> Caller: ~/src/clan_lib/clan/create.py:172::create_clan clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:143 Command exited with return code 0 clan-pytest-with-core> Caller: ~/src/clan_lib/clan/create.py:172::create_clan clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:143 git \ clan-pytest-with-core> -C /build/pytest-of-nixbld/pytest-0/popen-gw11/test_vars_generate_with_direct0/my-clan \ clan-pytest-with-core> add \ clan-pytest-with-core> . clan-pytest-with-core> Caller: ~/src/clan_lib/clan/create.py:186::create_clan clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:143 Command exited with return code 0 clan-pytest-with-core> Caller: ~/src/clan_lib/clan/create.py:186::create_clan clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:143 git \ clan-pytest-with-core> -C /build/pytest-of-nixbld/pytest-0/popen-gw11/test_vars_generate_with_direct0/my-clan \ clan-pytest-with-core> commit \ clan-pytest-with-core> -m 'Initial commit' clan-pytest-with-core> Caller: ~/src/clan_lib/clan/create.py:187::create_clan clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:143 Command exited with return code 0 clan-pytest-with-core> Caller: ~/src/clan_lib/clan/create.py:187::create_clan clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:927 Prefetching flake /build/pytest-of-nixbld/pytest-0/popen-gw11/test_vars_generate_with_direct0/my-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:789 Loading flake cache from file /build/clan-flake-cache/flakes-v2/c034a164aa1321b113259b8b85694bd30a06e4b6 clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1179 (cached) $ clan select 'clanInternals.inventoryClass.inventorySerialization.{instances,machines,meta}' clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:927 Prefetching flake /build/pytest-of-nixbld/pytest-0/popen-gw11/test_vars_generate_with_direct0/my-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_cli.tests.helpers.cli:__init__.py:143 $ clan vars keygen --flake /build/pytest-of-nixbld/pytest-0/popen-gw11/test_vars_generate_with_direct0/my-clan --user admin --no-interactive clan-pytest-with-core> Caller: ~/src/clan_cli/tests/age_keys.py:31::init clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:927 Prefetching flake /build/pytest-of-nixbld/pytest-0/popen-gw11/test_vars_generate_with_direct0/my-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.inventoryClass.relativeDirectory clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:143 echo '<>' | age-keygen \ clan-pytest-with-core> -y clan-pytest-with-core> Caller: ~/src/clan_cli/secrets/sops.py:372::get_public_age_key_from_private_key clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:143 Command exited with return code 0 clan-pytest-with-core> Caller: ~/src/clan_cli/secrets/sops.py:372::get_public_age_key_from_private_key clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_cli.secrets.sops:sops.py:99 Found age public key from a private key in the environment (SOPS_AGE_KEY): age1dhwqzkah943xzc34tc3dlmfayyevcmdmxzjezdgdy33euxwf59vsp3vk3c clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:143 git \ clan-pytest-with-core> -C /build/pytest-of-nixbld/pytest-0/popen-gw11/test_vars_generate_with_direct0/my-clan \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-of-nixbld/pytest-0/popen-gw11/test_vars_generate_with_direct0/my-clan/clan/sops/users/admin clan-pytest-with-core> Caller: ~/src/clan_lib/git/__init__.py:89::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:143 Command exited with return code 0 clan-pytest-with-core> Caller: ~/src/clan_lib/git/__init__.py:89::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.git:__init__.py:98 Adding clan/sops/users/admin to git clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:143 git \ clan-pytest-with-core> -C /build/pytest-of-nixbld/pytest-0/popen-gw11/test_vars_generate_with_direct0/my-clan \ clan-pytest-with-core> diff \ clan-pytest-with-core> --cached --exit-code \ clan-pytest-with-core> -- /build/pytest-of-nixbld/pytest-0/popen-gw11/test_vars_generate_with_direct0/my-clan/clan/sops/users/admin clan-pytest-with-core> Caller: ~/src/clan_lib/git/__init__.py:111::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:143 Command exited with return code 1 clan-pytest-with-core> Caller: ~/src/clan_lib/git/__init__.py:111::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:143 git \ clan-pytest-with-core> -C /build/pytest-of-nixbld/pytest-0/popen-gw11/test_vars_generate_with_direct0/my-clan \ clan-pytest-with-core> commit \ clan-pytest-with-core> -m 'secrets: add user admin' \ clan-pytest-with-core> --no-verify /build/pytest-of-nixbld/pytest-0/popen-gw11/test_vars_generate_with_direct0/my-clan/clan/sops/users/admin clan-pytest-with-core> Caller: ~/src/clan_lib/git/__init__.py:131::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:143 Command exited with return code 0 clan-pytest-with-core> Caller: ~/src/clan_lib/git/__init__.py:131::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> INFO clan_lib.git:__init__.py:141 Committed clan/sops/users/admin to git clan-pytest-with-core> DEBUG clan_cli.tests.helpers.cli:__init__.py:143 $ clan vars generate --flake /build/pytest-of-nixbld/pytest-0/popen-gw11/test_vars_generate_with_direct0/my-clan my_machine clan-pytest-with-core> Caller: ~/src/clan_lib/api/directory_settings_test.py:388::test_vars_generate_with_directory_setting clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:927 Prefetching flake /build/pytest-of-nixbld/pytest-0/popen-gw11/test_vars_generate_with_direct0/my-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.cliChecks clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1174 Cache miss for clanInternals.inventoryClass.inventorySerialization.{instances,machines,meta} clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:789 Loading flake cache from file /build/clan-flake-cache/flakes-v2/fa0a5026a0a6cfed6d6f682ad12875345d1a8066 clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1174 Cache miss for clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:789 Loading flake cache from file /build/clan-flake-cache/flakes-v2/fa0a5026a0a6cfed6d6f682ad12875345d1a8066 clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1179 (cached) $ clan select 'clanInternals.inventoryClass.inventorySerialization.{instances,machines,meta}' clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1144 Precaching selectors: clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.machines clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.instances clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.meta clan-pytest-with-core> - (not cached) clanInternals.?secrets.?age.?plugins clan-pytest-with-core> - (cached) clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.generators.*.{share,dependencies,prompts,validationHash} clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.generators.*.files.*.{secret,deploy,owner,group,mode,neededFor} clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.?sops.?defaultGroups clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.settings.publicModule clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.settings.secretModule clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.?sops.?secretUploadDirectory clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.?password-store.?passCommand clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.?password-store.?secretLocation clan-pytest-with-core> - (not cached) clanInternals.vars.settings.?recipients clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.?age.?secretLocation clan-pytest-with-core> ___________ test_password_store_set_shared_var_for_multiple_machines ___________ clan-pytest-with-core> [gw3] linux -- Python 3.14.7 /nix/store/3n4qphl9s728sz8frmpqqrv9b1m87g68-python3-3.14.7/bin/python clan-pytest-with-core> clan-pytest-with-core> self = Flake(identifier='/build/pytest-lbb72f9t/flake', hash='sha256-bh145vLGfneOqmutdNZGG5Xx8epIXr1dY0I6pTyYLRk=', 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.?secrets.?age.?plugins', 'clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.var...licModule', 'clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.settings.secretModule', ...] 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-lbb72f9t/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/rxa86vg28h94zndaa2fhxajqzf28x7kz-source?narHash=sha256-bh145vLGfneOqmutdNZGG5Xx8epIXr1dY0I6pTyYLRk="; 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": "maybe", "value": "secrets"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "plugins"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "share"}, {"type": "str", "value": "dependencies"}, {"type": "str", "value": "prompts"}, {"type": "str", "value": "validationHash"}]}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "str", "value": "files"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "secret"}, {"type": "str", "value": "deploy"}, {"type": "str", "value": "owner"}, {"type": "str", "value": "group"}, {"type": "str", "value": "mode"}, {"type": "str", "value": "neededFor"}]}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "defaultGroups"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "publicModule"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "secretModule"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "secretUploadDirectory"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "passCommand"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "secretLocation"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "maybe", "value": "recipients"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "secretLocation"}]'"'"''"'"') 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": "maybe", "value": "secrets"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "plugins"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "share"}, {"type": "str", "value": "dependencies"}, {"type": "str", "value": "prompts"}, {"type": "str", "value": "validationHash"}]}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "str", "value": "files"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "secret"}, {"type": "str", "value": "deploy"}, {"type": "str", "value": "owner"}, {"type": "str", "value": "group"}, {"type": "str", "value": "mode"}, {"type": "str", "value": "neededFor"}]}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "defaultGroups"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "publicModule"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "secretModule"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "secretUploadDirectory"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "passCommand"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "secretLocation"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "maybe", "value": "recipients"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "secretLocation"}]'') 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": "maybe", "value": "secrets"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "plugins"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "share"}, {"type": "str", "value": "dependencies"}, {"type": "str", "value": "prompts"}, {"type": "str", "value": "validationHash"}]}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "str", "value": "files"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "secret"}, {"type": "str", "value": "deploy"}, {"type": "str", "value": "owner"}, {"type": "str", "value": "group"}, {"type": "str", "value": "mode"}, {"type": "str", "value": "neededFor"}]}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "defaultGroups"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "publicModule"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "secretModule"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "secretUploadDirectory"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "passCommand"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "secretLocation"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "maybe", "value": "recipients"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "secretLocation"}]'') flake) clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating list element at index 1 clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating attribute 'machine1' clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/cba1x9mxnwr8b36cw41bya7g6d5v1p7d-source/select.nix:325:37: clan-pytest-with-core> E 324| in clan-pytest-with-core> E 325| builtins.mapAttrs (_: v: recurse selectors (idx + 1) v) filteredAttrs clan-pytest-with-core> E | ^ clan-pytest-with-core> E 326| else if selector.type == "maybe" then 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:325:40: clan-pytest-with-core> E 324| in clan-pytest-with-core> E 325| builtins.mapAttrs (_: v: recurse selectors (idx + 1) v) filteredAttrs clan-pytest-with-core> E | ^ clan-pytest-with-core> E 326| else if selector.type == "maybe" then 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 … from call site clan-pytest-with-core> E at /build/store/nix/store/cba1x9mxnwr8b36cw41bya7g6d5v1p7d-source/select.nix:312:15: clan-pytest-with-core> E 311| else if selector.type == "str" then clan-pytest-with-core> E 312| recurse selectors (idx + 1) (builtins.getAttr selector.value obj) clan-pytest-with-core> E | ^ clan-pytest-with-core> E 313| else if selector.type == "set" then 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 'getAttr' builtin clan-pytest-with-core> E at /build/store/nix/store/cba1x9mxnwr8b36cw41bya7g6d5v1p7d-source/select.nix:312:44: clan-pytest-with-core> E 311| else if selector.type == "str" then clan-pytest-with-core> E 312| recurse selectors (idx + 1) (builtins.getAttr selector.value obj) clan-pytest-with-core> E | ^ clan-pytest-with-core> E 313| else if selector.type == "set" then clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'seq' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:401:18: clan-pytest-with-core> E 400| options = checked options; clan-pytest-with-core> E 401| config = checked (removeAttrs config [ "_module" ]); clan-pytest-with-core> E | ^ clan-pytest-with-core> E 402| _module = checked (config._module); 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:304:9: clan-pytest-with-core> E 303| checkUnmatched = clan-pytest-with-core> E 304| if config._module.check && config._module.freeformType == null && merged.unmatchedDefns != [ ] then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 305| let clan-pytest-with-core> E clan-pytest-with-core> E … in the right operand of the AND (&&) operator clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:304:72: clan-pytest-with-core> E 303| checkUnmatched = clan-pytest-with-core> E 304| if config._module.check && config._module.freeformType == null && merged.unmatchedDefns != [ ] then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 305| let clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'unmatchedDefns' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:940:7: clan-pytest-with-core> E 939| # Transforms unmatchedDefnsByName into a list of definitions clan-pytest-with-core> E 940| unmatchedDefns = clan-pytest-with-core> E | ^ clan-pytest-with-core> E 941| if configs == [ ] then clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'concatLists' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:946:11: clan-pytest-with-core> E 945| else clan-pytest-with-core> E 946| concatLists ( clan-pytest-with-core> E | ^ clan-pytest-with-core> E 947| mapAttrsToList ( clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:948:21: clan-pytest-with-core> E 947| mapAttrsToList ( clan-pytest-with-core> E 948| name: defs: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 949| map ( clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'map' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:949:15: clan-pytest-with-core> E 948| name: defs: clan-pytest-with-core> E 949| map ( clan-pytest-with-core> E | ^ clan-pytest-with-core> E 950| def: clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:932:22: clan-pytest-with-core> E 931| # Propagate all unmatched definitions from nested option sets clan-pytest-with-core> E 932| mapAttrs (n: v: v.unmatchedDefns) resultsByName clan-pytest-with-core> E | ^ clan-pytest-with-core> E 933| # Plus the definitions for the current prefix that don't have a matching option clan-pytest-with-core> E clan-pytest-with-core> E (10 duplicate frames omitted) clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:932:25: clan-pytest-with-core> E 931| # Propagate all unmatched definitions from nested option sets clan-pytest-with-core> E 932| mapAttrs (n: v: v.unmatchedDefns) resultsByName clan-pytest-with-core> E | ^ clan-pytest-with-core> E 933| # Plus the definitions for the current prefix that don't have a matching option clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:876:15: clan-pytest-with-core> E 875| resultsByName = mapAttrs ( clan-pytest-with-core> E 876| name: decls: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 877| # We're descending into attribute ‘name’. 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:888:9: clan-pytest-with-core> E 887| in clan-pytest-with-core> E 888| if length optionDecls == length decls then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 889| let clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'length' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:888:12: clan-pytest-with-core> E 887| in clan-pytest-with-core> E 888| if length optionDecls == length decls then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 889| let clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'filter' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:882:25: clan-pytest-with-core> E 881| defns' = rawDefinitionsByName.${name} or [ ]; clan-pytest-with-core> E 882| optionDecls = filter ( clan-pytest-with-core> E | ^ clan-pytest-with-core> E 883| m: clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:883:13: clan-pytest-with-core> E 882| optionDecls = filter ( clan-pytest-with-core> E 883| m: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 884| m.options ? _type clan-pytest-with-core> E clan-pytest-with-core> E … in the left operand of the AND (&&) operator clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:885:13: clan-pytest-with-core> E 884| m.options ? _type clan-pytest-with-core> E 885| && (m.options._type == "option" || throwDeclarationTypeError loc m.options._type m._file) clan-pytest-with-core> E | ^ clan-pytest-with-core> E 886| ) decls; clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'options' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:807:15: clan-pytest-with-core> E 806| pos = unsafeGetAttrPos n subtree; clan-pytest-with-core> E 807| options = option; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 808| }) subtree clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:289:73: clan-pytest-with-core> E 288| len = length attrPath; clan-pytest-with-core> E 289| atDepth = n: if n == len then value else { ${elemAt attrPath n} = atDepth (n + 1); }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 290| in clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'atDepth' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:289:17: clan-pytest-with-core> E 288| len = length attrPath; clan-pytest-with-core> E 289| atDepth = n: if n == len then value else { ${elemAt attrPath n} = atDepth (n + 1); }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 290| in clan-pytest-with-core> E clan-pytest-with-core> E … in the right operand of the update (//) operator clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:2047:9: clan-pytest-with-core> E 2046| } clan-pytest-with-core> E 2047| // optionalAttrs (toType != null) { clan-pytest-with-core> E | ^ clan-pytest-with-core> E 2048| type = toType; clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:2047:12: clan-pytest-with-core> E 2046| } clan-pytest-with-core> E 2047| // optionalAttrs (toType != null) { clan-pytest-with-core> E | ^ clan-pytest-with-core> E 2048| type = toType; clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'optionalAttrs' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:1492:25: clan-pytest-with-core> E 1491| */ clan-pytest-with-core> E 1492| optionalAttrs = cond: as: if cond then as else { }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1493| 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:1492:29: clan-pytest-with-core> E 1491| */ clan-pytest-with-core> E 1492| optionalAttrs = cond: as: if cond then as else { }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1493| clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:2036:17: clan-pytest-with-core> E 2035| let clan-pytest-with-core> E 2036| opt = attrByPath to { } options; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 2037| in clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'attrByPath' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:89:24: clan-pytest-with-core> E 88| attrByPath = clan-pytest-with-core> E 89| attrPath: default: set: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 90| let clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:106:5: clan-pytest-with-core> E 105| in clan-pytest-with-core> E 106| attrByPath' 0 set; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 107| clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'attrByPath'' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:93:12: clan-pytest-with-core> E 92| attrByPath' = clan-pytest-with-core> E 93| n: s: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 94| ( clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:102:35: clan-pytest-with-core> E 101| in clan-pytest-with-core> E 102| if s ? ${attr} then attrByPath' (n + 1) s.${attr} else default clan-pytest-with-core> E | ^ clan-pytest-with-core> E 103| ) clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'attrByPath'' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:93:12: clan-pytest-with-core> E 92| attrByPath' = clan-pytest-with-core> E 93| n: s: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 94| ( clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:102:35: clan-pytest-with-core> E 101| in clan-pytest-with-core> E 102| if s ? ${attr} then attrByPath' (n + 1) s.${attr} else default clan-pytest-with-core> E | ^ clan-pytest-with-core> E 103| ) clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'attrByPath'' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:93:12: clan-pytest-with-core> E 92| attrByPath' = clan-pytest-with-core> E 93| n: s: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 94| ( clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:102:35: clan-pytest-with-core> E 101| in clan-pytest-with-core> E 102| if s ? ${attr} then attrByPath' (n + 1) s.${attr} else default clan-pytest-with-core> E | ^ clan-pytest-with-core> E 103| ) clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'attrByPath'' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:93:12: clan-pytest-with-core> E 92| attrByPath' = clan-pytest-with-core> E 93| n: s: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 94| ( clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:102:55: clan-pytest-with-core> E 101| in clan-pytest-with-core> E 102| if s ? ${attr} then attrByPath' (n + 1) s.${attr} else default clan-pytest-with-core> E | ^ clan-pytest-with-core> E 103| ) clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:927:37: clan-pytest-with-core> E 926| clan-pytest-with-core> E 927| matchedOptions = mapAttrs (n: v: v.matchedOptions) resultsByName; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 928| clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'matchedOptions' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:893:13: clan-pytest-with-core> E 892| { clan-pytest-with-core> E 893| matchedOptions = evalOptionValue loc opt defns'; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 894| unmatchedDefns = [ ]; clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:893:30: clan-pytest-with-core> E 892| { clan-pytest-with-core> E 893| matchedOptions = evalOptionValue loc opt defns'; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 894| unmatchedDefns = [ ]; clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'evalOptionValue' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1103:15: clan-pytest-with-core> E 1102| evalOptionValue = clan-pytest-with-core> E 1103| loc: opt: defs: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1104| let clan-pytest-with-core> E clan-pytest-with-core> E … in the left operand of the update (//) operator clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1148:5: clan-pytest-with-core> E 1147| warnDeprecation opt clan-pytest-with-core> E 1148| // { clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1149| value = addErrorContext "while evaluating the option `${showOption loc}':" value; 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1141:9: clan-pytest-with-core> E 1140| warnDeprecation = clan-pytest-with-core> E 1141| if (opt.type.deprecationMessage != null) then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1142| warn "The type `types.${opt.type.name}' of option `${showOption loc}' defined in ${showFiles opt.declarations} is deprecated. ${opt.type.deprecationMessage}" clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:890:19: clan-pytest-with-core> E 889| let clan-pytest-with-core> E 890| opt = fixupOptionType loc (mergeOptionDecls loc decls); clan-pytest-with-core> E | ^ clan-pytest-with-core> E 891| in clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'fixupOptionType' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1473:10: clan-pytest-with-core> E 1472| fixupOptionType = clan-pytest-with-core> E 1473| loc: opt: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1474| if opt.type.getSubModules or null == null then 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1474:5: clan-pytest-with-core> E 1473| loc: opt: clan-pytest-with-core> E 1474| if opt.type.getSubModules or null == null then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1475| opt // { type = opt.type or types.unspecified; } clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'type.getSubModules' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/nixos/modules/services/hardware/bluetooth.nix:72:9: clan-pytest-with-core> E 71| settings = mkOption { clan-pytest-with-core> E 72| type = cfgFmt.type; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 73| default = { }; clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/nixos/modules/services/hardware/bluetooth.nix:26:12: clan-pytest-with-core> E 25| clan-pytest-with-core> E 26| cfgFmt = pkgs.formats.ini { }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 27| clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:727:15: clan-pytest-with-core> E 726| extraArgs = mapAttrs ( clan-pytest-with-core> E 727| name: _: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 728| addErrorContext (context name) ( clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the module argument `pkgs' in "/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/nixos/modules/services/hardware/bluetooth.nix": clan-pytest-with-core> E clan-pytest-with-core> E … noting that argument `pkgs` is not externally provided, so querying `_module.args` instead, requiring `config` clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:731:13: clan-pytest-with-core> E 730| "noting that argument `${name}` is not externally provided, so querying `_module.args` instead, requiring `config`" clan-pytest-with-core> E 731| config._module.args.${name} clan-pytest-with-core> E | ^ clan-pytest-with-core> E 732| ) clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/types.nix:1029:18: clan-pytest-with-core> E 1028| value = mapAttrs ( clan-pytest-with-core> E 1029| n: v: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1030| if lazy then clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'optionalValue.value' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1312:5: clan-pytest-with-core> E 1311| clan-pytest-with-core> E 1312| optionalValue = if isDefined then { value = mergedValue; } else { }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1313| }; 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1312:21: clan-pytest-with-core> E 1311| clan-pytest-with-core> E 1312| optionalValue = if isDefined then { value = mergedValue; } else { }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1313| }; clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'values' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1240:11: clan-pytest-with-core> E 1239| { clan-pytest-with-core> E 1240| values = defsSorted; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1241| inherit (defsFiltered) highestPrio; 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1211:11: clan-pytest-with-core> E 1210| # Avoid sorting if we don't have to. clan-pytest-with-core> E 1211| if any (def: def.value._type or "" == "order") defsFiltered.values then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1212| sortProperties defsFiltered.values clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'any' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1211:14: clan-pytest-with-core> E 1210| # Avoid sorting if we don't have to. clan-pytest-with-core> E 1211| if any (def: def.value._type or "" == "order") defsFiltered.values then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1212| sortProperties defsFiltered.values clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1211:19: clan-pytest-with-core> E 1210| # Avoid sorting if we don't have to. clan-pytest-with-core> E 1211| if any (def: def.value._type or "" == "order") defsFiltered.values then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1212| sortProperties defsFiltered.values clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'value._type' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1422:67: clan-pytest-with-core> E 1421| strip = clan-pytest-with-core> E 1422| def: if def.value._type or "" == "override" then def // { value = def.value.content; } else def; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1423| in clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'value.content' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1566:22: clan-pytest-with-core> E 1565| _type = "override"; clan-pytest-with-core> E 1566| inherit priority content; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1567| }; 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/nixos/modules/misc/nixpkgs.nix:107:15: clan-pytest-with-core> E 106| clan-pytest-with-core> E 107| finalPkgs = if opt.pkgs.isDefined then cfg.pkgs.appendOverlays cfg.overlays else defaultPkgs; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 108| clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'pkgs.isDefined' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1154:21: clan-pytest-with-core> E 1153| definitionsWithLocations = res.defsFinal; clan-pytest-with-core> E 1154| inherit (res) isDefined; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1155| inherit (res.checkedAndMerged) valueMeta; clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'isDefined' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1310:5: clan-pytest-with-core> E 1309| clan-pytest-with-core> E 1310| isDefined = defsFinal != [ ]; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1311| clan-pytest-with-core> E clan-pytest-with-core> E (6 duplicate frames omitted) clan-pytest-with-core> E clan-pytest-with-core> E error: attribute 'system' missing clan-pytest-with-core> E at /build/store/nix/store/y3h139bhv4373m1hab367ma4p5i95i2f-source/modules/clan/module.nix:164:24: clan-pytest-with-core> E 163| (lib.modules.importApply ../../nixosModules/machineModules/overridePkgs.nix { clan-pytest-with-core> E 164| pkgs = nixpkgsMatrix.${config.inventory.machines.${name}.nixpkgs}.system.${system}.pkgs; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 165| }) clan-pytest-with-core> E Did you mean systems? 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 0x7fffe645b020> 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> def test_password_store_set_shared_var_for_multiple_machines( 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> """Test that set_var on a shared secret (passage backend) updates the same clan-pytest-with-core> shared entry regardless of which machine name is passed, and last written clan-pytest-with-core> value wins. clan-pytest-with-core> clan-pytest-with-core> Note: password-store has no per-machine recipient management — the secret clan-pytest-with-core> is stored once in the passage store, accessible to anyone with the age clan-pytest-with-core> identity. We verify the value is correct after each set. clan-pytest-with-core> """ clan-pytest-with-core> age_key = age_keys[0] clan-pytest-with-core> clan-pytest-with-core> for m in ["machine1", "machine2"]: clan-pytest-with-core> config = flake.machines[m] = create_test_machine_config() clan-pytest-with-core> clan_vars = config["clan"]["core"]["vars"] clan-pytest-with-core> clan_vars["settings"]["secretStore"] = "password-store" clan-pytest-with-core> config["clan"]["core"]["vars"]["password-store"]["passCommand"] = "passage" clan-pytest-with-core> shared_gen = clan_vars["generators"]["shared_generator"] clan-pytest-with-core> shared_gen["share"] = True clan-pytest-with-core> shared_gen["files"]["my_secret"]["secret"] = True clan-pytest-with-core> shared_gen["script"] = 'echo -n "initial" > "$out"/my_secret' clan-pytest-with-core> clan-pytest-with-core> flake.refresh() clan-pytest-with-core> monkeypatch.chdir(flake.path) clan-pytest-with-core> clan-pytest-with-core> age_key_dir = flake.path / ".age" clan-pytest-with-core> age_key_dir.mkdir() clan-pytest-with-core> age_key_file = age_key_dir / "key.txt" clan-pytest-with-core> age_key_file.write_text(age_key.privkey) clan-pytest-with-core> clan-pytest-with-core> password_store_dir = flake.path / "pass" clan-pytest-with-core> password_store_dir.mkdir(parents=True) clan-pytest-with-core> (password_store_dir / ".age-recipients").write_text(f"{age_key.pubkey}\n") clan-pytest-with-core> clan-pytest-with-core> monkeypatch.setenv("PASSAGE_DIR", str(password_store_dir)) clan-pytest-with-core> monkeypatch.setenv("PASSAGE_IDENTITIES_FILE", str(age_key_file)) clan-pytest-with-core> clan-pytest-with-core> subprocess.run(["git", "init"], cwd=password_store_dir, check=True) clan-pytest-with-core> subprocess.run( clan-pytest-with-core> ["git", "config", "user.email", "test@example.com"], clan-pytest-with-core> cwd=password_store_dir, clan-pytest-with-core> check=True, clan-pytest-with-core> ) clan-pytest-with-core> subprocess.run( clan-pytest-with-core> ["git", "config", "user.name", "Test User"], clan-pytest-with-core> cwd=password_store_dir, clan-pytest-with-core> check=True, clan-pytest-with-core> ) clan-pytest-with-core> subprocess.run( clan-pytest-with-core> ["git", "add", ".age-recipients"], clan-pytest-with-core> cwd=password_store_dir, clan-pytest-with-core> check=True, clan-pytest-with-core> ) clan-pytest-with-core> subprocess.run( clan-pytest-with-core> ["git", "commit", "-m", "Initialize password store"], clan-pytest-with-core> cwd=password_store_dir, clan-pytest-with-core> check=True, clan-pytest-with-core> ) clan-pytest-with-core> clan-pytest-with-core> generator_key = GeneratorId(name="shared_generator", placement=Shared()) clan-pytest-with-core> clan-pytest-with-core> def assert_secret_value(expected: bytes) -> None: clan-pytest-with-core> store = password_store.SecretStore(flake=Flake(str(flake.path))) clan-pytest-with-core> store.init_pass_command(machine="machine1") clan-pytest-with-core> assert store.get(generator_key, "my_secret") == expected clan-pytest-with-core> clan-pytest-with-core> # Generate vars for both machines (creates initial value) clan-pytest-with-core> > cli.run(["vars", "generate", "--flake", str(flake.path)]) clan-pytest-with-core> clan-pytest-with-core> /build/src/clan_cli/tests/test_vars_shared.py:792: 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/vars/generate.py:33: in generate_command clan-pytest-with-core> run_generators( clan-pytest-with-core> /build/src/clan_lib/vars/generate.py:306: in run_generators clan-pytest-with-core> all_generators = get_generators(machines, full_closure=True) clan-pytest-with-core> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ clan-pytest-with-core> /build/src/clan_lib/vars/generate.py:146: in get_generators clan-pytest-with-core> flake.precache(get_generators_precache_selectors(list(all_machines))) clan-pytest-with-core> /build/src/clan_lib/flake/flake.py:1151: in precache clan-pytest-with-core> self.get_from_nix(not_fetched_selectors) clan-pytest-with-core> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ clan-pytest-with-core> clan-pytest-with-core> self = Flake(identifier='/build/pytest-lbb72f9t/flake', hash='sha256-bh145vLGfneOqmutdNZGG5Xx8epIXr1dY0I6pTyYLRk=', 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.?secrets.?age.?plugins', 'clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.var...licModule', 'clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.settings.secretModule', ...] 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 while executing:$ clan select 'clanInternals.?secrets.?age.?plugins' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.generators.*.{share,dependencies,prompts,validationHash}' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.generators.*.files.*.{secret,deploy,owner,group,mode,neededFor}' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.?sops.?defaultGroups' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.settings.publicModule' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.settings.secretModule' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.?sops.?secretUploadDirectory' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.?password-store.?passCommand' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.?password-store.?secretLocation' clan-pytest-with-core> E $ clan select 'clanInternals.vars.settings.?recipients' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.?age.?secretLocation' clan-pytest-with-core> E Reason: attribute 'system' missing clan-pytest-with-core> E at /build/store/nix/store/y3h139bhv4373m1hab367ma4p5i95i2f-source/modules/clan/module.nix:164:24: clan-pytest-with-core> E 163| (lib.modules.importApply ../../nixosModules/machineModules/overridePkgs.nix { clan-pytest-with-core> E 164| pkgs = nixpkgsMatrix.${config.inventory.machines.${name}.nixpkgs}.system.${system}.pkgs; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 165| }) clan-pytest-with-core> E Did you mean systems?. 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-yu2ta20b/flake/.git/ clan-pytest-with-core> [main (root-commit) 4e7a06b] 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-yu2ta20b/flake/flake.lock": clan-pytest-with-core> • Added input 'clan-core': clan-pytest-with-core> 'path:/nix/store/x4g1qsn1nq0q56zn8h9c7xaiysv7bsf2-clan-core-flake?lastModified=1&narHash=sha256-Ynx5u312tlxJbGJCSevw5zZVxrd02FisWE1my%2B%2BFRSw%3D' (1970-01-01) clan-pytest-with-core> • Added input 'clan-core/data-mesher': clan-pytest-with-core> 'path:/nix/store/kdjkigwckgrfz0yg0d9z7kj2xkf084vs-source?lastModified=1&narHash=sha256-Yase/4e4aNN9QvUMqPH9ngbAmlcJCqLmFL0zuURdkuA%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/w2c23ykc12mswlg8hrrjzb5gv9gvkzwq-source?lastModified=1&narHash=sha256-RxWs5ND31KzTG7wvMM%2BPMfUjyNpmIEr999lqNARaM5o%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/lrxvs4l9bqbgjfz7w9bkfg5zqq442jxc-source?lastModified=1&narHash=sha256-4dtXQk/NMePegK/nWp5NSeuZKLATItOq61lpEvmXqGw%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/p17akwn814w226jq2cdkkhcw4psb0ga9-source?lastModified=0&narHash=sha256-tkD1h/1jLJ6qZHjG7/TOZT1qqI1ej3VPPCufHQyv1Uo%3D' (1970-01-01) clan-pytest-with-core> • Added input 'clan-core/sops-nix': clan-pytest-with-core> 'path:/nix/store/s154mmk8ahvc71gq8xfkbzlk240yvniv-source?lastModified=1&narHash=sha256-gkig4nPi1CWc4Z50GBsjE4ygSE7hMpl/TwID2an2Cck%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/9m1jsz5b9ggmjij2vkmafnhn26g96jjn-source?lastModified=1&narHash=sha256-brhZ8DmuGtzkCYHJg4HEd602amKm89Y9ytsFZ5uWD1w%3D' (1970-01-01) clan-pytest-with-core> • Added input 'clan-core/treefmt-nix': clan-pytest-with-core> 'path:/nix/store/7sjy8935654h3220n5gbaclf5nfw4nzx-source?lastModified=1&narHash=sha256-WSFCsDSE5ffgD2MqzkM2CYjeFiKhRF/dJUN8uedb6YE%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-lbb72f9t 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:143 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-yu2ta20b/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/x4g1qsn1nq0q56zn8h9c7xaiysv7bsf2-clan-core-flake?lastModified=1&narHash=sha256-Ynx5u312tlxJbGJCSevw5zZVxrd02FisWE1my%2B%2BFRSw%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/kdjkigwckgrfz0yg0d9z7kj2xkf084vs-source?lastModified=1&narHash=sha256-Yase/4e4aNN9QvUMqPH9ngbAmlcJCqLmFL0zuURdkuA%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/w2c23ykc12mswlg8hrrjzb5gv9gvkzwq-source?lastModified=1&narHash=sha256-RxWs5ND31KzTG7wvMM%2BPMfUjyNpmIEr999lqNARaM5o%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/lrxvs4l9bqbgjfz7w9bkfg5zqq442jxc-source?lastModified=1&narHash=sha256-4dtXQk/NMePegK/nWp5NSeuZKLATItOq61lpEvmXqGw%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/p17akwn814w226jq2cdkkhcw4psb0ga9-source?lastModified=0&narHash=sha256-tkD1h/1jLJ6qZHjG7/TOZT1qqI1ej3VPPCufHQyv1Uo%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/s154mmk8ahvc71gq8xfkbzlk240yvniv-source?lastModified=1&narHash=sha256-gkig4nPi1CWc4Z50GBsjE4ygSE7hMpl/TwID2an2Cck%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/9m1jsz5b9ggmjij2vkmafnhn26g96jjn-source?lastModified=1&narHash=sha256-brhZ8DmuGtzkCYHJg4HEd602amKm89Y9ytsFZ5uWD1w%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/7sjy8935654h3220n5gbaclf5nfw4nzx-source?lastModified=1&narHash=sha256-WSFCsDSE5ffgD2MqzkM2CYjeFiKhRF/dJUN8uedb6YE%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:143 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-lbb72f9t clan-pytest-with-core> ----------------------------- Captured stdout call ----------------------------- clan-pytest-with-core> [main 1cf8524] flake: update by flake generator clan-pytest-with-core> 4 files changed, 82 insertions(+) clan-pytest-with-core> create mode 100644 machines/machine1/configuration.json clan-pytest-with-core> create mode 100644 machines/machine1/configuration.nix clan-pytest-with-core> create mode 100644 machines/machine2/configuration.json clan-pytest-with-core> create mode 100644 machines/machine2/configuration.nix clan-pytest-with-core> Initialized empty Git repository in /build/pytest-lbb72f9t/flake/pass/.git/ clan-pytest-with-core> [master (root-commit) bbbfd05] Initialize password store clan-pytest-with-core> 1 file changed, 1 insertion(+) clan-pytest-with-core> create mode 100644 .age-recipients clan-pytest-with-core> ----------------------------- Captured stderr call ----------------------------- clan-pytest-with-core> Prefetching flake /build/pytest-lbb72f9t/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/febbcab65441be6ccc547560fd0155faadebbbb7 clan-pytest-with-core> (cached) $ clan select clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> Prefetching flake /build/pytest-lbb72f9t/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/febbcab65441be6ccc547560fd0155faadebbbb7 clan-pytest-with-core> (cached) $ clan select clanInternals.inventoryClass.relativeDirectory 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> [localhost] $ clan vars generate --flake /build/pytest-lbb72f9t/flake clan-pytest-with-core> Caller: /build/src/clan_cli/tests/test_vars_shared.py:792::test_password_store_set_shared_var_for_multiple_machines clan-pytest-with-core> clan-pytest-with-core> Prefetching flake /build/pytest-lbb72f9t/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.cliChecks clan-pytest-with-core> Cache miss for clanInternals.inventoryClass.inventorySerialization.{instances,machines,meta} clan-pytest-with-core> Loading flake cache from file /build/clan-flake-cache/flakes-v2/0a88ab966964bb4ed2338ba3640195f82320817a clan-pytest-with-core> Cache miss for clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> Loading flake cache from file /build/clan-flake-cache/flakes-v2/0a88ab966964bb4ed2338ba3640195f82320817a clan-pytest-with-core> (cached) $ clan select 'clanInternals.inventoryClass.inventorySerialization.{instances,machines,meta}' clan-pytest-with-core> Precaching selectors: clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.machines clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.instances clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.meta clan-pytest-with-core> - (not cached) clanInternals.?secrets.?age.?plugins clan-pytest-with-core> - (cached) clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.generators.*.{share,dependencies,prompts,validationHash} clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.generators.*.files.*.{secret,deploy,owner,group,mode,neededFor} clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.?sops.?defaultGroups clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.settings.publicModule clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.settings.secretModule clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.?sops.?secretUploadDirectory clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.?password-store.?passCommand clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.?password-store.?secretLocation clan-pytest-with-core> - (not cached) clanInternals.vars.settings.?recipients clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.?age.?secretLocation clan-pytest-with-core> ------------------------------ Captured log call ------------------------------- clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:927 Prefetching flake /build/pytest-lbb72f9t/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/febbcab65441be6ccc547560fd0155faadebbbb7 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-lbb72f9t/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/febbcab65441be6ccc547560fd0155faadebbbb7 clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1179 (cached) $ clan select clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> DEBUG clan_cli.tests.helpers.cli:__init__.py:143 $ clan vars generate --flake /build/pytest-lbb72f9t/flake clan-pytest-with-core> Caller: /build/src/clan_cli/tests/test_vars_shared.py:792::test_password_store_set_shared_var_for_multiple_machines clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:927 Prefetching flake /build/pytest-lbb72f9t/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.cliChecks clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1174 Cache miss for clanInternals.inventoryClass.inventorySerialization.{instances,machines,meta} clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:789 Loading flake cache from file /build/clan-flake-cache/flakes-v2/0a88ab966964bb4ed2338ba3640195f82320817a clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1174 Cache miss for clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:789 Loading flake cache from file /build/clan-flake-cache/flakes-v2/0a88ab966964bb4ed2338ba3640195f82320817a clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1179 (cached) $ clan select 'clanInternals.inventoryClass.inventorySerialization.{instances,machines,meta}' clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1144 Precaching selectors: clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.machines clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.instances clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.meta clan-pytest-with-core> - (not cached) clanInternals.?secrets.?age.?plugins clan-pytest-with-core> - (cached) clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.generators.*.{share,dependencies,prompts,validationHash} clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.generators.*.files.*.{secret,deploy,owner,group,mode,neededFor} clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.?sops.?defaultGroups clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.settings.publicModule clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.settings.secretModule clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.?sops.?secretUploadDirectory clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.?password-store.?passCommand clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.?password-store.?secretLocation clan-pytest-with-core> - (not cached) clanInternals.vars.settings.?recipients clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.?age.?secretLocation clan-pytest-with-core> _____________ test_sops_fix_skips_add_for_no_deploy_shared_secret ______________ clan-pytest-with-core> [gw5] linux -- Python 3.14.7 /nix/store/3n4qphl9s728sz8frmpqqrv9b1m87g68-python3-3.14.7/bin/python clan-pytest-with-core> clan-pytest-with-core> self = Flake(identifier='/build/pytest-g89y5u1r/flake', hash='sha256-IHT0Pv2VVRMFM4GqrCON0AXDznSEwhFZ8PTKyJc/K4E=', 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.?secrets.?age.?plugins', 'clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.var...licModule', 'clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.settings.secretModule', ...] 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-g89y5u1r/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/kzwfgb798rjbv5z5l9hzgjpmnzxnqbj4-source?narHash=sha256-IHT0Pv2VVRMFM4GqrCON0AXDznSEwhFZ8PTKyJc/K4E="; 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": "maybe", "value": "secrets"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "plugins"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "share"}, {"type": "str", "value": "dependencies"}, {"type": "str", "value": "prompts"}, {"type": "str", "value": "validationHash"}]}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "str", "value": "files"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "secret"}, {"type": "str", "value": "deploy"}, {"type": "str", "value": "owner"}, {"type": "str", "value": "group"}, {"type": "str", "value": "mode"}, {"type": "str", "value": "neededFor"}]}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "defaultGroups"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "publicModule"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "secretModule"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "secretUploadDirectory"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "passCommand"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "secretLocation"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "maybe", "value": "recipients"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "secretLocation"}]'"'"''"'"') 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": "maybe", "value": "secrets"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "plugins"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "share"}, {"type": "str", "value": "dependencies"}, {"type": "str", "value": "prompts"}, {"type": "str", "value": "validationHash"}]}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "str", "value": "files"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "secret"}, {"type": "str", "value": "deploy"}, {"type": "str", "value": "owner"}, {"type": "str", "value": "group"}, {"type": "str", "value": "mode"}, {"type": "str", "value": "neededFor"}]}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "defaultGroups"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "publicModule"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "secretModule"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "secretUploadDirectory"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "passCommand"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "secretLocation"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "maybe", "value": "recipients"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "secretLocation"}]'') 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": "maybe", "value": "secrets"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "plugins"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "share"}, {"type": "str", "value": "dependencies"}, {"type": "str", "value": "prompts"}, {"type": "str", "value": "validationHash"}]}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "str", "value": "files"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "secret"}, {"type": "str", "value": "deploy"}, {"type": "str", "value": "owner"}, {"type": "str", "value": "group"}, {"type": "str", "value": "mode"}, {"type": "str", "value": "neededFor"}]}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "defaultGroups"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "publicModule"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "secretModule"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "secretUploadDirectory"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "passCommand"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "secretLocation"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "maybe", "value": "recipients"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "secretLocation"}]'') flake) clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating list element at index 1 clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating attribute 'machine1' clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/cba1x9mxnwr8b36cw41bya7g6d5v1p7d-source/select.nix:325:37: clan-pytest-with-core> E 324| in clan-pytest-with-core> E 325| builtins.mapAttrs (_: v: recurse selectors (idx + 1) v) filteredAttrs clan-pytest-with-core> E | ^ clan-pytest-with-core> E 326| else if selector.type == "maybe" then 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:325:40: clan-pytest-with-core> E 324| in clan-pytest-with-core> E 325| builtins.mapAttrs (_: v: recurse selectors (idx + 1) v) filteredAttrs clan-pytest-with-core> E | ^ clan-pytest-with-core> E 326| else if selector.type == "maybe" then 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 … from call site clan-pytest-with-core> E at /build/store/nix/store/cba1x9mxnwr8b36cw41bya7g6d5v1p7d-source/select.nix:312:15: clan-pytest-with-core> E 311| else if selector.type == "str" then clan-pytest-with-core> E 312| recurse selectors (idx + 1) (builtins.getAttr selector.value obj) clan-pytest-with-core> E | ^ clan-pytest-with-core> E 313| else if selector.type == "set" then 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 'getAttr' builtin clan-pytest-with-core> E at /build/store/nix/store/cba1x9mxnwr8b36cw41bya7g6d5v1p7d-source/select.nix:312:44: clan-pytest-with-core> E 311| else if selector.type == "str" then clan-pytest-with-core> E 312| recurse selectors (idx + 1) (builtins.getAttr selector.value obj) clan-pytest-with-core> E | ^ clan-pytest-with-core> E 313| else if selector.type == "set" then clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'seq' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:401:18: clan-pytest-with-core> E 400| options = checked options; clan-pytest-with-core> E 401| config = checked (removeAttrs config [ "_module" ]); clan-pytest-with-core> E | ^ clan-pytest-with-core> E 402| _module = checked (config._module); 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:304:9: clan-pytest-with-core> E 303| checkUnmatched = clan-pytest-with-core> E 304| if config._module.check && config._module.freeformType == null && merged.unmatchedDefns != [ ] then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 305| let clan-pytest-with-core> E clan-pytest-with-core> E … in the right operand of the AND (&&) operator clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:304:72: clan-pytest-with-core> E 303| checkUnmatched = clan-pytest-with-core> E 304| if config._module.check && config._module.freeformType == null && merged.unmatchedDefns != [ ] then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 305| let clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'unmatchedDefns' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:940:7: clan-pytest-with-core> E 939| # Transforms unmatchedDefnsByName into a list of definitions clan-pytest-with-core> E 940| unmatchedDefns = clan-pytest-with-core> E | ^ clan-pytest-with-core> E 941| if configs == [ ] then clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'concatLists' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:946:11: clan-pytest-with-core> E 945| else clan-pytest-with-core> E 946| concatLists ( clan-pytest-with-core> E | ^ clan-pytest-with-core> E 947| mapAttrsToList ( clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:948:21: clan-pytest-with-core> E 947| mapAttrsToList ( clan-pytest-with-core> E 948| name: defs: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 949| map ( clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'map' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:949:15: clan-pytest-with-core> E 948| name: defs: clan-pytest-with-core> E 949| map ( clan-pytest-with-core> E | ^ clan-pytest-with-core> E 950| def: clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:932:22: clan-pytest-with-core> E 931| # Propagate all unmatched definitions from nested option sets clan-pytest-with-core> E 932| mapAttrs (n: v: v.unmatchedDefns) resultsByName clan-pytest-with-core> E | ^ clan-pytest-with-core> E 933| # Plus the definitions for the current prefix that don't have a matching option clan-pytest-with-core> E clan-pytest-with-core> E (10 duplicate frames omitted) clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:932:25: clan-pytest-with-core> E 931| # Propagate all unmatched definitions from nested option sets clan-pytest-with-core> E 932| mapAttrs (n: v: v.unmatchedDefns) resultsByName clan-pytest-with-core> E | ^ clan-pytest-with-core> E 933| # Plus the definitions for the current prefix that don't have a matching option clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:876:15: clan-pytest-with-core> E 875| resultsByName = mapAttrs ( clan-pytest-with-core> E 876| name: decls: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 877| # We're descending into attribute ‘name’. 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:888:9: clan-pytest-with-core> E 887| in clan-pytest-with-core> E 888| if length optionDecls == length decls then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 889| let clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'length' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:888:12: clan-pytest-with-core> E 887| in clan-pytest-with-core> E 888| if length optionDecls == length decls then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 889| let clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'filter' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:882:25: clan-pytest-with-core> E 881| defns' = rawDefinitionsByName.${name} or [ ]; clan-pytest-with-core> E 882| optionDecls = filter ( clan-pytest-with-core> E | ^ clan-pytest-with-core> E 883| m: clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:883:13: clan-pytest-with-core> E 882| optionDecls = filter ( clan-pytest-with-core> E 883| m: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 884| m.options ? _type clan-pytest-with-core> E clan-pytest-with-core> E … in the left operand of the AND (&&) operator clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:885:13: clan-pytest-with-core> E 884| m.options ? _type clan-pytest-with-core> E 885| && (m.options._type == "option" || throwDeclarationTypeError loc m.options._type m._file) clan-pytest-with-core> E | ^ clan-pytest-with-core> E 886| ) decls; clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'options' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:807:15: clan-pytest-with-core> E 806| pos = unsafeGetAttrPos n subtree; clan-pytest-with-core> E 807| options = option; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 808| }) subtree clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:289:73: clan-pytest-with-core> E 288| len = length attrPath; clan-pytest-with-core> E 289| atDepth = n: if n == len then value else { ${elemAt attrPath n} = atDepth (n + 1); }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 290| in clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'atDepth' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:289:17: clan-pytest-with-core> E 288| len = length attrPath; clan-pytest-with-core> E 289| atDepth = n: if n == len then value else { ${elemAt attrPath n} = atDepth (n + 1); }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 290| in clan-pytest-with-core> E clan-pytest-with-core> E … in the right operand of the update (//) operator clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:2047:9: clan-pytest-with-core> E 2046| } clan-pytest-with-core> E 2047| // optionalAttrs (toType != null) { clan-pytest-with-core> E | ^ clan-pytest-with-core> E 2048| type = toType; clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:2047:12: clan-pytest-with-core> E 2046| } clan-pytest-with-core> E 2047| // optionalAttrs (toType != null) { clan-pytest-with-core> E | ^ clan-pytest-with-core> E 2048| type = toType; clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'optionalAttrs' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:1492:25: clan-pytest-with-core> E 1491| */ clan-pytest-with-core> E 1492| optionalAttrs = cond: as: if cond then as else { }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1493| 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:1492:29: clan-pytest-with-core> E 1491| */ clan-pytest-with-core> E 1492| optionalAttrs = cond: as: if cond then as else { }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1493| clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:2036:17: clan-pytest-with-core> E 2035| let clan-pytest-with-core> E 2036| opt = attrByPath to { } options; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 2037| in clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'attrByPath' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:89:24: clan-pytest-with-core> E 88| attrByPath = clan-pytest-with-core> E 89| attrPath: default: set: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 90| let clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:106:5: clan-pytest-with-core> E 105| in clan-pytest-with-core> E 106| attrByPath' 0 set; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 107| clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'attrByPath'' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:93:12: clan-pytest-with-core> E 92| attrByPath' = clan-pytest-with-core> E 93| n: s: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 94| ( clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:102:35: clan-pytest-with-core> E 101| in clan-pytest-with-core> E 102| if s ? ${attr} then attrByPath' (n + 1) s.${attr} else default clan-pytest-with-core> E | ^ clan-pytest-with-core> E 103| ) clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'attrByPath'' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:93:12: clan-pytest-with-core> E 92| attrByPath' = clan-pytest-with-core> E 93| n: s: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 94| ( clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:102:35: clan-pytest-with-core> E 101| in clan-pytest-with-core> E 102| if s ? ${attr} then attrByPath' (n + 1) s.${attr} else default clan-pytest-with-core> E | ^ clan-pytest-with-core> E 103| ) clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'attrByPath'' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:93:12: clan-pytest-with-core> E 92| attrByPath' = clan-pytest-with-core> E 93| n: s: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 94| ( clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:102:35: clan-pytest-with-core> E 101| in clan-pytest-with-core> E 102| if s ? ${attr} then attrByPath' (n + 1) s.${attr} else default clan-pytest-with-core> E | ^ clan-pytest-with-core> E 103| ) clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'attrByPath'' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:93:12: clan-pytest-with-core> E 92| attrByPath' = clan-pytest-with-core> E 93| n: s: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 94| ( clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:102:55: clan-pytest-with-core> E 101| in clan-pytest-with-core> E 102| if s ? ${attr} then attrByPath' (n + 1) s.${attr} else default clan-pytest-with-core> E | ^ clan-pytest-with-core> E 103| ) clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:927:37: clan-pytest-with-core> E 926| clan-pytest-with-core> E 927| matchedOptions = mapAttrs (n: v: v.matchedOptions) resultsByName; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 928| clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'matchedOptions' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:893:13: clan-pytest-with-core> E 892| { clan-pytest-with-core> E 893| matchedOptions = evalOptionValue loc opt defns'; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 894| unmatchedDefns = [ ]; clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:893:30: clan-pytest-with-core> E 892| { clan-pytest-with-core> E 893| matchedOptions = evalOptionValue loc opt defns'; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 894| unmatchedDefns = [ ]; clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'evalOptionValue' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1103:15: clan-pytest-with-core> E 1102| evalOptionValue = clan-pytest-with-core> E 1103| loc: opt: defs: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1104| let clan-pytest-with-core> E clan-pytest-with-core> E … in the left operand of the update (//) operator clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1148:5: clan-pytest-with-core> E 1147| warnDeprecation opt clan-pytest-with-core> E 1148| // { clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1149| value = addErrorContext "while evaluating the option `${showOption loc}':" value; 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1141:9: clan-pytest-with-core> E 1140| warnDeprecation = clan-pytest-with-core> E 1141| if (opt.type.deprecationMessage != null) then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1142| warn "The type `types.${opt.type.name}' of option `${showOption loc}' defined in ${showFiles opt.declarations} is deprecated. ${opt.type.deprecationMessage}" clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:890:19: clan-pytest-with-core> E 889| let clan-pytest-with-core> E 890| opt = fixupOptionType loc (mergeOptionDecls loc decls); clan-pytest-with-core> E | ^ clan-pytest-with-core> E 891| in clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'fixupOptionType' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1473:10: clan-pytest-with-core> E 1472| fixupOptionType = clan-pytest-with-core> E 1473| loc: opt: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1474| if opt.type.getSubModules or null == null then 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1474:5: clan-pytest-with-core> E 1473| loc: opt: clan-pytest-with-core> E 1474| if opt.type.getSubModules or null == null then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1475| opt // { type = opt.type or types.unspecified; } clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'type.getSubModules' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/nixos/modules/services/hardware/bluetooth.nix:72:9: clan-pytest-with-core> E 71| settings = mkOption { clan-pytest-with-core> E 72| type = cfgFmt.type; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 73| default = { }; clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/nixos/modules/services/hardware/bluetooth.nix:26:12: clan-pytest-with-core> E 25| clan-pytest-with-core> E 26| cfgFmt = pkgs.formats.ini { }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 27| clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:727:15: clan-pytest-with-core> E 726| extraArgs = mapAttrs ( clan-pytest-with-core> E 727| name: _: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 728| addErrorContext (context name) ( clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the module argument `pkgs' in "/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/nixos/modules/services/hardware/bluetooth.nix": clan-pytest-with-core> E clan-pytest-with-core> E … noting that argument `pkgs` is not externally provided, so querying `_module.args` instead, requiring `config` clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:731:13: clan-pytest-with-core> E 730| "noting that argument `${name}` is not externally provided, so querying `_module.args` instead, requiring `config`" clan-pytest-with-core> E 731| config._module.args.${name} clan-pytest-with-core> E | ^ clan-pytest-with-core> E 732| ) clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/types.nix:1029:18: clan-pytest-with-core> E 1028| value = mapAttrs ( clan-pytest-with-core> E 1029| n: v: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1030| if lazy then clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'optionalValue.value' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1312:5: clan-pytest-with-core> E 1311| clan-pytest-with-core> E 1312| optionalValue = if isDefined then { value = mergedValue; } else { }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1313| }; 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1312:21: clan-pytest-with-core> E 1311| clan-pytest-with-core> E 1312| optionalValue = if isDefined then { value = mergedValue; } else { }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1313| }; clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'values' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1240:11: clan-pytest-with-core> E 1239| { clan-pytest-with-core> E 1240| values = defsSorted; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1241| inherit (defsFiltered) highestPrio; 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1211:11: clan-pytest-with-core> E 1210| # Avoid sorting if we don't have to. clan-pytest-with-core> E 1211| if any (def: def.value._type or "" == "order") defsFiltered.values then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1212| sortProperties defsFiltered.values clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'any' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1211:14: clan-pytest-with-core> E 1210| # Avoid sorting if we don't have to. clan-pytest-with-core> E 1211| if any (def: def.value._type or "" == "order") defsFiltered.values then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1212| sortProperties defsFiltered.values clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1211:19: clan-pytest-with-core> E 1210| # Avoid sorting if we don't have to. clan-pytest-with-core> E 1211| if any (def: def.value._type or "" == "order") defsFiltered.values then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1212| sortProperties defsFiltered.values clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'value._type' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1422:67: clan-pytest-with-core> E 1421| strip = clan-pytest-with-core> E 1422| def: if def.value._type or "" == "override" then def // { value = def.value.content; } else def; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1423| in clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'value.content' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1566:22: clan-pytest-with-core> E 1565| _type = "override"; clan-pytest-with-core> E 1566| inherit priority content; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1567| }; 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/nixos/modules/misc/nixpkgs.nix:107:15: clan-pytest-with-core> E 106| clan-pytest-with-core> E 107| finalPkgs = if opt.pkgs.isDefined then cfg.pkgs.appendOverlays cfg.overlays else defaultPkgs; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 108| clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'pkgs.isDefined' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1154:21: clan-pytest-with-core> E 1153| definitionsWithLocations = res.defsFinal; clan-pytest-with-core> E 1154| inherit (res) isDefined; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1155| inherit (res.checkedAndMerged) valueMeta; clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'isDefined' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1310:5: clan-pytest-with-core> E 1309| clan-pytest-with-core> E 1310| isDefined = defsFinal != [ ]; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1311| clan-pytest-with-core> E clan-pytest-with-core> E (6 duplicate frames omitted) clan-pytest-with-core> E clan-pytest-with-core> E error: attribute 'system' missing clan-pytest-with-core> E at /build/store/nix/store/y3h139bhv4373m1hab367ma4p5i95i2f-source/modules/clan/module.nix:164:24: clan-pytest-with-core> E 163| (lib.modules.importApply ../../nixosModules/machineModules/overridePkgs.nix { clan-pytest-with-core> E 164| pkgs = nixpkgsMatrix.${config.inventory.machines.${name}.nixpkgs}.system.${system}.pkgs; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 165| }) clan-pytest-with-core> E Did you mean systems? 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 0x7fffe67ec270> clan-pytest-with-core> flake_with_sops = 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_sops_fix_skips_add_for_no_deploy_shared_secret( clan-pytest-with-core> monkeypatch: pytest.MonkeyPatch, clan-pytest-with-core> flake_with_sops: ClanFlake, clan-pytest-with-core> ) -> None: clan-pytest-with-core> """Test that fix() doesn't wastefully add then remove machine access clan-pytest-with-core> for shared secrets with deploy=False. clan-pytest-with-core> clan-pytest-with-core> Without the optimization, fix() calls add_secret() (creating an individual clan-pytest-with-core> commit like 'vars: add machine1 to secret ...') then immediately removes clan-pytest-with-core> the symlink via disallow_member(). This is a no-op with extra commits. clan-pytest-with-core> """ clan-pytest-with-core> flake = flake_with_sops clan-pytest-with-core> clan-pytest-with-core> # Shared generator with deploy=False from the start clan-pytest-with-core> m1_config = flake.machines["machine1"] = create_test_machine_config() clan-pytest-with-core> shared_gen = m1_config["clan"]["core"]["vars"]["generators"]["my_shared_gen"] clan-pytest-with-core> shared_gen["share"] = True clan-pytest-with-core> shared_gen["files"]["my_secret"]["secret"] = True clan-pytest-with-core> shared_gen["files"]["my_secret"]["deploy"] = False clan-pytest-with-core> shared_gen["script"] = 'echo -n secret_value > "$out"/my_secret' clan-pytest-with-core> clan-pytest-with-core> m2_config = flake.machines["machine2"] = create_test_machine_config() clan-pytest-with-core> m2_config["clan"]["core"]["vars"]["generators"]["my_shared_gen"] = shared_gen.copy() clan-pytest-with-core> clan-pytest-with-core> flake.refresh() clan-pytest-with-core> monkeypatch.chdir(flake.path) clan-pytest-with-core> clan-pytest-with-core> # Generate secrets (no machine symlink since deploy=False) clan-pytest-with-core> > cli.run(["vars", "generate", "--flake", str(flake.path)]) clan-pytest-with-core> clan-pytest-with-core> /build/src/clan_cli/tests/test_vars_shared.py:550: 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/vars/generate.py:33: in generate_command clan-pytest-with-core> run_generators( clan-pytest-with-core> /build/src/clan_lib/vars/generate.py:306: in run_generators clan-pytest-with-core> all_generators = get_generators(machines, full_closure=True) clan-pytest-with-core> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ clan-pytest-with-core> /build/src/clan_lib/vars/generate.py:146: in get_generators clan-pytest-with-core> flake.precache(get_generators_precache_selectors(list(all_machines))) clan-pytest-with-core> /build/src/clan_lib/flake/flake.py:1151: in precache clan-pytest-with-core> self.get_from_nix(not_fetched_selectors) clan-pytest-with-core> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ clan-pytest-with-core> clan-pytest-with-core> self = Flake(identifier='/build/pytest-g89y5u1r/flake', hash='sha256-IHT0Pv2VVRMFM4GqrCON0AXDznSEwhFZ8PTKyJc/K4E=', 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.?secrets.?age.?plugins', 'clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.var...licModule', 'clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.settings.secretModule', ...] 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 while executing:$ clan select 'clanInternals.?secrets.?age.?plugins' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.generators.*.{share,dependencies,prompts,validationHash}' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.generators.*.files.*.{secret,deploy,owner,group,mode,neededFor}' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.?sops.?defaultGroups' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.settings.publicModule' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.settings.secretModule' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.?sops.?secretUploadDirectory' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.?password-store.?passCommand' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.?password-store.?secretLocation' clan-pytest-with-core> E $ clan select 'clanInternals.vars.settings.?recipients' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.?age.?secretLocation' clan-pytest-with-core> E Reason: attribute 'system' missing clan-pytest-with-core> E at /build/store/nix/store/y3h139bhv4373m1hab367ma4p5i95i2f-source/modules/clan/module.nix:164:24: clan-pytest-with-core> E 163| (lib.modules.importApply ../../nixosModules/machineModules/overridePkgs.nix { clan-pytest-with-core> E 164| pkgs = nixpkgsMatrix.${config.inventory.machines.${name}.nixpkgs}.system.${system}.pkgs; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 165| }) clan-pytest-with-core> E Did you mean systems?. 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-x50cdwfb/flake/.git/ clan-pytest-with-core> [main (root-commit) 4e7a06b] 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-x50cdwfb/flake/flake.lock": clan-pytest-with-core> • Added input 'clan-core': clan-pytest-with-core> 'path:/nix/store/x4g1qsn1nq0q56zn8h9c7xaiysv7bsf2-clan-core-flake?lastModified=1&narHash=sha256-Ynx5u312tlxJbGJCSevw5zZVxrd02FisWE1my%2B%2BFRSw%3D' (1970-01-01) clan-pytest-with-core> • Added input 'clan-core/data-mesher': clan-pytest-with-core> 'path:/nix/store/kdjkigwckgrfz0yg0d9z7kj2xkf084vs-source?lastModified=1&narHash=sha256-Yase/4e4aNN9QvUMqPH9ngbAmlcJCqLmFL0zuURdkuA%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/w2c23ykc12mswlg8hrrjzb5gv9gvkzwq-source?lastModified=1&narHash=sha256-RxWs5ND31KzTG7wvMM%2BPMfUjyNpmIEr999lqNARaM5o%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/lrxvs4l9bqbgjfz7w9bkfg5zqq442jxc-source?lastModified=1&narHash=sha256-4dtXQk/NMePegK/nWp5NSeuZKLATItOq61lpEvmXqGw%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/p17akwn814w226jq2cdkkhcw4psb0ga9-source?lastModified=0&narHash=sha256-tkD1h/1jLJ6qZHjG7/TOZT1qqI1ej3VPPCufHQyv1Uo%3D' (1970-01-01) clan-pytest-with-core> • Added input 'clan-core/sops-nix': clan-pytest-with-core> 'path:/nix/store/s154mmk8ahvc71gq8xfkbzlk240yvniv-source?lastModified=1&narHash=sha256-gkig4nPi1CWc4Z50GBsjE4ygSE7hMpl/TwID2an2Cck%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/9m1jsz5b9ggmjij2vkmafnhn26g96jjn-source?lastModified=1&narHash=sha256-brhZ8DmuGtzkCYHJg4HEd602amKm89Y9ytsFZ5uWD1w%3D' (1970-01-01) clan-pytest-with-core> • Added input 'clan-core/treefmt-nix': clan-pytest-with-core> 'path:/nix/store/7sjy8935654h3220n5gbaclf5nfw4nzx-source?lastModified=1&narHash=sha256-WSFCsDSE5ffgD2MqzkM2CYjeFiKhRF/dJUN8uedb6YE%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-g89y5u1r clan-pytest-with-core> [localhost] $ clan vars keygen --flake /build/pytest-g89y5u1r/flake --user admin --no-interactive clan-pytest-with-core> Caller: /build/src/clan_cli/tests/age_keys.py:31::init clan-pytest-with-core> clan-pytest-with-core> Prefetching flake /build/pytest-g89y5u1r/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/febbcab65441be6ccc547560fd0155faadebbbb7 clan-pytest-with-core> (cached) $ clan select clanInternals.inventoryClass.relativeDirectory 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> git \ clan-pytest-with-core> -C /build/pytest-g89y5u1r/flake \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-g89y5u1r/flake/sops/users/admin 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/admin to git clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-g89y5u1r/flake \ clan-pytest-with-core> diff \ clan-pytest-with-core> --cached --exit-code \ clan-pytest-with-core> -- /build/pytest-g89y5u1r/flake/sops/users/admin 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-g89y5u1r/flake \ clan-pytest-with-core> commit \ clan-pytest-with-core> -m 'secrets: add user admin' \ clan-pytest-with-core> --no-verify /build/pytest-g89y5u1r/flake/sops/users/admin 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/admin to git 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:143 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-x50cdwfb/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/x4g1qsn1nq0q56zn8h9c7xaiysv7bsf2-clan-core-flake?lastModified=1&narHash=sha256-Ynx5u312tlxJbGJCSevw5zZVxrd02FisWE1my%2B%2BFRSw%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/kdjkigwckgrfz0yg0d9z7kj2xkf084vs-source?lastModified=1&narHash=sha256-Yase/4e4aNN9QvUMqPH9ngbAmlcJCqLmFL0zuURdkuA%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/w2c23ykc12mswlg8hrrjzb5gv9gvkzwq-source?lastModified=1&narHash=sha256-RxWs5ND31KzTG7wvMM%2BPMfUjyNpmIEr999lqNARaM5o%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/lrxvs4l9bqbgjfz7w9bkfg5zqq442jxc-source?lastModified=1&narHash=sha256-4dtXQk/NMePegK/nWp5NSeuZKLATItOq61lpEvmXqGw%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/p17akwn814w226jq2cdkkhcw4psb0ga9-source?lastModified=0&narHash=sha256-tkD1h/1jLJ6qZHjG7/TOZT1qqI1ej3VPPCufHQyv1Uo%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/s154mmk8ahvc71gq8xfkbzlk240yvniv-source?lastModified=1&narHash=sha256-gkig4nPi1CWc4Z50GBsjE4ygSE7hMpl/TwID2an2Cck%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/9m1jsz5b9ggmjij2vkmafnhn26g96jjn-source?lastModified=1&narHash=sha256-brhZ8DmuGtzkCYHJg4HEd602amKm89Y9ytsFZ5uWD1w%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/7sjy8935654h3220n5gbaclf5nfw4nzx-source?lastModified=1&narHash=sha256-WSFCsDSE5ffgD2MqzkM2CYjeFiKhRF/dJUN8uedb6YE%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:143 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-g89y5u1r clan-pytest-with-core> DEBUG clan_cli.tests.helpers.cli:__init__.py:143 $ clan vars keygen --flake /build/pytest-g89y5u1r/flake --user admin --no-interactive clan-pytest-with-core> Caller: /build/src/clan_cli/tests/age_keys.py:31::init clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:927 Prefetching flake /build/pytest-g89y5u1r/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/febbcab65441be6ccc547560fd0155faadebbbb7 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.cmd:__init__.py:143 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> DEBUG clan_lib.cmd:__init__.py:143 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> DEBUG clan_cli.secrets.sops:sops.py:99 Found age public key from a private key in the environment (SOPS_AGE_KEY): age1dhwqzkah943xzc34tc3dlmfayyevcmdmxzjezdgdy33euxwf59vsp3vk3c clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:143 git \ clan-pytest-with-core> -C /build/pytest-g89y5u1r/flake \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-g89y5u1r/flake/sops/users/admin 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> DEBUG clan_lib.cmd:__init__.py:143 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> DEBUG clan_lib.git:__init__.py:98 Adding sops/users/admin to git clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:143 git \ clan-pytest-with-core> -C /build/pytest-g89y5u1r/flake \ clan-pytest-with-core> diff \ clan-pytest-with-core> --cached --exit-code \ clan-pytest-with-core> -- /build/pytest-g89y5u1r/flake/sops/users/admin 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> DEBUG clan_lib.cmd:__init__.py:143 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> DEBUG clan_lib.cmd:__init__.py:143 git \ clan-pytest-with-core> -C /build/pytest-g89y5u1r/flake \ clan-pytest-with-core> commit \ clan-pytest-with-core> -m 'secrets: add user admin' \ clan-pytest-with-core> --no-verify /build/pytest-g89y5u1r/flake/sops/users/admin 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> DEBUG clan_lib.cmd:__init__.py:143 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> INFO clan_lib.git:__init__.py:141 Committed sops/users/admin to git clan-pytest-with-core> ----------------------------- Captured stdout call ----------------------------- clan-pytest-with-core> [main 0ef3e12] flake: update by flake generator clan-pytest-with-core> 4 files changed, 72 insertions(+) clan-pytest-with-core> create mode 100644 machines/machine1/configuration.json clan-pytest-with-core> create mode 100644 machines/machine1/configuration.nix clan-pytest-with-core> create mode 100644 machines/machine2/configuration.json clan-pytest-with-core> create mode 100644 machines/machine2/configuration.nix clan-pytest-with-core> ----------------------------- Captured stderr call ----------------------------- clan-pytest-with-core> Prefetching flake /build/pytest-g89y5u1r/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/d2c0050d97832c3ac5193485b93705d00938c15e clan-pytest-with-core> (cached) $ clan select clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> Prefetching flake /build/pytest-g89y5u1r/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/d2c0050d97832c3ac5193485b93705d00938c15e clan-pytest-with-core> (cached) $ clan select clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> [localhost] $ clan vars generate --flake /build/pytest-g89y5u1r/flake clan-pytest-with-core> Caller: /build/src/clan_cli/tests/test_vars_shared.py:550::test_sops_fix_skips_add_for_no_deploy_shared_secret clan-pytest-with-core> clan-pytest-with-core> Prefetching flake /build/pytest-g89y5u1r/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.cliChecks clan-pytest-with-core> Cache miss for clanInternals.inventoryClass.inventorySerialization.{instances,machines,meta} clan-pytest-with-core> Loading flake cache from file /build/clan-flake-cache/flakes-v2/2c970ff648a2b5650131ddcfa9b68ed8341ce303 clan-pytest-with-core> Cache miss for clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> Loading flake cache from file /build/clan-flake-cache/flakes-v2/2c970ff648a2b5650131ddcfa9b68ed8341ce303 clan-pytest-with-core> (cached) $ clan select 'clanInternals.inventoryClass.inventorySerialization.{instances,machines,meta}' clan-pytest-with-core> Precaching selectors: clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.machines clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.instances clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.meta clan-pytest-with-core> - (not cached) clanInternals.?secrets.?age.?plugins clan-pytest-with-core> - (cached) clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.generators.*.{share,dependencies,prompts,validationHash} clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.generators.*.files.*.{secret,deploy,owner,group,mode,neededFor} clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.?sops.?defaultGroups clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.settings.publicModule clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.settings.secretModule clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.?sops.?secretUploadDirectory clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.?password-store.?passCommand clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.?password-store.?secretLocation clan-pytest-with-core> - (not cached) clanInternals.vars.settings.?recipients clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.?age.?secretLocation clan-pytest-with-core> ------------------------------ Captured log call ------------------------------- clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:927 Prefetching flake /build/pytest-g89y5u1r/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/d2c0050d97832c3ac5193485b93705d00938c15e 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-g89y5u1r/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/d2c0050d97832c3ac5193485b93705d00938c15e clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1179 (cached) $ clan select clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> DEBUG clan_cli.tests.helpers.cli:__init__.py:143 $ clan vars generate --flake /build/pytest-g89y5u1r/flake clan-pytest-with-core> Caller: /build/src/clan_cli/tests/test_vars_shared.py:550::test_sops_fix_skips_add_for_no_deploy_shared_secret clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:927 Prefetching flake /build/pytest-g89y5u1r/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.cliChecks clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1174 Cache miss for clanInternals.inventoryClass.inventorySerialization.{instances,machines,meta} clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:789 Loading flake cache from file /build/clan-flake-cache/flakes-v2/2c970ff648a2b5650131ddcfa9b68ed8341ce303 clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1174 Cache miss for clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:789 Loading flake cache from file /build/clan-flake-cache/flakes-v2/2c970ff648a2b5650131ddcfa9b68ed8341ce303 clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1179 (cached) $ clan select 'clanInternals.inventoryClass.inventorySerialization.{instances,machines,meta}' clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1144 Precaching selectors: clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.machines clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.instances clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.meta clan-pytest-with-core> - (not cached) clanInternals.?secrets.?age.?plugins clan-pytest-with-core> - (cached) clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.generators.*.{share,dependencies,prompts,validationHash} clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.generators.*.files.*.{secret,deploy,owner,group,mode,neededFor} clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.?sops.?defaultGroups clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.settings.publicModule clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.settings.secretModule clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.?sops.?secretUploadDirectory clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.?password-store.?passCommand clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.?password-store.?secretLocation clan-pytest-with-core> - (not cached) clanInternals.vars.settings.?recipients clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.?age.?secretLocation clan-pytest-with-core> __________________ test_add_machine_to_existing_shared_secret __________________ clan-pytest-with-core> [gw9] linux -- Python 3.14.7 /nix/store/3n4qphl9s728sz8frmpqqrv9b1m87g68-python3-3.14.7/bin/python clan-pytest-with-core> clan-pytest-with-core> self = Flake(identifier='/build/pytest-z8zhqra9/flake', hash='sha256-M8hA8XVfr/mf/8H0sEWT75mxeoNK0zbmLoa5LUrcV5k=', 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.?secrets.?age.?plugins', 'clanInternals.machines.x86_64-linux.{machine1}.config.clan.core.vars.generat...tings.publicModule', 'clanInternals.machines.x86_64-linux.{machine1}.config.clan.core.vars.settings.secretModule', ...] 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-z8zhqra9/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/3m5kjvpl3zaz5pcf9p446aw6yhwl116v-source?narHash=sha256-M8hA8XVfr/mf/8H0sEWT75mxeoNK0zbmLoa5LUrcV5k="; 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": "maybe", "value": "secrets"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "plugins"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "share"}, {"type": "str", "value": "dependencies"}, {"type": "str", "value": "prompts"}, {"type": "str", "value": "validationHash"}]}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "str", "value": "files"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "secret"}, {"type": "str", "value": "deploy"}, {"type": "str", "value": "owner"}, {"type": "str", "value": "group"}, {"type": "str", "value": "mode"}, {"type": "str", "value": "neededFor"}]}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "defaultGroups"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "publicModule"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "secretModule"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "secretUploadDirectory"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "passCommand"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "secretLocation"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "maybe", "value": "recipients"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "secretLocation"}]'"'"''"'"') 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": "maybe", "value": "secrets"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "plugins"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "share"}, {"type": "str", "value": "dependencies"}, {"type": "str", "value": "prompts"}, {"type": "str", "value": "validationHash"}]}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "str", "value": "files"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "secret"}, {"type": "str", "value": "deploy"}, {"type": "str", "value": "owner"}, {"type": "str", "value": "group"}, {"type": "str", "value": "mode"}, {"type": "str", "value": "neededFor"}]}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "defaultGroups"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "publicModule"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "secretModule"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "secretUploadDirectory"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "passCommand"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "secretLocation"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "maybe", "value": "recipients"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "secretLocation"}]'') 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": "maybe", "value": "secrets"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "plugins"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "share"}, {"type": "str", "value": "dependencies"}, {"type": "str", "value": "prompts"}, {"type": "str", "value": "validationHash"}]}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "str", "value": "files"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "secret"}, {"type": "str", "value": "deploy"}, {"type": "str", "value": "owner"}, {"type": "str", "value": "group"}, {"type": "str", "value": "mode"}, {"type": "str", "value": "neededFor"}]}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "defaultGroups"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "publicModule"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "secretModule"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "secretUploadDirectory"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "passCommand"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "secretLocation"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "maybe", "value": "recipients"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "secretLocation"}]'') flake) clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating list element at index 1 clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating attribute 'machine1' clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/cba1x9mxnwr8b36cw41bya7g6d5v1p7d-source/select.nix:325:37: clan-pytest-with-core> E 324| in clan-pytest-with-core> E 325| builtins.mapAttrs (_: v: recurse selectors (idx + 1) v) filteredAttrs clan-pytest-with-core> E | ^ clan-pytest-with-core> E 326| else if selector.type == "maybe" then 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:325:40: clan-pytest-with-core> E 324| in clan-pytest-with-core> E 325| builtins.mapAttrs (_: v: recurse selectors (idx + 1) v) filteredAttrs clan-pytest-with-core> E | ^ clan-pytest-with-core> E 326| else if selector.type == "maybe" then 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 … from call site clan-pytest-with-core> E at /build/store/nix/store/cba1x9mxnwr8b36cw41bya7g6d5v1p7d-source/select.nix:312:15: clan-pytest-with-core> E 311| else if selector.type == "str" then clan-pytest-with-core> E 312| recurse selectors (idx + 1) (builtins.getAttr selector.value obj) clan-pytest-with-core> E | ^ clan-pytest-with-core> E 313| else if selector.type == "set" then 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 'getAttr' builtin clan-pytest-with-core> E at /build/store/nix/store/cba1x9mxnwr8b36cw41bya7g6d5v1p7d-source/select.nix:312:44: clan-pytest-with-core> E 311| else if selector.type == "str" then clan-pytest-with-core> E 312| recurse selectors (idx + 1) (builtins.getAttr selector.value obj) clan-pytest-with-core> E | ^ clan-pytest-with-core> E 313| else if selector.type == "set" then clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'seq' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:401:18: clan-pytest-with-core> E 400| options = checked options; clan-pytest-with-core> E 401| config = checked (removeAttrs config [ "_module" ]); clan-pytest-with-core> E | ^ clan-pytest-with-core> E 402| _module = checked (config._module); 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:304:9: clan-pytest-with-core> E 303| checkUnmatched = clan-pytest-with-core> E 304| if config._module.check && config._module.freeformType == null && merged.unmatchedDefns != [ ] then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 305| let clan-pytest-with-core> E clan-pytest-with-core> E … in the right operand of the AND (&&) operator clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:304:72: clan-pytest-with-core> E 303| checkUnmatched = clan-pytest-with-core> E 304| if config._module.check && config._module.freeformType == null && merged.unmatchedDefns != [ ] then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 305| let clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'unmatchedDefns' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:940:7: clan-pytest-with-core> E 939| # Transforms unmatchedDefnsByName into a list of definitions clan-pytest-with-core> E 940| unmatchedDefns = clan-pytest-with-core> E | ^ clan-pytest-with-core> E 941| if configs == [ ] then clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'concatLists' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:946:11: clan-pytest-with-core> E 945| else clan-pytest-with-core> E 946| concatLists ( clan-pytest-with-core> E | ^ clan-pytest-with-core> E 947| mapAttrsToList ( clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:948:21: clan-pytest-with-core> E 947| mapAttrsToList ( clan-pytest-with-core> E 948| name: defs: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 949| map ( clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'map' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:949:15: clan-pytest-with-core> E 948| name: defs: clan-pytest-with-core> E 949| map ( clan-pytest-with-core> E | ^ clan-pytest-with-core> E 950| def: clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:932:22: clan-pytest-with-core> E 931| # Propagate all unmatched definitions from nested option sets clan-pytest-with-core> E 932| mapAttrs (n: v: v.unmatchedDefns) resultsByName clan-pytest-with-core> E | ^ clan-pytest-with-core> E 933| # Plus the definitions for the current prefix that don't have a matching option clan-pytest-with-core> E clan-pytest-with-core> E (10 duplicate frames omitted) clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:932:25: clan-pytest-with-core> E 931| # Propagate all unmatched definitions from nested option sets clan-pytest-with-core> E 932| mapAttrs (n: v: v.unmatchedDefns) resultsByName clan-pytest-with-core> E | ^ clan-pytest-with-core> E 933| # Plus the definitions for the current prefix that don't have a matching option clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:876:15: clan-pytest-with-core> E 875| resultsByName = mapAttrs ( clan-pytest-with-core> E 876| name: decls: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 877| # We're descending into attribute ‘name’. 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:888:9: clan-pytest-with-core> E 887| in clan-pytest-with-core> E 888| if length optionDecls == length decls then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 889| let clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'length' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:888:12: clan-pytest-with-core> E 887| in clan-pytest-with-core> E 888| if length optionDecls == length decls then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 889| let clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'filter' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:882:25: clan-pytest-with-core> E 881| defns' = rawDefinitionsByName.${name} or [ ]; clan-pytest-with-core> E 882| optionDecls = filter ( clan-pytest-with-core> E | ^ clan-pytest-with-core> E 883| m: clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:883:13: clan-pytest-with-core> E 882| optionDecls = filter ( clan-pytest-with-core> E 883| m: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 884| m.options ? _type clan-pytest-with-core> E clan-pytest-with-core> E … in the left operand of the AND (&&) operator clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:885:13: clan-pytest-with-core> E 884| m.options ? _type clan-pytest-with-core> E 885| && (m.options._type == "option" || throwDeclarationTypeError loc m.options._type m._file) clan-pytest-with-core> E | ^ clan-pytest-with-core> E 886| ) decls; clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'options' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:807:15: clan-pytest-with-core> E 806| pos = unsafeGetAttrPos n subtree; clan-pytest-with-core> E 807| options = option; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 808| }) subtree clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:289:73: clan-pytest-with-core> E 288| len = length attrPath; clan-pytest-with-core> E 289| atDepth = n: if n == len then value else { ${elemAt attrPath n} = atDepth (n + 1); }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 290| in clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'atDepth' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:289:17: clan-pytest-with-core> E 288| len = length attrPath; clan-pytest-with-core> E 289| atDepth = n: if n == len then value else { ${elemAt attrPath n} = atDepth (n + 1); }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 290| in clan-pytest-with-core> E clan-pytest-with-core> E … in the right operand of the update (//) operator clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:2047:9: clan-pytest-with-core> E 2046| } clan-pytest-with-core> E 2047| // optionalAttrs (toType != null) { clan-pytest-with-core> E | ^ clan-pytest-with-core> E 2048| type = toType; clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:2047:12: clan-pytest-with-core> E 2046| } clan-pytest-with-core> E 2047| // optionalAttrs (toType != null) { clan-pytest-with-core> E | ^ clan-pytest-with-core> E 2048| type = toType; clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'optionalAttrs' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:1492:25: clan-pytest-with-core> E 1491| */ clan-pytest-with-core> E 1492| optionalAttrs = cond: as: if cond then as else { }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1493| 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:1492:29: clan-pytest-with-core> E 1491| */ clan-pytest-with-core> E 1492| optionalAttrs = cond: as: if cond then as else { }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1493| clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:2036:17: clan-pytest-with-core> E 2035| let clan-pytest-with-core> E 2036| opt = attrByPath to { } options; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 2037| in clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'attrByPath' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:89:24: clan-pytest-with-core> E 88| attrByPath = clan-pytest-with-core> E 89| attrPath: default: set: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 90| let clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:106:5: clan-pytest-with-core> E 105| in clan-pytest-with-core> E 106| attrByPath' 0 set; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 107| clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'attrByPath'' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:93:12: clan-pytest-with-core> E 92| attrByPath' = clan-pytest-with-core> E 93| n: s: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 94| ( clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:102:35: clan-pytest-with-core> E 101| in clan-pytest-with-core> E 102| if s ? ${attr} then attrByPath' (n + 1) s.${attr} else default clan-pytest-with-core> E | ^ clan-pytest-with-core> E 103| ) clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'attrByPath'' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:93:12: clan-pytest-with-core> E 92| attrByPath' = clan-pytest-with-core> E 93| n: s: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 94| ( clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:102:35: clan-pytest-with-core> E 101| in clan-pytest-with-core> E 102| if s ? ${attr} then attrByPath' (n + 1) s.${attr} else default clan-pytest-with-core> E | ^ clan-pytest-with-core> E 103| ) clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'attrByPath'' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:93:12: clan-pytest-with-core> E 92| attrByPath' = clan-pytest-with-core> E 93| n: s: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 94| ( clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:102:35: clan-pytest-with-core> E 101| in clan-pytest-with-core> E 102| if s ? ${attr} then attrByPath' (n + 1) s.${attr} else default clan-pytest-with-core> E | ^ clan-pytest-with-core> E 103| ) clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'attrByPath'' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:93:12: clan-pytest-with-core> E 92| attrByPath' = clan-pytest-with-core> E 93| n: s: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 94| ( clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:102:55: clan-pytest-with-core> E 101| in clan-pytest-with-core> E 102| if s ? ${attr} then attrByPath' (n + 1) s.${attr} else default clan-pytest-with-core> E | ^ clan-pytest-with-core> E 103| ) clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:927:37: clan-pytest-with-core> E 926| clan-pytest-with-core> E 927| matchedOptions = mapAttrs (n: v: v.matchedOptions) resultsByName; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 928| clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'matchedOptions' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:893:13: clan-pytest-with-core> E 892| { clan-pytest-with-core> E 893| matchedOptions = evalOptionValue loc opt defns'; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 894| unmatchedDefns = [ ]; clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:893:30: clan-pytest-with-core> E 892| { clan-pytest-with-core> E 893| matchedOptions = evalOptionValue loc opt defns'; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 894| unmatchedDefns = [ ]; clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'evalOptionValue' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1103:15: clan-pytest-with-core> E 1102| evalOptionValue = clan-pytest-with-core> E 1103| loc: opt: defs: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1104| let clan-pytest-with-core> E clan-pytest-with-core> E … in the left operand of the update (//) operator clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1148:5: clan-pytest-with-core> E 1147| warnDeprecation opt clan-pytest-with-core> E 1148| // { clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1149| value = addErrorContext "while evaluating the option `${showOption loc}':" value; 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1141:9: clan-pytest-with-core> E 1140| warnDeprecation = clan-pytest-with-core> E 1141| if (opt.type.deprecationMessage != null) then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1142| warn "The type `types.${opt.type.name}' of option `${showOption loc}' defined in ${showFiles opt.declarations} is deprecated. ${opt.type.deprecationMessage}" clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:890:19: clan-pytest-with-core> E 889| let clan-pytest-with-core> E 890| opt = fixupOptionType loc (mergeOptionDecls loc decls); clan-pytest-with-core> E | ^ clan-pytest-with-core> E 891| in clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'fixupOptionType' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1473:10: clan-pytest-with-core> E 1472| fixupOptionType = clan-pytest-with-core> E 1473| loc: opt: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1474| if opt.type.getSubModules or null == null then 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1474:5: clan-pytest-with-core> E 1473| loc: opt: clan-pytest-with-core> E 1474| if opt.type.getSubModules or null == null then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1475| opt // { type = opt.type or types.unspecified; } clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'type.getSubModules' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/nixos/modules/services/hardware/bluetooth.nix:72:9: clan-pytest-with-core> E 71| settings = mkOption { clan-pytest-with-core> E 72| type = cfgFmt.type; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 73| default = { }; clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/nixos/modules/services/hardware/bluetooth.nix:26:12: clan-pytest-with-core> E 25| clan-pytest-with-core> E 26| cfgFmt = pkgs.formats.ini { }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 27| clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:727:15: clan-pytest-with-core> E 726| extraArgs = mapAttrs ( clan-pytest-with-core> E 727| name: _: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 728| addErrorContext (context name) ( clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the module argument `pkgs' in "/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/nixos/modules/services/hardware/bluetooth.nix": clan-pytest-with-core> E clan-pytest-with-core> E … noting that argument `pkgs` is not externally provided, so querying `_module.args` instead, requiring `config` clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:731:13: clan-pytest-with-core> E 730| "noting that argument `${name}` is not externally provided, so querying `_module.args` instead, requiring `config`" clan-pytest-with-core> E 731| config._module.args.${name} clan-pytest-with-core> E | ^ clan-pytest-with-core> E 732| ) clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/types.nix:1029:18: clan-pytest-with-core> E 1028| value = mapAttrs ( clan-pytest-with-core> E 1029| n: v: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1030| if lazy then clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'optionalValue.value' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1312:5: clan-pytest-with-core> E 1311| clan-pytest-with-core> E 1312| optionalValue = if isDefined then { value = mergedValue; } else { }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1313| }; 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1312:21: clan-pytest-with-core> E 1311| clan-pytest-with-core> E 1312| optionalValue = if isDefined then { value = mergedValue; } else { }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1313| }; clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'values' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1240:11: clan-pytest-with-core> E 1239| { clan-pytest-with-core> E 1240| values = defsSorted; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1241| inherit (defsFiltered) highestPrio; 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1211:11: clan-pytest-with-core> E 1210| # Avoid sorting if we don't have to. clan-pytest-with-core> E 1211| if any (def: def.value._type or "" == "order") defsFiltered.values then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1212| sortProperties defsFiltered.values clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'any' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1211:14: clan-pytest-with-core> E 1210| # Avoid sorting if we don't have to. clan-pytest-with-core> E 1211| if any (def: def.value._type or "" == "order") defsFiltered.values then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1212| sortProperties defsFiltered.values clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1211:19: clan-pytest-with-core> E 1210| # Avoid sorting if we don't have to. clan-pytest-with-core> E 1211| if any (def: def.value._type or "" == "order") defsFiltered.values then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1212| sortProperties defsFiltered.values clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'value._type' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1422:67: clan-pytest-with-core> E 1421| strip = clan-pytest-with-core> E 1422| def: if def.value._type or "" == "override" then def // { value = def.value.content; } else def; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1423| in clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'value.content' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1566:22: clan-pytest-with-core> E 1565| _type = "override"; clan-pytest-with-core> E 1566| inherit priority content; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1567| }; 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/nixos/modules/misc/nixpkgs.nix:107:15: clan-pytest-with-core> E 106| clan-pytest-with-core> E 107| finalPkgs = if opt.pkgs.isDefined then cfg.pkgs.appendOverlays cfg.overlays else defaultPkgs; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 108| clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'pkgs.isDefined' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1154:21: clan-pytest-with-core> E 1153| definitionsWithLocations = res.defsFinal; clan-pytest-with-core> E 1154| inherit (res) isDefined; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1155| inherit (res.checkedAndMerged) valueMeta; clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'isDefined' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1310:5: clan-pytest-with-core> E 1309| clan-pytest-with-core> E 1310| isDefined = defsFinal != [ ]; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1311| clan-pytest-with-core> E clan-pytest-with-core> E (6 duplicate frames omitted) clan-pytest-with-core> E clan-pytest-with-core> E error: attribute 'system' missing clan-pytest-with-core> E at /build/store/nix/store/y3h139bhv4373m1hab367ma4p5i95i2f-source/modules/clan/module.nix:164:24: clan-pytest-with-core> E 163| (lib.modules.importApply ../../nixosModules/machineModules/overridePkgs.nix { clan-pytest-with-core> E 164| pkgs = nixpkgsMatrix.${config.inventory.machines.${name}.nixpkgs}.system.${system}.pkgs; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 165| }) clan-pytest-with-core> E Did you mean systems? 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 0x7fffe66772f0> clan-pytest-with-core> flake_with_sops = 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_add_machine_to_existing_shared_secret( clan-pytest-with-core> monkeypatch: pytest.MonkeyPatch, clan-pytest-with-core> flake_with_sops: ClanFlake, clan-pytest-with-core> ) -> None: clan-pytest-with-core> """Test that a machine added after initial generation gets access without regeneration. clan-pytest-with-core> clan-pytest-with-core> This tests the scenario where: clan-pytest-with-core> 1. Machine1 is configured and generates a shared secret clan-pytest-with-core> 2. Machine2 is added to the config AFTER the secret exists (with the shared generator) clan-pytest-with-core> 3. Machine2 should get access without the secret being regenerated clan-pytest-with-core> 4. Machine3 is added WITHOUT the shared generator and should NOT have access clan-pytest-with-core> """ clan-pytest-with-core> flake = flake_with_sops clan-pytest-with-core> clan-pytest-with-core> # Step 1: Configure only machine1 with a shared generator clan-pytest-with-core> machine1_config = flake.machines["machine1"] = create_test_machine_config() clan-pytest-with-core> shared_generator = machine1_config["clan"]["core"]["vars"]["generators"][ clan-pytest-with-core> "shared_generator" clan-pytest-with-core> ] clan-pytest-with-core> shared_generator["share"] = True clan-pytest-with-core> shared_generator["files"]["my_secret"]["secret"] = True clan-pytest-with-core> shared_generator["script"] = 'echo "$RANDOM" > "$out"/my_secret' clan-pytest-with-core> flake.refresh() clan-pytest-with-core> monkeypatch.chdir(flake.path) clan-pytest-with-core> clan-pytest-with-core> # Step 2: Generate for machine1 - creates the shared secret clan-pytest-with-core> > cli.run(["vars", "generate", "--flake", str(flake.path), "machine1"]) clan-pytest-with-core> clan-pytest-with-core> /build/src/clan_cli/tests/test_vars_shared.py:201: 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/vars/generate.py:33: in generate_command clan-pytest-with-core> run_generators( clan-pytest-with-core> /build/src/clan_lib/vars/generate.py:306: in run_generators clan-pytest-with-core> all_generators = get_generators(machines, full_closure=True) clan-pytest-with-core> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ clan-pytest-with-core> /build/src/clan_lib/vars/generate.py:146: in get_generators clan-pytest-with-core> flake.precache(get_generators_precache_selectors(list(all_machines))) clan-pytest-with-core> /build/src/clan_lib/flake/flake.py:1151: in precache clan-pytest-with-core> self.get_from_nix(not_fetched_selectors) clan-pytest-with-core> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ clan-pytest-with-core> clan-pytest-with-core> self = Flake(identifier='/build/pytest-z8zhqra9/flake', hash='sha256-M8hA8XVfr/mf/8H0sEWT75mxeoNK0zbmLoa5LUrcV5k=', 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.?secrets.?age.?plugins', 'clanInternals.machines.x86_64-linux.{machine1}.config.clan.core.vars.generat...tings.publicModule', 'clanInternals.machines.x86_64-linux.{machine1}.config.clan.core.vars.settings.secretModule', ...] 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 while executing:$ clan select 'clanInternals.?secrets.?age.?plugins' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{machine1}.config.clan.core.vars.generators.*.{share,dependencies,prompts,validationHash}' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{machine1}.config.clan.core.vars.generators.*.files.*.{secret,deploy,owner,group,mode,neededFor}' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{machine1}.config.clan.core.?sops.?defaultGroups' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{machine1}.config.clan.core.vars.settings.publicModule' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{machine1}.config.clan.core.vars.settings.secretModule' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{machine1}.config.clan.core.vars.?sops.?secretUploadDirectory' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{machine1}.config.clan.core.vars.?password-store.?passCommand' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{machine1}.config.clan.core.vars.?password-store.?secretLocation' clan-pytest-with-core> E $ clan select 'clanInternals.vars.settings.?recipients' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{machine1}.config.clan.core.vars.?age.?secretLocation' clan-pytest-with-core> E Reason: attribute 'system' missing clan-pytest-with-core> E at /build/store/nix/store/y3h139bhv4373m1hab367ma4p5i95i2f-source/modules/clan/module.nix:164:24: clan-pytest-with-core> E 163| (lib.modules.importApply ../../nixosModules/machineModules/overridePkgs.nix { clan-pytest-with-core> E 164| pkgs = nixpkgsMatrix.${config.inventory.machines.${name}.nixpkgs}.system.${system}.pkgs; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 165| }) clan-pytest-with-core> E Did you mean systems?. 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 setup ----------------------------- clan-pytest-with-core> !! $HOME does not point to a temp directory!! HOME=/build/pytest-z8zhqra9 clan-pytest-with-core> [localhost] $ clan vars keygen --flake /build/pytest-z8zhqra9/flake --user admin --no-interactive clan-pytest-with-core> Caller: /build/src/clan_cli/tests/age_keys.py:31::init clan-pytest-with-core> clan-pytest-with-core> Prefetching flake /build/pytest-z8zhqra9/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/febbcab65441be6ccc547560fd0155faadebbbb7 clan-pytest-with-core> (cached) $ clan select clanInternals.inventoryClass.relativeDirectory 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> git \ clan-pytest-with-core> -C /build/pytest-z8zhqra9/flake \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-z8zhqra9/flake/sops/users/admin 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/admin to git clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-z8zhqra9/flake \ clan-pytest-with-core> diff \ clan-pytest-with-core> --cached --exit-code \ clan-pytest-with-core> -- /build/pytest-z8zhqra9/flake/sops/users/admin 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-z8zhqra9/flake \ clan-pytest-with-core> commit \ clan-pytest-with-core> -m 'secrets: add user admin' \ clan-pytest-with-core> --no-verify /build/pytest-z8zhqra9/flake/sops/users/admin 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/admin to git 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/pytest-z8zhqra9 clan-pytest-with-core> DEBUG clan_cli.tests.helpers.cli:__init__.py:143 $ clan vars keygen --flake /build/pytest-z8zhqra9/flake --user admin --no-interactive clan-pytest-with-core> Caller: /build/src/clan_cli/tests/age_keys.py:31::init clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:927 Prefetching flake /build/pytest-z8zhqra9/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/febbcab65441be6ccc547560fd0155faadebbbb7 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.cmd:__init__.py:143 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> DEBUG clan_lib.cmd:__init__.py:143 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> DEBUG clan_cli.secrets.sops:sops.py:99 Found age public key from a private key in the environment (SOPS_AGE_KEY): age1dhwqzkah943xzc34tc3dlmfayyevcmdmxzjezdgdy33euxwf59vsp3vk3c clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:143 git \ clan-pytest-with-core> -C /build/pytest-z8zhqra9/flake \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-z8zhqra9/flake/sops/users/admin 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> DEBUG clan_lib.cmd:__init__.py:143 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> DEBUG clan_lib.git:__init__.py:98 Adding sops/users/admin to git clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:143 git \ clan-pytest-with-core> -C /build/pytest-z8zhqra9/flake \ clan-pytest-with-core> diff \ clan-pytest-with-core> --cached --exit-code \ clan-pytest-with-core> -- /build/pytest-z8zhqra9/flake/sops/users/admin 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> DEBUG clan_lib.cmd:__init__.py:143 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> DEBUG clan_lib.cmd:__init__.py:143 git \ clan-pytest-with-core> -C /build/pytest-z8zhqra9/flake \ clan-pytest-with-core> commit \ clan-pytest-with-core> -m 'secrets: add user admin' \ clan-pytest-with-core> --no-verify /build/pytest-z8zhqra9/flake/sops/users/admin 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> DEBUG clan_lib.cmd:__init__.py:143 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> INFO clan_lib.git:__init__.py:141 Committed sops/users/admin to git clan-pytest-with-core> ----------------------------- Captured stdout call ----------------------------- clan-pytest-with-core> [main d9637e8] flake: update by flake generator clan-pytest-with-core> 2 files changed, 35 insertions(+) clan-pytest-with-core> create mode 100644 machines/machine1/configuration.json clan-pytest-with-core> create mode 100644 machines/machine1/configuration.nix clan-pytest-with-core> ----------------------------- Captured stderr call ----------------------------- clan-pytest-with-core> Prefetching flake /build/pytest-z8zhqra9/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/d2c0050d97832c3ac5193485b93705d00938c15e clan-pytest-with-core> (cached) $ clan select clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> [localhost] $ clan vars generate --flake /build/pytest-z8zhqra9/flake machine1 clan-pytest-with-core> Caller: /build/src/clan_cli/tests/test_vars_shared.py:201::test_add_machine_to_existing_shared_secret clan-pytest-with-core> clan-pytest-with-core> Prefetching flake /build/pytest-z8zhqra9/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.cliChecks clan-pytest-with-core> Cache miss for clanInternals.inventoryClass.inventorySerialization.{instances,machines,meta} clan-pytest-with-core> Loading flake cache from file /build/clan-flake-cache/flakes-v2/0d97476f0c18bdf6f527b17912259276a4c0c513 clan-pytest-with-core> Cache miss for clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> Loading flake cache from file /build/clan-flake-cache/flakes-v2/0d97476f0c18bdf6f527b17912259276a4c0c513 clan-pytest-with-core> (cached) $ clan select 'clanInternals.inventoryClass.inventorySerialization.{instances,machines,meta}' clan-pytest-with-core> Precaching selectors: clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.machines clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.instances clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.meta clan-pytest-with-core> - (not cached) clanInternals.?secrets.?age.?plugins clan-pytest-with-core> - (cached) clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1}.config.clan.core.vars.generators.*.{share,dependencies,prompts,validationHash} clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1}.config.clan.core.vars.generators.*.files.*.{secret,deploy,owner,group,mode,neededFor} clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1}.config.clan.core.?sops.?defaultGroups clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1}.config.clan.core.vars.settings.publicModule clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1}.config.clan.core.vars.settings.secretModule clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1}.config.clan.core.vars.?sops.?secretUploadDirectory clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1}.config.clan.core.vars.?password-store.?passCommand clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1}.config.clan.core.vars.?password-store.?secretLocation clan-pytest-with-core> - (not cached) clanInternals.vars.settings.?recipients clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1}.config.clan.core.vars.?age.?secretLocation clan-pytest-with-core> ------------------------------ Captured log call ------------------------------- clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:927 Prefetching flake /build/pytest-z8zhqra9/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/d2c0050d97832c3ac5193485b93705d00938c15e clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1179 (cached) $ clan select clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> DEBUG clan_cli.tests.helpers.cli:__init__.py:143 $ clan vars generate --flake /build/pytest-z8zhqra9/flake machine1 clan-pytest-with-core> Caller: /build/src/clan_cli/tests/test_vars_shared.py:201::test_add_machine_to_existing_shared_secret clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:927 Prefetching flake /build/pytest-z8zhqra9/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.cliChecks clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1174 Cache miss for clanInternals.inventoryClass.inventorySerialization.{instances,machines,meta} clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:789 Loading flake cache from file /build/clan-flake-cache/flakes-v2/0d97476f0c18bdf6f527b17912259276a4c0c513 clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1174 Cache miss for clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:789 Loading flake cache from file /build/clan-flake-cache/flakes-v2/0d97476f0c18bdf6f527b17912259276a4c0c513 clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1179 (cached) $ clan select 'clanInternals.inventoryClass.inventorySerialization.{instances,machines,meta}' clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1144 Precaching selectors: clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.machines clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.instances clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.meta clan-pytest-with-core> - (not cached) clanInternals.?secrets.?age.?plugins clan-pytest-with-core> - (cached) clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1}.config.clan.core.vars.generators.*.{share,dependencies,prompts,validationHash} clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1}.config.clan.core.vars.generators.*.files.*.{secret,deploy,owner,group,mode,neededFor} clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1}.config.clan.core.?sops.?defaultGroups clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1}.config.clan.core.vars.settings.publicModule clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1}.config.clan.core.vars.settings.secretModule clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1}.config.clan.core.vars.?sops.?secretUploadDirectory clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1}.config.clan.core.vars.?password-store.?passCommand clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1}.config.clan.core.vars.?password-store.?secretLocation clan-pytest-with-core> - (not cached) clanInternals.vars.settings.?recipients clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1}.config.clan.core.vars.?age.?secretLocation clan-pytest-with-core> ________________________ test_shared_vars_regeneration _________________________ clan-pytest-with-core> [gw10] linux -- Python 3.14.7 /nix/store/3n4qphl9s728sz8frmpqqrv9b1m87g68-python3-3.14.7/bin/python clan-pytest-with-core> clan-pytest-with-core> self = Flake(identifier='/build/pytest-ma62pd2b/flake', hash='sha256-9mDdZABTlj2oo92ruH+aMTgcB76FZYNh1W7rEdmoXdo=', 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.?secrets.?age.?plugins', 'clanInternals.machines.x86_64-linux.{machine0,machine1,machine2}.config.clan...', 'clanInternals.machines.x86_64-linux.{machine0,machine1,machine2}.config.clan.core.vars.settings.secretModule', ...] 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-ma62pd2b/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/xyjfmcdizdngg7jl49sl48ia38kwpbdm-source?narHash=sha256-9mDdZABTlj2oo92ruH+aMTgcB76FZYNh1W7rEdmoXdo="; 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": "maybe", "value": "secrets"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "plugins"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine0"}, {"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "share"}, {"type": "str", "value": "dependencies"}, {"type": "str", "value": "prompts"}, {"type": "str", "value": "validationHash"}]}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine0"}, {"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "str", "value": "files"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "secret"}, {"type": "str", "value": "deploy"}, {"type": "str", "value": "owner"}, {"type": "str", "value": "group"}, {"type": "str", "value": "mode"}, {"type": "str", "value": "neededFor"}]}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine0"}, {"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "defaultGroups"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine0"}, {"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "publicModule"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine0"}, {"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "secretModule"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine0"}, {"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "secretUploadDirectory"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine0"}, {"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "passCommand"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine0"}, {"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "secretLocation"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "maybe", "value": "recipients"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine0"}, {"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "secretLocation"}]'"'"''"'"') 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": "maybe", "value": "secrets"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "plugins"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine0"}, {"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "share"}, {"type": "str", "value": "dependencies"}, {"type": "str", "value": "prompts"}, {"type": "str", "value": "validationHash"}]}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine0"}, {"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "str", "value": "files"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "secret"}, {"type": "str", "value": "deploy"}, {"type": "str", "value": "owner"}, {"type": "str", "value": "group"}, {"type": "str", "value": "mode"}, {"type": "str", "value": "neededFor"}]}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine0"}, {"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "defaultGroups"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine0"}, {"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "publicModule"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine0"}, {"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "secretModule"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine0"}, {"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "secretUploadDirectory"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine0"}, {"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "passCommand"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine0"}, {"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "secretLocation"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "maybe", "value": "recipients"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine0"}, {"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "secretLocation"}]'') 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": "maybe", "value": "secrets"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "plugins"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine0"}, {"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "share"}, {"type": "str", "value": "dependencies"}, {"type": "str", "value": "prompts"}, {"type": "str", "value": "validationHash"}]}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine0"}, {"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "str", "value": "files"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "secret"}, {"type": "str", "value": "deploy"}, {"type": "str", "value": "owner"}, {"type": "str", "value": "group"}, {"type": "str", "value": "mode"}, {"type": "str", "value": "neededFor"}]}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine0"}, {"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "defaultGroups"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine0"}, {"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "publicModule"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine0"}, {"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "secretModule"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine0"}, {"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "secretUploadDirectory"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine0"}, {"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "passCommand"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine0"}, {"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "secretLocation"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "maybe", "value": "recipients"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine0"}, {"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "secretLocation"}]'') flake) clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating list element at index 1 clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating attribute 'machine0' clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/cba1x9mxnwr8b36cw41bya7g6d5v1p7d-source/select.nix:325:37: clan-pytest-with-core> E 324| in clan-pytest-with-core> E 325| builtins.mapAttrs (_: v: recurse selectors (idx + 1) v) filteredAttrs clan-pytest-with-core> E | ^ clan-pytest-with-core> E 326| else if selector.type == "maybe" then 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:325:40: clan-pytest-with-core> E 324| in clan-pytest-with-core> E 325| builtins.mapAttrs (_: v: recurse selectors (idx + 1) v) filteredAttrs clan-pytest-with-core> E | ^ clan-pytest-with-core> E 326| else if selector.type == "maybe" then 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 … from call site clan-pytest-with-core> E at /build/store/nix/store/cba1x9mxnwr8b36cw41bya7g6d5v1p7d-source/select.nix:312:15: clan-pytest-with-core> E 311| else if selector.type == "str" then clan-pytest-with-core> E 312| recurse selectors (idx + 1) (builtins.getAttr selector.value obj) clan-pytest-with-core> E | ^ clan-pytest-with-core> E 313| else if selector.type == "set" then 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 'getAttr' builtin clan-pytest-with-core> E at /build/store/nix/store/cba1x9mxnwr8b36cw41bya7g6d5v1p7d-source/select.nix:312:44: clan-pytest-with-core> E 311| else if selector.type == "str" then clan-pytest-with-core> E 312| recurse selectors (idx + 1) (builtins.getAttr selector.value obj) clan-pytest-with-core> E | ^ clan-pytest-with-core> E 313| else if selector.type == "set" then clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'seq' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:401:18: clan-pytest-with-core> E 400| options = checked options; clan-pytest-with-core> E 401| config = checked (removeAttrs config [ "_module" ]); clan-pytest-with-core> E | ^ clan-pytest-with-core> E 402| _module = checked (config._module); 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:304:9: clan-pytest-with-core> E 303| checkUnmatched = clan-pytest-with-core> E 304| if config._module.check && config._module.freeformType == null && merged.unmatchedDefns != [ ] then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 305| let clan-pytest-with-core> E clan-pytest-with-core> E … in the right operand of the AND (&&) operator clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:304:72: clan-pytest-with-core> E 303| checkUnmatched = clan-pytest-with-core> E 304| if config._module.check && config._module.freeformType == null && merged.unmatchedDefns != [ ] then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 305| let clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'unmatchedDefns' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:940:7: clan-pytest-with-core> E 939| # Transforms unmatchedDefnsByName into a list of definitions clan-pytest-with-core> E 940| unmatchedDefns = clan-pytest-with-core> E | ^ clan-pytest-with-core> E 941| if configs == [ ] then clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'concatLists' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:946:11: clan-pytest-with-core> E 945| else clan-pytest-with-core> E 946| concatLists ( clan-pytest-with-core> E | ^ clan-pytest-with-core> E 947| mapAttrsToList ( clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:948:21: clan-pytest-with-core> E 947| mapAttrsToList ( clan-pytest-with-core> E 948| name: defs: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 949| map ( clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'map' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:949:15: clan-pytest-with-core> E 948| name: defs: clan-pytest-with-core> E 949| map ( clan-pytest-with-core> E | ^ clan-pytest-with-core> E 950| def: clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:932:22: clan-pytest-with-core> E 931| # Propagate all unmatched definitions from nested option sets clan-pytest-with-core> E 932| mapAttrs (n: v: v.unmatchedDefns) resultsByName clan-pytest-with-core> E | ^ clan-pytest-with-core> E 933| # Plus the definitions for the current prefix that don't have a matching option clan-pytest-with-core> E clan-pytest-with-core> E (10 duplicate frames omitted) clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:932:25: clan-pytest-with-core> E 931| # Propagate all unmatched definitions from nested option sets clan-pytest-with-core> E 932| mapAttrs (n: v: v.unmatchedDefns) resultsByName clan-pytest-with-core> E | ^ clan-pytest-with-core> E 933| # Plus the definitions for the current prefix that don't have a matching option clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:876:15: clan-pytest-with-core> E 875| resultsByName = mapAttrs ( clan-pytest-with-core> E 876| name: decls: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 877| # We're descending into attribute ‘name’. 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:888:9: clan-pytest-with-core> E 887| in clan-pytest-with-core> E 888| if length optionDecls == length decls then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 889| let clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'length' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:888:12: clan-pytest-with-core> E 887| in clan-pytest-with-core> E 888| if length optionDecls == length decls then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 889| let clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'filter' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:882:25: clan-pytest-with-core> E 881| defns' = rawDefinitionsByName.${name} or [ ]; clan-pytest-with-core> E 882| optionDecls = filter ( clan-pytest-with-core> E | ^ clan-pytest-with-core> E 883| m: clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:883:13: clan-pytest-with-core> E 882| optionDecls = filter ( clan-pytest-with-core> E 883| m: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 884| m.options ? _type clan-pytest-with-core> E clan-pytest-with-core> E … in the left operand of the AND (&&) operator clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:885:13: clan-pytest-with-core> E 884| m.options ? _type clan-pytest-with-core> E 885| && (m.options._type == "option" || throwDeclarationTypeError loc m.options._type m._file) clan-pytest-with-core> E | ^ clan-pytest-with-core> E 886| ) decls; clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'options' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:807:15: clan-pytest-with-core> E 806| pos = unsafeGetAttrPos n subtree; clan-pytest-with-core> E 807| options = option; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 808| }) subtree clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:289:73: clan-pytest-with-core> E 288| len = length attrPath; clan-pytest-with-core> E 289| atDepth = n: if n == len then value else { ${elemAt attrPath n} = atDepth (n + 1); }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 290| in clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'atDepth' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:289:17: clan-pytest-with-core> E 288| len = length attrPath; clan-pytest-with-core> E 289| atDepth = n: if n == len then value else { ${elemAt attrPath n} = atDepth (n + 1); }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 290| in clan-pytest-with-core> E clan-pytest-with-core> E … in the right operand of the update (//) operator clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:2047:9: clan-pytest-with-core> E 2046| } clan-pytest-with-core> E 2047| // optionalAttrs (toType != null) { clan-pytest-with-core> E | ^ clan-pytest-with-core> E 2048| type = toType; clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:2047:12: clan-pytest-with-core> E 2046| } clan-pytest-with-core> E 2047| // optionalAttrs (toType != null) { clan-pytest-with-core> E | ^ clan-pytest-with-core> E 2048| type = toType; clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'optionalAttrs' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:1492:25: clan-pytest-with-core> E 1491| */ clan-pytest-with-core> E 1492| optionalAttrs = cond: as: if cond then as else { }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1493| 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:1492:29: clan-pytest-with-core> E 1491| */ clan-pytest-with-core> E 1492| optionalAttrs = cond: as: if cond then as else { }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1493| clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:2036:17: clan-pytest-with-core> E 2035| let clan-pytest-with-core> E 2036| opt = attrByPath to { } options; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 2037| in clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'attrByPath' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:89:24: clan-pytest-with-core> E 88| attrByPath = clan-pytest-with-core> E 89| attrPath: default: set: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 90| let clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:106:5: clan-pytest-with-core> E 105| in clan-pytest-with-core> E 106| attrByPath' 0 set; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 107| clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'attrByPath'' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:93:12: clan-pytest-with-core> E 92| attrByPath' = clan-pytest-with-core> E 93| n: s: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 94| ( clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:102:35: clan-pytest-with-core> E 101| in clan-pytest-with-core> E 102| if s ? ${attr} then attrByPath' (n + 1) s.${attr} else default clan-pytest-with-core> E | ^ clan-pytest-with-core> E 103| ) clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'attrByPath'' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:93:12: clan-pytest-with-core> E 92| attrByPath' = clan-pytest-with-core> E 93| n: s: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 94| ( clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:102:35: clan-pytest-with-core> E 101| in clan-pytest-with-core> E 102| if s ? ${attr} then attrByPath' (n + 1) s.${attr} else default clan-pytest-with-core> E | ^ clan-pytest-with-core> E 103| ) clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'attrByPath'' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:93:12: clan-pytest-with-core> E 92| attrByPath' = clan-pytest-with-core> E 93| n: s: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 94| ( clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:102:35: clan-pytest-with-core> E 101| in clan-pytest-with-core> E 102| if s ? ${attr} then attrByPath' (n + 1) s.${attr} else default clan-pytest-with-core> E | ^ clan-pytest-with-core> E 103| ) clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'attrByPath'' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:93:12: clan-pytest-with-core> E 92| attrByPath' = clan-pytest-with-core> E 93| n: s: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 94| ( clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:102:55: clan-pytest-with-core> E 101| in clan-pytest-with-core> E 102| if s ? ${attr} then attrByPath' (n + 1) s.${attr} else default clan-pytest-with-core> E | ^ clan-pytest-with-core> E 103| ) clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:927:37: clan-pytest-with-core> E 926| clan-pytest-with-core> E 927| matchedOptions = mapAttrs (n: v: v.matchedOptions) resultsByName; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 928| clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'matchedOptions' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:893:13: clan-pytest-with-core> E 892| { clan-pytest-with-core> E 893| matchedOptions = evalOptionValue loc opt defns'; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 894| unmatchedDefns = [ ]; clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:893:30: clan-pytest-with-core> E 892| { clan-pytest-with-core> E 893| matchedOptions = evalOptionValue loc opt defns'; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 894| unmatchedDefns = [ ]; clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'evalOptionValue' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1103:15: clan-pytest-with-core> E 1102| evalOptionValue = clan-pytest-with-core> E 1103| loc: opt: defs: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1104| let clan-pytest-with-core> E clan-pytest-with-core> E … in the left operand of the update (//) operator clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1148:5: clan-pytest-with-core> E 1147| warnDeprecation opt clan-pytest-with-core> E 1148| // { clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1149| value = addErrorContext "while evaluating the option `${showOption loc}':" value; 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1141:9: clan-pytest-with-core> E 1140| warnDeprecation = clan-pytest-with-core> E 1141| if (opt.type.deprecationMessage != null) then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1142| warn "The type `types.${opt.type.name}' of option `${showOption loc}' defined in ${showFiles opt.declarations} is deprecated. ${opt.type.deprecationMessage}" clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:890:19: clan-pytest-with-core> E 889| let clan-pytest-with-core> E 890| opt = fixupOptionType loc (mergeOptionDecls loc decls); clan-pytest-with-core> E | ^ clan-pytest-with-core> E 891| in clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'fixupOptionType' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1473:10: clan-pytest-with-core> E 1472| fixupOptionType = clan-pytest-with-core> E 1473| loc: opt: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1474| if opt.type.getSubModules or null == null then 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1474:5: clan-pytest-with-core> E 1473| loc: opt: clan-pytest-with-core> E 1474| if opt.type.getSubModules or null == null then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1475| opt // { type = opt.type or types.unspecified; } clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'type.getSubModules' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/nixos/modules/services/hardware/bluetooth.nix:72:9: clan-pytest-with-core> E 71| settings = mkOption { clan-pytest-with-core> E 72| type = cfgFmt.type; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 73| default = { }; clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/nixos/modules/services/hardware/bluetooth.nix:26:12: clan-pytest-with-core> E 25| clan-pytest-with-core> E 26| cfgFmt = pkgs.formats.ini { }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 27| clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:727:15: clan-pytest-with-core> E 726| extraArgs = mapAttrs ( clan-pytest-with-core> E 727| name: _: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 728| addErrorContext (context name) ( clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the module argument `pkgs' in "/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/nixos/modules/services/hardware/bluetooth.nix": clan-pytest-with-core> E clan-pytest-with-core> E … noting that argument `pkgs` is not externally provided, so querying `_module.args` instead, requiring `config` clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:731:13: clan-pytest-with-core> E 730| "noting that argument `${name}` is not externally provided, so querying `_module.args` instead, requiring `config`" clan-pytest-with-core> E 731| config._module.args.${name} clan-pytest-with-core> E | ^ clan-pytest-with-core> E 732| ) clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/types.nix:1029:18: clan-pytest-with-core> E 1028| value = mapAttrs ( clan-pytest-with-core> E 1029| n: v: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1030| if lazy then clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'optionalValue.value' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1312:5: clan-pytest-with-core> E 1311| clan-pytest-with-core> E 1312| optionalValue = if isDefined then { value = mergedValue; } else { }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1313| }; 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1312:21: clan-pytest-with-core> E 1311| clan-pytest-with-core> E 1312| optionalValue = if isDefined then { value = mergedValue; } else { }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1313| }; clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'values' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1240:11: clan-pytest-with-core> E 1239| { clan-pytest-with-core> E 1240| values = defsSorted; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1241| inherit (defsFiltered) highestPrio; 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1211:11: clan-pytest-with-core> E 1210| # Avoid sorting if we don't have to. clan-pytest-with-core> E 1211| if any (def: def.value._type or "" == "order") defsFiltered.values then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1212| sortProperties defsFiltered.values clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'any' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1211:14: clan-pytest-with-core> E 1210| # Avoid sorting if we don't have to. clan-pytest-with-core> E 1211| if any (def: def.value._type or "" == "order") defsFiltered.values then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1212| sortProperties defsFiltered.values clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1211:19: clan-pytest-with-core> E 1210| # Avoid sorting if we don't have to. clan-pytest-with-core> E 1211| if any (def: def.value._type or "" == "order") defsFiltered.values then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1212| sortProperties defsFiltered.values clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'value._type' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1422:67: clan-pytest-with-core> E 1421| strip = clan-pytest-with-core> E 1422| def: if def.value._type or "" == "override" then def // { value = def.value.content; } else def; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1423| in clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'value.content' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1566:22: clan-pytest-with-core> E 1565| _type = "override"; clan-pytest-with-core> E 1566| inherit priority content; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1567| }; 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/nixos/modules/misc/nixpkgs.nix:107:15: clan-pytest-with-core> E 106| clan-pytest-with-core> E 107| finalPkgs = if opt.pkgs.isDefined then cfg.pkgs.appendOverlays cfg.overlays else defaultPkgs; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 108| clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'pkgs.isDefined' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1154:21: clan-pytest-with-core> E 1153| definitionsWithLocations = res.defsFinal; clan-pytest-with-core> E 1154| inherit (res) isDefined; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1155| inherit (res.checkedAndMerged) valueMeta; clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'isDefined' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1310:5: clan-pytest-with-core> E 1309| clan-pytest-with-core> E 1310| isDefined = defsFinal != [ ]; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1311| clan-pytest-with-core> E clan-pytest-with-core> E (6 duplicate frames omitted) clan-pytest-with-core> E clan-pytest-with-core> E error: attribute 'system' missing clan-pytest-with-core> E at /build/store/nix/store/y3h139bhv4373m1hab367ma4p5i95i2f-source/modules/clan/module.nix:164:24: clan-pytest-with-core> E 163| (lib.modules.importApply ../../nixosModules/machineModules/overridePkgs.nix { clan-pytest-with-core> E 164| pkgs = nixpkgsMatrix.${config.inventory.machines.${name}.nixpkgs}.system.${system}.pkgs; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 165| }) clan-pytest-with-core> E Did you mean systems? 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 0x7fffe90bda90> clan-pytest-with-core> flake_with_sops = 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_shared_vars_regeneration( clan-pytest-with-core> monkeypatch: pytest.MonkeyPatch, clan-pytest-with-core> flake_with_sops: ClanFlake, clan-pytest-with-core> ) -> None: clan-pytest-with-core> """Ensure that is a shared generator gets generated on one machine, dependents of that clan-pytest-with-core> shared generator on other machines get re-generated as well. clan-pytest-with-core> """ clan-pytest-with-core> flake = flake_with_sops clan-pytest-with-core> clan-pytest-with-core> machine1_config = flake.machines["machine1"] = create_test_machine_config() clan-pytest-with-core> shared_generator = machine1_config["clan"]["core"]["vars"]["generators"][ clan-pytest-with-core> "shared_generator" clan-pytest-with-core> ] clan-pytest-with-core> shared_generator["share"] = True clan-pytest-with-core> shared_generator["files"]["my_value"]["secret"] = False clan-pytest-with-core> shared_generator["script"] = 'echo "$RANDOM" > "$out"/my_value' clan-pytest-with-core> child_generator = machine1_config["clan"]["core"]["vars"]["generators"][ clan-pytest-with-core> "child_generator" clan-pytest-with-core> ] clan-pytest-with-core> child_generator["share"] = False clan-pytest-with-core> child_generator["files"]["my_value"]["secret"] = False clan-pytest-with-core> child_generator["dependencies"] = ["shared_generator"] clan-pytest-with-core> child_generator["script"] = 'cat "$in"/shared_generator/my_value > "$out"/my_value' clan-pytest-with-core> # machine 2 is equivalent to machine 1 clan-pytest-with-core> flake.machines["machine2"] = machine1_config clan-pytest-with-core> # machine 0 is a machine with no relevant generators clan-pytest-with-core> # This tests regression: https://git.clan.lol/clan/clan-core/issues/5747 clan-pytest-with-core> # ... where shared vars defined only on some machines lead to an eval errors clan-pytest-with-core> flake.machines["machine0"] = create_test_machine_config() clan-pytest-with-core> flake.refresh() clan-pytest-with-core> monkeypatch.chdir(flake.path) clan-pytest-with-core> machine1 = Machine(name="machine1", flake=Flake(str(flake.path))) clan-pytest-with-core> machine2 = Machine(name="machine2", flake=Flake(str(flake.path))) clan-pytest-with-core> in_repo_store_1 = in_repo_mod.VarsStore(machine1.flake) clan-pytest-with-core> in_repo_store_2 = in_repo_mod.VarsStore(machine2.flake) clan-pytest-with-core> # Create generators with machine context for testing clan-pytest-with-core> child_gen_m1 = Generator( clan-pytest-with-core> _flake=machine1.flake, clan-pytest-with-core> key=GeneratorId(name="child_generator", placement=PerMachine("machine1")), clan-pytest-with-core> ) clan-pytest-with-core> child_gen_m2 = Generator( clan-pytest-with-core> _flake=machine2.flake, clan-pytest-with-core> key=GeneratorId(name="child_generator", placement=PerMachine("machine2")), clan-pytest-with-core> ) clan-pytest-with-core> > cli.run(["vars", "generate", "--flake", str(flake.path)]) clan-pytest-with-core> clan-pytest-with-core> /build/src/clan_cli/tests/test_vars_shared.py:72: 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/vars/generate.py:33: in generate_command clan-pytest-with-core> run_generators( clan-pytest-with-core> /build/src/clan_lib/vars/generate.py:306: in run_generators clan-pytest-with-core> all_generators = get_generators(machines, full_closure=True) clan-pytest-with-core> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ clan-pytest-with-core> /build/src/clan_lib/vars/generate.py:146: in get_generators clan-pytest-with-core> flake.precache(get_generators_precache_selectors(list(all_machines))) clan-pytest-with-core> /build/src/clan_lib/flake/flake.py:1151: in precache clan-pytest-with-core> self.get_from_nix(not_fetched_selectors) clan-pytest-with-core> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ clan-pytest-with-core> clan-pytest-with-core> self = Flake(identifier='/build/pytest-ma62pd2b/flake', hash='sha256-9mDdZABTlj2oo92ruH+aMTgcB76FZYNh1W7rEdmoXdo=', 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.?secrets.?age.?plugins', 'clanInternals.machines.x86_64-linux.{machine0,machine1,machine2}.config.clan...', 'clanInternals.machines.x86_64-linux.{machine0,machine1,machine2}.config.clan.core.vars.settings.secretModule', ...] 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 while executing:$ clan select 'clanInternals.?secrets.?age.?plugins' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{machine0,machine1,machine2}.config.clan.core.vars.generators.*.{share,dependencies,prompts,validationHash}' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{machine0,machine1,machine2}.config.clan.core.vars.generators.*.files.*.{secret,deploy,owner,group,mode,neededFor}' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{machine0,machine1,machine2}.config.clan.core.?sops.?defaultGroups' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{machine0,machine1,machine2}.config.clan.core.vars.settings.publicModule' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{machine0,machine1,machine2}.config.clan.core.vars.settings.secretModule' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{machine0,machine1,machine2}.config.clan.core.vars.?sops.?secretUploadDirectory' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{machine0,machine1,machine2}.config.clan.core.vars.?password-store.?passCommand' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{machine0,machine1,machine2}.config.clan.core.vars.?password-store.?secretLocation' clan-pytest-with-core> E $ clan select 'clanInternals.vars.settings.?recipients' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{machine0,machine1,machine2}.config.clan.core.vars.?age.?secretLocation' clan-pytest-with-core> E Reason: attribute 'system' missing clan-pytest-with-core> E at /build/store/nix/store/y3h139bhv4373m1hab367ma4p5i95i2f-source/modules/clan/module.nix:164:24: clan-pytest-with-core> E 163| (lib.modules.importApply ../../nixosModules/machineModules/overridePkgs.nix { clan-pytest-with-core> E 164| pkgs = nixpkgsMatrix.${config.inventory.machines.${name}.nixpkgs}.system.${system}.pkgs; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 165| }) clan-pytest-with-core> E Did you mean systems?. 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-pdcwecwi/flake/.git/ clan-pytest-with-core> [main (root-commit) 4e7a06b] 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-pdcwecwi/flake/flake.lock": clan-pytest-with-core> • Added input 'clan-core': clan-pytest-with-core> 'path:/nix/store/x4g1qsn1nq0q56zn8h9c7xaiysv7bsf2-clan-core-flake?lastModified=1&narHash=sha256-Ynx5u312tlxJbGJCSevw5zZVxrd02FisWE1my%2B%2BFRSw%3D' (1970-01-01) clan-pytest-with-core> • Added input 'clan-core/data-mesher': clan-pytest-with-core> 'path:/nix/store/kdjkigwckgrfz0yg0d9z7kj2xkf084vs-source?lastModified=1&narHash=sha256-Yase/4e4aNN9QvUMqPH9ngbAmlcJCqLmFL0zuURdkuA%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/w2c23ykc12mswlg8hrrjzb5gv9gvkzwq-source?lastModified=1&narHash=sha256-RxWs5ND31KzTG7wvMM%2BPMfUjyNpmIEr999lqNARaM5o%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/lrxvs4l9bqbgjfz7w9bkfg5zqq442jxc-source?lastModified=1&narHash=sha256-4dtXQk/NMePegK/nWp5NSeuZKLATItOq61lpEvmXqGw%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/p17akwn814w226jq2cdkkhcw4psb0ga9-source?lastModified=0&narHash=sha256-tkD1h/1jLJ6qZHjG7/TOZT1qqI1ej3VPPCufHQyv1Uo%3D' (1970-01-01) clan-pytest-with-core> • Added input 'clan-core/sops-nix': clan-pytest-with-core> 'path:/nix/store/s154mmk8ahvc71gq8xfkbzlk240yvniv-source?lastModified=1&narHash=sha256-gkig4nPi1CWc4Z50GBsjE4ygSE7hMpl/TwID2an2Cck%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/9m1jsz5b9ggmjij2vkmafnhn26g96jjn-source?lastModified=1&narHash=sha256-brhZ8DmuGtzkCYHJg4HEd602amKm89Y9ytsFZ5uWD1w%3D' (1970-01-01) clan-pytest-with-core> • Added input 'clan-core/treefmt-nix': clan-pytest-with-core> 'path:/nix/store/7sjy8935654h3220n5gbaclf5nfw4nzx-source?lastModified=1&narHash=sha256-WSFCsDSE5ffgD2MqzkM2CYjeFiKhRF/dJUN8uedb6YE%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-ma62pd2b clan-pytest-with-core> [localhost] $ clan vars keygen --flake /build/pytest-ma62pd2b/flake --user admin --no-interactive clan-pytest-with-core> Caller: /build/src/clan_cli/tests/age_keys.py:31::init clan-pytest-with-core> clan-pytest-with-core> Prefetching flake /build/pytest-ma62pd2b/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/febbcab65441be6ccc547560fd0155faadebbbb7 clan-pytest-with-core> (cached) $ clan select clanInternals.inventoryClass.relativeDirectory 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> git \ clan-pytest-with-core> -C /build/pytest-ma62pd2b/flake \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-ma62pd2b/flake/sops/users/admin 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/admin to git clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-ma62pd2b/flake \ clan-pytest-with-core> diff \ clan-pytest-with-core> --cached --exit-code \ clan-pytest-with-core> -- /build/pytest-ma62pd2b/flake/sops/users/admin 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-ma62pd2b/flake \ clan-pytest-with-core> commit \ clan-pytest-with-core> -m 'secrets: add user admin' \ clan-pytest-with-core> --no-verify /build/pytest-ma62pd2b/flake/sops/users/admin 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/admin to git 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:143 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-pdcwecwi/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/x4g1qsn1nq0q56zn8h9c7xaiysv7bsf2-clan-core-flake?lastModified=1&narHash=sha256-Ynx5u312tlxJbGJCSevw5zZVxrd02FisWE1my%2B%2BFRSw%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/kdjkigwckgrfz0yg0d9z7kj2xkf084vs-source?lastModified=1&narHash=sha256-Yase/4e4aNN9QvUMqPH9ngbAmlcJCqLmFL0zuURdkuA%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/w2c23ykc12mswlg8hrrjzb5gv9gvkzwq-source?lastModified=1&narHash=sha256-RxWs5ND31KzTG7wvMM%2BPMfUjyNpmIEr999lqNARaM5o%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/lrxvs4l9bqbgjfz7w9bkfg5zqq442jxc-source?lastModified=1&narHash=sha256-4dtXQk/NMePegK/nWp5NSeuZKLATItOq61lpEvmXqGw%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/p17akwn814w226jq2cdkkhcw4psb0ga9-source?lastModified=0&narHash=sha256-tkD1h/1jLJ6qZHjG7/TOZT1qqI1ej3VPPCufHQyv1Uo%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/s154mmk8ahvc71gq8xfkbzlk240yvniv-source?lastModified=1&narHash=sha256-gkig4nPi1CWc4Z50GBsjE4ygSE7hMpl/TwID2an2Cck%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/9m1jsz5b9ggmjij2vkmafnhn26g96jjn-source?lastModified=1&narHash=sha256-brhZ8DmuGtzkCYHJg4HEd602amKm89Y9ytsFZ5uWD1w%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/7sjy8935654h3220n5gbaclf5nfw4nzx-source?lastModified=1&narHash=sha256-WSFCsDSE5ffgD2MqzkM2CYjeFiKhRF/dJUN8uedb6YE%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:143 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-ma62pd2b clan-pytest-with-core> DEBUG clan_cli.tests.helpers.cli:__init__.py:143 $ clan vars keygen --flake /build/pytest-ma62pd2b/flake --user admin --no-interactive clan-pytest-with-core> Caller: /build/src/clan_cli/tests/age_keys.py:31::init clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:927 Prefetching flake /build/pytest-ma62pd2b/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/febbcab65441be6ccc547560fd0155faadebbbb7 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.cmd:__init__.py:143 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> DEBUG clan_lib.cmd:__init__.py:143 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> DEBUG clan_cli.secrets.sops:sops.py:99 Found age public key from a private key in the environment (SOPS_AGE_KEY): age1dhwqzkah943xzc34tc3dlmfayyevcmdmxzjezdgdy33euxwf59vsp3vk3c clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:143 git \ clan-pytest-with-core> -C /build/pytest-ma62pd2b/flake \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-ma62pd2b/flake/sops/users/admin 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> DEBUG clan_lib.cmd:__init__.py:143 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> DEBUG clan_lib.git:__init__.py:98 Adding sops/users/admin to git clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:143 git \ clan-pytest-with-core> -C /build/pytest-ma62pd2b/flake \ clan-pytest-with-core> diff \ clan-pytest-with-core> --cached --exit-code \ clan-pytest-with-core> -- /build/pytest-ma62pd2b/flake/sops/users/admin 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> DEBUG clan_lib.cmd:__init__.py:143 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> DEBUG clan_lib.cmd:__init__.py:143 git \ clan-pytest-with-core> -C /build/pytest-ma62pd2b/flake \ clan-pytest-with-core> commit \ clan-pytest-with-core> -m 'secrets: add user admin' \ clan-pytest-with-core> --no-verify /build/pytest-ma62pd2b/flake/sops/users/admin 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> DEBUG clan_lib.cmd:__init__.py:143 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> INFO clan_lib.git:__init__.py:141 Committed sops/users/admin to git clan-pytest-with-core> ----------------------------- Captured stdout call ----------------------------- clan-pytest-with-core> [main 900aa1d] flake: update by flake generator clan-pytest-with-core> 6 files changed, 116 insertions(+) clan-pytest-with-core> create mode 100644 machines/machine0/configuration.json clan-pytest-with-core> create mode 100644 machines/machine0/configuration.nix clan-pytest-with-core> create mode 100644 machines/machine1/configuration.json clan-pytest-with-core> create mode 100644 machines/machine1/configuration.nix clan-pytest-with-core> create mode 100644 machines/machine2/configuration.json clan-pytest-with-core> create mode 100644 machines/machine2/configuration.nix clan-pytest-with-core> ----------------------------- Captured stderr call ----------------------------- clan-pytest-with-core> Prefetching flake /build/pytest-ma62pd2b/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/d2c0050d97832c3ac5193485b93705d00938c15e clan-pytest-with-core> (cached) $ clan select clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> Prefetching flake /build/pytest-ma62pd2b/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/d2c0050d97832c3ac5193485b93705d00938c15e clan-pytest-with-core> (cached) $ clan select clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> Prefetching flake /build/pytest-ma62pd2b/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/d2c0050d97832c3ac5193485b93705d00938c15e clan-pytest-with-core> (cached) $ clan select clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> Prefetching flake /build/pytest-ma62pd2b/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.inventoryClass.relativeDirectory clan-pytest-with-core> Prefetching flake /build/pytest-ma62pd2b/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/0965c5d3affeb1d929f1dfd4a8e5afc608c5ff83 clan-pytest-with-core> (cached) $ clan select clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> [localhost] $ clan vars generate --flake /build/pytest-ma62pd2b/flake clan-pytest-with-core> Caller: /build/src/clan_cli/tests/test_vars_shared.py:72::test_shared_vars_regeneration clan-pytest-with-core> clan-pytest-with-core> Prefetching flake /build/pytest-ma62pd2b/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/0965c5d3affeb1d929f1dfd4a8e5afc608c5ff83 clan-pytest-with-core> Cache miss for clanInternals.cliChecks clan-pytest-with-core> Loading flake cache from file /build/clan-flake-cache/flakes-v2/0965c5d3affeb1d929f1dfd4a8e5afc608c5ff83 clan-pytest-with-core> Cache miss for clanInternals.inventoryClass.inventorySerialization.{instances,machines,meta} clan-pytest-with-core> Loading flake cache from file /build/clan-flake-cache/flakes-v2/0965c5d3affeb1d929f1dfd4a8e5afc608c5ff83 clan-pytest-with-core> (cached) $ clan select clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> (cached) $ clan select 'clanInternals.inventoryClass.inventorySerialization.{instances,machines,meta}' clan-pytest-with-core> Precaching selectors: clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.machines clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.instances clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.meta clan-pytest-with-core> - (not cached) clanInternals.?secrets.?age.?plugins clan-pytest-with-core> - (cached) clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine0,machine1,machine2}.config.clan.core.vars.generators.*.{share,dependencies,prompts,validationHash} clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine0,machine1,machine2}.config.clan.core.vars.generators.*.files.*.{secret,deploy,owner,group,mode,neededFor} clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine0,machine1,machine2}.config.clan.core.?sops.?defaultGroups clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine0,machine1,machine2}.config.clan.core.vars.settings.publicModule clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine0,machine1,machine2}.config.clan.core.vars.settings.secretModule clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine0,machine1,machine2}.config.clan.core.vars.?sops.?secretUploadDirectory clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine0,machine1,machine2}.config.clan.core.vars.?password-store.?passCommand clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine0,machine1,machine2}.config.clan.core.vars.?password-store.?secretLocation clan-pytest-with-core> - (not cached) clanInternals.vars.settings.?recipients clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine0,machine1,machine2}.config.clan.core.vars.?age.?secretLocation clan-pytest-with-core> ------------------------------ Captured log call ------------------------------- clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:927 Prefetching flake /build/pytest-ma62pd2b/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/d2c0050d97832c3ac5193485b93705d00938c15e 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-ma62pd2b/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/d2c0050d97832c3ac5193485b93705d00938c15e 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-ma62pd2b/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/d2c0050d97832c3ac5193485b93705d00938c15e 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-ma62pd2b/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.inventoryClass.relativeDirectory clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:927 Prefetching flake /build/pytest-ma62pd2b/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/0965c5d3affeb1d929f1dfd4a8e5afc608c5ff83 clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1179 (cached) $ clan select clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> DEBUG clan_cli.tests.helpers.cli:__init__.py:143 $ clan vars generate --flake /build/pytest-ma62pd2b/flake clan-pytest-with-core> Caller: /build/src/clan_cli/tests/test_vars_shared.py:72::test_shared_vars_regeneration clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:927 Prefetching flake /build/pytest-ma62pd2b/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/0965c5d3affeb1d929f1dfd4a8e5afc608c5ff83 clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1174 Cache miss for clanInternals.cliChecks clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:789 Loading flake cache from file /build/clan-flake-cache/flakes-v2/0965c5d3affeb1d929f1dfd4a8e5afc608c5ff83 clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1174 Cache miss for clanInternals.inventoryClass.inventorySerialization.{instances,machines,meta} clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:789 Loading flake cache from file /build/clan-flake-cache/flakes-v2/0965c5d3affeb1d929f1dfd4a8e5afc608c5ff83 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:1179 (cached) $ clan select 'clanInternals.inventoryClass.inventorySerialization.{instances,machines,meta}' clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1144 Precaching selectors: clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.machines clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.instances clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.meta clan-pytest-with-core> - (not cached) clanInternals.?secrets.?age.?plugins clan-pytest-with-core> - (cached) clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine0,machine1,machine2}.config.clan.core.vars.generators.*.{share,dependencies,prompts,validationHash} clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine0,machine1,machine2}.config.clan.core.vars.generators.*.files.*.{secret,deploy,owner,group,mode,neededFor} clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine0,machine1,machine2}.config.clan.core.?sops.?defaultGroups clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine0,machine1,machine2}.config.clan.core.vars.settings.publicModule clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine0,machine1,machine2}.config.clan.core.vars.settings.secretModule clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine0,machine1,machine2}.config.clan.core.vars.?sops.?secretUploadDirectory clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine0,machine1,machine2}.config.clan.core.vars.?password-store.?passCommand clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine0,machine1,machine2}.config.clan.core.vars.?password-store.?secretLocation clan-pytest-with-core> - (not cached) clanInternals.vars.settings.?recipients clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine0,machine1,machine2}.config.clan.core.vars.?age.?secretLocation clan-pytest-with-core> ____ test_generate_removes_stale_machine_symlink_when_deploy_becomes_false _____ clan-pytest-with-core> [gw13] linux -- Python 3.14.7 /nix/store/3n4qphl9s728sz8frmpqqrv9b1m87g68-python3-3.14.7/bin/python clan-pytest-with-core> clan-pytest-with-core> self = Flake(identifier='/build/pytest-hzqjc3rx/flake', hash='sha256-+DzWCeL7VAPKQeDJKJYahikJIMgJVCT92w/TiqKL4AQ=', 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.?secrets.?age.?plugins', 'clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.var...licModule', 'clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.settings.secretModule', ...] 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-hzqjc3rx/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/f7b3ik54ansnmws1g6fzs57sc1b74lv5-source?narHash=sha256-+DzWCeL7VAPKQeDJKJYahikJIMgJVCT92w/TiqKL4AQ="; 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": "maybe", "value": "secrets"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "plugins"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "share"}, {"type": "str", "value": "dependencies"}, {"type": "str", "value": "prompts"}, {"type": "str", "value": "validationHash"}]}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "str", "value": "files"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "secret"}, {"type": "str", "value": "deploy"}, {"type": "str", "value": "owner"}, {"type": "str", "value": "group"}, {"type": "str", "value": "mode"}, {"type": "str", "value": "neededFor"}]}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "defaultGroups"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "publicModule"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "secretModule"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "secretUploadDirectory"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "passCommand"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "secretLocation"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "maybe", "value": "recipients"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "secretLocation"}]'"'"''"'"') 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": "maybe", "value": "secrets"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "plugins"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "share"}, {"type": "str", "value": "dependencies"}, {"type": "str", "value": "prompts"}, {"type": "str", "value": "validationHash"}]}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "str", "value": "files"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "secret"}, {"type": "str", "value": "deploy"}, {"type": "str", "value": "owner"}, {"type": "str", "value": "group"}, {"type": "str", "value": "mode"}, {"type": "str", "value": "neededFor"}]}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "defaultGroups"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "publicModule"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "secretModule"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "secretUploadDirectory"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "passCommand"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "secretLocation"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "maybe", "value": "recipients"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "secretLocation"}]'') 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": "maybe", "value": "secrets"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "plugins"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "share"}, {"type": "str", "value": "dependencies"}, {"type": "str", "value": "prompts"}, {"type": "str", "value": "validationHash"}]}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "str", "value": "files"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "secret"}, {"type": "str", "value": "deploy"}, {"type": "str", "value": "owner"}, {"type": "str", "value": "group"}, {"type": "str", "value": "mode"}, {"type": "str", "value": "neededFor"}]}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "defaultGroups"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "publicModule"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "secretModule"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "secretUploadDirectory"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "passCommand"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "secretLocation"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "maybe", "value": "recipients"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "secretLocation"}]'') flake) clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating list element at index 1 clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating attribute 'machine1' clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/cba1x9mxnwr8b36cw41bya7g6d5v1p7d-source/select.nix:325:37: clan-pytest-with-core> E 324| in clan-pytest-with-core> E 325| builtins.mapAttrs (_: v: recurse selectors (idx + 1) v) filteredAttrs clan-pytest-with-core> E | ^ clan-pytest-with-core> E 326| else if selector.type == "maybe" then 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:325:40: clan-pytest-with-core> E 324| in clan-pytest-with-core> E 325| builtins.mapAttrs (_: v: recurse selectors (idx + 1) v) filteredAttrs clan-pytest-with-core> E | ^ clan-pytest-with-core> E 326| else if selector.type == "maybe" then 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 … from call site clan-pytest-with-core> E at /build/store/nix/store/cba1x9mxnwr8b36cw41bya7g6d5v1p7d-source/select.nix:312:15: clan-pytest-with-core> E 311| else if selector.type == "str" then clan-pytest-with-core> E 312| recurse selectors (idx + 1) (builtins.getAttr selector.value obj) clan-pytest-with-core> E | ^ clan-pytest-with-core> E 313| else if selector.type == "set" then 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 'getAttr' builtin clan-pytest-with-core> E at /build/store/nix/store/cba1x9mxnwr8b36cw41bya7g6d5v1p7d-source/select.nix:312:44: clan-pytest-with-core> E 311| else if selector.type == "str" then clan-pytest-with-core> E 312| recurse selectors (idx + 1) (builtins.getAttr selector.value obj) clan-pytest-with-core> E | ^ clan-pytest-with-core> E 313| else if selector.type == "set" then clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'seq' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:401:18: clan-pytest-with-core> E 400| options = checked options; clan-pytest-with-core> E 401| config = checked (removeAttrs config [ "_module" ]); clan-pytest-with-core> E | ^ clan-pytest-with-core> E 402| _module = checked (config._module); 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:304:9: clan-pytest-with-core> E 303| checkUnmatched = clan-pytest-with-core> E 304| if config._module.check && config._module.freeformType == null && merged.unmatchedDefns != [ ] then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 305| let clan-pytest-with-core> E clan-pytest-with-core> E … in the right operand of the AND (&&) operator clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:304:72: clan-pytest-with-core> E 303| checkUnmatched = clan-pytest-with-core> E 304| if config._module.check && config._module.freeformType == null && merged.unmatchedDefns != [ ] then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 305| let clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'unmatchedDefns' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:940:7: clan-pytest-with-core> E 939| # Transforms unmatchedDefnsByName into a list of definitions clan-pytest-with-core> E 940| unmatchedDefns = clan-pytest-with-core> E | ^ clan-pytest-with-core> E 941| if configs == [ ] then clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'concatLists' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:946:11: clan-pytest-with-core> E 945| else clan-pytest-with-core> E 946| concatLists ( clan-pytest-with-core> E | ^ clan-pytest-with-core> E 947| mapAttrsToList ( clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:948:21: clan-pytest-with-core> E 947| mapAttrsToList ( clan-pytest-with-core> E 948| name: defs: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 949| map ( clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'map' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:949:15: clan-pytest-with-core> E 948| name: defs: clan-pytest-with-core> E 949| map ( clan-pytest-with-core> E | ^ clan-pytest-with-core> E 950| def: clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:932:22: clan-pytest-with-core> E 931| # Propagate all unmatched definitions from nested option sets clan-pytest-with-core> E 932| mapAttrs (n: v: v.unmatchedDefns) resultsByName clan-pytest-with-core> E | ^ clan-pytest-with-core> E 933| # Plus the definitions for the current prefix that don't have a matching option clan-pytest-with-core> E clan-pytest-with-core> E (10 duplicate frames omitted) clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:932:25: clan-pytest-with-core> E 931| # Propagate all unmatched definitions from nested option sets clan-pytest-with-core> E 932| mapAttrs (n: v: v.unmatchedDefns) resultsByName clan-pytest-with-core> E | ^ clan-pytest-with-core> E 933| # Plus the definitions for the current prefix that don't have a matching option clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:876:15: clan-pytest-with-core> E 875| resultsByName = mapAttrs ( clan-pytest-with-core> E 876| name: decls: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 877| # We're descending into attribute ‘name’. 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:888:9: clan-pytest-with-core> E 887| in clan-pytest-with-core> E 888| if length optionDecls == length decls then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 889| let clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'length' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:888:12: clan-pytest-with-core> E 887| in clan-pytest-with-core> E 888| if length optionDecls == length decls then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 889| let clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'filter' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:882:25: clan-pytest-with-core> E 881| defns' = rawDefinitionsByName.${name} or [ ]; clan-pytest-with-core> E 882| optionDecls = filter ( clan-pytest-with-core> E | ^ clan-pytest-with-core> E 883| m: clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:883:13: clan-pytest-with-core> E 882| optionDecls = filter ( clan-pytest-with-core> E 883| m: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 884| m.options ? _type clan-pytest-with-core> E clan-pytest-with-core> E … in the left operand of the AND (&&) operator clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:885:13: clan-pytest-with-core> E 884| m.options ? _type clan-pytest-with-core> E 885| && (m.options._type == "option" || throwDeclarationTypeError loc m.options._type m._file) clan-pytest-with-core> E | ^ clan-pytest-with-core> E 886| ) decls; clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'options' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:807:15: clan-pytest-with-core> E 806| pos = unsafeGetAttrPos n subtree; clan-pytest-with-core> E 807| options = option; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 808| }) subtree clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:289:73: clan-pytest-with-core> E 288| len = length attrPath; clan-pytest-with-core> E 289| atDepth = n: if n == len then value else { ${elemAt attrPath n} = atDepth (n + 1); }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 290| in clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'atDepth' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:289:17: clan-pytest-with-core> E 288| len = length attrPath; clan-pytest-with-core> E 289| atDepth = n: if n == len then value else { ${elemAt attrPath n} = atDepth (n + 1); }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 290| in clan-pytest-with-core> E clan-pytest-with-core> E … in the right operand of the update (//) operator clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:2047:9: clan-pytest-with-core> E 2046| } clan-pytest-with-core> E 2047| // optionalAttrs (toType != null) { clan-pytest-with-core> E | ^ clan-pytest-with-core> E 2048| type = toType; clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:2047:12: clan-pytest-with-core> E 2046| } clan-pytest-with-core> E 2047| // optionalAttrs (toType != null) { clan-pytest-with-core> E | ^ clan-pytest-with-core> E 2048| type = toType; clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'optionalAttrs' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:1492:25: clan-pytest-with-core> E 1491| */ clan-pytest-with-core> E 1492| optionalAttrs = cond: as: if cond then as else { }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1493| 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:1492:29: clan-pytest-with-core> E 1491| */ clan-pytest-with-core> E 1492| optionalAttrs = cond: as: if cond then as else { }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1493| clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:2036:17: clan-pytest-with-core> E 2035| let clan-pytest-with-core> E 2036| opt = attrByPath to { } options; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 2037| in clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'attrByPath' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:89:24: clan-pytest-with-core> E 88| attrByPath = clan-pytest-with-core> E 89| attrPath: default: set: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 90| let clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:106:5: clan-pytest-with-core> E 105| in clan-pytest-with-core> E 106| attrByPath' 0 set; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 107| clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'attrByPath'' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:93:12: clan-pytest-with-core> E 92| attrByPath' = clan-pytest-with-core> E 93| n: s: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 94| ( clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:102:35: clan-pytest-with-core> E 101| in clan-pytest-with-core> E 102| if s ? ${attr} then attrByPath' (n + 1) s.${attr} else default clan-pytest-with-core> E | ^ clan-pytest-with-core> E 103| ) clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'attrByPath'' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:93:12: clan-pytest-with-core> E 92| attrByPath' = clan-pytest-with-core> E 93| n: s: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 94| ( clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:102:35: clan-pytest-with-core> E 101| in clan-pytest-with-core> E 102| if s ? ${attr} then attrByPath' (n + 1) s.${attr} else default clan-pytest-with-core> E | ^ clan-pytest-with-core> E 103| ) clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'attrByPath'' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:93:12: clan-pytest-with-core> E 92| attrByPath' = clan-pytest-with-core> E 93| n: s: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 94| ( clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:102:35: clan-pytest-with-core> E 101| in clan-pytest-with-core> E 102| if s ? ${attr} then attrByPath' (n + 1) s.${attr} else default clan-pytest-with-core> E | ^ clan-pytest-with-core> E 103| ) clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'attrByPath'' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:93:12: clan-pytest-with-core> E 92| attrByPath' = clan-pytest-with-core> E 93| n: s: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 94| ( clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:102:55: clan-pytest-with-core> E 101| in clan-pytest-with-core> E 102| if s ? ${attr} then attrByPath' (n + 1) s.${attr} else default clan-pytest-with-core> E | ^ clan-pytest-with-core> E 103| ) clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:927:37: clan-pytest-with-core> E 926| clan-pytest-with-core> E 927| matchedOptions = mapAttrs (n: v: v.matchedOptions) resultsByName; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 928| clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'matchedOptions' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:893:13: clan-pytest-with-core> E 892| { clan-pytest-with-core> E 893| matchedOptions = evalOptionValue loc opt defns'; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 894| unmatchedDefns = [ ]; clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:893:30: clan-pytest-with-core> E 892| { clan-pytest-with-core> E 893| matchedOptions = evalOptionValue loc opt defns'; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 894| unmatchedDefns = [ ]; clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'evalOptionValue' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1103:15: clan-pytest-with-core> E 1102| evalOptionValue = clan-pytest-with-core> E 1103| loc: opt: defs: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1104| let clan-pytest-with-core> E clan-pytest-with-core> E … in the left operand of the update (//) operator clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1148:5: clan-pytest-with-core> E 1147| warnDeprecation opt clan-pytest-with-core> E 1148| // { clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1149| value = addErrorContext "while evaluating the option `${showOption loc}':" value; 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1141:9: clan-pytest-with-core> E 1140| warnDeprecation = clan-pytest-with-core> E 1141| if (opt.type.deprecationMessage != null) then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1142| warn "The type `types.${opt.type.name}' of option `${showOption loc}' defined in ${showFiles opt.declarations} is deprecated. ${opt.type.deprecationMessage}" clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:890:19: clan-pytest-with-core> E 889| let clan-pytest-with-core> E 890| opt = fixupOptionType loc (mergeOptionDecls loc decls); clan-pytest-with-core> E | ^ clan-pytest-with-core> E 891| in clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'fixupOptionType' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1473:10: clan-pytest-with-core> E 1472| fixupOptionType = clan-pytest-with-core> E 1473| loc: opt: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1474| if opt.type.getSubModules or null == null then 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1474:5: clan-pytest-with-core> E 1473| loc: opt: clan-pytest-with-core> E 1474| if opt.type.getSubModules or null == null then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1475| opt // { type = opt.type or types.unspecified; } clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'type.getSubModules' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/nixos/modules/services/hardware/bluetooth.nix:72:9: clan-pytest-with-core> E 71| settings = mkOption { clan-pytest-with-core> E 72| type = cfgFmt.type; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 73| default = { }; clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/nixos/modules/services/hardware/bluetooth.nix:26:12: clan-pytest-with-core> E 25| clan-pytest-with-core> E 26| cfgFmt = pkgs.formats.ini { }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 27| clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:727:15: clan-pytest-with-core> E 726| extraArgs = mapAttrs ( clan-pytest-with-core> E 727| name: _: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 728| addErrorContext (context name) ( clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the module argument `pkgs' in "/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/nixos/modules/services/hardware/bluetooth.nix": clan-pytest-with-core> E clan-pytest-with-core> E … noting that argument `pkgs` is not externally provided, so querying `_module.args` instead, requiring `config` clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:731:13: clan-pytest-with-core> E 730| "noting that argument `${name}` is not externally provided, so querying `_module.args` instead, requiring `config`" clan-pytest-with-core> E 731| config._module.args.${name} clan-pytest-with-core> E | ^ clan-pytest-with-core> E 732| ) clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/types.nix:1029:18: clan-pytest-with-core> E 1028| value = mapAttrs ( clan-pytest-with-core> E 1029| n: v: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1030| if lazy then clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'optionalValue.value' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1312:5: clan-pytest-with-core> E 1311| clan-pytest-with-core> E 1312| optionalValue = if isDefined then { value = mergedValue; } else { }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1313| }; 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1312:21: clan-pytest-with-core> E 1311| clan-pytest-with-core> E 1312| optionalValue = if isDefined then { value = mergedValue; } else { }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1313| }; clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'values' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1240:11: clan-pytest-with-core> E 1239| { clan-pytest-with-core> E 1240| values = defsSorted; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1241| inherit (defsFiltered) highestPrio; 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1211:11: clan-pytest-with-core> E 1210| # Avoid sorting if we don't have to. clan-pytest-with-core> E 1211| if any (def: def.value._type or "" == "order") defsFiltered.values then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1212| sortProperties defsFiltered.values clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'any' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1211:14: clan-pytest-with-core> E 1210| # Avoid sorting if we don't have to. clan-pytest-with-core> E 1211| if any (def: def.value._type or "" == "order") defsFiltered.values then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1212| sortProperties defsFiltered.values clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1211:19: clan-pytest-with-core> E 1210| # Avoid sorting if we don't have to. clan-pytest-with-core> E 1211| if any (def: def.value._type or "" == "order") defsFiltered.values then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1212| sortProperties defsFiltered.values clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'value._type' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1422:67: clan-pytest-with-core> E 1421| strip = clan-pytest-with-core> E 1422| def: if def.value._type or "" == "override" then def // { value = def.value.content; } else def; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1423| in clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'value.content' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1566:22: clan-pytest-with-core> E 1565| _type = "override"; clan-pytest-with-core> E 1566| inherit priority content; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1567| }; 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/nixos/modules/misc/nixpkgs.nix:107:15: clan-pytest-with-core> E 106| clan-pytest-with-core> E 107| finalPkgs = if opt.pkgs.isDefined then cfg.pkgs.appendOverlays cfg.overlays else defaultPkgs; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 108| clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'pkgs.isDefined' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1154:21: clan-pytest-with-core> E 1153| definitionsWithLocations = res.defsFinal; clan-pytest-with-core> E 1154| inherit (res) isDefined; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1155| inherit (res.checkedAndMerged) valueMeta; clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'isDefined' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1310:5: clan-pytest-with-core> E 1309| clan-pytest-with-core> E 1310| isDefined = defsFinal != [ ]; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1311| clan-pytest-with-core> E clan-pytest-with-core> E (6 duplicate frames omitted) clan-pytest-with-core> E clan-pytest-with-core> E error: attribute 'system' missing clan-pytest-with-core> E at /build/store/nix/store/y3h139bhv4373m1hab367ma4p5i95i2f-source/modules/clan/module.nix:164:24: clan-pytest-with-core> E 163| (lib.modules.importApply ../../nixosModules/machineModules/overridePkgs.nix { clan-pytest-with-core> E 164| pkgs = nixpkgsMatrix.${config.inventory.machines.${name}.nixpkgs}.system.${system}.pkgs; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 165| }) clan-pytest-with-core> E Did you mean systems? 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 0x7fffe632f450> clan-pytest-with-core> flake_with_sops = 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_generate_removes_stale_machine_symlink_when_deploy_becomes_false( clan-pytest-with-core> monkeypatch: pytest.MonkeyPatch, clan-pytest-with-core> flake_with_sops: ClanFlake, clan-pytest-with-core> ) -> None: clan-pytest-with-core> """Test that 'vars generate' cleans up stale machine symlinks when a shared clan-pytest-with-core> secret's deploy setting changes from True to False. clan-pytest-with-core> clan-pytest-with-core> Regression test: the re-encryption loop in run_generators() used to skip clan-pytest-with-core> files with deploy=False entirely, so fix() was never called and stale clan-pytest-with-core> machine symlinks from the deploy=True era were left behind. clan-pytest-with-core> """ clan-pytest-with-core> flake = flake_with_sops clan-pytest-with-core> clan-pytest-with-core> # Two machines sharing a generator with deploy=True (default) + secret=True clan-pytest-with-core> m1_config = flake.machines["machine1"] = create_test_machine_config() clan-pytest-with-core> shared_gen = m1_config["clan"]["core"]["vars"]["generators"]["my_shared_gen"] clan-pytest-with-core> shared_gen["share"] = True clan-pytest-with-core> shared_gen["files"]["my_secret"]["secret"] = True clan-pytest-with-core> shared_gen["script"] = 'echo -n secret_value > "$out"/my_secret' clan-pytest-with-core> clan-pytest-with-core> m2_config = flake.machines["machine2"] = create_test_machine_config() clan-pytest-with-core> m2_config["clan"]["core"]["vars"]["generators"]["my_shared_gen"] = shared_gen.copy() clan-pytest-with-core> clan-pytest-with-core> flake.refresh() clan-pytest-with-core> monkeypatch.chdir(flake.path) clan-pytest-with-core> clan-pytest-with-core> # Generate — both machines get access (deploy=True) clan-pytest-with-core> > cli.run(["vars", "generate", "--flake", str(flake.path)]) clan-pytest-with-core> clan-pytest-with-core> /build/src/clan_cli/tests/test_vars_shared.py:405: 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/vars/generate.py:33: in generate_command clan-pytest-with-core> run_generators( clan-pytest-with-core> /build/src/clan_lib/vars/generate.py:306: in run_generators clan-pytest-with-core> all_generators = get_generators(machines, full_closure=True) clan-pytest-with-core> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ clan-pytest-with-core> /build/src/clan_lib/vars/generate.py:146: in get_generators clan-pytest-with-core> flake.precache(get_generators_precache_selectors(list(all_machines))) clan-pytest-with-core> /build/src/clan_lib/flake/flake.py:1151: in precache clan-pytest-with-core> self.get_from_nix(not_fetched_selectors) clan-pytest-with-core> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ clan-pytest-with-core> clan-pytest-with-core> self = Flake(identifier='/build/pytest-hzqjc3rx/flake', hash='sha256-+DzWCeL7VAPKQeDJKJYahikJIMgJVCT92w/TiqKL4AQ=', 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.?secrets.?age.?plugins', 'clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.var...licModule', 'clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.settings.secretModule', ...] 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 while executing:$ clan select 'clanInternals.?secrets.?age.?plugins' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.generators.*.{share,dependencies,prompts,validationHash}' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.generators.*.files.*.{secret,deploy,owner,group,mode,neededFor}' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.?sops.?defaultGroups' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.settings.publicModule' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.settings.secretModule' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.?sops.?secretUploadDirectory' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.?password-store.?passCommand' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.?password-store.?secretLocation' clan-pytest-with-core> E $ clan select 'clanInternals.vars.settings.?recipients' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.?age.?secretLocation' clan-pytest-with-core> E Reason: attribute 'system' missing clan-pytest-with-core> E at /build/store/nix/store/y3h139bhv4373m1hab367ma4p5i95i2f-source/modules/clan/module.nix:164:24: clan-pytest-with-core> E 163| (lib.modules.importApply ../../nixosModules/machineModules/overridePkgs.nix { clan-pytest-with-core> E 164| pkgs = nixpkgsMatrix.${config.inventory.machines.${name}.nixpkgs}.system.${system}.pkgs; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 165| }) clan-pytest-with-core> E Did you mean systems?. 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 setup ----------------------------- clan-pytest-with-core> !! $HOME does not point to a temp directory!! HOME=/build/pytest-hzqjc3rx clan-pytest-with-core> [localhost] $ clan vars keygen --flake /build/pytest-hzqjc3rx/flake --user admin --no-interactive clan-pytest-with-core> Caller: /build/src/clan_cli/tests/age_keys.py:31::init clan-pytest-with-core> clan-pytest-with-core> Prefetching flake /build/pytest-hzqjc3rx/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/febbcab65441be6ccc547560fd0155faadebbbb7 clan-pytest-with-core> (cached) $ clan select clanInternals.inventoryClass.relativeDirectory 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> git \ clan-pytest-with-core> -C /build/pytest-hzqjc3rx/flake \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-hzqjc3rx/flake/sops/users/admin 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/admin to git clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-hzqjc3rx/flake \ clan-pytest-with-core> diff \ clan-pytest-with-core> --cached --exit-code \ clan-pytest-with-core> -- /build/pytest-hzqjc3rx/flake/sops/users/admin 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-hzqjc3rx/flake \ clan-pytest-with-core> commit \ clan-pytest-with-core> -m 'secrets: add user admin' \ clan-pytest-with-core> --no-verify /build/pytest-hzqjc3rx/flake/sops/users/admin 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/admin to git 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/pytest-hzqjc3rx clan-pytest-with-core> DEBUG clan_cli.tests.helpers.cli:__init__.py:143 $ clan vars keygen --flake /build/pytest-hzqjc3rx/flake --user admin --no-interactive clan-pytest-with-core> Caller: /build/src/clan_cli/tests/age_keys.py:31::init clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:927 Prefetching flake /build/pytest-hzqjc3rx/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/febbcab65441be6ccc547560fd0155faadebbbb7 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.cmd:__init__.py:143 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> DEBUG clan_lib.cmd:__init__.py:143 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> DEBUG clan_cli.secrets.sops:sops.py:99 Found age public key from a private key in the environment (SOPS_AGE_KEY): age1dhwqzkah943xzc34tc3dlmfayyevcmdmxzjezdgdy33euxwf59vsp3vk3c clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:143 git \ clan-pytest-with-core> -C /build/pytest-hzqjc3rx/flake \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-hzqjc3rx/flake/sops/users/admin 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> DEBUG clan_lib.cmd:__init__.py:143 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> DEBUG clan_lib.git:__init__.py:98 Adding sops/users/admin to git clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:143 git \ clan-pytest-with-core> -C /build/pytest-hzqjc3rx/flake \ clan-pytest-with-core> diff \ clan-pytest-with-core> --cached --exit-code \ clan-pytest-with-core> -- /build/pytest-hzqjc3rx/flake/sops/users/admin 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> DEBUG clan_lib.cmd:__init__.py:143 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> DEBUG clan_lib.cmd:__init__.py:143 git \ clan-pytest-with-core> -C /build/pytest-hzqjc3rx/flake \ clan-pytest-with-core> commit \ clan-pytest-with-core> -m 'secrets: add user admin' \ clan-pytest-with-core> --no-verify /build/pytest-hzqjc3rx/flake/sops/users/admin 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> DEBUG clan_lib.cmd:__init__.py:143 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> INFO clan_lib.git:__init__.py:141 Committed sops/users/admin to git clan-pytest-with-core> ----------------------------- Captured stdout call ----------------------------- clan-pytest-with-core> [main 3f9cd1c] flake: update by flake generator clan-pytest-with-core> 4 files changed, 70 insertions(+) clan-pytest-with-core> create mode 100644 machines/machine1/configuration.json clan-pytest-with-core> create mode 100644 machines/machine1/configuration.nix clan-pytest-with-core> create mode 100644 machines/machine2/configuration.json clan-pytest-with-core> create mode 100644 machines/machine2/configuration.nix clan-pytest-with-core> ----------------------------- Captured stderr call ----------------------------- clan-pytest-with-core> Prefetching flake /build/pytest-hzqjc3rx/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/d2c0050d97832c3ac5193485b93705d00938c15e clan-pytest-with-core> (cached) $ clan select clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> Prefetching flake /build/pytest-hzqjc3rx/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/d2c0050d97832c3ac5193485b93705d00938c15e clan-pytest-with-core> (cached) $ clan select clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> [localhost] $ clan vars generate --flake /build/pytest-hzqjc3rx/flake clan-pytest-with-core> Caller: /build/src/clan_cli/tests/test_vars_shared.py:405::test_generate_removes_stale_machine_symlink_when_deploy_becomes_false clan-pytest-with-core> clan-pytest-with-core> Prefetching flake /build/pytest-hzqjc3rx/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.cliChecks clan-pytest-with-core> Cache miss for clanInternals.inventoryClass.inventorySerialization.{instances,machines,meta} clan-pytest-with-core> Loading flake cache from file /build/clan-flake-cache/flakes-v2/db925d9683d06efc10f48cecd8255abfd691d474 clan-pytest-with-core> Cache miss for clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> Loading flake cache from file /build/clan-flake-cache/flakes-v2/db925d9683d06efc10f48cecd8255abfd691d474 clan-pytest-with-core> (cached) $ clan select 'clanInternals.inventoryClass.inventorySerialization.{instances,machines,meta}' clan-pytest-with-core> Precaching selectors: clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.machines clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.instances clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.meta clan-pytest-with-core> - (not cached) clanInternals.?secrets.?age.?plugins clan-pytest-with-core> - (cached) clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.generators.*.{share,dependencies,prompts,validationHash} clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.generators.*.files.*.{secret,deploy,owner,group,mode,neededFor} clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.?sops.?defaultGroups clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.settings.publicModule clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.settings.secretModule clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.?sops.?secretUploadDirectory clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.?password-store.?passCommand clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.?password-store.?secretLocation clan-pytest-with-core> - (not cached) clanInternals.vars.settings.?recipients clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.?age.?secretLocation clan-pytest-with-core> ------------------------------ Captured log call ------------------------------- clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:927 Prefetching flake /build/pytest-hzqjc3rx/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/d2c0050d97832c3ac5193485b93705d00938c15e 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-hzqjc3rx/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/d2c0050d97832c3ac5193485b93705d00938c15e clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1179 (cached) $ clan select clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> DEBUG clan_cli.tests.helpers.cli:__init__.py:143 $ clan vars generate --flake /build/pytest-hzqjc3rx/flake clan-pytest-with-core> Caller: /build/src/clan_cli/tests/test_vars_shared.py:405::test_generate_removes_stale_machine_symlink_when_deploy_becomes_false clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:927 Prefetching flake /build/pytest-hzqjc3rx/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.cliChecks clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1174 Cache miss for clanInternals.inventoryClass.inventorySerialization.{instances,machines,meta} clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:789 Loading flake cache from file /build/clan-flake-cache/flakes-v2/db925d9683d06efc10f48cecd8255abfd691d474 clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1174 Cache miss for clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:789 Loading flake cache from file /build/clan-flake-cache/flakes-v2/db925d9683d06efc10f48cecd8255abfd691d474 clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1179 (cached) $ clan select 'clanInternals.inventoryClass.inventorySerialization.{instances,machines,meta}' clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1144 Precaching selectors: clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.machines clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.instances clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.meta clan-pytest-with-core> - (not cached) clanInternals.?secrets.?age.?plugins clan-pytest-with-core> - (cached) clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.generators.*.{share,dependencies,prompts,validationHash} clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.generators.*.files.*.{secret,deploy,owner,group,mode,neededFor} clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.?sops.?defaultGroups clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.settings.publicModule clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.settings.secretModule clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.?sops.?secretUploadDirectory clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.?password-store.?passCommand clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.?password-store.?secretLocation clan-pytest-with-core> - (not cached) clanInternals.vars.settings.?recipients clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.?age.?secretLocation clan-pytest-with-core> _________________________ test_export_age_import_sops __________________________ clan-pytest-with-core> [gw11] linux -- Python 3.14.7 /nix/store/3n4qphl9s728sz8frmpqqrv9b1m87g68-python3-3.14.7/bin/python clan-pytest-with-core> clan-pytest-with-core> self = Flake(identifier='/build/pytest-ku4mm1jv/flake', hash='sha256-cVKZnug0PW2l3M9lyjsJSxLUEncoa/46IaTjukYPYiI=', 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.?secrets.?age.?plugins', 'clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.var...licModule', 'clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.settings.secretModule', ...] 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-ku4mm1jv/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/q9ypc8jnha6ns8crv3f4qqicj7fms156-source?narHash=sha256-cVKZnug0PW2l3M9lyjsJSxLUEncoa/46IaTjukYPYiI="; 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": "maybe", "value": "secrets"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "plugins"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "share"}, {"type": "str", "value": "dependencies"}, {"type": "str", "value": "prompts"}, {"type": "str", "value": "validationHash"}]}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "str", "value": "files"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "secret"}, {"type": "str", "value": "deploy"}, {"type": "str", "value": "owner"}, {"type": "str", "value": "group"}, {"type": "str", "value": "mode"}, {"type": "str", "value": "neededFor"}]}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "defaultGroups"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "publicModule"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "secretModule"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "secretUploadDirectory"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "passCommand"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "secretLocation"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "maybe", "value": "recipients"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "secretLocation"}]'"'"''"'"') 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": "maybe", "value": "secrets"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "plugins"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "share"}, {"type": "str", "value": "dependencies"}, {"type": "str", "value": "prompts"}, {"type": "str", "value": "validationHash"}]}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "str", "value": "files"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "secret"}, {"type": "str", "value": "deploy"}, {"type": "str", "value": "owner"}, {"type": "str", "value": "group"}, {"type": "str", "value": "mode"}, {"type": "str", "value": "neededFor"}]}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "defaultGroups"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "publicModule"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "secretModule"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "secretUploadDirectory"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "passCommand"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "secretLocation"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "maybe", "value": "recipients"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "secretLocation"}]'') 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": "maybe", "value": "secrets"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "plugins"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "share"}, {"type": "str", "value": "dependencies"}, {"type": "str", "value": "prompts"}, {"type": "str", "value": "validationHash"}]}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "str", "value": "files"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "secret"}, {"type": "str", "value": "deploy"}, {"type": "str", "value": "owner"}, {"type": "str", "value": "group"}, {"type": "str", "value": "mode"}, {"type": "str", "value": "neededFor"}]}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "defaultGroups"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "publicModule"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "secretModule"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "secretUploadDirectory"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "passCommand"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "secretLocation"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "maybe", "value": "recipients"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "secretLocation"}]'') flake) clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating list element at index 1 clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating attribute 'machine1' clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/cba1x9mxnwr8b36cw41bya7g6d5v1p7d-source/select.nix:325:37: clan-pytest-with-core> E 324| in clan-pytest-with-core> E 325| builtins.mapAttrs (_: v: recurse selectors (idx + 1) v) filteredAttrs clan-pytest-with-core> E | ^ clan-pytest-with-core> E 326| else if selector.type == "maybe" then 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:325:40: clan-pytest-with-core> E 324| in clan-pytest-with-core> E 325| builtins.mapAttrs (_: v: recurse selectors (idx + 1) v) filteredAttrs clan-pytest-with-core> E | ^ clan-pytest-with-core> E 326| else if selector.type == "maybe" then 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 … from call site clan-pytest-with-core> E at /build/store/nix/store/cba1x9mxnwr8b36cw41bya7g6d5v1p7d-source/select.nix:312:15: clan-pytest-with-core> E 311| else if selector.type == "str" then clan-pytest-with-core> E 312| recurse selectors (idx + 1) (builtins.getAttr selector.value obj) clan-pytest-with-core> E | ^ clan-pytest-with-core> E 313| else if selector.type == "set" then 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 'getAttr' builtin clan-pytest-with-core> E at /build/store/nix/store/cba1x9mxnwr8b36cw41bya7g6d5v1p7d-source/select.nix:312:44: clan-pytest-with-core> E 311| else if selector.type == "str" then clan-pytest-with-core> E 312| recurse selectors (idx + 1) (builtins.getAttr selector.value obj) clan-pytest-with-core> E | ^ clan-pytest-with-core> E 313| else if selector.type == "set" then clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'seq' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:401:18: clan-pytest-with-core> E 400| options = checked options; clan-pytest-with-core> E 401| config = checked (removeAttrs config [ "_module" ]); clan-pytest-with-core> E | ^ clan-pytest-with-core> E 402| _module = checked (config._module); 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:304:9: clan-pytest-with-core> E 303| checkUnmatched = clan-pytest-with-core> E 304| if config._module.check && config._module.freeformType == null && merged.unmatchedDefns != [ ] then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 305| let clan-pytest-with-core> E clan-pytest-with-core> E … in the right operand of the AND (&&) operator clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:304:72: clan-pytest-with-core> E 303| checkUnmatched = clan-pytest-with-core> E 304| if config._module.check && config._module.freeformType == null && merged.unmatchedDefns != [ ] then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 305| let clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'unmatchedDefns' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:940:7: clan-pytest-with-core> E 939| # Transforms unmatchedDefnsByName into a list of definitions clan-pytest-with-core> E 940| unmatchedDefns = clan-pytest-with-core> E | ^ clan-pytest-with-core> E 941| if configs == [ ] then clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'concatLists' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:946:11: clan-pytest-with-core> E 945| else clan-pytest-with-core> E 946| concatLists ( clan-pytest-with-core> E | ^ clan-pytest-with-core> E 947| mapAttrsToList ( clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:948:21: clan-pytest-with-core> E 947| mapAttrsToList ( clan-pytest-with-core> E 948| name: defs: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 949| map ( clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'map' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:949:15: clan-pytest-with-core> E 948| name: defs: clan-pytest-with-core> E 949| map ( clan-pytest-with-core> E | ^ clan-pytest-with-core> E 950| def: clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:932:22: clan-pytest-with-core> E 931| # Propagate all unmatched definitions from nested option sets clan-pytest-with-core> E 932| mapAttrs (n: v: v.unmatchedDefns) resultsByName clan-pytest-with-core> E | ^ clan-pytest-with-core> E 933| # Plus the definitions for the current prefix that don't have a matching option clan-pytest-with-core> E clan-pytest-with-core> E (10 duplicate frames omitted) clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:932:25: clan-pytest-with-core> E 931| # Propagate all unmatched definitions from nested option sets clan-pytest-with-core> E 932| mapAttrs (n: v: v.unmatchedDefns) resultsByName clan-pytest-with-core> E | ^ clan-pytest-with-core> E 933| # Plus the definitions for the current prefix that don't have a matching option clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:876:15: clan-pytest-with-core> E 875| resultsByName = mapAttrs ( clan-pytest-with-core> E 876| name: decls: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 877| # We're descending into attribute ‘name’. 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:888:9: clan-pytest-with-core> E 887| in clan-pytest-with-core> E 888| if length optionDecls == length decls then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 889| let clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'length' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:888:12: clan-pytest-with-core> E 887| in clan-pytest-with-core> E 888| if length optionDecls == length decls then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 889| let clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'filter' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:882:25: clan-pytest-with-core> E 881| defns' = rawDefinitionsByName.${name} or [ ]; clan-pytest-with-core> E 882| optionDecls = filter ( clan-pytest-with-core> E | ^ clan-pytest-with-core> E 883| m: clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:883:13: clan-pytest-with-core> E 882| optionDecls = filter ( clan-pytest-with-core> E 883| m: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 884| m.options ? _type clan-pytest-with-core> E clan-pytest-with-core> E … in the left operand of the AND (&&) operator clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:885:13: clan-pytest-with-core> E 884| m.options ? _type clan-pytest-with-core> E 885| && (m.options._type == "option" || throwDeclarationTypeError loc m.options._type m._file) clan-pytest-with-core> E | ^ clan-pytest-with-core> E 886| ) decls; clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'options' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:807:15: clan-pytest-with-core> E 806| pos = unsafeGetAttrPos n subtree; clan-pytest-with-core> E 807| options = option; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 808| }) subtree clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:289:73: clan-pytest-with-core> E 288| len = length attrPath; clan-pytest-with-core> E 289| atDepth = n: if n == len then value else { ${elemAt attrPath n} = atDepth (n + 1); }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 290| in clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'atDepth' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:289:17: clan-pytest-with-core> E 288| len = length attrPath; clan-pytest-with-core> E 289| atDepth = n: if n == len then value else { ${elemAt attrPath n} = atDepth (n + 1); }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 290| in clan-pytest-with-core> E clan-pytest-with-core> E … in the right operand of the update (//) operator clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:2047:9: clan-pytest-with-core> E 2046| } clan-pytest-with-core> E 2047| // optionalAttrs (toType != null) { clan-pytest-with-core> E | ^ clan-pytest-with-core> E 2048| type = toType; clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:2047:12: clan-pytest-with-core> E 2046| } clan-pytest-with-core> E 2047| // optionalAttrs (toType != null) { clan-pytest-with-core> E | ^ clan-pytest-with-core> E 2048| type = toType; clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'optionalAttrs' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:1492:25: clan-pytest-with-core> E 1491| */ clan-pytest-with-core> E 1492| optionalAttrs = cond: as: if cond then as else { }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1493| 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:1492:29: clan-pytest-with-core> E 1491| */ clan-pytest-with-core> E 1492| optionalAttrs = cond: as: if cond then as else { }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1493| clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:2036:17: clan-pytest-with-core> E 2035| let clan-pytest-with-core> E 2036| opt = attrByPath to { } options; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 2037| in clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'attrByPath' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:89:24: clan-pytest-with-core> E 88| attrByPath = clan-pytest-with-core> E 89| attrPath: default: set: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 90| let clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:106:5: clan-pytest-with-core> E 105| in clan-pytest-with-core> E 106| attrByPath' 0 set; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 107| clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'attrByPath'' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:93:12: clan-pytest-with-core> E 92| attrByPath' = clan-pytest-with-core> E 93| n: s: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 94| ( clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:102:35: clan-pytest-with-core> E 101| in clan-pytest-with-core> E 102| if s ? ${attr} then attrByPath' (n + 1) s.${attr} else default clan-pytest-with-core> E | ^ clan-pytest-with-core> E 103| ) clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'attrByPath'' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:93:12: clan-pytest-with-core> E 92| attrByPath' = clan-pytest-with-core> E 93| n: s: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 94| ( clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:102:35: clan-pytest-with-core> E 101| in clan-pytest-with-core> E 102| if s ? ${attr} then attrByPath' (n + 1) s.${attr} else default clan-pytest-with-core> E | ^ clan-pytest-with-core> E 103| ) clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'attrByPath'' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:93:12: clan-pytest-with-core> E 92| attrByPath' = clan-pytest-with-core> E 93| n: s: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 94| ( clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:102:35: clan-pytest-with-core> E 101| in clan-pytest-with-core> E 102| if s ? ${attr} then attrByPath' (n + 1) s.${attr} else default clan-pytest-with-core> E | ^ clan-pytest-with-core> E 103| ) clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'attrByPath'' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:93:12: clan-pytest-with-core> E 92| attrByPath' = clan-pytest-with-core> E 93| n: s: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 94| ( clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:102:55: clan-pytest-with-core> E 101| in clan-pytest-with-core> E 102| if s ? ${attr} then attrByPath' (n + 1) s.${attr} else default clan-pytest-with-core> E | ^ clan-pytest-with-core> E 103| ) clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:927:37: clan-pytest-with-core> E 926| clan-pytest-with-core> E 927| matchedOptions = mapAttrs (n: v: v.matchedOptions) resultsByName; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 928| clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'matchedOptions' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:893:13: clan-pytest-with-core> E 892| { clan-pytest-with-core> E 893| matchedOptions = evalOptionValue loc opt defns'; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 894| unmatchedDefns = [ ]; clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:893:30: clan-pytest-with-core> E 892| { clan-pytest-with-core> E 893| matchedOptions = evalOptionValue loc opt defns'; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 894| unmatchedDefns = [ ]; clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'evalOptionValue' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1103:15: clan-pytest-with-core> E 1102| evalOptionValue = clan-pytest-with-core> E 1103| loc: opt: defs: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1104| let clan-pytest-with-core> E clan-pytest-with-core> E … in the left operand of the update (//) operator clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1148:5: clan-pytest-with-core> E 1147| warnDeprecation opt clan-pytest-with-core> E 1148| // { clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1149| value = addErrorContext "while evaluating the option `${showOption loc}':" value; 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1141:9: clan-pytest-with-core> E 1140| warnDeprecation = clan-pytest-with-core> E 1141| if (opt.type.deprecationMessage != null) then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1142| warn "The type `types.${opt.type.name}' of option `${showOption loc}' defined in ${showFiles opt.declarations} is deprecated. ${opt.type.deprecationMessage}" clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:890:19: clan-pytest-with-core> E 889| let clan-pytest-with-core> E 890| opt = fixupOptionType loc (mergeOptionDecls loc decls); clan-pytest-with-core> E | ^ clan-pytest-with-core> E 891| in clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'fixupOptionType' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1473:10: clan-pytest-with-core> E 1472| fixupOptionType = clan-pytest-with-core> E 1473| loc: opt: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1474| if opt.type.getSubModules or null == null then 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1474:5: clan-pytest-with-core> E 1473| loc: opt: clan-pytest-with-core> E 1474| if opt.type.getSubModules or null == null then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1475| opt // { type = opt.type or types.unspecified; } clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'type.getSubModules' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/nixos/modules/services/hardware/bluetooth.nix:72:9: clan-pytest-with-core> E 71| settings = mkOption { clan-pytest-with-core> E 72| type = cfgFmt.type; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 73| default = { }; clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/nixos/modules/services/hardware/bluetooth.nix:26:12: clan-pytest-with-core> E 25| clan-pytest-with-core> E 26| cfgFmt = pkgs.formats.ini { }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 27| clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:727:15: clan-pytest-with-core> E 726| extraArgs = mapAttrs ( clan-pytest-with-core> E 727| name: _: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 728| addErrorContext (context name) ( clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the module argument `pkgs' in "/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/nixos/modules/services/hardware/bluetooth.nix": clan-pytest-with-core> E clan-pytest-with-core> E … noting that argument `pkgs` is not externally provided, so querying `_module.args` instead, requiring `config` clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:731:13: clan-pytest-with-core> E 730| "noting that argument `${name}` is not externally provided, so querying `_module.args` instead, requiring `config`" clan-pytest-with-core> E 731| config._module.args.${name} clan-pytest-with-core> E | ^ clan-pytest-with-core> E 732| ) clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/types.nix:1029:18: clan-pytest-with-core> E 1028| value = mapAttrs ( clan-pytest-with-core> E 1029| n: v: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1030| if lazy then clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'optionalValue.value' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1312:5: clan-pytest-with-core> E 1311| clan-pytest-with-core> E 1312| optionalValue = if isDefined then { value = mergedValue; } else { }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1313| }; 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1312:21: clan-pytest-with-core> E 1311| clan-pytest-with-core> E 1312| optionalValue = if isDefined then { value = mergedValue; } else { }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1313| }; clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'values' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1240:11: clan-pytest-with-core> E 1239| { clan-pytest-with-core> E 1240| values = defsSorted; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1241| inherit (defsFiltered) highestPrio; 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1211:11: clan-pytest-with-core> E 1210| # Avoid sorting if we don't have to. clan-pytest-with-core> E 1211| if any (def: def.value._type or "" == "order") defsFiltered.values then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1212| sortProperties defsFiltered.values clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'any' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1211:14: clan-pytest-with-core> E 1210| # Avoid sorting if we don't have to. clan-pytest-with-core> E 1211| if any (def: def.value._type or "" == "order") defsFiltered.values then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1212| sortProperties defsFiltered.values clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1211:19: clan-pytest-with-core> E 1210| # Avoid sorting if we don't have to. clan-pytest-with-core> E 1211| if any (def: def.value._type or "" == "order") defsFiltered.values then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1212| sortProperties defsFiltered.values clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'value._type' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1422:67: clan-pytest-with-core> E 1421| strip = clan-pytest-with-core> E 1422| def: if def.value._type or "" == "override" then def // { value = def.value.content; } else def; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1423| in clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'value.content' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1566:22: clan-pytest-with-core> E 1565| _type = "override"; clan-pytest-with-core> E 1566| inherit priority content; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1567| }; 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/nixos/modules/misc/nixpkgs.nix:107:15: clan-pytest-with-core> E 106| clan-pytest-with-core> E 107| finalPkgs = if opt.pkgs.isDefined then cfg.pkgs.appendOverlays cfg.overlays else defaultPkgs; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 108| clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'pkgs.isDefined' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1154:21: clan-pytest-with-core> E 1153| definitionsWithLocations = res.defsFinal; clan-pytest-with-core> E 1154| inherit (res) isDefined; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1155| inherit (res.checkedAndMerged) valueMeta; clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'isDefined' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1310:5: clan-pytest-with-core> E 1309| clan-pytest-with-core> E 1310| isDefined = defsFinal != [ ]; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1311| clan-pytest-with-core> E clan-pytest-with-core> E (6 duplicate frames omitted) clan-pytest-with-core> E clan-pytest-with-core> E error: attribute 'system' missing clan-pytest-with-core> E at /build/store/nix/store/y3h139bhv4373m1hab367ma4p5i95i2f-source/modules/clan/module.nix:164:24: clan-pytest-with-core> E 163| (lib.modules.importApply ../../nixosModules/machineModules/overridePkgs.nix { clan-pytest-with-core> E 164| pkgs = nixpkgsMatrix.${config.inventory.machines.${name}.nixpkgs}.system.${system}.pkgs; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 165| }) clan-pytest-with-core> E Did you mean systems? 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 0x7fffe58ce1a0> clan-pytest-with-core> flake_with_sops = clan-pytest-with-core> age_keys = [KeyPair(pubkey='age1dhwqzkah943xzc34tc3dlmfayyevcmdmxzjezdgdy33euxwf59vsp3vk3c', privkey='AGE-SECRET-KEY-1KF8E3SR3TTG...z7jca7s00wyeg2nt3aqnvaks7p4jfr', privkey='AGE-SECRET-KEY-1Z89SHU9KAF709TTAZDARUWKC7H9TPZW4L8A2PVYSYAF7QVLCNQZQZ07U5J')] clan-pytest-with-core> tmp_path = PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw11/test_export_age_import_sops0') 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_export_age_import_sops( clan-pytest-with-core> monkeypatch: pytest.MonkeyPatch, clan-pytest-with-core> flake_with_sops: ClanFlake, clan-pytest-with-core> age_keys: list[KeyPair], clan-pytest-with-core> tmp_path: Path, clan-pytest-with-core> ) -> None: clan-pytest-with-core> """Export from age backend, import into sops backend, verify values match.""" clan-pytest-with-core> flake = flake_with_sops clan-pytest-with-core> age_key = age_keys[0] clan-pytest-with-core> clan-pytest-with-core> # Phase 1: generate with age clan-pytest-with-core> _setup_machines_with_backend(flake, "age") clan-pytest-with-core> flake.clan_nix_raw = ( clan-pytest-with-core> f"{{\n" clan-pytest-with-core> f' vars.settings.recipients.hosts.machine1 = ["{age_key.pubkey}"];\n' clan-pytest-with-core> f' vars.settings.recipients.hosts.machine2 = ["{age_key.pubkey}"];\n' clan-pytest-with-core> f"}}\n" clan-pytest-with-core> ) clan-pytest-with-core> flake.refresh() clan-pytest-with-core> monkeypatch.chdir(flake.path) clan-pytest-with-core> clan-pytest-with-core> age_key_dir = flake.path / ".age" clan-pytest-with-core> age_key_dir.mkdir(exist_ok=True) clan-pytest-with-core> (age_key_dir / "key.txt").write_text(age_key.privkey) clan-pytest-with-core> monkeypatch.setenv("AGE_KEYFILE", str(age_key_dir / "key.txt")) clan-pytest-with-core> clan-pytest-with-core> subprocess.run(["git", "add", "."], cwd=flake.path, check=True) clan-pytest-with-core> subprocess.run( clan-pytest-with-core> ["git", "commit", "-m", "setup age backend"], clan-pytest-with-core> cwd=flake.path, clan-pytest-with-core> check=True, clan-pytest-with-core> ) clan-pytest-with-core> clan-pytest-with-core> > cli.run(["vars", "generate", "--flake", str(flake.path)]) clan-pytest-with-core> clan-pytest-with-core> /build/src/clan_cli/tests/test_vars_shared.py:1024: 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/vars/generate.py:33: in generate_command clan-pytest-with-core> run_generators( clan-pytest-with-core> /build/src/clan_lib/vars/generate.py:306: in run_generators clan-pytest-with-core> all_generators = get_generators(machines, full_closure=True) clan-pytest-with-core> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ clan-pytest-with-core> /build/src/clan_lib/vars/generate.py:146: in get_generators clan-pytest-with-core> flake.precache(get_generators_precache_selectors(list(all_machines))) clan-pytest-with-core> /build/src/clan_lib/flake/flake.py:1151: in precache clan-pytest-with-core> self.get_from_nix(not_fetched_selectors) clan-pytest-with-core> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ clan-pytest-with-core> clan-pytest-with-core> self = Flake(identifier='/build/pytest-ku4mm1jv/flake', hash='sha256-cVKZnug0PW2l3M9lyjsJSxLUEncoa/46IaTjukYPYiI=', 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.?secrets.?age.?plugins', 'clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.var...licModule', 'clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.settings.secretModule', ...] 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 while executing:$ clan select 'clanInternals.?secrets.?age.?plugins' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.generators.*.{share,dependencies,prompts,validationHash}' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.generators.*.files.*.{secret,deploy,owner,group,mode,neededFor}' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.?sops.?defaultGroups' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.settings.publicModule' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.settings.secretModule' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.?sops.?secretUploadDirectory' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.?password-store.?passCommand' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.?password-store.?secretLocation' clan-pytest-with-core> E $ clan select 'clanInternals.vars.settings.?recipients' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.?age.?secretLocation' clan-pytest-with-core> E Reason: attribute 'system' missing clan-pytest-with-core> E at /build/store/nix/store/y3h139bhv4373m1hab367ma4p5i95i2f-source/modules/clan/module.nix:164:24: clan-pytest-with-core> E 163| (lib.modules.importApply ../../nixosModules/machineModules/overridePkgs.nix { clan-pytest-with-core> E 164| pkgs = nixpkgsMatrix.${config.inventory.machines.${name}.nixpkgs}.system.${system}.pkgs; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 165| }) clan-pytest-with-core> E Did you mean systems?. 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 setup ----------------------------- clan-pytest-with-core> !! $HOME does not point to a temp directory!! HOME=/build/pytest-ku4mm1jv clan-pytest-with-core> [localhost] $ clan vars keygen --flake /build/pytest-ku4mm1jv/flake --user admin --no-interactive clan-pytest-with-core> Caller: /build/src/clan_cli/tests/age_keys.py:31::init clan-pytest-with-core> clan-pytest-with-core> Prefetching flake /build/pytest-ku4mm1jv/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/febbcab65441be6ccc547560fd0155faadebbbb7 clan-pytest-with-core> (cached) $ clan select clanInternals.inventoryClass.relativeDirectory 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> git \ clan-pytest-with-core> -C /build/pytest-ku4mm1jv/flake \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-ku4mm1jv/flake/sops/users/admin 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/admin to git clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-ku4mm1jv/flake \ clan-pytest-with-core> diff \ clan-pytest-with-core> --cached --exit-code \ clan-pytest-with-core> -- /build/pytest-ku4mm1jv/flake/sops/users/admin 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-ku4mm1jv/flake \ clan-pytest-with-core> commit \ clan-pytest-with-core> -m 'secrets: add user admin' \ clan-pytest-with-core> --no-verify /build/pytest-ku4mm1jv/flake/sops/users/admin 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/admin to git 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/pytest-ku4mm1jv clan-pytest-with-core> DEBUG clan_cli.tests.helpers.cli:__init__.py:143 $ clan vars keygen --flake /build/pytest-ku4mm1jv/flake --user admin --no-interactive clan-pytest-with-core> Caller: /build/src/clan_cli/tests/age_keys.py:31::init clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:927 Prefetching flake /build/pytest-ku4mm1jv/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/febbcab65441be6ccc547560fd0155faadebbbb7 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.cmd:__init__.py:143 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> DEBUG clan_lib.cmd:__init__.py:143 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> DEBUG clan_cli.secrets.sops:sops.py:99 Found age public key from a private key in the environment (SOPS_AGE_KEY): age1dhwqzkah943xzc34tc3dlmfayyevcmdmxzjezdgdy33euxwf59vsp3vk3c clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:143 git \ clan-pytest-with-core> -C /build/pytest-ku4mm1jv/flake \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-ku4mm1jv/flake/sops/users/admin 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> DEBUG clan_lib.cmd:__init__.py:143 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> DEBUG clan_lib.git:__init__.py:98 Adding sops/users/admin to git clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:143 git \ clan-pytest-with-core> -C /build/pytest-ku4mm1jv/flake \ clan-pytest-with-core> diff \ clan-pytest-with-core> --cached --exit-code \ clan-pytest-with-core> -- /build/pytest-ku4mm1jv/flake/sops/users/admin 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> DEBUG clan_lib.cmd:__init__.py:143 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> DEBUG clan_lib.cmd:__init__.py:143 git \ clan-pytest-with-core> -C /build/pytest-ku4mm1jv/flake \ clan-pytest-with-core> commit \ clan-pytest-with-core> -m 'secrets: add user admin' \ clan-pytest-with-core> --no-verify /build/pytest-ku4mm1jv/flake/sops/users/admin 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> DEBUG clan_lib.cmd:__init__.py:143 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> INFO clan_lib.git:__init__.py:141 Committed sops/users/admin to git clan-pytest-with-core> ----------------------------- Captured stdout call ----------------------------- clan-pytest-with-core> [main 27e0a3f] flake: update by flake generator clan-pytest-with-core> 5 files changed, 112 insertions(+) clan-pytest-with-core> create mode 100644 clan.nix clan-pytest-with-core> create mode 100644 machines/machine1/configuration.json clan-pytest-with-core> create mode 100644 machines/machine1/configuration.nix clan-pytest-with-core> create mode 100644 machines/machine2/configuration.json clan-pytest-with-core> create mode 100644 machines/machine2/configuration.nix clan-pytest-with-core> [main 7b65449] setup age backend clan-pytest-with-core> 1 file changed, 1 insertion(+) clan-pytest-with-core> create mode 100644 .age/key.txt clan-pytest-with-core> ----------------------------- Captured stderr call ----------------------------- clan-pytest-with-core> Prefetching flake /build/pytest-ku4mm1jv/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/d2c0050d97832c3ac5193485b93705d00938c15e clan-pytest-with-core> (cached) $ clan select clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> Prefetching flake /build/pytest-ku4mm1jv/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/d2c0050d97832c3ac5193485b93705d00938c15e clan-pytest-with-core> (cached) $ clan select clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> [localhost] $ clan vars generate --flake /build/pytest-ku4mm1jv/flake clan-pytest-with-core> Caller: /build/src/clan_cli/tests/test_vars_shared.py:1024::test_export_age_import_sops clan-pytest-with-core> clan-pytest-with-core> Prefetching flake /build/pytest-ku4mm1jv/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.cliChecks clan-pytest-with-core> Cache miss for clanInternals.inventoryClass.inventorySerialization.{instances,machines,meta} clan-pytest-with-core> Loading flake cache from file /build/clan-flake-cache/flakes-v2/c7918b2f4b19d52d632f8c51f7239ae94b08f1eb clan-pytest-with-core> Cache miss for clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> Loading flake cache from file /build/clan-flake-cache/flakes-v2/c7918b2f4b19d52d632f8c51f7239ae94b08f1eb clan-pytest-with-core> (cached) $ clan select 'clanInternals.inventoryClass.inventorySerialization.{instances,machines,meta}' clan-pytest-with-core> Precaching selectors: clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.machines clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.instances clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.meta clan-pytest-with-core> - (not cached) clanInternals.?secrets.?age.?plugins clan-pytest-with-core> - (cached) clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.generators.*.{share,dependencies,prompts,validationHash} clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.generators.*.files.*.{secret,deploy,owner,group,mode,neededFor} clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.?sops.?defaultGroups clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.settings.publicModule clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.settings.secretModule clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.?sops.?secretUploadDirectory clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.?password-store.?passCommand clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.?password-store.?secretLocation clan-pytest-with-core> - (not cached) clanInternals.vars.settings.?recipients clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.?age.?secretLocation clan-pytest-with-core> ------------------------------ Captured log call ------------------------------- clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:927 Prefetching flake /build/pytest-ku4mm1jv/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/d2c0050d97832c3ac5193485b93705d00938c15e 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-ku4mm1jv/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/d2c0050d97832c3ac5193485b93705d00938c15e clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1179 (cached) $ clan select clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> DEBUG clan_cli.tests.helpers.cli:__init__.py:143 $ clan vars generate --flake /build/pytest-ku4mm1jv/flake clan-pytest-with-core> Caller: /build/src/clan_cli/tests/test_vars_shared.py:1024::test_export_age_import_sops clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:927 Prefetching flake /build/pytest-ku4mm1jv/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.cliChecks clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1174 Cache miss for clanInternals.inventoryClass.inventorySerialization.{instances,machines,meta} clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:789 Loading flake cache from file /build/clan-flake-cache/flakes-v2/c7918b2f4b19d52d632f8c51f7239ae94b08f1eb clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1174 Cache miss for clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:789 Loading flake cache from file /build/clan-flake-cache/flakes-v2/c7918b2f4b19d52d632f8c51f7239ae94b08f1eb clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1179 (cached) $ clan select 'clanInternals.inventoryClass.inventorySerialization.{instances,machines,meta}' clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1144 Precaching selectors: clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.machines clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.instances clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.meta clan-pytest-with-core> - (not cached) clanInternals.?secrets.?age.?plugins clan-pytest-with-core> - (cached) clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.generators.*.{share,dependencies,prompts,validationHash} clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.generators.*.files.*.{secret,deploy,owner,group,mode,neededFor} clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.?sops.?defaultGroups clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.settings.publicModule clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.settings.secretModule clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.?sops.?secretUploadDirectory clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.?password-store.?passCommand clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.?password-store.?secretLocation clan-pytest-with-core> - (not cached) clanInternals.vars.settings.?recipients clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.?age.?secretLocation clan-pytest-with-core> _____________________ test_cross_machine_shared_dependency _____________________ clan-pytest-with-core> [gw3] linux -- Python 3.14.7 /nix/store/3n4qphl9s728sz8frmpqqrv9b1m87g68-python3-3.14.7/bin/python clan-pytest-with-core> clan-pytest-with-core> self = Flake(identifier='/build/pytest-cgxr56mm/flake', hash='sha256-/VGifRS/N//+k4VQzBJOAxvMmsctm+LxpvC68YodQMw=', 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.?secrets.?age.?plugins', 'clanInternals.machines.x86_64-linux.{controller,peer}.config.clan.core.vars....ublicModule', 'clanInternals.machines.x86_64-linux.{controller,peer}.config.clan.core.vars.settings.secretModule', ...] 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-cgxr56mm/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/7x4zxyyqz17rc265k0y171azq6mlx58h-source?narHash=sha256-/VGifRS/N//+k4VQzBJOAxvMmsctm+LxpvC68YodQMw="; 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": "maybe", "value": "secrets"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "plugins"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "controller"}, {"type": "str", "value": "peer"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "share"}, {"type": "str", "value": "dependencies"}, {"type": "str", "value": "prompts"}, {"type": "str", "value": "validationHash"}]}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "controller"}, {"type": "str", "value": "peer"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "str", "value": "files"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "secret"}, {"type": "str", "value": "deploy"}, {"type": "str", "value": "owner"}, {"type": "str", "value": "group"}, {"type": "str", "value": "mode"}, {"type": "str", "value": "neededFor"}]}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "controller"}, {"type": "str", "value": "peer"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "defaultGroups"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "controller"}, {"type": "str", "value": "peer"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "publicModule"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "controller"}, {"type": "str", "value": "peer"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "secretModule"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "controller"}, {"type": "str", "value": "peer"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "secretUploadDirectory"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "controller"}, {"type": "str", "value": "peer"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "passCommand"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "controller"}, {"type": "str", "value": "peer"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "secretLocation"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "maybe", "value": "recipients"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "controller"}, {"type": "str", "value": "peer"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "secretLocation"}]'"'"''"'"') 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": "maybe", "value": "secrets"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "plugins"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "controller"}, {"type": "str", "value": "peer"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "share"}, {"type": "str", "value": "dependencies"}, {"type": "str", "value": "prompts"}, {"type": "str", "value": "validationHash"}]}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "controller"}, {"type": "str", "value": "peer"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "str", "value": "files"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "secret"}, {"type": "str", "value": "deploy"}, {"type": "str", "value": "owner"}, {"type": "str", "value": "group"}, {"type": "str", "value": "mode"}, {"type": "str", "value": "neededFor"}]}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "controller"}, {"type": "str", "value": "peer"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "defaultGroups"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "controller"}, {"type": "str", "value": "peer"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "publicModule"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "controller"}, {"type": "str", "value": "peer"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "secretModule"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "controller"}, {"type": "str", "value": "peer"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "secretUploadDirectory"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "controller"}, {"type": "str", "value": "peer"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "passCommand"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "controller"}, {"type": "str", "value": "peer"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "secretLocation"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "maybe", "value": "recipients"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "controller"}, {"type": "str", "value": "peer"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "secretLocation"}]'') 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": "maybe", "value": "secrets"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "plugins"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "controller"}, {"type": "str", "value": "peer"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "share"}, {"type": "str", "value": "dependencies"}, {"type": "str", "value": "prompts"}, {"type": "str", "value": "validationHash"}]}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "controller"}, {"type": "str", "value": "peer"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "str", "value": "files"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "secret"}, {"type": "str", "value": "deploy"}, {"type": "str", "value": "owner"}, {"type": "str", "value": "group"}, {"type": "str", "value": "mode"}, {"type": "str", "value": "neededFor"}]}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "controller"}, {"type": "str", "value": "peer"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "defaultGroups"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "controller"}, {"type": "str", "value": "peer"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "publicModule"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "controller"}, {"type": "str", "value": "peer"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "secretModule"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "controller"}, {"type": "str", "value": "peer"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "secretUploadDirectory"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "controller"}, {"type": "str", "value": "peer"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "passCommand"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "controller"}, {"type": "str", "value": "peer"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "secretLocation"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "maybe", "value": "recipients"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "controller"}, {"type": "str", "value": "peer"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "secretLocation"}]'') flake) clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating list element at index 1 clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating attribute 'controller' clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/cba1x9mxnwr8b36cw41bya7g6d5v1p7d-source/select.nix:325:37: clan-pytest-with-core> E 324| in clan-pytest-with-core> E 325| builtins.mapAttrs (_: v: recurse selectors (idx + 1) v) filteredAttrs clan-pytest-with-core> E | ^ clan-pytest-with-core> E 326| else if selector.type == "maybe" then 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:325:40: clan-pytest-with-core> E 324| in clan-pytest-with-core> E 325| builtins.mapAttrs (_: v: recurse selectors (idx + 1) v) filteredAttrs clan-pytest-with-core> E | ^ clan-pytest-with-core> E 326| else if selector.type == "maybe" then 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 … from call site clan-pytest-with-core> E at /build/store/nix/store/cba1x9mxnwr8b36cw41bya7g6d5v1p7d-source/select.nix:312:15: clan-pytest-with-core> E 311| else if selector.type == "str" then clan-pytest-with-core> E 312| recurse selectors (idx + 1) (builtins.getAttr selector.value obj) clan-pytest-with-core> E | ^ clan-pytest-with-core> E 313| else if selector.type == "set" then 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 'getAttr' builtin clan-pytest-with-core> E at /build/store/nix/store/cba1x9mxnwr8b36cw41bya7g6d5v1p7d-source/select.nix:312:44: clan-pytest-with-core> E 311| else if selector.type == "str" then clan-pytest-with-core> E 312| recurse selectors (idx + 1) (builtins.getAttr selector.value obj) clan-pytest-with-core> E | ^ clan-pytest-with-core> E 313| else if selector.type == "set" then clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'seq' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:401:18: clan-pytest-with-core> E 400| options = checked options; clan-pytest-with-core> E 401| config = checked (removeAttrs config [ "_module" ]); clan-pytest-with-core> E | ^ clan-pytest-with-core> E 402| _module = checked (config._module); 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:304:9: clan-pytest-with-core> E 303| checkUnmatched = clan-pytest-with-core> E 304| if config._module.check && config._module.freeformType == null && merged.unmatchedDefns != [ ] then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 305| let clan-pytest-with-core> E clan-pytest-with-core> E … in the right operand of the AND (&&) operator clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:304:72: clan-pytest-with-core> E 303| checkUnmatched = clan-pytest-with-core> E 304| if config._module.check && config._module.freeformType == null && merged.unmatchedDefns != [ ] then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 305| let clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'unmatchedDefns' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:940:7: clan-pytest-with-core> E 939| # Transforms unmatchedDefnsByName into a list of definitions clan-pytest-with-core> E 940| unmatchedDefns = clan-pytest-with-core> E | ^ clan-pytest-with-core> E 941| if configs == [ ] then clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'concatLists' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:946:11: clan-pytest-with-core> E 945| else clan-pytest-with-core> E 946| concatLists ( clan-pytest-with-core> E | ^ clan-pytest-with-core> E 947| mapAttrsToList ( clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:948:21: clan-pytest-with-core> E 947| mapAttrsToList ( clan-pytest-with-core> E 948| name: defs: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 949| map ( clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'map' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:949:15: clan-pytest-with-core> E 948| name: defs: clan-pytest-with-core> E 949| map ( clan-pytest-with-core> E | ^ clan-pytest-with-core> E 950| def: clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:932:22: clan-pytest-with-core> E 931| # Propagate all unmatched definitions from nested option sets clan-pytest-with-core> E 932| mapAttrs (n: v: v.unmatchedDefns) resultsByName clan-pytest-with-core> E | ^ clan-pytest-with-core> E 933| # Plus the definitions for the current prefix that don't have a matching option clan-pytest-with-core> E clan-pytest-with-core> E (10 duplicate frames omitted) clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:932:25: clan-pytest-with-core> E 931| # Propagate all unmatched definitions from nested option sets clan-pytest-with-core> E 932| mapAttrs (n: v: v.unmatchedDefns) resultsByName clan-pytest-with-core> E | ^ clan-pytest-with-core> E 933| # Plus the definitions for the current prefix that don't have a matching option clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:876:15: clan-pytest-with-core> E 875| resultsByName = mapAttrs ( clan-pytest-with-core> E 876| name: decls: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 877| # We're descending into attribute ‘name’. 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:888:9: clan-pytest-with-core> E 887| in clan-pytest-with-core> E 888| if length optionDecls == length decls then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 889| let clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'length' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:888:12: clan-pytest-with-core> E 887| in clan-pytest-with-core> E 888| if length optionDecls == length decls then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 889| let clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'filter' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:882:25: clan-pytest-with-core> E 881| defns' = rawDefinitionsByName.${name} or [ ]; clan-pytest-with-core> E 882| optionDecls = filter ( clan-pytest-with-core> E | ^ clan-pytest-with-core> E 883| m: clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:883:13: clan-pytest-with-core> E 882| optionDecls = filter ( clan-pytest-with-core> E 883| m: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 884| m.options ? _type clan-pytest-with-core> E clan-pytest-with-core> E … in the left operand of the AND (&&) operator clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:885:13: clan-pytest-with-core> E 884| m.options ? _type clan-pytest-with-core> E 885| && (m.options._type == "option" || throwDeclarationTypeError loc m.options._type m._file) clan-pytest-with-core> E | ^ clan-pytest-with-core> E 886| ) decls; clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'options' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:807:15: clan-pytest-with-core> E 806| pos = unsafeGetAttrPos n subtree; clan-pytest-with-core> E 807| options = option; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 808| }) subtree clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:289:73: clan-pytest-with-core> E 288| len = length attrPath; clan-pytest-with-core> E 289| atDepth = n: if n == len then value else { ${elemAt attrPath n} = atDepth (n + 1); }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 290| in clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'atDepth' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:289:17: clan-pytest-with-core> E 288| len = length attrPath; clan-pytest-with-core> E 289| atDepth = n: if n == len then value else { ${elemAt attrPath n} = atDepth (n + 1); }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 290| in clan-pytest-with-core> E clan-pytest-with-core> E … in the right operand of the update (//) operator clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:2047:9: clan-pytest-with-core> E 2046| } clan-pytest-with-core> E 2047| // optionalAttrs (toType != null) { clan-pytest-with-core> E | ^ clan-pytest-with-core> E 2048| type = toType; clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:2047:12: clan-pytest-with-core> E 2046| } clan-pytest-with-core> E 2047| // optionalAttrs (toType != null) { clan-pytest-with-core> E | ^ clan-pytest-with-core> E 2048| type = toType; clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'optionalAttrs' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:1492:25: clan-pytest-with-core> E 1491| */ clan-pytest-with-core> E 1492| optionalAttrs = cond: as: if cond then as else { }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1493| 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:1492:29: clan-pytest-with-core> E 1491| */ clan-pytest-with-core> E 1492| optionalAttrs = cond: as: if cond then as else { }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1493| clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:2036:17: clan-pytest-with-core> E 2035| let clan-pytest-with-core> E 2036| opt = attrByPath to { } options; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 2037| in clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'attrByPath' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:89:24: clan-pytest-with-core> E 88| attrByPath = clan-pytest-with-core> E 89| attrPath: default: set: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 90| let clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:106:5: clan-pytest-with-core> E 105| in clan-pytest-with-core> E 106| attrByPath' 0 set; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 107| clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'attrByPath'' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:93:12: clan-pytest-with-core> E 92| attrByPath' = clan-pytest-with-core> E 93| n: s: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 94| ( clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:102:35: clan-pytest-with-core> E 101| in clan-pytest-with-core> E 102| if s ? ${attr} then attrByPath' (n + 1) s.${attr} else default clan-pytest-with-core> E | ^ clan-pytest-with-core> E 103| ) clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'attrByPath'' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:93:12: clan-pytest-with-core> E 92| attrByPath' = clan-pytest-with-core> E 93| n: s: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 94| ( clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:102:35: clan-pytest-with-core> E 101| in clan-pytest-with-core> E 102| if s ? ${attr} then attrByPath' (n + 1) s.${attr} else default clan-pytest-with-core> E | ^ clan-pytest-with-core> E 103| ) clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'attrByPath'' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:93:12: clan-pytest-with-core> E 92| attrByPath' = clan-pytest-with-core> E 93| n: s: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 94| ( clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:102:35: clan-pytest-with-core> E 101| in clan-pytest-with-core> E 102| if s ? ${attr} then attrByPath' (n + 1) s.${attr} else default clan-pytest-with-core> E | ^ clan-pytest-with-core> E 103| ) clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'attrByPath'' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:93:12: clan-pytest-with-core> E 92| attrByPath' = clan-pytest-with-core> E 93| n: s: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 94| ( clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:102:55: clan-pytest-with-core> E 101| in clan-pytest-with-core> E 102| if s ? ${attr} then attrByPath' (n + 1) s.${attr} else default clan-pytest-with-core> E | ^ clan-pytest-with-core> E 103| ) clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:927:37: clan-pytest-with-core> E 926| clan-pytest-with-core> E 927| matchedOptions = mapAttrs (n: v: v.matchedOptions) resultsByName; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 928| clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'matchedOptions' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:893:13: clan-pytest-with-core> E 892| { clan-pytest-with-core> E 893| matchedOptions = evalOptionValue loc opt defns'; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 894| unmatchedDefns = [ ]; clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:893:30: clan-pytest-with-core> E 892| { clan-pytest-with-core> E 893| matchedOptions = evalOptionValue loc opt defns'; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 894| unmatchedDefns = [ ]; clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'evalOptionValue' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1103:15: clan-pytest-with-core> E 1102| evalOptionValue = clan-pytest-with-core> E 1103| loc: opt: defs: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1104| let clan-pytest-with-core> E clan-pytest-with-core> E … in the left operand of the update (//) operator clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1148:5: clan-pytest-with-core> E 1147| warnDeprecation opt clan-pytest-with-core> E 1148| // { clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1149| value = addErrorContext "while evaluating the option `${showOption loc}':" value; 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1141:9: clan-pytest-with-core> E 1140| warnDeprecation = clan-pytest-with-core> E 1141| if (opt.type.deprecationMessage != null) then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1142| warn "The type `types.${opt.type.name}' of option `${showOption loc}' defined in ${showFiles opt.declarations} is deprecated. ${opt.type.deprecationMessage}" clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:890:19: clan-pytest-with-core> E 889| let clan-pytest-with-core> E 890| opt = fixupOptionType loc (mergeOptionDecls loc decls); clan-pytest-with-core> E | ^ clan-pytest-with-core> E 891| in clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'fixupOptionType' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1473:10: clan-pytest-with-core> E 1472| fixupOptionType = clan-pytest-with-core> E 1473| loc: opt: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1474| if opt.type.getSubModules or null == null then 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1474:5: clan-pytest-with-core> E 1473| loc: opt: clan-pytest-with-core> E 1474| if opt.type.getSubModules or null == null then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1475| opt // { type = opt.type or types.unspecified; } clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'type.getSubModules' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/nixos/modules/services/hardware/bluetooth.nix:72:9: clan-pytest-with-core> E 71| settings = mkOption { clan-pytest-with-core> E 72| type = cfgFmt.type; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 73| default = { }; clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/nixos/modules/services/hardware/bluetooth.nix:26:12: clan-pytest-with-core> E 25| clan-pytest-with-core> E 26| cfgFmt = pkgs.formats.ini { }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 27| clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:727:15: clan-pytest-with-core> E 726| extraArgs = mapAttrs ( clan-pytest-with-core> E 727| name: _: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 728| addErrorContext (context name) ( clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the module argument `pkgs' in "/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/nixos/modules/services/hardware/bluetooth.nix": clan-pytest-with-core> E clan-pytest-with-core> E … noting that argument `pkgs` is not externally provided, so querying `_module.args` instead, requiring `config` clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:731:13: clan-pytest-with-core> E 730| "noting that argument `${name}` is not externally provided, so querying `_module.args` instead, requiring `config`" clan-pytest-with-core> E 731| config._module.args.${name} clan-pytest-with-core> E | ^ clan-pytest-with-core> E 732| ) clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/types.nix:1029:18: clan-pytest-with-core> E 1028| value = mapAttrs ( clan-pytest-with-core> E 1029| n: v: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1030| if lazy then clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'optionalValue.value' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1312:5: clan-pytest-with-core> E 1311| clan-pytest-with-core> E 1312| optionalValue = if isDefined then { value = mergedValue; } else { }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1313| }; 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1312:21: clan-pytest-with-core> E 1311| clan-pytest-with-core> E 1312| optionalValue = if isDefined then { value = mergedValue; } else { }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1313| }; clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'values' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1240:11: clan-pytest-with-core> E 1239| { clan-pytest-with-core> E 1240| values = defsSorted; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1241| inherit (defsFiltered) highestPrio; 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1211:11: clan-pytest-with-core> E 1210| # Avoid sorting if we don't have to. clan-pytest-with-core> E 1211| if any (def: def.value._type or "" == "order") defsFiltered.values then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1212| sortProperties defsFiltered.values clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'any' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1211:14: clan-pytest-with-core> E 1210| # Avoid sorting if we don't have to. clan-pytest-with-core> E 1211| if any (def: def.value._type or "" == "order") defsFiltered.values then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1212| sortProperties defsFiltered.values clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1211:19: clan-pytest-with-core> E 1210| # Avoid sorting if we don't have to. clan-pytest-with-core> E 1211| if any (def: def.value._type or "" == "order") defsFiltered.values then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1212| sortProperties defsFiltered.values clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'value._type' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1422:67: clan-pytest-with-core> E 1421| strip = clan-pytest-with-core> E 1422| def: if def.value._type or "" == "override" then def // { value = def.value.content; } else def; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1423| in clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'value.content' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1566:22: clan-pytest-with-core> E 1565| _type = "override"; clan-pytest-with-core> E 1566| inherit priority content; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1567| }; 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/nixos/modules/misc/nixpkgs.nix:107:15: clan-pytest-with-core> E 106| clan-pytest-with-core> E 107| finalPkgs = if opt.pkgs.isDefined then cfg.pkgs.appendOverlays cfg.overlays else defaultPkgs; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 108| clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'pkgs.isDefined' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1154:21: clan-pytest-with-core> E 1153| definitionsWithLocations = res.defsFinal; clan-pytest-with-core> E 1154| inherit (res) isDefined; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1155| inherit (res.checkedAndMerged) valueMeta; clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'isDefined' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1310:5: clan-pytest-with-core> E 1309| clan-pytest-with-core> E 1310| isDefined = defsFinal != [ ]; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1311| clan-pytest-with-core> E clan-pytest-with-core> E (6 duplicate frames omitted) clan-pytest-with-core> E clan-pytest-with-core> E error: attribute 'system' missing clan-pytest-with-core> E at /build/store/nix/store/y3h139bhv4373m1hab367ma4p5i95i2f-source/modules/clan/module.nix:164:24: clan-pytest-with-core> E 163| (lib.modules.importApply ../../nixosModules/machineModules/overridePkgs.nix { clan-pytest-with-core> E 164| pkgs = nixpkgsMatrix.${config.inventory.machines.${name}.nixpkgs}.system.${system}.pkgs; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 165| }) clan-pytest-with-core> E Did you mean systems? 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 0x7fffe64e2c10> clan-pytest-with-core> flake_with_sops = 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_cross_machine_shared_dependency( clan-pytest-with-core> monkeypatch: pytest.MonkeyPatch, clan-pytest-with-core> flake_with_sops: ClanFlake, clan-pytest-with-core> ) -> None: clan-pytest-with-core> """Shared generator on machine B depends on shared generator defined ONLY on machine A. clan-pytest-with-core> clan-pytest-with-core> This mirrors the zerotier pattern: clan-pytest-with-core> - controller defines shared 'identity' generator clan-pytest-with-core> - every machine defines shared 'network-id' generator that depends on controller-'identity' clan-pytest-with-core> - peer does NOT define controller-'identity' itself clan-pytest-with-core> clan-pytest-with-core> The dependency must be resolved via the all-machines closure, not per-machine lookup. clan-pytest-with-core> """ clan-pytest-with-core> flake = flake_with_sops clan-pytest-with-core> clan-pytest-with-core> # controller: defines the shared identity generator clan-pytest-with-core> controller_config = flake.machines["controller"] = create_test_machine_config() clan-pytest-with-core> identity_gen = controller_config["clan"]["core"]["vars"]["generators"]["identity"] clan-pytest-with-core> identity_gen["share"] = True clan-pytest-with-core> identity_gen["files"]["secret"]["secret"] = False clan-pytest-with-core> identity_gen["script"] = 'echo -n "id-$RANDOM" > "$out"/secret' clan-pytest-with-core> clan-pytest-with-core> # controller also gets the shared network generator (same as peer) clan-pytest-with-core> ctrl_network_gen = controller_config["clan"]["core"]["vars"]["generators"][ clan-pytest-with-core> "network" clan-pytest-with-core> ] clan-pytest-with-core> ctrl_network_gen["share"] = True clan-pytest-with-core> ctrl_network_gen["files"]["network_id"]["secret"] = False clan-pytest-with-core> ctrl_network_gen["dependencies"] = ["identity"] clan-pytest-with-core> ctrl_network_gen["script"] = 'cat "$in"/identity/secret > "$out"/network_id' clan-pytest-with-core> clan-pytest-with-core> # peer: has the shared network generator (depends on identity) but NOT identity clan-pytest-with-core> peer_config = flake.machines["peer"] = create_test_machine_config() clan-pytest-with-core> peer_network_gen = peer_config["clan"]["core"]["vars"]["generators"]["network"] clan-pytest-with-core> peer_network_gen["share"] = True clan-pytest-with-core> peer_network_gen["files"]["network_id"]["secret"] = False clan-pytest-with-core> peer_network_gen["dependencies"] = ["identity"] clan-pytest-with-core> peer_network_gen["script"] = 'cat "$in"/identity/secret > "$out"/network_id' clan-pytest-with-core> clan-pytest-with-core> flake.refresh() clan-pytest-with-core> monkeypatch.chdir(flake.path) clan-pytest-with-core> clan-pytest-with-core> # Generate for all machines; this must not fail despite peer lacking 'identity' clan-pytest-with-core> > cli.run(["vars", "generate", "--flake", str(flake.path)]) clan-pytest-with-core> clan-pytest-with-core> /build/src/clan_cli/tests/test_vars_shared.py:850: 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/vars/generate.py:33: in generate_command clan-pytest-with-core> run_generators( clan-pytest-with-core> /build/src/clan_lib/vars/generate.py:306: in run_generators clan-pytest-with-core> all_generators = get_generators(machines, full_closure=True) clan-pytest-with-core> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ clan-pytest-with-core> /build/src/clan_lib/vars/generate.py:146: in get_generators clan-pytest-with-core> flake.precache(get_generators_precache_selectors(list(all_machines))) clan-pytest-with-core> /build/src/clan_lib/flake/flake.py:1151: in precache clan-pytest-with-core> self.get_from_nix(not_fetched_selectors) clan-pytest-with-core> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ clan-pytest-with-core> clan-pytest-with-core> self = Flake(identifier='/build/pytest-cgxr56mm/flake', hash='sha256-/VGifRS/N//+k4VQzBJOAxvMmsctm+LxpvC68YodQMw=', 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.?secrets.?age.?plugins', 'clanInternals.machines.x86_64-linux.{controller,peer}.config.clan.core.vars....ublicModule', 'clanInternals.machines.x86_64-linux.{controller,peer}.config.clan.core.vars.settings.secretModule', ...] 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 while executing:$ clan select 'clanInternals.?secrets.?age.?plugins' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{controller,peer}.config.clan.core.vars.generators.*.{share,dependencies,prompts,validationHash}' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{controller,peer}.config.clan.core.vars.generators.*.files.*.{secret,deploy,owner,group,mode,neededFor}' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{controller,peer}.config.clan.core.?sops.?defaultGroups' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{controller,peer}.config.clan.core.vars.settings.publicModule' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{controller,peer}.config.clan.core.vars.settings.secretModule' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{controller,peer}.config.clan.core.vars.?sops.?secretUploadDirectory' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{controller,peer}.config.clan.core.vars.?password-store.?passCommand' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{controller,peer}.config.clan.core.vars.?password-store.?secretLocation' clan-pytest-with-core> E $ clan select 'clanInternals.vars.settings.?recipients' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{controller,peer}.config.clan.core.vars.?age.?secretLocation' clan-pytest-with-core> E Reason: attribute 'system' missing clan-pytest-with-core> E at /build/store/nix/store/y3h139bhv4373m1hab367ma4p5i95i2f-source/modules/clan/module.nix:164:24: clan-pytest-with-core> E 163| (lib.modules.importApply ../../nixosModules/machineModules/overridePkgs.nix { clan-pytest-with-core> E 164| pkgs = nixpkgsMatrix.${config.inventory.machines.${name}.nixpkgs}.system.${system}.pkgs; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 165| }) clan-pytest-with-core> E Did you mean systems?. 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 setup ----------------------------- clan-pytest-with-core> !! $HOME does not point to a temp directory!! HOME=/build/pytest-cgxr56mm clan-pytest-with-core> [localhost] $ clan vars keygen --flake /build/pytest-cgxr56mm/flake --user admin --no-interactive clan-pytest-with-core> Caller: /build/src/clan_cli/tests/age_keys.py:31::init clan-pytest-with-core> clan-pytest-with-core> Prefetching flake /build/pytest-cgxr56mm/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/febbcab65441be6ccc547560fd0155faadebbbb7 clan-pytest-with-core> (cached) $ clan select clanInternals.inventoryClass.relativeDirectory 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> git \ clan-pytest-with-core> -C /build/pytest-cgxr56mm/flake \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-cgxr56mm/flake/sops/users/admin 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/admin to git clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-cgxr56mm/flake \ clan-pytest-with-core> diff \ clan-pytest-with-core> --cached --exit-code \ clan-pytest-with-core> -- /build/pytest-cgxr56mm/flake/sops/users/admin 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-cgxr56mm/flake \ clan-pytest-with-core> commit \ clan-pytest-with-core> -m 'secrets: add user admin' \ clan-pytest-with-core> --no-verify /build/pytest-cgxr56mm/flake/sops/users/admin 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/admin to git 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/pytest-cgxr56mm clan-pytest-with-core> DEBUG clan_cli.tests.helpers.cli:__init__.py:143 $ clan vars keygen --flake /build/pytest-cgxr56mm/flake --user admin --no-interactive clan-pytest-with-core> Caller: /build/src/clan_cli/tests/age_keys.py:31::init clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:927 Prefetching flake /build/pytest-cgxr56mm/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/febbcab65441be6ccc547560fd0155faadebbbb7 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.cmd:__init__.py:143 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> DEBUG clan_lib.cmd:__init__.py:143 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> DEBUG clan_cli.secrets.sops:sops.py:99 Found age public key from a private key in the environment (SOPS_AGE_KEY): age1dhwqzkah943xzc34tc3dlmfayyevcmdmxzjezdgdy33euxwf59vsp3vk3c clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:143 git \ clan-pytest-with-core> -C /build/pytest-cgxr56mm/flake \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-cgxr56mm/flake/sops/users/admin 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> DEBUG clan_lib.cmd:__init__.py:143 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> DEBUG clan_lib.git:__init__.py:98 Adding sops/users/admin to git clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:143 git \ clan-pytest-with-core> -C /build/pytest-cgxr56mm/flake \ clan-pytest-with-core> diff \ clan-pytest-with-core> --cached --exit-code \ clan-pytest-with-core> -- /build/pytest-cgxr56mm/flake/sops/users/admin 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> DEBUG clan_lib.cmd:__init__.py:143 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> DEBUG clan_lib.cmd:__init__.py:143 git \ clan-pytest-with-core> -C /build/pytest-cgxr56mm/flake \ clan-pytest-with-core> commit \ clan-pytest-with-core> -m 'secrets: add user admin' \ clan-pytest-with-core> --no-verify /build/pytest-cgxr56mm/flake/sops/users/admin 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> DEBUG clan_lib.cmd:__init__.py:143 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> INFO clan_lib.git:__init__.py:141 Committed sops/users/admin to git clan-pytest-with-core> ----------------------------- Captured stdout call ----------------------------- clan-pytest-with-core> [main e7de262] flake: update by flake generator clan-pytest-with-core> 4 files changed, 85 insertions(+) clan-pytest-with-core> create mode 100644 machines/controller/configuration.json clan-pytest-with-core> create mode 100644 machines/controller/configuration.nix clan-pytest-with-core> create mode 100644 machines/peer/configuration.json clan-pytest-with-core> create mode 100644 machines/peer/configuration.nix clan-pytest-with-core> ----------------------------- Captured stderr call ----------------------------- clan-pytest-with-core> Prefetching flake /build/pytest-cgxr56mm/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/d2c0050d97832c3ac5193485b93705d00938c15e clan-pytest-with-core> (cached) $ clan select clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> Prefetching flake /build/pytest-cgxr56mm/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/d2c0050d97832c3ac5193485b93705d00938c15e clan-pytest-with-core> (cached) $ clan select clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> [localhost] $ clan vars generate --flake /build/pytest-cgxr56mm/flake clan-pytest-with-core> Caller: /build/src/clan_cli/tests/test_vars_shared.py:850::test_cross_machine_shared_dependency clan-pytest-with-core> clan-pytest-with-core> Prefetching flake /build/pytest-cgxr56mm/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.cliChecks clan-pytest-with-core> Cache miss for clanInternals.inventoryClass.inventorySerialization.{instances,machines,meta} clan-pytest-with-core> Loading flake cache from file /build/clan-flake-cache/flakes-v2/9f10d567efdf343d26f2b5dca9a6a9d67c00f802 clan-pytest-with-core> Cache miss for clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> Loading flake cache from file /build/clan-flake-cache/flakes-v2/9f10d567efdf343d26f2b5dca9a6a9d67c00f802 clan-pytest-with-core> (cached) $ clan select 'clanInternals.inventoryClass.inventorySerialization.{instances,machines,meta}' clan-pytest-with-core> Precaching selectors: clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.machines clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.instances clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.meta clan-pytest-with-core> - (not cached) clanInternals.?secrets.?age.?plugins clan-pytest-with-core> - (cached) clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{controller,peer}.config.clan.core.vars.generators.*.{share,dependencies,prompts,validationHash} clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{controller,peer}.config.clan.core.vars.generators.*.files.*.{secret,deploy,owner,group,mode,neededFor} clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{controller,peer}.config.clan.core.?sops.?defaultGroups clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{controller,peer}.config.clan.core.vars.settings.publicModule clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{controller,peer}.config.clan.core.vars.settings.secretModule clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{controller,peer}.config.clan.core.vars.?sops.?secretUploadDirectory clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{controller,peer}.config.clan.core.vars.?password-store.?passCommand clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{controller,peer}.config.clan.core.vars.?password-store.?secretLocation clan-pytest-with-core> - (not cached) clanInternals.vars.settings.?recipients clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{controller,peer}.config.clan.core.vars.?age.?secretLocation clan-pytest-with-core> ------------------------------ Captured log call ------------------------------- clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:927 Prefetching flake /build/pytest-cgxr56mm/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/d2c0050d97832c3ac5193485b93705d00938c15e 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-cgxr56mm/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/d2c0050d97832c3ac5193485b93705d00938c15e clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1179 (cached) $ clan select clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> DEBUG clan_cli.tests.helpers.cli:__init__.py:143 $ clan vars generate --flake /build/pytest-cgxr56mm/flake clan-pytest-with-core> Caller: /build/src/clan_cli/tests/test_vars_shared.py:850::test_cross_machine_shared_dependency clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:927 Prefetching flake /build/pytest-cgxr56mm/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.cliChecks clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1174 Cache miss for clanInternals.inventoryClass.inventorySerialization.{instances,machines,meta} clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:789 Loading flake cache from file /build/clan-flake-cache/flakes-v2/9f10d567efdf343d26f2b5dca9a6a9d67c00f802 clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1174 Cache miss for clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:789 Loading flake cache from file /build/clan-flake-cache/flakes-v2/9f10d567efdf343d26f2b5dca9a6a9d67c00f802 clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1179 (cached) $ clan select 'clanInternals.inventoryClass.inventorySerialization.{instances,machines,meta}' clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1144 Precaching selectors: clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.machines clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.instances clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.meta clan-pytest-with-core> - (not cached) clanInternals.?secrets.?age.?plugins clan-pytest-with-core> - (cached) clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{controller,peer}.config.clan.core.vars.generators.*.{share,dependencies,prompts,validationHash} clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{controller,peer}.config.clan.core.vars.generators.*.files.*.{secret,deploy,owner,group,mode,neededFor} clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{controller,peer}.config.clan.core.?sops.?defaultGroups clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{controller,peer}.config.clan.core.vars.settings.publicModule clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{controller,peer}.config.clan.core.vars.settings.secretModule clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{controller,peer}.config.clan.core.vars.?sops.?secretUploadDirectory clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{controller,peer}.config.clan.core.vars.?password-store.?passCommand clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{controller,peer}.config.clan.core.vars.?password-store.?secretLocation clan-pytest-with-core> - (not cached) clanInternals.vars.settings.?recipients clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{controller,peer}.config.clan.core.vars.?age.?secretLocation clan-pytest-with-core> ________________ test_sops_set_shared_var_for_multiple_machines ________________ clan-pytest-with-core> [gw5] linux -- Python 3.14.7 /nix/store/3n4qphl9s728sz8frmpqqrv9b1m87g68-python3-3.14.7/bin/python clan-pytest-with-core> clan-pytest-with-core> self = Flake(identifier='/build/pytest-2_py_49s/flake', hash='sha256-FoT8KLS35ZAUm8gV88hl+1sbkYgxraR7nQ3wyfEBHko=', 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.?secrets.?age.?plugins', 'clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.var...licModule', 'clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.settings.secretModule', ...] 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-2_py_49s/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/cqpg7h0h4h95jw1bndhqszjr52a5cv6q-source?narHash=sha256-FoT8KLS35ZAUm8gV88hl+1sbkYgxraR7nQ3wyfEBHko="; 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": "maybe", "value": "secrets"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "plugins"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "share"}, {"type": "str", "value": "dependencies"}, {"type": "str", "value": "prompts"}, {"type": "str", "value": "validationHash"}]}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "str", "value": "files"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "secret"}, {"type": "str", "value": "deploy"}, {"type": "str", "value": "owner"}, {"type": "str", "value": "group"}, {"type": "str", "value": "mode"}, {"type": "str", "value": "neededFor"}]}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "defaultGroups"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "publicModule"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "secretModule"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "secretUploadDirectory"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "passCommand"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "secretLocation"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "maybe", "value": "recipients"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "secretLocation"}]'"'"''"'"') 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": "maybe", "value": "secrets"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "plugins"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "share"}, {"type": "str", "value": "dependencies"}, {"type": "str", "value": "prompts"}, {"type": "str", "value": "validationHash"}]}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "str", "value": "files"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "secret"}, {"type": "str", "value": "deploy"}, {"type": "str", "value": "owner"}, {"type": "str", "value": "group"}, {"type": "str", "value": "mode"}, {"type": "str", "value": "neededFor"}]}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "defaultGroups"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "publicModule"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "secretModule"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "secretUploadDirectory"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "passCommand"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "secretLocation"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "maybe", "value": "recipients"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "secretLocation"}]'') 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": "maybe", "value": "secrets"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "plugins"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "share"}, {"type": "str", "value": "dependencies"}, {"type": "str", "value": "prompts"}, {"type": "str", "value": "validationHash"}]}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "str", "value": "files"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "secret"}, {"type": "str", "value": "deploy"}, {"type": "str", "value": "owner"}, {"type": "str", "value": "group"}, {"type": "str", "value": "mode"}, {"type": "str", "value": "neededFor"}]}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "defaultGroups"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "publicModule"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "secretModule"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "secretUploadDirectory"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "passCommand"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "secretLocation"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "maybe", "value": "recipients"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "secretLocation"}]'') flake) clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating list element at index 1 clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating attribute 'machine1' clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/cba1x9mxnwr8b36cw41bya7g6d5v1p7d-source/select.nix:325:37: clan-pytest-with-core> E 324| in clan-pytest-with-core> E 325| builtins.mapAttrs (_: v: recurse selectors (idx + 1) v) filteredAttrs clan-pytest-with-core> E | ^ clan-pytest-with-core> E 326| else if selector.type == "maybe" then 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:325:40: clan-pytest-with-core> E 324| in clan-pytest-with-core> E 325| builtins.mapAttrs (_: v: recurse selectors (idx + 1) v) filteredAttrs clan-pytest-with-core> E | ^ clan-pytest-with-core> E 326| else if selector.type == "maybe" then 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 … from call site clan-pytest-with-core> E at /build/store/nix/store/cba1x9mxnwr8b36cw41bya7g6d5v1p7d-source/select.nix:312:15: clan-pytest-with-core> E 311| else if selector.type == "str" then clan-pytest-with-core> E 312| recurse selectors (idx + 1) (builtins.getAttr selector.value obj) clan-pytest-with-core> E | ^ clan-pytest-with-core> E 313| else if selector.type == "set" then 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 'getAttr' builtin clan-pytest-with-core> E at /build/store/nix/store/cba1x9mxnwr8b36cw41bya7g6d5v1p7d-source/select.nix:312:44: clan-pytest-with-core> E 311| else if selector.type == "str" then clan-pytest-with-core> E 312| recurse selectors (idx + 1) (builtins.getAttr selector.value obj) clan-pytest-with-core> E | ^ clan-pytest-with-core> E 313| else if selector.type == "set" then clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'seq' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:401:18: clan-pytest-with-core> E 400| options = checked options; clan-pytest-with-core> E 401| config = checked (removeAttrs config [ "_module" ]); clan-pytest-with-core> E | ^ clan-pytest-with-core> E 402| _module = checked (config._module); 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:304:9: clan-pytest-with-core> E 303| checkUnmatched = clan-pytest-with-core> E 304| if config._module.check && config._module.freeformType == null && merged.unmatchedDefns != [ ] then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 305| let clan-pytest-with-core> E clan-pytest-with-core> E … in the right operand of the AND (&&) operator clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:304:72: clan-pytest-with-core> E 303| checkUnmatched = clan-pytest-with-core> E 304| if config._module.check && config._module.freeformType == null && merged.unmatchedDefns != [ ] then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 305| let clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'unmatchedDefns' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:940:7: clan-pytest-with-core> E 939| # Transforms unmatchedDefnsByName into a list of definitions clan-pytest-with-core> E 940| unmatchedDefns = clan-pytest-with-core> E | ^ clan-pytest-with-core> E 941| if configs == [ ] then clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'concatLists' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:946:11: clan-pytest-with-core> E 945| else clan-pytest-with-core> E 946| concatLists ( clan-pytest-with-core> E | ^ clan-pytest-with-core> E 947| mapAttrsToList ( clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:948:21: clan-pytest-with-core> E 947| mapAttrsToList ( clan-pytest-with-core> E 948| name: defs: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 949| map ( clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'map' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:949:15: clan-pytest-with-core> E 948| name: defs: clan-pytest-with-core> E 949| map ( clan-pytest-with-core> E | ^ clan-pytest-with-core> E 950| def: clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:932:22: clan-pytest-with-core> E 931| # Propagate all unmatched definitions from nested option sets clan-pytest-with-core> E 932| mapAttrs (n: v: v.unmatchedDefns) resultsByName clan-pytest-with-core> E | ^ clan-pytest-with-core> E 933| # Plus the definitions for the current prefix that don't have a matching option clan-pytest-with-core> E clan-pytest-with-core> E (10 duplicate frames omitted) clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:932:25: clan-pytest-with-core> E 931| # Propagate all unmatched definitions from nested option sets clan-pytest-with-core> E 932| mapAttrs (n: v: v.unmatchedDefns) resultsByName clan-pytest-with-core> E | ^ clan-pytest-with-core> E 933| # Plus the definitions for the current prefix that don't have a matching option clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:876:15: clan-pytest-with-core> E 875| resultsByName = mapAttrs ( clan-pytest-with-core> E 876| name: decls: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 877| # We're descending into attribute ‘name’. 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:888:9: clan-pytest-with-core> E 887| in clan-pytest-with-core> E 888| if length optionDecls == length decls then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 889| let clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'length' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:888:12: clan-pytest-with-core> E 887| in clan-pytest-with-core> E 888| if length optionDecls == length decls then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 889| let clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'filter' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:882:25: clan-pytest-with-core> E 881| defns' = rawDefinitionsByName.${name} or [ ]; clan-pytest-with-core> E 882| optionDecls = filter ( clan-pytest-with-core> E | ^ clan-pytest-with-core> E 883| m: clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:883:13: clan-pytest-with-core> E 882| optionDecls = filter ( clan-pytest-with-core> E 883| m: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 884| m.options ? _type clan-pytest-with-core> E clan-pytest-with-core> E … in the left operand of the AND (&&) operator clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:885:13: clan-pytest-with-core> E 884| m.options ? _type clan-pytest-with-core> E 885| && (m.options._type == "option" || throwDeclarationTypeError loc m.options._type m._file) clan-pytest-with-core> E | ^ clan-pytest-with-core> E 886| ) decls; clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'options' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:807:15: clan-pytest-with-core> E 806| pos = unsafeGetAttrPos n subtree; clan-pytest-with-core> E 807| options = option; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 808| }) subtree clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:289:73: clan-pytest-with-core> E 288| len = length attrPath; clan-pytest-with-core> E 289| atDepth = n: if n == len then value else { ${elemAt attrPath n} = atDepth (n + 1); }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 290| in clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'atDepth' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:289:17: clan-pytest-with-core> E 288| len = length attrPath; clan-pytest-with-core> E 289| atDepth = n: if n == len then value else { ${elemAt attrPath n} = atDepth (n + 1); }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 290| in clan-pytest-with-core> E clan-pytest-with-core> E … in the right operand of the update (//) operator clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:2047:9: clan-pytest-with-core> E 2046| } clan-pytest-with-core> E 2047| // optionalAttrs (toType != null) { clan-pytest-with-core> E | ^ clan-pytest-with-core> E 2048| type = toType; clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:2047:12: clan-pytest-with-core> E 2046| } clan-pytest-with-core> E 2047| // optionalAttrs (toType != null) { clan-pytest-with-core> E | ^ clan-pytest-with-core> E 2048| type = toType; clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'optionalAttrs' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:1492:25: clan-pytest-with-core> E 1491| */ clan-pytest-with-core> E 1492| optionalAttrs = cond: as: if cond then as else { }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1493| 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:1492:29: clan-pytest-with-core> E 1491| */ clan-pytest-with-core> E 1492| optionalAttrs = cond: as: if cond then as else { }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1493| clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:2036:17: clan-pytest-with-core> E 2035| let clan-pytest-with-core> E 2036| opt = attrByPath to { } options; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 2037| in clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'attrByPath' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:89:24: clan-pytest-with-core> E 88| attrByPath = clan-pytest-with-core> E 89| attrPath: default: set: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 90| let clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:106:5: clan-pytest-with-core> E 105| in clan-pytest-with-core> E 106| attrByPath' 0 set; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 107| clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'attrByPath'' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:93:12: clan-pytest-with-core> E 92| attrByPath' = clan-pytest-with-core> E 93| n: s: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 94| ( clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:102:35: clan-pytest-with-core> E 101| in clan-pytest-with-core> E 102| if s ? ${attr} then attrByPath' (n + 1) s.${attr} else default clan-pytest-with-core> E | ^ clan-pytest-with-core> E 103| ) clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'attrByPath'' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:93:12: clan-pytest-with-core> E 92| attrByPath' = clan-pytest-with-core> E 93| n: s: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 94| ( clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:102:35: clan-pytest-with-core> E 101| in clan-pytest-with-core> E 102| if s ? ${attr} then attrByPath' (n + 1) s.${attr} else default clan-pytest-with-core> E | ^ clan-pytest-with-core> E 103| ) clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'attrByPath'' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:93:12: clan-pytest-with-core> E 92| attrByPath' = clan-pytest-with-core> E 93| n: s: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 94| ( clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:102:35: clan-pytest-with-core> E 101| in clan-pytest-with-core> E 102| if s ? ${attr} then attrByPath' (n + 1) s.${attr} else default clan-pytest-with-core> E | ^ clan-pytest-with-core> E 103| ) clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'attrByPath'' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:93:12: clan-pytest-with-core> E 92| attrByPath' = clan-pytest-with-core> E 93| n: s: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 94| ( clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:102:55: clan-pytest-with-core> E 101| in clan-pytest-with-core> E 102| if s ? ${attr} then attrByPath' (n + 1) s.${attr} else default clan-pytest-with-core> E | ^ clan-pytest-with-core> E 103| ) clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:927:37: clan-pytest-with-core> E 926| clan-pytest-with-core> E 927| matchedOptions = mapAttrs (n: v: v.matchedOptions) resultsByName; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 928| clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'matchedOptions' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:893:13: clan-pytest-with-core> E 892| { clan-pytest-with-core> E 893| matchedOptions = evalOptionValue loc opt defns'; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 894| unmatchedDefns = [ ]; clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:893:30: clan-pytest-with-core> E 892| { clan-pytest-with-core> E 893| matchedOptions = evalOptionValue loc opt defns'; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 894| unmatchedDefns = [ ]; clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'evalOptionValue' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1103:15: clan-pytest-with-core> E 1102| evalOptionValue = clan-pytest-with-core> E 1103| loc: opt: defs: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1104| let clan-pytest-with-core> E clan-pytest-with-core> E … in the left operand of the update (//) operator clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1148:5: clan-pytest-with-core> E 1147| warnDeprecation opt clan-pytest-with-core> E 1148| // { clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1149| value = addErrorContext "while evaluating the option `${showOption loc}':" value; 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1141:9: clan-pytest-with-core> E 1140| warnDeprecation = clan-pytest-with-core> E 1141| if (opt.type.deprecationMessage != null) then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1142| warn "The type `types.${opt.type.name}' of option `${showOption loc}' defined in ${showFiles opt.declarations} is deprecated. ${opt.type.deprecationMessage}" clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:890:19: clan-pytest-with-core> E 889| let clan-pytest-with-core> E 890| opt = fixupOptionType loc (mergeOptionDecls loc decls); clan-pytest-with-core> E | ^ clan-pytest-with-core> E 891| in clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'fixupOptionType' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1473:10: clan-pytest-with-core> E 1472| fixupOptionType = clan-pytest-with-core> E 1473| loc: opt: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1474| if opt.type.getSubModules or null == null then 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1474:5: clan-pytest-with-core> E 1473| loc: opt: clan-pytest-with-core> E 1474| if opt.type.getSubModules or null == null then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1475| opt // { type = opt.type or types.unspecified; } clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'type.getSubModules' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/nixos/modules/services/hardware/bluetooth.nix:72:9: clan-pytest-with-core> E 71| settings = mkOption { clan-pytest-with-core> E 72| type = cfgFmt.type; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 73| default = { }; clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/nixos/modules/services/hardware/bluetooth.nix:26:12: clan-pytest-with-core> E 25| clan-pytest-with-core> E 26| cfgFmt = pkgs.formats.ini { }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 27| clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:727:15: clan-pytest-with-core> E 726| extraArgs = mapAttrs ( clan-pytest-with-core> E 727| name: _: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 728| addErrorContext (context name) ( clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the module argument `pkgs' in "/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/nixos/modules/services/hardware/bluetooth.nix": clan-pytest-with-core> E clan-pytest-with-core> E … noting that argument `pkgs` is not externally provided, so querying `_module.args` instead, requiring `config` clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:731:13: clan-pytest-with-core> E 730| "noting that argument `${name}` is not externally provided, so querying `_module.args` instead, requiring `config`" clan-pytest-with-core> E 731| config._module.args.${name} clan-pytest-with-core> E | ^ clan-pytest-with-core> E 732| ) clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/types.nix:1029:18: clan-pytest-with-core> E 1028| value = mapAttrs ( clan-pytest-with-core> E 1029| n: v: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1030| if lazy then clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'optionalValue.value' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1312:5: clan-pytest-with-core> E 1311| clan-pytest-with-core> E 1312| optionalValue = if isDefined then { value = mergedValue; } else { }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1313| }; 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1312:21: clan-pytest-with-core> E 1311| clan-pytest-with-core> E 1312| optionalValue = if isDefined then { value = mergedValue; } else { }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1313| }; clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'values' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1240:11: clan-pytest-with-core> E 1239| { clan-pytest-with-core> E 1240| values = defsSorted; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1241| inherit (defsFiltered) highestPrio; 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1211:11: clan-pytest-with-core> E 1210| # Avoid sorting if we don't have to. clan-pytest-with-core> E 1211| if any (def: def.value._type or "" == "order") defsFiltered.values then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1212| sortProperties defsFiltered.values clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'any' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1211:14: clan-pytest-with-core> E 1210| # Avoid sorting if we don't have to. clan-pytest-with-core> E 1211| if any (def: def.value._type or "" == "order") defsFiltered.values then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1212| sortProperties defsFiltered.values clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1211:19: clan-pytest-with-core> E 1210| # Avoid sorting if we don't have to. clan-pytest-with-core> E 1211| if any (def: def.value._type or "" == "order") defsFiltered.values then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1212| sortProperties defsFiltered.values clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'value._type' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1422:67: clan-pytest-with-core> E 1421| strip = clan-pytest-with-core> E 1422| def: if def.value._type or "" == "override" then def // { value = def.value.content; } else def; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1423| in clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'value.content' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1566:22: clan-pytest-with-core> E 1565| _type = "override"; clan-pytest-with-core> E 1566| inherit priority content; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1567| }; 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/nixos/modules/misc/nixpkgs.nix:107:15: clan-pytest-with-core> E 106| clan-pytest-with-core> E 107| finalPkgs = if opt.pkgs.isDefined then cfg.pkgs.appendOverlays cfg.overlays else defaultPkgs; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 108| clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'pkgs.isDefined' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1154:21: clan-pytest-with-core> E 1153| definitionsWithLocations = res.defsFinal; clan-pytest-with-core> E 1154| inherit (res) isDefined; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1155| inherit (res.checkedAndMerged) valueMeta; clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'isDefined' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1310:5: clan-pytest-with-core> E 1309| clan-pytest-with-core> E 1310| isDefined = defsFinal != [ ]; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1311| clan-pytest-with-core> E clan-pytest-with-core> E (6 duplicate frames omitted) clan-pytest-with-core> E clan-pytest-with-core> E error: attribute 'system' missing clan-pytest-with-core> E at /build/store/nix/store/y3h139bhv4373m1hab367ma4p5i95i2f-source/modules/clan/module.nix:164:24: clan-pytest-with-core> E 163| (lib.modules.importApply ../../nixosModules/machineModules/overridePkgs.nix { clan-pytest-with-core> E 164| pkgs = nixpkgsMatrix.${config.inventory.machines.${name}.nixpkgs}.system.${system}.pkgs; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 165| }) clan-pytest-with-core> E Did you mean systems? 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 0x7fffe62d1250> clan-pytest-with-core> flake_with_sops = 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_sops_set_shared_var_for_multiple_machines( clan-pytest-with-core> monkeypatch: pytest.MonkeyPatch, clan-pytest-with-core> flake_with_sops: ClanFlake, clan-pytest-with-core> ) -> None: clan-pytest-with-core> """Test that set_var on a shared secret (sops backend) appends recipients clan-pytest-with-core> rather than overwriting them, and last written value wins. clan-pytest-with-core> """ clan-pytest-with-core> flake = flake_with_sops clan-pytest-with-core> clan-pytest-with-core> machine1_config = flake.machines["machine1"] = create_test_machine_config() clan-pytest-with-core> shared_generator = machine1_config["clan"]["core"]["vars"]["generators"][ clan-pytest-with-core> "shared_generator" clan-pytest-with-core> ] clan-pytest-with-core> shared_generator["share"] = True clan-pytest-with-core> shared_generator["files"]["my_secret"]["secret"] = True clan-pytest-with-core> shared_generator["script"] = 'echo -n "initial" > "$out"/my_secret' clan-pytest-with-core> flake.machines["machine2"] = machine1_config clan-pytest-with-core> flake.refresh() clan-pytest-with-core> monkeypatch.chdir(flake.path) clan-pytest-with-core> clan-pytest-with-core> generator_key = GeneratorId(name="shared_generator", placement=Shared()) clan-pytest-with-core> clan-pytest-with-core> # Generate vars for both machines (creates machine keys and initial value) clan-pytest-with-core> > cli.run(["vars", "generate", "--flake", str(flake.path)]) clan-pytest-with-core> clan-pytest-with-core> /build/src/clan_cli/tests/test_vars_shared.py:619: 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/vars/generate.py:33: in generate_command clan-pytest-with-core> run_generators( clan-pytest-with-core> /build/src/clan_lib/vars/generate.py:306: in run_generators clan-pytest-with-core> all_generators = get_generators(machines, full_closure=True) clan-pytest-with-core> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ clan-pytest-with-core> /build/src/clan_lib/vars/generate.py:146: in get_generators clan-pytest-with-core> flake.precache(get_generators_precache_selectors(list(all_machines))) clan-pytest-with-core> /build/src/clan_lib/flake/flake.py:1151: in precache clan-pytest-with-core> self.get_from_nix(not_fetched_selectors) clan-pytest-with-core> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ clan-pytest-with-core> clan-pytest-with-core> self = Flake(identifier='/build/pytest-2_py_49s/flake', hash='sha256-FoT8KLS35ZAUm8gV88hl+1sbkYgxraR7nQ3wyfEBHko=', 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.?secrets.?age.?plugins', 'clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.var...licModule', 'clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.settings.secretModule', ...] 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 while executing:$ clan select 'clanInternals.?secrets.?age.?plugins' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.generators.*.{share,dependencies,prompts,validationHash}' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.generators.*.files.*.{secret,deploy,owner,group,mode,neededFor}' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.?sops.?defaultGroups' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.settings.publicModule' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.settings.secretModule' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.?sops.?secretUploadDirectory' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.?password-store.?passCommand' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.?password-store.?secretLocation' clan-pytest-with-core> E $ clan select 'clanInternals.vars.settings.?recipients' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.?age.?secretLocation' clan-pytest-with-core> E Reason: attribute 'system' missing clan-pytest-with-core> E at /build/store/nix/store/y3h139bhv4373m1hab367ma4p5i95i2f-source/modules/clan/module.nix:164:24: clan-pytest-with-core> E 163| (lib.modules.importApply ../../nixosModules/machineModules/overridePkgs.nix { clan-pytest-with-core> E 164| pkgs = nixpkgsMatrix.${config.inventory.machines.${name}.nixpkgs}.system.${system}.pkgs; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 165| }) clan-pytest-with-core> E Did you mean systems?. 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 setup ----------------------------- clan-pytest-with-core> !! $HOME does not point to a temp directory!! HOME=/build/pytest-2_py_49s clan-pytest-with-core> [localhost] $ clan vars keygen --flake /build/pytest-2_py_49s/flake --user admin --no-interactive clan-pytest-with-core> Caller: /build/src/clan_cli/tests/age_keys.py:31::init clan-pytest-with-core> clan-pytest-with-core> Prefetching flake /build/pytest-2_py_49s/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/febbcab65441be6ccc547560fd0155faadebbbb7 clan-pytest-with-core> (cached) $ clan select clanInternals.inventoryClass.relativeDirectory 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> git \ clan-pytest-with-core> -C /build/pytest-2_py_49s/flake \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-2_py_49s/flake/sops/users/admin 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/admin to git clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-2_py_49s/flake \ clan-pytest-with-core> diff \ clan-pytest-with-core> --cached --exit-code \ clan-pytest-with-core> -- /build/pytest-2_py_49s/flake/sops/users/admin 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-2_py_49s/flake \ clan-pytest-with-core> commit \ clan-pytest-with-core> -m 'secrets: add user admin' \ clan-pytest-with-core> --no-verify /build/pytest-2_py_49s/flake/sops/users/admin 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/admin to git 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/pytest-2_py_49s clan-pytest-with-core> DEBUG clan_cli.tests.helpers.cli:__init__.py:143 $ clan vars keygen --flake /build/pytest-2_py_49s/flake --user admin --no-interactive clan-pytest-with-core> Caller: /build/src/clan_cli/tests/age_keys.py:31::init clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:927 Prefetching flake /build/pytest-2_py_49s/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/febbcab65441be6ccc547560fd0155faadebbbb7 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.cmd:__init__.py:143 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> DEBUG clan_lib.cmd:__init__.py:143 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> DEBUG clan_cli.secrets.sops:sops.py:99 Found age public key from a private key in the environment (SOPS_AGE_KEY): age1dhwqzkah943xzc34tc3dlmfayyevcmdmxzjezdgdy33euxwf59vsp3vk3c clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:143 git \ clan-pytest-with-core> -C /build/pytest-2_py_49s/flake \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-2_py_49s/flake/sops/users/admin 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> DEBUG clan_lib.cmd:__init__.py:143 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> DEBUG clan_lib.git:__init__.py:98 Adding sops/users/admin to git clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:143 git \ clan-pytest-with-core> -C /build/pytest-2_py_49s/flake \ clan-pytest-with-core> diff \ clan-pytest-with-core> --cached --exit-code \ clan-pytest-with-core> -- /build/pytest-2_py_49s/flake/sops/users/admin 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> DEBUG clan_lib.cmd:__init__.py:143 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> DEBUG clan_lib.cmd:__init__.py:143 git \ clan-pytest-with-core> -C /build/pytest-2_py_49s/flake \ clan-pytest-with-core> commit \ clan-pytest-with-core> -m 'secrets: add user admin' \ clan-pytest-with-core> --no-verify /build/pytest-2_py_49s/flake/sops/users/admin 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> DEBUG clan_lib.cmd:__init__.py:143 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> INFO clan_lib.git:__init__.py:141 Committed sops/users/admin to git clan-pytest-with-core> ----------------------------- Captured stdout call ----------------------------- clan-pytest-with-core> [main 031e7b1] flake: update by flake generator clan-pytest-with-core> 4 files changed, 70 insertions(+) clan-pytest-with-core> create mode 100644 machines/machine1/configuration.json clan-pytest-with-core> create mode 100644 machines/machine1/configuration.nix clan-pytest-with-core> create mode 100644 machines/machine2/configuration.json clan-pytest-with-core> create mode 100644 machines/machine2/configuration.nix clan-pytest-with-core> ----------------------------- Captured stderr call ----------------------------- clan-pytest-with-core> Prefetching flake /build/pytest-2_py_49s/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/d2c0050d97832c3ac5193485b93705d00938c15e clan-pytest-with-core> (cached) $ clan select clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> Prefetching flake /build/pytest-2_py_49s/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/d2c0050d97832c3ac5193485b93705d00938c15e clan-pytest-with-core> (cached) $ clan select clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> [localhost] $ clan vars generate --flake /build/pytest-2_py_49s/flake clan-pytest-with-core> Caller: /build/src/clan_cli/tests/test_vars_shared.py:619::test_sops_set_shared_var_for_multiple_machines clan-pytest-with-core> clan-pytest-with-core> Prefetching flake /build/pytest-2_py_49s/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.cliChecks clan-pytest-with-core> Cache miss for clanInternals.inventoryClass.inventorySerialization.{instances,machines,meta} clan-pytest-with-core> Loading flake cache from file /build/clan-flake-cache/flakes-v2/1caa1c492c3fbc1b361900e7f719b30eeb9c59c8 clan-pytest-with-core> Cache miss for clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> Loading flake cache from file /build/clan-flake-cache/flakes-v2/1caa1c492c3fbc1b361900e7f719b30eeb9c59c8 clan-pytest-with-core> (cached) $ clan select 'clanInternals.inventoryClass.inventorySerialization.{instances,machines,meta}' clan-pytest-with-core> Precaching selectors: clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.machines clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.instances clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.meta clan-pytest-with-core> - (not cached) clanInternals.?secrets.?age.?plugins clan-pytest-with-core> - (cached) clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.generators.*.{share,dependencies,prompts,validationHash} clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.generators.*.files.*.{secret,deploy,owner,group,mode,neededFor} clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.?sops.?defaultGroups clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.settings.publicModule clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.settings.secretModule clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.?sops.?secretUploadDirectory clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.?password-store.?passCommand clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.?password-store.?secretLocation clan-pytest-with-core> - (not cached) clanInternals.vars.settings.?recipients clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.?age.?secretLocation clan-pytest-with-core> ------------------------------ Captured log call ------------------------------- clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:927 Prefetching flake /build/pytest-2_py_49s/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/d2c0050d97832c3ac5193485b93705d00938c15e 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-2_py_49s/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/d2c0050d97832c3ac5193485b93705d00938c15e clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1179 (cached) $ clan select clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> DEBUG clan_cli.tests.helpers.cli:__init__.py:143 $ clan vars generate --flake /build/pytest-2_py_49s/flake clan-pytest-with-core> Caller: /build/src/clan_cli/tests/test_vars_shared.py:619::test_sops_set_shared_var_for_multiple_machines clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:927 Prefetching flake /build/pytest-2_py_49s/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.cliChecks clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1174 Cache miss for clanInternals.inventoryClass.inventorySerialization.{instances,machines,meta} clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:789 Loading flake cache from file /build/clan-flake-cache/flakes-v2/1caa1c492c3fbc1b361900e7f719b30eeb9c59c8 clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1174 Cache miss for clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:789 Loading flake cache from file /build/clan-flake-cache/flakes-v2/1caa1c492c3fbc1b361900e7f719b30eeb9c59c8 clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1179 (cached) $ clan select 'clanInternals.inventoryClass.inventorySerialization.{instances,machines,meta}' clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1144 Precaching selectors: clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.machines clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.instances clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.meta clan-pytest-with-core> - (not cached) clanInternals.?secrets.?age.?plugins clan-pytest-with-core> - (cached) clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.generators.*.{share,dependencies,prompts,validationHash} clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.generators.*.files.*.{secret,deploy,owner,group,mode,neededFor} clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.?sops.?defaultGroups clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.settings.publicModule clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.settings.secretModule clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.?sops.?secretUploadDirectory clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.?password-store.?passCommand clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.?password-store.?secretLocation clan-pytest-with-core> - (not cached) clanInternals.vars.settings.?recipients clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.?age.?secretLocation clan-pytest-with-core> __________________ test_share_mode_switch_regenerates_secret ___________________ clan-pytest-with-core> [gw9] linux -- Python 3.14.7 /nix/store/3n4qphl9s728sz8frmpqqrv9b1m87g68-python3-3.14.7/bin/python clan-pytest-with-core> clan-pytest-with-core> self = Flake(identifier='/build/pytest-8vfpegcd/flake', hash='sha256-Fbxh5+wBZwtew8Ja92dXgfKeXf6tLb6FTRqzSGoTEOU=', 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.?secrets.?age.?plugins', 'clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.gener...ngs.publicModule', 'clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.settings.secretModule', ...] 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-8vfpegcd/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/macn5amiqmwrzq0xyhirdaa1pvfq2161-source?narHash=sha256-Fbxh5+wBZwtew8Ja92dXgfKeXf6tLb6FTRqzSGoTEOU="; 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": "maybe", "value": "secrets"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "plugins"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "share"}, {"type": "str", "value": "dependencies"}, {"type": "str", "value": "prompts"}, {"type": "str", "value": "validationHash"}]}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "str", "value": "files"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "secret"}, {"type": "str", "value": "deploy"}, {"type": "str", "value": "owner"}, {"type": "str", "value": "group"}, {"type": "str", "value": "mode"}, {"type": "str", "value": "neededFor"}]}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "defaultGroups"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "publicModule"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "secretModule"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "secretUploadDirectory"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "passCommand"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "secretLocation"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "maybe", "value": "recipients"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "secretLocation"}]'"'"''"'"') 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": "maybe", "value": "secrets"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "plugins"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "share"}, {"type": "str", "value": "dependencies"}, {"type": "str", "value": "prompts"}, {"type": "str", "value": "validationHash"}]}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "str", "value": "files"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "secret"}, {"type": "str", "value": "deploy"}, {"type": "str", "value": "owner"}, {"type": "str", "value": "group"}, {"type": "str", "value": "mode"}, {"type": "str", "value": "neededFor"}]}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "defaultGroups"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "publicModule"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "secretModule"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "secretUploadDirectory"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "passCommand"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "secretLocation"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "maybe", "value": "recipients"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "secretLocation"}]'') 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": "maybe", "value": "secrets"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "plugins"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "share"}, {"type": "str", "value": "dependencies"}, {"type": "str", "value": "prompts"}, {"type": "str", "value": "validationHash"}]}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "str", "value": "files"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "secret"}, {"type": "str", "value": "deploy"}, {"type": "str", "value": "owner"}, {"type": "str", "value": "group"}, {"type": "str", "value": "mode"}, {"type": "str", "value": "neededFor"}]}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "defaultGroups"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "publicModule"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "secretModule"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "secretUploadDirectory"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "passCommand"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "secretLocation"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "maybe", "value": "recipients"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "secretLocation"}]'') flake) clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating list element at index 1 clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating attribute 'my_machine' clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/cba1x9mxnwr8b36cw41bya7g6d5v1p7d-source/select.nix:325:37: clan-pytest-with-core> E 324| in clan-pytest-with-core> E 325| builtins.mapAttrs (_: v: recurse selectors (idx + 1) v) filteredAttrs clan-pytest-with-core> E | ^ clan-pytest-with-core> E 326| else if selector.type == "maybe" then 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:325:40: clan-pytest-with-core> E 324| in clan-pytest-with-core> E 325| builtins.mapAttrs (_: v: recurse selectors (idx + 1) v) filteredAttrs clan-pytest-with-core> E | ^ clan-pytest-with-core> E 326| else if selector.type == "maybe" then 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 … from call site clan-pytest-with-core> E at /build/store/nix/store/cba1x9mxnwr8b36cw41bya7g6d5v1p7d-source/select.nix:312:15: clan-pytest-with-core> E 311| else if selector.type == "str" then clan-pytest-with-core> E 312| recurse selectors (idx + 1) (builtins.getAttr selector.value obj) clan-pytest-with-core> E | ^ clan-pytest-with-core> E 313| else if selector.type == "set" then 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 'getAttr' builtin clan-pytest-with-core> E at /build/store/nix/store/cba1x9mxnwr8b36cw41bya7g6d5v1p7d-source/select.nix:312:44: clan-pytest-with-core> E 311| else if selector.type == "str" then clan-pytest-with-core> E 312| recurse selectors (idx + 1) (builtins.getAttr selector.value obj) clan-pytest-with-core> E | ^ clan-pytest-with-core> E 313| else if selector.type == "set" then clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'seq' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:401:18: clan-pytest-with-core> E 400| options = checked options; clan-pytest-with-core> E 401| config = checked (removeAttrs config [ "_module" ]); clan-pytest-with-core> E | ^ clan-pytest-with-core> E 402| _module = checked (config._module); 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:304:9: clan-pytest-with-core> E 303| checkUnmatched = clan-pytest-with-core> E 304| if config._module.check && config._module.freeformType == null && merged.unmatchedDefns != [ ] then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 305| let clan-pytest-with-core> E clan-pytest-with-core> E … in the right operand of the AND (&&) operator clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:304:72: clan-pytest-with-core> E 303| checkUnmatched = clan-pytest-with-core> E 304| if config._module.check && config._module.freeformType == null && merged.unmatchedDefns != [ ] then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 305| let clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'unmatchedDefns' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:940:7: clan-pytest-with-core> E 939| # Transforms unmatchedDefnsByName into a list of definitions clan-pytest-with-core> E 940| unmatchedDefns = clan-pytest-with-core> E | ^ clan-pytest-with-core> E 941| if configs == [ ] then clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'concatLists' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:946:11: clan-pytest-with-core> E 945| else clan-pytest-with-core> E 946| concatLists ( clan-pytest-with-core> E | ^ clan-pytest-with-core> E 947| mapAttrsToList ( clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:948:21: clan-pytest-with-core> E 947| mapAttrsToList ( clan-pytest-with-core> E 948| name: defs: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 949| map ( clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'map' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:949:15: clan-pytest-with-core> E 948| name: defs: clan-pytest-with-core> E 949| map ( clan-pytest-with-core> E | ^ clan-pytest-with-core> E 950| def: clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:932:22: clan-pytest-with-core> E 931| # Propagate all unmatched definitions from nested option sets clan-pytest-with-core> E 932| mapAttrs (n: v: v.unmatchedDefns) resultsByName clan-pytest-with-core> E | ^ clan-pytest-with-core> E 933| # Plus the definitions for the current prefix that don't have a matching option clan-pytest-with-core> E clan-pytest-with-core> E (10 duplicate frames omitted) clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:932:25: clan-pytest-with-core> E 931| # Propagate all unmatched definitions from nested option sets clan-pytest-with-core> E 932| mapAttrs (n: v: v.unmatchedDefns) resultsByName clan-pytest-with-core> E | ^ clan-pytest-with-core> E 933| # Plus the definitions for the current prefix that don't have a matching option clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:876:15: clan-pytest-with-core> E 875| resultsByName = mapAttrs ( clan-pytest-with-core> E 876| name: decls: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 877| # We're descending into attribute ‘name’. 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:888:9: clan-pytest-with-core> E 887| in clan-pytest-with-core> E 888| if length optionDecls == length decls then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 889| let clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'length' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:888:12: clan-pytest-with-core> E 887| in clan-pytest-with-core> E 888| if length optionDecls == length decls then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 889| let clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'filter' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:882:25: clan-pytest-with-core> E 881| defns' = rawDefinitionsByName.${name} or [ ]; clan-pytest-with-core> E 882| optionDecls = filter ( clan-pytest-with-core> E | ^ clan-pytest-with-core> E 883| m: clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:883:13: clan-pytest-with-core> E 882| optionDecls = filter ( clan-pytest-with-core> E 883| m: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 884| m.options ? _type clan-pytest-with-core> E clan-pytest-with-core> E … in the left operand of the AND (&&) operator clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:885:13: clan-pytest-with-core> E 884| m.options ? _type clan-pytest-with-core> E 885| && (m.options._type == "option" || throwDeclarationTypeError loc m.options._type m._file) clan-pytest-with-core> E | ^ clan-pytest-with-core> E 886| ) decls; clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'options' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:807:15: clan-pytest-with-core> E 806| pos = unsafeGetAttrPos n subtree; clan-pytest-with-core> E 807| options = option; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 808| }) subtree clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:289:73: clan-pytest-with-core> E 288| len = length attrPath; clan-pytest-with-core> E 289| atDepth = n: if n == len then value else { ${elemAt attrPath n} = atDepth (n + 1); }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 290| in clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'atDepth' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:289:17: clan-pytest-with-core> E 288| len = length attrPath; clan-pytest-with-core> E 289| atDepth = n: if n == len then value else { ${elemAt attrPath n} = atDepth (n + 1); }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 290| in clan-pytest-with-core> E clan-pytest-with-core> E … in the right operand of the update (//) operator clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:2047:9: clan-pytest-with-core> E 2046| } clan-pytest-with-core> E 2047| // optionalAttrs (toType != null) { clan-pytest-with-core> E | ^ clan-pytest-with-core> E 2048| type = toType; clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:2047:12: clan-pytest-with-core> E 2046| } clan-pytest-with-core> E 2047| // optionalAttrs (toType != null) { clan-pytest-with-core> E | ^ clan-pytest-with-core> E 2048| type = toType; clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'optionalAttrs' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:1492:25: clan-pytest-with-core> E 1491| */ clan-pytest-with-core> E 1492| optionalAttrs = cond: as: if cond then as else { }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1493| 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:1492:29: clan-pytest-with-core> E 1491| */ clan-pytest-with-core> E 1492| optionalAttrs = cond: as: if cond then as else { }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1493| clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:2036:17: clan-pytest-with-core> E 2035| let clan-pytest-with-core> E 2036| opt = attrByPath to { } options; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 2037| in clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'attrByPath' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:89:24: clan-pytest-with-core> E 88| attrByPath = clan-pytest-with-core> E 89| attrPath: default: set: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 90| let clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:106:5: clan-pytest-with-core> E 105| in clan-pytest-with-core> E 106| attrByPath' 0 set; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 107| clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'attrByPath'' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:93:12: clan-pytest-with-core> E 92| attrByPath' = clan-pytest-with-core> E 93| n: s: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 94| ( clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:102:35: clan-pytest-with-core> E 101| in clan-pytest-with-core> E 102| if s ? ${attr} then attrByPath' (n + 1) s.${attr} else default clan-pytest-with-core> E | ^ clan-pytest-with-core> E 103| ) clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'attrByPath'' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:93:12: clan-pytest-with-core> E 92| attrByPath' = clan-pytest-with-core> E 93| n: s: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 94| ( clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:102:35: clan-pytest-with-core> E 101| in clan-pytest-with-core> E 102| if s ? ${attr} then attrByPath' (n + 1) s.${attr} else default clan-pytest-with-core> E | ^ clan-pytest-with-core> E 103| ) clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'attrByPath'' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:93:12: clan-pytest-with-core> E 92| attrByPath' = clan-pytest-with-core> E 93| n: s: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 94| ( clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:102:35: clan-pytest-with-core> E 101| in clan-pytest-with-core> E 102| if s ? ${attr} then attrByPath' (n + 1) s.${attr} else default clan-pytest-with-core> E | ^ clan-pytest-with-core> E 103| ) clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'attrByPath'' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:93:12: clan-pytest-with-core> E 92| attrByPath' = clan-pytest-with-core> E 93| n: s: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 94| ( clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:102:55: clan-pytest-with-core> E 101| in clan-pytest-with-core> E 102| if s ? ${attr} then attrByPath' (n + 1) s.${attr} else default clan-pytest-with-core> E | ^ clan-pytest-with-core> E 103| ) clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:927:37: clan-pytest-with-core> E 926| clan-pytest-with-core> E 927| matchedOptions = mapAttrs (n: v: v.matchedOptions) resultsByName; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 928| clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'matchedOptions' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:893:13: clan-pytest-with-core> E 892| { clan-pytest-with-core> E 893| matchedOptions = evalOptionValue loc opt defns'; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 894| unmatchedDefns = [ ]; clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:893:30: clan-pytest-with-core> E 892| { clan-pytest-with-core> E 893| matchedOptions = evalOptionValue loc opt defns'; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 894| unmatchedDefns = [ ]; clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'evalOptionValue' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1103:15: clan-pytest-with-core> E 1102| evalOptionValue = clan-pytest-with-core> E 1103| loc: opt: defs: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1104| let clan-pytest-with-core> E clan-pytest-with-core> E … in the left operand of the update (//) operator clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1148:5: clan-pytest-with-core> E 1147| warnDeprecation opt clan-pytest-with-core> E 1148| // { clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1149| value = addErrorContext "while evaluating the option `${showOption loc}':" value; 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1141:9: clan-pytest-with-core> E 1140| warnDeprecation = clan-pytest-with-core> E 1141| if (opt.type.deprecationMessage != null) then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1142| warn "The type `types.${opt.type.name}' of option `${showOption loc}' defined in ${showFiles opt.declarations} is deprecated. ${opt.type.deprecationMessage}" clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:890:19: clan-pytest-with-core> E 889| let clan-pytest-with-core> E 890| opt = fixupOptionType loc (mergeOptionDecls loc decls); clan-pytest-with-core> E | ^ clan-pytest-with-core> E 891| in clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'fixupOptionType' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1473:10: clan-pytest-with-core> E 1472| fixupOptionType = clan-pytest-with-core> E 1473| loc: opt: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1474| if opt.type.getSubModules or null == null then 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1474:5: clan-pytest-with-core> E 1473| loc: opt: clan-pytest-with-core> E 1474| if opt.type.getSubModules or null == null then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1475| opt // { type = opt.type or types.unspecified; } clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'type.getSubModules' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/nixos/modules/services/hardware/bluetooth.nix:72:9: clan-pytest-with-core> E 71| settings = mkOption { clan-pytest-with-core> E 72| type = cfgFmt.type; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 73| default = { }; clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/nixos/modules/services/hardware/bluetooth.nix:26:12: clan-pytest-with-core> E 25| clan-pytest-with-core> E 26| cfgFmt = pkgs.formats.ini { }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 27| clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:727:15: clan-pytest-with-core> E 726| extraArgs = mapAttrs ( clan-pytest-with-core> E 727| name: _: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 728| addErrorContext (context name) ( clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the module argument `pkgs' in "/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/nixos/modules/services/hardware/bluetooth.nix": clan-pytest-with-core> E clan-pytest-with-core> E … noting that argument `pkgs` is not externally provided, so querying `_module.args` instead, requiring `config` clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:731:13: clan-pytest-with-core> E 730| "noting that argument `${name}` is not externally provided, so querying `_module.args` instead, requiring `config`" clan-pytest-with-core> E 731| config._module.args.${name} clan-pytest-with-core> E | ^ clan-pytest-with-core> E 732| ) clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/types.nix:1029:18: clan-pytest-with-core> E 1028| value = mapAttrs ( clan-pytest-with-core> E 1029| n: v: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1030| if lazy then clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'optionalValue.value' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1312:5: clan-pytest-with-core> E 1311| clan-pytest-with-core> E 1312| optionalValue = if isDefined then { value = mergedValue; } else { }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1313| }; 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1312:21: clan-pytest-with-core> E 1311| clan-pytest-with-core> E 1312| optionalValue = if isDefined then { value = mergedValue; } else { }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1313| }; clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'values' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1240:11: clan-pytest-with-core> E 1239| { clan-pytest-with-core> E 1240| values = defsSorted; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1241| inherit (defsFiltered) highestPrio; 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1211:11: clan-pytest-with-core> E 1210| # Avoid sorting if we don't have to. clan-pytest-with-core> E 1211| if any (def: def.value._type or "" == "order") defsFiltered.values then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1212| sortProperties defsFiltered.values clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'any' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1211:14: clan-pytest-with-core> E 1210| # Avoid sorting if we don't have to. clan-pytest-with-core> E 1211| if any (def: def.value._type or "" == "order") defsFiltered.values then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1212| sortProperties defsFiltered.values clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1211:19: clan-pytest-with-core> E 1210| # Avoid sorting if we don't have to. clan-pytest-with-core> E 1211| if any (def: def.value._type or "" == "order") defsFiltered.values then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1212| sortProperties defsFiltered.values clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'value._type' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1422:67: clan-pytest-with-core> E 1421| strip = clan-pytest-with-core> E 1422| def: if def.value._type or "" == "override" then def // { value = def.value.content; } else def; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1423| in clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'value.content' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1566:22: clan-pytest-with-core> E 1565| _type = "override"; clan-pytest-with-core> E 1566| inherit priority content; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1567| }; 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/nixos/modules/misc/nixpkgs.nix:107:15: clan-pytest-with-core> E 106| clan-pytest-with-core> E 107| finalPkgs = if opt.pkgs.isDefined then cfg.pkgs.appendOverlays cfg.overlays else defaultPkgs; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 108| clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'pkgs.isDefined' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1154:21: clan-pytest-with-core> E 1153| definitionsWithLocations = res.defsFinal; clan-pytest-with-core> E 1154| inherit (res) isDefined; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1155| inherit (res.checkedAndMerged) valueMeta; clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'isDefined' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1310:5: clan-pytest-with-core> E 1309| clan-pytest-with-core> E 1310| isDefined = defsFinal != [ ]; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1311| clan-pytest-with-core> E clan-pytest-with-core> E (6 duplicate frames omitted) clan-pytest-with-core> E clan-pytest-with-core> E error: attribute 'system' missing clan-pytest-with-core> E at /build/store/nix/store/y3h139bhv4373m1hab367ma4p5i95i2f-source/modules/clan/module.nix:164:24: clan-pytest-with-core> E 163| (lib.modules.importApply ../../nixosModules/machineModules/overridePkgs.nix { clan-pytest-with-core> E 164| pkgs = nixpkgsMatrix.${config.inventory.machines.${name}.nixpkgs}.system.${system}.pkgs; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 165| }) clan-pytest-with-core> E Did you mean systems? 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 0x7fffe61c9220> clan-pytest-with-core> flake_with_sops = 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_share_mode_switch_regenerates_secret( clan-pytest-with-core> monkeypatch: pytest.MonkeyPatch, clan-pytest-with-core> flake_with_sops: ClanFlake, clan-pytest-with-core> ) -> None: clan-pytest-with-core> """Test that switching a generator from share=false to share=true clan-pytest-with-core> causes the secret to be regenerated with a new value. clan-pytest-with-core> """ clan-pytest-with-core> flake = flake_with_sops clan-pytest-with-core> clan-pytest-with-core> config = flake.machines["my_machine"] = create_test_machine_config() clan-pytest-with-core> clan-pytest-with-core> # Create a generator with share=false initially clan-pytest-with-core> my_generator = config["clan"]["core"]["vars"]["generators"]["my_generator"] clan-pytest-with-core> my_generator["share"] = False clan-pytest-with-core> my_generator["files"]["my_value"]["secret"] = False clan-pytest-with-core> my_generator["files"]["my_secret"]["secret"] = True clan-pytest-with-core> my_generator["script"] = ( clan-pytest-with-core> 'echo -n "public$RANDOM" > "$out"/my_value && echo -n "secret$RANDOM" > "$out"/my_secret' clan-pytest-with-core> ) clan-pytest-with-core> clan-pytest-with-core> flake.refresh() clan-pytest-with-core> monkeypatch.chdir(flake.path) clan-pytest-with-core> clan-pytest-with-core> # Generate with share=false clan-pytest-with-core> > cli.run(["vars", "generate", "--flake", str(flake.path), "my_machine"]) clan-pytest-with-core> clan-pytest-with-core> /build/src/clan_cli/tests/test_vars_shared.py:270: 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/vars/generate.py:33: in generate_command clan-pytest-with-core> run_generators( clan-pytest-with-core> /build/src/clan_lib/vars/generate.py:306: in run_generators clan-pytest-with-core> all_generators = get_generators(machines, full_closure=True) clan-pytest-with-core> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ clan-pytest-with-core> /build/src/clan_lib/vars/generate.py:146: in get_generators clan-pytest-with-core> flake.precache(get_generators_precache_selectors(list(all_machines))) clan-pytest-with-core> /build/src/clan_lib/flake/flake.py:1151: in precache clan-pytest-with-core> self.get_from_nix(not_fetched_selectors) clan-pytest-with-core> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ clan-pytest-with-core> clan-pytest-with-core> self = Flake(identifier='/build/pytest-8vfpegcd/flake', hash='sha256-Fbxh5+wBZwtew8Ja92dXgfKeXf6tLb6FTRqzSGoTEOU=', 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.?secrets.?age.?plugins', 'clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.gener...ngs.publicModule', 'clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.settings.secretModule', ...] 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 while executing:$ clan select 'clanInternals.?secrets.?age.?plugins' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.generators.*.{share,dependencies,prompts,validationHash}' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.generators.*.files.*.{secret,deploy,owner,group,mode,neededFor}' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.?sops.?defaultGroups' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.settings.publicModule' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.settings.secretModule' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.?sops.?secretUploadDirectory' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.?password-store.?passCommand' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.?password-store.?secretLocation' clan-pytest-with-core> E $ clan select 'clanInternals.vars.settings.?recipients' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.?age.?secretLocation' clan-pytest-with-core> E Reason: attribute 'system' missing clan-pytest-with-core> E at /build/store/nix/store/y3h139bhv4373m1hab367ma4p5i95i2f-source/modules/clan/module.nix:164:24: clan-pytest-with-core> E 163| (lib.modules.importApply ../../nixosModules/machineModules/overridePkgs.nix { clan-pytest-with-core> E 164| pkgs = nixpkgsMatrix.${config.inventory.machines.${name}.nixpkgs}.system.${system}.pkgs; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 165| }) clan-pytest-with-core> E Did you mean systems?. 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 setup ----------------------------- clan-pytest-with-core> !! $HOME does not point to a temp directory!! HOME=/build/pytest-8vfpegcd clan-pytest-with-core> [localhost] $ clan vars keygen --flake /build/pytest-8vfpegcd/flake --user admin --no-interactive clan-pytest-with-core> Caller: /build/src/clan_cli/tests/age_keys.py:31::init clan-pytest-with-core> clan-pytest-with-core> Prefetching flake /build/pytest-8vfpegcd/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/febbcab65441be6ccc547560fd0155faadebbbb7 clan-pytest-with-core> (cached) $ clan select clanInternals.inventoryClass.relativeDirectory 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> git \ clan-pytest-with-core> -C /build/pytest-8vfpegcd/flake \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-8vfpegcd/flake/sops/users/admin 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/admin to git clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-8vfpegcd/flake \ clan-pytest-with-core> diff \ clan-pytest-with-core> --cached --exit-code \ clan-pytest-with-core> -- /build/pytest-8vfpegcd/flake/sops/users/admin 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-8vfpegcd/flake \ clan-pytest-with-core> commit \ clan-pytest-with-core> -m 'secrets: add user admin' \ clan-pytest-with-core> --no-verify /build/pytest-8vfpegcd/flake/sops/users/admin 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/admin to git 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/pytest-8vfpegcd clan-pytest-with-core> DEBUG clan_cli.tests.helpers.cli:__init__.py:143 $ clan vars keygen --flake /build/pytest-8vfpegcd/flake --user admin --no-interactive clan-pytest-with-core> Caller: /build/src/clan_cli/tests/age_keys.py:31::init clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:927 Prefetching flake /build/pytest-8vfpegcd/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/febbcab65441be6ccc547560fd0155faadebbbb7 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.cmd:__init__.py:143 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> DEBUG clan_lib.cmd:__init__.py:143 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> DEBUG clan_cli.secrets.sops:sops.py:99 Found age public key from a private key in the environment (SOPS_AGE_KEY): age1dhwqzkah943xzc34tc3dlmfayyevcmdmxzjezdgdy33euxwf59vsp3vk3c clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:143 git \ clan-pytest-with-core> -C /build/pytest-8vfpegcd/flake \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-8vfpegcd/flake/sops/users/admin 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> DEBUG clan_lib.cmd:__init__.py:143 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> DEBUG clan_lib.git:__init__.py:98 Adding sops/users/admin to git clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:143 git \ clan-pytest-with-core> -C /build/pytest-8vfpegcd/flake \ clan-pytest-with-core> diff \ clan-pytest-with-core> --cached --exit-code \ clan-pytest-with-core> -- /build/pytest-8vfpegcd/flake/sops/users/admin 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> DEBUG clan_lib.cmd:__init__.py:143 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> DEBUG clan_lib.cmd:__init__.py:143 git \ clan-pytest-with-core> -C /build/pytest-8vfpegcd/flake \ clan-pytest-with-core> commit \ clan-pytest-with-core> -m 'secrets: add user admin' \ clan-pytest-with-core> --no-verify /build/pytest-8vfpegcd/flake/sops/users/admin 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> DEBUG clan_lib.cmd:__init__.py:143 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> INFO clan_lib.git:__init__.py:141 Committed sops/users/admin to git clan-pytest-with-core> ----------------------------- Captured stdout call ----------------------------- clan-pytest-with-core> [main 492066e] flake: update by flake generator clan-pytest-with-core> 2 files changed, 38 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> ----------------------------- Captured stderr call ----------------------------- clan-pytest-with-core> Prefetching flake /build/pytest-8vfpegcd/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/d2c0050d97832c3ac5193485b93705d00938c15e clan-pytest-with-core> (cached) $ clan select clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> [localhost] $ clan vars generate --flake /build/pytest-8vfpegcd/flake my_machine clan-pytest-with-core> Caller: /build/src/clan_cli/tests/test_vars_shared.py:270::test_share_mode_switch_regenerates_secret clan-pytest-with-core> clan-pytest-with-core> Prefetching flake /build/pytest-8vfpegcd/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.cliChecks clan-pytest-with-core> Cache miss for clanInternals.inventoryClass.inventorySerialization.{instances,machines,meta} clan-pytest-with-core> Loading flake cache from file /build/clan-flake-cache/flakes-v2/b34c75bff288126c5715faf42823332a305f32f9 clan-pytest-with-core> Cache miss for clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> Loading flake cache from file /build/clan-flake-cache/flakes-v2/b34c75bff288126c5715faf42823332a305f32f9 clan-pytest-with-core> (cached) $ clan select 'clanInternals.inventoryClass.inventorySerialization.{instances,machines,meta}' clan-pytest-with-core> Precaching selectors: clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.machines clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.instances clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.meta clan-pytest-with-core> - (not cached) clanInternals.?secrets.?age.?plugins clan-pytest-with-core> - (cached) clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.generators.*.{share,dependencies,prompts,validationHash} clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.generators.*.files.*.{secret,deploy,owner,group,mode,neededFor} clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.?sops.?defaultGroups clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.settings.publicModule clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.settings.secretModule clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.?sops.?secretUploadDirectory clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.?password-store.?passCommand clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.?password-store.?secretLocation clan-pytest-with-core> - (not cached) clanInternals.vars.settings.?recipients clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.?age.?secretLocation clan-pytest-with-core> ------------------------------ Captured log call ------------------------------- clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:927 Prefetching flake /build/pytest-8vfpegcd/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/d2c0050d97832c3ac5193485b93705d00938c15e clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1179 (cached) $ clan select clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> DEBUG clan_cli.tests.helpers.cli:__init__.py:143 $ clan vars generate --flake /build/pytest-8vfpegcd/flake my_machine clan-pytest-with-core> Caller: /build/src/clan_cli/tests/test_vars_shared.py:270::test_share_mode_switch_regenerates_secret clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:927 Prefetching flake /build/pytest-8vfpegcd/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.cliChecks clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1174 Cache miss for clanInternals.inventoryClass.inventorySerialization.{instances,machines,meta} clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:789 Loading flake cache from file /build/clan-flake-cache/flakes-v2/b34c75bff288126c5715faf42823332a305f32f9 clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1174 Cache miss for clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:789 Loading flake cache from file /build/clan-flake-cache/flakes-v2/b34c75bff288126c5715faf42823332a305f32f9 clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1179 (cached) $ clan select 'clanInternals.inventoryClass.inventorySerialization.{instances,machines,meta}' clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1144 Precaching selectors: clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.machines clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.instances clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.meta clan-pytest-with-core> - (not cached) clanInternals.?secrets.?age.?plugins clan-pytest-with-core> - (cached) clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.generators.*.{share,dependencies,prompts,validationHash} clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.generators.*.files.*.{secret,deploy,owner,group,mode,neededFor} clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.?sops.?defaultGroups clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.settings.publicModule clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.settings.secretModule clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.?sops.?secretUploadDirectory clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.?password-store.?passCommand clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.?password-store.?secretLocation clan-pytest-with-core> - (not cached) clanInternals.vars.settings.?recipients clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.?age.?secretLocation clan-pytest-with-core> __________ test_sops_fix_removes_machine_from_no_deploy_shared_secret __________ clan-pytest-with-core> [gw13] linux -- Python 3.14.7 /nix/store/3n4qphl9s728sz8frmpqqrv9b1m87g68-python3-3.14.7/bin/python clan-pytest-with-core> clan-pytest-with-core> self = Flake(identifier='/build/pytest-7riytv3h/flake', hash='sha256-+DzWCeL7VAPKQeDJKJYahikJIMgJVCT92w/TiqKL4AQ=', 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.?secrets.?age.?plugins', 'clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.var...licModule', 'clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.settings.secretModule', ...] 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-7riytv3h/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/f7b3ik54ansnmws1g6fzs57sc1b74lv5-source?narHash=sha256-+DzWCeL7VAPKQeDJKJYahikJIMgJVCT92w/TiqKL4AQ="; 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": "maybe", "value": "secrets"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "plugins"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "share"}, {"type": "str", "value": "dependencies"}, {"type": "str", "value": "prompts"}, {"type": "str", "value": "validationHash"}]}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "str", "value": "files"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "secret"}, {"type": "str", "value": "deploy"}, {"type": "str", "value": "owner"}, {"type": "str", "value": "group"}, {"type": "str", "value": "mode"}, {"type": "str", "value": "neededFor"}]}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "defaultGroups"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "publicModule"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "secretModule"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "secretUploadDirectory"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "passCommand"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "secretLocation"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "maybe", "value": "recipients"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "secretLocation"}]'"'"''"'"') 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": "maybe", "value": "secrets"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "plugins"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "share"}, {"type": "str", "value": "dependencies"}, {"type": "str", "value": "prompts"}, {"type": "str", "value": "validationHash"}]}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "str", "value": "files"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "secret"}, {"type": "str", "value": "deploy"}, {"type": "str", "value": "owner"}, {"type": "str", "value": "group"}, {"type": "str", "value": "mode"}, {"type": "str", "value": "neededFor"}]}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "defaultGroups"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "publicModule"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "secretModule"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "secretUploadDirectory"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "passCommand"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "secretLocation"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "maybe", "value": "recipients"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "secretLocation"}]'') 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": "maybe", "value": "secrets"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "plugins"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "share"}, {"type": "str", "value": "dependencies"}, {"type": "str", "value": "prompts"}, {"type": "str", "value": "validationHash"}]}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "str", "value": "files"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "secret"}, {"type": "str", "value": "deploy"}, {"type": "str", "value": "owner"}, {"type": "str", "value": "group"}, {"type": "str", "value": "mode"}, {"type": "str", "value": "neededFor"}]}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "defaultGroups"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "publicModule"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "secretModule"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "secretUploadDirectory"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "passCommand"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "secretLocation"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "maybe", "value": "recipients"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "secretLocation"}]'') flake) clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating list element at index 1 clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating attribute 'machine1' clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/cba1x9mxnwr8b36cw41bya7g6d5v1p7d-source/select.nix:325:37: clan-pytest-with-core> E 324| in clan-pytest-with-core> E 325| builtins.mapAttrs (_: v: recurse selectors (idx + 1) v) filteredAttrs clan-pytest-with-core> E | ^ clan-pytest-with-core> E 326| else if selector.type == "maybe" then 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:325:40: clan-pytest-with-core> E 324| in clan-pytest-with-core> E 325| builtins.mapAttrs (_: v: recurse selectors (idx + 1) v) filteredAttrs clan-pytest-with-core> E | ^ clan-pytest-with-core> E 326| else if selector.type == "maybe" then 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 … from call site clan-pytest-with-core> E at /build/store/nix/store/cba1x9mxnwr8b36cw41bya7g6d5v1p7d-source/select.nix:312:15: clan-pytest-with-core> E 311| else if selector.type == "str" then clan-pytest-with-core> E 312| recurse selectors (idx + 1) (builtins.getAttr selector.value obj) clan-pytest-with-core> E | ^ clan-pytest-with-core> E 313| else if selector.type == "set" then 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 'getAttr' builtin clan-pytest-with-core> E at /build/store/nix/store/cba1x9mxnwr8b36cw41bya7g6d5v1p7d-source/select.nix:312:44: clan-pytest-with-core> E 311| else if selector.type == "str" then clan-pytest-with-core> E 312| recurse selectors (idx + 1) (builtins.getAttr selector.value obj) clan-pytest-with-core> E | ^ clan-pytest-with-core> E 313| else if selector.type == "set" then clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'seq' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:401:18: clan-pytest-with-core> E 400| options = checked options; clan-pytest-with-core> E 401| config = checked (removeAttrs config [ "_module" ]); clan-pytest-with-core> E | ^ clan-pytest-with-core> E 402| _module = checked (config._module); 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:304:9: clan-pytest-with-core> E 303| checkUnmatched = clan-pytest-with-core> E 304| if config._module.check && config._module.freeformType == null && merged.unmatchedDefns != [ ] then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 305| let clan-pytest-with-core> E clan-pytest-with-core> E … in the right operand of the AND (&&) operator clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:304:72: clan-pytest-with-core> E 303| checkUnmatched = clan-pytest-with-core> E 304| if config._module.check && config._module.freeformType == null && merged.unmatchedDefns != [ ] then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 305| let clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'unmatchedDefns' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:940:7: clan-pytest-with-core> E 939| # Transforms unmatchedDefnsByName into a list of definitions clan-pytest-with-core> E 940| unmatchedDefns = clan-pytest-with-core> E | ^ clan-pytest-with-core> E 941| if configs == [ ] then clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'concatLists' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:946:11: clan-pytest-with-core> E 945| else clan-pytest-with-core> E 946| concatLists ( clan-pytest-with-core> E | ^ clan-pytest-with-core> E 947| mapAttrsToList ( clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:948:21: clan-pytest-with-core> E 947| mapAttrsToList ( clan-pytest-with-core> E 948| name: defs: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 949| map ( clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'map' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:949:15: clan-pytest-with-core> E 948| name: defs: clan-pytest-with-core> E 949| map ( clan-pytest-with-core> E | ^ clan-pytest-with-core> E 950| def: clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:932:22: clan-pytest-with-core> E 931| # Propagate all unmatched definitions from nested option sets clan-pytest-with-core> E 932| mapAttrs (n: v: v.unmatchedDefns) resultsByName clan-pytest-with-core> E | ^ clan-pytest-with-core> E 933| # Plus the definitions for the current prefix that don't have a matching option clan-pytest-with-core> E clan-pytest-with-core> E (10 duplicate frames omitted) clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:932:25: clan-pytest-with-core> E 931| # Propagate all unmatched definitions from nested option sets clan-pytest-with-core> E 932| mapAttrs (n: v: v.unmatchedDefns) resultsByName clan-pytest-with-core> E | ^ clan-pytest-with-core> E 933| # Plus the definitions for the current prefix that don't have a matching option clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:876:15: clan-pytest-with-core> E 875| resultsByName = mapAttrs ( clan-pytest-with-core> E 876| name: decls: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 877| # We're descending into attribute ‘name’. 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:888:9: clan-pytest-with-core> E 887| in clan-pytest-with-core> E 888| if length optionDecls == length decls then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 889| let clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'length' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:888:12: clan-pytest-with-core> E 887| in clan-pytest-with-core> E 888| if length optionDecls == length decls then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 889| let clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'filter' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:882:25: clan-pytest-with-core> E 881| defns' = rawDefinitionsByName.${name} or [ ]; clan-pytest-with-core> E 882| optionDecls = filter ( clan-pytest-with-core> E | ^ clan-pytest-with-core> E 883| m: clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:883:13: clan-pytest-with-core> E 882| optionDecls = filter ( clan-pytest-with-core> E 883| m: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 884| m.options ? _type clan-pytest-with-core> E clan-pytest-with-core> E … in the left operand of the AND (&&) operator clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:885:13: clan-pytest-with-core> E 884| m.options ? _type clan-pytest-with-core> E 885| && (m.options._type == "option" || throwDeclarationTypeError loc m.options._type m._file) clan-pytest-with-core> E | ^ clan-pytest-with-core> E 886| ) decls; clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'options' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:807:15: clan-pytest-with-core> E 806| pos = unsafeGetAttrPos n subtree; clan-pytest-with-core> E 807| options = option; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 808| }) subtree clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:289:73: clan-pytest-with-core> E 288| len = length attrPath; clan-pytest-with-core> E 289| atDepth = n: if n == len then value else { ${elemAt attrPath n} = atDepth (n + 1); }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 290| in clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'atDepth' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:289:17: clan-pytest-with-core> E 288| len = length attrPath; clan-pytest-with-core> E 289| atDepth = n: if n == len then value else { ${elemAt attrPath n} = atDepth (n + 1); }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 290| in clan-pytest-with-core> E clan-pytest-with-core> E … in the right operand of the update (//) operator clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:2047:9: clan-pytest-with-core> E 2046| } clan-pytest-with-core> E 2047| // optionalAttrs (toType != null) { clan-pytest-with-core> E | ^ clan-pytest-with-core> E 2048| type = toType; clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:2047:12: clan-pytest-with-core> E 2046| } clan-pytest-with-core> E 2047| // optionalAttrs (toType != null) { clan-pytest-with-core> E | ^ clan-pytest-with-core> E 2048| type = toType; clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'optionalAttrs' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:1492:25: clan-pytest-with-core> E 1491| */ clan-pytest-with-core> E 1492| optionalAttrs = cond: as: if cond then as else { }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1493| 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:1492:29: clan-pytest-with-core> E 1491| */ clan-pytest-with-core> E 1492| optionalAttrs = cond: as: if cond then as else { }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1493| clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:2036:17: clan-pytest-with-core> E 2035| let clan-pytest-with-core> E 2036| opt = attrByPath to { } options; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 2037| in clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'attrByPath' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:89:24: clan-pytest-with-core> E 88| attrByPath = clan-pytest-with-core> E 89| attrPath: default: set: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 90| let clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:106:5: clan-pytest-with-core> E 105| in clan-pytest-with-core> E 106| attrByPath' 0 set; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 107| clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'attrByPath'' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:93:12: clan-pytest-with-core> E 92| attrByPath' = clan-pytest-with-core> E 93| n: s: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 94| ( clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:102:35: clan-pytest-with-core> E 101| in clan-pytest-with-core> E 102| if s ? ${attr} then attrByPath' (n + 1) s.${attr} else default clan-pytest-with-core> E | ^ clan-pytest-with-core> E 103| ) clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'attrByPath'' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:93:12: clan-pytest-with-core> E 92| attrByPath' = clan-pytest-with-core> E 93| n: s: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 94| ( clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:102:35: clan-pytest-with-core> E 101| in clan-pytest-with-core> E 102| if s ? ${attr} then attrByPath' (n + 1) s.${attr} else default clan-pytest-with-core> E | ^ clan-pytest-with-core> E 103| ) clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'attrByPath'' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:93:12: clan-pytest-with-core> E 92| attrByPath' = clan-pytest-with-core> E 93| n: s: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 94| ( clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:102:35: clan-pytest-with-core> E 101| in clan-pytest-with-core> E 102| if s ? ${attr} then attrByPath' (n + 1) s.${attr} else default clan-pytest-with-core> E | ^ clan-pytest-with-core> E 103| ) clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'attrByPath'' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:93:12: clan-pytest-with-core> E 92| attrByPath' = clan-pytest-with-core> E 93| n: s: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 94| ( clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:102:55: clan-pytest-with-core> E 101| in clan-pytest-with-core> E 102| if s ? ${attr} then attrByPath' (n + 1) s.${attr} else default clan-pytest-with-core> E | ^ clan-pytest-with-core> E 103| ) clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:927:37: clan-pytest-with-core> E 926| clan-pytest-with-core> E 927| matchedOptions = mapAttrs (n: v: v.matchedOptions) resultsByName; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 928| clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'matchedOptions' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:893:13: clan-pytest-with-core> E 892| { clan-pytest-with-core> E 893| matchedOptions = evalOptionValue loc opt defns'; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 894| unmatchedDefns = [ ]; clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:893:30: clan-pytest-with-core> E 892| { clan-pytest-with-core> E 893| matchedOptions = evalOptionValue loc opt defns'; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 894| unmatchedDefns = [ ]; clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'evalOptionValue' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1103:15: clan-pytest-with-core> E 1102| evalOptionValue = clan-pytest-with-core> E 1103| loc: opt: defs: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1104| let clan-pytest-with-core> E clan-pytest-with-core> E … in the left operand of the update (//) operator clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1148:5: clan-pytest-with-core> E 1147| warnDeprecation opt clan-pytest-with-core> E 1148| // { clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1149| value = addErrorContext "while evaluating the option `${showOption loc}':" value; 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1141:9: clan-pytest-with-core> E 1140| warnDeprecation = clan-pytest-with-core> E 1141| if (opt.type.deprecationMessage != null) then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1142| warn "The type `types.${opt.type.name}' of option `${showOption loc}' defined in ${showFiles opt.declarations} is deprecated. ${opt.type.deprecationMessage}" clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:890:19: clan-pytest-with-core> E 889| let clan-pytest-with-core> E 890| opt = fixupOptionType loc (mergeOptionDecls loc decls); clan-pytest-with-core> E | ^ clan-pytest-with-core> E 891| in clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'fixupOptionType' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1473:10: clan-pytest-with-core> E 1472| fixupOptionType = clan-pytest-with-core> E 1473| loc: opt: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1474| if opt.type.getSubModules or null == null then 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1474:5: clan-pytest-with-core> E 1473| loc: opt: clan-pytest-with-core> E 1474| if opt.type.getSubModules or null == null then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1475| opt // { type = opt.type or types.unspecified; } clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'type.getSubModules' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/nixos/modules/services/hardware/bluetooth.nix:72:9: clan-pytest-with-core> E 71| settings = mkOption { clan-pytest-with-core> E 72| type = cfgFmt.type; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 73| default = { }; clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/nixos/modules/services/hardware/bluetooth.nix:26:12: clan-pytest-with-core> E 25| clan-pytest-with-core> E 26| cfgFmt = pkgs.formats.ini { }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 27| clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:727:15: clan-pytest-with-core> E 726| extraArgs = mapAttrs ( clan-pytest-with-core> E 727| name: _: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 728| addErrorContext (context name) ( clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the module argument `pkgs' in "/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/nixos/modules/services/hardware/bluetooth.nix": clan-pytest-with-core> E clan-pytest-with-core> E … noting that argument `pkgs` is not externally provided, so querying `_module.args` instead, requiring `config` clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:731:13: clan-pytest-with-core> E 730| "noting that argument `${name}` is not externally provided, so querying `_module.args` instead, requiring `config`" clan-pytest-with-core> E 731| config._module.args.${name} clan-pytest-with-core> E | ^ clan-pytest-with-core> E 732| ) clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/types.nix:1029:18: clan-pytest-with-core> E 1028| value = mapAttrs ( clan-pytest-with-core> E 1029| n: v: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1030| if lazy then clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'optionalValue.value' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1312:5: clan-pytest-with-core> E 1311| clan-pytest-with-core> E 1312| optionalValue = if isDefined then { value = mergedValue; } else { }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1313| }; 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1312:21: clan-pytest-with-core> E 1311| clan-pytest-with-core> E 1312| optionalValue = if isDefined then { value = mergedValue; } else { }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1313| }; clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'values' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1240:11: clan-pytest-with-core> E 1239| { clan-pytest-with-core> E 1240| values = defsSorted; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1241| inherit (defsFiltered) highestPrio; 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1211:11: clan-pytest-with-core> E 1210| # Avoid sorting if we don't have to. clan-pytest-with-core> E 1211| if any (def: def.value._type or "" == "order") defsFiltered.values then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1212| sortProperties defsFiltered.values clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'any' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1211:14: clan-pytest-with-core> E 1210| # Avoid sorting if we don't have to. clan-pytest-with-core> E 1211| if any (def: def.value._type or "" == "order") defsFiltered.values then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1212| sortProperties defsFiltered.values clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1211:19: clan-pytest-with-core> E 1210| # Avoid sorting if we don't have to. clan-pytest-with-core> E 1211| if any (def: def.value._type or "" == "order") defsFiltered.values then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1212| sortProperties defsFiltered.values clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'value._type' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1422:67: clan-pytest-with-core> E 1421| strip = clan-pytest-with-core> E 1422| def: if def.value._type or "" == "override" then def // { value = def.value.content; } else def; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1423| in clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'value.content' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1566:22: clan-pytest-with-core> E 1565| _type = "override"; clan-pytest-with-core> E 1566| inherit priority content; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1567| }; 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/nixos/modules/misc/nixpkgs.nix:107:15: clan-pytest-with-core> E 106| clan-pytest-with-core> E 107| finalPkgs = if opt.pkgs.isDefined then cfg.pkgs.appendOverlays cfg.overlays else defaultPkgs; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 108| clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'pkgs.isDefined' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1154:21: clan-pytest-with-core> E 1153| definitionsWithLocations = res.defsFinal; clan-pytest-with-core> E 1154| inherit (res) isDefined; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1155| inherit (res.checkedAndMerged) valueMeta; clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'isDefined' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1310:5: clan-pytest-with-core> E 1309| clan-pytest-with-core> E 1310| isDefined = defsFinal != [ ]; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1311| clan-pytest-with-core> E clan-pytest-with-core> E (6 duplicate frames omitted) clan-pytest-with-core> E clan-pytest-with-core> E error: attribute 'system' missing clan-pytest-with-core> E at /build/store/nix/store/y3h139bhv4373m1hab367ma4p5i95i2f-source/modules/clan/module.nix:164:24: clan-pytest-with-core> E 163| (lib.modules.importApply ../../nixosModules/machineModules/overridePkgs.nix { clan-pytest-with-core> E 164| pkgs = nixpkgsMatrix.${config.inventory.machines.${name}.nixpkgs}.system.${system}.pkgs; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 165| }) clan-pytest-with-core> E Did you mean systems? 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 0x7fffe632f250> clan-pytest-with-core> flake_with_sops = 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_sops_fix_removes_machine_from_no_deploy_shared_secret( clan-pytest-with-core> monkeypatch: pytest.MonkeyPatch, clan-pytest-with-core> flake_with_sops: ClanFlake, clan-pytest-with-core> ) -> None: clan-pytest-with-core> """Test that 'clan vars fix' removes and commits machine symlink deletion clan-pytest-with-core> for shared secrets where deploy changed from True to False. clan-pytest-with-core> clan-pytest-with-core> This exercises the disallow_member() code path in fix(), verifying that clan-pytest-with-core> the deleted symlink is included in the commit (not left as a dirty clan-pytest-with-core> working tree entry). clan-pytest-with-core> """ clan-pytest-with-core> flake = flake_with_sops clan-pytest-with-core> clan-pytest-with-core> # Step 1: Two machines sharing a generator with deploy=True (default for secret=True) clan-pytest-with-core> m1_config = flake.machines["machine1"] = create_test_machine_config() clan-pytest-with-core> shared_gen = m1_config["clan"]["core"]["vars"]["generators"]["my_shared_gen"] clan-pytest-with-core> shared_gen["share"] = True clan-pytest-with-core> shared_gen["files"]["my_secret"]["secret"] = True clan-pytest-with-core> shared_gen["script"] = 'echo -n secret_value > "$out"/my_secret' clan-pytest-with-core> clan-pytest-with-core> m2_config = flake.machines["machine2"] = create_test_machine_config() clan-pytest-with-core> m2_config["clan"]["core"]["vars"]["generators"]["my_shared_gen"] = shared_gen.copy() clan-pytest-with-core> clan-pytest-with-core> flake.refresh() clan-pytest-with-core> monkeypatch.chdir(flake.path) clan-pytest-with-core> clan-pytest-with-core> # Step 2: Generate secrets — both machines get access (deploy=True) clan-pytest-with-core> > cli.run(["vars", "generate", "--flake", str(flake.path)]) clan-pytest-with-core> clan-pytest-with-core> /build/src/clan_cli/tests/test_vars_shared.py:484: 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/vars/generate.py:33: in generate_command clan-pytest-with-core> run_generators( clan-pytest-with-core> /build/src/clan_lib/vars/generate.py:306: in run_generators clan-pytest-with-core> all_generators = get_generators(machines, full_closure=True) clan-pytest-with-core> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ clan-pytest-with-core> /build/src/clan_lib/vars/generate.py:146: in get_generators clan-pytest-with-core> flake.precache(get_generators_precache_selectors(list(all_machines))) clan-pytest-with-core> /build/src/clan_lib/flake/flake.py:1151: in precache clan-pytest-with-core> self.get_from_nix(not_fetched_selectors) clan-pytest-with-core> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ clan-pytest-with-core> clan-pytest-with-core> self = Flake(identifier='/build/pytest-7riytv3h/flake', hash='sha256-+DzWCeL7VAPKQeDJKJYahikJIMgJVCT92w/TiqKL4AQ=', 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.?secrets.?age.?plugins', 'clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.var...licModule', 'clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.settings.secretModule', ...] 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 while executing:$ clan select 'clanInternals.?secrets.?age.?plugins' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.generators.*.{share,dependencies,prompts,validationHash}' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.generators.*.files.*.{secret,deploy,owner,group,mode,neededFor}' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.?sops.?defaultGroups' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.settings.publicModule' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.settings.secretModule' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.?sops.?secretUploadDirectory' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.?password-store.?passCommand' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.?password-store.?secretLocation' clan-pytest-with-core> E $ clan select 'clanInternals.vars.settings.?recipients' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.?age.?secretLocation' clan-pytest-with-core> E Reason: attribute 'system' missing clan-pytest-with-core> E at /build/store/nix/store/y3h139bhv4373m1hab367ma4p5i95i2f-source/modules/clan/module.nix:164:24: clan-pytest-with-core> E 163| (lib.modules.importApply ../../nixosModules/machineModules/overridePkgs.nix { clan-pytest-with-core> E 164| pkgs = nixpkgsMatrix.${config.inventory.machines.${name}.nixpkgs}.system.${system}.pkgs; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 165| }) clan-pytest-with-core> E Did you mean systems?. 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 setup ----------------------------- clan-pytest-with-core> !! $HOME does not point to a temp directory!! HOME=/build/pytest-7riytv3h clan-pytest-with-core> [localhost] $ clan vars keygen --flake /build/pytest-7riytv3h/flake --user admin --no-interactive clan-pytest-with-core> Caller: /build/src/clan_cli/tests/age_keys.py:31::init clan-pytest-with-core> clan-pytest-with-core> Prefetching flake /build/pytest-7riytv3h/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/febbcab65441be6ccc547560fd0155faadebbbb7 clan-pytest-with-core> (cached) $ clan select clanInternals.inventoryClass.relativeDirectory 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> git \ clan-pytest-with-core> -C /build/pytest-7riytv3h/flake \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-7riytv3h/flake/sops/users/admin 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/admin to git clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-7riytv3h/flake \ clan-pytest-with-core> diff \ clan-pytest-with-core> --cached --exit-code \ clan-pytest-with-core> -- /build/pytest-7riytv3h/flake/sops/users/admin 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-7riytv3h/flake \ clan-pytest-with-core> commit \ clan-pytest-with-core> -m 'secrets: add user admin' \ clan-pytest-with-core> --no-verify /build/pytest-7riytv3h/flake/sops/users/admin 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/admin to git 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/pytest-7riytv3h clan-pytest-with-core> DEBUG clan_cli.tests.helpers.cli:__init__.py:143 $ clan vars keygen --flake /build/pytest-7riytv3h/flake --user admin --no-interactive clan-pytest-with-core> Caller: /build/src/clan_cli/tests/age_keys.py:31::init clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:927 Prefetching flake /build/pytest-7riytv3h/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/febbcab65441be6ccc547560fd0155faadebbbb7 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.cmd:__init__.py:143 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> DEBUG clan_lib.cmd:__init__.py:143 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> DEBUG clan_cli.secrets.sops:sops.py:99 Found age public key from a private key in the environment (SOPS_AGE_KEY): age1dhwqzkah943xzc34tc3dlmfayyevcmdmxzjezdgdy33euxwf59vsp3vk3c clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:143 git \ clan-pytest-with-core> -C /build/pytest-7riytv3h/flake \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-7riytv3h/flake/sops/users/admin 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> DEBUG clan_lib.cmd:__init__.py:143 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> DEBUG clan_lib.git:__init__.py:98 Adding sops/users/admin to git clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:143 git \ clan-pytest-with-core> -C /build/pytest-7riytv3h/flake \ clan-pytest-with-core> diff \ clan-pytest-with-core> --cached --exit-code \ clan-pytest-with-core> -- /build/pytest-7riytv3h/flake/sops/users/admin 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> DEBUG clan_lib.cmd:__init__.py:143 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> DEBUG clan_lib.cmd:__init__.py:143 git \ clan-pytest-with-core> -C /build/pytest-7riytv3h/flake \ clan-pytest-with-core> commit \ clan-pytest-with-core> -m 'secrets: add user admin' \ clan-pytest-with-core> --no-verify /build/pytest-7riytv3h/flake/sops/users/admin 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> DEBUG clan_lib.cmd:__init__.py:143 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> INFO clan_lib.git:__init__.py:141 Committed sops/users/admin to git clan-pytest-with-core> ----------------------------- Captured stdout call ----------------------------- clan-pytest-with-core> [main e9eeb6e] flake: update by flake generator clan-pytest-with-core> 4 files changed, 70 insertions(+) clan-pytest-with-core> create mode 100644 machines/machine1/configuration.json clan-pytest-with-core> create mode 100644 machines/machine1/configuration.nix clan-pytest-with-core> create mode 100644 machines/machine2/configuration.json clan-pytest-with-core> create mode 100644 machines/machine2/configuration.nix clan-pytest-with-core> ----------------------------- Captured stderr call ----------------------------- clan-pytest-with-core> Prefetching flake /build/pytest-7riytv3h/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/d2c0050d97832c3ac5193485b93705d00938c15e clan-pytest-with-core> (cached) $ clan select clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> Prefetching flake /build/pytest-7riytv3h/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/d2c0050d97832c3ac5193485b93705d00938c15e clan-pytest-with-core> (cached) $ clan select clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> [localhost] $ clan vars generate --flake /build/pytest-7riytv3h/flake clan-pytest-with-core> Caller: /build/src/clan_cli/tests/test_vars_shared.py:484::test_sops_fix_removes_machine_from_no_deploy_shared_secret clan-pytest-with-core> clan-pytest-with-core> Prefetching flake /build/pytest-7riytv3h/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/db925d9683d06efc10f48cecd8255abfd691d474 clan-pytest-with-core> (cached) $ clan select clanInternals.cliChecks clan-pytest-with-core> (cached) $ clan select 'clanInternals.inventoryClass.inventorySerialization.{instances,machines,meta}' clan-pytest-with-core> (cached) $ clan select clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> (cached) $ clan select 'clanInternals.inventoryClass.inventorySerialization.{instances,machines,meta}' clan-pytest-with-core> Precaching selectors: clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.machines clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.instances clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.meta clan-pytest-with-core> - (not cached) clanInternals.?secrets.?age.?plugins clan-pytest-with-core> - (cached) clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.generators.*.{share,dependencies,prompts,validationHash} clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.generators.*.files.*.{secret,deploy,owner,group,mode,neededFor} clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.?sops.?defaultGroups clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.settings.publicModule clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.settings.secretModule clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.?sops.?secretUploadDirectory clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.?password-store.?passCommand clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.?password-store.?secretLocation clan-pytest-with-core> - (not cached) clanInternals.vars.settings.?recipients clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.?age.?secretLocation clan-pytest-with-core> ------------------------------ Captured log call ------------------------------- clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:927 Prefetching flake /build/pytest-7riytv3h/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/d2c0050d97832c3ac5193485b93705d00938c15e 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-7riytv3h/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/d2c0050d97832c3ac5193485b93705d00938c15e clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1179 (cached) $ clan select clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> DEBUG clan_cli.tests.helpers.cli:__init__.py:143 $ clan vars generate --flake /build/pytest-7riytv3h/flake clan-pytest-with-core> Caller: /build/src/clan_cli/tests/test_vars_shared.py:484::test_sops_fix_removes_machine_from_no_deploy_shared_secret clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:927 Prefetching flake /build/pytest-7riytv3h/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/db925d9683d06efc10f48cecd8255abfd691d474 clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1179 (cached) $ clan select clanInternals.cliChecks clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1179 (cached) $ clan select 'clanInternals.inventoryClass.inventorySerialization.{instances,machines,meta}' 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:1179 (cached) $ clan select 'clanInternals.inventoryClass.inventorySerialization.{instances,machines,meta}' clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1144 Precaching selectors: clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.machines clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.instances clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.meta clan-pytest-with-core> - (not cached) clanInternals.?secrets.?age.?plugins clan-pytest-with-core> - (cached) clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.generators.*.{share,dependencies,prompts,validationHash} clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.generators.*.files.*.{secret,deploy,owner,group,mode,neededFor} clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.?sops.?defaultGroups clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.settings.publicModule clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.settings.secretModule clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.?sops.?secretUploadDirectory clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.?password-store.?passCommand clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.?password-store.?secretLocation clan-pytest-with-core> - (not cached) clanInternals.vars.settings.?recipients clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.?age.?secretLocation clan-pytest-with-core> _____________________ test_prompt_prefill_on_regeneration ______________________ clan-pytest-with-core> [gw10] linux -- Python 3.14.7 /nix/store/3n4qphl9s728sz8frmpqqrv9b1m87g68-python3-3.14.7/bin/python clan-pytest-with-core> clan-pytest-with-core> monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7fffe627c9b0> clan-pytest-with-core> flake_with_sops = 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("sticky_flake_select") clan-pytest-with-core> def test_prompt_prefill_on_regeneration( clan-pytest-with-core> monkeypatch: pytest.MonkeyPatch, clan-pytest-with-core> flake_with_sops: ClanFlake, clan-pytest-with-core> ) -> None: clan-pytest-with-core> """Test prompt handling: pre-fill, editing, arrow key handling, and auto-accept. clan-pytest-with-core> clan-pytest-with-core> This test covers: clan-pytest-with-core> 1. Pre-filling existing prompts with previous values on regeneration clan-pytest-with-core> 2. Keeping previous values by pressing Enter clan-pytest-with-core> 3. Editing values with backspace (including across newlines in multiline) clan-pytest-with-core> 4. Arrow keys being ignored (not breaking input) clan-pytest-with-core> 5. Auto-accepting existing prompts when running without --regenerate clan-pytest-with-core> clan-pytest-with-core> Test flow: clan-pytest-with-core> - First gen: Enter initial values for prompt1, secret_prompt, multiline_prompt clan-pytest-with-core> - Second gen (--regenerate): Add prompt2, test multiline backspace across newlines clan-pytest-with-core> - Third gen (--regenerate): Test editing prompt1 with backspace clan-pytest-with-core> - Fourth gen (NO --regenerate): Add prompt3, verify auto-accept of existing prompts clan-pytest-with-core> """ clan-pytest-with-core> flake = flake_with_sops clan-pytest-with-core> # Add clan_cli's parent to PYTHONPATH so subprocess can find it clan-pytest-with-core> clan_cli_path = Path(__file__).parent.parent.parent # pkgs/clan-cli clan-pytest-with-core> spawn_env = os.environ.copy() clan-pytest-with-core> spawn_env["PYTHONPATH"] = str(clan_cli_path) clan-pytest-with-core> clan-pytest-with-core> # Configure the machine and generator with one prompt initially clan-pytest-with-core> config = flake.machines["my_machine"] = create_test_machine_config() clan-pytest-with-core> my_generator = config["clan"]["core"]["vars"]["generators"]["my_generator"] clan-pytest-with-core> clan-pytest-with-core> # Configure first prompt - persisted so it can be re-used clan-pytest-with-core> my_generator["prompts"]["10_prompt1"]["description"] = "First prompt" clan-pytest-with-core> my_generator["prompts"]["10_prompt1"]["persist"] = True clan-pytest-with-core> my_generator["prompts"]["10_prompt1"]["type"] = "line" clan-pytest-with-core> my_generator["files"]["10_prompt1"]["secret"] = False clan-pytest-with-core> clan-pytest-with-core> # Configure a secret prompt (starts as single-line hidden) clan-pytest-with-core> my_generator["prompts"]["20_secret_prompt"]["description"] = "Secret value" clan-pytest-with-core> my_generator["prompts"]["20_secret_prompt"]["persist"] = True clan-pytest-with-core> my_generator["prompts"]["20_secret_prompt"]["type"] = "hidden" clan-pytest-with-core> my_generator["files"]["20_secret_prompt"]["secret"] = True clan-pytest-with-core> clan-pytest-with-core> # Configure a multiline prompt for testing backspace across newlines clan-pytest-with-core> my_generator["prompts"]["30_multiline_prompt"]["description"] = "Multiline input" clan-pytest-with-core> my_generator["prompts"]["30_multiline_prompt"]["persist"] = True clan-pytest-with-core> my_generator["prompts"]["30_multiline_prompt"]["type"] = "multiline" clan-pytest-with-core> my_generator["files"]["30_multiline_prompt"]["secret"] = False clan-pytest-with-core> clan-pytest-with-core> flake.refresh() clan-pytest-with-core> monkeypatch.chdir(flake.path) clan-pytest-with-core> clan-pytest-with-core> # First generation: provide initial values clan-pytest-with-core> child = pexpect.spawn( clan-pytest-with-core> sys.executable, clan-pytest-with-core> [ clan-pytest-with-core> "-m", clan-pytest-with-core> "clan_cli", clan-pytest-with-core> "vars", clan-pytest-with-core> "generate", clan-pytest-with-core> "--flake", clan-pytest-with-core> str(flake.path), clan-pytest-with-core> "my_machine", clan-pytest-with-core> ], clan-pytest-with-core> timeout=120, clan-pytest-with-core> encoding="utf-8", clan-pytest-with-core> env=spawn_env, clan-pytest-with-core> ) clan-pytest-with-core> > child.expect("First prompt:") clan-pytest-with-core> clan-pytest-with-core> /build/src/clan_cli/tests/test_vars_prompts.py:191: clan-pytest-with-core> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ clan-pytest-with-core> /nix/store/vb2r4qcfsaiwlazpandq6vkn01k0srl9-python3-3.14.7-env/lib/python3.14/site-packages/pexpect/spawnbase.py:354: in expect clan-pytest-with-core> return self.expect_list(compiled_pattern_list, clan-pytest-with-core> /nix/store/vb2r4qcfsaiwlazpandq6vkn01k0srl9-python3-3.14.7-env/lib/python3.14/site-packages/pexpect/spawnbase.py:383: in expect_list clan-pytest-with-core> return exp.expect_loop(timeout) clan-pytest-with-core> ^^^^^^^^^^^^^^^^^^^^^^^^ clan-pytest-with-core> /nix/store/vb2r4qcfsaiwlazpandq6vkn01k0srl9-python3-3.14.7-env/lib/python3.14/site-packages/pexpect/expect.py:179: in expect_loop clan-pytest-with-core> return self.eof(e) clan-pytest-with-core> ^^^^^^^^^^^ clan-pytest-with-core> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ clan-pytest-with-core> clan-pytest-with-core> self = clan-pytest-with-core> err = EOF('End Of File (EOF). Exception style platform.') clan-pytest-with-core> clan-pytest-with-core> def eof(self, err=None): clan-pytest-with-core> spawn = self.spawn clan-pytest-with-core> clan-pytest-with-core> spawn.before = spawn._before.getvalue() clan-pytest-with-core> spawn._buffer = spawn.buffer_type() clan-pytest-with-core> spawn._before = spawn.buffer_type() clan-pytest-with-core> spawn.after = EOF clan-pytest-with-core> index = self.searcher.eof_index clan-pytest-with-core> if index >= 0: clan-pytest-with-core> spawn.match = EOF clan-pytest-with-core> spawn.match_index = index clan-pytest-with-core> return index clan-pytest-with-core> else: clan-pytest-with-core> spawn.match = None clan-pytest-with-core> spawn.match_index = None clan-pytest-with-core> msg = str(spawn) clan-pytest-with-core> msg += '\nsearcher: %s' % self.searcher clan-pytest-with-core> if err is not None: clan-pytest-with-core> msg = str(err) + '\n' + msg clan-pytest-with-core> clan-pytest-with-core> exc = EOF(msg) clan-pytest-with-core> exc.__cause__ = None # in Python 3.x we can use "raise exc from None" clan-pytest-with-core> > raise exc clan-pytest-with-core> E pexpect.exceptions.EOF: End Of File (EOF). Exception style platform. clan-pytest-with-core> E clan-pytest-with-core> E command: /nix/store/3n4qphl9s728sz8frmpqqrv9b1m87g68-python3-3.14.7/bin/python clan-pytest-with-core> E args: [b'/nix/store/3n4qphl9s728sz8frmpqqrv9b1m87g68-python3-3.14.7/bin/python', b'-m', b'clan_cli', b'vars', b'generate', b'--flake', b'/build/pytest-5o2sqmwp/flake', b'my_machine'] clan-pytest-with-core> E buffer (last 100 chars): '' clan-pytest-with-core> E before (last 100 chars): "165| })\r\n Did you mean systems?. Use flag '--debug' to see full nix trace.\x1b[0m\r\n" clan-pytest-with-core> E after: clan-pytest-with-core> E match: None clan-pytest-with-core> E match_index: None clan-pytest-with-core> E exitstatus: None clan-pytest-with-core> E flag_eof: True clan-pytest-with-core> E pid: 8520 clan-pytest-with-core> E child_fd: 15 clan-pytest-with-core> E closed: False clan-pytest-with-core> E timeout: 120 clan-pytest-with-core> E delimiter: clan-pytest-with-core> E logfile: None clan-pytest-with-core> E logfile_read: None clan-pytest-with-core> E logfile_send: None clan-pytest-with-core> E maxread: 2000 clan-pytest-with-core> E ignorecase: False clan-pytest-with-core> E searchwindowsize: None clan-pytest-with-core> E delaybeforesend: 0.05 clan-pytest-with-core> E delayafterclose: 0.1 clan-pytest-with-core> E delayafterterminate: 0.1 clan-pytest-with-core> E searcher: searcher_re: clan-pytest-with-core> E 0: re.compile('First prompt:') clan-pytest-with-core> clan-pytest-with-core> /nix/store/vb2r4qcfsaiwlazpandq6vkn01k0srl9-python3-3.14.7-env/lib/python3.14/site-packages/pexpect/expect.py:122: EOF clan-pytest-with-core> ---------------------------- Captured stderr setup ----------------------------- clan-pytest-with-core> !! $HOME does not point to a temp directory!! HOME=/build/pytest-5o2sqmwp clan-pytest-with-core> [localhost] $ clan vars keygen --flake /build/pytest-5o2sqmwp/flake --user admin --no-interactive clan-pytest-with-core> Caller: /build/src/clan_cli/tests/age_keys.py:31::init clan-pytest-with-core> clan-pytest-with-core> Prefetching flake /build/pytest-5o2sqmwp/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/febbcab65441be6ccc547560fd0155faadebbbb7 clan-pytest-with-core> (cached) $ clan select clanInternals.inventoryClass.relativeDirectory 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> git \ clan-pytest-with-core> -C /build/pytest-5o2sqmwp/flake \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-5o2sqmwp/flake/sops/users/admin 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/admin to git clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-5o2sqmwp/flake \ clan-pytest-with-core> diff \ clan-pytest-with-core> --cached --exit-code \ clan-pytest-with-core> -- /build/pytest-5o2sqmwp/flake/sops/users/admin 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-5o2sqmwp/flake \ clan-pytest-with-core> commit \ clan-pytest-with-core> -m 'secrets: add user admin' \ clan-pytest-with-core> --no-verify /build/pytest-5o2sqmwp/flake/sops/users/admin 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/admin to git 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/pytest-5o2sqmwp clan-pytest-with-core> DEBUG clan_cli.tests.helpers.cli:__init__.py:143 $ clan vars keygen --flake /build/pytest-5o2sqmwp/flake --user admin --no-interactive clan-pytest-with-core> Caller: /build/src/clan_cli/tests/age_keys.py:31::init clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:927 Prefetching flake /build/pytest-5o2sqmwp/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/febbcab65441be6ccc547560fd0155faadebbbb7 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.cmd:__init__.py:143 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> DEBUG clan_lib.cmd:__init__.py:143 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> DEBUG clan_cli.secrets.sops:sops.py:99 Found age public key from a private key in the environment (SOPS_AGE_KEY): age1dhwqzkah943xzc34tc3dlmfayyevcmdmxzjezdgdy33euxwf59vsp3vk3c clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:143 git \ clan-pytest-with-core> -C /build/pytest-5o2sqmwp/flake \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-5o2sqmwp/flake/sops/users/admin 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> DEBUG clan_lib.cmd:__init__.py:143 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> DEBUG clan_lib.git:__init__.py:98 Adding sops/users/admin to git clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:143 git \ clan-pytest-with-core> -C /build/pytest-5o2sqmwp/flake \ clan-pytest-with-core> diff \ clan-pytest-with-core> --cached --exit-code \ clan-pytest-with-core> -- /build/pytest-5o2sqmwp/flake/sops/users/admin 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> DEBUG clan_lib.cmd:__init__.py:143 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> DEBUG clan_lib.cmd:__init__.py:143 git \ clan-pytest-with-core> -C /build/pytest-5o2sqmwp/flake \ clan-pytest-with-core> commit \ clan-pytest-with-core> -m 'secrets: add user admin' \ clan-pytest-with-core> --no-verify /build/pytest-5o2sqmwp/flake/sops/users/admin 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> DEBUG clan_lib.cmd:__init__.py:143 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> INFO clan_lib.git:__init__.py:141 Committed sops/users/admin to git clan-pytest-with-core> ----------------------------- Captured stdout call ----------------------------- clan-pytest-with-core> [main 544b566] flake: update by flake generator clan-pytest-with-core> 2 files changed, 56 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> ----------------------------- Captured stderr call ----------------------------- clan-pytest-with-core> Prefetching flake /build/pytest-5o2sqmwp/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/d2c0050d97832c3ac5193485b93705d00938c15e clan-pytest-with-core> ------------------------------ Captured log call ------------------------------- clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:927 Prefetching flake /build/pytest-5o2sqmwp/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/d2c0050d97832c3ac5193485b93705d00938c15e clan-pytest-with-core> ________________________ test_import_survives_generate _________________________ clan-pytest-with-core> [gw11] linux -- Python 3.14.7 /nix/store/3n4qphl9s728sz8frmpqqrv9b1m87g68-python3-3.14.7/bin/python clan-pytest-with-core> clan-pytest-with-core> self = Flake(identifier='/build/pytest-gk6_dehp/flake', hash='sha256-NDf0I2TCHJ2eeUXrAVgC2gF8cyTotzKdvD7DDkxQ5fE=', 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.?secrets.?age.?plugins', 'clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.var...licModule', 'clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.settings.secretModule', ...] 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-gk6_dehp/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/wzd645gd779phnphn72ia8fa0blblr9j-source?narHash=sha256-NDf0I2TCHJ2eeUXrAVgC2gF8cyTotzKdvD7DDkxQ5fE="; 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": "maybe", "value": "secrets"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "plugins"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "share"}, {"type": "str", "value": "dependencies"}, {"type": "str", "value": "prompts"}, {"type": "str", "value": "validationHash"}]}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "str", "value": "files"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "secret"}, {"type": "str", "value": "deploy"}, {"type": "str", "value": "owner"}, {"type": "str", "value": "group"}, {"type": "str", "value": "mode"}, {"type": "str", "value": "neededFor"}]}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "defaultGroups"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "publicModule"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "secretModule"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "secretUploadDirectory"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "passCommand"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "secretLocation"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "maybe", "value": "recipients"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "secretLocation"}]'"'"''"'"') 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": "maybe", "value": "secrets"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "plugins"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "share"}, {"type": "str", "value": "dependencies"}, {"type": "str", "value": "prompts"}, {"type": "str", "value": "validationHash"}]}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "str", "value": "files"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "secret"}, {"type": "str", "value": "deploy"}, {"type": "str", "value": "owner"}, {"type": "str", "value": "group"}, {"type": "str", "value": "mode"}, {"type": "str", "value": "neededFor"}]}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "defaultGroups"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "publicModule"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "secretModule"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "secretUploadDirectory"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "passCommand"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "secretLocation"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "maybe", "value": "recipients"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "secretLocation"}]'') 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": "maybe", "value": "secrets"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "plugins"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "share"}, {"type": "str", "value": "dependencies"}, {"type": "str", "value": "prompts"}, {"type": "str", "value": "validationHash"}]}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "str", "value": "files"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "secret"}, {"type": "str", "value": "deploy"}, {"type": "str", "value": "owner"}, {"type": "str", "value": "group"}, {"type": "str", "value": "mode"}, {"type": "str", "value": "neededFor"}]}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "defaultGroups"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "publicModule"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "secretModule"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "secretUploadDirectory"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "passCommand"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "secretLocation"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "maybe", "value": "recipients"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "secretLocation"}]'') flake) clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating list element at index 1 clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating attribute 'machine1' clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/cba1x9mxnwr8b36cw41bya7g6d5v1p7d-source/select.nix:325:37: clan-pytest-with-core> E 324| in clan-pytest-with-core> E 325| builtins.mapAttrs (_: v: recurse selectors (idx + 1) v) filteredAttrs clan-pytest-with-core> E | ^ clan-pytest-with-core> E 326| else if selector.type == "maybe" then 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:325:40: clan-pytest-with-core> E 324| in clan-pytest-with-core> E 325| builtins.mapAttrs (_: v: recurse selectors (idx + 1) v) filteredAttrs clan-pytest-with-core> E | ^ clan-pytest-with-core> E 326| else if selector.type == "maybe" then 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 … from call site clan-pytest-with-core> E at /build/store/nix/store/cba1x9mxnwr8b36cw41bya7g6d5v1p7d-source/select.nix:312:15: clan-pytest-with-core> E 311| else if selector.type == "str" then clan-pytest-with-core> E 312| recurse selectors (idx + 1) (builtins.getAttr selector.value obj) clan-pytest-with-core> E | ^ clan-pytest-with-core> E 313| else if selector.type == "set" then 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 'getAttr' builtin clan-pytest-with-core> E at /build/store/nix/store/cba1x9mxnwr8b36cw41bya7g6d5v1p7d-source/select.nix:312:44: clan-pytest-with-core> E 311| else if selector.type == "str" then clan-pytest-with-core> E 312| recurse selectors (idx + 1) (builtins.getAttr selector.value obj) clan-pytest-with-core> E | ^ clan-pytest-with-core> E 313| else if selector.type == "set" then clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'seq' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:401:18: clan-pytest-with-core> E 400| options = checked options; clan-pytest-with-core> E 401| config = checked (removeAttrs config [ "_module" ]); clan-pytest-with-core> E | ^ clan-pytest-with-core> E 402| _module = checked (config._module); 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:304:9: clan-pytest-with-core> E 303| checkUnmatched = clan-pytest-with-core> E 304| if config._module.check && config._module.freeformType == null && merged.unmatchedDefns != [ ] then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 305| let clan-pytest-with-core> E clan-pytest-with-core> E … in the right operand of the AND (&&) operator clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:304:72: clan-pytest-with-core> E 303| checkUnmatched = clan-pytest-with-core> E 304| if config._module.check && config._module.freeformType == null && merged.unmatchedDefns != [ ] then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 305| let clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'unmatchedDefns' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:940:7: clan-pytest-with-core> E 939| # Transforms unmatchedDefnsByName into a list of definitions clan-pytest-with-core> E 940| unmatchedDefns = clan-pytest-with-core> E | ^ clan-pytest-with-core> E 941| if configs == [ ] then clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'concatLists' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:946:11: clan-pytest-with-core> E 945| else clan-pytest-with-core> E 946| concatLists ( clan-pytest-with-core> E | ^ clan-pytest-with-core> E 947| mapAttrsToList ( clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:948:21: clan-pytest-with-core> E 947| mapAttrsToList ( clan-pytest-with-core> E 948| name: defs: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 949| map ( clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'map' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:949:15: clan-pytest-with-core> E 948| name: defs: clan-pytest-with-core> E 949| map ( clan-pytest-with-core> E | ^ clan-pytest-with-core> E 950| def: clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:932:22: clan-pytest-with-core> E 931| # Propagate all unmatched definitions from nested option sets clan-pytest-with-core> E 932| mapAttrs (n: v: v.unmatchedDefns) resultsByName clan-pytest-with-core> E | ^ clan-pytest-with-core> E 933| # Plus the definitions for the current prefix that don't have a matching option clan-pytest-with-core> E clan-pytest-with-core> E (10 duplicate frames omitted) clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:932:25: clan-pytest-with-core> E 931| # Propagate all unmatched definitions from nested option sets clan-pytest-with-core> E 932| mapAttrs (n: v: v.unmatchedDefns) resultsByName clan-pytest-with-core> E | ^ clan-pytest-with-core> E 933| # Plus the definitions for the current prefix that don't have a matching option clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:876:15: clan-pytest-with-core> E 875| resultsByName = mapAttrs ( clan-pytest-with-core> E 876| name: decls: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 877| # We're descending into attribute ‘name’. 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:888:9: clan-pytest-with-core> E 887| in clan-pytest-with-core> E 888| if length optionDecls == length decls then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 889| let clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'length' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:888:12: clan-pytest-with-core> E 887| in clan-pytest-with-core> E 888| if length optionDecls == length decls then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 889| let clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'filter' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:882:25: clan-pytest-with-core> E 881| defns' = rawDefinitionsByName.${name} or [ ]; clan-pytest-with-core> E 882| optionDecls = filter ( clan-pytest-with-core> E | ^ clan-pytest-with-core> E 883| m: clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:883:13: clan-pytest-with-core> E 882| optionDecls = filter ( clan-pytest-with-core> E 883| m: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 884| m.options ? _type clan-pytest-with-core> E clan-pytest-with-core> E … in the left operand of the AND (&&) operator clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:885:13: clan-pytest-with-core> E 884| m.options ? _type clan-pytest-with-core> E 885| && (m.options._type == "option" || throwDeclarationTypeError loc m.options._type m._file) clan-pytest-with-core> E | ^ clan-pytest-with-core> E 886| ) decls; clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'options' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:807:15: clan-pytest-with-core> E 806| pos = unsafeGetAttrPos n subtree; clan-pytest-with-core> E 807| options = option; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 808| }) subtree clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:289:73: clan-pytest-with-core> E 288| len = length attrPath; clan-pytest-with-core> E 289| atDepth = n: if n == len then value else { ${elemAt attrPath n} = atDepth (n + 1); }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 290| in clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'atDepth' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:289:17: clan-pytest-with-core> E 288| len = length attrPath; clan-pytest-with-core> E 289| atDepth = n: if n == len then value else { ${elemAt attrPath n} = atDepth (n + 1); }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 290| in clan-pytest-with-core> E clan-pytest-with-core> E … in the right operand of the update (//) operator clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:2047:9: clan-pytest-with-core> E 2046| } clan-pytest-with-core> E 2047| // optionalAttrs (toType != null) { clan-pytest-with-core> E | ^ clan-pytest-with-core> E 2048| type = toType; clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:2047:12: clan-pytest-with-core> E 2046| } clan-pytest-with-core> E 2047| // optionalAttrs (toType != null) { clan-pytest-with-core> E | ^ clan-pytest-with-core> E 2048| type = toType; clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'optionalAttrs' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:1492:25: clan-pytest-with-core> E 1491| */ clan-pytest-with-core> E 1492| optionalAttrs = cond: as: if cond then as else { }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1493| 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:1492:29: clan-pytest-with-core> E 1491| */ clan-pytest-with-core> E 1492| optionalAttrs = cond: as: if cond then as else { }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1493| clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:2036:17: clan-pytest-with-core> E 2035| let clan-pytest-with-core> E 2036| opt = attrByPath to { } options; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 2037| in clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'attrByPath' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:89:24: clan-pytest-with-core> E 88| attrByPath = clan-pytest-with-core> E 89| attrPath: default: set: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 90| let clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:106:5: clan-pytest-with-core> E 105| in clan-pytest-with-core> E 106| attrByPath' 0 set; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 107| clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'attrByPath'' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:93:12: clan-pytest-with-core> E 92| attrByPath' = clan-pytest-with-core> E 93| n: s: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 94| ( clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:102:35: clan-pytest-with-core> E 101| in clan-pytest-with-core> E 102| if s ? ${attr} then attrByPath' (n + 1) s.${attr} else default clan-pytest-with-core> E | ^ clan-pytest-with-core> E 103| ) clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'attrByPath'' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:93:12: clan-pytest-with-core> E 92| attrByPath' = clan-pytest-with-core> E 93| n: s: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 94| ( clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:102:35: clan-pytest-with-core> E 101| in clan-pytest-with-core> E 102| if s ? ${attr} then attrByPath' (n + 1) s.${attr} else default clan-pytest-with-core> E | ^ clan-pytest-with-core> E 103| ) clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'attrByPath'' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:93:12: clan-pytest-with-core> E 92| attrByPath' = clan-pytest-with-core> E 93| n: s: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 94| ( clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:102:35: clan-pytest-with-core> E 101| in clan-pytest-with-core> E 102| if s ? ${attr} then attrByPath' (n + 1) s.${attr} else default clan-pytest-with-core> E | ^ clan-pytest-with-core> E 103| ) clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'attrByPath'' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:93:12: clan-pytest-with-core> E 92| attrByPath' = clan-pytest-with-core> E 93| n: s: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 94| ( clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:102:55: clan-pytest-with-core> E 101| in clan-pytest-with-core> E 102| if s ? ${attr} then attrByPath' (n + 1) s.${attr} else default clan-pytest-with-core> E | ^ clan-pytest-with-core> E 103| ) clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:927:37: clan-pytest-with-core> E 926| clan-pytest-with-core> E 927| matchedOptions = mapAttrs (n: v: v.matchedOptions) resultsByName; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 928| clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'matchedOptions' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:893:13: clan-pytest-with-core> E 892| { clan-pytest-with-core> E 893| matchedOptions = evalOptionValue loc opt defns'; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 894| unmatchedDefns = [ ]; clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:893:30: clan-pytest-with-core> E 892| { clan-pytest-with-core> E 893| matchedOptions = evalOptionValue loc opt defns'; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 894| unmatchedDefns = [ ]; clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'evalOptionValue' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1103:15: clan-pytest-with-core> E 1102| evalOptionValue = clan-pytest-with-core> E 1103| loc: opt: defs: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1104| let clan-pytest-with-core> E clan-pytest-with-core> E … in the left operand of the update (//) operator clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1148:5: clan-pytest-with-core> E 1147| warnDeprecation opt clan-pytest-with-core> E 1148| // { clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1149| value = addErrorContext "while evaluating the option `${showOption loc}':" value; 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1141:9: clan-pytest-with-core> E 1140| warnDeprecation = clan-pytest-with-core> E 1141| if (opt.type.deprecationMessage != null) then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1142| warn "The type `types.${opt.type.name}' of option `${showOption loc}' defined in ${showFiles opt.declarations} is deprecated. ${opt.type.deprecationMessage}" clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:890:19: clan-pytest-with-core> E 889| let clan-pytest-with-core> E 890| opt = fixupOptionType loc (mergeOptionDecls loc decls); clan-pytest-with-core> E | ^ clan-pytest-with-core> E 891| in clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'fixupOptionType' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1473:10: clan-pytest-with-core> E 1472| fixupOptionType = clan-pytest-with-core> E 1473| loc: opt: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1474| if opt.type.getSubModules or null == null then 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1474:5: clan-pytest-with-core> E 1473| loc: opt: clan-pytest-with-core> E 1474| if opt.type.getSubModules or null == null then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1475| opt // { type = opt.type or types.unspecified; } clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'type.getSubModules' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/nixos/modules/services/hardware/bluetooth.nix:72:9: clan-pytest-with-core> E 71| settings = mkOption { clan-pytest-with-core> E 72| type = cfgFmt.type; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 73| default = { }; clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/nixos/modules/services/hardware/bluetooth.nix:26:12: clan-pytest-with-core> E 25| clan-pytest-with-core> E 26| cfgFmt = pkgs.formats.ini { }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 27| clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:727:15: clan-pytest-with-core> E 726| extraArgs = mapAttrs ( clan-pytest-with-core> E 727| name: _: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 728| addErrorContext (context name) ( clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the module argument `pkgs' in "/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/nixos/modules/services/hardware/bluetooth.nix": clan-pytest-with-core> E clan-pytest-with-core> E … noting that argument `pkgs` is not externally provided, so querying `_module.args` instead, requiring `config` clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:731:13: clan-pytest-with-core> E 730| "noting that argument `${name}` is not externally provided, so querying `_module.args` instead, requiring `config`" clan-pytest-with-core> E 731| config._module.args.${name} clan-pytest-with-core> E | ^ clan-pytest-with-core> E 732| ) clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/types.nix:1029:18: clan-pytest-with-core> E 1028| value = mapAttrs ( clan-pytest-with-core> E 1029| n: v: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1030| if lazy then clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'optionalValue.value' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1312:5: clan-pytest-with-core> E 1311| clan-pytest-with-core> E 1312| optionalValue = if isDefined then { value = mergedValue; } else { }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1313| }; 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1312:21: clan-pytest-with-core> E 1311| clan-pytest-with-core> E 1312| optionalValue = if isDefined then { value = mergedValue; } else { }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1313| }; clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'values' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1240:11: clan-pytest-with-core> E 1239| { clan-pytest-with-core> E 1240| values = defsSorted; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1241| inherit (defsFiltered) highestPrio; 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1211:11: clan-pytest-with-core> E 1210| # Avoid sorting if we don't have to. clan-pytest-with-core> E 1211| if any (def: def.value._type or "" == "order") defsFiltered.values then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1212| sortProperties defsFiltered.values clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'any' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1211:14: clan-pytest-with-core> E 1210| # Avoid sorting if we don't have to. clan-pytest-with-core> E 1211| if any (def: def.value._type or "" == "order") defsFiltered.values then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1212| sortProperties defsFiltered.values clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1211:19: clan-pytest-with-core> E 1210| # Avoid sorting if we don't have to. clan-pytest-with-core> E 1211| if any (def: def.value._type or "" == "order") defsFiltered.values then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1212| sortProperties defsFiltered.values clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'value._type' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1422:67: clan-pytest-with-core> E 1421| strip = clan-pytest-with-core> E 1422| def: if def.value._type or "" == "override" then def // { value = def.value.content; } else def; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1423| in clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'value.content' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1566:22: clan-pytest-with-core> E 1565| _type = "override"; clan-pytest-with-core> E 1566| inherit priority content; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1567| }; 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/nixos/modules/misc/nixpkgs.nix:107:15: clan-pytest-with-core> E 106| clan-pytest-with-core> E 107| finalPkgs = if opt.pkgs.isDefined then cfg.pkgs.appendOverlays cfg.overlays else defaultPkgs; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 108| clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'pkgs.isDefined' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1154:21: clan-pytest-with-core> E 1153| definitionsWithLocations = res.defsFinal; clan-pytest-with-core> E 1154| inherit (res) isDefined; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1155| inherit (res.checkedAndMerged) valueMeta; clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'isDefined' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1310:5: clan-pytest-with-core> E 1309| clan-pytest-with-core> E 1310| isDefined = defsFinal != [ ]; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1311| clan-pytest-with-core> E clan-pytest-with-core> E (6 duplicate frames omitted) clan-pytest-with-core> E clan-pytest-with-core> E error: attribute 'system' missing clan-pytest-with-core> E at /build/store/nix/store/y3h139bhv4373m1hab367ma4p5i95i2f-source/modules/clan/module.nix:164:24: clan-pytest-with-core> E 163| (lib.modules.importApply ../../nixosModules/machineModules/overridePkgs.nix { clan-pytest-with-core> E 164| pkgs = nixpkgsMatrix.${config.inventory.machines.${name}.nixpkgs}.system.${system}.pkgs; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 165| }) clan-pytest-with-core> E Did you mean systems? 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 0x7fffe5abcf50> clan-pytest-with-core> flake_with_sops = clan-pytest-with-core> tmp_path = PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw11/test_import_survives_generate0') 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_import_survives_generate( clan-pytest-with-core> monkeypatch: pytest.MonkeyPatch, clan-pytest-with-core> flake_with_sops: ClanFlake, clan-pytest-with-core> tmp_path: Path, clan-pytest-with-core> ) -> None: clan-pytest-with-core> """Restoring a dump into a clan without vars state must survive 'vars generate'. clan-pytest-with-core> clan-pytest-with-core> The dump carries each generator's validation hash; without it every clan-pytest-with-core> generator counts as outdated and regeneration overwrites the import. clan-pytest-with-core> """ clan-pytest-with-core> flake = flake_with_sops clan-pytest-with-core> _setup_machines_with_backend(flake, "sops") clan-pytest-with-core> flake.refresh() clan-pytest-with-core> monkeypatch.chdir(flake.path) clan-pytest-with-core> > cli.run(["vars", "generate", "--flake", str(flake.path)]) clan-pytest-with-core> clan-pytest-with-core> /build/src/clan_cli/tests/test_vars_shared.py:1067: 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/vars/generate.py:33: in generate_command clan-pytest-with-core> run_generators( clan-pytest-with-core> /build/src/clan_lib/vars/generate.py:306: in run_generators clan-pytest-with-core> all_generators = get_generators(machines, full_closure=True) clan-pytest-with-core> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ clan-pytest-with-core> /build/src/clan_lib/vars/generate.py:146: in get_generators clan-pytest-with-core> flake.precache(get_generators_precache_selectors(list(all_machines))) clan-pytest-with-core> /build/src/clan_lib/flake/flake.py:1151: in precache clan-pytest-with-core> self.get_from_nix(not_fetched_selectors) clan-pytest-with-core> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ clan-pytest-with-core> clan-pytest-with-core> self = Flake(identifier='/build/pytest-gk6_dehp/flake', hash='sha256-NDf0I2TCHJ2eeUXrAVgC2gF8cyTotzKdvD7DDkxQ5fE=', 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.?secrets.?age.?plugins', 'clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.var...licModule', 'clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.settings.secretModule', ...] 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 while executing:$ clan select 'clanInternals.?secrets.?age.?plugins' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.generators.*.{share,dependencies,prompts,validationHash}' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.generators.*.files.*.{secret,deploy,owner,group,mode,neededFor}' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.?sops.?defaultGroups' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.settings.publicModule' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.settings.secretModule' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.?sops.?secretUploadDirectory' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.?password-store.?passCommand' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.?password-store.?secretLocation' clan-pytest-with-core> E $ clan select 'clanInternals.vars.settings.?recipients' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.?age.?secretLocation' clan-pytest-with-core> E Reason: attribute 'system' missing clan-pytest-with-core> E at /build/store/nix/store/y3h139bhv4373m1hab367ma4p5i95i2f-source/modules/clan/module.nix:164:24: clan-pytest-with-core> E 163| (lib.modules.importApply ../../nixosModules/machineModules/overridePkgs.nix { clan-pytest-with-core> E 164| pkgs = nixpkgsMatrix.${config.inventory.machines.${name}.nixpkgs}.system.${system}.pkgs; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 165| }) clan-pytest-with-core> E Did you mean systems?. 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 setup ----------------------------- clan-pytest-with-core> !! $HOME does not point to a temp directory!! HOME=/build/pytest-gk6_dehp clan-pytest-with-core> [localhost] $ clan vars keygen --flake /build/pytest-gk6_dehp/flake --user admin --no-interactive clan-pytest-with-core> Caller: /build/src/clan_cli/tests/age_keys.py:31::init clan-pytest-with-core> clan-pytest-with-core> Prefetching flake /build/pytest-gk6_dehp/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/febbcab65441be6ccc547560fd0155faadebbbb7 clan-pytest-with-core> (cached) $ clan select clanInternals.inventoryClass.relativeDirectory 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> git \ clan-pytest-with-core> -C /build/pytest-gk6_dehp/flake \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-gk6_dehp/flake/sops/users/admin 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/admin to git clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-gk6_dehp/flake \ clan-pytest-with-core> diff \ clan-pytest-with-core> --cached --exit-code \ clan-pytest-with-core> -- /build/pytest-gk6_dehp/flake/sops/users/admin 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-gk6_dehp/flake \ clan-pytest-with-core> commit \ clan-pytest-with-core> -m 'secrets: add user admin' \ clan-pytest-with-core> --no-verify /build/pytest-gk6_dehp/flake/sops/users/admin 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/admin to git 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/pytest-gk6_dehp clan-pytest-with-core> DEBUG clan_cli.tests.helpers.cli:__init__.py:143 $ clan vars keygen --flake /build/pytest-gk6_dehp/flake --user admin --no-interactive clan-pytest-with-core> Caller: /build/src/clan_cli/tests/age_keys.py:31::init clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:927 Prefetching flake /build/pytest-gk6_dehp/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/febbcab65441be6ccc547560fd0155faadebbbb7 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.cmd:__init__.py:143 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> DEBUG clan_lib.cmd:__init__.py:143 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> DEBUG clan_cli.secrets.sops:sops.py:99 Found age public key from a private key in the environment (SOPS_AGE_KEY): age1dhwqzkah943xzc34tc3dlmfayyevcmdmxzjezdgdy33euxwf59vsp3vk3c clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:143 git \ clan-pytest-with-core> -C /build/pytest-gk6_dehp/flake \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-gk6_dehp/flake/sops/users/admin 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> DEBUG clan_lib.cmd:__init__.py:143 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> DEBUG clan_lib.git:__init__.py:98 Adding sops/users/admin to git clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:143 git \ clan-pytest-with-core> -C /build/pytest-gk6_dehp/flake \ clan-pytest-with-core> diff \ clan-pytest-with-core> --cached --exit-code \ clan-pytest-with-core> -- /build/pytest-gk6_dehp/flake/sops/users/admin 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> DEBUG clan_lib.cmd:__init__.py:143 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> DEBUG clan_lib.cmd:__init__.py:143 git \ clan-pytest-with-core> -C /build/pytest-gk6_dehp/flake \ clan-pytest-with-core> commit \ clan-pytest-with-core> -m 'secrets: add user admin' \ clan-pytest-with-core> --no-verify /build/pytest-gk6_dehp/flake/sops/users/admin 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> DEBUG clan_lib.cmd:__init__.py:143 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> INFO clan_lib.git:__init__.py:141 Committed sops/users/admin to git clan-pytest-with-core> ----------------------------- Captured stdout call ----------------------------- clan-pytest-with-core> [main 4e495d2] flake: update by flake generator clan-pytest-with-core> 4 files changed, 108 insertions(+) clan-pytest-with-core> create mode 100644 machines/machine1/configuration.json clan-pytest-with-core> create mode 100644 machines/machine1/configuration.nix clan-pytest-with-core> create mode 100644 machines/machine2/configuration.json clan-pytest-with-core> create mode 100644 machines/machine2/configuration.nix clan-pytest-with-core> ----------------------------- Captured stderr call ----------------------------- clan-pytest-with-core> Prefetching flake /build/pytest-gk6_dehp/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/d2c0050d97832c3ac5193485b93705d00938c15e clan-pytest-with-core> (cached) $ clan select clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> Prefetching flake /build/pytest-gk6_dehp/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/d2c0050d97832c3ac5193485b93705d00938c15e clan-pytest-with-core> (cached) $ clan select clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> [localhost] $ clan vars generate --flake /build/pytest-gk6_dehp/flake clan-pytest-with-core> Caller: /build/src/clan_cli/tests/test_vars_shared.py:1067::test_import_survives_generate clan-pytest-with-core> clan-pytest-with-core> Prefetching flake /build/pytest-gk6_dehp/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.cliChecks clan-pytest-with-core> Cache miss for clanInternals.inventoryClass.inventorySerialization.{instances,machines,meta} clan-pytest-with-core> Loading flake cache from file /build/clan-flake-cache/flakes-v2/f4841257f3a2d0956d6cee1010a159c46d904faf clan-pytest-with-core> Cache miss for clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> Loading flake cache from file /build/clan-flake-cache/flakes-v2/f4841257f3a2d0956d6cee1010a159c46d904faf clan-pytest-with-core> (cached) $ clan select 'clanInternals.inventoryClass.inventorySerialization.{instances,machines,meta}' clan-pytest-with-core> Precaching selectors: clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.machines clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.instances clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.meta clan-pytest-with-core> - (not cached) clanInternals.?secrets.?age.?plugins clan-pytest-with-core> - (cached) clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.generators.*.{share,dependencies,prompts,validationHash} clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.generators.*.files.*.{secret,deploy,owner,group,mode,neededFor} clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.?sops.?defaultGroups clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.settings.publicModule clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.settings.secretModule clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.?sops.?secretUploadDirectory clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.?password-store.?passCommand clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.?password-store.?secretLocation clan-pytest-with-core> - (not cached) clanInternals.vars.settings.?recipients clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.?age.?secretLocation clan-pytest-with-core> ------------------------------ Captured log call ------------------------------- clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:927 Prefetching flake /build/pytest-gk6_dehp/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/d2c0050d97832c3ac5193485b93705d00938c15e 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-gk6_dehp/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/d2c0050d97832c3ac5193485b93705d00938c15e clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1179 (cached) $ clan select clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> DEBUG clan_cli.tests.helpers.cli:__init__.py:143 $ clan vars generate --flake /build/pytest-gk6_dehp/flake clan-pytest-with-core> Caller: /build/src/clan_cli/tests/test_vars_shared.py:1067::test_import_survives_generate clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:927 Prefetching flake /build/pytest-gk6_dehp/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.cliChecks clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1174 Cache miss for clanInternals.inventoryClass.inventorySerialization.{instances,machines,meta} clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:789 Loading flake cache from file /build/clan-flake-cache/flakes-v2/f4841257f3a2d0956d6cee1010a159c46d904faf clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1174 Cache miss for clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:789 Loading flake cache from file /build/clan-flake-cache/flakes-v2/f4841257f3a2d0956d6cee1010a159c46d904faf clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1179 (cached) $ clan select 'clanInternals.inventoryClass.inventorySerialization.{instances,machines,meta}' clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1144 Precaching selectors: clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.machines clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.instances clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.meta clan-pytest-with-core> - (not cached) clanInternals.?secrets.?age.?plugins clan-pytest-with-core> - (cached) clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.generators.*.{share,dependencies,prompts,validationHash} clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.generators.*.files.*.{secret,deploy,owner,group,mode,neededFor} clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.?sops.?defaultGroups clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.settings.publicModule clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.settings.secretModule clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.?sops.?secretUploadDirectory clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.?password-store.?passCommand clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.?password-store.?secretLocation clan-pytest-with-core> - (not cached) clanInternals.vars.settings.?recipients clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.?age.?secretLocation clan-pytest-with-core> _________________________ test_export_sops_import_age __________________________ clan-pytest-with-core> [gw3] linux -- Python 3.14.7 /nix/store/3n4qphl9s728sz8frmpqqrv9b1m87g68-python3-3.14.7/bin/python clan-pytest-with-core> clan-pytest-with-core> self = Flake(identifier='/build/pytest-y88gs86q/flake', hash='sha256-NDf0I2TCHJ2eeUXrAVgC2gF8cyTotzKdvD7DDkxQ5fE=', 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.?secrets.?age.?plugins', 'clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.var...licModule', 'clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.settings.secretModule', ...] 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-y88gs86q/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/wzd645gd779phnphn72ia8fa0blblr9j-source?narHash=sha256-NDf0I2TCHJ2eeUXrAVgC2gF8cyTotzKdvD7DDkxQ5fE="; 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": "maybe", "value": "secrets"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "plugins"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "share"}, {"type": "str", "value": "dependencies"}, {"type": "str", "value": "prompts"}, {"type": "str", "value": "validationHash"}]}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "str", "value": "files"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "secret"}, {"type": "str", "value": "deploy"}, {"type": "str", "value": "owner"}, {"type": "str", "value": "group"}, {"type": "str", "value": "mode"}, {"type": "str", "value": "neededFor"}]}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "defaultGroups"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "publicModule"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "secretModule"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "secretUploadDirectory"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "passCommand"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "secretLocation"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "maybe", "value": "recipients"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "secretLocation"}]'"'"''"'"') 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": "maybe", "value": "secrets"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "plugins"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "share"}, {"type": "str", "value": "dependencies"}, {"type": "str", "value": "prompts"}, {"type": "str", "value": "validationHash"}]}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "str", "value": "files"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "secret"}, {"type": "str", "value": "deploy"}, {"type": "str", "value": "owner"}, {"type": "str", "value": "group"}, {"type": "str", "value": "mode"}, {"type": "str", "value": "neededFor"}]}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "defaultGroups"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "publicModule"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "secretModule"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "secretUploadDirectory"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "passCommand"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "secretLocation"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "maybe", "value": "recipients"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "secretLocation"}]'') 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": "maybe", "value": "secrets"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "plugins"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "share"}, {"type": "str", "value": "dependencies"}, {"type": "str", "value": "prompts"}, {"type": "str", "value": "validationHash"}]}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "str", "value": "files"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "secret"}, {"type": "str", "value": "deploy"}, {"type": "str", "value": "owner"}, {"type": "str", "value": "group"}, {"type": "str", "value": "mode"}, {"type": "str", "value": "neededFor"}]}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "defaultGroups"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "publicModule"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "secretModule"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "secretUploadDirectory"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "passCommand"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "secretLocation"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "maybe", "value": "recipients"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "secretLocation"}]'') flake) clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating list element at index 1 clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating attribute 'machine1' clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/cba1x9mxnwr8b36cw41bya7g6d5v1p7d-source/select.nix:325:37: clan-pytest-with-core> E 324| in clan-pytest-with-core> E 325| builtins.mapAttrs (_: v: recurse selectors (idx + 1) v) filteredAttrs clan-pytest-with-core> E | ^ clan-pytest-with-core> E 326| else if selector.type == "maybe" then 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:325:40: clan-pytest-with-core> E 324| in clan-pytest-with-core> E 325| builtins.mapAttrs (_: v: recurse selectors (idx + 1) v) filteredAttrs clan-pytest-with-core> E | ^ clan-pytest-with-core> E 326| else if selector.type == "maybe" then 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 … from call site clan-pytest-with-core> E at /build/store/nix/store/cba1x9mxnwr8b36cw41bya7g6d5v1p7d-source/select.nix:312:15: clan-pytest-with-core> E 311| else if selector.type == "str" then clan-pytest-with-core> E 312| recurse selectors (idx + 1) (builtins.getAttr selector.value obj) clan-pytest-with-core> E | ^ clan-pytest-with-core> E 313| else if selector.type == "set" then 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 'getAttr' builtin clan-pytest-with-core> E at /build/store/nix/store/cba1x9mxnwr8b36cw41bya7g6d5v1p7d-source/select.nix:312:44: clan-pytest-with-core> E 311| else if selector.type == "str" then clan-pytest-with-core> E 312| recurse selectors (idx + 1) (builtins.getAttr selector.value obj) clan-pytest-with-core> E | ^ clan-pytest-with-core> E 313| else if selector.type == "set" then clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'seq' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:401:18: clan-pytest-with-core> E 400| options = checked options; clan-pytest-with-core> E 401| config = checked (removeAttrs config [ "_module" ]); clan-pytest-with-core> E | ^ clan-pytest-with-core> E 402| _module = checked (config._module); 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:304:9: clan-pytest-with-core> E 303| checkUnmatched = clan-pytest-with-core> E 304| if config._module.check && config._module.freeformType == null && merged.unmatchedDefns != [ ] then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 305| let clan-pytest-with-core> E clan-pytest-with-core> E … in the right operand of the AND (&&) operator clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:304:72: clan-pytest-with-core> E 303| checkUnmatched = clan-pytest-with-core> E 304| if config._module.check && config._module.freeformType == null && merged.unmatchedDefns != [ ] then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 305| let clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'unmatchedDefns' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:940:7: clan-pytest-with-core> E 939| # Transforms unmatchedDefnsByName into a list of definitions clan-pytest-with-core> E 940| unmatchedDefns = clan-pytest-with-core> E | ^ clan-pytest-with-core> E 941| if configs == [ ] then clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'concatLists' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:946:11: clan-pytest-with-core> E 945| else clan-pytest-with-core> E 946| concatLists ( clan-pytest-with-core> E | ^ clan-pytest-with-core> E 947| mapAttrsToList ( clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:948:21: clan-pytest-with-core> E 947| mapAttrsToList ( clan-pytest-with-core> E 948| name: defs: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 949| map ( clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'map' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:949:15: clan-pytest-with-core> E 948| name: defs: clan-pytest-with-core> E 949| map ( clan-pytest-with-core> E | ^ clan-pytest-with-core> E 950| def: clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:932:22: clan-pytest-with-core> E 931| # Propagate all unmatched definitions from nested option sets clan-pytest-with-core> E 932| mapAttrs (n: v: v.unmatchedDefns) resultsByName clan-pytest-with-core> E | ^ clan-pytest-with-core> E 933| # Plus the definitions for the current prefix that don't have a matching option clan-pytest-with-core> E clan-pytest-with-core> E (10 duplicate frames omitted) clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:932:25: clan-pytest-with-core> E 931| # Propagate all unmatched definitions from nested option sets clan-pytest-with-core> E 932| mapAttrs (n: v: v.unmatchedDefns) resultsByName clan-pytest-with-core> E | ^ clan-pytest-with-core> E 933| # Plus the definitions for the current prefix that don't have a matching option clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:876:15: clan-pytest-with-core> E 875| resultsByName = mapAttrs ( clan-pytest-with-core> E 876| name: decls: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 877| # We're descending into attribute ‘name’. 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:888:9: clan-pytest-with-core> E 887| in clan-pytest-with-core> E 888| if length optionDecls == length decls then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 889| let clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'length' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:888:12: clan-pytest-with-core> E 887| in clan-pytest-with-core> E 888| if length optionDecls == length decls then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 889| let clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'filter' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:882:25: clan-pytest-with-core> E 881| defns' = rawDefinitionsByName.${name} or [ ]; clan-pytest-with-core> E 882| optionDecls = filter ( clan-pytest-with-core> E | ^ clan-pytest-with-core> E 883| m: clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:883:13: clan-pytest-with-core> E 882| optionDecls = filter ( clan-pytest-with-core> E 883| m: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 884| m.options ? _type clan-pytest-with-core> E clan-pytest-with-core> E … in the left operand of the AND (&&) operator clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:885:13: clan-pytest-with-core> E 884| m.options ? _type clan-pytest-with-core> E 885| && (m.options._type == "option" || throwDeclarationTypeError loc m.options._type m._file) clan-pytest-with-core> E | ^ clan-pytest-with-core> E 886| ) decls; clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'options' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:807:15: clan-pytest-with-core> E 806| pos = unsafeGetAttrPos n subtree; clan-pytest-with-core> E 807| options = option; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 808| }) subtree clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:289:73: clan-pytest-with-core> E 288| len = length attrPath; clan-pytest-with-core> E 289| atDepth = n: if n == len then value else { ${elemAt attrPath n} = atDepth (n + 1); }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 290| in clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'atDepth' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:289:17: clan-pytest-with-core> E 288| len = length attrPath; clan-pytest-with-core> E 289| atDepth = n: if n == len then value else { ${elemAt attrPath n} = atDepth (n + 1); }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 290| in clan-pytest-with-core> E clan-pytest-with-core> E … in the right operand of the update (//) operator clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:2047:9: clan-pytest-with-core> E 2046| } clan-pytest-with-core> E 2047| // optionalAttrs (toType != null) { clan-pytest-with-core> E | ^ clan-pytest-with-core> E 2048| type = toType; clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:2047:12: clan-pytest-with-core> E 2046| } clan-pytest-with-core> E 2047| // optionalAttrs (toType != null) { clan-pytest-with-core> E | ^ clan-pytest-with-core> E 2048| type = toType; clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'optionalAttrs' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:1492:25: clan-pytest-with-core> E 1491| */ clan-pytest-with-core> E 1492| optionalAttrs = cond: as: if cond then as else { }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1493| 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:1492:29: clan-pytest-with-core> E 1491| */ clan-pytest-with-core> E 1492| optionalAttrs = cond: as: if cond then as else { }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1493| clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:2036:17: clan-pytest-with-core> E 2035| let clan-pytest-with-core> E 2036| opt = attrByPath to { } options; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 2037| in clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'attrByPath' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:89:24: clan-pytest-with-core> E 88| attrByPath = clan-pytest-with-core> E 89| attrPath: default: set: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 90| let clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:106:5: clan-pytest-with-core> E 105| in clan-pytest-with-core> E 106| attrByPath' 0 set; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 107| clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'attrByPath'' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:93:12: clan-pytest-with-core> E 92| attrByPath' = clan-pytest-with-core> E 93| n: s: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 94| ( clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:102:35: clan-pytest-with-core> E 101| in clan-pytest-with-core> E 102| if s ? ${attr} then attrByPath' (n + 1) s.${attr} else default clan-pytest-with-core> E | ^ clan-pytest-with-core> E 103| ) clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'attrByPath'' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:93:12: clan-pytest-with-core> E 92| attrByPath' = clan-pytest-with-core> E 93| n: s: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 94| ( clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:102:35: clan-pytest-with-core> E 101| in clan-pytest-with-core> E 102| if s ? ${attr} then attrByPath' (n + 1) s.${attr} else default clan-pytest-with-core> E | ^ clan-pytest-with-core> E 103| ) clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'attrByPath'' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:93:12: clan-pytest-with-core> E 92| attrByPath' = clan-pytest-with-core> E 93| n: s: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 94| ( clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:102:35: clan-pytest-with-core> E 101| in clan-pytest-with-core> E 102| if s ? ${attr} then attrByPath' (n + 1) s.${attr} else default clan-pytest-with-core> E | ^ clan-pytest-with-core> E 103| ) clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'attrByPath'' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:93:12: clan-pytest-with-core> E 92| attrByPath' = clan-pytest-with-core> E 93| n: s: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 94| ( clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:102:55: clan-pytest-with-core> E 101| in clan-pytest-with-core> E 102| if s ? ${attr} then attrByPath' (n + 1) s.${attr} else default clan-pytest-with-core> E | ^ clan-pytest-with-core> E 103| ) clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:927:37: clan-pytest-with-core> E 926| clan-pytest-with-core> E 927| matchedOptions = mapAttrs (n: v: v.matchedOptions) resultsByName; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 928| clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'matchedOptions' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:893:13: clan-pytest-with-core> E 892| { clan-pytest-with-core> E 893| matchedOptions = evalOptionValue loc opt defns'; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 894| unmatchedDefns = [ ]; clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:893:30: clan-pytest-with-core> E 892| { clan-pytest-with-core> E 893| matchedOptions = evalOptionValue loc opt defns'; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 894| unmatchedDefns = [ ]; clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'evalOptionValue' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1103:15: clan-pytest-with-core> E 1102| evalOptionValue = clan-pytest-with-core> E 1103| loc: opt: defs: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1104| let clan-pytest-with-core> E clan-pytest-with-core> E … in the left operand of the update (//) operator clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1148:5: clan-pytest-with-core> E 1147| warnDeprecation opt clan-pytest-with-core> E 1148| // { clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1149| value = addErrorContext "while evaluating the option `${showOption loc}':" value; 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1141:9: clan-pytest-with-core> E 1140| warnDeprecation = clan-pytest-with-core> E 1141| if (opt.type.deprecationMessage != null) then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1142| warn "The type `types.${opt.type.name}' of option `${showOption loc}' defined in ${showFiles opt.declarations} is deprecated. ${opt.type.deprecationMessage}" clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:890:19: clan-pytest-with-core> E 889| let clan-pytest-with-core> E 890| opt = fixupOptionType loc (mergeOptionDecls loc decls); clan-pytest-with-core> E | ^ clan-pytest-with-core> E 891| in clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'fixupOptionType' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1473:10: clan-pytest-with-core> E 1472| fixupOptionType = clan-pytest-with-core> E 1473| loc: opt: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1474| if opt.type.getSubModules or null == null then 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1474:5: clan-pytest-with-core> E 1473| loc: opt: clan-pytest-with-core> E 1474| if opt.type.getSubModules or null == null then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1475| opt // { type = opt.type or types.unspecified; } clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'type.getSubModules' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/nixos/modules/services/hardware/bluetooth.nix:72:9: clan-pytest-with-core> E 71| settings = mkOption { clan-pytest-with-core> E 72| type = cfgFmt.type; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 73| default = { }; clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/nixos/modules/services/hardware/bluetooth.nix:26:12: clan-pytest-with-core> E 25| clan-pytest-with-core> E 26| cfgFmt = pkgs.formats.ini { }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 27| clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:727:15: clan-pytest-with-core> E 726| extraArgs = mapAttrs ( clan-pytest-with-core> E 727| name: _: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 728| addErrorContext (context name) ( clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the module argument `pkgs' in "/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/nixos/modules/services/hardware/bluetooth.nix": clan-pytest-with-core> E clan-pytest-with-core> E … noting that argument `pkgs` is not externally provided, so querying `_module.args` instead, requiring `config` clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:731:13: clan-pytest-with-core> E 730| "noting that argument `${name}` is not externally provided, so querying `_module.args` instead, requiring `config`" clan-pytest-with-core> E 731| config._module.args.${name} clan-pytest-with-core> E | ^ clan-pytest-with-core> E 732| ) clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/types.nix:1029:18: clan-pytest-with-core> E 1028| value = mapAttrs ( clan-pytest-with-core> E 1029| n: v: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1030| if lazy then clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'optionalValue.value' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1312:5: clan-pytest-with-core> E 1311| clan-pytest-with-core> E 1312| optionalValue = if isDefined then { value = mergedValue; } else { }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1313| }; 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1312:21: clan-pytest-with-core> E 1311| clan-pytest-with-core> E 1312| optionalValue = if isDefined then { value = mergedValue; } else { }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1313| }; clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'values' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1240:11: clan-pytest-with-core> E 1239| { clan-pytest-with-core> E 1240| values = defsSorted; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1241| inherit (defsFiltered) highestPrio; 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1211:11: clan-pytest-with-core> E 1210| # Avoid sorting if we don't have to. clan-pytest-with-core> E 1211| if any (def: def.value._type or "" == "order") defsFiltered.values then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1212| sortProperties defsFiltered.values clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'any' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1211:14: clan-pytest-with-core> E 1210| # Avoid sorting if we don't have to. clan-pytest-with-core> E 1211| if any (def: def.value._type or "" == "order") defsFiltered.values then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1212| sortProperties defsFiltered.values clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1211:19: clan-pytest-with-core> E 1210| # Avoid sorting if we don't have to. clan-pytest-with-core> E 1211| if any (def: def.value._type or "" == "order") defsFiltered.values then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1212| sortProperties defsFiltered.values clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'value._type' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1422:67: clan-pytest-with-core> E 1421| strip = clan-pytest-with-core> E 1422| def: if def.value._type or "" == "override" then def // { value = def.value.content; } else def; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1423| in clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'value.content' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1566:22: clan-pytest-with-core> E 1565| _type = "override"; clan-pytest-with-core> E 1566| inherit priority content; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1567| }; 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/nixos/modules/misc/nixpkgs.nix:107:15: clan-pytest-with-core> E 106| clan-pytest-with-core> E 107| finalPkgs = if opt.pkgs.isDefined then cfg.pkgs.appendOverlays cfg.overlays else defaultPkgs; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 108| clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'pkgs.isDefined' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1154:21: clan-pytest-with-core> E 1153| definitionsWithLocations = res.defsFinal; clan-pytest-with-core> E 1154| inherit (res) isDefined; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1155| inherit (res.checkedAndMerged) valueMeta; clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'isDefined' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1310:5: clan-pytest-with-core> E 1309| clan-pytest-with-core> E 1310| isDefined = defsFinal != [ ]; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1311| clan-pytest-with-core> E clan-pytest-with-core> E (6 duplicate frames omitted) clan-pytest-with-core> E clan-pytest-with-core> E error: attribute 'system' missing clan-pytest-with-core> E at /build/store/nix/store/y3h139bhv4373m1hab367ma4p5i95i2f-source/modules/clan/module.nix:164:24: clan-pytest-with-core> E 163| (lib.modules.importApply ../../nixosModules/machineModules/overridePkgs.nix { clan-pytest-with-core> E 164| pkgs = nixpkgsMatrix.${config.inventory.machines.${name}.nixpkgs}.system.${system}.pkgs; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 165| }) clan-pytest-with-core> E Did you mean systems? 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 0x7fffe64e1a90> clan-pytest-with-core> flake_with_sops = clan-pytest-with-core> age_keys = [KeyPair(pubkey='age1dhwqzkah943xzc34tc3dlmfayyevcmdmxzjezdgdy33euxwf59vsp3vk3c', privkey='AGE-SECRET-KEY-1KF8E3SR3TTG...z7jca7s00wyeg2nt3aqnvaks7p4jfr', privkey='AGE-SECRET-KEY-1Z89SHU9KAF709TTAZDARUWKC7H9TPZW4L8A2PVYSYAF7QVLCNQZQZ07U5J')] clan-pytest-with-core> tmp_path = PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw3/test_export_sops_import_age0') 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_export_sops_import_age( clan-pytest-with-core> monkeypatch: pytest.MonkeyPatch, clan-pytest-with-core> flake_with_sops: ClanFlake, clan-pytest-with-core> age_keys: list[KeyPair], clan-pytest-with-core> tmp_path: Path, clan-pytest-with-core> ) -> None: clan-pytest-with-core> """Export from sops backend, import into age backend, verify values match.""" clan-pytest-with-core> flake = flake_with_sops clan-pytest-with-core> age_key = age_keys[0] clan-pytest-with-core> clan-pytest-with-core> # Phase 1: generate with sops clan-pytest-with-core> _setup_machines_with_backend(flake, "sops") clan-pytest-with-core> flake.refresh() clan-pytest-with-core> monkeypatch.chdir(flake.path) clan-pytest-with-core> > cli.run(["vars", "generate", "--flake", str(flake.path)]) clan-pytest-with-core> clan-pytest-with-core> /build/src/clan_cli/tests/test_vars_shared.py:944: 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/vars/generate.py:33: in generate_command clan-pytest-with-core> run_generators( clan-pytest-with-core> /build/src/clan_lib/vars/generate.py:306: in run_generators clan-pytest-with-core> all_generators = get_generators(machines, full_closure=True) clan-pytest-with-core> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ clan-pytest-with-core> /build/src/clan_lib/vars/generate.py:146: in get_generators clan-pytest-with-core> flake.precache(get_generators_precache_selectors(list(all_machines))) clan-pytest-with-core> /build/src/clan_lib/flake/flake.py:1151: in precache clan-pytest-with-core> self.get_from_nix(not_fetched_selectors) clan-pytest-with-core> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ clan-pytest-with-core> clan-pytest-with-core> self = Flake(identifier='/build/pytest-y88gs86q/flake', hash='sha256-NDf0I2TCHJ2eeUXrAVgC2gF8cyTotzKdvD7DDkxQ5fE=', 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.?secrets.?age.?plugins', 'clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.var...licModule', 'clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.settings.secretModule', ...] 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 while executing:$ clan select 'clanInternals.?secrets.?age.?plugins' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.generators.*.{share,dependencies,prompts,validationHash}' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.generators.*.files.*.{secret,deploy,owner,group,mode,neededFor}' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.?sops.?defaultGroups' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.settings.publicModule' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.settings.secretModule' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.?sops.?secretUploadDirectory' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.?password-store.?passCommand' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.?password-store.?secretLocation' clan-pytest-with-core> E $ clan select 'clanInternals.vars.settings.?recipients' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.?age.?secretLocation' clan-pytest-with-core> E Reason: attribute 'system' missing clan-pytest-with-core> E at /build/store/nix/store/y3h139bhv4373m1hab367ma4p5i95i2f-source/modules/clan/module.nix:164:24: clan-pytest-with-core> E 163| (lib.modules.importApply ../../nixosModules/machineModules/overridePkgs.nix { clan-pytest-with-core> E 164| pkgs = nixpkgsMatrix.${config.inventory.machines.${name}.nixpkgs}.system.${system}.pkgs; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 165| }) clan-pytest-with-core> E Did you mean systems?. 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 setup ----------------------------- clan-pytest-with-core> !! $HOME does not point to a temp directory!! HOME=/build/pytest-y88gs86q clan-pytest-with-core> [localhost] $ clan vars keygen --flake /build/pytest-y88gs86q/flake --user admin --no-interactive clan-pytest-with-core> Caller: /build/src/clan_cli/tests/age_keys.py:31::init clan-pytest-with-core> clan-pytest-with-core> Prefetching flake /build/pytest-y88gs86q/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/febbcab65441be6ccc547560fd0155faadebbbb7 clan-pytest-with-core> (cached) $ clan select clanInternals.inventoryClass.relativeDirectory 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> git \ clan-pytest-with-core> -C /build/pytest-y88gs86q/flake \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-y88gs86q/flake/sops/users/admin 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/admin to git clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-y88gs86q/flake \ clan-pytest-with-core> diff \ clan-pytest-with-core> --cached --exit-code \ clan-pytest-with-core> -- /build/pytest-y88gs86q/flake/sops/users/admin 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-y88gs86q/flake \ clan-pytest-with-core> commit \ clan-pytest-with-core> -m 'secrets: add user admin' \ clan-pytest-with-core> --no-verify /build/pytest-y88gs86q/flake/sops/users/admin 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/admin to git 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/pytest-y88gs86q clan-pytest-with-core> DEBUG clan_cli.tests.helpers.cli:__init__.py:143 $ clan vars keygen --flake /build/pytest-y88gs86q/flake --user admin --no-interactive clan-pytest-with-core> Caller: /build/src/clan_cli/tests/age_keys.py:31::init clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:927 Prefetching flake /build/pytest-y88gs86q/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/febbcab65441be6ccc547560fd0155faadebbbb7 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.cmd:__init__.py:143 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> DEBUG clan_lib.cmd:__init__.py:143 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> DEBUG clan_cli.secrets.sops:sops.py:99 Found age public key from a private key in the environment (SOPS_AGE_KEY): age1dhwqzkah943xzc34tc3dlmfayyevcmdmxzjezdgdy33euxwf59vsp3vk3c clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:143 git \ clan-pytest-with-core> -C /build/pytest-y88gs86q/flake \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-y88gs86q/flake/sops/users/admin 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> DEBUG clan_lib.cmd:__init__.py:143 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> DEBUG clan_lib.git:__init__.py:98 Adding sops/users/admin to git clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:143 git \ clan-pytest-with-core> -C /build/pytest-y88gs86q/flake \ clan-pytest-with-core> diff \ clan-pytest-with-core> --cached --exit-code \ clan-pytest-with-core> -- /build/pytest-y88gs86q/flake/sops/users/admin 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> DEBUG clan_lib.cmd:__init__.py:143 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> DEBUG clan_lib.cmd:__init__.py:143 git \ clan-pytest-with-core> -C /build/pytest-y88gs86q/flake \ clan-pytest-with-core> commit \ clan-pytest-with-core> -m 'secrets: add user admin' \ clan-pytest-with-core> --no-verify /build/pytest-y88gs86q/flake/sops/users/admin 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> DEBUG clan_lib.cmd:__init__.py:143 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> INFO clan_lib.git:__init__.py:141 Committed sops/users/admin to git clan-pytest-with-core> ----------------------------- Captured stdout call ----------------------------- clan-pytest-with-core> [main 4f11cd2] flake: update by flake generator clan-pytest-with-core> 4 files changed, 108 insertions(+) clan-pytest-with-core> create mode 100644 machines/machine1/configuration.json clan-pytest-with-core> create mode 100644 machines/machine1/configuration.nix clan-pytest-with-core> create mode 100644 machines/machine2/configuration.json clan-pytest-with-core> create mode 100644 machines/machine2/configuration.nix clan-pytest-with-core> ----------------------------- Captured stderr call ----------------------------- clan-pytest-with-core> Prefetching flake /build/pytest-y88gs86q/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/d2c0050d97832c3ac5193485b93705d00938c15e clan-pytest-with-core> (cached) $ clan select clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> Prefetching flake /build/pytest-y88gs86q/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/d2c0050d97832c3ac5193485b93705d00938c15e clan-pytest-with-core> (cached) $ clan select clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> [localhost] $ clan vars generate --flake /build/pytest-y88gs86q/flake clan-pytest-with-core> Caller: /build/src/clan_cli/tests/test_vars_shared.py:944::test_export_sops_import_age clan-pytest-with-core> clan-pytest-with-core> Prefetching flake /build/pytest-y88gs86q/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.cliChecks clan-pytest-with-core> Loading flake cache from file /build/clan-flake-cache/flakes-v2/f4841257f3a2d0956d6cee1010a159c46d904faf clan-pytest-with-core> Cache miss for clanInternals.inventoryClass.inventorySerialization.{instances,machines,meta} clan-pytest-with-core> Loading flake cache from file /build/clan-flake-cache/flakes-v2/f4841257f3a2d0956d6cee1010a159c46d904faf clan-pytest-with-core> Cache miss for clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> Loading flake cache from file /build/clan-flake-cache/flakes-v2/f4841257f3a2d0956d6cee1010a159c46d904faf clan-pytest-with-core> (cached) $ clan select 'clanInternals.inventoryClass.inventorySerialization.{instances,machines,meta}' clan-pytest-with-core> Precaching selectors: clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.machines clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.instances clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.meta clan-pytest-with-core> - (not cached) clanInternals.?secrets.?age.?plugins clan-pytest-with-core> - (cached) clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.generators.*.{share,dependencies,prompts,validationHash} clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.generators.*.files.*.{secret,deploy,owner,group,mode,neededFor} clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.?sops.?defaultGroups clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.settings.publicModule clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.settings.secretModule clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.?sops.?secretUploadDirectory clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.?password-store.?passCommand clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.?password-store.?secretLocation clan-pytest-with-core> - (not cached) clanInternals.vars.settings.?recipients clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.?age.?secretLocation clan-pytest-with-core> ------------------------------ Captured log call ------------------------------- clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:927 Prefetching flake /build/pytest-y88gs86q/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/d2c0050d97832c3ac5193485b93705d00938c15e 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-y88gs86q/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/d2c0050d97832c3ac5193485b93705d00938c15e clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1179 (cached) $ clan select clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> DEBUG clan_cli.tests.helpers.cli:__init__.py:143 $ clan vars generate --flake /build/pytest-y88gs86q/flake clan-pytest-with-core> Caller: /build/src/clan_cli/tests/test_vars_shared.py:944::test_export_sops_import_age clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:927 Prefetching flake /build/pytest-y88gs86q/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.cliChecks clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:789 Loading flake cache from file /build/clan-flake-cache/flakes-v2/f4841257f3a2d0956d6cee1010a159c46d904faf clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1174 Cache miss for clanInternals.inventoryClass.inventorySerialization.{instances,machines,meta} clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:789 Loading flake cache from file /build/clan-flake-cache/flakes-v2/f4841257f3a2d0956d6cee1010a159c46d904faf clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1174 Cache miss for clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:789 Loading flake cache from file /build/clan-flake-cache/flakes-v2/f4841257f3a2d0956d6cee1010a159c46d904faf clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1179 (cached) $ clan select 'clanInternals.inventoryClass.inventorySerialization.{instances,machines,meta}' clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1144 Precaching selectors: clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.machines clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.instances clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.meta clan-pytest-with-core> - (not cached) clanInternals.?secrets.?age.?plugins clan-pytest-with-core> - (cached) clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.generators.*.{share,dependencies,prompts,validationHash} clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.generators.*.files.*.{secret,deploy,owner,group,mode,neededFor} clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.?sops.?defaultGroups clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.settings.publicModule clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.settings.secretModule clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.?sops.?secretUploadDirectory clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.?password-store.?passCommand clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.?password-store.?secretLocation clan-pytest-with-core> - (not cached) clanInternals.vars.settings.?recipients clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.?age.?secretLocation clan-pytest-with-core> ___________________ test_persisted_prompt_reused_not_reasked ___________________ clan-pytest-with-core> [gw9] linux -- Python 3.14.7 /nix/store/3n4qphl9s728sz8frmpqqrv9b1m87g68-python3-3.14.7/bin/python clan-pytest-with-core> clan-pytest-with-core> self = Flake(identifier='/build/pytest-d9yfla_f/flake', hash='sha256-9gMRnNKZbni8vA/QUBRz/BVkbH7BjMjND6eBJ6dL8II=', 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.?secrets.?age.?plugins', 'clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.gener...ngs.publicModule', 'clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.settings.secretModule', ...] 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-d9yfla_f/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/78pxy03y7rvy7inpwjay78adb4f1bwsl-source?narHash=sha256-9gMRnNKZbni8vA/QUBRz/BVkbH7BjMjND6eBJ6dL8II="; 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": "maybe", "value": "secrets"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "plugins"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "share"}, {"type": "str", "value": "dependencies"}, {"type": "str", "value": "prompts"}, {"type": "str", "value": "validationHash"}]}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "str", "value": "files"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "secret"}, {"type": "str", "value": "deploy"}, {"type": "str", "value": "owner"}, {"type": "str", "value": "group"}, {"type": "str", "value": "mode"}, {"type": "str", "value": "neededFor"}]}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "defaultGroups"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "publicModule"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "secretModule"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "secretUploadDirectory"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "passCommand"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "secretLocation"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "maybe", "value": "recipients"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "secretLocation"}]'"'"''"'"') 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": "maybe", "value": "secrets"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "plugins"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "share"}, {"type": "str", "value": "dependencies"}, {"type": "str", "value": "prompts"}, {"type": "str", "value": "validationHash"}]}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "str", "value": "files"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "secret"}, {"type": "str", "value": "deploy"}, {"type": "str", "value": "owner"}, {"type": "str", "value": "group"}, {"type": "str", "value": "mode"}, {"type": "str", "value": "neededFor"}]}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "defaultGroups"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "publicModule"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "secretModule"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "secretUploadDirectory"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "passCommand"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "secretLocation"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "maybe", "value": "recipients"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "secretLocation"}]'') 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": "maybe", "value": "secrets"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "plugins"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "share"}, {"type": "str", "value": "dependencies"}, {"type": "str", "value": "prompts"}, {"type": "str", "value": "validationHash"}]}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "str", "value": "files"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "secret"}, {"type": "str", "value": "deploy"}, {"type": "str", "value": "owner"}, {"type": "str", "value": "group"}, {"type": "str", "value": "mode"}, {"type": "str", "value": "neededFor"}]}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "defaultGroups"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "publicModule"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "secretModule"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "secretUploadDirectory"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "passCommand"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "secretLocation"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "maybe", "value": "recipients"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "secretLocation"}]'') flake) clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating list element at index 1 clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating attribute 'my_machine' clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/cba1x9mxnwr8b36cw41bya7g6d5v1p7d-source/select.nix:325:37: clan-pytest-with-core> E 324| in clan-pytest-with-core> E 325| builtins.mapAttrs (_: v: recurse selectors (idx + 1) v) filteredAttrs clan-pytest-with-core> E | ^ clan-pytest-with-core> E 326| else if selector.type == "maybe" then 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:325:40: clan-pytest-with-core> E 324| in clan-pytest-with-core> E 325| builtins.mapAttrs (_: v: recurse selectors (idx + 1) v) filteredAttrs clan-pytest-with-core> E | ^ clan-pytest-with-core> E 326| else if selector.type == "maybe" then 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 … from call site clan-pytest-with-core> E at /build/store/nix/store/cba1x9mxnwr8b36cw41bya7g6d5v1p7d-source/select.nix:312:15: clan-pytest-with-core> E 311| else if selector.type == "str" then clan-pytest-with-core> E 312| recurse selectors (idx + 1) (builtins.getAttr selector.value obj) clan-pytest-with-core> E | ^ clan-pytest-with-core> E 313| else if selector.type == "set" then 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 'getAttr' builtin clan-pytest-with-core> E at /build/store/nix/store/cba1x9mxnwr8b36cw41bya7g6d5v1p7d-source/select.nix:312:44: clan-pytest-with-core> E 311| else if selector.type == "str" then clan-pytest-with-core> E 312| recurse selectors (idx + 1) (builtins.getAttr selector.value obj) clan-pytest-with-core> E | ^ clan-pytest-with-core> E 313| else if selector.type == "set" then clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'seq' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:401:18: clan-pytest-with-core> E 400| options = checked options; clan-pytest-with-core> E 401| config = checked (removeAttrs config [ "_module" ]); clan-pytest-with-core> E | ^ clan-pytest-with-core> E 402| _module = checked (config._module); 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:304:9: clan-pytest-with-core> E 303| checkUnmatched = clan-pytest-with-core> E 304| if config._module.check && config._module.freeformType == null && merged.unmatchedDefns != [ ] then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 305| let clan-pytest-with-core> E clan-pytest-with-core> E … in the right operand of the AND (&&) operator clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:304:72: clan-pytest-with-core> E 303| checkUnmatched = clan-pytest-with-core> E 304| if config._module.check && config._module.freeformType == null && merged.unmatchedDefns != [ ] then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 305| let clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'unmatchedDefns' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:940:7: clan-pytest-with-core> E 939| # Transforms unmatchedDefnsByName into a list of definitions clan-pytest-with-core> E 940| unmatchedDefns = clan-pytest-with-core> E | ^ clan-pytest-with-core> E 941| if configs == [ ] then clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'concatLists' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:946:11: clan-pytest-with-core> E 945| else clan-pytest-with-core> E 946| concatLists ( clan-pytest-with-core> E | ^ clan-pytest-with-core> E 947| mapAttrsToList ( clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:948:21: clan-pytest-with-core> E 947| mapAttrsToList ( clan-pytest-with-core> E 948| name: defs: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 949| map ( clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'map' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:949:15: clan-pytest-with-core> E 948| name: defs: clan-pytest-with-core> E 949| map ( clan-pytest-with-core> E | ^ clan-pytest-with-core> E 950| def: clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:932:22: clan-pytest-with-core> E 931| # Propagate all unmatched definitions from nested option sets clan-pytest-with-core> E 932| mapAttrs (n: v: v.unmatchedDefns) resultsByName clan-pytest-with-core> E | ^ clan-pytest-with-core> E 933| # Plus the definitions for the current prefix that don't have a matching option clan-pytest-with-core> E clan-pytest-with-core> E (10 duplicate frames omitted) clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:932:25: clan-pytest-with-core> E 931| # Propagate all unmatched definitions from nested option sets clan-pytest-with-core> E 932| mapAttrs (n: v: v.unmatchedDefns) resultsByName clan-pytest-with-core> E | ^ clan-pytest-with-core> E 933| # Plus the definitions for the current prefix that don't have a matching option clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:876:15: clan-pytest-with-core> E 875| resultsByName = mapAttrs ( clan-pytest-with-core> E 876| name: decls: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 877| # We're descending into attribute ‘name’. 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:888:9: clan-pytest-with-core> E 887| in clan-pytest-with-core> E 888| if length optionDecls == length decls then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 889| let clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'length' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:888:12: clan-pytest-with-core> E 887| in clan-pytest-with-core> E 888| if length optionDecls == length decls then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 889| let clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'filter' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:882:25: clan-pytest-with-core> E 881| defns' = rawDefinitionsByName.${name} or [ ]; clan-pytest-with-core> E 882| optionDecls = filter ( clan-pytest-with-core> E | ^ clan-pytest-with-core> E 883| m: clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:883:13: clan-pytest-with-core> E 882| optionDecls = filter ( clan-pytest-with-core> E 883| m: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 884| m.options ? _type clan-pytest-with-core> E clan-pytest-with-core> E … in the left operand of the AND (&&) operator clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:885:13: clan-pytest-with-core> E 884| m.options ? _type clan-pytest-with-core> E 885| && (m.options._type == "option" || throwDeclarationTypeError loc m.options._type m._file) clan-pytest-with-core> E | ^ clan-pytest-with-core> E 886| ) decls; clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'options' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:807:15: clan-pytest-with-core> E 806| pos = unsafeGetAttrPos n subtree; clan-pytest-with-core> E 807| options = option; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 808| }) subtree clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:289:73: clan-pytest-with-core> E 288| len = length attrPath; clan-pytest-with-core> E 289| atDepth = n: if n == len then value else { ${elemAt attrPath n} = atDepth (n + 1); }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 290| in clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'atDepth' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:289:17: clan-pytest-with-core> E 288| len = length attrPath; clan-pytest-with-core> E 289| atDepth = n: if n == len then value else { ${elemAt attrPath n} = atDepth (n + 1); }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 290| in clan-pytest-with-core> E clan-pytest-with-core> E … in the right operand of the update (//) operator clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:2047:9: clan-pytest-with-core> E 2046| } clan-pytest-with-core> E 2047| // optionalAttrs (toType != null) { clan-pytest-with-core> E | ^ clan-pytest-with-core> E 2048| type = toType; clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:2047:12: clan-pytest-with-core> E 2046| } clan-pytest-with-core> E 2047| // optionalAttrs (toType != null) { clan-pytest-with-core> E | ^ clan-pytest-with-core> E 2048| type = toType; clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'optionalAttrs' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:1492:25: clan-pytest-with-core> E 1491| */ clan-pytest-with-core> E 1492| optionalAttrs = cond: as: if cond then as else { }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1493| 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:1492:29: clan-pytest-with-core> E 1491| */ clan-pytest-with-core> E 1492| optionalAttrs = cond: as: if cond then as else { }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1493| clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:2036:17: clan-pytest-with-core> E 2035| let clan-pytest-with-core> E 2036| opt = attrByPath to { } options; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 2037| in clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'attrByPath' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:89:24: clan-pytest-with-core> E 88| attrByPath = clan-pytest-with-core> E 89| attrPath: default: set: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 90| let clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:106:5: clan-pytest-with-core> E 105| in clan-pytest-with-core> E 106| attrByPath' 0 set; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 107| clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'attrByPath'' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:93:12: clan-pytest-with-core> E 92| attrByPath' = clan-pytest-with-core> E 93| n: s: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 94| ( clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:102:35: clan-pytest-with-core> E 101| in clan-pytest-with-core> E 102| if s ? ${attr} then attrByPath' (n + 1) s.${attr} else default clan-pytest-with-core> E | ^ clan-pytest-with-core> E 103| ) clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'attrByPath'' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:93:12: clan-pytest-with-core> E 92| attrByPath' = clan-pytest-with-core> E 93| n: s: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 94| ( clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:102:35: clan-pytest-with-core> E 101| in clan-pytest-with-core> E 102| if s ? ${attr} then attrByPath' (n + 1) s.${attr} else default clan-pytest-with-core> E | ^ clan-pytest-with-core> E 103| ) clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'attrByPath'' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:93:12: clan-pytest-with-core> E 92| attrByPath' = clan-pytest-with-core> E 93| n: s: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 94| ( clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:102:35: clan-pytest-with-core> E 101| in clan-pytest-with-core> E 102| if s ? ${attr} then attrByPath' (n + 1) s.${attr} else default clan-pytest-with-core> E | ^ clan-pytest-with-core> E 103| ) clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'attrByPath'' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:93:12: clan-pytest-with-core> E 92| attrByPath' = clan-pytest-with-core> E 93| n: s: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 94| ( clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:102:55: clan-pytest-with-core> E 101| in clan-pytest-with-core> E 102| if s ? ${attr} then attrByPath' (n + 1) s.${attr} else default clan-pytest-with-core> E | ^ clan-pytest-with-core> E 103| ) clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:927:37: clan-pytest-with-core> E 926| clan-pytest-with-core> E 927| matchedOptions = mapAttrs (n: v: v.matchedOptions) resultsByName; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 928| clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'matchedOptions' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:893:13: clan-pytest-with-core> E 892| { clan-pytest-with-core> E 893| matchedOptions = evalOptionValue loc opt defns'; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 894| unmatchedDefns = [ ]; clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:893:30: clan-pytest-with-core> E 892| { clan-pytest-with-core> E 893| matchedOptions = evalOptionValue loc opt defns'; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 894| unmatchedDefns = [ ]; clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'evalOptionValue' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1103:15: clan-pytest-with-core> E 1102| evalOptionValue = clan-pytest-with-core> E 1103| loc: opt: defs: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1104| let clan-pytest-with-core> E clan-pytest-with-core> E … in the left operand of the update (//) operator clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1148:5: clan-pytest-with-core> E 1147| warnDeprecation opt clan-pytest-with-core> E 1148| // { clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1149| value = addErrorContext "while evaluating the option `${showOption loc}':" value; 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1141:9: clan-pytest-with-core> E 1140| warnDeprecation = clan-pytest-with-core> E 1141| if (opt.type.deprecationMessage != null) then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1142| warn "The type `types.${opt.type.name}' of option `${showOption loc}' defined in ${showFiles opt.declarations} is deprecated. ${opt.type.deprecationMessage}" clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:890:19: clan-pytest-with-core> E 889| let clan-pytest-with-core> E 890| opt = fixupOptionType loc (mergeOptionDecls loc decls); clan-pytest-with-core> E | ^ clan-pytest-with-core> E 891| in clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'fixupOptionType' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1473:10: clan-pytest-with-core> E 1472| fixupOptionType = clan-pytest-with-core> E 1473| loc: opt: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1474| if opt.type.getSubModules or null == null then 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1474:5: clan-pytest-with-core> E 1473| loc: opt: clan-pytest-with-core> E 1474| if opt.type.getSubModules or null == null then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1475| opt // { type = opt.type or types.unspecified; } clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'type.getSubModules' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/nixos/modules/services/hardware/bluetooth.nix:72:9: clan-pytest-with-core> E 71| settings = mkOption { clan-pytest-with-core> E 72| type = cfgFmt.type; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 73| default = { }; clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/nixos/modules/services/hardware/bluetooth.nix:26:12: clan-pytest-with-core> E 25| clan-pytest-with-core> E 26| cfgFmt = pkgs.formats.ini { }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 27| clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:727:15: clan-pytest-with-core> E 726| extraArgs = mapAttrs ( clan-pytest-with-core> E 727| name: _: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 728| addErrorContext (context name) ( clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the module argument `pkgs' in "/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/nixos/modules/services/hardware/bluetooth.nix": clan-pytest-with-core> E clan-pytest-with-core> E … noting that argument `pkgs` is not externally provided, so querying `_module.args` instead, requiring `config` clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:731:13: clan-pytest-with-core> E 730| "noting that argument `${name}` is not externally provided, so querying `_module.args` instead, requiring `config`" clan-pytest-with-core> E 731| config._module.args.${name} clan-pytest-with-core> E | ^ clan-pytest-with-core> E 732| ) clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/types.nix:1029:18: clan-pytest-with-core> E 1028| value = mapAttrs ( clan-pytest-with-core> E 1029| n: v: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1030| if lazy then clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'optionalValue.value' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1312:5: clan-pytest-with-core> E 1311| clan-pytest-with-core> E 1312| optionalValue = if isDefined then { value = mergedValue; } else { }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1313| }; 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1312:21: clan-pytest-with-core> E 1311| clan-pytest-with-core> E 1312| optionalValue = if isDefined then { value = mergedValue; } else { }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1313| }; clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'values' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1240:11: clan-pytest-with-core> E 1239| { clan-pytest-with-core> E 1240| values = defsSorted; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1241| inherit (defsFiltered) highestPrio; 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1211:11: clan-pytest-with-core> E 1210| # Avoid sorting if we don't have to. clan-pytest-with-core> E 1211| if any (def: def.value._type or "" == "order") defsFiltered.values then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1212| sortProperties defsFiltered.values clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'any' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1211:14: clan-pytest-with-core> E 1210| # Avoid sorting if we don't have to. clan-pytest-with-core> E 1211| if any (def: def.value._type or "" == "order") defsFiltered.values then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1212| sortProperties defsFiltered.values clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1211:19: clan-pytest-with-core> E 1210| # Avoid sorting if we don't have to. clan-pytest-with-core> E 1211| if any (def: def.value._type or "" == "order") defsFiltered.values then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1212| sortProperties defsFiltered.values clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'value._type' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1422:67: clan-pytest-with-core> E 1421| strip = clan-pytest-with-core> E 1422| def: if def.value._type or "" == "override" then def // { value = def.value.content; } else def; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1423| in clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'value.content' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1566:22: clan-pytest-with-core> E 1565| _type = "override"; clan-pytest-with-core> E 1566| inherit priority content; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1567| }; 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/nixos/modules/misc/nixpkgs.nix:107:15: clan-pytest-with-core> E 106| clan-pytest-with-core> E 107| finalPkgs = if opt.pkgs.isDefined then cfg.pkgs.appendOverlays cfg.overlays else defaultPkgs; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 108| clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'pkgs.isDefined' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1154:21: clan-pytest-with-core> E 1153| definitionsWithLocations = res.defsFinal; clan-pytest-with-core> E 1154| inherit (res) isDefined; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1155| inherit (res.checkedAndMerged) valueMeta; clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'isDefined' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1310:5: clan-pytest-with-core> E 1309| clan-pytest-with-core> E 1310| isDefined = defsFinal != [ ]; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1311| clan-pytest-with-core> E clan-pytest-with-core> E (6 duplicate frames omitted) clan-pytest-with-core> E clan-pytest-with-core> E error: attribute 'system' missing clan-pytest-with-core> E at /build/store/nix/store/y3h139bhv4373m1hab367ma4p5i95i2f-source/modules/clan/module.nix:164:24: clan-pytest-with-core> E 163| (lib.modules.importApply ../../nixosModules/machineModules/overridePkgs.nix { clan-pytest-with-core> E 164| pkgs = nixpkgsMatrix.${config.inventory.machines.${name}.nixpkgs}.system.${system}.pkgs; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 165| }) clan-pytest-with-core> E Did you mean systems? 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 0x7fffe640d7f0> clan-pytest-with-core> flake = clan-pytest-with-core> caplog = <_pytest.logging.LogCaptureFixture object at 0x7fffe68634d0> 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_persisted_prompt_reused_not_reasked( clan-pytest-with-core> monkeypatch: pytest.MonkeyPatch, clan-pytest-with-core> flake: ClanFlake, clan-pytest-with-core> caplog: pytest.LogCaptureFixture, clan-pytest-with-core> ) -> None: clan-pytest-with-core> """Regression (clan-core issue #5617): a persisted prompt whose value is clan-pytest-with-core> already stored must be reused, not re-prompted, when ``run_generators`` runs clan-pytest-with-core> with its defaults - the path ``clan machines update`` takes. clan-pytest-with-core> clan-pytest-with-core> ``run_generators`` used to default ``auto_accept_prompts=False``, so the clan-pytest-with-core> deploy/build/install/flash callers re-prompted for values already set (e.g. clan-pytest-with-core> via ``clan vars set``), blocking non-interactive deploys. clan-pytest-with-core> """ clan-pytest-with-core> config = flake.machines["my_machine"] = create_test_machine_config() clan-pytest-with-core> my_generator = config["clan"]["core"]["vars"]["generators"]["my_generator"] clan-pytest-with-core> my_generator["prompts"]["prompt1"]["type"] = "line" clan-pytest-with-core> my_generator["prompts"]["prompt1"]["persist"] = True clan-pytest-with-core> my_generator["files"]["prompt1"]["secret"] = False clan-pytest-with-core> flake.refresh() clan-pytest-with-core> monkeypatch.chdir(flake.path) clan-pytest-with-core> clan-pytest-with-core> key = GeneratorId(name="my_generator", placement=PerMachine("my_machine")) clan-pytest-with-core> clan-pytest-with-core> # Store the value once (mirrors `clan vars set` / the first generation). clan-pytest-with-core> > run_generators( clan-pytest-with-core> machines=[Machine(name="my_machine", flake=Flake(str(flake.path)))], clan-pytest-with-core> generators=["my_generator"], clan-pytest-with-core> prompt_values={"my_generator": {"prompt1": "stored-value"}}, clan-pytest-with-core> ) clan-pytest-with-core> clan-pytest-with-core> /build/src/clan_cli/tests/test_vars_prompts.py:555: clan-pytest-with-core> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ clan-pytest-with-core> /build/src/clan_lib/vars/generate.py:306: in run_generators clan-pytest-with-core> all_generators = get_generators(machines, full_closure=True) clan-pytest-with-core> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ clan-pytest-with-core> /build/src/clan_lib/vars/generate.py:146: in get_generators clan-pytest-with-core> flake.precache(get_generators_precache_selectors(list(all_machines))) clan-pytest-with-core> /build/src/clan_lib/flake/flake.py:1151: in precache clan-pytest-with-core> self.get_from_nix(not_fetched_selectors) clan-pytest-with-core> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ clan-pytest-with-core> clan-pytest-with-core> self = Flake(identifier='/build/pytest-d9yfla_f/flake', hash='sha256-9gMRnNKZbni8vA/QUBRz/BVkbH7BjMjND6eBJ6dL8II=', 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.?secrets.?age.?plugins', 'clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.gener...ngs.publicModule', 'clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.settings.secretModule', ...] 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 while executing:$ clan select 'clanInternals.?secrets.?age.?plugins' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.generators.*.{share,dependencies,prompts,validationHash}' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.generators.*.files.*.{secret,deploy,owner,group,mode,neededFor}' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.?sops.?defaultGroups' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.settings.publicModule' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.settings.secretModule' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.?sops.?secretUploadDirectory' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.?password-store.?passCommand' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.?password-store.?secretLocation' clan-pytest-with-core> E $ clan select 'clanInternals.vars.settings.?recipients' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.?age.?secretLocation' clan-pytest-with-core> E Reason: attribute 'system' missing clan-pytest-with-core> E at /build/store/nix/store/y3h139bhv4373m1hab367ma4p5i95i2f-source/modules/clan/module.nix:164:24: clan-pytest-with-core> E 163| (lib.modules.importApply ../../nixosModules/machineModules/overridePkgs.nix { clan-pytest-with-core> E 164| pkgs = nixpkgsMatrix.${config.inventory.machines.${name}.nixpkgs}.system.${system}.pkgs; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 165| }) clan-pytest-with-core> E Did you mean systems?. 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 setup ----------------------------- clan-pytest-with-core> !! $HOME does not point to a temp directory!! HOME=/build/pytest-d9yfla_f 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/pytest-d9yfla_f clan-pytest-with-core> ----------------------------- Captured stdout call ----------------------------- clan-pytest-with-core> [main 728bbc9] flake: update by flake generator clan-pytest-with-core> 2 files changed, 39 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> ----------------------------- Captured stderr call ----------------------------- clan-pytest-with-core> Prefetching flake /build/pytest-d9yfla_f/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/febbcab65441be6ccc547560fd0155faadebbbb7 clan-pytest-with-core> (cached) $ clan select clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> Prefetching flake /build/pytest-d9yfla_f/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.inventoryClass.relativeDirectory clan-pytest-with-core> Cache miss for clanInternals.inventoryClass.inventorySerialization.{instances,machines,meta} clan-pytest-with-core> Loading flake cache from file /build/clan-flake-cache/flakes-v2/f913d5c65cc8d77f777ba9cf7d55e5b93db115d9 clan-pytest-with-core> Precaching selectors: clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.machines clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.instances clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.meta clan-pytest-with-core> - (not cached) clanInternals.?secrets.?age.?plugins clan-pytest-with-core> - (cached) clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.generators.*.{share,dependencies,prompts,validationHash} clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.generators.*.files.*.{secret,deploy,owner,group,mode,neededFor} clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.?sops.?defaultGroups clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.settings.publicModule clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.settings.secretModule clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.?sops.?secretUploadDirectory clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.?password-store.?passCommand clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.?password-store.?secretLocation clan-pytest-with-core> - (not cached) clanInternals.vars.settings.?recipients clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.?age.?secretLocation clan-pytest-with-core> ------------------------------ Captured log call ------------------------------- clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:927 Prefetching flake /build/pytest-d9yfla_f/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/febbcab65441be6ccc547560fd0155faadebbbb7 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-d9yfla_f/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.inventoryClass.relativeDirectory clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1174 Cache miss for clanInternals.inventoryClass.inventorySerialization.{instances,machines,meta} clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:789 Loading flake cache from file /build/clan-flake-cache/flakes-v2/f913d5c65cc8d77f777ba9cf7d55e5b93db115d9 clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1144 Precaching selectors: clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.machines clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.instances clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.meta clan-pytest-with-core> - (not cached) clanInternals.?secrets.?age.?plugins clan-pytest-with-core> - (cached) clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.generators.*.{share,dependencies,prompts,validationHash} clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.generators.*.files.*.{secret,deploy,owner,group,mode,neededFor} clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.?sops.?defaultGroups clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.settings.publicModule clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.settings.secretModule clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.?sops.?secretUploadDirectory clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.?password-store.?passCommand clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.?password-store.?secretLocation clan-pytest-with-core> - (not cached) clanInternals.vars.settings.?recipients clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.?age.?secretLocation clan-pytest-with-core> _____________________________ test_api_set_prompts _____________________________ clan-pytest-with-core> [gw10] linux -- Python 3.14.7 /nix/store/3n4qphl9s728sz8frmpqqrv9b1m87g68-python3-3.14.7/bin/python clan-pytest-with-core> clan-pytest-with-core> self = Flake(identifier='/build/pytest-jhlbmqcy/flake', hash='sha256-9gMRnNKZbni8vA/QUBRz/BVkbH7BjMjND6eBJ6dL8II=', 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.?secrets.?age.?plugins', 'clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.gener...ngs.publicModule', 'clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.settings.secretModule', ...] 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-jhlbmqcy/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/78pxy03y7rvy7inpwjay78adb4f1bwsl-source?narHash=sha256-9gMRnNKZbni8vA/QUBRz/BVkbH7BjMjND6eBJ6dL8II="; 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": "maybe", "value": "secrets"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "plugins"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "share"}, {"type": "str", "value": "dependencies"}, {"type": "str", "value": "prompts"}, {"type": "str", "value": "validationHash"}]}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "str", "value": "files"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "secret"}, {"type": "str", "value": "deploy"}, {"type": "str", "value": "owner"}, {"type": "str", "value": "group"}, {"type": "str", "value": "mode"}, {"type": "str", "value": "neededFor"}]}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "defaultGroups"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "publicModule"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "secretModule"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "secretUploadDirectory"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "passCommand"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "secretLocation"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "maybe", "value": "recipients"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "secretLocation"}]'"'"''"'"') 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": "maybe", "value": "secrets"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "plugins"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "share"}, {"type": "str", "value": "dependencies"}, {"type": "str", "value": "prompts"}, {"type": "str", "value": "validationHash"}]}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "str", "value": "files"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "secret"}, {"type": "str", "value": "deploy"}, {"type": "str", "value": "owner"}, {"type": "str", "value": "group"}, {"type": "str", "value": "mode"}, {"type": "str", "value": "neededFor"}]}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "defaultGroups"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "publicModule"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "secretModule"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "secretUploadDirectory"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "passCommand"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "secretLocation"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "maybe", "value": "recipients"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "secretLocation"}]'') 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": "maybe", "value": "secrets"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "plugins"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "share"}, {"type": "str", "value": "dependencies"}, {"type": "str", "value": "prompts"}, {"type": "str", "value": "validationHash"}]}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "str", "value": "files"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "secret"}, {"type": "str", "value": "deploy"}, {"type": "str", "value": "owner"}, {"type": "str", "value": "group"}, {"type": "str", "value": "mode"}, {"type": "str", "value": "neededFor"}]}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "defaultGroups"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "publicModule"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "secretModule"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "secretUploadDirectory"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "passCommand"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "secretLocation"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "maybe", "value": "recipients"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "secretLocation"}]'') flake) clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating list element at index 1 clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating attribute 'my_machine' clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/cba1x9mxnwr8b36cw41bya7g6d5v1p7d-source/select.nix:325:37: clan-pytest-with-core> E 324| in clan-pytest-with-core> E 325| builtins.mapAttrs (_: v: recurse selectors (idx + 1) v) filteredAttrs clan-pytest-with-core> E | ^ clan-pytest-with-core> E 326| else if selector.type == "maybe" then 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:325:40: clan-pytest-with-core> E 324| in clan-pytest-with-core> E 325| builtins.mapAttrs (_: v: recurse selectors (idx + 1) v) filteredAttrs clan-pytest-with-core> E | ^ clan-pytest-with-core> E 326| else if selector.type == "maybe" then 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 … from call site clan-pytest-with-core> E at /build/store/nix/store/cba1x9mxnwr8b36cw41bya7g6d5v1p7d-source/select.nix:312:15: clan-pytest-with-core> E 311| else if selector.type == "str" then clan-pytest-with-core> E 312| recurse selectors (idx + 1) (builtins.getAttr selector.value obj) clan-pytest-with-core> E | ^ clan-pytest-with-core> E 313| else if selector.type == "set" then 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 'getAttr' builtin clan-pytest-with-core> E at /build/store/nix/store/cba1x9mxnwr8b36cw41bya7g6d5v1p7d-source/select.nix:312:44: clan-pytest-with-core> E 311| else if selector.type == "str" then clan-pytest-with-core> E 312| recurse selectors (idx + 1) (builtins.getAttr selector.value obj) clan-pytest-with-core> E | ^ clan-pytest-with-core> E 313| else if selector.type == "set" then clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'seq' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:401:18: clan-pytest-with-core> E 400| options = checked options; clan-pytest-with-core> E 401| config = checked (removeAttrs config [ "_module" ]); clan-pytest-with-core> E | ^ clan-pytest-with-core> E 402| _module = checked (config._module); 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:304:9: clan-pytest-with-core> E 303| checkUnmatched = clan-pytest-with-core> E 304| if config._module.check && config._module.freeformType == null && merged.unmatchedDefns != [ ] then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 305| let clan-pytest-with-core> E clan-pytest-with-core> E … in the right operand of the AND (&&) operator clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:304:72: clan-pytest-with-core> E 303| checkUnmatched = clan-pytest-with-core> E 304| if config._module.check && config._module.freeformType == null && merged.unmatchedDefns != [ ] then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 305| let clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'unmatchedDefns' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:940:7: clan-pytest-with-core> E 939| # Transforms unmatchedDefnsByName into a list of definitions clan-pytest-with-core> E 940| unmatchedDefns = clan-pytest-with-core> E | ^ clan-pytest-with-core> E 941| if configs == [ ] then clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'concatLists' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:946:11: clan-pytest-with-core> E 945| else clan-pytest-with-core> E 946| concatLists ( clan-pytest-with-core> E | ^ clan-pytest-with-core> E 947| mapAttrsToList ( clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:948:21: clan-pytest-with-core> E 947| mapAttrsToList ( clan-pytest-with-core> E 948| name: defs: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 949| map ( clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'map' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:949:15: clan-pytest-with-core> E 948| name: defs: clan-pytest-with-core> E 949| map ( clan-pytest-with-core> E | ^ clan-pytest-with-core> E 950| def: clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:932:22: clan-pytest-with-core> E 931| # Propagate all unmatched definitions from nested option sets clan-pytest-with-core> E 932| mapAttrs (n: v: v.unmatchedDefns) resultsByName clan-pytest-with-core> E | ^ clan-pytest-with-core> E 933| # Plus the definitions for the current prefix that don't have a matching option clan-pytest-with-core> E clan-pytest-with-core> E (10 duplicate frames omitted) clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:932:25: clan-pytest-with-core> E 931| # Propagate all unmatched definitions from nested option sets clan-pytest-with-core> E 932| mapAttrs (n: v: v.unmatchedDefns) resultsByName clan-pytest-with-core> E | ^ clan-pytest-with-core> E 933| # Plus the definitions for the current prefix that don't have a matching option clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:876:15: clan-pytest-with-core> E 875| resultsByName = mapAttrs ( clan-pytest-with-core> E 876| name: decls: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 877| # We're descending into attribute ‘name’. 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:888:9: clan-pytest-with-core> E 887| in clan-pytest-with-core> E 888| if length optionDecls == length decls then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 889| let clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'length' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:888:12: clan-pytest-with-core> E 887| in clan-pytest-with-core> E 888| if length optionDecls == length decls then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 889| let clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'filter' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:882:25: clan-pytest-with-core> E 881| defns' = rawDefinitionsByName.${name} or [ ]; clan-pytest-with-core> E 882| optionDecls = filter ( clan-pytest-with-core> E | ^ clan-pytest-with-core> E 883| m: clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:883:13: clan-pytest-with-core> E 882| optionDecls = filter ( clan-pytest-with-core> E 883| m: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 884| m.options ? _type clan-pytest-with-core> E clan-pytest-with-core> E … in the left operand of the AND (&&) operator clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:885:13: clan-pytest-with-core> E 884| m.options ? _type clan-pytest-with-core> E 885| && (m.options._type == "option" || throwDeclarationTypeError loc m.options._type m._file) clan-pytest-with-core> E | ^ clan-pytest-with-core> E 886| ) decls; clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'options' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:807:15: clan-pytest-with-core> E 806| pos = unsafeGetAttrPos n subtree; clan-pytest-with-core> E 807| options = option; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 808| }) subtree clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:289:73: clan-pytest-with-core> E 288| len = length attrPath; clan-pytest-with-core> E 289| atDepth = n: if n == len then value else { ${elemAt attrPath n} = atDepth (n + 1); }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 290| in clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'atDepth' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:289:17: clan-pytest-with-core> E 288| len = length attrPath; clan-pytest-with-core> E 289| atDepth = n: if n == len then value else { ${elemAt attrPath n} = atDepth (n + 1); }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 290| in clan-pytest-with-core> E clan-pytest-with-core> E … in the right operand of the update (//) operator clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:2047:9: clan-pytest-with-core> E 2046| } clan-pytest-with-core> E 2047| // optionalAttrs (toType != null) { clan-pytest-with-core> E | ^ clan-pytest-with-core> E 2048| type = toType; clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:2047:12: clan-pytest-with-core> E 2046| } clan-pytest-with-core> E 2047| // optionalAttrs (toType != null) { clan-pytest-with-core> E | ^ clan-pytest-with-core> E 2048| type = toType; clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'optionalAttrs' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:1492:25: clan-pytest-with-core> E 1491| */ clan-pytest-with-core> E 1492| optionalAttrs = cond: as: if cond then as else { }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1493| 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:1492:29: clan-pytest-with-core> E 1491| */ clan-pytest-with-core> E 1492| optionalAttrs = cond: as: if cond then as else { }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1493| clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:2036:17: clan-pytest-with-core> E 2035| let clan-pytest-with-core> E 2036| opt = attrByPath to { } options; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 2037| in clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'attrByPath' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:89:24: clan-pytest-with-core> E 88| attrByPath = clan-pytest-with-core> E 89| attrPath: default: set: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 90| let clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:106:5: clan-pytest-with-core> E 105| in clan-pytest-with-core> E 106| attrByPath' 0 set; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 107| clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'attrByPath'' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:93:12: clan-pytest-with-core> E 92| attrByPath' = clan-pytest-with-core> E 93| n: s: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 94| ( clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:102:35: clan-pytest-with-core> E 101| in clan-pytest-with-core> E 102| if s ? ${attr} then attrByPath' (n + 1) s.${attr} else default clan-pytest-with-core> E | ^ clan-pytest-with-core> E 103| ) clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'attrByPath'' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:93:12: clan-pytest-with-core> E 92| attrByPath' = clan-pytest-with-core> E 93| n: s: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 94| ( clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:102:35: clan-pytest-with-core> E 101| in clan-pytest-with-core> E 102| if s ? ${attr} then attrByPath' (n + 1) s.${attr} else default clan-pytest-with-core> E | ^ clan-pytest-with-core> E 103| ) clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'attrByPath'' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:93:12: clan-pytest-with-core> E 92| attrByPath' = clan-pytest-with-core> E 93| n: s: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 94| ( clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:102:35: clan-pytest-with-core> E 101| in clan-pytest-with-core> E 102| if s ? ${attr} then attrByPath' (n + 1) s.${attr} else default clan-pytest-with-core> E | ^ clan-pytest-with-core> E 103| ) clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'attrByPath'' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:93:12: clan-pytest-with-core> E 92| attrByPath' = clan-pytest-with-core> E 93| n: s: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 94| ( clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:102:55: clan-pytest-with-core> E 101| in clan-pytest-with-core> E 102| if s ? ${attr} then attrByPath' (n + 1) s.${attr} else default clan-pytest-with-core> E | ^ clan-pytest-with-core> E 103| ) clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:927:37: clan-pytest-with-core> E 926| clan-pytest-with-core> E 927| matchedOptions = mapAttrs (n: v: v.matchedOptions) resultsByName; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 928| clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'matchedOptions' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:893:13: clan-pytest-with-core> E 892| { clan-pytest-with-core> E 893| matchedOptions = evalOptionValue loc opt defns'; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 894| unmatchedDefns = [ ]; clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:893:30: clan-pytest-with-core> E 892| { clan-pytest-with-core> E 893| matchedOptions = evalOptionValue loc opt defns'; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 894| unmatchedDefns = [ ]; clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'evalOptionValue' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1103:15: clan-pytest-with-core> E 1102| evalOptionValue = clan-pytest-with-core> E 1103| loc: opt: defs: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1104| let clan-pytest-with-core> E clan-pytest-with-core> E … in the left operand of the update (//) operator clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1148:5: clan-pytest-with-core> E 1147| warnDeprecation opt clan-pytest-with-core> E 1148| // { clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1149| value = addErrorContext "while evaluating the option `${showOption loc}':" value; 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1141:9: clan-pytest-with-core> E 1140| warnDeprecation = clan-pytest-with-core> E 1141| if (opt.type.deprecationMessage != null) then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1142| warn "The type `types.${opt.type.name}' of option `${showOption loc}' defined in ${showFiles opt.declarations} is deprecated. ${opt.type.deprecationMessage}" clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:890:19: clan-pytest-with-core> E 889| let clan-pytest-with-core> E 890| opt = fixupOptionType loc (mergeOptionDecls loc decls); clan-pytest-with-core> E | ^ clan-pytest-with-core> E 891| in clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'fixupOptionType' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1473:10: clan-pytest-with-core> E 1472| fixupOptionType = clan-pytest-with-core> E 1473| loc: opt: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1474| if opt.type.getSubModules or null == null then 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1474:5: clan-pytest-with-core> E 1473| loc: opt: clan-pytest-with-core> E 1474| if opt.type.getSubModules or null == null then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1475| opt // { type = opt.type or types.unspecified; } clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'type.getSubModules' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/nixos/modules/services/hardware/bluetooth.nix:72:9: clan-pytest-with-core> E 71| settings = mkOption { clan-pytest-with-core> E 72| type = cfgFmt.type; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 73| default = { }; clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/nixos/modules/services/hardware/bluetooth.nix:26:12: clan-pytest-with-core> E 25| clan-pytest-with-core> E 26| cfgFmt = pkgs.formats.ini { }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 27| clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:727:15: clan-pytest-with-core> E 726| extraArgs = mapAttrs ( clan-pytest-with-core> E 727| name: _: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 728| addErrorContext (context name) ( clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the module argument `pkgs' in "/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/nixos/modules/services/hardware/bluetooth.nix": clan-pytest-with-core> E clan-pytest-with-core> E … noting that argument `pkgs` is not externally provided, so querying `_module.args` instead, requiring `config` clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:731:13: clan-pytest-with-core> E 730| "noting that argument `${name}` is not externally provided, so querying `_module.args` instead, requiring `config`" clan-pytest-with-core> E 731| config._module.args.${name} clan-pytest-with-core> E | ^ clan-pytest-with-core> E 732| ) clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/types.nix:1029:18: clan-pytest-with-core> E 1028| value = mapAttrs ( clan-pytest-with-core> E 1029| n: v: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1030| if lazy then clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'optionalValue.value' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1312:5: clan-pytest-with-core> E 1311| clan-pytest-with-core> E 1312| optionalValue = if isDefined then { value = mergedValue; } else { }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1313| }; 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1312:21: clan-pytest-with-core> E 1311| clan-pytest-with-core> E 1312| optionalValue = if isDefined then { value = mergedValue; } else { }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1313| }; clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'values' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1240:11: clan-pytest-with-core> E 1239| { clan-pytest-with-core> E 1240| values = defsSorted; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1241| inherit (defsFiltered) highestPrio; 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1211:11: clan-pytest-with-core> E 1210| # Avoid sorting if we don't have to. clan-pytest-with-core> E 1211| if any (def: def.value._type or "" == "order") defsFiltered.values then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1212| sortProperties defsFiltered.values clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'any' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1211:14: clan-pytest-with-core> E 1210| # Avoid sorting if we don't have to. clan-pytest-with-core> E 1211| if any (def: def.value._type or "" == "order") defsFiltered.values then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1212| sortProperties defsFiltered.values clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1211:19: clan-pytest-with-core> E 1210| # Avoid sorting if we don't have to. clan-pytest-with-core> E 1211| if any (def: def.value._type or "" == "order") defsFiltered.values then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1212| sortProperties defsFiltered.values clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'value._type' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1422:67: clan-pytest-with-core> E 1421| strip = clan-pytest-with-core> E 1422| def: if def.value._type or "" == "override" then def // { value = def.value.content; } else def; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1423| in clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'value.content' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1566:22: clan-pytest-with-core> E 1565| _type = "override"; clan-pytest-with-core> E 1566| inherit priority content; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1567| }; 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/nixos/modules/misc/nixpkgs.nix:107:15: clan-pytest-with-core> E 106| clan-pytest-with-core> E 107| finalPkgs = if opt.pkgs.isDefined then cfg.pkgs.appendOverlays cfg.overlays else defaultPkgs; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 108| clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'pkgs.isDefined' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1154:21: clan-pytest-with-core> E 1153| definitionsWithLocations = res.defsFinal; clan-pytest-with-core> E 1154| inherit (res) isDefined; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1155| inherit (res.checkedAndMerged) valueMeta; clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'isDefined' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1310:5: clan-pytest-with-core> E 1309| clan-pytest-with-core> E 1310| isDefined = defsFinal != [ ]; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1311| clan-pytest-with-core> E clan-pytest-with-core> E (6 duplicate frames omitted) clan-pytest-with-core> E clan-pytest-with-core> E error: attribute 'system' missing clan-pytest-with-core> E at /build/store/nix/store/y3h139bhv4373m1hab367ma4p5i95i2f-source/modules/clan/module.nix:164:24: clan-pytest-with-core> E 163| (lib.modules.importApply ../../nixosModules/machineModules/overridePkgs.nix { clan-pytest-with-core> E 164| pkgs = nixpkgsMatrix.${config.inventory.machines.${name}.nixpkgs}.system.${system}.pkgs; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 165| }) clan-pytest-with-core> E Did you mean systems? 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 0x7fffe64eb150> clan-pytest-with-core> flake = 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_api_set_prompts( clan-pytest-with-core> monkeypatch: pytest.MonkeyPatch, clan-pytest-with-core> flake: ClanFlake, clan-pytest-with-core> ) -> None: clan-pytest-with-core> config = flake.machines["my_machine"] = create_test_machine_config() clan-pytest-with-core> my_generator = config["clan"]["core"]["vars"]["generators"]["my_generator"] clan-pytest-with-core> my_generator["prompts"]["prompt1"]["type"] = "line" clan-pytest-with-core> my_generator["prompts"]["prompt1"]["persist"] = True clan-pytest-with-core> my_generator["files"]["prompt1"]["secret"] = False clan-pytest-with-core> flake.refresh() clan-pytest-with-core> clan-pytest-with-core> monkeypatch.chdir(flake.path) clan-pytest-with-core> clan-pytest-with-core> > run_generators( clan-pytest-with-core> machines=[Machine(name="my_machine", flake=Flake(str(flake.path)))], clan-pytest-with-core> generators=["my_generator"], clan-pytest-with-core> prompt_values={ clan-pytest-with-core> "my_generator": { clan-pytest-with-core> "prompt1": "input1", clan-pytest-with-core> }, clan-pytest-with-core> }, clan-pytest-with-core> ) clan-pytest-with-core> clan-pytest-with-core> /build/src/clan_cli/tests/test_vars_prompts.py:421: clan-pytest-with-core> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ clan-pytest-with-core> /build/src/clan_lib/vars/generate.py:306: in run_generators clan-pytest-with-core> all_generators = get_generators(machines, full_closure=True) clan-pytest-with-core> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ clan-pytest-with-core> /build/src/clan_lib/vars/generate.py:146: in get_generators clan-pytest-with-core> flake.precache(get_generators_precache_selectors(list(all_machines))) clan-pytest-with-core> /build/src/clan_lib/flake/flake.py:1151: in precache clan-pytest-with-core> self.get_from_nix(not_fetched_selectors) clan-pytest-with-core> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ clan-pytest-with-core> clan-pytest-with-core> self = Flake(identifier='/build/pytest-jhlbmqcy/flake', hash='sha256-9gMRnNKZbni8vA/QUBRz/BVkbH7BjMjND6eBJ6dL8II=', 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.?secrets.?age.?plugins', 'clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.gener...ngs.publicModule', 'clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.settings.secretModule', ...] 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 while executing:$ clan select 'clanInternals.?secrets.?age.?plugins' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.generators.*.{share,dependencies,prompts,validationHash}' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.generators.*.files.*.{secret,deploy,owner,group,mode,neededFor}' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.?sops.?defaultGroups' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.settings.publicModule' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.settings.secretModule' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.?sops.?secretUploadDirectory' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.?password-store.?passCommand' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.?password-store.?secretLocation' clan-pytest-with-core> E $ clan select 'clanInternals.vars.settings.?recipients' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.?age.?secretLocation' clan-pytest-with-core> E Reason: attribute 'system' missing clan-pytest-with-core> E at /build/store/nix/store/y3h139bhv4373m1hab367ma4p5i95i2f-source/modules/clan/module.nix:164:24: clan-pytest-with-core> E 163| (lib.modules.importApply ../../nixosModules/machineModules/overridePkgs.nix { clan-pytest-with-core> E 164| pkgs = nixpkgsMatrix.${config.inventory.machines.${name}.nixpkgs}.system.${system}.pkgs; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 165| }) clan-pytest-with-core> E Did you mean systems?. 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 setup ----------------------------- clan-pytest-with-core> !! $HOME does not point to a temp directory!! HOME=/build/pytest-jhlbmqcy 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/pytest-jhlbmqcy clan-pytest-with-core> ----------------------------- Captured stdout call ----------------------------- clan-pytest-with-core> [main 9089258] flake: update by flake generator clan-pytest-with-core> 2 files changed, 39 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> ----------------------------- Captured stderr call ----------------------------- clan-pytest-with-core> Prefetching flake /build/pytest-jhlbmqcy/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/febbcab65441be6ccc547560fd0155faadebbbb7 clan-pytest-with-core> (cached) $ clan select clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> Prefetching flake /build/pytest-jhlbmqcy/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/f913d5c65cc8d77f777ba9cf7d55e5b93db115d9 clan-pytest-with-core> (cached) $ clan select clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> (cached) $ clan select 'clanInternals.inventoryClass.inventorySerialization.{instances,machines,meta}' clan-pytest-with-core> Precaching selectors: clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.machines clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.instances clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.meta clan-pytest-with-core> - (not cached) clanInternals.?secrets.?age.?plugins clan-pytest-with-core> - (cached) clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.generators.*.{share,dependencies,prompts,validationHash} clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.generators.*.files.*.{secret,deploy,owner,group,mode,neededFor} clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.?sops.?defaultGroups clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.settings.publicModule clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.settings.secretModule clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.?sops.?secretUploadDirectory clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.?password-store.?passCommand clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.?password-store.?secretLocation clan-pytest-with-core> - (not cached) clanInternals.vars.settings.?recipients clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.?age.?secretLocation clan-pytest-with-core> ------------------------------ Captured log call ------------------------------- clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:927 Prefetching flake /build/pytest-jhlbmqcy/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/febbcab65441be6ccc547560fd0155faadebbbb7 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-jhlbmqcy/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/f913d5c65cc8d77f777ba9cf7d55e5b93db115d9 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:1179 (cached) $ clan select 'clanInternals.inventoryClass.inventorySerialization.{instances,machines,meta}' clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1144 Precaching selectors: clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.machines clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.instances clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.meta clan-pytest-with-core> - (not cached) clanInternals.?secrets.?age.?plugins clan-pytest-with-core> - (cached) clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.generators.*.{share,dependencies,prompts,validationHash} clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.generators.*.files.*.{secret,deploy,owner,group,mode,neededFor} clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.?sops.?defaultGroups clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.settings.publicModule clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.settings.secretModule clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.?sops.?secretUploadDirectory clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.?password-store.?passCommand clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.?password-store.?secretLocation clan-pytest-with-core> - (not cached) clanInternals.vars.settings.?recipients clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.?age.?secretLocation clan-pytest-with-core> ________________ test_age_set_shared_var_for_multiple_machines _________________ clan-pytest-with-core> [gw5] linux -- Python 3.14.7 /nix/store/3n4qphl9s728sz8frmpqqrv9b1m87g68-python3-3.14.7/bin/python clan-pytest-with-core> clan-pytest-with-core> self = Flake(identifier='/build/pytest-en1lixrs/flake', hash='sha256-QTrMusfgRbC0bHoF4SiYeSN7bfMSmARaZHdfz8/y12I=', 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.?secrets.?age.?plugins', 'clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.var...licModule', 'clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.settings.secretModule', ...] 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-en1lixrs/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/bdrbnpayxn5w535zgd4q0bjghvjw24yq-source?narHash=sha256-QTrMusfgRbC0bHoF4SiYeSN7bfMSmARaZHdfz8/y12I="; 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": "maybe", "value": "secrets"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "plugins"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "share"}, {"type": "str", "value": "dependencies"}, {"type": "str", "value": "prompts"}, {"type": "str", "value": "validationHash"}]}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "str", "value": "files"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "secret"}, {"type": "str", "value": "deploy"}, {"type": "str", "value": "owner"}, {"type": "str", "value": "group"}, {"type": "str", "value": "mode"}, {"type": "str", "value": "neededFor"}]}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "defaultGroups"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "publicModule"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "secretModule"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "secretUploadDirectory"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "passCommand"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "secretLocation"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "maybe", "value": "recipients"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "secretLocation"}]'"'"''"'"') 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": "maybe", "value": "secrets"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "plugins"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "share"}, {"type": "str", "value": "dependencies"}, {"type": "str", "value": "prompts"}, {"type": "str", "value": "validationHash"}]}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "str", "value": "files"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "secret"}, {"type": "str", "value": "deploy"}, {"type": "str", "value": "owner"}, {"type": "str", "value": "group"}, {"type": "str", "value": "mode"}, {"type": "str", "value": "neededFor"}]}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "defaultGroups"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "publicModule"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "secretModule"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "secretUploadDirectory"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "passCommand"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "secretLocation"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "maybe", "value": "recipients"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "secretLocation"}]'') 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": "maybe", "value": "secrets"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "plugins"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "share"}, {"type": "str", "value": "dependencies"}, {"type": "str", "value": "prompts"}, {"type": "str", "value": "validationHash"}]}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "str", "value": "files"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "secret"}, {"type": "str", "value": "deploy"}, {"type": "str", "value": "owner"}, {"type": "str", "value": "group"}, {"type": "str", "value": "mode"}, {"type": "str", "value": "neededFor"}]}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "defaultGroups"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "publicModule"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "secretModule"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "secretUploadDirectory"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "passCommand"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "secretLocation"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "maybe", "value": "recipients"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "secretLocation"}]'') flake) clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating list element at index 1 clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating attribute 'machine1' clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/cba1x9mxnwr8b36cw41bya7g6d5v1p7d-source/select.nix:325:37: clan-pytest-with-core> E 324| in clan-pytest-with-core> E 325| builtins.mapAttrs (_: v: recurse selectors (idx + 1) v) filteredAttrs clan-pytest-with-core> E | ^ clan-pytest-with-core> E 326| else if selector.type == "maybe" then 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:325:40: clan-pytest-with-core> E 324| in clan-pytest-with-core> E 325| builtins.mapAttrs (_: v: recurse selectors (idx + 1) v) filteredAttrs clan-pytest-with-core> E | ^ clan-pytest-with-core> E 326| else if selector.type == "maybe" then 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 … from call site clan-pytest-with-core> E at /build/store/nix/store/cba1x9mxnwr8b36cw41bya7g6d5v1p7d-source/select.nix:312:15: clan-pytest-with-core> E 311| else if selector.type == "str" then clan-pytest-with-core> E 312| recurse selectors (idx + 1) (builtins.getAttr selector.value obj) clan-pytest-with-core> E | ^ clan-pytest-with-core> E 313| else if selector.type == "set" then 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 'getAttr' builtin clan-pytest-with-core> E at /build/store/nix/store/cba1x9mxnwr8b36cw41bya7g6d5v1p7d-source/select.nix:312:44: clan-pytest-with-core> E 311| else if selector.type == "str" then clan-pytest-with-core> E 312| recurse selectors (idx + 1) (builtins.getAttr selector.value obj) clan-pytest-with-core> E | ^ clan-pytest-with-core> E 313| else if selector.type == "set" then clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'seq' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:401:18: clan-pytest-with-core> E 400| options = checked options; clan-pytest-with-core> E 401| config = checked (removeAttrs config [ "_module" ]); clan-pytest-with-core> E | ^ clan-pytest-with-core> E 402| _module = checked (config._module); 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:304:9: clan-pytest-with-core> E 303| checkUnmatched = clan-pytest-with-core> E 304| if config._module.check && config._module.freeformType == null && merged.unmatchedDefns != [ ] then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 305| let clan-pytest-with-core> E clan-pytest-with-core> E … in the right operand of the AND (&&) operator clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:304:72: clan-pytest-with-core> E 303| checkUnmatched = clan-pytest-with-core> E 304| if config._module.check && config._module.freeformType == null && merged.unmatchedDefns != [ ] then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 305| let clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'unmatchedDefns' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:940:7: clan-pytest-with-core> E 939| # Transforms unmatchedDefnsByName into a list of definitions clan-pytest-with-core> E 940| unmatchedDefns = clan-pytest-with-core> E | ^ clan-pytest-with-core> E 941| if configs == [ ] then clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'concatLists' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:946:11: clan-pytest-with-core> E 945| else clan-pytest-with-core> E 946| concatLists ( clan-pytest-with-core> E | ^ clan-pytest-with-core> E 947| mapAttrsToList ( clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:948:21: clan-pytest-with-core> E 947| mapAttrsToList ( clan-pytest-with-core> E 948| name: defs: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 949| map ( clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'map' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:949:15: clan-pytest-with-core> E 948| name: defs: clan-pytest-with-core> E 949| map ( clan-pytest-with-core> E | ^ clan-pytest-with-core> E 950| def: clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:932:22: clan-pytest-with-core> E 931| # Propagate all unmatched definitions from nested option sets clan-pytest-with-core> E 932| mapAttrs (n: v: v.unmatchedDefns) resultsByName clan-pytest-with-core> E | ^ clan-pytest-with-core> E 933| # Plus the definitions for the current prefix that don't have a matching option clan-pytest-with-core> E clan-pytest-with-core> E (10 duplicate frames omitted) clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:932:25: clan-pytest-with-core> E 931| # Propagate all unmatched definitions from nested option sets clan-pytest-with-core> E 932| mapAttrs (n: v: v.unmatchedDefns) resultsByName clan-pytest-with-core> E | ^ clan-pytest-with-core> E 933| # Plus the definitions for the current prefix that don't have a matching option clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:876:15: clan-pytest-with-core> E 875| resultsByName = mapAttrs ( clan-pytest-with-core> E 876| name: decls: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 877| # We're descending into attribute ‘name’. 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:888:9: clan-pytest-with-core> E 887| in clan-pytest-with-core> E 888| if length optionDecls == length decls then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 889| let clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'length' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:888:12: clan-pytest-with-core> E 887| in clan-pytest-with-core> E 888| if length optionDecls == length decls then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 889| let clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'filter' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:882:25: clan-pytest-with-core> E 881| defns' = rawDefinitionsByName.${name} or [ ]; clan-pytest-with-core> E 882| optionDecls = filter ( clan-pytest-with-core> E | ^ clan-pytest-with-core> E 883| m: clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:883:13: clan-pytest-with-core> E 882| optionDecls = filter ( clan-pytest-with-core> E 883| m: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 884| m.options ? _type clan-pytest-with-core> E clan-pytest-with-core> E … in the left operand of the AND (&&) operator clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:885:13: clan-pytest-with-core> E 884| m.options ? _type clan-pytest-with-core> E 885| && (m.options._type == "option" || throwDeclarationTypeError loc m.options._type m._file) clan-pytest-with-core> E | ^ clan-pytest-with-core> E 886| ) decls; clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'options' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:807:15: clan-pytest-with-core> E 806| pos = unsafeGetAttrPos n subtree; clan-pytest-with-core> E 807| options = option; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 808| }) subtree clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:289:73: clan-pytest-with-core> E 288| len = length attrPath; clan-pytest-with-core> E 289| atDepth = n: if n == len then value else { ${elemAt attrPath n} = atDepth (n + 1); }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 290| in clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'atDepth' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:289:17: clan-pytest-with-core> E 288| len = length attrPath; clan-pytest-with-core> E 289| atDepth = n: if n == len then value else { ${elemAt attrPath n} = atDepth (n + 1); }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 290| in clan-pytest-with-core> E clan-pytest-with-core> E … in the right operand of the update (//) operator clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:2047:9: clan-pytest-with-core> E 2046| } clan-pytest-with-core> E 2047| // optionalAttrs (toType != null) { clan-pytest-with-core> E | ^ clan-pytest-with-core> E 2048| type = toType; clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:2047:12: clan-pytest-with-core> E 2046| } clan-pytest-with-core> E 2047| // optionalAttrs (toType != null) { clan-pytest-with-core> E | ^ clan-pytest-with-core> E 2048| type = toType; clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'optionalAttrs' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:1492:25: clan-pytest-with-core> E 1491| */ clan-pytest-with-core> E 1492| optionalAttrs = cond: as: if cond then as else { }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1493| 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:1492:29: clan-pytest-with-core> E 1491| */ clan-pytest-with-core> E 1492| optionalAttrs = cond: as: if cond then as else { }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1493| clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:2036:17: clan-pytest-with-core> E 2035| let clan-pytest-with-core> E 2036| opt = attrByPath to { } options; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 2037| in clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'attrByPath' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:89:24: clan-pytest-with-core> E 88| attrByPath = clan-pytest-with-core> E 89| attrPath: default: set: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 90| let clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:106:5: clan-pytest-with-core> E 105| in clan-pytest-with-core> E 106| attrByPath' 0 set; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 107| clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'attrByPath'' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:93:12: clan-pytest-with-core> E 92| attrByPath' = clan-pytest-with-core> E 93| n: s: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 94| ( clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:102:35: clan-pytest-with-core> E 101| in clan-pytest-with-core> E 102| if s ? ${attr} then attrByPath' (n + 1) s.${attr} else default clan-pytest-with-core> E | ^ clan-pytest-with-core> E 103| ) clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'attrByPath'' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:93:12: clan-pytest-with-core> E 92| attrByPath' = clan-pytest-with-core> E 93| n: s: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 94| ( clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:102:35: clan-pytest-with-core> E 101| in clan-pytest-with-core> E 102| if s ? ${attr} then attrByPath' (n + 1) s.${attr} else default clan-pytest-with-core> E | ^ clan-pytest-with-core> E 103| ) clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'attrByPath'' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:93:12: clan-pytest-with-core> E 92| attrByPath' = clan-pytest-with-core> E 93| n: s: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 94| ( clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:102:35: clan-pytest-with-core> E 101| in clan-pytest-with-core> E 102| if s ? ${attr} then attrByPath' (n + 1) s.${attr} else default clan-pytest-with-core> E | ^ clan-pytest-with-core> E 103| ) clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'attrByPath'' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:93:12: clan-pytest-with-core> E 92| attrByPath' = clan-pytest-with-core> E 93| n: s: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 94| ( clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:102:55: clan-pytest-with-core> E 101| in clan-pytest-with-core> E 102| if s ? ${attr} then attrByPath' (n + 1) s.${attr} else default clan-pytest-with-core> E | ^ clan-pytest-with-core> E 103| ) clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:927:37: clan-pytest-with-core> E 926| clan-pytest-with-core> E 927| matchedOptions = mapAttrs (n: v: v.matchedOptions) resultsByName; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 928| clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'matchedOptions' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:893:13: clan-pytest-with-core> E 892| { clan-pytest-with-core> E 893| matchedOptions = evalOptionValue loc opt defns'; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 894| unmatchedDefns = [ ]; clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:893:30: clan-pytest-with-core> E 892| { clan-pytest-with-core> E 893| matchedOptions = evalOptionValue loc opt defns'; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 894| unmatchedDefns = [ ]; clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'evalOptionValue' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1103:15: clan-pytest-with-core> E 1102| evalOptionValue = clan-pytest-with-core> E 1103| loc: opt: defs: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1104| let clan-pytest-with-core> E clan-pytest-with-core> E … in the left operand of the update (//) operator clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1148:5: clan-pytest-with-core> E 1147| warnDeprecation opt clan-pytest-with-core> E 1148| // { clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1149| value = addErrorContext "while evaluating the option `${showOption loc}':" value; 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1141:9: clan-pytest-with-core> E 1140| warnDeprecation = clan-pytest-with-core> E 1141| if (opt.type.deprecationMessage != null) then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1142| warn "The type `types.${opt.type.name}' of option `${showOption loc}' defined in ${showFiles opt.declarations} is deprecated. ${opt.type.deprecationMessage}" clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:890:19: clan-pytest-with-core> E 889| let clan-pytest-with-core> E 890| opt = fixupOptionType loc (mergeOptionDecls loc decls); clan-pytest-with-core> E | ^ clan-pytest-with-core> E 891| in clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'fixupOptionType' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1473:10: clan-pytest-with-core> E 1472| fixupOptionType = clan-pytest-with-core> E 1473| loc: opt: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1474| if opt.type.getSubModules or null == null then 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1474:5: clan-pytest-with-core> E 1473| loc: opt: clan-pytest-with-core> E 1474| if opt.type.getSubModules or null == null then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1475| opt // { type = opt.type or types.unspecified; } clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'type.getSubModules' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/nixos/modules/services/hardware/bluetooth.nix:72:9: clan-pytest-with-core> E 71| settings = mkOption { clan-pytest-with-core> E 72| type = cfgFmt.type; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 73| default = { }; clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/nixos/modules/services/hardware/bluetooth.nix:26:12: clan-pytest-with-core> E 25| clan-pytest-with-core> E 26| cfgFmt = pkgs.formats.ini { }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 27| clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:727:15: clan-pytest-with-core> E 726| extraArgs = mapAttrs ( clan-pytest-with-core> E 727| name: _: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 728| addErrorContext (context name) ( clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the module argument `pkgs' in "/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/nixos/modules/services/hardware/bluetooth.nix": clan-pytest-with-core> E clan-pytest-with-core> E … noting that argument `pkgs` is not externally provided, so querying `_module.args` instead, requiring `config` clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:731:13: clan-pytest-with-core> E 730| "noting that argument `${name}` is not externally provided, so querying `_module.args` instead, requiring `config`" clan-pytest-with-core> E 731| config._module.args.${name} clan-pytest-with-core> E | ^ clan-pytest-with-core> E 732| ) clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/types.nix:1029:18: clan-pytest-with-core> E 1028| value = mapAttrs ( clan-pytest-with-core> E 1029| n: v: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1030| if lazy then clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'optionalValue.value' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1312:5: clan-pytest-with-core> E 1311| clan-pytest-with-core> E 1312| optionalValue = if isDefined then { value = mergedValue; } else { }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1313| }; 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1312:21: clan-pytest-with-core> E 1311| clan-pytest-with-core> E 1312| optionalValue = if isDefined then { value = mergedValue; } else { }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1313| }; clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'values' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1240:11: clan-pytest-with-core> E 1239| { clan-pytest-with-core> E 1240| values = defsSorted; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1241| inherit (defsFiltered) highestPrio; 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1211:11: clan-pytest-with-core> E 1210| # Avoid sorting if we don't have to. clan-pytest-with-core> E 1211| if any (def: def.value._type or "" == "order") defsFiltered.values then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1212| sortProperties defsFiltered.values clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'any' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1211:14: clan-pytest-with-core> E 1210| # Avoid sorting if we don't have to. clan-pytest-with-core> E 1211| if any (def: def.value._type or "" == "order") defsFiltered.values then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1212| sortProperties defsFiltered.values clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1211:19: clan-pytest-with-core> E 1210| # Avoid sorting if we don't have to. clan-pytest-with-core> E 1211| if any (def: def.value._type or "" == "order") defsFiltered.values then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1212| sortProperties defsFiltered.values clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'value._type' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1422:67: clan-pytest-with-core> E 1421| strip = clan-pytest-with-core> E 1422| def: if def.value._type or "" == "override" then def // { value = def.value.content; } else def; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1423| in clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'value.content' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1566:22: clan-pytest-with-core> E 1565| _type = "override"; clan-pytest-with-core> E 1566| inherit priority content; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1567| }; 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/nixos/modules/misc/nixpkgs.nix:107:15: clan-pytest-with-core> E 106| clan-pytest-with-core> E 107| finalPkgs = if opt.pkgs.isDefined then cfg.pkgs.appendOverlays cfg.overlays else defaultPkgs; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 108| clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'pkgs.isDefined' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1154:21: clan-pytest-with-core> E 1153| definitionsWithLocations = res.defsFinal; clan-pytest-with-core> E 1154| inherit (res) isDefined; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1155| inherit (res.checkedAndMerged) valueMeta; clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'isDefined' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1310:5: clan-pytest-with-core> E 1309| clan-pytest-with-core> E 1310| isDefined = defsFinal != [ ]; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1311| clan-pytest-with-core> E clan-pytest-with-core> E (6 duplicate frames omitted) clan-pytest-with-core> E clan-pytest-with-core> E error: attribute 'system' missing clan-pytest-with-core> E at /build/store/nix/store/y3h139bhv4373m1hab367ma4p5i95i2f-source/modules/clan/module.nix:164:24: clan-pytest-with-core> E 163| (lib.modules.importApply ../../nixosModules/machineModules/overridePkgs.nix { clan-pytest-with-core> E 164| pkgs = nixpkgsMatrix.${config.inventory.machines.${name}.nixpkgs}.system.${system}.pkgs; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 165| }) clan-pytest-with-core> E Did you mean systems? 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 0x7fffe63e3950> 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> def test_age_set_shared_var_for_multiple_machines( 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> """Test that set_var on a shared secret (age backend) appends recipients clan-pytest-with-core> rather than overwriting them, and last written value wins. clan-pytest-with-core> """ clan-pytest-with-core> age_key = age_keys[0] clan-pytest-with-core> clan-pytest-with-core> for m in ["machine1", "machine2"]: clan-pytest-with-core> config = flake.machines[m] = create_test_machine_config() clan-pytest-with-core> clan_vars = config["clan"]["core"]["vars"] clan-pytest-with-core> clan_vars["settings"]["secretStore"] = "age" clan-pytest-with-core> shared_gen = clan_vars["generators"]["shared_generator"] clan-pytest-with-core> shared_gen["share"] = True clan-pytest-with-core> shared_gen["files"]["my_secret"]["secret"] = True clan-pytest-with-core> shared_gen["script"] = 'echo -n "initial" > "$out"/my_secret' clan-pytest-with-core> clan-pytest-with-core> flake.refresh() clan-pytest-with-core> monkeypatch.chdir(flake.path) clan-pytest-with-core> clan-pytest-with-core> (flake.path / "clan.nix").write_text( clan-pytest-with-core> f"{{\n" clan-pytest-with-core> f' vars.settings.recipients.hosts.machine1 = ["{age_key.pubkey}"];\n' clan-pytest-with-core> f' vars.settings.recipients.hosts.machine2 = ["{age_key.pubkey}"];\n' clan-pytest-with-core> f"}}\n" clan-pytest-with-core> ) clan-pytest-with-core> clan-pytest-with-core> age_key_dir = flake.path / ".age" clan-pytest-with-core> age_key_dir.mkdir() clan-pytest-with-core> age_key_file = age_key_dir / "key.txt" clan-pytest-with-core> age_key_file.write_text(age_key.privkey) clan-pytest-with-core> monkeypatch.setenv("AGE_KEYFILE", str(age_key_file)) clan-pytest-with-core> clan-pytest-with-core> subprocess.run(["git", "add", "."], cwd=flake.path, check=True) clan-pytest-with-core> subprocess.run( clan-pytest-with-core> ["git", "commit", "-m", "setup age shared var test"], clan-pytest-with-core> cwd=flake.path, clan-pytest-with-core> check=True, clan-pytest-with-core> ) clan-pytest-with-core> clan-pytest-with-core> gen_id = GeneratorId(name="shared_generator", placement=Shared()) clan-pytest-with-core> clan-pytest-with-core> def assert_both_machines_decrypt(expected: bytes) -> None: clan-pytest-with-core> store = age.SecretStore(flake=Flake(str(flake.path))) clan-pytest-with-core> for m in ["machine1", "machine2"]: clan-pytest-with-core> key = store.decrypt_machine_key(m) clan-pytest-with-core> secret_file = store.secret_path(gen_id, "my_secret") clan-pytest-with-core> actual = store._run_age_decrypt_with_key(secret_file, key) clan-pytest-with-core> assert actual == expected, ( clan-pytest-with-core> f"{m} decrypted {actual!r}, expected {expected!r}" clan-pytest-with-core> ) clan-pytest-with-core> clan-pytest-with-core> # Generate vars for both machines (creates machine keys and initial value) clan-pytest-with-core> > cli.run(["vars", "generate", "--flake", str(flake.path)]) clan-pytest-with-core> clan-pytest-with-core> /build/src/clan_cli/tests/test_vars_shared.py:707: 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/vars/generate.py:33: in generate_command clan-pytest-with-core> run_generators( clan-pytest-with-core> /build/src/clan_lib/vars/generate.py:306: in run_generators clan-pytest-with-core> all_generators = get_generators(machines, full_closure=True) clan-pytest-with-core> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ clan-pytest-with-core> /build/src/clan_lib/vars/generate.py:146: in get_generators clan-pytest-with-core> flake.precache(get_generators_precache_selectors(list(all_machines))) clan-pytest-with-core> /build/src/clan_lib/flake/flake.py:1151: in precache clan-pytest-with-core> self.get_from_nix(not_fetched_selectors) clan-pytest-with-core> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ clan-pytest-with-core> clan-pytest-with-core> self = Flake(identifier='/build/pytest-en1lixrs/flake', hash='sha256-QTrMusfgRbC0bHoF4SiYeSN7bfMSmARaZHdfz8/y12I=', 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.?secrets.?age.?plugins', 'clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.var...licModule', 'clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.settings.secretModule', ...] 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 while executing:$ clan select 'clanInternals.?secrets.?age.?plugins' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.generators.*.{share,dependencies,prompts,validationHash}' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.generators.*.files.*.{secret,deploy,owner,group,mode,neededFor}' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.?sops.?defaultGroups' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.settings.publicModule' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.settings.secretModule' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.?sops.?secretUploadDirectory' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.?password-store.?passCommand' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.?password-store.?secretLocation' clan-pytest-with-core> E $ clan select 'clanInternals.vars.settings.?recipients' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.?age.?secretLocation' clan-pytest-with-core> E Reason: attribute 'system' missing clan-pytest-with-core> E at /build/store/nix/store/y3h139bhv4373m1hab367ma4p5i95i2f-source/modules/clan/module.nix:164:24: clan-pytest-with-core> E 163| (lib.modules.importApply ../../nixosModules/machineModules/overridePkgs.nix { clan-pytest-with-core> E 164| pkgs = nixpkgsMatrix.${config.inventory.machines.${name}.nixpkgs}.system.${system}.pkgs; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 165| }) clan-pytest-with-core> E Did you mean systems?. 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 setup ----------------------------- clan-pytest-with-core> !! $HOME does not point to a temp directory!! HOME=/build/pytest-en1lixrs 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/pytest-en1lixrs clan-pytest-with-core> ----------------------------- Captured stdout call ----------------------------- clan-pytest-with-core> [main 8fea109] flake: update by flake generator clan-pytest-with-core> 4 files changed, 76 insertions(+) clan-pytest-with-core> create mode 100644 machines/machine1/configuration.json clan-pytest-with-core> create mode 100644 machines/machine1/configuration.nix clan-pytest-with-core> create mode 100644 machines/machine2/configuration.json clan-pytest-with-core> create mode 100644 machines/machine2/configuration.nix clan-pytest-with-core> [main b6bbd54] setup age shared var test clan-pytest-with-core> 2 files changed, 5 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-en1lixrs/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/febbcab65441be6ccc547560fd0155faadebbbb7 clan-pytest-with-core> (cached) $ clan select clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> Prefetching flake /build/pytest-en1lixrs/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/febbcab65441be6ccc547560fd0155faadebbbb7 clan-pytest-with-core> (cached) $ clan select clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> [localhost] $ clan vars generate --flake /build/pytest-en1lixrs/flake clan-pytest-with-core> Caller: /build/src/clan_cli/tests/test_vars_shared.py:707::test_age_set_shared_var_for_multiple_machines clan-pytest-with-core> clan-pytest-with-core> Prefetching flake /build/pytest-en1lixrs/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.cliChecks clan-pytest-with-core> Cache miss for clanInternals.inventoryClass.inventorySerialization.{instances,machines,meta} clan-pytest-with-core> Loading flake cache from file /build/clan-flake-cache/flakes-v2/4aa2fd3129c5969e194eb46cd9c2681e643a32fd clan-pytest-with-core> Cache miss for clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> Loading flake cache from file /build/clan-flake-cache/flakes-v2/4aa2fd3129c5969e194eb46cd9c2681e643a32fd clan-pytest-with-core> (cached) $ clan select 'clanInternals.inventoryClass.inventorySerialization.{instances,machines,meta}' clan-pytest-with-core> Precaching selectors: clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.machines clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.instances clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.meta clan-pytest-with-core> - (not cached) clanInternals.?secrets.?age.?plugins clan-pytest-with-core> - (cached) clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.generators.*.{share,dependencies,prompts,validationHash} clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.generators.*.files.*.{secret,deploy,owner,group,mode,neededFor} clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.?sops.?defaultGroups clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.settings.publicModule clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.settings.secretModule clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.?sops.?secretUploadDirectory clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.?password-store.?passCommand clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.?password-store.?secretLocation clan-pytest-with-core> - (not cached) clanInternals.vars.settings.?recipients clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.?age.?secretLocation clan-pytest-with-core> ------------------------------ Captured log call ------------------------------- clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:927 Prefetching flake /build/pytest-en1lixrs/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/febbcab65441be6ccc547560fd0155faadebbbb7 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-en1lixrs/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/febbcab65441be6ccc547560fd0155faadebbbb7 clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1179 (cached) $ clan select clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> DEBUG clan_cli.tests.helpers.cli:__init__.py:143 $ clan vars generate --flake /build/pytest-en1lixrs/flake clan-pytest-with-core> Caller: /build/src/clan_cli/tests/test_vars_shared.py:707::test_age_set_shared_var_for_multiple_machines clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:927 Prefetching flake /build/pytest-en1lixrs/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.cliChecks clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1174 Cache miss for clanInternals.inventoryClass.inventorySerialization.{instances,machines,meta} clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:789 Loading flake cache from file /build/clan-flake-cache/flakes-v2/4aa2fd3129c5969e194eb46cd9c2681e643a32fd clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1174 Cache miss for clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:789 Loading flake cache from file /build/clan-flake-cache/flakes-v2/4aa2fd3129c5969e194eb46cd9c2681e643a32fd clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1179 (cached) $ clan select 'clanInternals.inventoryClass.inventorySerialization.{instances,machines,meta}' clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1144 Precaching selectors: clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.machines clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.instances clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.meta clan-pytest-with-core> - (not cached) clanInternals.?secrets.?age.?plugins clan-pytest-with-core> - (cached) clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.generators.*.{share,dependencies,prompts,validationHash} clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.generators.*.files.*.{secret,deploy,owner,group,mode,neededFor} clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.?sops.?defaultGroups clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.settings.publicModule clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.settings.secretModule clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.?sops.?secretUploadDirectory clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.?password-store.?passCommand clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.?password-store.?secretLocation clan-pytest-with-core> - (not cached) clanInternals.vars.settings.?recipients clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.?age.?secretLocation clan-pytest-with-core> ______________________ test_sops_fix_commits_all_changes _______________________ clan-pytest-with-core> [gw4] linux -- Python 3.14.7 /nix/store/3n4qphl9s728sz8frmpqqrv9b1m87g68-python3-3.14.7/bin/python clan-pytest-with-core> clan-pytest-with-core> self = Flake(identifier='/build/pytest-4vvq_062/flake', hash='sha256-FpNO3cjEct6eF+tUbCZ5eU0Y/5gfkAnYXQit9GHbsVs=', 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.?secrets.?age.?plugins', 'clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.gener...ngs.publicModule', 'clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.settings.secretModule', ...] 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-4vvq_062/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/mhj3z6s5cyvsmmx1zhc8sp2cjrvwfcxv-source?narHash=sha256-FpNO3cjEct6eF+tUbCZ5eU0Y/5gfkAnYXQit9GHbsVs="; 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": "maybe", "value": "secrets"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "plugins"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "share"}, {"type": "str", "value": "dependencies"}, {"type": "str", "value": "prompts"}, {"type": "str", "value": "validationHash"}]}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "str", "value": "files"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "secret"}, {"type": "str", "value": "deploy"}, {"type": "str", "value": "owner"}, {"type": "str", "value": "group"}, {"type": "str", "value": "mode"}, {"type": "str", "value": "neededFor"}]}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "defaultGroups"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "publicModule"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "secretModule"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "secretUploadDirectory"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "passCommand"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "secretLocation"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "maybe", "value": "recipients"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "secretLocation"}]'"'"''"'"') 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": "maybe", "value": "secrets"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "plugins"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "share"}, {"type": "str", "value": "dependencies"}, {"type": "str", "value": "prompts"}, {"type": "str", "value": "validationHash"}]}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "str", "value": "files"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "secret"}, {"type": "str", "value": "deploy"}, {"type": "str", "value": "owner"}, {"type": "str", "value": "group"}, {"type": "str", "value": "mode"}, {"type": "str", "value": "neededFor"}]}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "defaultGroups"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "publicModule"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "secretModule"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "secretUploadDirectory"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "passCommand"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "secretLocation"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "maybe", "value": "recipients"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "secretLocation"}]'') 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": "maybe", "value": "secrets"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "plugins"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "share"}, {"type": "str", "value": "dependencies"}, {"type": "str", "value": "prompts"}, {"type": "str", "value": "validationHash"}]}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "str", "value": "files"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "secret"}, {"type": "str", "value": "deploy"}, {"type": "str", "value": "owner"}, {"type": "str", "value": "group"}, {"type": "str", "value": "mode"}, {"type": "str", "value": "neededFor"}]}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "defaultGroups"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "publicModule"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "secretModule"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "secretUploadDirectory"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "passCommand"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "secretLocation"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "maybe", "value": "recipients"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "secretLocation"}]'') flake) clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating list element at index 1 clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating attribute 'my_machine' clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/cba1x9mxnwr8b36cw41bya7g6d5v1p7d-source/select.nix:325:37: clan-pytest-with-core> E 324| in clan-pytest-with-core> E 325| builtins.mapAttrs (_: v: recurse selectors (idx + 1) v) filteredAttrs clan-pytest-with-core> E | ^ clan-pytest-with-core> E 326| else if selector.type == "maybe" then 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:325:40: clan-pytest-with-core> E 324| in clan-pytest-with-core> E 325| builtins.mapAttrs (_: v: recurse selectors (idx + 1) v) filteredAttrs clan-pytest-with-core> E | ^ clan-pytest-with-core> E 326| else if selector.type == "maybe" then 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 … from call site clan-pytest-with-core> E at /build/store/nix/store/cba1x9mxnwr8b36cw41bya7g6d5v1p7d-source/select.nix:312:15: clan-pytest-with-core> E 311| else if selector.type == "str" then clan-pytest-with-core> E 312| recurse selectors (idx + 1) (builtins.getAttr selector.value obj) clan-pytest-with-core> E | ^ clan-pytest-with-core> E 313| else if selector.type == "set" then 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 'getAttr' builtin clan-pytest-with-core> E at /build/store/nix/store/cba1x9mxnwr8b36cw41bya7g6d5v1p7d-source/select.nix:312:44: clan-pytest-with-core> E 311| else if selector.type == "str" then clan-pytest-with-core> E 312| recurse selectors (idx + 1) (builtins.getAttr selector.value obj) clan-pytest-with-core> E | ^ clan-pytest-with-core> E 313| else if selector.type == "set" then clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'seq' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:401:18: clan-pytest-with-core> E 400| options = checked options; clan-pytest-with-core> E 401| config = checked (removeAttrs config [ "_module" ]); clan-pytest-with-core> E | ^ clan-pytest-with-core> E 402| _module = checked (config._module); 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:304:9: clan-pytest-with-core> E 303| checkUnmatched = clan-pytest-with-core> E 304| if config._module.check && config._module.freeformType == null && merged.unmatchedDefns != [ ] then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 305| let clan-pytest-with-core> E clan-pytest-with-core> E … in the right operand of the AND (&&) operator clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:304:72: clan-pytest-with-core> E 303| checkUnmatched = clan-pytest-with-core> E 304| if config._module.check && config._module.freeformType == null && merged.unmatchedDefns != [ ] then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 305| let clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'unmatchedDefns' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:940:7: clan-pytest-with-core> E 939| # Transforms unmatchedDefnsByName into a list of definitions clan-pytest-with-core> E 940| unmatchedDefns = clan-pytest-with-core> E | ^ clan-pytest-with-core> E 941| if configs == [ ] then clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'concatLists' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:946:11: clan-pytest-with-core> E 945| else clan-pytest-with-core> E 946| concatLists ( clan-pytest-with-core> E | ^ clan-pytest-with-core> E 947| mapAttrsToList ( clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:948:21: clan-pytest-with-core> E 947| mapAttrsToList ( clan-pytest-with-core> E 948| name: defs: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 949| map ( clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'map' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:949:15: clan-pytest-with-core> E 948| name: defs: clan-pytest-with-core> E 949| map ( clan-pytest-with-core> E | ^ clan-pytest-with-core> E 950| def: clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:932:22: clan-pytest-with-core> E 931| # Propagate all unmatched definitions from nested option sets clan-pytest-with-core> E 932| mapAttrs (n: v: v.unmatchedDefns) resultsByName clan-pytest-with-core> E | ^ clan-pytest-with-core> E 933| # Plus the definitions for the current prefix that don't have a matching option clan-pytest-with-core> E clan-pytest-with-core> E (10 duplicate frames omitted) clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:932:25: clan-pytest-with-core> E 931| # Propagate all unmatched definitions from nested option sets clan-pytest-with-core> E 932| mapAttrs (n: v: v.unmatchedDefns) resultsByName clan-pytest-with-core> E | ^ clan-pytest-with-core> E 933| # Plus the definitions for the current prefix that don't have a matching option clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:876:15: clan-pytest-with-core> E 875| resultsByName = mapAttrs ( clan-pytest-with-core> E 876| name: decls: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 877| # We're descending into attribute ‘name’. 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:888:9: clan-pytest-with-core> E 887| in clan-pytest-with-core> E 888| if length optionDecls == length decls then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 889| let clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'length' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:888:12: clan-pytest-with-core> E 887| in clan-pytest-with-core> E 888| if length optionDecls == length decls then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 889| let clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'filter' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:882:25: clan-pytest-with-core> E 881| defns' = rawDefinitionsByName.${name} or [ ]; clan-pytest-with-core> E 882| optionDecls = filter ( clan-pytest-with-core> E | ^ clan-pytest-with-core> E 883| m: clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:883:13: clan-pytest-with-core> E 882| optionDecls = filter ( clan-pytest-with-core> E 883| m: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 884| m.options ? _type clan-pytest-with-core> E clan-pytest-with-core> E … in the left operand of the AND (&&) operator clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:885:13: clan-pytest-with-core> E 884| m.options ? _type clan-pytest-with-core> E 885| && (m.options._type == "option" || throwDeclarationTypeError loc m.options._type m._file) clan-pytest-with-core> E | ^ clan-pytest-with-core> E 886| ) decls; clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'options' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:807:15: clan-pytest-with-core> E 806| pos = unsafeGetAttrPos n subtree; clan-pytest-with-core> E 807| options = option; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 808| }) subtree clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:289:73: clan-pytest-with-core> E 288| len = length attrPath; clan-pytest-with-core> E 289| atDepth = n: if n == len then value else { ${elemAt attrPath n} = atDepth (n + 1); }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 290| in clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'atDepth' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:289:17: clan-pytest-with-core> E 288| len = length attrPath; clan-pytest-with-core> E 289| atDepth = n: if n == len then value else { ${elemAt attrPath n} = atDepth (n + 1); }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 290| in clan-pytest-with-core> E clan-pytest-with-core> E … in the right operand of the update (//) operator clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:2047:9: clan-pytest-with-core> E 2046| } clan-pytest-with-core> E 2047| // optionalAttrs (toType != null) { clan-pytest-with-core> E | ^ clan-pytest-with-core> E 2048| type = toType; clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:2047:12: clan-pytest-with-core> E 2046| } clan-pytest-with-core> E 2047| // optionalAttrs (toType != null) { clan-pytest-with-core> E | ^ clan-pytest-with-core> E 2048| type = toType; clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'optionalAttrs' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:1492:25: clan-pytest-with-core> E 1491| */ clan-pytest-with-core> E 1492| optionalAttrs = cond: as: if cond then as else { }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1493| 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:1492:29: clan-pytest-with-core> E 1491| */ clan-pytest-with-core> E 1492| optionalAttrs = cond: as: if cond then as else { }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1493| clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:2036:17: clan-pytest-with-core> E 2035| let clan-pytest-with-core> E 2036| opt = attrByPath to { } options; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 2037| in clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'attrByPath' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:89:24: clan-pytest-with-core> E 88| attrByPath = clan-pytest-with-core> E 89| attrPath: default: set: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 90| let clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:106:5: clan-pytest-with-core> E 105| in clan-pytest-with-core> E 106| attrByPath' 0 set; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 107| clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'attrByPath'' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:93:12: clan-pytest-with-core> E 92| attrByPath' = clan-pytest-with-core> E 93| n: s: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 94| ( clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:102:35: clan-pytest-with-core> E 101| in clan-pytest-with-core> E 102| if s ? ${attr} then attrByPath' (n + 1) s.${attr} else default clan-pytest-with-core> E | ^ clan-pytest-with-core> E 103| ) clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'attrByPath'' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:93:12: clan-pytest-with-core> E 92| attrByPath' = clan-pytest-with-core> E 93| n: s: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 94| ( clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:102:35: clan-pytest-with-core> E 101| in clan-pytest-with-core> E 102| if s ? ${attr} then attrByPath' (n + 1) s.${attr} else default clan-pytest-with-core> E | ^ clan-pytest-with-core> E 103| ) clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'attrByPath'' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:93:12: clan-pytest-with-core> E 92| attrByPath' = clan-pytest-with-core> E 93| n: s: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 94| ( clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:102:35: clan-pytest-with-core> E 101| in clan-pytest-with-core> E 102| if s ? ${attr} then attrByPath' (n + 1) s.${attr} else default clan-pytest-with-core> E | ^ clan-pytest-with-core> E 103| ) clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'attrByPath'' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:93:12: clan-pytest-with-core> E 92| attrByPath' = clan-pytest-with-core> E 93| n: s: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 94| ( clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:102:55: clan-pytest-with-core> E 101| in clan-pytest-with-core> E 102| if s ? ${attr} then attrByPath' (n + 1) s.${attr} else default clan-pytest-with-core> E | ^ clan-pytest-with-core> E 103| ) clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:927:37: clan-pytest-with-core> E 926| clan-pytest-with-core> E 927| matchedOptions = mapAttrs (n: v: v.matchedOptions) resultsByName; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 928| clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'matchedOptions' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:893:13: clan-pytest-with-core> E 892| { clan-pytest-with-core> E 893| matchedOptions = evalOptionValue loc opt defns'; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 894| unmatchedDefns = [ ]; clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:893:30: clan-pytest-with-core> E 892| { clan-pytest-with-core> E 893| matchedOptions = evalOptionValue loc opt defns'; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 894| unmatchedDefns = [ ]; clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'evalOptionValue' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1103:15: clan-pytest-with-core> E 1102| evalOptionValue = clan-pytest-with-core> E 1103| loc: opt: defs: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1104| let clan-pytest-with-core> E clan-pytest-with-core> E … in the left operand of the update (//) operator clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1148:5: clan-pytest-with-core> E 1147| warnDeprecation opt clan-pytest-with-core> E 1148| // { clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1149| value = addErrorContext "while evaluating the option `${showOption loc}':" value; 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1141:9: clan-pytest-with-core> E 1140| warnDeprecation = clan-pytest-with-core> E 1141| if (opt.type.deprecationMessage != null) then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1142| warn "The type `types.${opt.type.name}' of option `${showOption loc}' defined in ${showFiles opt.declarations} is deprecated. ${opt.type.deprecationMessage}" clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:890:19: clan-pytest-with-core> E 889| let clan-pytest-with-core> E 890| opt = fixupOptionType loc (mergeOptionDecls loc decls); clan-pytest-with-core> E | ^ clan-pytest-with-core> E 891| in clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'fixupOptionType' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1473:10: clan-pytest-with-core> E 1472| fixupOptionType = clan-pytest-with-core> E 1473| loc: opt: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1474| if opt.type.getSubModules or null == null then 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1474:5: clan-pytest-with-core> E 1473| loc: opt: clan-pytest-with-core> E 1474| if opt.type.getSubModules or null == null then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1475| opt // { type = opt.type or types.unspecified; } clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'type.getSubModules' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/nixos/modules/services/hardware/bluetooth.nix:72:9: clan-pytest-with-core> E 71| settings = mkOption { clan-pytest-with-core> E 72| type = cfgFmt.type; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 73| default = { }; clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/nixos/modules/services/hardware/bluetooth.nix:26:12: clan-pytest-with-core> E 25| clan-pytest-with-core> E 26| cfgFmt = pkgs.formats.ini { }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 27| clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:727:15: clan-pytest-with-core> E 726| extraArgs = mapAttrs ( clan-pytest-with-core> E 727| name: _: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 728| addErrorContext (context name) ( clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the module argument `pkgs' in "/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/nixos/modules/services/hardware/bluetooth.nix": clan-pytest-with-core> E clan-pytest-with-core> E … noting that argument `pkgs` is not externally provided, so querying `_module.args` instead, requiring `config` clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:731:13: clan-pytest-with-core> E 730| "noting that argument `${name}` is not externally provided, so querying `_module.args` instead, requiring `config`" clan-pytest-with-core> E 731| config._module.args.${name} clan-pytest-with-core> E | ^ clan-pytest-with-core> E 732| ) clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/types.nix:1029:18: clan-pytest-with-core> E 1028| value = mapAttrs ( clan-pytest-with-core> E 1029| n: v: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1030| if lazy then clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'optionalValue.value' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1312:5: clan-pytest-with-core> E 1311| clan-pytest-with-core> E 1312| optionalValue = if isDefined then { value = mergedValue; } else { }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1313| }; 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1312:21: clan-pytest-with-core> E 1311| clan-pytest-with-core> E 1312| optionalValue = if isDefined then { value = mergedValue; } else { }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1313| }; clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'values' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1240:11: clan-pytest-with-core> E 1239| { clan-pytest-with-core> E 1240| values = defsSorted; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1241| inherit (defsFiltered) highestPrio; 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1211:11: clan-pytest-with-core> E 1210| # Avoid sorting if we don't have to. clan-pytest-with-core> E 1211| if any (def: def.value._type or "" == "order") defsFiltered.values then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1212| sortProperties defsFiltered.values clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'any' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1211:14: clan-pytest-with-core> E 1210| # Avoid sorting if we don't have to. clan-pytest-with-core> E 1211| if any (def: def.value._type or "" == "order") defsFiltered.values then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1212| sortProperties defsFiltered.values clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1211:19: clan-pytest-with-core> E 1210| # Avoid sorting if we don't have to. clan-pytest-with-core> E 1211| if any (def: def.value._type or "" == "order") defsFiltered.values then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1212| sortProperties defsFiltered.values clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'value._type' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1422:67: clan-pytest-with-core> E 1421| strip = clan-pytest-with-core> E 1422| def: if def.value._type or "" == "override" then def // { value = def.value.content; } else def; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1423| in clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'value.content' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1566:22: clan-pytest-with-core> E 1565| _type = "override"; clan-pytest-with-core> E 1566| inherit priority content; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1567| }; 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/nixos/modules/misc/nixpkgs.nix:107:15: clan-pytest-with-core> E 106| clan-pytest-with-core> E 107| finalPkgs = if opt.pkgs.isDefined then cfg.pkgs.appendOverlays cfg.overlays else defaultPkgs; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 108| clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'pkgs.isDefined' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1154:21: clan-pytest-with-core> E 1153| definitionsWithLocations = res.defsFinal; clan-pytest-with-core> E 1154| inherit (res) isDefined; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1155| inherit (res.checkedAndMerged) valueMeta; clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'isDefined' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1310:5: clan-pytest-with-core> E 1309| clan-pytest-with-core> E 1310| isDefined = defsFinal != [ ]; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1311| clan-pytest-with-core> E clan-pytest-with-core> E (6 duplicate frames omitted) clan-pytest-with-core> E clan-pytest-with-core> E error: attribute 'system' missing clan-pytest-with-core> E at /build/store/nix/store/y3h139bhv4373m1hab367ma4p5i95i2f-source/modules/clan/module.nix:164:24: clan-pytest-with-core> E 163| (lib.modules.importApply ../../nixosModules/machineModules/overridePkgs.nix { clan-pytest-with-core> E 164| pkgs = nixpkgsMatrix.${config.inventory.machines.${name}.nixpkgs}.system.${system}.pkgs; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 165| }) clan-pytest-with-core> E Did you mean systems? 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 0x7fffe632ee00> clan-pytest-with-core> flake_with_sops = clan-pytest-with-core> sops_setup = 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_sops_fix_commits_all_changes( clan-pytest-with-core> monkeypatch: pytest.MonkeyPatch, clan-pytest-with-core> flake_with_sops: ClanFlake, clan-pytest-with-core> sops_setup: SopsSetup, clan-pytest-with-core> ) -> None: clan-pytest-with-core> """Test that 'clan vars fix' commits all changes (group symlinks, re-encrypted secrets). clan-pytest-with-core> clan-pytest-with-core> Generate secrets WITHOUT a default group, then add the group to defaultGroups. clan-pytest-with-core> This forces fix() to create new group symlinks and re-encrypt, exercising the clan-pytest-with-core> code paths where return values from allow_member/update_keys must be committed. clan-pytest-with-core> """ clan-pytest-with-core> flake = flake_with_sops clan-pytest-with-core> clan-pytest-with-core> # Step 1: Create machine with secret but NO defaultGroups clan-pytest-with-core> config = flake.machines["my_machine"] = create_test_machine_config() clan-pytest-with-core> my_generator = config["clan"]["core"]["vars"]["generators"]["my_generator"] clan-pytest-with-core> my_generator["files"]["my_secret"]["secret"] = True clan-pytest-with-core> my_generator["script"] = 'echo -n secret_value > "$out"/my_secret' clan-pytest-with-core> clan-pytest-with-core> flake.refresh() clan-pytest-with-core> monkeypatch.chdir(flake.path) clan-pytest-with-core> clan-pytest-with-core> # Step 2: Create group with admin user (exists in sops/ but not linked to any secret) clan-pytest-with-core> cli.run(["secrets", "groups", "add-user", "my_group", sops_setup.user]) clan-pytest-with-core> clan-pytest-with-core> # Step 3: Generate secrets (no defaultGroups, so group is NOT linked to the secret) clan-pytest-with-core> > cli.run(["vars", "generate", "--flake", str(flake.path), "my_machine"]) clan-pytest-with-core> clan-pytest-with-core> /build/src/clan_cli/tests/test_vars_generate.py:830: 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/vars/generate.py:33: in generate_command clan-pytest-with-core> run_generators( clan-pytest-with-core> /build/src/clan_lib/vars/generate.py:306: in run_generators clan-pytest-with-core> all_generators = get_generators(machines, full_closure=True) clan-pytest-with-core> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ clan-pytest-with-core> /build/src/clan_lib/vars/generate.py:146: in get_generators clan-pytest-with-core> flake.precache(get_generators_precache_selectors(list(all_machines))) clan-pytest-with-core> /build/src/clan_lib/flake/flake.py:1151: in precache clan-pytest-with-core> self.get_from_nix(not_fetched_selectors) clan-pytest-with-core> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ clan-pytest-with-core> clan-pytest-with-core> self = Flake(identifier='/build/pytest-4vvq_062/flake', hash='sha256-FpNO3cjEct6eF+tUbCZ5eU0Y/5gfkAnYXQit9GHbsVs=', 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.?secrets.?age.?plugins', 'clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.gener...ngs.publicModule', 'clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.settings.secretModule', ...] 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 while executing:$ clan select 'clanInternals.?secrets.?age.?plugins' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.generators.*.{share,dependencies,prompts,validationHash}' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.generators.*.files.*.{secret,deploy,owner,group,mode,neededFor}' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.?sops.?defaultGroups' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.settings.publicModule' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.settings.secretModule' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.?sops.?secretUploadDirectory' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.?password-store.?passCommand' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.?password-store.?secretLocation' clan-pytest-with-core> E $ clan select 'clanInternals.vars.settings.?recipients' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.?age.?secretLocation' clan-pytest-with-core> E Reason: attribute 'system' missing clan-pytest-with-core> E at /build/store/nix/store/y3h139bhv4373m1hab367ma4p5i95i2f-source/modules/clan/module.nix:164:24: clan-pytest-with-core> E 163| (lib.modules.importApply ../../nixosModules/machineModules/overridePkgs.nix { clan-pytest-with-core> E 164| pkgs = nixpkgsMatrix.${config.inventory.machines.${name}.nixpkgs}.system.${system}.pkgs; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 165| }) clan-pytest-with-core> E Did you mean systems?. 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-d5udxovu/flake/.git/ clan-pytest-with-core> [main (root-commit) d3b657c] 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-d5udxovu/flake/flake.lock": clan-pytest-with-core> • Added input 'clan-core': clan-pytest-with-core> 'path:/nix/store/x4g1qsn1nq0q56zn8h9c7xaiysv7bsf2-clan-core-flake?lastModified=1&narHash=sha256-Ynx5u312tlxJbGJCSevw5zZVxrd02FisWE1my%2B%2BFRSw%3D' (1970-01-01) clan-pytest-with-core> • Added input 'clan-core/data-mesher': clan-pytest-with-core> 'path:/nix/store/kdjkigwckgrfz0yg0d9z7kj2xkf084vs-source?lastModified=1&narHash=sha256-Yase/4e4aNN9QvUMqPH9ngbAmlcJCqLmFL0zuURdkuA%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/w2c23ykc12mswlg8hrrjzb5gv9gvkzwq-source?lastModified=1&narHash=sha256-RxWs5ND31KzTG7wvMM%2BPMfUjyNpmIEr999lqNARaM5o%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/lrxvs4l9bqbgjfz7w9bkfg5zqq442jxc-source?lastModified=1&narHash=sha256-4dtXQk/NMePegK/nWp5NSeuZKLATItOq61lpEvmXqGw%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/p17akwn814w226jq2cdkkhcw4psb0ga9-source?lastModified=0&narHash=sha256-tkD1h/1jLJ6qZHjG7/TOZT1qqI1ej3VPPCufHQyv1Uo%3D' (1970-01-01) clan-pytest-with-core> • Added input 'clan-core/sops-nix': clan-pytest-with-core> 'path:/nix/store/s154mmk8ahvc71gq8xfkbzlk240yvniv-source?lastModified=1&narHash=sha256-gkig4nPi1CWc4Z50GBsjE4ygSE7hMpl/TwID2an2Cck%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/9m1jsz5b9ggmjij2vkmafnhn26g96jjn-source?lastModified=1&narHash=sha256-brhZ8DmuGtzkCYHJg4HEd602amKm89Y9ytsFZ5uWD1w%3D' (1970-01-01) clan-pytest-with-core> • Added input 'clan-core/treefmt-nix': clan-pytest-with-core> 'path:/nix/store/7sjy8935654h3220n5gbaclf5nfw4nzx-source?lastModified=1&narHash=sha256-WSFCsDSE5ffgD2MqzkM2CYjeFiKhRF/dJUN8uedb6YE%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-4vvq_062 clan-pytest-with-core> [localhost] $ clan vars keygen --flake /build/pytest-4vvq_062/flake --user admin --no-interactive clan-pytest-with-core> Caller: /build/src/clan_cli/tests/age_keys.py:31::init clan-pytest-with-core> clan-pytest-with-core> Prefetching flake /build/pytest-4vvq_062/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/febbcab65441be6ccc547560fd0155faadebbbb7 clan-pytest-with-core> (cached) $ clan select clanInternals.inventoryClass.relativeDirectory 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> git \ clan-pytest-with-core> -C /build/pytest-4vvq_062/flake \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-4vvq_062/flake/sops/users/admin 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/admin to git clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-4vvq_062/flake \ clan-pytest-with-core> diff \ clan-pytest-with-core> --cached --exit-code \ clan-pytest-with-core> -- /build/pytest-4vvq_062/flake/sops/users/admin 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-4vvq_062/flake \ clan-pytest-with-core> commit \ clan-pytest-with-core> -m 'secrets: add user admin' \ clan-pytest-with-core> --no-verify /build/pytest-4vvq_062/flake/sops/users/admin 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/admin to git 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:143 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-d5udxovu/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/x4g1qsn1nq0q56zn8h9c7xaiysv7bsf2-clan-core-flake?lastModified=1&narHash=sha256-Ynx5u312tlxJbGJCSevw5zZVxrd02FisWE1my%2B%2BFRSw%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/kdjkigwckgrfz0yg0d9z7kj2xkf084vs-source?lastModified=1&narHash=sha256-Yase/4e4aNN9QvUMqPH9ngbAmlcJCqLmFL0zuURdkuA%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/w2c23ykc12mswlg8hrrjzb5gv9gvkzwq-source?lastModified=1&narHash=sha256-RxWs5ND31KzTG7wvMM%2BPMfUjyNpmIEr999lqNARaM5o%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/lrxvs4l9bqbgjfz7w9bkfg5zqq442jxc-source?lastModified=1&narHash=sha256-4dtXQk/NMePegK/nWp5NSeuZKLATItOq61lpEvmXqGw%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/p17akwn814w226jq2cdkkhcw4psb0ga9-source?lastModified=0&narHash=sha256-tkD1h/1jLJ6qZHjG7/TOZT1qqI1ej3VPPCufHQyv1Uo%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/s154mmk8ahvc71gq8xfkbzlk240yvniv-source?lastModified=1&narHash=sha256-gkig4nPi1CWc4Z50GBsjE4ygSE7hMpl/TwID2an2Cck%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/9m1jsz5b9ggmjij2vkmafnhn26g96jjn-source?lastModified=1&narHash=sha256-brhZ8DmuGtzkCYHJg4HEd602amKm89Y9ytsFZ5uWD1w%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/7sjy8935654h3220n5gbaclf5nfw4nzx-source?lastModified=1&narHash=sha256-WSFCsDSE5ffgD2MqzkM2CYjeFiKhRF/dJUN8uedb6YE%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:143 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-4vvq_062 clan-pytest-with-core> DEBUG clan_cli.tests.helpers.cli:__init__.py:143 $ clan vars keygen --flake /build/pytest-4vvq_062/flake --user admin --no-interactive clan-pytest-with-core> Caller: /build/src/clan_cli/tests/age_keys.py:31::init clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:927 Prefetching flake /build/pytest-4vvq_062/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/febbcab65441be6ccc547560fd0155faadebbbb7 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.cmd:__init__.py:143 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> DEBUG clan_lib.cmd:__init__.py:143 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> DEBUG clan_cli.secrets.sops:sops.py:99 Found age public key from a private key in the environment (SOPS_AGE_KEY): age1dhwqzkah943xzc34tc3dlmfayyevcmdmxzjezdgdy33euxwf59vsp3vk3c clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:143 git \ clan-pytest-with-core> -C /build/pytest-4vvq_062/flake \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-4vvq_062/flake/sops/users/admin 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> DEBUG clan_lib.cmd:__init__.py:143 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> DEBUG clan_lib.git:__init__.py:98 Adding sops/users/admin to git clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:143 git \ clan-pytest-with-core> -C /build/pytest-4vvq_062/flake \ clan-pytest-with-core> diff \ clan-pytest-with-core> --cached --exit-code \ clan-pytest-with-core> -- /build/pytest-4vvq_062/flake/sops/users/admin 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> DEBUG clan_lib.cmd:__init__.py:143 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> DEBUG clan_lib.cmd:__init__.py:143 git \ clan-pytest-with-core> -C /build/pytest-4vvq_062/flake \ clan-pytest-with-core> commit \ clan-pytest-with-core> -m 'secrets: add user admin' \ clan-pytest-with-core> --no-verify /build/pytest-4vvq_062/flake/sops/users/admin 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> DEBUG clan_lib.cmd:__init__.py:143 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> INFO clan_lib.git:__init__.py:141 Committed sops/users/admin to git clan-pytest-with-core> ----------------------------- Captured stdout call ----------------------------- clan-pytest-with-core> [main ba8ea6f] flake: update by flake generator clan-pytest-with-core> 2 files changed, 34 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> ----------------------------- Captured stderr call ----------------------------- clan-pytest-with-core> Prefetching flake /build/pytest-4vvq_062/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/d2c0050d97832c3ac5193485b93705d00938c15e clan-pytest-with-core> (cached) $ clan select clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> [localhost] $ clan secrets groups add-user my_group admin clan-pytest-with-core> Caller: /build/src/clan_cli/tests/test_vars_generate.py:827::test_sops_fix_commits_all_changes clan-pytest-with-core> clan-pytest-with-core> Prefetching flake /build/pytest-4vvq_062/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.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/11e319f32f04e4e30abf8336ffa9b9cdcc5a8f83 clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-4vvq_062/flake \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-4vvq_062/flake/sops/groups/my_group/users/admin 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/my_group/users/admin to git clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-4vvq_062/flake \ clan-pytest-with-core> diff \ clan-pytest-with-core> --cached --exit-code \ clan-pytest-with-core> -- /build/pytest-4vvq_062/flake/sops/groups/my_group/users/admin 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-4vvq_062/flake \ clan-pytest-with-core> commit \ clan-pytest-with-core> -m 'secrets: add user admin to group my_group' \ clan-pytest-with-core> --no-verify /build/pytest-4vvq_062/flake/sops/groups/my_group/users/admin 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/my_group/users/admin to git clan-pytest-with-core> [localhost] $ clan vars generate --flake /build/pytest-4vvq_062/flake my_machine clan-pytest-with-core> Caller: /build/src/clan_cli/tests/test_vars_generate.py:830::test_sops_fix_commits_all_changes clan-pytest-with-core> clan-pytest-with-core> Prefetching flake /build/pytest-4vvq_062/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.cliChecks clan-pytest-with-core> Cache miss for clanInternals.inventoryClass.inventorySerialization.{instances,machines,meta} clan-pytest-with-core> Loading flake cache from file /build/clan-flake-cache/flakes-v2/7ee9b466c8597e948be1ae60f65ac89df1c0fce3 clan-pytest-with-core> Cache miss for clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> Loading flake cache from file /build/clan-flake-cache/flakes-v2/7ee9b466c8597e948be1ae60f65ac89df1c0fce3 clan-pytest-with-core> (cached) $ clan select 'clanInternals.inventoryClass.inventorySerialization.{instances,machines,meta}' clan-pytest-with-core> Precaching selectors: clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.machines clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.instances clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.meta clan-pytest-with-core> - (not cached) clanInternals.?secrets.?age.?plugins clan-pytest-with-core> - (cached) clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.generators.*.{share,dependencies,prompts,validationHash} clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.generators.*.files.*.{secret,deploy,owner,group,mode,neededFor} clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.?sops.?defaultGroups clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.settings.publicModule clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.settings.secretModule clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.?sops.?secretUploadDirectory clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.?password-store.?passCommand clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.?password-store.?secretLocation clan-pytest-with-core> - (not cached) clanInternals.vars.settings.?recipients clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.?age.?secretLocation clan-pytest-with-core> ------------------------------ Captured log call ------------------------------- clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:927 Prefetching flake /build/pytest-4vvq_062/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/d2c0050d97832c3ac5193485b93705d00938c15e clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1179 (cached) $ clan select clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> DEBUG clan_cli.tests.helpers.cli:__init__.py:143 $ clan secrets groups add-user my_group admin clan-pytest-with-core> Caller: /build/src/clan_cli/tests/test_vars_generate.py:827::test_sops_fix_commits_all_changes clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:927 Prefetching flake /build/pytest-4vvq_062/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.inventoryClass.relativeDirectory clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1174 Cache miss for clanInternals.?secrets.?age.?plugins clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:789 Loading flake cache from file /build/clan-flake-cache/flakes-v2/11e319f32f04e4e30abf8336ffa9b9cdcc5a8f83 clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:143 git \ clan-pytest-with-core> -C /build/pytest-4vvq_062/flake \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-4vvq_062/flake/sops/groups/my_group/users/admin 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> DEBUG clan_lib.cmd:__init__.py:143 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> DEBUG clan_lib.git:__init__.py:98 Adding sops/groups/my_group/users/admin to git clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:143 git \ clan-pytest-with-core> -C /build/pytest-4vvq_062/flake \ clan-pytest-with-core> diff \ clan-pytest-with-core> --cached --exit-code \ clan-pytest-with-core> -- /build/pytest-4vvq_062/flake/sops/groups/my_group/users/admin 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> DEBUG clan_lib.cmd:__init__.py:143 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> DEBUG clan_lib.cmd:__init__.py:143 git \ clan-pytest-with-core> -C /build/pytest-4vvq_062/flake \ clan-pytest-with-core> commit \ clan-pytest-with-core> -m 'secrets: add user admin to group my_group' \ clan-pytest-with-core> --no-verify /build/pytest-4vvq_062/flake/sops/groups/my_group/users/admin 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> DEBUG clan_lib.cmd:__init__.py:143 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> INFO clan_lib.git:__init__.py:141 Committed sops/groups/my_group/users/admin to git clan-pytest-with-core> DEBUG clan_cli.tests.helpers.cli:__init__.py:143 $ clan vars generate --flake /build/pytest-4vvq_062/flake my_machine clan-pytest-with-core> Caller: /build/src/clan_cli/tests/test_vars_generate.py:830::test_sops_fix_commits_all_changes clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:927 Prefetching flake /build/pytest-4vvq_062/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.cliChecks clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1174 Cache miss for clanInternals.inventoryClass.inventorySerialization.{instances,machines,meta} clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:789 Loading flake cache from file /build/clan-flake-cache/flakes-v2/7ee9b466c8597e948be1ae60f65ac89df1c0fce3 clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1174 Cache miss for clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:789 Loading flake cache from file /build/clan-flake-cache/flakes-v2/7ee9b466c8597e948be1ae60f65ac89df1c0fce3 clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1179 (cached) $ clan select 'clanInternals.inventoryClass.inventorySerialization.{instances,machines,meta}' clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1144 Precaching selectors: clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.machines clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.instances clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.meta clan-pytest-with-core> - (not cached) clanInternals.?secrets.?age.?plugins clan-pytest-with-core> - (cached) clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.generators.*.{share,dependencies,prompts,validationHash} clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.generators.*.files.*.{secret,deploy,owner,group,mode,neededFor} clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.?sops.?defaultGroups clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.settings.publicModule clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.settings.secretModule clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.?sops.?secretUploadDirectory clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.?password-store.?passCommand clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.?password-store.?secretLocation clan-pytest-with-core> - (not cached) clanInternals.vars.settings.?recipients clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.?age.?secretLocation clan-pytest-with-core> _______________ test_generate_secret_var_sops_with_default_group _______________ clan-pytest-with-core> [gw13] linux -- Python 3.14.7 /nix/store/3n4qphl9s728sz8frmpqqrv9b1m87g68-python3-3.14.7/bin/python clan-pytest-with-core> clan-pytest-with-core> self = Flake(identifier='/build/pytest-minn_v7_/flake', hash='sha256-ScyRl377TG3eKpkVGYOtNTMTKTDUeHPEYGQ6ebP+TiU=', 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.?secrets.?age.?plugins', 'clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.gener...ngs.publicModule', 'clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.settings.secretModule', ...] 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-minn_v7_/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/r04k4vy7qkhpiijnmw0lnrvm2v67mm6b-source?narHash=sha256-ScyRl377TG3eKpkVGYOtNTMTKTDUeHPEYGQ6ebP+TiU="; 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": "maybe", "value": "secrets"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "plugins"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "share"}, {"type": "str", "value": "dependencies"}, {"type": "str", "value": "prompts"}, {"type": "str", "value": "validationHash"}]}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "str", "value": "files"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "secret"}, {"type": "str", "value": "deploy"}, {"type": "str", "value": "owner"}, {"type": "str", "value": "group"}, {"type": "str", "value": "mode"}, {"type": "str", "value": "neededFor"}]}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "defaultGroups"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "publicModule"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "secretModule"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "secretUploadDirectory"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "passCommand"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "secretLocation"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "maybe", "value": "recipients"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "secretLocation"}]'"'"''"'"') 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": "maybe", "value": "secrets"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "plugins"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "share"}, {"type": "str", "value": "dependencies"}, {"type": "str", "value": "prompts"}, {"type": "str", "value": "validationHash"}]}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "str", "value": "files"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "secret"}, {"type": "str", "value": "deploy"}, {"type": "str", "value": "owner"}, {"type": "str", "value": "group"}, {"type": "str", "value": "mode"}, {"type": "str", "value": "neededFor"}]}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "defaultGroups"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "publicModule"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "secretModule"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "secretUploadDirectory"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "passCommand"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "secretLocation"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "maybe", "value": "recipients"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "secretLocation"}]'') 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": "maybe", "value": "secrets"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "plugins"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "share"}, {"type": "str", "value": "dependencies"}, {"type": "str", "value": "prompts"}, {"type": "str", "value": "validationHash"}]}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "str", "value": "files"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "secret"}, {"type": "str", "value": "deploy"}, {"type": "str", "value": "owner"}, {"type": "str", "value": "group"}, {"type": "str", "value": "mode"}, {"type": "str", "value": "neededFor"}]}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "defaultGroups"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "publicModule"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "secretModule"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "secretUploadDirectory"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "passCommand"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "secretLocation"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "maybe", "value": "recipients"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "secretLocation"}]'') flake) clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating list element at index 1 clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating attribute 'my_machine' clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/cba1x9mxnwr8b36cw41bya7g6d5v1p7d-source/select.nix:325:37: clan-pytest-with-core> E 324| in clan-pytest-with-core> E 325| builtins.mapAttrs (_: v: recurse selectors (idx + 1) v) filteredAttrs clan-pytest-with-core> E | ^ clan-pytest-with-core> E 326| else if selector.type == "maybe" then 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:325:40: clan-pytest-with-core> E 324| in clan-pytest-with-core> E 325| builtins.mapAttrs (_: v: recurse selectors (idx + 1) v) filteredAttrs clan-pytest-with-core> E | ^ clan-pytest-with-core> E 326| else if selector.type == "maybe" then 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 … from call site clan-pytest-with-core> E at /build/store/nix/store/cba1x9mxnwr8b36cw41bya7g6d5v1p7d-source/select.nix:312:15: clan-pytest-with-core> E 311| else if selector.type == "str" then clan-pytest-with-core> E 312| recurse selectors (idx + 1) (builtins.getAttr selector.value obj) clan-pytest-with-core> E | ^ clan-pytest-with-core> E 313| else if selector.type == "set" then 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 'getAttr' builtin clan-pytest-with-core> E at /build/store/nix/store/cba1x9mxnwr8b36cw41bya7g6d5v1p7d-source/select.nix:312:44: clan-pytest-with-core> E 311| else if selector.type == "str" then clan-pytest-with-core> E 312| recurse selectors (idx + 1) (builtins.getAttr selector.value obj) clan-pytest-with-core> E | ^ clan-pytest-with-core> E 313| else if selector.type == "set" then clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'seq' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:401:18: clan-pytest-with-core> E 400| options = checked options; clan-pytest-with-core> E 401| config = checked (removeAttrs config [ "_module" ]); clan-pytest-with-core> E | ^ clan-pytest-with-core> E 402| _module = checked (config._module); 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:304:9: clan-pytest-with-core> E 303| checkUnmatched = clan-pytest-with-core> E 304| if config._module.check && config._module.freeformType == null && merged.unmatchedDefns != [ ] then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 305| let clan-pytest-with-core> E clan-pytest-with-core> E … in the right operand of the AND (&&) operator clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:304:72: clan-pytest-with-core> E 303| checkUnmatched = clan-pytest-with-core> E 304| if config._module.check && config._module.freeformType == null && merged.unmatchedDefns != [ ] then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 305| let clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'unmatchedDefns' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:940:7: clan-pytest-with-core> E 939| # Transforms unmatchedDefnsByName into a list of definitions clan-pytest-with-core> E 940| unmatchedDefns = clan-pytest-with-core> E | ^ clan-pytest-with-core> E 941| if configs == [ ] then clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'concatLists' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:946:11: clan-pytest-with-core> E 945| else clan-pytest-with-core> E 946| concatLists ( clan-pytest-with-core> E | ^ clan-pytest-with-core> E 947| mapAttrsToList ( clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:948:21: clan-pytest-with-core> E 947| mapAttrsToList ( clan-pytest-with-core> E 948| name: defs: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 949| map ( clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'map' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:949:15: clan-pytest-with-core> E 948| name: defs: clan-pytest-with-core> E 949| map ( clan-pytest-with-core> E | ^ clan-pytest-with-core> E 950| def: clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:932:22: clan-pytest-with-core> E 931| # Propagate all unmatched definitions from nested option sets clan-pytest-with-core> E 932| mapAttrs (n: v: v.unmatchedDefns) resultsByName clan-pytest-with-core> E | ^ clan-pytest-with-core> E 933| # Plus the definitions for the current prefix that don't have a matching option clan-pytest-with-core> E clan-pytest-with-core> E (10 duplicate frames omitted) clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:932:25: clan-pytest-with-core> E 931| # Propagate all unmatched definitions from nested option sets clan-pytest-with-core> E 932| mapAttrs (n: v: v.unmatchedDefns) resultsByName clan-pytest-with-core> E | ^ clan-pytest-with-core> E 933| # Plus the definitions for the current prefix that don't have a matching option clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:876:15: clan-pytest-with-core> E 875| resultsByName = mapAttrs ( clan-pytest-with-core> E 876| name: decls: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 877| # We're descending into attribute ‘name’. 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:888:9: clan-pytest-with-core> E 887| in clan-pytest-with-core> E 888| if length optionDecls == length decls then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 889| let clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'length' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:888:12: clan-pytest-with-core> E 887| in clan-pytest-with-core> E 888| if length optionDecls == length decls then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 889| let clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'filter' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:882:25: clan-pytest-with-core> E 881| defns' = rawDefinitionsByName.${name} or [ ]; clan-pytest-with-core> E 882| optionDecls = filter ( clan-pytest-with-core> E | ^ clan-pytest-with-core> E 883| m: clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:883:13: clan-pytest-with-core> E 882| optionDecls = filter ( clan-pytest-with-core> E 883| m: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 884| m.options ? _type clan-pytest-with-core> E clan-pytest-with-core> E … in the left operand of the AND (&&) operator clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:885:13: clan-pytest-with-core> E 884| m.options ? _type clan-pytest-with-core> E 885| && (m.options._type == "option" || throwDeclarationTypeError loc m.options._type m._file) clan-pytest-with-core> E | ^ clan-pytest-with-core> E 886| ) decls; clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'options' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:807:15: clan-pytest-with-core> E 806| pos = unsafeGetAttrPos n subtree; clan-pytest-with-core> E 807| options = option; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 808| }) subtree clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:289:73: clan-pytest-with-core> E 288| len = length attrPath; clan-pytest-with-core> E 289| atDepth = n: if n == len then value else { ${elemAt attrPath n} = atDepth (n + 1); }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 290| in clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'atDepth' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:289:17: clan-pytest-with-core> E 288| len = length attrPath; clan-pytest-with-core> E 289| atDepth = n: if n == len then value else { ${elemAt attrPath n} = atDepth (n + 1); }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 290| in clan-pytest-with-core> E clan-pytest-with-core> E … in the right operand of the update (//) operator clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:2047:9: clan-pytest-with-core> E 2046| } clan-pytest-with-core> E 2047| // optionalAttrs (toType != null) { clan-pytest-with-core> E | ^ clan-pytest-with-core> E 2048| type = toType; clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:2047:12: clan-pytest-with-core> E 2046| } clan-pytest-with-core> E 2047| // optionalAttrs (toType != null) { clan-pytest-with-core> E | ^ clan-pytest-with-core> E 2048| type = toType; clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'optionalAttrs' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:1492:25: clan-pytest-with-core> E 1491| */ clan-pytest-with-core> E 1492| optionalAttrs = cond: as: if cond then as else { }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1493| 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:1492:29: clan-pytest-with-core> E 1491| */ clan-pytest-with-core> E 1492| optionalAttrs = cond: as: if cond then as else { }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1493| clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:2036:17: clan-pytest-with-core> E 2035| let clan-pytest-with-core> E 2036| opt = attrByPath to { } options; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 2037| in clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'attrByPath' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:89:24: clan-pytest-with-core> E 88| attrByPath = clan-pytest-with-core> E 89| attrPath: default: set: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 90| let clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:106:5: clan-pytest-with-core> E 105| in clan-pytest-with-core> E 106| attrByPath' 0 set; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 107| clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'attrByPath'' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:93:12: clan-pytest-with-core> E 92| attrByPath' = clan-pytest-with-core> E 93| n: s: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 94| ( clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:102:35: clan-pytest-with-core> E 101| in clan-pytest-with-core> E 102| if s ? ${attr} then attrByPath' (n + 1) s.${attr} else default clan-pytest-with-core> E | ^ clan-pytest-with-core> E 103| ) clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'attrByPath'' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:93:12: clan-pytest-with-core> E 92| attrByPath' = clan-pytest-with-core> E 93| n: s: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 94| ( clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:102:35: clan-pytest-with-core> E 101| in clan-pytest-with-core> E 102| if s ? ${attr} then attrByPath' (n + 1) s.${attr} else default clan-pytest-with-core> E | ^ clan-pytest-with-core> E 103| ) clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'attrByPath'' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:93:12: clan-pytest-with-core> E 92| attrByPath' = clan-pytest-with-core> E 93| n: s: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 94| ( clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:102:35: clan-pytest-with-core> E 101| in clan-pytest-with-core> E 102| if s ? ${attr} then attrByPath' (n + 1) s.${attr} else default clan-pytest-with-core> E | ^ clan-pytest-with-core> E 103| ) clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'attrByPath'' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:93:12: clan-pytest-with-core> E 92| attrByPath' = clan-pytest-with-core> E 93| n: s: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 94| ( clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:102:55: clan-pytest-with-core> E 101| in clan-pytest-with-core> E 102| if s ? ${attr} then attrByPath' (n + 1) s.${attr} else default clan-pytest-with-core> E | ^ clan-pytest-with-core> E 103| ) clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:927:37: clan-pytest-with-core> E 926| clan-pytest-with-core> E 927| matchedOptions = mapAttrs (n: v: v.matchedOptions) resultsByName; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 928| clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'matchedOptions' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:893:13: clan-pytest-with-core> E 892| { clan-pytest-with-core> E 893| matchedOptions = evalOptionValue loc opt defns'; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 894| unmatchedDefns = [ ]; clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:893:30: clan-pytest-with-core> E 892| { clan-pytest-with-core> E 893| matchedOptions = evalOptionValue loc opt defns'; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 894| unmatchedDefns = [ ]; clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'evalOptionValue' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1103:15: clan-pytest-with-core> E 1102| evalOptionValue = clan-pytest-with-core> E 1103| loc: opt: defs: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1104| let clan-pytest-with-core> E clan-pytest-with-core> E … in the left operand of the update (//) operator clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1148:5: clan-pytest-with-core> E 1147| warnDeprecation opt clan-pytest-with-core> E 1148| // { clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1149| value = addErrorContext "while evaluating the option `${showOption loc}':" value; 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1141:9: clan-pytest-with-core> E 1140| warnDeprecation = clan-pytest-with-core> E 1141| if (opt.type.deprecationMessage != null) then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1142| warn "The type `types.${opt.type.name}' of option `${showOption loc}' defined in ${showFiles opt.declarations} is deprecated. ${opt.type.deprecationMessage}" clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:890:19: clan-pytest-with-core> E 889| let clan-pytest-with-core> E 890| opt = fixupOptionType loc (mergeOptionDecls loc decls); clan-pytest-with-core> E | ^ clan-pytest-with-core> E 891| in clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'fixupOptionType' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1473:10: clan-pytest-with-core> E 1472| fixupOptionType = clan-pytest-with-core> E 1473| loc: opt: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1474| if opt.type.getSubModules or null == null then 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1474:5: clan-pytest-with-core> E 1473| loc: opt: clan-pytest-with-core> E 1474| if opt.type.getSubModules or null == null then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1475| opt // { type = opt.type or types.unspecified; } clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'type.getSubModules' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/nixos/modules/services/hardware/bluetooth.nix:72:9: clan-pytest-with-core> E 71| settings = mkOption { clan-pytest-with-core> E 72| type = cfgFmt.type; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 73| default = { }; clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/nixos/modules/services/hardware/bluetooth.nix:26:12: clan-pytest-with-core> E 25| clan-pytest-with-core> E 26| cfgFmt = pkgs.formats.ini { }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 27| clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:727:15: clan-pytest-with-core> E 726| extraArgs = mapAttrs ( clan-pytest-with-core> E 727| name: _: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 728| addErrorContext (context name) ( clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the module argument `pkgs' in "/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/nixos/modules/services/hardware/bluetooth.nix": clan-pytest-with-core> E clan-pytest-with-core> E … noting that argument `pkgs` is not externally provided, so querying `_module.args` instead, requiring `config` clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:731:13: clan-pytest-with-core> E 730| "noting that argument `${name}` is not externally provided, so querying `_module.args` instead, requiring `config`" clan-pytest-with-core> E 731| config._module.args.${name} clan-pytest-with-core> E | ^ clan-pytest-with-core> E 732| ) clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/types.nix:1029:18: clan-pytest-with-core> E 1028| value = mapAttrs ( clan-pytest-with-core> E 1029| n: v: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1030| if lazy then clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'optionalValue.value' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1312:5: clan-pytest-with-core> E 1311| clan-pytest-with-core> E 1312| optionalValue = if isDefined then { value = mergedValue; } else { }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1313| }; 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1312:21: clan-pytest-with-core> E 1311| clan-pytest-with-core> E 1312| optionalValue = if isDefined then { value = mergedValue; } else { }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1313| }; clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'values' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1240:11: clan-pytest-with-core> E 1239| { clan-pytest-with-core> E 1240| values = defsSorted; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1241| inherit (defsFiltered) highestPrio; 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1211:11: clan-pytest-with-core> E 1210| # Avoid sorting if we don't have to. clan-pytest-with-core> E 1211| if any (def: def.value._type or "" == "order") defsFiltered.values then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1212| sortProperties defsFiltered.values clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'any' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1211:14: clan-pytest-with-core> E 1210| # Avoid sorting if we don't have to. clan-pytest-with-core> E 1211| if any (def: def.value._type or "" == "order") defsFiltered.values then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1212| sortProperties defsFiltered.values clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1211:19: clan-pytest-with-core> E 1210| # Avoid sorting if we don't have to. clan-pytest-with-core> E 1211| if any (def: def.value._type or "" == "order") defsFiltered.values then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1212| sortProperties defsFiltered.values clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'value._type' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1422:67: clan-pytest-with-core> E 1421| strip = clan-pytest-with-core> E 1422| def: if def.value._type or "" == "override" then def // { value = def.value.content; } else def; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1423| in clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'value.content' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1566:22: clan-pytest-with-core> E 1565| _type = "override"; clan-pytest-with-core> E 1566| inherit priority content; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1567| }; 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/nixos/modules/misc/nixpkgs.nix:107:15: clan-pytest-with-core> E 106| clan-pytest-with-core> E 107| finalPkgs = if opt.pkgs.isDefined then cfg.pkgs.appendOverlays cfg.overlays else defaultPkgs; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 108| clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'pkgs.isDefined' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1154:21: clan-pytest-with-core> E 1153| definitionsWithLocations = res.defsFinal; clan-pytest-with-core> E 1154| inherit (res) isDefined; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1155| inherit (res.checkedAndMerged) valueMeta; clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'isDefined' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1310:5: clan-pytest-with-core> E 1309| clan-pytest-with-core> E 1310| isDefined = defsFinal != [ ]; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1311| clan-pytest-with-core> E clan-pytest-with-core> E (6 duplicate frames omitted) clan-pytest-with-core> E clan-pytest-with-core> E error: attribute 'system' missing clan-pytest-with-core> E at /build/store/nix/store/y3h139bhv4373m1hab367ma4p5i95i2f-source/modules/clan/module.nix:164:24: clan-pytest-with-core> E 163| (lib.modules.importApply ../../nixosModules/machineModules/overridePkgs.nix { clan-pytest-with-core> E 164| pkgs = nixpkgsMatrix.${config.inventory.machines.${name}.nixpkgs}.system.${system}.pkgs; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 165| }) clan-pytest-with-core> E Did you mean systems? 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 0x7fffe63165d0> clan-pytest-with-core> flake_with_sops = clan-pytest-with-core> sops_setup = 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_generate_secret_var_sops_with_default_group( clan-pytest-with-core> monkeypatch: pytest.MonkeyPatch, clan-pytest-with-core> flake_with_sops: ClanFlake, clan-pytest-with-core> sops_setup: SopsSetup, clan-pytest-with-core> ) -> None: clan-pytest-with-core> flake = flake_with_sops clan-pytest-with-core> clan-pytest-with-core> config = flake.machines["my_machine"] = create_test_machine_config() clan-pytest-with-core> config["clan"]["core"]["sops"]["defaultGroups"] = ["my_group"] clan-pytest-with-core> first_generator = config["clan"]["core"]["vars"]["generators"]["first_generator"] clan-pytest-with-core> first_generator["files"]["my_secret"]["secret"] = True clan-pytest-with-core> first_generator["files"]["my_public"]["secret"] = False clan-pytest-with-core> first_generator["script"] = ( clan-pytest-with-core> 'echo hello > "$out"/my_secret && echo hello > "$out"/my_public' clan-pytest-with-core> ) clan-pytest-with-core> second_generator = config["clan"]["core"]["vars"]["generators"]["second_generator"] clan-pytest-with-core> second_generator["files"]["my_secret"]["secret"] = True clan-pytest-with-core> second_generator["files"]["my_public"]["secret"] = False clan-pytest-with-core> second_generator["script"] = ( clan-pytest-with-core> 'echo hello > "$out"/my_secret && echo hello > "$out"/my_public' clan-pytest-with-core> ) clan-pytest-with-core> flake.refresh() clan-pytest-with-core> monkeypatch.chdir(flake.path) clan-pytest-with-core> cli.run(["secrets", "groups", "add-user", "my_group", sops_setup.user]) clan-pytest-with-core> > cli.run(["vars", "generate", "--flake", str(flake.path), "my_machine"]) clan-pytest-with-core> clan-pytest-with-core> /build/src/clan_cli/tests/test_vars_generate.py:327: 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/vars/generate.py:33: in generate_command clan-pytest-with-core> run_generators( clan-pytest-with-core> /build/src/clan_lib/vars/generate.py:306: in run_generators clan-pytest-with-core> all_generators = get_generators(machines, full_closure=True) clan-pytest-with-core> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ clan-pytest-with-core> /build/src/clan_lib/vars/generate.py:146: in get_generators clan-pytest-with-core> flake.precache(get_generators_precache_selectors(list(all_machines))) clan-pytest-with-core> /build/src/clan_lib/flake/flake.py:1151: in precache clan-pytest-with-core> self.get_from_nix(not_fetched_selectors) clan-pytest-with-core> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ clan-pytest-with-core> clan-pytest-with-core> self = Flake(identifier='/build/pytest-minn_v7_/flake', hash='sha256-ScyRl377TG3eKpkVGYOtNTMTKTDUeHPEYGQ6ebP+TiU=', 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.?secrets.?age.?plugins', 'clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.gener...ngs.publicModule', 'clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.settings.secretModule', ...] 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 while executing:$ clan select 'clanInternals.?secrets.?age.?plugins' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.generators.*.{share,dependencies,prompts,validationHash}' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.generators.*.files.*.{secret,deploy,owner,group,mode,neededFor}' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.?sops.?defaultGroups' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.settings.publicModule' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.settings.secretModule' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.?sops.?secretUploadDirectory' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.?password-store.?passCommand' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.?password-store.?secretLocation' clan-pytest-with-core> E $ clan select 'clanInternals.vars.settings.?recipients' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.?age.?secretLocation' clan-pytest-with-core> E Reason: attribute 'system' missing clan-pytest-with-core> E at /build/store/nix/store/y3h139bhv4373m1hab367ma4p5i95i2f-source/modules/clan/module.nix:164:24: clan-pytest-with-core> E 163| (lib.modules.importApply ../../nixosModules/machineModules/overridePkgs.nix { clan-pytest-with-core> E 164| pkgs = nixpkgsMatrix.${config.inventory.machines.${name}.nixpkgs}.system.${system}.pkgs; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 165| }) clan-pytest-with-core> E Did you mean systems?. 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 setup ----------------------------- clan-pytest-with-core> !! $HOME does not point to a temp directory!! HOME=/build/pytest-minn_v7_ clan-pytest-with-core> [localhost] $ clan vars keygen --flake /build/pytest-minn_v7_/flake --user admin --no-interactive clan-pytest-with-core> Caller: /build/src/clan_cli/tests/age_keys.py:31::init clan-pytest-with-core> clan-pytest-with-core> Prefetching flake /build/pytest-minn_v7_/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/febbcab65441be6ccc547560fd0155faadebbbb7 clan-pytest-with-core> (cached) $ clan select clanInternals.inventoryClass.relativeDirectory 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> git \ clan-pytest-with-core> -C /build/pytest-minn_v7_/flake \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-minn_v7_/flake/sops/users/admin 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/admin to git clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-minn_v7_/flake \ clan-pytest-with-core> diff \ clan-pytest-with-core> --cached --exit-code \ clan-pytest-with-core> -- /build/pytest-minn_v7_/flake/sops/users/admin 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-minn_v7_/flake \ clan-pytest-with-core> commit \ clan-pytest-with-core> -m 'secrets: add user admin' \ clan-pytest-with-core> --no-verify /build/pytest-minn_v7_/flake/sops/users/admin 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/admin to git 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/pytest-minn_v7_ clan-pytest-with-core> DEBUG clan_cli.tests.helpers.cli:__init__.py:143 $ clan vars keygen --flake /build/pytest-minn_v7_/flake --user admin --no-interactive clan-pytest-with-core> Caller: /build/src/clan_cli/tests/age_keys.py:31::init clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:927 Prefetching flake /build/pytest-minn_v7_/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/febbcab65441be6ccc547560fd0155faadebbbb7 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.cmd:__init__.py:143 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> DEBUG clan_lib.cmd:__init__.py:143 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> DEBUG clan_cli.secrets.sops:sops.py:99 Found age public key from a private key in the environment (SOPS_AGE_KEY): age1dhwqzkah943xzc34tc3dlmfayyevcmdmxzjezdgdy33euxwf59vsp3vk3c clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:143 git \ clan-pytest-with-core> -C /build/pytest-minn_v7_/flake \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-minn_v7_/flake/sops/users/admin 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> DEBUG clan_lib.cmd:__init__.py:143 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> DEBUG clan_lib.git:__init__.py:98 Adding sops/users/admin to git clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:143 git \ clan-pytest-with-core> -C /build/pytest-minn_v7_/flake \ clan-pytest-with-core> diff \ clan-pytest-with-core> --cached --exit-code \ clan-pytest-with-core> -- /build/pytest-minn_v7_/flake/sops/users/admin 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> DEBUG clan_lib.cmd:__init__.py:143 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> DEBUG clan_lib.cmd:__init__.py:143 git \ clan-pytest-with-core> -C /build/pytest-minn_v7_/flake \ clan-pytest-with-core> commit \ clan-pytest-with-core> -m 'secrets: add user admin' \ clan-pytest-with-core> --no-verify /build/pytest-minn_v7_/flake/sops/users/admin 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> DEBUG clan_lib.cmd:__init__.py:143 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> INFO clan_lib.git:__init__.py:141 Committed sops/users/admin to git clan-pytest-with-core> ----------------------------- Captured stdout call ----------------------------- clan-pytest-with-core> [main 15d2d9b] flake: update by flake generator clan-pytest-with-core> 2 files changed, 53 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> ----------------------------- Captured stderr call ----------------------------- clan-pytest-with-core> Prefetching flake /build/pytest-minn_v7_/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/d2c0050d97832c3ac5193485b93705d00938c15e clan-pytest-with-core> (cached) $ clan select clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> [localhost] $ clan secrets groups add-user my_group admin clan-pytest-with-core> Caller: /build/src/clan_cli/tests/test_vars_generate.py:326::test_generate_secret_var_sops_with_default_group clan-pytest-with-core> clan-pytest-with-core> Prefetching flake /build/pytest-minn_v7_/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.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/910972f55ba1838ab3a2bc08c41d57f4d2fa0ead clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-minn_v7_/flake \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-minn_v7_/flake/sops/groups/my_group/users/admin 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/my_group/users/admin to git clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-minn_v7_/flake \ clan-pytest-with-core> diff \ clan-pytest-with-core> --cached --exit-code \ clan-pytest-with-core> -- /build/pytest-minn_v7_/flake/sops/groups/my_group/users/admin 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-minn_v7_/flake \ clan-pytest-with-core> commit \ clan-pytest-with-core> -m 'secrets: add user admin to group my_group' \ clan-pytest-with-core> --no-verify /build/pytest-minn_v7_/flake/sops/groups/my_group/users/admin 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/my_group/users/admin to git clan-pytest-with-core> [localhost] $ clan vars generate --flake /build/pytest-minn_v7_/flake my_machine clan-pytest-with-core> Caller: /build/src/clan_cli/tests/test_vars_generate.py:327::test_generate_secret_var_sops_with_default_group clan-pytest-with-core> clan-pytest-with-core> Prefetching flake /build/pytest-minn_v7_/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.cliChecks clan-pytest-with-core> Cache miss for clanInternals.inventoryClass.inventorySerialization.{instances,machines,meta} clan-pytest-with-core> Loading flake cache from file /build/clan-flake-cache/flakes-v2/dfed65da2411a5cd88bc203275a3ea3328170023 clan-pytest-with-core> Cache miss for clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> Loading flake cache from file /build/clan-flake-cache/flakes-v2/dfed65da2411a5cd88bc203275a3ea3328170023 clan-pytest-with-core> (cached) $ clan select 'clanInternals.inventoryClass.inventorySerialization.{instances,machines,meta}' clan-pytest-with-core> Precaching selectors: clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.machines clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.instances clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.meta clan-pytest-with-core> - (not cached) clanInternals.?secrets.?age.?plugins clan-pytest-with-core> - (cached) clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.generators.*.{share,dependencies,prompts,validationHash} clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.generators.*.files.*.{secret,deploy,owner,group,mode,neededFor} clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.?sops.?defaultGroups clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.settings.publicModule clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.settings.secretModule clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.?sops.?secretUploadDirectory clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.?password-store.?passCommand clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.?password-store.?secretLocation clan-pytest-with-core> - (not cached) clanInternals.vars.settings.?recipients clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.?age.?secretLocation clan-pytest-with-core> ------------------------------ Captured log call ------------------------------- clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:927 Prefetching flake /build/pytest-minn_v7_/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/d2c0050d97832c3ac5193485b93705d00938c15e clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1179 (cached) $ clan select clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> DEBUG clan_cli.tests.helpers.cli:__init__.py:143 $ clan secrets groups add-user my_group admin clan-pytest-with-core> Caller: /build/src/clan_cli/tests/test_vars_generate.py:326::test_generate_secret_var_sops_with_default_group clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:927 Prefetching flake /build/pytest-minn_v7_/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.inventoryClass.relativeDirectory clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1174 Cache miss for clanInternals.?secrets.?age.?plugins clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:789 Loading flake cache from file /build/clan-flake-cache/flakes-v2/910972f55ba1838ab3a2bc08c41d57f4d2fa0ead clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:143 git \ clan-pytest-with-core> -C /build/pytest-minn_v7_/flake \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-minn_v7_/flake/sops/groups/my_group/users/admin 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> DEBUG clan_lib.cmd:__init__.py:143 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> DEBUG clan_lib.git:__init__.py:98 Adding sops/groups/my_group/users/admin to git clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:143 git \ clan-pytest-with-core> -C /build/pytest-minn_v7_/flake \ clan-pytest-with-core> diff \ clan-pytest-with-core> --cached --exit-code \ clan-pytest-with-core> -- /build/pytest-minn_v7_/flake/sops/groups/my_group/users/admin 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> DEBUG clan_lib.cmd:__init__.py:143 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> DEBUG clan_lib.cmd:__init__.py:143 git \ clan-pytest-with-core> -C /build/pytest-minn_v7_/flake \ clan-pytest-with-core> commit \ clan-pytest-with-core> -m 'secrets: add user admin to group my_group' \ clan-pytest-with-core> --no-verify /build/pytest-minn_v7_/flake/sops/groups/my_group/users/admin 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> DEBUG clan_lib.cmd:__init__.py:143 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> INFO clan_lib.git:__init__.py:141 Committed sops/groups/my_group/users/admin to git clan-pytest-with-core> DEBUG clan_cli.tests.helpers.cli:__init__.py:143 $ clan vars generate --flake /build/pytest-minn_v7_/flake my_machine clan-pytest-with-core> Caller: /build/src/clan_cli/tests/test_vars_generate.py:327::test_generate_secret_var_sops_with_default_group clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:927 Prefetching flake /build/pytest-minn_v7_/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.cliChecks clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1174 Cache miss for clanInternals.inventoryClass.inventorySerialization.{instances,machines,meta} clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:789 Loading flake cache from file /build/clan-flake-cache/flakes-v2/dfed65da2411a5cd88bc203275a3ea3328170023 clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1174 Cache miss for clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:789 Loading flake cache from file /build/clan-flake-cache/flakes-v2/dfed65da2411a5cd88bc203275a3ea3328170023 clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1179 (cached) $ clan select 'clanInternals.inventoryClass.inventorySerialization.{instances,machines,meta}' clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1144 Precaching selectors: clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.machines clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.instances clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.meta clan-pytest-with-core> - (not cached) clanInternals.?secrets.?age.?plugins clan-pytest-with-core> - (cached) clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.generators.*.{share,dependencies,prompts,validationHash} clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.generators.*.files.*.{secret,deploy,owner,group,mode,neededFor} clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.?sops.?defaultGroups clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.settings.publicModule clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.settings.secretModule clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.?sops.?secretUploadDirectory clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.?password-store.?passCommand clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.?password-store.?secretLocation clan-pytest-with-core> - (not cached) clanInternals.vars.settings.?recipients clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.?age.?secretLocation clan-pytest-with-core> _________________________________ test_prompt __________________________________ clan-pytest-with-core> [gw11] linux -- Python 3.14.7 /nix/store/3n4qphl9s728sz8frmpqqrv9b1m87g68-python3-3.14.7/bin/python clan-pytest-with-core> clan-pytest-with-core> self = Flake(identifier='/build/pytest-zs196fgd/flake', hash='sha256-AHlsWxTggHbWXRjuTth/iLXA/dtfbjPhIViTLrW2ixs=', 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.?secrets.?age.?plugins', 'clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.gener...ngs.publicModule', 'clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.settings.secretModule', ...] 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-zs196fgd/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 --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/kfzslv30h8nlb11qbfkm9j538557hf0j-source?narHash=sha256-AHlsWxTggHbWXRjuTth/iLXA/dtfbjPhIViTLrW2ixs="; 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": "maybe", "value": "secrets"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "plugins"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "share"}, {"type": "str", "value": "dependencies"}, {"type": "str", "value": "prompts"}, {"type": "str", "value": "validationHash"}]}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "str", "value": "files"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "secret"}, {"type": "str", "value": "deploy"}, {"type": "str", "value": "owner"}, {"type": "str", "value": "group"}, {"type": "str", "value": "mode"}, {"type": "str", "value": "neededFor"}]}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "defaultGroups"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "publicModule"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "secretModule"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "secretUploadDirectory"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "passCommand"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "secretLocation"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "maybe", "value": "recipients"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "secretLocation"}]'"'"''"'"') 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": "maybe", "value": "secrets"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "plugins"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "share"}, {"type": "str", "value": "dependencies"}, {"type": "str", "value": "prompts"}, {"type": "str", "value": "validationHash"}]}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "str", "value": "files"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "secret"}, {"type": "str", "value": "deploy"}, {"type": "str", "value": "owner"}, {"type": "str", "value": "group"}, {"type": "str", "value": "mode"}, {"type": "str", "value": "neededFor"}]}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "defaultGroups"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "publicModule"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "secretModule"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "secretUploadDirectory"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "passCommand"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "secretLocation"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "maybe", "value": "recipients"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "secretLocation"}]'') flake) clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the module argument `pkgs' in "/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/nixos/modules/services/hardware/bluetooth.nix": clan-pytest-with-core> E clan-pytest-with-core> E … noting that argument `pkgs` is not externally provided, so querying `_module.args` instead, requiring `config` 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: attribute 'system' missing clan-pytest-with-core> E at /build/store/nix/store/y3h139bhv4373m1hab367ma4p5i95i2f-source/modules/clan/module.nix:164:24: clan-pytest-with-core> E 163| (lib.modules.importApply ../../nixosModules/machineModules/overridePkgs.nix { clan-pytest-with-core> E 164| pkgs = nixpkgsMatrix.${config.inventory.machines.${name}.nixpkgs}.system.${system}.pkgs; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 165| }) clan-pytest-with-core> E Did you mean systems? 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 0x7fffe66acd10> clan-pytest-with-core> flake_with_sops = clan-pytest-with-core> caplog = <_pytest.logging.LogCaptureFixture object at 0x7fffe65f8830> 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_prompt( clan-pytest-with-core> monkeypatch: pytest.MonkeyPatch, clan-pytest-with-core> flake_with_sops: ClanFlake, clan-pytest-with-core> caplog: pytest.LogCaptureFixture, clan-pytest-with-core> ) -> None: clan-pytest-with-core> """Test that generators can use prompts to collect user input and store the values appropriately.""" clan-pytest-with-core> flake = flake_with_sops clan-pytest-with-core> clan-pytest-with-core> # Configure the machine and generator clan-pytest-with-core> config = flake.machines["my_machine"] = create_test_machine_config() clan-pytest-with-core> my_generator = config["clan"]["core"]["vars"]["generators"]["my_generator"] clan-pytest-with-core> clan-pytest-with-core> # Define output files - these will contain the prompt responses clan-pytest-with-core> my_generator["files"]["line_value"]["secret"] = False # Public file clan-pytest-with-core> my_generator["files"]["multiline_value"]["secret"] = False # Public file clan-pytest-with-core> clan-pytest-with-core> # Configure prompts that will collect user input clan-pytest-with-core> # prompt1: Single line input, not persisted (temporary) clan-pytest-with-core> my_generator["prompts"]["prompt1"]["description"] = "dream2nix" clan-pytest-with-core> my_generator["prompts"]["prompt1"]["persist"] = False clan-pytest-with-core> my_generator["prompts"]["prompt1"]["type"] = "line" clan-pytest-with-core> clan-pytest-with-core> # prompt2: Single line input, not persisted (temporary) clan-pytest-with-core> my_generator["prompts"]["prompt2"]["description"] = "dream2nix" clan-pytest-with-core> my_generator["prompts"]["prompt2"]["persist"] = False clan-pytest-with-core> my_generator["prompts"]["prompt2"]["type"] = "line" clan-pytest-with-core> clan-pytest-with-core> # prompt_persist: This prompt will be stored as a secret for reuse clan-pytest-with-core> my_generator["prompts"]["prompt_persist"]["persist"] = True clan-pytest-with-core> clan-pytest-with-core> # Script that reads prompt responses and writes them to output files clan-pytest-with-core> my_generator["script"] = ( clan-pytest-with-core> 'cat "$prompts"/prompt1 > "$out"/line_value; cat "$prompts"/prompt2 > "$out"/multiline_value' clan-pytest-with-core> ) clan-pytest-with-core> clan-pytest-with-core> flake.refresh() clan-pytest-with-core> monkeypatch.chdir(flake.path) clan-pytest-with-core> clan-pytest-with-core> # Mock the prompt responses to simulate user input clan-pytest-with-core> monkeypatch.setattr( clan-pytest-with-core> "clan_lib.vars.prompt.MOCK_PROMPT_RESPONSE", clan-pytest-with-core> iter(["line input", "my\nmultiline\ninput\n", "prompt_persist"]), clan-pytest-with-core> ) clan-pytest-with-core> clan-pytest-with-core> # Run the generator which will collect prompts and generate vars clan-pytest-with-core> with caplog.at_level(logging.INFO): clan-pytest-with-core> > cli.run(["vars", "generate", "--flake", str(flake.path), "my_machine"]) clan-pytest-with-core> clan-pytest-with-core> /build/src/clan_cli/tests/test_vars_prompts.py:75: 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/vars/generate.py:33: in generate_command clan-pytest-with-core> run_generators( clan-pytest-with-core> /build/src/clan_lib/vars/generate.py:306: in run_generators clan-pytest-with-core> all_generators = get_generators(machines, full_closure=True) clan-pytest-with-core> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ clan-pytest-with-core> /build/src/clan_lib/vars/generate.py:146: in get_generators clan-pytest-with-core> flake.precache(get_generators_precache_selectors(list(all_machines))) clan-pytest-with-core> /build/src/clan_lib/flake/flake.py:1151: in precache clan-pytest-with-core> self.get_from_nix(not_fetched_selectors) clan-pytest-with-core> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ clan-pytest-with-core> clan-pytest-with-core> self = Flake(identifier='/build/pytest-zs196fgd/flake', hash='sha256-AHlsWxTggHbWXRjuTth/iLXA/dtfbjPhIViTLrW2ixs=', 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.?secrets.?age.?plugins', 'clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.gener...ngs.publicModule', 'clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.settings.secretModule', ...] 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 while executing:$ clan select 'clanInternals.?secrets.?age.?plugins' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.generators.*.{share,dependencies,prompts,validationHash}' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.generators.*.files.*.{secret,deploy,owner,group,mode,neededFor}' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.?sops.?defaultGroups' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.settings.publicModule' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.settings.secretModule' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.?sops.?secretUploadDirectory' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.?password-store.?passCommand' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.?password-store.?secretLocation' clan-pytest-with-core> E $ clan select 'clanInternals.vars.settings.?recipients' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.?age.?secretLocation' clan-pytest-with-core> E Reason: attribute 'system' missing clan-pytest-with-core> E at /build/store/nix/store/y3h139bhv4373m1hab367ma4p5i95i2f-source/modules/clan/module.nix:164:24: clan-pytest-with-core> E 163| (lib.modules.importApply ../../nixosModules/machineModules/overridePkgs.nix { clan-pytest-with-core> E 164| pkgs = nixpkgsMatrix.${config.inventory.machines.${name}.nixpkgs}.system.${system}.pkgs; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 165| }) clan-pytest-with-core> E Did you mean systems?. 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 setup ----------------------------- clan-pytest-with-core> !! $HOME does not point to a temp directory!! HOME=/build/pytest-zs196fgd clan-pytest-with-core> [localhost] $ clan vars keygen --flake /build/pytest-zs196fgd/flake --user admin --no-interactive clan-pytest-with-core> Caller: /build/src/clan_cli/tests/age_keys.py:31::init clan-pytest-with-core> clan-pytest-with-core> Prefetching flake /build/pytest-zs196fgd/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/febbcab65441be6ccc547560fd0155faadebbbb7 clan-pytest-with-core> (cached) $ clan select clanInternals.inventoryClass.relativeDirectory 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> git \ clan-pytest-with-core> -C /build/pytest-zs196fgd/flake \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-zs196fgd/flake/sops/users/admin 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/admin to git clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-zs196fgd/flake \ clan-pytest-with-core> diff \ clan-pytest-with-core> --cached --exit-code \ clan-pytest-with-core> -- /build/pytest-zs196fgd/flake/sops/users/admin 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-zs196fgd/flake \ clan-pytest-with-core> commit \ clan-pytest-with-core> -m 'secrets: add user admin' \ clan-pytest-with-core> --no-verify /build/pytest-zs196fgd/flake/sops/users/admin 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/admin to git 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/pytest-zs196fgd clan-pytest-with-core> DEBUG clan_cli.tests.helpers.cli:__init__.py:143 $ clan vars keygen --flake /build/pytest-zs196fgd/flake --user admin --no-interactive clan-pytest-with-core> Caller: /build/src/clan_cli/tests/age_keys.py:31::init clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:927 Prefetching flake /build/pytest-zs196fgd/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/febbcab65441be6ccc547560fd0155faadebbbb7 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.cmd:__init__.py:143 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> DEBUG clan_lib.cmd:__init__.py:143 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> DEBUG clan_cli.secrets.sops:sops.py:99 Found age public key from a private key in the environment (SOPS_AGE_KEY): age1dhwqzkah943xzc34tc3dlmfayyevcmdmxzjezdgdy33euxwf59vsp3vk3c clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:143 git \ clan-pytest-with-core> -C /build/pytest-zs196fgd/flake \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-zs196fgd/flake/sops/users/admin 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> DEBUG clan_lib.cmd:__init__.py:143 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> DEBUG clan_lib.git:__init__.py:98 Adding sops/users/admin to git clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:143 git \ clan-pytest-with-core> -C /build/pytest-zs196fgd/flake \ clan-pytest-with-core> diff \ clan-pytest-with-core> --cached --exit-code \ clan-pytest-with-core> -- /build/pytest-zs196fgd/flake/sops/users/admin 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> DEBUG clan_lib.cmd:__init__.py:143 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> DEBUG clan_lib.cmd:__init__.py:143 git \ clan-pytest-with-core> -C /build/pytest-zs196fgd/flake \ clan-pytest-with-core> commit \ clan-pytest-with-core> -m 'secrets: add user admin' \ clan-pytest-with-core> --no-verify /build/pytest-zs196fgd/flake/sops/users/admin 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> DEBUG clan_lib.cmd:__init__.py:143 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> INFO clan_lib.git:__init__.py:141 Committed sops/users/admin to git clan-pytest-with-core> ----------------------------- Captured stdout call ----------------------------- clan-pytest-with-core> [main c86a7b2] flake: update by flake generator clan-pytest-with-core> 2 files changed, 52 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> ----------------------------- Captured stderr call ----------------------------- clan-pytest-with-core> Prefetching flake /build/pytest-zs196fgd/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/d2c0050d97832c3ac5193485b93705d00938c15e clan-pytest-with-core> (cached) $ clan select clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> warning: you don't have Internet access; disabling some network-dependent features clan-pytest-with-core> ------------------------------ Captured log call ------------------------------- clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:927 Prefetching flake /build/pytest-zs196fgd/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/d2c0050d97832c3ac5193485b93705d00938c15e clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1179 (cached) $ clan select clanInternals.inventoryClass.relativeDirectory 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> __________________ test_generate_secret_for_multiple_machines __________________ clan-pytest-with-core> [gw3] linux -- Python 3.14.7 /nix/store/3n4qphl9s728sz8frmpqqrv9b1m87g68-python3-3.14.7/bin/python clan-pytest-with-core> clan-pytest-with-core> self = Flake(identifier='/build/pytest-v4o3vkzd/flake', hash='sha256-6mBS7BqDJfGQjKUHDnEUsyUQJVnQHzxnRSeS3zYvXbE=', 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.?secrets.?age.?plugins', 'clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.var...licModule', 'clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.settings.secretModule', ...] 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-v4o3vkzd/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/1mi681zzmn9havs47xkhi9c1cvyfp073-source?narHash=sha256-6mBS7BqDJfGQjKUHDnEUsyUQJVnQHzxnRSeS3zYvXbE="; 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": "maybe", "value": "secrets"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "plugins"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "share"}, {"type": "str", "value": "dependencies"}, {"type": "str", "value": "prompts"}, {"type": "str", "value": "validationHash"}]}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "str", "value": "files"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "secret"}, {"type": "str", "value": "deploy"}, {"type": "str", "value": "owner"}, {"type": "str", "value": "group"}, {"type": "str", "value": "mode"}, {"type": "str", "value": "neededFor"}]}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "defaultGroups"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "publicModule"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "secretModule"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "secretUploadDirectory"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "passCommand"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "secretLocation"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "maybe", "value": "recipients"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "secretLocation"}]'"'"''"'"') 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": "maybe", "value": "secrets"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "plugins"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "share"}, {"type": "str", "value": "dependencies"}, {"type": "str", "value": "prompts"}, {"type": "str", "value": "validationHash"}]}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "str", "value": "files"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "secret"}, {"type": "str", "value": "deploy"}, {"type": "str", "value": "owner"}, {"type": "str", "value": "group"}, {"type": "str", "value": "mode"}, {"type": "str", "value": "neededFor"}]}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "defaultGroups"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "publicModule"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "secretModule"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "secretUploadDirectory"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "passCommand"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "secretLocation"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "maybe", "value": "recipients"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "secretLocation"}]'') 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": "maybe", "value": "secrets"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "plugins"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "share"}, {"type": "str", "value": "dependencies"}, {"type": "str", "value": "prompts"}, {"type": "str", "value": "validationHash"}]}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "str", "value": "files"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "secret"}, {"type": "str", "value": "deploy"}, {"type": "str", "value": "owner"}, {"type": "str", "value": "group"}, {"type": "str", "value": "mode"}, {"type": "str", "value": "neededFor"}]}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "defaultGroups"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "publicModule"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "secretModule"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "secretUploadDirectory"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "passCommand"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "secretLocation"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "maybe", "value": "recipients"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "secretLocation"}]'') flake) clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating list element at index 1 clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating attribute 'machine1' clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/cba1x9mxnwr8b36cw41bya7g6d5v1p7d-source/select.nix:325:37: clan-pytest-with-core> E 324| in clan-pytest-with-core> E 325| builtins.mapAttrs (_: v: recurse selectors (idx + 1) v) filteredAttrs clan-pytest-with-core> E | ^ clan-pytest-with-core> E 326| else if selector.type == "maybe" then 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:325:40: clan-pytest-with-core> E 324| in clan-pytest-with-core> E 325| builtins.mapAttrs (_: v: recurse selectors (idx + 1) v) filteredAttrs clan-pytest-with-core> E | ^ clan-pytest-with-core> E 326| else if selector.type == "maybe" then 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 … from call site clan-pytest-with-core> E at /build/store/nix/store/cba1x9mxnwr8b36cw41bya7g6d5v1p7d-source/select.nix:312:15: clan-pytest-with-core> E 311| else if selector.type == "str" then clan-pytest-with-core> E 312| recurse selectors (idx + 1) (builtins.getAttr selector.value obj) clan-pytest-with-core> E | ^ clan-pytest-with-core> E 313| else if selector.type == "set" then 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 'getAttr' builtin clan-pytest-with-core> E at /build/store/nix/store/cba1x9mxnwr8b36cw41bya7g6d5v1p7d-source/select.nix:312:44: clan-pytest-with-core> E 311| else if selector.type == "str" then clan-pytest-with-core> E 312| recurse selectors (idx + 1) (builtins.getAttr selector.value obj) clan-pytest-with-core> E | ^ clan-pytest-with-core> E 313| else if selector.type == "set" then clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'seq' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:401:18: clan-pytest-with-core> E 400| options = checked options; clan-pytest-with-core> E 401| config = checked (removeAttrs config [ "_module" ]); clan-pytest-with-core> E | ^ clan-pytest-with-core> E 402| _module = checked (config._module); 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:304:9: clan-pytest-with-core> E 303| checkUnmatched = clan-pytest-with-core> E 304| if config._module.check && config._module.freeformType == null && merged.unmatchedDefns != [ ] then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 305| let clan-pytest-with-core> E clan-pytest-with-core> E … in the right operand of the AND (&&) operator clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:304:72: clan-pytest-with-core> E 303| checkUnmatched = clan-pytest-with-core> E 304| if config._module.check && config._module.freeformType == null && merged.unmatchedDefns != [ ] then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 305| let clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'unmatchedDefns' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:940:7: clan-pytest-with-core> E 939| # Transforms unmatchedDefnsByName into a list of definitions clan-pytest-with-core> E 940| unmatchedDefns = clan-pytest-with-core> E | ^ clan-pytest-with-core> E 941| if configs == [ ] then clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'concatLists' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:946:11: clan-pytest-with-core> E 945| else clan-pytest-with-core> E 946| concatLists ( clan-pytest-with-core> E | ^ clan-pytest-with-core> E 947| mapAttrsToList ( clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:948:21: clan-pytest-with-core> E 947| mapAttrsToList ( clan-pytest-with-core> E 948| name: defs: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 949| map ( clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'map' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:949:15: clan-pytest-with-core> E 948| name: defs: clan-pytest-with-core> E 949| map ( clan-pytest-with-core> E | ^ clan-pytest-with-core> E 950| def: clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:932:22: clan-pytest-with-core> E 931| # Propagate all unmatched definitions from nested option sets clan-pytest-with-core> E 932| mapAttrs (n: v: v.unmatchedDefns) resultsByName clan-pytest-with-core> E | ^ clan-pytest-with-core> E 933| # Plus the definitions for the current prefix that don't have a matching option clan-pytest-with-core> E clan-pytest-with-core> E (10 duplicate frames omitted) clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:932:25: clan-pytest-with-core> E 931| # Propagate all unmatched definitions from nested option sets clan-pytest-with-core> E 932| mapAttrs (n: v: v.unmatchedDefns) resultsByName clan-pytest-with-core> E | ^ clan-pytest-with-core> E 933| # Plus the definitions for the current prefix that don't have a matching option clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:876:15: clan-pytest-with-core> E 875| resultsByName = mapAttrs ( clan-pytest-with-core> E 876| name: decls: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 877| # We're descending into attribute ‘name’. 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:888:9: clan-pytest-with-core> E 887| in clan-pytest-with-core> E 888| if length optionDecls == length decls then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 889| let clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'length' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:888:12: clan-pytest-with-core> E 887| in clan-pytest-with-core> E 888| if length optionDecls == length decls then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 889| let clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'filter' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:882:25: clan-pytest-with-core> E 881| defns' = rawDefinitionsByName.${name} or [ ]; clan-pytest-with-core> E 882| optionDecls = filter ( clan-pytest-with-core> E | ^ clan-pytest-with-core> E 883| m: clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:883:13: clan-pytest-with-core> E 882| optionDecls = filter ( clan-pytest-with-core> E 883| m: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 884| m.options ? _type clan-pytest-with-core> E clan-pytest-with-core> E … in the left operand of the AND (&&) operator clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:885:13: clan-pytest-with-core> E 884| m.options ? _type clan-pytest-with-core> E 885| && (m.options._type == "option" || throwDeclarationTypeError loc m.options._type m._file) clan-pytest-with-core> E | ^ clan-pytest-with-core> E 886| ) decls; clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'options' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:807:15: clan-pytest-with-core> E 806| pos = unsafeGetAttrPos n subtree; clan-pytest-with-core> E 807| options = option; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 808| }) subtree clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:289:73: clan-pytest-with-core> E 288| len = length attrPath; clan-pytest-with-core> E 289| atDepth = n: if n == len then value else { ${elemAt attrPath n} = atDepth (n + 1); }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 290| in clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'atDepth' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:289:17: clan-pytest-with-core> E 288| len = length attrPath; clan-pytest-with-core> E 289| atDepth = n: if n == len then value else { ${elemAt attrPath n} = atDepth (n + 1); }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 290| in clan-pytest-with-core> E clan-pytest-with-core> E … in the right operand of the update (//) operator clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:2047:9: clan-pytest-with-core> E 2046| } clan-pytest-with-core> E 2047| // optionalAttrs (toType != null) { clan-pytest-with-core> E | ^ clan-pytest-with-core> E 2048| type = toType; clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:2047:12: clan-pytest-with-core> E 2046| } clan-pytest-with-core> E 2047| // optionalAttrs (toType != null) { clan-pytest-with-core> E | ^ clan-pytest-with-core> E 2048| type = toType; clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'optionalAttrs' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:1492:25: clan-pytest-with-core> E 1491| */ clan-pytest-with-core> E 1492| optionalAttrs = cond: as: if cond then as else { }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1493| 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:1492:29: clan-pytest-with-core> E 1491| */ clan-pytest-with-core> E 1492| optionalAttrs = cond: as: if cond then as else { }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1493| clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:2036:17: clan-pytest-with-core> E 2035| let clan-pytest-with-core> E 2036| opt = attrByPath to { } options; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 2037| in clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'attrByPath' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:89:24: clan-pytest-with-core> E 88| attrByPath = clan-pytest-with-core> E 89| attrPath: default: set: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 90| let clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:106:5: clan-pytest-with-core> E 105| in clan-pytest-with-core> E 106| attrByPath' 0 set; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 107| clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'attrByPath'' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:93:12: clan-pytest-with-core> E 92| attrByPath' = clan-pytest-with-core> E 93| n: s: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 94| ( clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:102:35: clan-pytest-with-core> E 101| in clan-pytest-with-core> E 102| if s ? ${attr} then attrByPath' (n + 1) s.${attr} else default clan-pytest-with-core> E | ^ clan-pytest-with-core> E 103| ) clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'attrByPath'' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:93:12: clan-pytest-with-core> E 92| attrByPath' = clan-pytest-with-core> E 93| n: s: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 94| ( clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:102:35: clan-pytest-with-core> E 101| in clan-pytest-with-core> E 102| if s ? ${attr} then attrByPath' (n + 1) s.${attr} else default clan-pytest-with-core> E | ^ clan-pytest-with-core> E 103| ) clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'attrByPath'' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:93:12: clan-pytest-with-core> E 92| attrByPath' = clan-pytest-with-core> E 93| n: s: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 94| ( clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:102:35: clan-pytest-with-core> E 101| in clan-pytest-with-core> E 102| if s ? ${attr} then attrByPath' (n + 1) s.${attr} else default clan-pytest-with-core> E | ^ clan-pytest-with-core> E 103| ) clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'attrByPath'' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:93:12: clan-pytest-with-core> E 92| attrByPath' = clan-pytest-with-core> E 93| n: s: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 94| ( clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:102:55: clan-pytest-with-core> E 101| in clan-pytest-with-core> E 102| if s ? ${attr} then attrByPath' (n + 1) s.${attr} else default clan-pytest-with-core> E | ^ clan-pytest-with-core> E 103| ) clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:927:37: clan-pytest-with-core> E 926| clan-pytest-with-core> E 927| matchedOptions = mapAttrs (n: v: v.matchedOptions) resultsByName; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 928| clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'matchedOptions' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:893:13: clan-pytest-with-core> E 892| { clan-pytest-with-core> E 893| matchedOptions = evalOptionValue loc opt defns'; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 894| unmatchedDefns = [ ]; clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:893:30: clan-pytest-with-core> E 892| { clan-pytest-with-core> E 893| matchedOptions = evalOptionValue loc opt defns'; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 894| unmatchedDefns = [ ]; clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'evalOptionValue' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1103:15: clan-pytest-with-core> E 1102| evalOptionValue = clan-pytest-with-core> E 1103| loc: opt: defs: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1104| let clan-pytest-with-core> E clan-pytest-with-core> E … in the left operand of the update (//) operator clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1148:5: clan-pytest-with-core> E 1147| warnDeprecation opt clan-pytest-with-core> E 1148| // { clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1149| value = addErrorContext "while evaluating the option `${showOption loc}':" value; 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1141:9: clan-pytest-with-core> E 1140| warnDeprecation = clan-pytest-with-core> E 1141| if (opt.type.deprecationMessage != null) then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1142| warn "The type `types.${opt.type.name}' of option `${showOption loc}' defined in ${showFiles opt.declarations} is deprecated. ${opt.type.deprecationMessage}" clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:890:19: clan-pytest-with-core> E 889| let clan-pytest-with-core> E 890| opt = fixupOptionType loc (mergeOptionDecls loc decls); clan-pytest-with-core> E | ^ clan-pytest-with-core> E 891| in clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'fixupOptionType' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1473:10: clan-pytest-with-core> E 1472| fixupOptionType = clan-pytest-with-core> E 1473| loc: opt: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1474| if opt.type.getSubModules or null == null then 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1474:5: clan-pytest-with-core> E 1473| loc: opt: clan-pytest-with-core> E 1474| if opt.type.getSubModules or null == null then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1475| opt // { type = opt.type or types.unspecified; } clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'type.getSubModules' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/nixos/modules/services/hardware/bluetooth.nix:72:9: clan-pytest-with-core> E 71| settings = mkOption { clan-pytest-with-core> E 72| type = cfgFmt.type; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 73| default = { }; clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/nixos/modules/services/hardware/bluetooth.nix:26:12: clan-pytest-with-core> E 25| clan-pytest-with-core> E 26| cfgFmt = pkgs.formats.ini { }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 27| clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:727:15: clan-pytest-with-core> E 726| extraArgs = mapAttrs ( clan-pytest-with-core> E 727| name: _: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 728| addErrorContext (context name) ( clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the module argument `pkgs' in "/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/nixos/modules/services/hardware/bluetooth.nix": clan-pytest-with-core> E clan-pytest-with-core> E … noting that argument `pkgs` is not externally provided, so querying `_module.args` instead, requiring `config` clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:731:13: clan-pytest-with-core> E 730| "noting that argument `${name}` is not externally provided, so querying `_module.args` instead, requiring `config`" clan-pytest-with-core> E 731| config._module.args.${name} clan-pytest-with-core> E | ^ clan-pytest-with-core> E 732| ) clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/types.nix:1029:18: clan-pytest-with-core> E 1028| value = mapAttrs ( clan-pytest-with-core> E 1029| n: v: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1030| if lazy then clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'optionalValue.value' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1312:5: clan-pytest-with-core> E 1311| clan-pytest-with-core> E 1312| optionalValue = if isDefined then { value = mergedValue; } else { }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1313| }; 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1312:21: clan-pytest-with-core> E 1311| clan-pytest-with-core> E 1312| optionalValue = if isDefined then { value = mergedValue; } else { }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1313| }; clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'values' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1240:11: clan-pytest-with-core> E 1239| { clan-pytest-with-core> E 1240| values = defsSorted; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1241| inherit (defsFiltered) highestPrio; 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1211:11: clan-pytest-with-core> E 1210| # Avoid sorting if we don't have to. clan-pytest-with-core> E 1211| if any (def: def.value._type or "" == "order") defsFiltered.values then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1212| sortProperties defsFiltered.values clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'any' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1211:14: clan-pytest-with-core> E 1210| # Avoid sorting if we don't have to. clan-pytest-with-core> E 1211| if any (def: def.value._type or "" == "order") defsFiltered.values then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1212| sortProperties defsFiltered.values clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1211:19: clan-pytest-with-core> E 1210| # Avoid sorting if we don't have to. clan-pytest-with-core> E 1211| if any (def: def.value._type or "" == "order") defsFiltered.values then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1212| sortProperties defsFiltered.values clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'value._type' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1422:67: clan-pytest-with-core> E 1421| strip = clan-pytest-with-core> E 1422| def: if def.value._type or "" == "override" then def // { value = def.value.content; } else def; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1423| in clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'value.content' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1566:22: clan-pytest-with-core> E 1565| _type = "override"; clan-pytest-with-core> E 1566| inherit priority content; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1567| }; 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/nixos/modules/misc/nixpkgs.nix:107:15: clan-pytest-with-core> E 106| clan-pytest-with-core> E 107| finalPkgs = if opt.pkgs.isDefined then cfg.pkgs.appendOverlays cfg.overlays else defaultPkgs; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 108| clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'pkgs.isDefined' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1154:21: clan-pytest-with-core> E 1153| definitionsWithLocations = res.defsFinal; clan-pytest-with-core> E 1154| inherit (res) isDefined; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1155| inherit (res.checkedAndMerged) valueMeta; clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'isDefined' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1310:5: clan-pytest-with-core> E 1309| clan-pytest-with-core> E 1310| isDefined = defsFinal != [ ]; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1311| clan-pytest-with-core> E clan-pytest-with-core> E (6 duplicate frames omitted) clan-pytest-with-core> E clan-pytest-with-core> E error: attribute 'system' missing clan-pytest-with-core> E at /build/store/nix/store/y3h139bhv4373m1hab367ma4p5i95i2f-source/modules/clan/module.nix:164:24: clan-pytest-with-core> E 163| (lib.modules.importApply ../../nixosModules/machineModules/overridePkgs.nix { clan-pytest-with-core> E 164| pkgs = nixpkgsMatrix.${config.inventory.machines.${name}.nixpkgs}.system.${system}.pkgs; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 165| }) clan-pytest-with-core> E Did you mean systems? 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 0x7fffe580e1a0> clan-pytest-with-core> flake_with_sops = 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_generate_secret_for_multiple_machines( clan-pytest-with-core> monkeypatch: pytest.MonkeyPatch, clan-pytest-with-core> flake_with_sops: ClanFlake, clan-pytest-with-core> ) -> None: clan-pytest-with-core> flake = flake_with_sops clan-pytest-with-core> clan-pytest-with-core> local_system = nix_config()["system"] clan-pytest-with-core> clan-pytest-with-core> machine1_config = flake.machines["machine1"] = create_test_machine_config() clan-pytest-with-core> machine1_generator = machine1_config["clan"]["core"]["vars"]["generators"][ clan-pytest-with-core> "my_generator" clan-pytest-with-core> ] clan-pytest-with-core> machine1_generator["files"]["my_secret"]["secret"] = True clan-pytest-with-core> machine1_generator["files"]["my_value"]["secret"] = False clan-pytest-with-core> machine1_generator["script"] = ( clan-pytest-with-core> 'echo machine1 > "$out"/my_secret && echo machine1 > "$out"/my_value' clan-pytest-with-core> ) clan-pytest-with-core> # Test that we can generate secrets for other platforms clan-pytest-with-core> machine2_config = flake.machines["machine2"] = create_test_machine_config( clan-pytest-with-core> "aarch64-linux" if local_system == "x86_64-linux" else "x86_64-linux" clan-pytest-with-core> ) clan-pytest-with-core> clan-pytest-with-core> machine2_generator = machine2_config["clan"]["core"]["vars"]["generators"][ clan-pytest-with-core> "my_generator" clan-pytest-with-core> ] clan-pytest-with-core> machine2_generator["files"]["my_secret"]["secret"] = True clan-pytest-with-core> machine2_generator["files"]["my_value"]["secret"] = False clan-pytest-with-core> machine2_generator["script"] = ( clan-pytest-with-core> 'echo machine2 > "$out"/my_secret && echo machine2 > "$out"/my_value' clan-pytest-with-core> ) clan-pytest-with-core> flake.refresh() clan-pytest-with-core> monkeypatch.chdir(flake.path) clan-pytest-with-core> > cli.run(["vars", "generate", "--flake", str(flake.path)]) clan-pytest-with-core> clan-pytest-with-core> /build/src/clan_cli/tests/test_vars_generate.py:674: 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/vars/generate.py:33: in generate_command clan-pytest-with-core> run_generators( clan-pytest-with-core> /build/src/clan_lib/vars/generate.py:306: in run_generators clan-pytest-with-core> all_generators = get_generators(machines, full_closure=True) clan-pytest-with-core> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ clan-pytest-with-core> /build/src/clan_lib/vars/generate.py:146: in get_generators clan-pytest-with-core> flake.precache(get_generators_precache_selectors(list(all_machines))) clan-pytest-with-core> /build/src/clan_lib/flake/flake.py:1151: in precache clan-pytest-with-core> self.get_from_nix(not_fetched_selectors) clan-pytest-with-core> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ clan-pytest-with-core> clan-pytest-with-core> self = Flake(identifier='/build/pytest-v4o3vkzd/flake', hash='sha256-6mBS7BqDJfGQjKUHDnEUsyUQJVnQHzxnRSeS3zYvXbE=', 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.?secrets.?age.?plugins', 'clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.var...licModule', 'clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.settings.secretModule', ...] 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 while executing:$ clan select 'clanInternals.?secrets.?age.?plugins' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.generators.*.{share,dependencies,prompts,validationHash}' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.generators.*.files.*.{secret,deploy,owner,group,mode,neededFor}' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.?sops.?defaultGroups' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.settings.publicModule' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.settings.secretModule' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.?sops.?secretUploadDirectory' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.?password-store.?passCommand' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.?password-store.?secretLocation' clan-pytest-with-core> E $ clan select 'clanInternals.vars.settings.?recipients' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.?age.?secretLocation' clan-pytest-with-core> E Reason: attribute 'system' missing clan-pytest-with-core> E at /build/store/nix/store/y3h139bhv4373m1hab367ma4p5i95i2f-source/modules/clan/module.nix:164:24: clan-pytest-with-core> E 163| (lib.modules.importApply ../../nixosModules/machineModules/overridePkgs.nix { clan-pytest-with-core> E 164| pkgs = nixpkgsMatrix.${config.inventory.machines.${name}.nixpkgs}.system.${system}.pkgs; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 165| }) clan-pytest-with-core> E Did you mean systems?. 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 setup ----------------------------- clan-pytest-with-core> !! $HOME does not point to a temp directory!! HOME=/build/pytest-v4o3vkzd clan-pytest-with-core> [localhost] $ clan vars keygen --flake /build/pytest-v4o3vkzd/flake --user admin --no-interactive clan-pytest-with-core> Caller: /build/src/clan_cli/tests/age_keys.py:31::init clan-pytest-with-core> clan-pytest-with-core> Prefetching flake /build/pytest-v4o3vkzd/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/febbcab65441be6ccc547560fd0155faadebbbb7 clan-pytest-with-core> (cached) $ clan select clanInternals.inventoryClass.relativeDirectory 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> git \ clan-pytest-with-core> -C /build/pytest-v4o3vkzd/flake \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-v4o3vkzd/flake/sops/users/admin 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/admin to git clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-v4o3vkzd/flake \ clan-pytest-with-core> diff \ clan-pytest-with-core> --cached --exit-code \ clan-pytest-with-core> -- /build/pytest-v4o3vkzd/flake/sops/users/admin 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-v4o3vkzd/flake \ clan-pytest-with-core> commit \ clan-pytest-with-core> -m 'secrets: add user admin' \ clan-pytest-with-core> --no-verify /build/pytest-v4o3vkzd/flake/sops/users/admin 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/admin to git 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/pytest-v4o3vkzd clan-pytest-with-core> DEBUG clan_cli.tests.helpers.cli:__init__.py:143 $ clan vars keygen --flake /build/pytest-v4o3vkzd/flake --user admin --no-interactive clan-pytest-with-core> Caller: /build/src/clan_cli/tests/age_keys.py:31::init clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:927 Prefetching flake /build/pytest-v4o3vkzd/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/febbcab65441be6ccc547560fd0155faadebbbb7 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.cmd:__init__.py:143 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> DEBUG clan_lib.cmd:__init__.py:143 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> DEBUG clan_cli.secrets.sops:sops.py:99 Found age public key from a private key in the environment (SOPS_AGE_KEY): age1dhwqzkah943xzc34tc3dlmfayyevcmdmxzjezdgdy33euxwf59vsp3vk3c clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:143 git \ clan-pytest-with-core> -C /build/pytest-v4o3vkzd/flake \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-v4o3vkzd/flake/sops/users/admin 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> DEBUG clan_lib.cmd:__init__.py:143 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> DEBUG clan_lib.git:__init__.py:98 Adding sops/users/admin to git clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:143 git \ clan-pytest-with-core> -C /build/pytest-v4o3vkzd/flake \ clan-pytest-with-core> diff \ clan-pytest-with-core> --cached --exit-code \ clan-pytest-with-core> -- /build/pytest-v4o3vkzd/flake/sops/users/admin 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> DEBUG clan_lib.cmd:__init__.py:143 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> DEBUG clan_lib.cmd:__init__.py:143 git \ clan-pytest-with-core> -C /build/pytest-v4o3vkzd/flake \ clan-pytest-with-core> commit \ clan-pytest-with-core> -m 'secrets: add user admin' \ clan-pytest-with-core> --no-verify /build/pytest-v4o3vkzd/flake/sops/users/admin 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> DEBUG clan_lib.cmd:__init__.py:143 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> INFO clan_lib.git:__init__.py:141 Committed sops/users/admin to git clan-pytest-with-core> ----------------------------- Captured stdout call ----------------------------- clan-pytest-with-core> [main 1210340] flake: update by flake generator clan-pytest-with-core> 4 files changed, 74 insertions(+) clan-pytest-with-core> create mode 100644 machines/machine1/configuration.json clan-pytest-with-core> create mode 100644 machines/machine1/configuration.nix clan-pytest-with-core> create mode 100644 machines/machine2/configuration.json clan-pytest-with-core> create mode 100644 machines/machine2/configuration.nix clan-pytest-with-core> ----------------------------- Captured stderr call ----------------------------- clan-pytest-with-core> Prefetching flake /build/pytest-v4o3vkzd/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/d2c0050d97832c3ac5193485b93705d00938c15e clan-pytest-with-core> (cached) $ clan select clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> Prefetching flake /build/pytest-v4o3vkzd/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/d2c0050d97832c3ac5193485b93705d00938c15e clan-pytest-with-core> (cached) $ clan select clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> [localhost] $ clan vars generate --flake /build/pytest-v4o3vkzd/flake clan-pytest-with-core> Caller: /build/src/clan_cli/tests/test_vars_generate.py:674::test_generate_secret_for_multiple_machines clan-pytest-with-core> clan-pytest-with-core> Prefetching flake /build/pytest-v4o3vkzd/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.cliChecks clan-pytest-with-core> Cache miss for clanInternals.inventoryClass.inventorySerialization.{instances,machines,meta} clan-pytest-with-core> Loading flake cache from file /build/clan-flake-cache/flakes-v2/730b2bf1534cfa142032982850fe7b26380dc0bd clan-pytest-with-core> Cache miss for clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> Loading flake cache from file /build/clan-flake-cache/flakes-v2/730b2bf1534cfa142032982850fe7b26380dc0bd clan-pytest-with-core> (cached) $ clan select 'clanInternals.inventoryClass.inventorySerialization.{instances,machines,meta}' clan-pytest-with-core> Precaching selectors: clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.machines clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.instances clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.meta clan-pytest-with-core> - (not cached) clanInternals.?secrets.?age.?plugins clan-pytest-with-core> - (cached) clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.generators.*.{share,dependencies,prompts,validationHash} clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.generators.*.files.*.{secret,deploy,owner,group,mode,neededFor} clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.?sops.?defaultGroups clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.settings.publicModule clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.settings.secretModule clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.?sops.?secretUploadDirectory clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.?password-store.?passCommand clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.?password-store.?secretLocation clan-pytest-with-core> - (not cached) clanInternals.vars.settings.?recipients clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.?age.?secretLocation clan-pytest-with-core> ------------------------------ Captured log call ------------------------------- clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:927 Prefetching flake /build/pytest-v4o3vkzd/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/d2c0050d97832c3ac5193485b93705d00938c15e 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-v4o3vkzd/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/d2c0050d97832c3ac5193485b93705d00938c15e clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1179 (cached) $ clan select clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> DEBUG clan_cli.tests.helpers.cli:__init__.py:143 $ clan vars generate --flake /build/pytest-v4o3vkzd/flake clan-pytest-with-core> Caller: /build/src/clan_cli/tests/test_vars_generate.py:674::test_generate_secret_for_multiple_machines clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:927 Prefetching flake /build/pytest-v4o3vkzd/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.cliChecks clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1174 Cache miss for clanInternals.inventoryClass.inventorySerialization.{instances,machines,meta} clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:789 Loading flake cache from file /build/clan-flake-cache/flakes-v2/730b2bf1534cfa142032982850fe7b26380dc0bd clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1174 Cache miss for clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:789 Loading flake cache from file /build/clan-flake-cache/flakes-v2/730b2bf1534cfa142032982850fe7b26380dc0bd clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1179 (cached) $ clan select 'clanInternals.inventoryClass.inventorySerialization.{instances,machines,meta}' clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1144 Precaching selectors: clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.machines clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.instances clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.meta clan-pytest-with-core> - (not cached) clanInternals.?secrets.?age.?plugins clan-pytest-with-core> - (cached) clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.generators.*.{share,dependencies,prompts,validationHash} clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.generators.*.files.*.{secret,deploy,owner,group,mode,neededFor} clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.?sops.?defaultGroups clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.settings.publicModule clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.settings.secretModule clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.?sops.?secretUploadDirectory clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.?password-store.?passCommand clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.?password-store.?secretLocation clan-pytest-with-core> - (not cached) clanInternals.vars.settings.?recipients clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.?age.?secretLocation clan-pytest-with-core> _____________________ test_generate_public_and_secret_vars _____________________ clan-pytest-with-core> [gw9] linux -- Python 3.14.7 /nix/store/3n4qphl9s728sz8frmpqqrv9b1m87g68-python3-3.14.7/bin/python clan-pytest-with-core> clan-pytest-with-core> self = Flake(identifier='/build/pytest-dqlb6fla/flake', hash='sha256-NDAAsFe38m4zLiTEf9B1d6IOAHUvHSweCftwtvMpsTo=', 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.?secrets.?age.?plugins', 'clanInternals.inventoryClass.relativeDirectory', 'clanInternals.machines.x86...s.?defaultGroups', 'clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.settings.publicModule', ...] 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-dqlb6fla/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/il5imfqm2fn1abgz2vl753rizgvs1sad-source?narHash=sha256-NDAAsFe38m4zLiTEf9B1d6IOAHUvHSweCftwtvMpsTo="; 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": "maybe", "value": "secrets"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "plugins"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "inventoryClass"}, {"type": "str", "value": "relativeDirectory"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "share"}, {"type": "str", "value": "dependencies"}, {"type": "str", "value": "prompts"}, {"type": "str", "value": "validationHash"}]}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "str", "value": "files"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "secret"}, {"type": "str", "value": "deploy"}, {"type": "str", "value": "owner"}, {"type": "str", "value": "group"}, {"type": "str", "value": "mode"}, {"type": "str", "value": "neededFor"}]}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "defaultGroups"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "publicModule"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "secretModule"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "secretUploadDirectory"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "passCommand"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "secretLocation"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "maybe", "value": "recipients"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "secretLocation"}]'"'"''"'"') 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": "maybe", "value": "secrets"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "plugins"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "inventoryClass"}, {"type": "str", "value": "relativeDirectory"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "share"}, {"type": "str", "value": "dependencies"}, {"type": "str", "value": "prompts"}, {"type": "str", "value": "validationHash"}]}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "str", "value": "files"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "secret"}, {"type": "str", "value": "deploy"}, {"type": "str", "value": "owner"}, {"type": "str", "value": "group"}, {"type": "str", "value": "mode"}, {"type": "str", "value": "neededFor"}]}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "defaultGroups"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "publicModule"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "secretModule"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "secretUploadDirectory"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "passCommand"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "secretLocation"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "maybe", "value": "recipients"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "secretLocation"}]'') 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": "maybe", "value": "secrets"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "plugins"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "inventoryClass"}, {"type": "str", "value": "relativeDirectory"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "share"}, {"type": "str", "value": "dependencies"}, {"type": "str", "value": "prompts"}, {"type": "str", "value": "validationHash"}]}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "str", "value": "files"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "secret"}, {"type": "str", "value": "deploy"}, {"type": "str", "value": "owner"}, {"type": "str", "value": "group"}, {"type": "str", "value": "mode"}, {"type": "str", "value": "neededFor"}]}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "defaultGroups"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "publicModule"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "secretModule"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "secretUploadDirectory"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "passCommand"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "secretLocation"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "maybe", "value": "recipients"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "secretLocation"}]'') flake) clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating list element at index 2 clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating attribute 'my_machine' clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/cba1x9mxnwr8b36cw41bya7g6d5v1p7d-source/select.nix:325:37: clan-pytest-with-core> E 324| in clan-pytest-with-core> E 325| builtins.mapAttrs (_: v: recurse selectors (idx + 1) v) filteredAttrs clan-pytest-with-core> E | ^ clan-pytest-with-core> E 326| else if selector.type == "maybe" then 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:325:40: clan-pytest-with-core> E 324| in clan-pytest-with-core> E 325| builtins.mapAttrs (_: v: recurse selectors (idx + 1) v) filteredAttrs clan-pytest-with-core> E | ^ clan-pytest-with-core> E 326| else if selector.type == "maybe" then 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 … from call site clan-pytest-with-core> E at /build/store/nix/store/cba1x9mxnwr8b36cw41bya7g6d5v1p7d-source/select.nix:312:15: clan-pytest-with-core> E 311| else if selector.type == "str" then clan-pytest-with-core> E 312| recurse selectors (idx + 1) (builtins.getAttr selector.value obj) clan-pytest-with-core> E | ^ clan-pytest-with-core> E 313| else if selector.type == "set" then 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 'getAttr' builtin clan-pytest-with-core> E at /build/store/nix/store/cba1x9mxnwr8b36cw41bya7g6d5v1p7d-source/select.nix:312:44: clan-pytest-with-core> E 311| else if selector.type == "str" then clan-pytest-with-core> E 312| recurse selectors (idx + 1) (builtins.getAttr selector.value obj) clan-pytest-with-core> E | ^ clan-pytest-with-core> E 313| else if selector.type == "set" then clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'seq' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:401:18: clan-pytest-with-core> E 400| options = checked options; clan-pytest-with-core> E 401| config = checked (removeAttrs config [ "_module" ]); clan-pytest-with-core> E | ^ clan-pytest-with-core> E 402| _module = checked (config._module); 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:304:9: clan-pytest-with-core> E 303| checkUnmatched = clan-pytest-with-core> E 304| if config._module.check && config._module.freeformType == null && merged.unmatchedDefns != [ ] then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 305| let clan-pytest-with-core> E clan-pytest-with-core> E … in the right operand of the AND (&&) operator clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:304:72: clan-pytest-with-core> E 303| checkUnmatched = clan-pytest-with-core> E 304| if config._module.check && config._module.freeformType == null && merged.unmatchedDefns != [ ] then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 305| let clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'unmatchedDefns' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:940:7: clan-pytest-with-core> E 939| # Transforms unmatchedDefnsByName into a list of definitions clan-pytest-with-core> E 940| unmatchedDefns = clan-pytest-with-core> E | ^ clan-pytest-with-core> E 941| if configs == [ ] then clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'concatLists' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:946:11: clan-pytest-with-core> E 945| else clan-pytest-with-core> E 946| concatLists ( clan-pytest-with-core> E | ^ clan-pytest-with-core> E 947| mapAttrsToList ( clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:948:21: clan-pytest-with-core> E 947| mapAttrsToList ( clan-pytest-with-core> E 948| name: defs: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 949| map ( clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'map' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:949:15: clan-pytest-with-core> E 948| name: defs: clan-pytest-with-core> E 949| map ( clan-pytest-with-core> E | ^ clan-pytest-with-core> E 950| def: clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:932:22: clan-pytest-with-core> E 931| # Propagate all unmatched definitions from nested option sets clan-pytest-with-core> E 932| mapAttrs (n: v: v.unmatchedDefns) resultsByName clan-pytest-with-core> E | ^ clan-pytest-with-core> E 933| # Plus the definitions for the current prefix that don't have a matching option clan-pytest-with-core> E clan-pytest-with-core> E (10 duplicate frames omitted) clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:932:25: clan-pytest-with-core> E 931| # Propagate all unmatched definitions from nested option sets clan-pytest-with-core> E 932| mapAttrs (n: v: v.unmatchedDefns) resultsByName clan-pytest-with-core> E | ^ clan-pytest-with-core> E 933| # Plus the definitions for the current prefix that don't have a matching option clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:876:15: clan-pytest-with-core> E 875| resultsByName = mapAttrs ( clan-pytest-with-core> E 876| name: decls: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 877| # We're descending into attribute ‘name’. 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:888:9: clan-pytest-with-core> E 887| in clan-pytest-with-core> E 888| if length optionDecls == length decls then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 889| let clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'length' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:888:12: clan-pytest-with-core> E 887| in clan-pytest-with-core> E 888| if length optionDecls == length decls then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 889| let clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'filter' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:882:25: clan-pytest-with-core> E 881| defns' = rawDefinitionsByName.${name} or [ ]; clan-pytest-with-core> E 882| optionDecls = filter ( clan-pytest-with-core> E | ^ clan-pytest-with-core> E 883| m: clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:883:13: clan-pytest-with-core> E 882| optionDecls = filter ( clan-pytest-with-core> E 883| m: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 884| m.options ? _type clan-pytest-with-core> E clan-pytest-with-core> E … in the left operand of the AND (&&) operator clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:885:13: clan-pytest-with-core> E 884| m.options ? _type clan-pytest-with-core> E 885| && (m.options._type == "option" || throwDeclarationTypeError loc m.options._type m._file) clan-pytest-with-core> E | ^ clan-pytest-with-core> E 886| ) decls; clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'options' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:807:15: clan-pytest-with-core> E 806| pos = unsafeGetAttrPos n subtree; clan-pytest-with-core> E 807| options = option; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 808| }) subtree clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:289:73: clan-pytest-with-core> E 288| len = length attrPath; clan-pytest-with-core> E 289| atDepth = n: if n == len then value else { ${elemAt attrPath n} = atDepth (n + 1); }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 290| in clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'atDepth' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:289:17: clan-pytest-with-core> E 288| len = length attrPath; clan-pytest-with-core> E 289| atDepth = n: if n == len then value else { ${elemAt attrPath n} = atDepth (n + 1); }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 290| in clan-pytest-with-core> E clan-pytest-with-core> E … in the right operand of the update (//) operator clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:2047:9: clan-pytest-with-core> E 2046| } clan-pytest-with-core> E 2047| // optionalAttrs (toType != null) { clan-pytest-with-core> E | ^ clan-pytest-with-core> E 2048| type = toType; clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:2047:12: clan-pytest-with-core> E 2046| } clan-pytest-with-core> E 2047| // optionalAttrs (toType != null) { clan-pytest-with-core> E | ^ clan-pytest-with-core> E 2048| type = toType; clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'optionalAttrs' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:1492:25: clan-pytest-with-core> E 1491| */ clan-pytest-with-core> E 1492| optionalAttrs = cond: as: if cond then as else { }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1493| 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:1492:29: clan-pytest-with-core> E 1491| */ clan-pytest-with-core> E 1492| optionalAttrs = cond: as: if cond then as else { }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1493| clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:2036:17: clan-pytest-with-core> E 2035| let clan-pytest-with-core> E 2036| opt = attrByPath to { } options; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 2037| in clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'attrByPath' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:89:24: clan-pytest-with-core> E 88| attrByPath = clan-pytest-with-core> E 89| attrPath: default: set: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 90| let clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:106:5: clan-pytest-with-core> E 105| in clan-pytest-with-core> E 106| attrByPath' 0 set; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 107| clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'attrByPath'' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:93:12: clan-pytest-with-core> E 92| attrByPath' = clan-pytest-with-core> E 93| n: s: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 94| ( clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:102:35: clan-pytest-with-core> E 101| in clan-pytest-with-core> E 102| if s ? ${attr} then attrByPath' (n + 1) s.${attr} else default clan-pytest-with-core> E | ^ clan-pytest-with-core> E 103| ) clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'attrByPath'' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:93:12: clan-pytest-with-core> E 92| attrByPath' = clan-pytest-with-core> E 93| n: s: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 94| ( clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:102:35: clan-pytest-with-core> E 101| in clan-pytest-with-core> E 102| if s ? ${attr} then attrByPath' (n + 1) s.${attr} else default clan-pytest-with-core> E | ^ clan-pytest-with-core> E 103| ) clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'attrByPath'' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:93:12: clan-pytest-with-core> E 92| attrByPath' = clan-pytest-with-core> E 93| n: s: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 94| ( clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:102:35: clan-pytest-with-core> E 101| in clan-pytest-with-core> E 102| if s ? ${attr} then attrByPath' (n + 1) s.${attr} else default clan-pytest-with-core> E | ^ clan-pytest-with-core> E 103| ) clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'attrByPath'' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:93:12: clan-pytest-with-core> E 92| attrByPath' = clan-pytest-with-core> E 93| n: s: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 94| ( clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:102:55: clan-pytest-with-core> E 101| in clan-pytest-with-core> E 102| if s ? ${attr} then attrByPath' (n + 1) s.${attr} else default clan-pytest-with-core> E | ^ clan-pytest-with-core> E 103| ) clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:927:37: clan-pytest-with-core> E 926| clan-pytest-with-core> E 927| matchedOptions = mapAttrs (n: v: v.matchedOptions) resultsByName; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 928| clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'matchedOptions' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:893:13: clan-pytest-with-core> E 892| { clan-pytest-with-core> E 893| matchedOptions = evalOptionValue loc opt defns'; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 894| unmatchedDefns = [ ]; clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:893:30: clan-pytest-with-core> E 892| { clan-pytest-with-core> E 893| matchedOptions = evalOptionValue loc opt defns'; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 894| unmatchedDefns = [ ]; clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'evalOptionValue' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1103:15: clan-pytest-with-core> E 1102| evalOptionValue = clan-pytest-with-core> E 1103| loc: opt: defs: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1104| let clan-pytest-with-core> E clan-pytest-with-core> E … in the left operand of the update (//) operator clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1148:5: clan-pytest-with-core> E 1147| warnDeprecation opt clan-pytest-with-core> E 1148| // { clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1149| value = addErrorContext "while evaluating the option `${showOption loc}':" value; 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1141:9: clan-pytest-with-core> E 1140| warnDeprecation = clan-pytest-with-core> E 1141| if (opt.type.deprecationMessage != null) then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1142| warn "The type `types.${opt.type.name}' of option `${showOption loc}' defined in ${showFiles opt.declarations} is deprecated. ${opt.type.deprecationMessage}" clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:890:19: clan-pytest-with-core> E 889| let clan-pytest-with-core> E 890| opt = fixupOptionType loc (mergeOptionDecls loc decls); clan-pytest-with-core> E | ^ clan-pytest-with-core> E 891| in clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'fixupOptionType' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1473:10: clan-pytest-with-core> E 1472| fixupOptionType = clan-pytest-with-core> E 1473| loc: opt: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1474| if opt.type.getSubModules or null == null then 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1474:5: clan-pytest-with-core> E 1473| loc: opt: clan-pytest-with-core> E 1474| if opt.type.getSubModules or null == null then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1475| opt // { type = opt.type or types.unspecified; } clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'type.getSubModules' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/nixos/modules/services/hardware/bluetooth.nix:72:9: clan-pytest-with-core> E 71| settings = mkOption { clan-pytest-with-core> E 72| type = cfgFmt.type; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 73| default = { }; clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/nixos/modules/services/hardware/bluetooth.nix:26:12: clan-pytest-with-core> E 25| clan-pytest-with-core> E 26| cfgFmt = pkgs.formats.ini { }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 27| clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:727:15: clan-pytest-with-core> E 726| extraArgs = mapAttrs ( clan-pytest-with-core> E 727| name: _: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 728| addErrorContext (context name) ( clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the module argument `pkgs' in "/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/nixos/modules/services/hardware/bluetooth.nix": clan-pytest-with-core> E clan-pytest-with-core> E … noting that argument `pkgs` is not externally provided, so querying `_module.args` instead, requiring `config` clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:731:13: clan-pytest-with-core> E 730| "noting that argument `${name}` is not externally provided, so querying `_module.args` instead, requiring `config`" clan-pytest-with-core> E 731| config._module.args.${name} clan-pytest-with-core> E | ^ clan-pytest-with-core> E 732| ) clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/types.nix:1029:18: clan-pytest-with-core> E 1028| value = mapAttrs ( clan-pytest-with-core> E 1029| n: v: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1030| if lazy then clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'optionalValue.value' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1312:5: clan-pytest-with-core> E 1311| clan-pytest-with-core> E 1312| optionalValue = if isDefined then { value = mergedValue; } else { }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1313| }; 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1312:21: clan-pytest-with-core> E 1311| clan-pytest-with-core> E 1312| optionalValue = if isDefined then { value = mergedValue; } else { }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1313| }; clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'values' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1240:11: clan-pytest-with-core> E 1239| { clan-pytest-with-core> E 1240| values = defsSorted; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1241| inherit (defsFiltered) highestPrio; 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1211:11: clan-pytest-with-core> E 1210| # Avoid sorting if we don't have to. clan-pytest-with-core> E 1211| if any (def: def.value._type or "" == "order") defsFiltered.values then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1212| sortProperties defsFiltered.values clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'any' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1211:14: clan-pytest-with-core> E 1210| # Avoid sorting if we don't have to. clan-pytest-with-core> E 1211| if any (def: def.value._type or "" == "order") defsFiltered.values then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1212| sortProperties defsFiltered.values clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1211:19: clan-pytest-with-core> E 1210| # Avoid sorting if we don't have to. clan-pytest-with-core> E 1211| if any (def: def.value._type or "" == "order") defsFiltered.values then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1212| sortProperties defsFiltered.values clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'value._type' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1422:67: clan-pytest-with-core> E 1421| strip = clan-pytest-with-core> E 1422| def: if def.value._type or "" == "override" then def // { value = def.value.content; } else def; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1423| in clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'value.content' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1566:22: clan-pytest-with-core> E 1565| _type = "override"; clan-pytest-with-core> E 1566| inherit priority content; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1567| }; 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/nixos/modules/misc/nixpkgs.nix:107:15: clan-pytest-with-core> E 106| clan-pytest-with-core> E 107| finalPkgs = if opt.pkgs.isDefined then cfg.pkgs.appendOverlays cfg.overlays else defaultPkgs; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 108| clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'pkgs.isDefined' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1154:21: clan-pytest-with-core> E 1153| definitionsWithLocations = res.defsFinal; clan-pytest-with-core> E 1154| inherit (res) isDefined; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1155| inherit (res.checkedAndMerged) valueMeta; clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'isDefined' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1310:5: clan-pytest-with-core> E 1309| clan-pytest-with-core> E 1310| isDefined = defsFinal != [ ]; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1311| clan-pytest-with-core> E clan-pytest-with-core> E (6 duplicate frames omitted) clan-pytest-with-core> E clan-pytest-with-core> E error: attribute 'system' missing clan-pytest-with-core> E at /build/store/nix/store/y3h139bhv4373m1hab367ma4p5i95i2f-source/modules/clan/module.nix:164:24: clan-pytest-with-core> E 163| (lib.modules.importApply ../../nixosModules/machineModules/overridePkgs.nix { clan-pytest-with-core> E 164| pkgs = nixpkgsMatrix.${config.inventory.machines.${name}.nixpkgs}.system.${system}.pkgs; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 165| }) clan-pytest-with-core> E Did you mean systems? 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 0x7fffe5868ae0> clan-pytest-with-core> flake_with_sops = 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("sticky_flake_select") clan-pytest-with-core> def test_generate_public_and_secret_vars( clan-pytest-with-core> monkeypatch: pytest.MonkeyPatch, clan-pytest-with-core> flake_with_sops: ClanFlake, clan-pytest-with-core> ) -> None: clan-pytest-with-core> """Test generation of public and secret vars with dependencies. clan-pytest-with-core> clan-pytest-with-core> Generator dependency graph: clan-pytest-with-core> clan-pytest-with-core> my_generator (standalone) clan-pytest-with-core> ├── my_value (public) clan-pytest-with-core> ├── my_secret (secret) clan-pytest-with-core> └── value_with_default (public, has default) clan-pytest-with-core> clan-pytest-with-core> my_shared_generator (shared=True) clan-pytest-with-core> └── my_shared_value (public) clan-pytest-with-core> ↓ clan-pytest-with-core> dependent_generator (depends on my_shared_generator) clan-pytest-with-core> └── my_secret (secret, copies from my_shared_value) clan-pytest-with-core> clan-pytest-with-core> This test verifies: clan-pytest-with-core> - Public and secret vars are stored correctly clan-pytest-with-core> - Shared generators work across dependencies clan-pytest-with-core> - Default values are handled properly clan-pytest-with-core> - Regeneration with --regenerate updates all values clan-pytest-with-core> - Regeneration with --regenerate --generator only updates specified generator clan-pytest-with-core> """ clan-pytest-with-core> flake = flake_with_sops clan-pytest-with-core> clan-pytest-with-core> config = flake.machines["my_machine"] = create_test_machine_config() clan-pytest-with-core> my_generator = config["clan"]["core"]["vars"]["generators"]["my_generator"] clan-pytest-with-core> my_generator["files"]["my_value"]["secret"] = False clan-pytest-with-core> my_generator["files"]["my_secret"]["secret"] = True clan-pytest-with-core> my_generator["files"]["value_with_default"]["secret"] = False clan-pytest-with-core> my_generator["files"]["value_with_default"]["value"]["_type"] = "override" clan-pytest-with-core> my_generator["files"]["value_with_default"]["value"]["priority"] = 1000 # mkDefault clan-pytest-with-core> my_generator["files"]["value_with_default"]["value"]["content"] = "default_value" clan-pytest-with-core> my_generator["script"] = ( clan-pytest-with-core> 'echo -n public$RANDOM > "$out"/my_value; echo -n secret$RANDOM > "$out"/my_secret; echo -n non-default$RANDOM > "$out"/value_with_default' clan-pytest-with-core> ) clan-pytest-with-core> clan-pytest-with-core> my_shared_generator = config["clan"]["core"]["vars"]["generators"][ clan-pytest-with-core> "my_shared_generator" clan-pytest-with-core> ] clan-pytest-with-core> my_shared_generator["share"] = True clan-pytest-with-core> my_shared_generator["files"]["my_shared_value"]["secret"] = False clan-pytest-with-core> my_shared_generator["script"] = 'echo -n shared$RANDOM > "$out"/my_shared_value' clan-pytest-with-core> clan-pytest-with-core> dependent_generator = config["clan"]["core"]["vars"]["generators"][ clan-pytest-with-core> "dependent_generator" clan-pytest-with-core> ] clan-pytest-with-core> dependent_generator["share"] = False clan-pytest-with-core> dependent_generator["files"]["my_secret"]["secret"] = True clan-pytest-with-core> dependent_generator["dependencies"] = ["my_shared_generator"] clan-pytest-with-core> dependent_generator["script"] = ( clan-pytest-with-core> 'cat "$in"/my_shared_generator/my_shared_value > "$out"/my_secret' clan-pytest-with-core> ) clan-pytest-with-core> clan-pytest-with-core> flake.refresh() clan-pytest-with-core> monkeypatch.chdir(flake.path) clan-pytest-with-core> clan-pytest-with-core> machine = Machine(name="my_machine", flake=Flake(str(flake.path))) clan-pytest-with-core> > assert not check_vars(machine.name, machine.flake) clan-pytest-with-core> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ clan-pytest-with-core> clan-pytest-with-core> /build/src/clan_cli/tests/test_vars_generate.py:108: clan-pytest-with-core> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ clan-pytest-with-core> /build/src/clan_lib/vars/check.py:149: in check_vars clan-pytest-with-core> status = vars_status(machine_name, flake, generator_name=generator_name) clan-pytest-with-core> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ clan-pytest-with-core> /build/src/clan_lib/vars/check.py:63: in vars_status clan-pytest-with-core> generators = get_machine_generators([machine.name], machine.flake) clan-pytest-with-core> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ clan-pytest-with-core> /build/src/clan_lib/vars/generator.py:243: in get_machine_generators clan-pytest-with-core> flake.precache(get_machine_selectors(machine_names)) clan-pytest-with-core> /build/src/clan_lib/flake/flake.py:1151: in precache clan-pytest-with-core> self.get_from_nix(not_fetched_selectors) clan-pytest-with-core> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ clan-pytest-with-core> clan-pytest-with-core> self = Flake(identifier='/build/pytest-dqlb6fla/flake', hash='sha256-NDAAsFe38m4zLiTEf9B1d6IOAHUvHSweCftwtvMpsTo=', 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.?secrets.?age.?plugins', 'clanInternals.inventoryClass.relativeDirectory', 'clanInternals.machines.x86...s.?defaultGroups', 'clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.settings.publicModule', ...] 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 while executing:$ clan select 'clanInternals.?secrets.?age.?plugins' clan-pytest-with-core> E $ clan select 'clanInternals.inventoryClass.relativeDirectory' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.generators.*.{share,dependencies,prompts,validationHash}' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.generators.*.files.*.{secret,deploy,owner,group,mode,neededFor}' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.?sops.?defaultGroups' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.settings.publicModule' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.settings.secretModule' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.?sops.?secretUploadDirectory' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.?password-store.?passCommand' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.?password-store.?secretLocation' clan-pytest-with-core> E $ clan select 'clanInternals.vars.settings.?recipients' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.?age.?secretLocation' clan-pytest-with-core> E Reason: attribute 'system' missing clan-pytest-with-core> E at /build/store/nix/store/y3h139bhv4373m1hab367ma4p5i95i2f-source/modules/clan/module.nix:164:24: clan-pytest-with-core> E 163| (lib.modules.importApply ../../nixosModules/machineModules/overridePkgs.nix { clan-pytest-with-core> E 164| pkgs = nixpkgsMatrix.${config.inventory.machines.${name}.nixpkgs}.system.${system}.pkgs; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 165| }) clan-pytest-with-core> E Did you mean systems?. 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 setup ----------------------------- clan-pytest-with-core> !! $HOME does not point to a temp directory!! HOME=/build/pytest-dqlb6fla clan-pytest-with-core> [localhost] $ clan vars keygen --flake /build/pytest-dqlb6fla/flake --user admin --no-interactive clan-pytest-with-core> Caller: /build/src/clan_cli/tests/age_keys.py:31::init clan-pytest-with-core> clan-pytest-with-core> Prefetching flake /build/pytest-dqlb6fla/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/febbcab65441be6ccc547560fd0155faadebbbb7 clan-pytest-with-core> (cached) $ clan select clanInternals.inventoryClass.relativeDirectory 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> git \ clan-pytest-with-core> -C /build/pytest-dqlb6fla/flake \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-dqlb6fla/flake/sops/users/admin 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/admin to git clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-dqlb6fla/flake \ clan-pytest-with-core> diff \ clan-pytest-with-core> --cached --exit-code \ clan-pytest-with-core> -- /build/pytest-dqlb6fla/flake/sops/users/admin 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-dqlb6fla/flake \ clan-pytest-with-core> commit \ clan-pytest-with-core> -m 'secrets: add user admin' \ clan-pytest-with-core> --no-verify /build/pytest-dqlb6fla/flake/sops/users/admin 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/admin to git 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/pytest-dqlb6fla clan-pytest-with-core> DEBUG clan_cli.tests.helpers.cli:__init__.py:143 $ clan vars keygen --flake /build/pytest-dqlb6fla/flake --user admin --no-interactive clan-pytest-with-core> Caller: /build/src/clan_cli/tests/age_keys.py:31::init clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:927 Prefetching flake /build/pytest-dqlb6fla/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/febbcab65441be6ccc547560fd0155faadebbbb7 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.cmd:__init__.py:143 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> DEBUG clan_lib.cmd:__init__.py:143 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> DEBUG clan_cli.secrets.sops:sops.py:99 Found age public key from a private key in the environment (SOPS_AGE_KEY): age1dhwqzkah943xzc34tc3dlmfayyevcmdmxzjezdgdy33euxwf59vsp3vk3c clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:143 git \ clan-pytest-with-core> -C /build/pytest-dqlb6fla/flake \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-dqlb6fla/flake/sops/users/admin 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> DEBUG clan_lib.cmd:__init__.py:143 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> DEBUG clan_lib.git:__init__.py:98 Adding sops/users/admin to git clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:143 git \ clan-pytest-with-core> -C /build/pytest-dqlb6fla/flake \ clan-pytest-with-core> diff \ clan-pytest-with-core> --cached --exit-code \ clan-pytest-with-core> -- /build/pytest-dqlb6fla/flake/sops/users/admin 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> DEBUG clan_lib.cmd:__init__.py:143 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> DEBUG clan_lib.cmd:__init__.py:143 git \ clan-pytest-with-core> -C /build/pytest-dqlb6fla/flake \ clan-pytest-with-core> commit \ clan-pytest-with-core> -m 'secrets: add user admin' \ clan-pytest-with-core> --no-verify /build/pytest-dqlb6fla/flake/sops/users/admin 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> DEBUG clan_lib.cmd:__init__.py:143 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> INFO clan_lib.git:__init__.py:141 Committed sops/users/admin to git clan-pytest-with-core> ----------------------------- Captured stdout call ----------------------------- clan-pytest-with-core> [main bde32ab] flake: update by flake generator clan-pytest-with-core> 2 files changed, 66 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> ----------------------------- Captured stderr call ----------------------------- clan-pytest-with-core> Prefetching flake /build/pytest-dqlb6fla/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/d2c0050d97832c3ac5193485b93705d00938c15e clan-pytest-with-core> Prefetching flake /build/pytest-dqlb6fla/flake clan-pytest-with-core> warning: you don't have Internet access; disabling some network-dependent features clan-pytest-with-core> Precaching selectors: clan-pytest-with-core> - (not cached) clanInternals.?secrets.?age.?plugins clan-pytest-with-core> - (not cached) clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.generators.*.{share,dependencies,prompts,validationHash} clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.generators.*.files.*.{secret,deploy,owner,group,mode,neededFor} clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.?sops.?defaultGroups clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.settings.publicModule clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.settings.secretModule clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.?sops.?secretUploadDirectory clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.?password-store.?passCommand clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.?password-store.?secretLocation clan-pytest-with-core> - (not cached) clanInternals.vars.settings.?recipients clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.?age.?secretLocation clan-pytest-with-core> ------------------------------ Captured log call ------------------------------- clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:927 Prefetching flake /build/pytest-dqlb6fla/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/d2c0050d97832c3ac5193485b93705d00938c15e clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:927 Prefetching flake /build/pytest-dqlb6fla/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:1144 Precaching selectors: clan-pytest-with-core> - (not cached) clanInternals.?secrets.?age.?plugins clan-pytest-with-core> - (not cached) clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.generators.*.{share,dependencies,prompts,validationHash} clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.generators.*.files.*.{secret,deploy,owner,group,mode,neededFor} clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.?sops.?defaultGroups clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.settings.publicModule clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.settings.secretModule clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.?sops.?secretUploadDirectory clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.?password-store.?passCommand clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.?password-store.?secretLocation clan-pytest-with-core> - (not cached) clanInternals.vars.settings.?recipients clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.?age.?secretLocation clan-pytest-with-core> __________________ test_get_generator_prompt_previous_values ___________________ clan-pytest-with-core> [gw10] linux -- Python 3.14.7 /nix/store/3n4qphl9s728sz8frmpqqrv9b1m87g68-python3-3.14.7/bin/python clan-pytest-with-core> clan-pytest-with-core> self = Flake(identifier='/build/pytest-10oe1cvv/flake', hash='sha256-/HAMjQXeJxKmp6Drgdgv/6H4fBmsIKeIwQ7SZgxqbnk=', 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.?secrets.?age.?plugins', 'clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.gener...ngs.publicModule', 'clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.settings.secretModule', ...] 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-10oe1cvv/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/mlwd1qcsw5761p1w426gwdwisqidhbp4-source?narHash=sha256-/HAMjQXeJxKmp6Drgdgv/6H4fBmsIKeIwQ7SZgxqbnk="; 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": "maybe", "value": "secrets"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "plugins"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "share"}, {"type": "str", "value": "dependencies"}, {"type": "str", "value": "prompts"}, {"type": "str", "value": "validationHash"}]}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "str", "value": "files"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "secret"}, {"type": "str", "value": "deploy"}, {"type": "str", "value": "owner"}, {"type": "str", "value": "group"}, {"type": "str", "value": "mode"}, {"type": "str", "value": "neededFor"}]}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "defaultGroups"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "publicModule"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "secretModule"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "secretUploadDirectory"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "passCommand"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "secretLocation"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "maybe", "value": "recipients"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "secretLocation"}]'"'"''"'"') 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": "maybe", "value": "secrets"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "plugins"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "share"}, {"type": "str", "value": "dependencies"}, {"type": "str", "value": "prompts"}, {"type": "str", "value": "validationHash"}]}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "str", "value": "files"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "secret"}, {"type": "str", "value": "deploy"}, {"type": "str", "value": "owner"}, {"type": "str", "value": "group"}, {"type": "str", "value": "mode"}, {"type": "str", "value": "neededFor"}]}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "defaultGroups"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "publicModule"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "secretModule"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "secretUploadDirectory"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "passCommand"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "secretLocation"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "maybe", "value": "recipients"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "secretLocation"}]'') 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": "maybe", "value": "secrets"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "plugins"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "share"}, {"type": "str", "value": "dependencies"}, {"type": "str", "value": "prompts"}, {"type": "str", "value": "validationHash"}]}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "str", "value": "files"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "secret"}, {"type": "str", "value": "deploy"}, {"type": "str", "value": "owner"}, {"type": "str", "value": "group"}, {"type": "str", "value": "mode"}, {"type": "str", "value": "neededFor"}]}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "defaultGroups"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "publicModule"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "secretModule"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "secretUploadDirectory"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "passCommand"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "secretLocation"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "maybe", "value": "recipients"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "secretLocation"}]'') flake) clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating list element at index 1 clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating attribute 'my_machine' clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/cba1x9mxnwr8b36cw41bya7g6d5v1p7d-source/select.nix:325:37: clan-pytest-with-core> E 324| in clan-pytest-with-core> E 325| builtins.mapAttrs (_: v: recurse selectors (idx + 1) v) filteredAttrs clan-pytest-with-core> E | ^ clan-pytest-with-core> E 326| else if selector.type == "maybe" then 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:325:40: clan-pytest-with-core> E 324| in clan-pytest-with-core> E 325| builtins.mapAttrs (_: v: recurse selectors (idx + 1) v) filteredAttrs clan-pytest-with-core> E | ^ clan-pytest-with-core> E 326| else if selector.type == "maybe" then 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 … from call site clan-pytest-with-core> E at /build/store/nix/store/cba1x9mxnwr8b36cw41bya7g6d5v1p7d-source/select.nix:312:15: clan-pytest-with-core> E 311| else if selector.type == "str" then clan-pytest-with-core> E 312| recurse selectors (idx + 1) (builtins.getAttr selector.value obj) clan-pytest-with-core> E | ^ clan-pytest-with-core> E 313| else if selector.type == "set" then 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 'getAttr' builtin clan-pytest-with-core> E at /build/store/nix/store/cba1x9mxnwr8b36cw41bya7g6d5v1p7d-source/select.nix:312:44: clan-pytest-with-core> E 311| else if selector.type == "str" then clan-pytest-with-core> E 312| recurse selectors (idx + 1) (builtins.getAttr selector.value obj) clan-pytest-with-core> E | ^ clan-pytest-with-core> E 313| else if selector.type == "set" then clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'seq' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:401:18: clan-pytest-with-core> E 400| options = checked options; clan-pytest-with-core> E 401| config = checked (removeAttrs config [ "_module" ]); clan-pytest-with-core> E | ^ clan-pytest-with-core> E 402| _module = checked (config._module); 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:304:9: clan-pytest-with-core> E 303| checkUnmatched = clan-pytest-with-core> E 304| if config._module.check && config._module.freeformType == null && merged.unmatchedDefns != [ ] then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 305| let clan-pytest-with-core> E clan-pytest-with-core> E … in the right operand of the AND (&&) operator clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:304:72: clan-pytest-with-core> E 303| checkUnmatched = clan-pytest-with-core> E 304| if config._module.check && config._module.freeformType == null && merged.unmatchedDefns != [ ] then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 305| let clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'unmatchedDefns' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:940:7: clan-pytest-with-core> E 939| # Transforms unmatchedDefnsByName into a list of definitions clan-pytest-with-core> E 940| unmatchedDefns = clan-pytest-with-core> E | ^ clan-pytest-with-core> E 941| if configs == [ ] then clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'concatLists' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:946:11: clan-pytest-with-core> E 945| else clan-pytest-with-core> E 946| concatLists ( clan-pytest-with-core> E | ^ clan-pytest-with-core> E 947| mapAttrsToList ( clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:948:21: clan-pytest-with-core> E 947| mapAttrsToList ( clan-pytest-with-core> E 948| name: defs: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 949| map ( clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'map' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:949:15: clan-pytest-with-core> E 948| name: defs: clan-pytest-with-core> E 949| map ( clan-pytest-with-core> E | ^ clan-pytest-with-core> E 950| def: clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:932:22: clan-pytest-with-core> E 931| # Propagate all unmatched definitions from nested option sets clan-pytest-with-core> E 932| mapAttrs (n: v: v.unmatchedDefns) resultsByName clan-pytest-with-core> E | ^ clan-pytest-with-core> E 933| # Plus the definitions for the current prefix that don't have a matching option clan-pytest-with-core> E clan-pytest-with-core> E (10 duplicate frames omitted) clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:932:25: clan-pytest-with-core> E 931| # Propagate all unmatched definitions from nested option sets clan-pytest-with-core> E 932| mapAttrs (n: v: v.unmatchedDefns) resultsByName clan-pytest-with-core> E | ^ clan-pytest-with-core> E 933| # Plus the definitions for the current prefix that don't have a matching option clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:876:15: clan-pytest-with-core> E 875| resultsByName = mapAttrs ( clan-pytest-with-core> E 876| name: decls: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 877| # We're descending into attribute ‘name’. 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:888:9: clan-pytest-with-core> E 887| in clan-pytest-with-core> E 888| if length optionDecls == length decls then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 889| let clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'length' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:888:12: clan-pytest-with-core> E 887| in clan-pytest-with-core> E 888| if length optionDecls == length decls then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 889| let clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'filter' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:882:25: clan-pytest-with-core> E 881| defns' = rawDefinitionsByName.${name} or [ ]; clan-pytest-with-core> E 882| optionDecls = filter ( clan-pytest-with-core> E | ^ clan-pytest-with-core> E 883| m: clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:883:13: clan-pytest-with-core> E 882| optionDecls = filter ( clan-pytest-with-core> E 883| m: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 884| m.options ? _type clan-pytest-with-core> E clan-pytest-with-core> E … in the left operand of the AND (&&) operator clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:885:13: clan-pytest-with-core> E 884| m.options ? _type clan-pytest-with-core> E 885| && (m.options._type == "option" || throwDeclarationTypeError loc m.options._type m._file) clan-pytest-with-core> E | ^ clan-pytest-with-core> E 886| ) decls; clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'options' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:807:15: clan-pytest-with-core> E 806| pos = unsafeGetAttrPos n subtree; clan-pytest-with-core> E 807| options = option; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 808| }) subtree clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:289:73: clan-pytest-with-core> E 288| len = length attrPath; clan-pytest-with-core> E 289| atDepth = n: if n == len then value else { ${elemAt attrPath n} = atDepth (n + 1); }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 290| in clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'atDepth' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:289:17: clan-pytest-with-core> E 288| len = length attrPath; clan-pytest-with-core> E 289| atDepth = n: if n == len then value else { ${elemAt attrPath n} = atDepth (n + 1); }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 290| in clan-pytest-with-core> E clan-pytest-with-core> E … in the right operand of the update (//) operator clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:2047:9: clan-pytest-with-core> E 2046| } clan-pytest-with-core> E 2047| // optionalAttrs (toType != null) { clan-pytest-with-core> E | ^ clan-pytest-with-core> E 2048| type = toType; clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:2047:12: clan-pytest-with-core> E 2046| } clan-pytest-with-core> E 2047| // optionalAttrs (toType != null) { clan-pytest-with-core> E | ^ clan-pytest-with-core> E 2048| type = toType; clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'optionalAttrs' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:1492:25: clan-pytest-with-core> E 1491| */ clan-pytest-with-core> E 1492| optionalAttrs = cond: as: if cond then as else { }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1493| 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:1492:29: clan-pytest-with-core> E 1491| */ clan-pytest-with-core> E 1492| optionalAttrs = cond: as: if cond then as else { }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1493| clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:2036:17: clan-pytest-with-core> E 2035| let clan-pytest-with-core> E 2036| opt = attrByPath to { } options; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 2037| in clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'attrByPath' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:89:24: clan-pytest-with-core> E 88| attrByPath = clan-pytest-with-core> E 89| attrPath: default: set: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 90| let clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:106:5: clan-pytest-with-core> E 105| in clan-pytest-with-core> E 106| attrByPath' 0 set; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 107| clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'attrByPath'' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:93:12: clan-pytest-with-core> E 92| attrByPath' = clan-pytest-with-core> E 93| n: s: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 94| ( clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:102:35: clan-pytest-with-core> E 101| in clan-pytest-with-core> E 102| if s ? ${attr} then attrByPath' (n + 1) s.${attr} else default clan-pytest-with-core> E | ^ clan-pytest-with-core> E 103| ) clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'attrByPath'' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:93:12: clan-pytest-with-core> E 92| attrByPath' = clan-pytest-with-core> E 93| n: s: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 94| ( clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:102:35: clan-pytest-with-core> E 101| in clan-pytest-with-core> E 102| if s ? ${attr} then attrByPath' (n + 1) s.${attr} else default clan-pytest-with-core> E | ^ clan-pytest-with-core> E 103| ) clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'attrByPath'' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:93:12: clan-pytest-with-core> E 92| attrByPath' = clan-pytest-with-core> E 93| n: s: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 94| ( clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:102:35: clan-pytest-with-core> E 101| in clan-pytest-with-core> E 102| if s ? ${attr} then attrByPath' (n + 1) s.${attr} else default clan-pytest-with-core> E | ^ clan-pytest-with-core> E 103| ) clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'attrByPath'' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:93:12: clan-pytest-with-core> E 92| attrByPath' = clan-pytest-with-core> E 93| n: s: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 94| ( clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:102:55: clan-pytest-with-core> E 101| in clan-pytest-with-core> E 102| if s ? ${attr} then attrByPath' (n + 1) s.${attr} else default clan-pytest-with-core> E | ^ clan-pytest-with-core> E 103| ) clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:927:37: clan-pytest-with-core> E 926| clan-pytest-with-core> E 927| matchedOptions = mapAttrs (n: v: v.matchedOptions) resultsByName; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 928| clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'matchedOptions' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:893:13: clan-pytest-with-core> E 892| { clan-pytest-with-core> E 893| matchedOptions = evalOptionValue loc opt defns'; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 894| unmatchedDefns = [ ]; clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:893:30: clan-pytest-with-core> E 892| { clan-pytest-with-core> E 893| matchedOptions = evalOptionValue loc opt defns'; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 894| unmatchedDefns = [ ]; clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'evalOptionValue' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1103:15: clan-pytest-with-core> E 1102| evalOptionValue = clan-pytest-with-core> E 1103| loc: opt: defs: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1104| let clan-pytest-with-core> E clan-pytest-with-core> E … in the left operand of the update (//) operator clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1148:5: clan-pytest-with-core> E 1147| warnDeprecation opt clan-pytest-with-core> E 1148| // { clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1149| value = addErrorContext "while evaluating the option `${showOption loc}':" value; 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1141:9: clan-pytest-with-core> E 1140| warnDeprecation = clan-pytest-with-core> E 1141| if (opt.type.deprecationMessage != null) then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1142| warn "The type `types.${opt.type.name}' of option `${showOption loc}' defined in ${showFiles opt.declarations} is deprecated. ${opt.type.deprecationMessage}" clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:890:19: clan-pytest-with-core> E 889| let clan-pytest-with-core> E 890| opt = fixupOptionType loc (mergeOptionDecls loc decls); clan-pytest-with-core> E | ^ clan-pytest-with-core> E 891| in clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'fixupOptionType' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1473:10: clan-pytest-with-core> E 1472| fixupOptionType = clan-pytest-with-core> E 1473| loc: opt: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1474| if opt.type.getSubModules or null == null then 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1474:5: clan-pytest-with-core> E 1473| loc: opt: clan-pytest-with-core> E 1474| if opt.type.getSubModules or null == null then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1475| opt // { type = opt.type or types.unspecified; } clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'type.getSubModules' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/nixos/modules/services/hardware/bluetooth.nix:72:9: clan-pytest-with-core> E 71| settings = mkOption { clan-pytest-with-core> E 72| type = cfgFmt.type; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 73| default = { }; clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/nixos/modules/services/hardware/bluetooth.nix:26:12: clan-pytest-with-core> E 25| clan-pytest-with-core> E 26| cfgFmt = pkgs.formats.ini { }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 27| clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:727:15: clan-pytest-with-core> E 726| extraArgs = mapAttrs ( clan-pytest-with-core> E 727| name: _: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 728| addErrorContext (context name) ( clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the module argument `pkgs' in "/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/nixos/modules/services/hardware/bluetooth.nix": clan-pytest-with-core> E clan-pytest-with-core> E … noting that argument `pkgs` is not externally provided, so querying `_module.args` instead, requiring `config` clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:731:13: clan-pytest-with-core> E 730| "noting that argument `${name}` is not externally provided, so querying `_module.args` instead, requiring `config`" clan-pytest-with-core> E 731| config._module.args.${name} clan-pytest-with-core> E | ^ clan-pytest-with-core> E 732| ) clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/types.nix:1029:18: clan-pytest-with-core> E 1028| value = mapAttrs ( clan-pytest-with-core> E 1029| n: v: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1030| if lazy then clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'optionalValue.value' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1312:5: clan-pytest-with-core> E 1311| clan-pytest-with-core> E 1312| optionalValue = if isDefined then { value = mergedValue; } else { }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1313| }; 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1312:21: clan-pytest-with-core> E 1311| clan-pytest-with-core> E 1312| optionalValue = if isDefined then { value = mergedValue; } else { }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1313| }; clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'values' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1240:11: clan-pytest-with-core> E 1239| { clan-pytest-with-core> E 1240| values = defsSorted; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1241| inherit (defsFiltered) highestPrio; 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1211:11: clan-pytest-with-core> E 1210| # Avoid sorting if we don't have to. clan-pytest-with-core> E 1211| if any (def: def.value._type or "" == "order") defsFiltered.values then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1212| sortProperties defsFiltered.values clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'any' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1211:14: clan-pytest-with-core> E 1210| # Avoid sorting if we don't have to. clan-pytest-with-core> E 1211| if any (def: def.value._type or "" == "order") defsFiltered.values then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1212| sortProperties defsFiltered.values clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1211:19: clan-pytest-with-core> E 1210| # Avoid sorting if we don't have to. clan-pytest-with-core> E 1211| if any (def: def.value._type or "" == "order") defsFiltered.values then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1212| sortProperties defsFiltered.values clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'value._type' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1422:67: clan-pytest-with-core> E 1421| strip = clan-pytest-with-core> E 1422| def: if def.value._type or "" == "override" then def // { value = def.value.content; } else def; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1423| in clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'value.content' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1566:22: clan-pytest-with-core> E 1565| _type = "override"; clan-pytest-with-core> E 1566| inherit priority content; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1567| }; 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/nixos/modules/misc/nixpkgs.nix:107:15: clan-pytest-with-core> E 106| clan-pytest-with-core> E 107| finalPkgs = if opt.pkgs.isDefined then cfg.pkgs.appendOverlays cfg.overlays else defaultPkgs; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 108| clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'pkgs.isDefined' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1154:21: clan-pytest-with-core> E 1153| definitionsWithLocations = res.defsFinal; clan-pytest-with-core> E 1154| inherit (res) isDefined; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1155| inherit (res.checkedAndMerged) valueMeta; clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'isDefined' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1310:5: clan-pytest-with-core> E 1309| clan-pytest-with-core> E 1310| isDefined = defsFinal != [ ]; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1311| clan-pytest-with-core> E clan-pytest-with-core> E (6 duplicate frames omitted) clan-pytest-with-core> E clan-pytest-with-core> E error: attribute 'system' missing clan-pytest-with-core> E at /build/store/nix/store/y3h139bhv4373m1hab367ma4p5i95i2f-source/modules/clan/module.nix:164:24: clan-pytest-with-core> E 163| (lib.modules.importApply ../../nixosModules/machineModules/overridePkgs.nix { clan-pytest-with-core> E 164| pkgs = nixpkgsMatrix.${config.inventory.machines.${name}.nixpkgs}.system.${system}.pkgs; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 165| }) clan-pytest-with-core> E Did you mean systems? 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 0x7fffe6695c50> clan-pytest-with-core> flake_with_sops = 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_get_generator_prompt_previous_values( clan-pytest-with-core> monkeypatch: pytest.MonkeyPatch, clan-pytest-with-core> flake_with_sops: ClanFlake, clan-pytest-with-core> ) -> None: clan-pytest-with-core> """Test the get_generator_prompt_previous_values API endpoint.""" clan-pytest-with-core> flake_ = flake_with_sops clan-pytest-with-core> clan-pytest-with-core> config = flake_.machines["my_machine"] = create_test_machine_config() clan-pytest-with-core> my_generator = config["clan"]["core"]["vars"]["generators"]["my_generator"] clan-pytest-with-core> my_generator["prompts"]["prompt1"]["persist"] = True clan-pytest-with-core> my_generator["script"] = 'cat "$prompts"/prompt1 > "$out"/my_value' clan-pytest-with-core> flake_.refresh() clan-pytest-with-core> monkeypatch.chdir(flake_.path) clan-pytest-with-core> clan-pytest-with-core> # First run to store a value clan-pytest-with-core> > run_generators( clan-pytest-with-core> machines=[Machine(name="my_machine", flake=Flake(str(flake_.path)))], clan-pytest-with-core> generators=["my_generator"], clan-pytest-with-core> prompt_values={ clan-pytest-with-core> "my_generator": { clan-pytest-with-core> "prompt1": "test_value", clan-pytest-with-core> }, clan-pytest-with-core> }, clan-pytest-with-core> ) clan-pytest-with-core> clan-pytest-with-core> /build/src/clan_cli/tests/test_vars_prompts.py:480: clan-pytest-with-core> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ clan-pytest-with-core> /build/src/clan_lib/vars/generate.py:306: in run_generators clan-pytest-with-core> all_generators = get_generators(machines, full_closure=True) clan-pytest-with-core> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ clan-pytest-with-core> /build/src/clan_lib/vars/generate.py:146: in get_generators clan-pytest-with-core> flake.precache(get_generators_precache_selectors(list(all_machines))) clan-pytest-with-core> /build/src/clan_lib/flake/flake.py:1151: in precache clan-pytest-with-core> self.get_from_nix(not_fetched_selectors) clan-pytest-with-core> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ clan-pytest-with-core> clan-pytest-with-core> self = Flake(identifier='/build/pytest-10oe1cvv/flake', hash='sha256-/HAMjQXeJxKmp6Drgdgv/6H4fBmsIKeIwQ7SZgxqbnk=', 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.?secrets.?age.?plugins', 'clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.gener...ngs.publicModule', 'clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.settings.secretModule', ...] 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 while executing:$ clan select 'clanInternals.?secrets.?age.?plugins' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.generators.*.{share,dependencies,prompts,validationHash}' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.generators.*.files.*.{secret,deploy,owner,group,mode,neededFor}' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.?sops.?defaultGroups' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.settings.publicModule' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.settings.secretModule' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.?sops.?secretUploadDirectory' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.?password-store.?passCommand' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.?password-store.?secretLocation' clan-pytest-with-core> E $ clan select 'clanInternals.vars.settings.?recipients' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.?age.?secretLocation' clan-pytest-with-core> E Reason: attribute 'system' missing clan-pytest-with-core> E at /build/store/nix/store/y3h139bhv4373m1hab367ma4p5i95i2f-source/modules/clan/module.nix:164:24: clan-pytest-with-core> E 163| (lib.modules.importApply ../../nixosModules/machineModules/overridePkgs.nix { clan-pytest-with-core> E 164| pkgs = nixpkgsMatrix.${config.inventory.machines.${name}.nixpkgs}.system.${system}.pkgs; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 165| }) clan-pytest-with-core> E Did you mean systems?. 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 setup ----------------------------- clan-pytest-with-core> !! $HOME does not point to a temp directory!! HOME=/build/pytest-10oe1cvv clan-pytest-with-core> [localhost] $ clan vars keygen --flake /build/pytest-10oe1cvv/flake --user admin --no-interactive clan-pytest-with-core> Caller: /build/src/clan_cli/tests/age_keys.py:31::init clan-pytest-with-core> clan-pytest-with-core> Prefetching flake /build/pytest-10oe1cvv/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/febbcab65441be6ccc547560fd0155faadebbbb7 clan-pytest-with-core> (cached) $ clan select clanInternals.inventoryClass.relativeDirectory 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> git \ clan-pytest-with-core> -C /build/pytest-10oe1cvv/flake \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-10oe1cvv/flake/sops/users/admin 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/admin to git clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-10oe1cvv/flake \ clan-pytest-with-core> diff \ clan-pytest-with-core> --cached --exit-code \ clan-pytest-with-core> -- /build/pytest-10oe1cvv/flake/sops/users/admin 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-10oe1cvv/flake \ clan-pytest-with-core> commit \ clan-pytest-with-core> -m 'secrets: add user admin' \ clan-pytest-with-core> --no-verify /build/pytest-10oe1cvv/flake/sops/users/admin 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/admin to git 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/pytest-10oe1cvv clan-pytest-with-core> DEBUG clan_cli.tests.helpers.cli:__init__.py:143 $ clan vars keygen --flake /build/pytest-10oe1cvv/flake --user admin --no-interactive clan-pytest-with-core> Caller: /build/src/clan_cli/tests/age_keys.py:31::init clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:927 Prefetching flake /build/pytest-10oe1cvv/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/febbcab65441be6ccc547560fd0155faadebbbb7 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.cmd:__init__.py:143 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> DEBUG clan_lib.cmd:__init__.py:143 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> DEBUG clan_cli.secrets.sops:sops.py:99 Found age public key from a private key in the environment (SOPS_AGE_KEY): age1dhwqzkah943xzc34tc3dlmfayyevcmdmxzjezdgdy33euxwf59vsp3vk3c clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:143 git \ clan-pytest-with-core> -C /build/pytest-10oe1cvv/flake \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-10oe1cvv/flake/sops/users/admin 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> DEBUG clan_lib.cmd:__init__.py:143 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> DEBUG clan_lib.git:__init__.py:98 Adding sops/users/admin to git clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:143 git \ clan-pytest-with-core> -C /build/pytest-10oe1cvv/flake \ clan-pytest-with-core> diff \ clan-pytest-with-core> --cached --exit-code \ clan-pytest-with-core> -- /build/pytest-10oe1cvv/flake/sops/users/admin 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> DEBUG clan_lib.cmd:__init__.py:143 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> DEBUG clan_lib.cmd:__init__.py:143 git \ clan-pytest-with-core> -C /build/pytest-10oe1cvv/flake \ clan-pytest-with-core> commit \ clan-pytest-with-core> -m 'secrets: add user admin' \ clan-pytest-with-core> --no-verify /build/pytest-10oe1cvv/flake/sops/users/admin 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> DEBUG clan_lib.cmd:__init__.py:143 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> INFO clan_lib.git:__init__.py:141 Committed sops/users/admin to git clan-pytest-with-core> ----------------------------- Captured stdout call ----------------------------- clan-pytest-with-core> [main 3982a29] flake: update by flake generator clan-pytest-with-core> 2 files changed, 34 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> ----------------------------- Captured stderr call ----------------------------- clan-pytest-with-core> Prefetching flake /build/pytest-10oe1cvv/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/d2c0050d97832c3ac5193485b93705d00938c15e clan-pytest-with-core> (cached) $ clan select clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> Prefetching flake /build/pytest-10oe1cvv/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.inventoryClass.relativeDirectory clan-pytest-with-core> Cache miss for clanInternals.inventoryClass.inventorySerialization.{instances,machines,meta} clan-pytest-with-core> Loading flake cache from file /build/clan-flake-cache/flakes-v2/d168bf42b4a13587b5a33eb74b45b27a8b09bb02 clan-pytest-with-core> Precaching selectors: clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.machines clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.instances clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.meta clan-pytest-with-core> - (not cached) clanInternals.?secrets.?age.?plugins clan-pytest-with-core> - (cached) clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.generators.*.{share,dependencies,prompts,validationHash} clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.generators.*.files.*.{secret,deploy,owner,group,mode,neededFor} clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.?sops.?defaultGroups clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.settings.publicModule clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.settings.secretModule clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.?sops.?secretUploadDirectory clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.?password-store.?passCommand clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.?password-store.?secretLocation clan-pytest-with-core> - (not cached) clanInternals.vars.settings.?recipients clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.?age.?secretLocation clan-pytest-with-core> ------------------------------ Captured log call ------------------------------- clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:927 Prefetching flake /build/pytest-10oe1cvv/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/d2c0050d97832c3ac5193485b93705d00938c15e 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-10oe1cvv/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.inventoryClass.relativeDirectory clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1174 Cache miss for clanInternals.inventoryClass.inventorySerialization.{instances,machines,meta} clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:789 Loading flake cache from file /build/clan-flake-cache/flakes-v2/d168bf42b4a13587b5a33eb74b45b27a8b09bb02 clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1144 Precaching selectors: clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.machines clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.instances clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.meta clan-pytest-with-core> - (not cached) clanInternals.?secrets.?age.?plugins clan-pytest-with-core> - (cached) clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.generators.*.{share,dependencies,prompts,validationHash} clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.generators.*.files.*.{secret,deploy,owner,group,mode,neededFor} clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.?sops.?defaultGroups clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.settings.publicModule clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.settings.secretModule clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.?sops.?secretUploadDirectory clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.?password-store.?passCommand clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.?password-store.?secretLocation clan-pytest-with-core> - (not cached) clanInternals.vars.settings.?recipients clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.?age.?secretLocation clan-pytest-with-core> ___________ test_sops_fix_skips_add_for_no_deploy_per_machine_secret ___________ clan-pytest-with-core> [gw5] linux -- Python 3.14.7 /nix/store/3n4qphl9s728sz8frmpqqrv9b1m87g68-python3-3.14.7/bin/python clan-pytest-with-core> clan-pytest-with-core> self = Flake(identifier='/build/pytest-l_lxv52j/flake', hash='sha256-yaeKvFewovMek1Ii2p3TrHugTgwaLXAYvVz94q/LA2A=', 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.?secrets.?age.?plugins', 'clanInternals.machines.x86_64-linux.{machine1}.config.clan.core.vars.generat...tings.publicModule', 'clanInternals.machines.x86_64-linux.{machine1}.config.clan.core.vars.settings.secretModule', ...] 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-l_lxv52j/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/vpjk0339mja2h199iviajf6w0lgkm1w1-source?narHash=sha256-yaeKvFewovMek1Ii2p3TrHugTgwaLXAYvVz94q/LA2A="; 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": "maybe", "value": "secrets"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "plugins"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "share"}, {"type": "str", "value": "dependencies"}, {"type": "str", "value": "prompts"}, {"type": "str", "value": "validationHash"}]}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "str", "value": "files"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "secret"}, {"type": "str", "value": "deploy"}, {"type": "str", "value": "owner"}, {"type": "str", "value": "group"}, {"type": "str", "value": "mode"}, {"type": "str", "value": "neededFor"}]}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "defaultGroups"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "publicModule"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "secretModule"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "secretUploadDirectory"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "passCommand"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "secretLocation"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "maybe", "value": "recipients"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "secretLocation"}]'"'"''"'"') 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": "maybe", "value": "secrets"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "plugins"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "share"}, {"type": "str", "value": "dependencies"}, {"type": "str", "value": "prompts"}, {"type": "str", "value": "validationHash"}]}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "str", "value": "files"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "secret"}, {"type": "str", "value": "deploy"}, {"type": "str", "value": "owner"}, {"type": "str", "value": "group"}, {"type": "str", "value": "mode"}, {"type": "str", "value": "neededFor"}]}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "defaultGroups"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "publicModule"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "secretModule"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "secretUploadDirectory"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "passCommand"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "secretLocation"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "maybe", "value": "recipients"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "secretLocation"}]'') 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": "maybe", "value": "secrets"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "plugins"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "share"}, {"type": "str", "value": "dependencies"}, {"type": "str", "value": "prompts"}, {"type": "str", "value": "validationHash"}]}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "str", "value": "files"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "secret"}, {"type": "str", "value": "deploy"}, {"type": "str", "value": "owner"}, {"type": "str", "value": "group"}, {"type": "str", "value": "mode"}, {"type": "str", "value": "neededFor"}]}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "defaultGroups"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "publicModule"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "secretModule"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "secretUploadDirectory"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "passCommand"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "secretLocation"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "maybe", "value": "recipients"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "secretLocation"}]'') flake) clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating list element at index 1 clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating attribute 'machine1' clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/cba1x9mxnwr8b36cw41bya7g6d5v1p7d-source/select.nix:325:37: clan-pytest-with-core> E 324| in clan-pytest-with-core> E 325| builtins.mapAttrs (_: v: recurse selectors (idx + 1) v) filteredAttrs clan-pytest-with-core> E | ^ clan-pytest-with-core> E 326| else if selector.type == "maybe" then 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:325:40: clan-pytest-with-core> E 324| in clan-pytest-with-core> E 325| builtins.mapAttrs (_: v: recurse selectors (idx + 1) v) filteredAttrs clan-pytest-with-core> E | ^ clan-pytest-with-core> E 326| else if selector.type == "maybe" then 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 … from call site clan-pytest-with-core> E at /build/store/nix/store/cba1x9mxnwr8b36cw41bya7g6d5v1p7d-source/select.nix:312:15: clan-pytest-with-core> E 311| else if selector.type == "str" then clan-pytest-with-core> E 312| recurse selectors (idx + 1) (builtins.getAttr selector.value obj) clan-pytest-with-core> E | ^ clan-pytest-with-core> E 313| else if selector.type == "set" then 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 'getAttr' builtin clan-pytest-with-core> E at /build/store/nix/store/cba1x9mxnwr8b36cw41bya7g6d5v1p7d-source/select.nix:312:44: clan-pytest-with-core> E 311| else if selector.type == "str" then clan-pytest-with-core> E 312| recurse selectors (idx + 1) (builtins.getAttr selector.value obj) clan-pytest-with-core> E | ^ clan-pytest-with-core> E 313| else if selector.type == "set" then clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'seq' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:401:18: clan-pytest-with-core> E 400| options = checked options; clan-pytest-with-core> E 401| config = checked (removeAttrs config [ "_module" ]); clan-pytest-with-core> E | ^ clan-pytest-with-core> E 402| _module = checked (config._module); 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:304:9: clan-pytest-with-core> E 303| checkUnmatched = clan-pytest-with-core> E 304| if config._module.check && config._module.freeformType == null && merged.unmatchedDefns != [ ] then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 305| let clan-pytest-with-core> E clan-pytest-with-core> E … in the right operand of the AND (&&) operator clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:304:72: clan-pytest-with-core> E 303| checkUnmatched = clan-pytest-with-core> E 304| if config._module.check && config._module.freeformType == null && merged.unmatchedDefns != [ ] then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 305| let clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'unmatchedDefns' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:940:7: clan-pytest-with-core> E 939| # Transforms unmatchedDefnsByName into a list of definitions clan-pytest-with-core> E 940| unmatchedDefns = clan-pytest-with-core> E | ^ clan-pytest-with-core> E 941| if configs == [ ] then clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'concatLists' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:946:11: clan-pytest-with-core> E 945| else clan-pytest-with-core> E 946| concatLists ( clan-pytest-with-core> E | ^ clan-pytest-with-core> E 947| mapAttrsToList ( clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:948:21: clan-pytest-with-core> E 947| mapAttrsToList ( clan-pytest-with-core> E 948| name: defs: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 949| map ( clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'map' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:949:15: clan-pytest-with-core> E 948| name: defs: clan-pytest-with-core> E 949| map ( clan-pytest-with-core> E | ^ clan-pytest-with-core> E 950| def: clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:932:22: clan-pytest-with-core> E 931| # Propagate all unmatched definitions from nested option sets clan-pytest-with-core> E 932| mapAttrs (n: v: v.unmatchedDefns) resultsByName clan-pytest-with-core> E | ^ clan-pytest-with-core> E 933| # Plus the definitions for the current prefix that don't have a matching option clan-pytest-with-core> E clan-pytest-with-core> E (10 duplicate frames omitted) clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:932:25: clan-pytest-with-core> E 931| # Propagate all unmatched definitions from nested option sets clan-pytest-with-core> E 932| mapAttrs (n: v: v.unmatchedDefns) resultsByName clan-pytest-with-core> E | ^ clan-pytest-with-core> E 933| # Plus the definitions for the current prefix that don't have a matching option clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:876:15: clan-pytest-with-core> E 875| resultsByName = mapAttrs ( clan-pytest-with-core> E 876| name: decls: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 877| # We're descending into attribute ‘name’. 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:888:9: clan-pytest-with-core> E 887| in clan-pytest-with-core> E 888| if length optionDecls == length decls then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 889| let clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'length' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:888:12: clan-pytest-with-core> E 887| in clan-pytest-with-core> E 888| if length optionDecls == length decls then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 889| let clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'filter' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:882:25: clan-pytest-with-core> E 881| defns' = rawDefinitionsByName.${name} or [ ]; clan-pytest-with-core> E 882| optionDecls = filter ( clan-pytest-with-core> E | ^ clan-pytest-with-core> E 883| m: clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:883:13: clan-pytest-with-core> E 882| optionDecls = filter ( clan-pytest-with-core> E 883| m: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 884| m.options ? _type clan-pytest-with-core> E clan-pytest-with-core> E … in the left operand of the AND (&&) operator clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:885:13: clan-pytest-with-core> E 884| m.options ? _type clan-pytest-with-core> E 885| && (m.options._type == "option" || throwDeclarationTypeError loc m.options._type m._file) clan-pytest-with-core> E | ^ clan-pytest-with-core> E 886| ) decls; clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'options' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:807:15: clan-pytest-with-core> E 806| pos = unsafeGetAttrPos n subtree; clan-pytest-with-core> E 807| options = option; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 808| }) subtree clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:289:73: clan-pytest-with-core> E 288| len = length attrPath; clan-pytest-with-core> E 289| atDepth = n: if n == len then value else { ${elemAt attrPath n} = atDepth (n + 1); }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 290| in clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'atDepth' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:289:17: clan-pytest-with-core> E 288| len = length attrPath; clan-pytest-with-core> E 289| atDepth = n: if n == len then value else { ${elemAt attrPath n} = atDepth (n + 1); }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 290| in clan-pytest-with-core> E clan-pytest-with-core> E … in the right operand of the update (//) operator clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:2047:9: clan-pytest-with-core> E 2046| } clan-pytest-with-core> E 2047| // optionalAttrs (toType != null) { clan-pytest-with-core> E | ^ clan-pytest-with-core> E 2048| type = toType; clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:2047:12: clan-pytest-with-core> E 2046| } clan-pytest-with-core> E 2047| // optionalAttrs (toType != null) { clan-pytest-with-core> E | ^ clan-pytest-with-core> E 2048| type = toType; clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'optionalAttrs' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:1492:25: clan-pytest-with-core> E 1491| */ clan-pytest-with-core> E 1492| optionalAttrs = cond: as: if cond then as else { }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1493| 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:1492:29: clan-pytest-with-core> E 1491| */ clan-pytest-with-core> E 1492| optionalAttrs = cond: as: if cond then as else { }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1493| clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:2036:17: clan-pytest-with-core> E 2035| let clan-pytest-with-core> E 2036| opt = attrByPath to { } options; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 2037| in clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'attrByPath' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:89:24: clan-pytest-with-core> E 88| attrByPath = clan-pytest-with-core> E 89| attrPath: default: set: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 90| let clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:106:5: clan-pytest-with-core> E 105| in clan-pytest-with-core> E 106| attrByPath' 0 set; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 107| clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'attrByPath'' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:93:12: clan-pytest-with-core> E 92| attrByPath' = clan-pytest-with-core> E 93| n: s: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 94| ( clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:102:35: clan-pytest-with-core> E 101| in clan-pytest-with-core> E 102| if s ? ${attr} then attrByPath' (n + 1) s.${attr} else default clan-pytest-with-core> E | ^ clan-pytest-with-core> E 103| ) clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'attrByPath'' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:93:12: clan-pytest-with-core> E 92| attrByPath' = clan-pytest-with-core> E 93| n: s: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 94| ( clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:102:35: clan-pytest-with-core> E 101| in clan-pytest-with-core> E 102| if s ? ${attr} then attrByPath' (n + 1) s.${attr} else default clan-pytest-with-core> E | ^ clan-pytest-with-core> E 103| ) clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'attrByPath'' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:93:12: clan-pytest-with-core> E 92| attrByPath' = clan-pytest-with-core> E 93| n: s: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 94| ( clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:102:35: clan-pytest-with-core> E 101| in clan-pytest-with-core> E 102| if s ? ${attr} then attrByPath' (n + 1) s.${attr} else default clan-pytest-with-core> E | ^ clan-pytest-with-core> E 103| ) clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'attrByPath'' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:93:12: clan-pytest-with-core> E 92| attrByPath' = clan-pytest-with-core> E 93| n: s: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 94| ( clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:102:55: clan-pytest-with-core> E 101| in clan-pytest-with-core> E 102| if s ? ${attr} then attrByPath' (n + 1) s.${attr} else default clan-pytest-with-core> E | ^ clan-pytest-with-core> E 103| ) clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:927:37: clan-pytest-with-core> E 926| clan-pytest-with-core> E 927| matchedOptions = mapAttrs (n: v: v.matchedOptions) resultsByName; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 928| clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'matchedOptions' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:893:13: clan-pytest-with-core> E 892| { clan-pytest-with-core> E 893| matchedOptions = evalOptionValue loc opt defns'; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 894| unmatchedDefns = [ ]; clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:893:30: clan-pytest-with-core> E 892| { clan-pytest-with-core> E 893| matchedOptions = evalOptionValue loc opt defns'; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 894| unmatchedDefns = [ ]; clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'evalOptionValue' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1103:15: clan-pytest-with-core> E 1102| evalOptionValue = clan-pytest-with-core> E 1103| loc: opt: defs: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1104| let clan-pytest-with-core> E clan-pytest-with-core> E … in the left operand of the update (//) operator clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1148:5: clan-pytest-with-core> E 1147| warnDeprecation opt clan-pytest-with-core> E 1148| // { clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1149| value = addErrorContext "while evaluating the option `${showOption loc}':" value; 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1141:9: clan-pytest-with-core> E 1140| warnDeprecation = clan-pytest-with-core> E 1141| if (opt.type.deprecationMessage != null) then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1142| warn "The type `types.${opt.type.name}' of option `${showOption loc}' defined in ${showFiles opt.declarations} is deprecated. ${opt.type.deprecationMessage}" clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:890:19: clan-pytest-with-core> E 889| let clan-pytest-with-core> E 890| opt = fixupOptionType loc (mergeOptionDecls loc decls); clan-pytest-with-core> E | ^ clan-pytest-with-core> E 891| in clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'fixupOptionType' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1473:10: clan-pytest-with-core> E 1472| fixupOptionType = clan-pytest-with-core> E 1473| loc: opt: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1474| if opt.type.getSubModules or null == null then 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1474:5: clan-pytest-with-core> E 1473| loc: opt: clan-pytest-with-core> E 1474| if opt.type.getSubModules or null == null then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1475| opt // { type = opt.type or types.unspecified; } clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'type.getSubModules' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/nixos/modules/services/hardware/bluetooth.nix:72:9: clan-pytest-with-core> E 71| settings = mkOption { clan-pytest-with-core> E 72| type = cfgFmt.type; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 73| default = { }; clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/nixos/modules/services/hardware/bluetooth.nix:26:12: clan-pytest-with-core> E 25| clan-pytest-with-core> E 26| cfgFmt = pkgs.formats.ini { }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 27| clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:727:15: clan-pytest-with-core> E 726| extraArgs = mapAttrs ( clan-pytest-with-core> E 727| name: _: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 728| addErrorContext (context name) ( clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the module argument `pkgs' in "/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/nixos/modules/services/hardware/bluetooth.nix": clan-pytest-with-core> E clan-pytest-with-core> E … noting that argument `pkgs` is not externally provided, so querying `_module.args` instead, requiring `config` clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:731:13: clan-pytest-with-core> E 730| "noting that argument `${name}` is not externally provided, so querying `_module.args` instead, requiring `config`" clan-pytest-with-core> E 731| config._module.args.${name} clan-pytest-with-core> E | ^ clan-pytest-with-core> E 732| ) clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/types.nix:1029:18: clan-pytest-with-core> E 1028| value = mapAttrs ( clan-pytest-with-core> E 1029| n: v: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1030| if lazy then clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'optionalValue.value' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1312:5: clan-pytest-with-core> E 1311| clan-pytest-with-core> E 1312| optionalValue = if isDefined then { value = mergedValue; } else { }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1313| }; 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1312:21: clan-pytest-with-core> E 1311| clan-pytest-with-core> E 1312| optionalValue = if isDefined then { value = mergedValue; } else { }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1313| }; clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'values' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1240:11: clan-pytest-with-core> E 1239| { clan-pytest-with-core> E 1240| values = defsSorted; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1241| inherit (defsFiltered) highestPrio; 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1211:11: clan-pytest-with-core> E 1210| # Avoid sorting if we don't have to. clan-pytest-with-core> E 1211| if any (def: def.value._type or "" == "order") defsFiltered.values then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1212| sortProperties defsFiltered.values clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'any' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1211:14: clan-pytest-with-core> E 1210| # Avoid sorting if we don't have to. clan-pytest-with-core> E 1211| if any (def: def.value._type or "" == "order") defsFiltered.values then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1212| sortProperties defsFiltered.values clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1211:19: clan-pytest-with-core> E 1210| # Avoid sorting if we don't have to. clan-pytest-with-core> E 1211| if any (def: def.value._type or "" == "order") defsFiltered.values then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1212| sortProperties defsFiltered.values clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'value._type' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1422:67: clan-pytest-with-core> E 1421| strip = clan-pytest-with-core> E 1422| def: if def.value._type or "" == "override" then def // { value = def.value.content; } else def; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1423| in clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'value.content' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1566:22: clan-pytest-with-core> E 1565| _type = "override"; clan-pytest-with-core> E 1566| inherit priority content; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1567| }; 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/nixos/modules/misc/nixpkgs.nix:107:15: clan-pytest-with-core> E 106| clan-pytest-with-core> E 107| finalPkgs = if opt.pkgs.isDefined then cfg.pkgs.appendOverlays cfg.overlays else defaultPkgs; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 108| clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'pkgs.isDefined' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1154:21: clan-pytest-with-core> E 1153| definitionsWithLocations = res.defsFinal; clan-pytest-with-core> E 1154| inherit (res) isDefined; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1155| inherit (res.checkedAndMerged) valueMeta; clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'isDefined' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1310:5: clan-pytest-with-core> E 1309| clan-pytest-with-core> E 1310| isDefined = defsFinal != [ ]; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1311| clan-pytest-with-core> E clan-pytest-with-core> E (6 duplicate frames omitted) clan-pytest-with-core> E clan-pytest-with-core> E error: attribute 'system' missing clan-pytest-with-core> E at /build/store/nix/store/y3h139bhv4373m1hab367ma4p5i95i2f-source/modules/clan/module.nix:164:24: clan-pytest-with-core> E 163| (lib.modules.importApply ../../nixosModules/machineModules/overridePkgs.nix { clan-pytest-with-core> E 164| pkgs = nixpkgsMatrix.${config.inventory.machines.${name}.nixpkgs}.system.${system}.pkgs; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 165| }) clan-pytest-with-core> E Did you mean systems? 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 0x7fffe6260140> clan-pytest-with-core> flake_with_sops = 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_sops_fix_skips_add_for_no_deploy_per_machine_secret( clan-pytest-with-core> monkeypatch: pytest.MonkeyPatch, clan-pytest-with-core> flake_with_sops: ClanFlake, clan-pytest-with-core> ) -> None: clan-pytest-with-core> """Test that fix() does not add machine access for per-machine secrets clan-pytest-with-core> with deploy=False. clan-pytest-with-core> clan-pytest-with-core> Regression test: the fix() method previously only checked clan-pytest-with-core> ``generator.share and not file.deploy``, so per-machine generators with clan-pytest-with-core> deploy=False would incorrectly have the machine key added as a SOPS clan-pytest-with-core> recipient by the elif branch. clan-pytest-with-core> """ clan-pytest-with-core> flake = flake_with_sops clan-pytest-with-core> clan-pytest-with-core> # Per-machine generator with deploy=False from the start clan-pytest-with-core> config = flake.machines["machine1"] = create_test_machine_config() clan-pytest-with-core> gen = config["clan"]["core"]["vars"]["generators"]["my_gen"] clan-pytest-with-core> gen["share"] = False clan-pytest-with-core> gen["files"]["my_secret"]["secret"] = True clan-pytest-with-core> gen["files"]["my_secret"]["deploy"] = False clan-pytest-with-core> gen["script"] = 'echo -n secret_value > "$out"/my_secret' clan-pytest-with-core> clan-pytest-with-core> flake.refresh() clan-pytest-with-core> monkeypatch.chdir(flake.path) clan-pytest-with-core> clan-pytest-with-core> # Generate secrets (no machine symlink since deploy=False) clan-pytest-with-core> > cli.run(["vars", "generate", "--flake", str(flake.path), "machine1"]) clan-pytest-with-core> clan-pytest-with-core> /build/src/clan_cli/tests/test_vars_generate.py:914: 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/vars/generate.py:33: in generate_command clan-pytest-with-core> run_generators( clan-pytest-with-core> /build/src/clan_lib/vars/generate.py:306: in run_generators clan-pytest-with-core> all_generators = get_generators(machines, full_closure=True) clan-pytest-with-core> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ clan-pytest-with-core> /build/src/clan_lib/vars/generate.py:146: in get_generators clan-pytest-with-core> flake.precache(get_generators_precache_selectors(list(all_machines))) clan-pytest-with-core> /build/src/clan_lib/flake/flake.py:1151: in precache clan-pytest-with-core> self.get_from_nix(not_fetched_selectors) clan-pytest-with-core> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ clan-pytest-with-core> clan-pytest-with-core> self = Flake(identifier='/build/pytest-l_lxv52j/flake', hash='sha256-yaeKvFewovMek1Ii2p3TrHugTgwaLXAYvVz94q/LA2A=', 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.?secrets.?age.?plugins', 'clanInternals.machines.x86_64-linux.{machine1}.config.clan.core.vars.generat...tings.publicModule', 'clanInternals.machines.x86_64-linux.{machine1}.config.clan.core.vars.settings.secretModule', ...] 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 while executing:$ clan select 'clanInternals.?secrets.?age.?plugins' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{machine1}.config.clan.core.vars.generators.*.{share,dependencies,prompts,validationHash}' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{machine1}.config.clan.core.vars.generators.*.files.*.{secret,deploy,owner,group,mode,neededFor}' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{machine1}.config.clan.core.?sops.?defaultGroups' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{machine1}.config.clan.core.vars.settings.publicModule' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{machine1}.config.clan.core.vars.settings.secretModule' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{machine1}.config.clan.core.vars.?sops.?secretUploadDirectory' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{machine1}.config.clan.core.vars.?password-store.?passCommand' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{machine1}.config.clan.core.vars.?password-store.?secretLocation' clan-pytest-with-core> E $ clan select 'clanInternals.vars.settings.?recipients' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{machine1}.config.clan.core.vars.?age.?secretLocation' clan-pytest-with-core> E Reason: attribute 'system' missing clan-pytest-with-core> E at /build/store/nix/store/y3h139bhv4373m1hab367ma4p5i95i2f-source/modules/clan/module.nix:164:24: clan-pytest-with-core> E 163| (lib.modules.importApply ../../nixosModules/machineModules/overridePkgs.nix { clan-pytest-with-core> E 164| pkgs = nixpkgsMatrix.${config.inventory.machines.${name}.nixpkgs}.system.${system}.pkgs; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 165| }) clan-pytest-with-core> E Did you mean systems?. 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 setup ----------------------------- clan-pytest-with-core> !! $HOME does not point to a temp directory!! HOME=/build/pytest-l_lxv52j clan-pytest-with-core> [localhost] $ clan vars keygen --flake /build/pytest-l_lxv52j/flake --user admin --no-interactive clan-pytest-with-core> Caller: /build/src/clan_cli/tests/age_keys.py:31::init clan-pytest-with-core> clan-pytest-with-core> Prefetching flake /build/pytest-l_lxv52j/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/febbcab65441be6ccc547560fd0155faadebbbb7 clan-pytest-with-core> (cached) $ clan select clanInternals.inventoryClass.relativeDirectory 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> git \ clan-pytest-with-core> -C /build/pytest-l_lxv52j/flake \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-l_lxv52j/flake/sops/users/admin 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/admin to git clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-l_lxv52j/flake \ clan-pytest-with-core> diff \ clan-pytest-with-core> --cached --exit-code \ clan-pytest-with-core> -- /build/pytest-l_lxv52j/flake/sops/users/admin 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-l_lxv52j/flake \ clan-pytest-with-core> commit \ clan-pytest-with-core> -m 'secrets: add user admin' \ clan-pytest-with-core> --no-verify /build/pytest-l_lxv52j/flake/sops/users/admin 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/admin to git 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/pytest-l_lxv52j clan-pytest-with-core> DEBUG clan_cli.tests.helpers.cli:__init__.py:143 $ clan vars keygen --flake /build/pytest-l_lxv52j/flake --user admin --no-interactive clan-pytest-with-core> Caller: /build/src/clan_cli/tests/age_keys.py:31::init clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:927 Prefetching flake /build/pytest-l_lxv52j/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/febbcab65441be6ccc547560fd0155faadebbbb7 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.cmd:__init__.py:143 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> DEBUG clan_lib.cmd:__init__.py:143 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> DEBUG clan_cli.secrets.sops:sops.py:99 Found age public key from a private key in the environment (SOPS_AGE_KEY): age1dhwqzkah943xzc34tc3dlmfayyevcmdmxzjezdgdy33euxwf59vsp3vk3c clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:143 git \ clan-pytest-with-core> -C /build/pytest-l_lxv52j/flake \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-l_lxv52j/flake/sops/users/admin 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> DEBUG clan_lib.cmd:__init__.py:143 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> DEBUG clan_lib.git:__init__.py:98 Adding sops/users/admin to git clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:143 git \ clan-pytest-with-core> -C /build/pytest-l_lxv52j/flake \ clan-pytest-with-core> diff \ clan-pytest-with-core> --cached --exit-code \ clan-pytest-with-core> -- /build/pytest-l_lxv52j/flake/sops/users/admin 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> DEBUG clan_lib.cmd:__init__.py:143 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> DEBUG clan_lib.cmd:__init__.py:143 git \ clan-pytest-with-core> -C /build/pytest-l_lxv52j/flake \ clan-pytest-with-core> commit \ clan-pytest-with-core> -m 'secrets: add user admin' \ clan-pytest-with-core> --no-verify /build/pytest-l_lxv52j/flake/sops/users/admin 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> DEBUG clan_lib.cmd:__init__.py:143 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> INFO clan_lib.git:__init__.py:141 Committed sops/users/admin to git clan-pytest-with-core> ----------------------------- Captured stdout call ----------------------------- clan-pytest-with-core> [main 37964ee] flake: update by flake generator clan-pytest-with-core> 2 files changed, 36 insertions(+) clan-pytest-with-core> create mode 100644 machines/machine1/configuration.json clan-pytest-with-core> create mode 100644 machines/machine1/configuration.nix clan-pytest-with-core> ----------------------------- Captured stderr call ----------------------------- clan-pytest-with-core> Prefetching flake /build/pytest-l_lxv52j/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/d2c0050d97832c3ac5193485b93705d00938c15e clan-pytest-with-core> (cached) $ clan select clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> [localhost] $ clan vars generate --flake /build/pytest-l_lxv52j/flake machine1 clan-pytest-with-core> Caller: /build/src/clan_cli/tests/test_vars_generate.py:914::test_sops_fix_skips_add_for_no_deploy_per_machine_secret clan-pytest-with-core> clan-pytest-with-core> Prefetching flake /build/pytest-l_lxv52j/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.cliChecks clan-pytest-with-core> Cache miss for clanInternals.inventoryClass.inventorySerialization.{instances,machines,meta} clan-pytest-with-core> Loading flake cache from file /build/clan-flake-cache/flakes-v2/ceb507a580c6a8821151ace5eb1b1a29a1985cb7 clan-pytest-with-core> Cache miss for clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> Loading flake cache from file /build/clan-flake-cache/flakes-v2/ceb507a580c6a8821151ace5eb1b1a29a1985cb7 clan-pytest-with-core> (cached) $ clan select 'clanInternals.inventoryClass.inventorySerialization.{instances,machines,meta}' clan-pytest-with-core> Precaching selectors: clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.machines clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.instances clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.meta clan-pytest-with-core> - (not cached) clanInternals.?secrets.?age.?plugins clan-pytest-with-core> - (cached) clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1}.config.clan.core.vars.generators.*.{share,dependencies,prompts,validationHash} clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1}.config.clan.core.vars.generators.*.files.*.{secret,deploy,owner,group,mode,neededFor} clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1}.config.clan.core.?sops.?defaultGroups clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1}.config.clan.core.vars.settings.publicModule clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1}.config.clan.core.vars.settings.secretModule clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1}.config.clan.core.vars.?sops.?secretUploadDirectory clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1}.config.clan.core.vars.?password-store.?passCommand clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1}.config.clan.core.vars.?password-store.?secretLocation clan-pytest-with-core> - (not cached) clanInternals.vars.settings.?recipients clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1}.config.clan.core.vars.?age.?secretLocation clan-pytest-with-core> ------------------------------ Captured log call ------------------------------- clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:927 Prefetching flake /build/pytest-l_lxv52j/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/d2c0050d97832c3ac5193485b93705d00938c15e clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1179 (cached) $ clan select clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> DEBUG clan_cli.tests.helpers.cli:__init__.py:143 $ clan vars generate --flake /build/pytest-l_lxv52j/flake machine1 clan-pytest-with-core> Caller: /build/src/clan_cli/tests/test_vars_generate.py:914::test_sops_fix_skips_add_for_no_deploy_per_machine_secret clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:927 Prefetching flake /build/pytest-l_lxv52j/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.cliChecks clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1174 Cache miss for clanInternals.inventoryClass.inventorySerialization.{instances,machines,meta} clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:789 Loading flake cache from file /build/clan-flake-cache/flakes-v2/ceb507a580c6a8821151ace5eb1b1a29a1985cb7 clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1174 Cache miss for clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:789 Loading flake cache from file /build/clan-flake-cache/flakes-v2/ceb507a580c6a8821151ace5eb1b1a29a1985cb7 clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1179 (cached) $ clan select 'clanInternals.inventoryClass.inventorySerialization.{instances,machines,meta}' clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1144 Precaching selectors: clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.machines clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.instances clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.meta clan-pytest-with-core> - (not cached) clanInternals.?secrets.?age.?plugins clan-pytest-with-core> - (cached) clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1}.config.clan.core.vars.generators.*.{share,dependencies,prompts,validationHash} clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1}.config.clan.core.vars.generators.*.files.*.{secret,deploy,owner,group,mode,neededFor} clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1}.config.clan.core.?sops.?defaultGroups clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1}.config.clan.core.vars.settings.publicModule clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1}.config.clan.core.vars.settings.secretModule clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1}.config.clan.core.vars.?sops.?secretUploadDirectory clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1}.config.clan.core.vars.?password-store.?passCommand clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1}.config.clan.core.vars.?password-store.?secretLocation clan-pytest-with-core> - (not cached) clanInternals.vars.settings.?recipients clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1}.config.clan.core.vars.?age.?secretLocation clan-pytest-with-core> __________________ test_non_existing_dependency_raises_error ___________________ clan-pytest-with-core> [gw12] linux -- Python 3.14.7 /nix/store/3n4qphl9s728sz8frmpqqrv9b1m87g68-python3-3.14.7/bin/python clan-pytest-with-core> clan-pytest-with-core> monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7fffe64948d0> clan-pytest-with-core> flake_with_sops = 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_non_existing_dependency_raises_error( clan-pytest-with-core> monkeypatch: pytest.MonkeyPatch, clan-pytest-with-core> flake_with_sops: ClanFlake, clan-pytest-with-core> ) -> None: clan-pytest-with-core> """Ensure that a generator with a non-existing dependency raises a clear error.""" clan-pytest-with-core> flake = flake_with_sops clan-pytest-with-core> clan-pytest-with-core> config = flake.machines["my_machine"] = create_test_machine_config() clan-pytest-with-core> my_generator = config["clan"]["core"]["vars"]["generators"]["my_generator"] clan-pytest-with-core> my_generator["files"]["my_value"]["secret"] = False clan-pytest-with-core> my_generator["script"] = 'echo "$RANDOM" > "$out"/my_value' clan-pytest-with-core> my_generator["dependencies"] = ["non_existing_generator"] clan-pytest-with-core> flake.refresh() clan-pytest-with-core> monkeypatch.chdir(flake.path) clan-pytest-with-core> > with pytest.raises( clan-pytest-with-core> ClanError, clan-pytest-with-core> match="Generator 'my_generator' depends on 'non_existing_generator', but 'non_existing_generator' was not found", clan-pytest-with-core> ): clan-pytest-with-core> E AssertionError: Regex pattern did not match. clan-pytest-with-core> E Expected regex: "Generator 'my_generator' depends on 'non_existing_generator', but 'non_existing_generator' was not found" clan-pytest-with-core> E Actual message: "Error while executing:$ clan select 'clanInternals.?secrets.?age.?plugins'\n$ clan select 'clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.generators.*.{share,dependencies,prompts,validationHash}'\n$ clan select 'clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.generators.*.files.*.{secret,deploy,owner,group,mode,neededFor}'\n$ clan select 'clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.?sops.?defaultGroups'\n$ clan select 'clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.settings.publicModule'\n$ clan select 'clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.settings.secretModule'\n$ clan select 'clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.?sops.?secretUploadDirectory'\n$ clan select 'clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.?password-store.?passCommand'\n$ clan select 'clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.?password-store.?secretLocation'\n$ clan select 'clanInternals.vars.settings.?recipients'\n$ clan select 'clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.?age.?secretLocation'\n Reason: attribute 'system' missing\n at /build/store/nix/store/y3h139bhv4373m1hab367ma4p5i95i2f-source/modules/clan/module.nix:164:24:\n 163| (lib.modules.importApply ../../nixosModules/machineModules/overridePkgs.nix {\n 164| pkgs = nixpkgsMatrix.${config.inventory.machines.${name}.nixpkgs}.system.${system}.pkgs;\n | ^\n 165| })\n Did you mean systems?. Use flag '--debug' to see full nix trace." clan-pytest-with-core> clan-pytest-with-core> /build/src/clan_cli/tests/test_vars_errors.py:30: AssertionError clan-pytest-with-core> ---------------------------- Captured stdout setup ----------------------------- clan-pytest-with-core> Initialized empty Git repository in /build/minimal-flake-_qpsfzms/flake/.git/ clan-pytest-with-core> [main (root-commit) bea4edf] 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-_qpsfzms/flake/flake.lock": clan-pytest-with-core> • Added input 'clan-core': clan-pytest-with-core> 'path:/nix/store/x4g1qsn1nq0q56zn8h9c7xaiysv7bsf2-clan-core-flake?lastModified=1&narHash=sha256-Ynx5u312tlxJbGJCSevw5zZVxrd02FisWE1my%2B%2BFRSw%3D' (1970-01-01) clan-pytest-with-core> • Added input 'clan-core/data-mesher': clan-pytest-with-core> 'path:/nix/store/kdjkigwckgrfz0yg0d9z7kj2xkf084vs-source?lastModified=1&narHash=sha256-Yase/4e4aNN9QvUMqPH9ngbAmlcJCqLmFL0zuURdkuA%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/w2c23ykc12mswlg8hrrjzb5gv9gvkzwq-source?lastModified=1&narHash=sha256-RxWs5ND31KzTG7wvMM%2BPMfUjyNpmIEr999lqNARaM5o%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/lrxvs4l9bqbgjfz7w9bkfg5zqq442jxc-source?lastModified=1&narHash=sha256-4dtXQk/NMePegK/nWp5NSeuZKLATItOq61lpEvmXqGw%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/p17akwn814w226jq2cdkkhcw4psb0ga9-source?lastModified=0&narHash=sha256-tkD1h/1jLJ6qZHjG7/TOZT1qqI1ej3VPPCufHQyv1Uo%3D' (1970-01-01) clan-pytest-with-core> • Added input 'clan-core/sops-nix': clan-pytest-with-core> 'path:/nix/store/s154mmk8ahvc71gq8xfkbzlk240yvniv-source?lastModified=1&narHash=sha256-gkig4nPi1CWc4Z50GBsjE4ygSE7hMpl/TwID2an2Cck%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/9m1jsz5b9ggmjij2vkmafnhn26g96jjn-source?lastModified=1&narHash=sha256-brhZ8DmuGtzkCYHJg4HEd602amKm89Y9ytsFZ5uWD1w%3D' (1970-01-01) clan-pytest-with-core> • Added input 'clan-core/treefmt-nix': clan-pytest-with-core> 'path:/nix/store/7sjy8935654h3220n5gbaclf5nfw4nzx-source?lastModified=1&narHash=sha256-WSFCsDSE5ffgD2MqzkM2CYjeFiKhRF/dJUN8uedb6YE%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-51uppy8x clan-pytest-with-core> [localhost] $ clan vars keygen --flake /build/pytest-51uppy8x/flake --user admin --no-interactive clan-pytest-with-core> Caller: /build/src/clan_cli/tests/age_keys.py:31::init clan-pytest-with-core> clan-pytest-with-core> Prefetching flake /build/pytest-51uppy8x/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/febbcab65441be6ccc547560fd0155faadebbbb7 clan-pytest-with-core> (cached) $ clan select clanInternals.inventoryClass.relativeDirectory 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> git \ clan-pytest-with-core> -C /build/pytest-51uppy8x/flake \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-51uppy8x/flake/sops/users/admin 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/admin to git clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-51uppy8x/flake \ clan-pytest-with-core> diff \ clan-pytest-with-core> --cached --exit-code \ clan-pytest-with-core> -- /build/pytest-51uppy8x/flake/sops/users/admin 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-51uppy8x/flake \ clan-pytest-with-core> commit \ clan-pytest-with-core> -m 'secrets: add user admin' \ clan-pytest-with-core> --no-verify /build/pytest-51uppy8x/flake/sops/users/admin 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/admin to git 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:143 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-_qpsfzms/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/x4g1qsn1nq0q56zn8h9c7xaiysv7bsf2-clan-core-flake?lastModified=1&narHash=sha256-Ynx5u312tlxJbGJCSevw5zZVxrd02FisWE1my%2B%2BFRSw%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/kdjkigwckgrfz0yg0d9z7kj2xkf084vs-source?lastModified=1&narHash=sha256-Yase/4e4aNN9QvUMqPH9ngbAmlcJCqLmFL0zuURdkuA%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/w2c23ykc12mswlg8hrrjzb5gv9gvkzwq-source?lastModified=1&narHash=sha256-RxWs5ND31KzTG7wvMM%2BPMfUjyNpmIEr999lqNARaM5o%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/lrxvs4l9bqbgjfz7w9bkfg5zqq442jxc-source?lastModified=1&narHash=sha256-4dtXQk/NMePegK/nWp5NSeuZKLATItOq61lpEvmXqGw%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/p17akwn814w226jq2cdkkhcw4psb0ga9-source?lastModified=0&narHash=sha256-tkD1h/1jLJ6qZHjG7/TOZT1qqI1ej3VPPCufHQyv1Uo%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/s154mmk8ahvc71gq8xfkbzlk240yvniv-source?lastModified=1&narHash=sha256-gkig4nPi1CWc4Z50GBsjE4ygSE7hMpl/TwID2an2Cck%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/9m1jsz5b9ggmjij2vkmafnhn26g96jjn-source?lastModified=1&narHash=sha256-brhZ8DmuGtzkCYHJg4HEd602amKm89Y9ytsFZ5uWD1w%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/7sjy8935654h3220n5gbaclf5nfw4nzx-source?lastModified=1&narHash=sha256-WSFCsDSE5ffgD2MqzkM2CYjeFiKhRF/dJUN8uedb6YE%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:143 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-51uppy8x clan-pytest-with-core> DEBUG clan_cli.tests.helpers.cli:__init__.py:143 $ clan vars keygen --flake /build/pytest-51uppy8x/flake --user admin --no-interactive clan-pytest-with-core> Caller: /build/src/clan_cli/tests/age_keys.py:31::init clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:927 Prefetching flake /build/pytest-51uppy8x/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/febbcab65441be6ccc547560fd0155faadebbbb7 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.cmd:__init__.py:143 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> DEBUG clan_lib.cmd:__init__.py:143 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> DEBUG clan_cli.secrets.sops:sops.py:99 Found age public key from a private key in the environment (SOPS_AGE_KEY): age1dhwqzkah943xzc34tc3dlmfayyevcmdmxzjezdgdy33euxwf59vsp3vk3c clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:143 git \ clan-pytest-with-core> -C /build/pytest-51uppy8x/flake \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-51uppy8x/flake/sops/users/admin 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> DEBUG clan_lib.cmd:__init__.py:143 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> DEBUG clan_lib.git:__init__.py:98 Adding sops/users/admin to git clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:143 git \ clan-pytest-with-core> -C /build/pytest-51uppy8x/flake \ clan-pytest-with-core> diff \ clan-pytest-with-core> --cached --exit-code \ clan-pytest-with-core> -- /build/pytest-51uppy8x/flake/sops/users/admin 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> DEBUG clan_lib.cmd:__init__.py:143 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> DEBUG clan_lib.cmd:__init__.py:143 git \ clan-pytest-with-core> -C /build/pytest-51uppy8x/flake \ clan-pytest-with-core> commit \ clan-pytest-with-core> -m 'secrets: add user admin' \ clan-pytest-with-core> --no-verify /build/pytest-51uppy8x/flake/sops/users/admin 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> DEBUG clan_lib.cmd:__init__.py:143 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> INFO clan_lib.git:__init__.py:141 Committed sops/users/admin to git clan-pytest-with-core> ----------------------------- Captured stdout call ----------------------------- clan-pytest-with-core> [main ac7e27c] flake: update by flake generator clan-pytest-with-core> 2 files changed, 37 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> ----------------------------- Captured stderr call ----------------------------- clan-pytest-with-core> Prefetching flake /build/pytest-51uppy8x/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/d2c0050d97832c3ac5193485b93705d00938c15e clan-pytest-with-core> (cached) $ clan select clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> [localhost] $ clan vars generate --flake /build/pytest-51uppy8x/flake my_machine clan-pytest-with-core> Caller: /build/src/clan_cli/tests/test_vars_errors.py:34::test_non_existing_dependency_raises_error clan-pytest-with-core> clan-pytest-with-core> Prefetching flake /build/pytest-51uppy8x/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.cliChecks clan-pytest-with-core> Cache miss for clanInternals.inventoryClass.inventorySerialization.{instances,machines,meta} clan-pytest-with-core> Loading flake cache from file /build/clan-flake-cache/flakes-v2/b3eccd6eaaec7d71ae6addfdafa3c19681864632 clan-pytest-with-core> Cache miss for clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> Loading flake cache from file /build/clan-flake-cache/flakes-v2/b3eccd6eaaec7d71ae6addfdafa3c19681864632 clan-pytest-with-core> (cached) $ clan select 'clanInternals.inventoryClass.inventorySerialization.{instances,machines,meta}' clan-pytest-with-core> Precaching selectors: clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.machines clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.instances clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.meta clan-pytest-with-core> - (not cached) clanInternals.?secrets.?age.?plugins clan-pytest-with-core> - (cached) clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.generators.*.{share,dependencies,prompts,validationHash} clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.generators.*.files.*.{secret,deploy,owner,group,mode,neededFor} clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.?sops.?defaultGroups clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.settings.publicModule clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.settings.secretModule clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.?sops.?secretUploadDirectory clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.?password-store.?passCommand clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.?password-store.?secretLocation clan-pytest-with-core> - (not cached) clanInternals.vars.settings.?recipients clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.?age.?secretLocation clan-pytest-with-core> ------------------------------ Captured log call ------------------------------- clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:927 Prefetching flake /build/pytest-51uppy8x/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/d2c0050d97832c3ac5193485b93705d00938c15e clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1179 (cached) $ clan select clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> DEBUG clan_cli.tests.helpers.cli:__init__.py:143 $ clan vars generate --flake /build/pytest-51uppy8x/flake my_machine clan-pytest-with-core> Caller: /build/src/clan_cli/tests/test_vars_errors.py:34::test_non_existing_dependency_raises_error clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:927 Prefetching flake /build/pytest-51uppy8x/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.cliChecks clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1174 Cache miss for clanInternals.inventoryClass.inventorySerialization.{instances,machines,meta} clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:789 Loading flake cache from file /build/clan-flake-cache/flakes-v2/b3eccd6eaaec7d71ae6addfdafa3c19681864632 clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1174 Cache miss for clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:789 Loading flake cache from file /build/clan-flake-cache/flakes-v2/b3eccd6eaaec7d71ae6addfdafa3c19681864632 clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1179 (cached) $ clan select 'clanInternals.inventoryClass.inventorySerialization.{instances,machines,meta}' clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1144 Precaching selectors: clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.machines clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.instances clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.meta clan-pytest-with-core> - (not cached) clanInternals.?secrets.?age.?plugins clan-pytest-with-core> - (cached) clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.generators.*.{share,dependencies,prompts,validationHash} clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.generators.*.files.*.{secret,deploy,owner,group,mode,neededFor} clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.?sops.?defaultGroups clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.settings.publicModule clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.settings.secretModule clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.?sops.?secretUploadDirectory clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.?password-store.?passCommand clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.?password-store.?secretLocation clan-pytest-with-core> - (not cached) clanInternals.vars.settings.?recipients clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.?age.?secretLocation clan-pytest-with-core> _________________________ test_binary_secret_roundtrip _________________________ clan-pytest-with-core> [gw1] linux -- Python 3.14.7 /nix/store/3n4qphl9s728sz8frmpqqrv9b1m87g68-python3-3.14.7/bin/python clan-pytest-with-core> clan-pytest-with-core> self = Flake(identifier='/build/pytest-n67tre5c/flake', hash='sha256-bIq7UUqv4TGF69NUJn1CP5GFrjAfMOyxP+6mIzjgMuQ=', 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.?secrets.?age.?plugins', 'clanInternals.inventoryClass.relativeDirectory', 'clanInternals.machines.x86...s.?defaultGroups', 'clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.settings.publicModule', ...] 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-n67tre5c/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/6rlyyyrs9cnvq54dxs6b3ib2sks27pja-source?narHash=sha256-bIq7UUqv4TGF69NUJn1CP5GFrjAfMOyxP+6mIzjgMuQ="; 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": "maybe", "value": "secrets"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "plugins"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "inventoryClass"}, {"type": "str", "value": "relativeDirectory"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "share"}, {"type": "str", "value": "dependencies"}, {"type": "str", "value": "prompts"}, {"type": "str", "value": "validationHash"}]}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "str", "value": "files"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "secret"}, {"type": "str", "value": "deploy"}, {"type": "str", "value": "owner"}, {"type": "str", "value": "group"}, {"type": "str", "value": "mode"}, {"type": "str", "value": "neededFor"}]}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "defaultGroups"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "publicModule"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "secretModule"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "secretUploadDirectory"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "passCommand"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "secretLocation"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "maybe", "value": "recipients"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "secretLocation"}]'"'"''"'"') 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": "maybe", "value": "secrets"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "plugins"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "inventoryClass"}, {"type": "str", "value": "relativeDirectory"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "share"}, {"type": "str", "value": "dependencies"}, {"type": "str", "value": "prompts"}, {"type": "str", "value": "validationHash"}]}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "str", "value": "files"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "secret"}, {"type": "str", "value": "deploy"}, {"type": "str", "value": "owner"}, {"type": "str", "value": "group"}, {"type": "str", "value": "mode"}, {"type": "str", "value": "neededFor"}]}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "defaultGroups"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "publicModule"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "secretModule"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "secretUploadDirectory"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "passCommand"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "secretLocation"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "maybe", "value": "recipients"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "secretLocation"}]'') 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": "maybe", "value": "secrets"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "plugins"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "inventoryClass"}, {"type": "str", "value": "relativeDirectory"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "share"}, {"type": "str", "value": "dependencies"}, {"type": "str", "value": "prompts"}, {"type": "str", "value": "validationHash"}]}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "str", "value": "files"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "secret"}, {"type": "str", "value": "deploy"}, {"type": "str", "value": "owner"}, {"type": "str", "value": "group"}, {"type": "str", "value": "mode"}, {"type": "str", "value": "neededFor"}]}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "defaultGroups"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "publicModule"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "secretModule"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "secretUploadDirectory"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "passCommand"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "secretLocation"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "maybe", "value": "recipients"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "secretLocation"}]'') flake) clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating list element at index 2 clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating attribute 'my_machine' clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/cba1x9mxnwr8b36cw41bya7g6d5v1p7d-source/select.nix:325:37: clan-pytest-with-core> E 324| in clan-pytest-with-core> E 325| builtins.mapAttrs (_: v: recurse selectors (idx + 1) v) filteredAttrs clan-pytest-with-core> E | ^ clan-pytest-with-core> E 326| else if selector.type == "maybe" then 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:325:40: clan-pytest-with-core> E 324| in clan-pytest-with-core> E 325| builtins.mapAttrs (_: v: recurse selectors (idx + 1) v) filteredAttrs clan-pytest-with-core> E | ^ clan-pytest-with-core> E 326| else if selector.type == "maybe" then 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 … from call site clan-pytest-with-core> E at /build/store/nix/store/cba1x9mxnwr8b36cw41bya7g6d5v1p7d-source/select.nix:312:15: clan-pytest-with-core> E 311| else if selector.type == "str" then clan-pytest-with-core> E 312| recurse selectors (idx + 1) (builtins.getAttr selector.value obj) clan-pytest-with-core> E | ^ clan-pytest-with-core> E 313| else if selector.type == "set" then 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 'getAttr' builtin clan-pytest-with-core> E at /build/store/nix/store/cba1x9mxnwr8b36cw41bya7g6d5v1p7d-source/select.nix:312:44: clan-pytest-with-core> E 311| else if selector.type == "str" then clan-pytest-with-core> E 312| recurse selectors (idx + 1) (builtins.getAttr selector.value obj) clan-pytest-with-core> E | ^ clan-pytest-with-core> E 313| else if selector.type == "set" then clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'seq' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:401:18: clan-pytest-with-core> E 400| options = checked options; clan-pytest-with-core> E 401| config = checked (removeAttrs config [ "_module" ]); clan-pytest-with-core> E | ^ clan-pytest-with-core> E 402| _module = checked (config._module); 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:304:9: clan-pytest-with-core> E 303| checkUnmatched = clan-pytest-with-core> E 304| if config._module.check && config._module.freeformType == null && merged.unmatchedDefns != [ ] then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 305| let clan-pytest-with-core> E clan-pytest-with-core> E … in the right operand of the AND (&&) operator clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:304:72: clan-pytest-with-core> E 303| checkUnmatched = clan-pytest-with-core> E 304| if config._module.check && config._module.freeformType == null && merged.unmatchedDefns != [ ] then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 305| let clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'unmatchedDefns' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:940:7: clan-pytest-with-core> E 939| # Transforms unmatchedDefnsByName into a list of definitions clan-pytest-with-core> E 940| unmatchedDefns = clan-pytest-with-core> E | ^ clan-pytest-with-core> E 941| if configs == [ ] then clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'concatLists' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:946:11: clan-pytest-with-core> E 945| else clan-pytest-with-core> E 946| concatLists ( clan-pytest-with-core> E | ^ clan-pytest-with-core> E 947| mapAttrsToList ( clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:948:21: clan-pytest-with-core> E 947| mapAttrsToList ( clan-pytest-with-core> E 948| name: defs: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 949| map ( clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'map' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:949:15: clan-pytest-with-core> E 948| name: defs: clan-pytest-with-core> E 949| map ( clan-pytest-with-core> E | ^ clan-pytest-with-core> E 950| def: clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:932:22: clan-pytest-with-core> E 931| # Propagate all unmatched definitions from nested option sets clan-pytest-with-core> E 932| mapAttrs (n: v: v.unmatchedDefns) resultsByName clan-pytest-with-core> E | ^ clan-pytest-with-core> E 933| # Plus the definitions for the current prefix that don't have a matching option clan-pytest-with-core> E clan-pytest-with-core> E (10 duplicate frames omitted) clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:932:25: clan-pytest-with-core> E 931| # Propagate all unmatched definitions from nested option sets clan-pytest-with-core> E 932| mapAttrs (n: v: v.unmatchedDefns) resultsByName clan-pytest-with-core> E | ^ clan-pytest-with-core> E 933| # Plus the definitions for the current prefix that don't have a matching option clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:876:15: clan-pytest-with-core> E 875| resultsByName = mapAttrs ( clan-pytest-with-core> E 876| name: decls: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 877| # We're descending into attribute ‘name’. 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:888:9: clan-pytest-with-core> E 887| in clan-pytest-with-core> E 888| if length optionDecls == length decls then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 889| let clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'length' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:888:12: clan-pytest-with-core> E 887| in clan-pytest-with-core> E 888| if length optionDecls == length decls then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 889| let clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'filter' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:882:25: clan-pytest-with-core> E 881| defns' = rawDefinitionsByName.${name} or [ ]; clan-pytest-with-core> E 882| optionDecls = filter ( clan-pytest-with-core> E | ^ clan-pytest-with-core> E 883| m: clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:883:13: clan-pytest-with-core> E 882| optionDecls = filter ( clan-pytest-with-core> E 883| m: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 884| m.options ? _type clan-pytest-with-core> E clan-pytest-with-core> E … in the left operand of the AND (&&) operator clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:885:13: clan-pytest-with-core> E 884| m.options ? _type clan-pytest-with-core> E 885| && (m.options._type == "option" || throwDeclarationTypeError loc m.options._type m._file) clan-pytest-with-core> E | ^ clan-pytest-with-core> E 886| ) decls; clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'options' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:807:15: clan-pytest-with-core> E 806| pos = unsafeGetAttrPos n subtree; clan-pytest-with-core> E 807| options = option; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 808| }) subtree clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:289:73: clan-pytest-with-core> E 288| len = length attrPath; clan-pytest-with-core> E 289| atDepth = n: if n == len then value else { ${elemAt attrPath n} = atDepth (n + 1); }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 290| in clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'atDepth' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:289:17: clan-pytest-with-core> E 288| len = length attrPath; clan-pytest-with-core> E 289| atDepth = n: if n == len then value else { ${elemAt attrPath n} = atDepth (n + 1); }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 290| in clan-pytest-with-core> E clan-pytest-with-core> E … in the right operand of the update (//) operator clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:2047:9: clan-pytest-with-core> E 2046| } clan-pytest-with-core> E 2047| // optionalAttrs (toType != null) { clan-pytest-with-core> E | ^ clan-pytest-with-core> E 2048| type = toType; clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:2047:12: clan-pytest-with-core> E 2046| } clan-pytest-with-core> E 2047| // optionalAttrs (toType != null) { clan-pytest-with-core> E | ^ clan-pytest-with-core> E 2048| type = toType; clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'optionalAttrs' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:1492:25: clan-pytest-with-core> E 1491| */ clan-pytest-with-core> E 1492| optionalAttrs = cond: as: if cond then as else { }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1493| 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:1492:29: clan-pytest-with-core> E 1491| */ clan-pytest-with-core> E 1492| optionalAttrs = cond: as: if cond then as else { }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1493| clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:2036:17: clan-pytest-with-core> E 2035| let clan-pytest-with-core> E 2036| opt = attrByPath to { } options; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 2037| in clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'attrByPath' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:89:24: clan-pytest-with-core> E 88| attrByPath = clan-pytest-with-core> E 89| attrPath: default: set: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 90| let clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:106:5: clan-pytest-with-core> E 105| in clan-pytest-with-core> E 106| attrByPath' 0 set; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 107| clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'attrByPath'' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:93:12: clan-pytest-with-core> E 92| attrByPath' = clan-pytest-with-core> E 93| n: s: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 94| ( clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:102:35: clan-pytest-with-core> E 101| in clan-pytest-with-core> E 102| if s ? ${attr} then attrByPath' (n + 1) s.${attr} else default clan-pytest-with-core> E | ^ clan-pytest-with-core> E 103| ) clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'attrByPath'' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:93:12: clan-pytest-with-core> E 92| attrByPath' = clan-pytest-with-core> E 93| n: s: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 94| ( clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:102:35: clan-pytest-with-core> E 101| in clan-pytest-with-core> E 102| if s ? ${attr} then attrByPath' (n + 1) s.${attr} else default clan-pytest-with-core> E | ^ clan-pytest-with-core> E 103| ) clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'attrByPath'' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:93:12: clan-pytest-with-core> E 92| attrByPath' = clan-pytest-with-core> E 93| n: s: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 94| ( clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:102:35: clan-pytest-with-core> E 101| in clan-pytest-with-core> E 102| if s ? ${attr} then attrByPath' (n + 1) s.${attr} else default clan-pytest-with-core> E | ^ clan-pytest-with-core> E 103| ) clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'attrByPath'' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:93:12: clan-pytest-with-core> E 92| attrByPath' = clan-pytest-with-core> E 93| n: s: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 94| ( clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:102:55: clan-pytest-with-core> E 101| in clan-pytest-with-core> E 102| if s ? ${attr} then attrByPath' (n + 1) s.${attr} else default clan-pytest-with-core> E | ^ clan-pytest-with-core> E 103| ) clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:927:37: clan-pytest-with-core> E 926| clan-pytest-with-core> E 927| matchedOptions = mapAttrs (n: v: v.matchedOptions) resultsByName; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 928| clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'matchedOptions' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:893:13: clan-pytest-with-core> E 892| { clan-pytest-with-core> E 893| matchedOptions = evalOptionValue loc opt defns'; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 894| unmatchedDefns = [ ]; clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:893:30: clan-pytest-with-core> E 892| { clan-pytest-with-core> E 893| matchedOptions = evalOptionValue loc opt defns'; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 894| unmatchedDefns = [ ]; clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'evalOptionValue' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1103:15: clan-pytest-with-core> E 1102| evalOptionValue = clan-pytest-with-core> E 1103| loc: opt: defs: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1104| let clan-pytest-with-core> E clan-pytest-with-core> E … in the left operand of the update (//) operator clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1148:5: clan-pytest-with-core> E 1147| warnDeprecation opt clan-pytest-with-core> E 1148| // { clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1149| value = addErrorContext "while evaluating the option `${showOption loc}':" value; 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1141:9: clan-pytest-with-core> E 1140| warnDeprecation = clan-pytest-with-core> E 1141| if (opt.type.deprecationMessage != null) then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1142| warn "The type `types.${opt.type.name}' of option `${showOption loc}' defined in ${showFiles opt.declarations} is deprecated. ${opt.type.deprecationMessage}" clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:890:19: clan-pytest-with-core> E 889| let clan-pytest-with-core> E 890| opt = fixupOptionType loc (mergeOptionDecls loc decls); clan-pytest-with-core> E | ^ clan-pytest-with-core> E 891| in clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'fixupOptionType' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1473:10: clan-pytest-with-core> E 1472| fixupOptionType = clan-pytest-with-core> E 1473| loc: opt: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1474| if opt.type.getSubModules or null == null then 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1474:5: clan-pytest-with-core> E 1473| loc: opt: clan-pytest-with-core> E 1474| if opt.type.getSubModules or null == null then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1475| opt // { type = opt.type or types.unspecified; } clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'type.getSubModules' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/nixos/modules/services/hardware/bluetooth.nix:72:9: clan-pytest-with-core> E 71| settings = mkOption { clan-pytest-with-core> E 72| type = cfgFmt.type; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 73| default = { }; clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/nixos/modules/services/hardware/bluetooth.nix:26:12: clan-pytest-with-core> E 25| clan-pytest-with-core> E 26| cfgFmt = pkgs.formats.ini { }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 27| clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:727:15: clan-pytest-with-core> E 726| extraArgs = mapAttrs ( clan-pytest-with-core> E 727| name: _: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 728| addErrorContext (context name) ( clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the module argument `pkgs' in "/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/nixos/modules/services/hardware/bluetooth.nix": clan-pytest-with-core> E clan-pytest-with-core> E … noting that argument `pkgs` is not externally provided, so querying `_module.args` instead, requiring `config` clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:731:13: clan-pytest-with-core> E 730| "noting that argument `${name}` is not externally provided, so querying `_module.args` instead, requiring `config`" clan-pytest-with-core> E 731| config._module.args.${name} clan-pytest-with-core> E | ^ clan-pytest-with-core> E 732| ) clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/types.nix:1029:18: clan-pytest-with-core> E 1028| value = mapAttrs ( clan-pytest-with-core> E 1029| n: v: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1030| if lazy then clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'optionalValue.value' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1312:5: clan-pytest-with-core> E 1311| clan-pytest-with-core> E 1312| optionalValue = if isDefined then { value = mergedValue; } else { }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1313| }; 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1312:21: clan-pytest-with-core> E 1311| clan-pytest-with-core> E 1312| optionalValue = if isDefined then { value = mergedValue; } else { }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1313| }; clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'values' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1240:11: clan-pytest-with-core> E 1239| { clan-pytest-with-core> E 1240| values = defsSorted; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1241| inherit (defsFiltered) highestPrio; 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1211:11: clan-pytest-with-core> E 1210| # Avoid sorting if we don't have to. clan-pytest-with-core> E 1211| if any (def: def.value._type or "" == "order") defsFiltered.values then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1212| sortProperties defsFiltered.values clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'any' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1211:14: clan-pytest-with-core> E 1210| # Avoid sorting if we don't have to. clan-pytest-with-core> E 1211| if any (def: def.value._type or "" == "order") defsFiltered.values then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1212| sortProperties defsFiltered.values clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1211:19: clan-pytest-with-core> E 1210| # Avoid sorting if we don't have to. clan-pytest-with-core> E 1211| if any (def: def.value._type or "" == "order") defsFiltered.values then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1212| sortProperties defsFiltered.values clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'value._type' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1422:67: clan-pytest-with-core> E 1421| strip = clan-pytest-with-core> E 1422| def: if def.value._type or "" == "override" then def // { value = def.value.content; } else def; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1423| in clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'value.content' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1566:22: clan-pytest-with-core> E 1565| _type = "override"; clan-pytest-with-core> E 1566| inherit priority content; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1567| }; 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/nixos/modules/misc/nixpkgs.nix:107:15: clan-pytest-with-core> E 106| clan-pytest-with-core> E 107| finalPkgs = if opt.pkgs.isDefined then cfg.pkgs.appendOverlays cfg.overlays else defaultPkgs; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 108| clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'pkgs.isDefined' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1154:21: clan-pytest-with-core> E 1153| definitionsWithLocations = res.defsFinal; clan-pytest-with-core> E 1154| inherit (res) isDefined; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1155| inherit (res.checkedAndMerged) valueMeta; clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'isDefined' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1310:5: clan-pytest-with-core> E 1309| clan-pytest-with-core> E 1310| isDefined = defsFinal != [ ]; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1311| clan-pytest-with-core> E clan-pytest-with-core> E (6 duplicate frames omitted) clan-pytest-with-core> E clan-pytest-with-core> E error: attribute 'system' missing clan-pytest-with-core> E at /build/store/nix/store/y3h139bhv4373m1hab367ma4p5i95i2f-source/modules/clan/module.nix:164:24: clan-pytest-with-core> E 163| (lib.modules.importApply ../../nixosModules/machineModules/overridePkgs.nix { clan-pytest-with-core> E 164| pkgs = nixpkgsMatrix.${config.inventory.machines.${name}.nixpkgs}.system.${system}.pkgs; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 165| }) clan-pytest-with-core> E Did you mean systems? 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 0x7fffe6546650> clan-pytest-with-core> flake_with_sops = 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_binary_secret_roundtrip( clan-pytest-with-core> monkeypatch: pytest.MonkeyPatch, clan-pytest-with-core> flake_with_sops: ClanFlake, clan-pytest-with-core> ) -> None: clan-pytest-with-core> """Binary secrets must survive set/get without corruption. clan-pytest-with-core> clan-pytest-with-core> Regression test: non-UTF-8 bytes were destroyed by lossy UTF-8 decoding clan-pytest-with-core> in the subprocess I/O layer, causing sops-encrypted binary secrets clan-pytest-with-core> (e.g. LUKS keyfiles) to be silently corrupted on retrieval. clan-pytest-with-core> """ clan-pytest-with-core> flake = flake_with_sops clan-pytest-with-core> clan-pytest-with-core> config = flake.machines["my_machine"] = create_test_machine_config() clan-pytest-with-core> my_generator = config["clan"]["core"]["vars"]["generators"]["my_generator"] clan-pytest-with-core> my_generator["files"]["my_secret"]["secret"] = True clan-pytest-with-core> clan-pytest-with-core> flake.refresh() clan-pytest-with-core> monkeypatch.chdir(flake.path) clan-pytest-with-core> clan-pytest-with-core> # Binary data containing every possible byte value (0x00-0xFF), clan-pytest-with-core> # which includes bytes that are invalid UTF-8 clan-pytest-with-core> binary_data = bytes(range(256)) * 64 # 16 KiB clan-pytest-with-core> clan-pytest-with-core> flake_obj = Flake(str(flake.path)) clan-pytest-with-core> > set_var("my_machine", "my_generator/my_secret", binary_data, flake_obj) clan-pytest-with-core> clan-pytest-with-core> /build/src/clan_cli/tests/test_vars_generate.py:1125: clan-pytest-with-core> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ clan-pytest-with-core> /build/src/clan_lib/vars/set.py:43: in set_var clan-pytest-with-core> _var = get_machine_var(_machine, var) if isinstance(var, str) else var clan-pytest-with-core> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ clan-pytest-with-core> /build/src/clan_lib/vars/get.py:18: in get_machine_var clan-pytest-with-core> vars_ = get_machine_vars(machine) clan-pytest-with-core> ^^^^^^^^^^^^^^^^^^^^^^^^^ clan-pytest-with-core> /build/src/clan_lib/vars/list.py:25: in get_machine_vars clan-pytest-with-core> generators = get_machine_generators([machine.name], machine.flake) clan-pytest-with-core> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ clan-pytest-with-core> /build/src/clan_lib/vars/generator.py:243: in get_machine_generators clan-pytest-with-core> flake.precache(get_machine_selectors(machine_names)) clan-pytest-with-core> /build/src/clan_lib/flake/flake.py:1151: in precache clan-pytest-with-core> self.get_from_nix(not_fetched_selectors) clan-pytest-with-core> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ clan-pytest-with-core> clan-pytest-with-core> self = Flake(identifier='/build/pytest-n67tre5c/flake', hash='sha256-bIq7UUqv4TGF69NUJn1CP5GFrjAfMOyxP+6mIzjgMuQ=', 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.?secrets.?age.?plugins', 'clanInternals.inventoryClass.relativeDirectory', 'clanInternals.machines.x86...s.?defaultGroups', 'clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.settings.publicModule', ...] 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 while executing:$ clan select 'clanInternals.?secrets.?age.?plugins' clan-pytest-with-core> E $ clan select 'clanInternals.inventoryClass.relativeDirectory' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.generators.*.{share,dependencies,prompts,validationHash}' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.generators.*.files.*.{secret,deploy,owner,group,mode,neededFor}' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.?sops.?defaultGroups' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.settings.publicModule' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.settings.secretModule' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.?sops.?secretUploadDirectory' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.?password-store.?passCommand' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.?password-store.?secretLocation' clan-pytest-with-core> E $ clan select 'clanInternals.vars.settings.?recipients' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.?age.?secretLocation' clan-pytest-with-core> E Reason: attribute 'system' missing clan-pytest-with-core> E at /build/store/nix/store/y3h139bhv4373m1hab367ma4p5i95i2f-source/modules/clan/module.nix:164:24: clan-pytest-with-core> E 163| (lib.modules.importApply ../../nixosModules/machineModules/overridePkgs.nix { clan-pytest-with-core> E 164| pkgs = nixpkgsMatrix.${config.inventory.machines.${name}.nixpkgs}.system.${system}.pkgs; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 165| }) clan-pytest-with-core> E Did you mean systems?. 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 setup ----------------------------- clan-pytest-with-core> !! $HOME does not point to a temp directory!! HOME=/build/pytest-n67tre5c clan-pytest-with-core> [localhost] $ clan vars keygen --flake /build/pytest-n67tre5c/flake --user admin --no-interactive clan-pytest-with-core> Caller: /build/src/clan_cli/tests/age_keys.py:31::init clan-pytest-with-core> clan-pytest-with-core> Prefetching flake /build/pytest-n67tre5c/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/febbcab65441be6ccc547560fd0155faadebbbb7 clan-pytest-with-core> (cached) $ clan select clanInternals.inventoryClass.relativeDirectory 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> git \ clan-pytest-with-core> -C /build/pytest-n67tre5c/flake \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-n67tre5c/flake/sops/users/admin 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/admin to git clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-n67tre5c/flake \ clan-pytest-with-core> diff \ clan-pytest-with-core> --cached --exit-code \ clan-pytest-with-core> -- /build/pytest-n67tre5c/flake/sops/users/admin 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-n67tre5c/flake \ clan-pytest-with-core> commit \ clan-pytest-with-core> -m 'secrets: add user admin' \ clan-pytest-with-core> --no-verify /build/pytest-n67tre5c/flake/sops/users/admin 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/admin to git 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/pytest-n67tre5c clan-pytest-with-core> DEBUG clan_cli.tests.helpers.cli:__init__.py:143 $ clan vars keygen --flake /build/pytest-n67tre5c/flake --user admin --no-interactive clan-pytest-with-core> Caller: /build/src/clan_cli/tests/age_keys.py:31::init clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:927 Prefetching flake /build/pytest-n67tre5c/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/febbcab65441be6ccc547560fd0155faadebbbb7 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.cmd:__init__.py:143 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> DEBUG clan_lib.cmd:__init__.py:143 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> DEBUG clan_cli.secrets.sops:sops.py:99 Found age public key from a private key in the environment (SOPS_AGE_KEY): age1dhwqzkah943xzc34tc3dlmfayyevcmdmxzjezdgdy33euxwf59vsp3vk3c clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:143 git \ clan-pytest-with-core> -C /build/pytest-n67tre5c/flake \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-n67tre5c/flake/sops/users/admin 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> DEBUG clan_lib.cmd:__init__.py:143 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> DEBUG clan_lib.git:__init__.py:98 Adding sops/users/admin to git clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:143 git \ clan-pytest-with-core> -C /build/pytest-n67tre5c/flake \ clan-pytest-with-core> diff \ clan-pytest-with-core> --cached --exit-code \ clan-pytest-with-core> -- /build/pytest-n67tre5c/flake/sops/users/admin 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> DEBUG clan_lib.cmd:__init__.py:143 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> DEBUG clan_lib.cmd:__init__.py:143 git \ clan-pytest-with-core> -C /build/pytest-n67tre5c/flake \ clan-pytest-with-core> commit \ clan-pytest-with-core> -m 'secrets: add user admin' \ clan-pytest-with-core> --no-verify /build/pytest-n67tre5c/flake/sops/users/admin 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> DEBUG clan_lib.cmd:__init__.py:143 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> INFO clan_lib.git:__init__.py:141 Committed sops/users/admin to git clan-pytest-with-core> ----------------------------- Captured stdout call ----------------------------- clan-pytest-with-core> [main cca5197] flake: update by flake generator clan-pytest-with-core> 2 files changed, 33 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> ----------------------------- Captured stderr call ----------------------------- clan-pytest-with-core> Prefetching flake /build/pytest-n67tre5c/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/d2c0050d97832c3ac5193485b93705d00938c15e clan-pytest-with-core> (cached) $ clan select clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> getting var: my_generator/my_secret from machine: my_machine clan-pytest-with-core> Prefetching flake /build/pytest-n67tre5c/flake clan-pytest-with-core> warning: you don't have Internet access; disabling some network-dependent features clan-pytest-with-core> Precaching selectors: clan-pytest-with-core> - (not cached) clanInternals.?secrets.?age.?plugins clan-pytest-with-core> - (not cached) clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.generators.*.{share,dependencies,prompts,validationHash} clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.generators.*.files.*.{secret,deploy,owner,group,mode,neededFor} clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.?sops.?defaultGroups clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.settings.publicModule clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.settings.secretModule clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.?sops.?secretUploadDirectory clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.?password-store.?passCommand clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.?password-store.?secretLocation clan-pytest-with-core> - (not cached) clanInternals.vars.settings.?recipients clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.?age.?secretLocation clan-pytest-with-core> ------------------------------ Captured log call ------------------------------- clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:927 Prefetching flake /build/pytest-n67tre5c/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/d2c0050d97832c3ac5193485b93705d00938c15e 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.vars.get:get.py:17 getting var: my_generator/my_secret from machine: my_machine clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:927 Prefetching flake /build/pytest-n67tre5c/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:1144 Precaching selectors: clan-pytest-with-core> - (not cached) clanInternals.?secrets.?age.?plugins clan-pytest-with-core> - (not cached) clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.generators.*.{share,dependencies,prompts,validationHash} clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.generators.*.files.*.{secret,deploy,owner,group,mode,neededFor} clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.?sops.?defaultGroups clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.settings.publicModule clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.settings.secretModule clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.?sops.?secretUploadDirectory clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.?password-store.?passCommand clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.?password-store.?secretLocation clan-pytest-with-core> - (not cached) clanInternals.vars.settings.?recipients clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.?age.?secretLocation clan-pytest-with-core> _________________________ test_flake_level_generators __________________________ clan-pytest-with-core> [gw5] linux -- Python 3.14.7 /nix/store/3n4qphl9s728sz8frmpqqrv9b1m87g68-python3-3.14.7/bin/python clan-pytest-with-core> clan-pytest-with-core> self = Flake(identifier='/build/pytest-l8d8a79q/flake', hash='sha256-OAJ/fzIxwQ7OCBbMsB/yNlqOp2YXSdYPnOke5MJleqU=', 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.systems.x86_64-linux.exports.*.generators.*.files.*.{secret,deploy,owner,group,mode,neededFor}'] 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-l8d8a79q/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/h20y99qbq45zimp910h0z8cswkbgbwvn-source?narHash=sha256-OAJ/fzIxwQ7OCBbMsB/yNlqOp2YXSdYPnOke5MJleqU="; 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": "systems"}, {"type": "str", "value": "x86_64-linux"}, {"type": "str", "value": "exports"}, {"type": "all"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "str", "value": "files"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "secret"}, {"type": "str", "value": "deploy"}, {"type": "str", "value": "owner"}, {"type": "str", "value": "group"}, {"type": "str", "value": "mode"}, {"type": "str", "value": "neededFor"}]}]'"'"''"'"') 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": "systems"}, {"type": "str", "value": "x86_64-linux"}, {"type": "str", "value": "exports"}, {"type": "all"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "str", "value": "files"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "secret"}, {"type": "str", "value": "deploy"}, {"type": "str", "value": "owner"}, {"type": "str", "value": "group"}, {"type": "str", "value": "mode"}, {"type": "str", "value": "neededFor"}]}]'') 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": "systems"}, {"type": "str", "value": "x86_64-linux"}, {"type": "str", "value": "exports"}, {"type": "all"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "str", "value": "files"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "secret"}, {"type": "str", "value": "deploy"}, {"type": "str", "value": "owner"}, {"type": "str", "value": "group"}, {"type": "str", "value": "mode"}, {"type": "str", "value": "neededFor"}]}]'') 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 evaluating attribute 'A' clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating attribute 'one' clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating attribute 'foo' clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating attribute 'group' clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/cba1x9mxnwr8b36cw41bya7g6d5v1p7d-source/select.nix:325:37: clan-pytest-with-core> E 324| in clan-pytest-with-core> E 325| builtins.mapAttrs (_: v: recurse selectors (idx + 1) v) filteredAttrs clan-pytest-with-core> E | ^ clan-pytest-with-core> E 326| else if selector.type == "maybe" then 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:325:40: clan-pytest-with-core> E 324| in clan-pytest-with-core> E 325| builtins.mapAttrs (_: v: recurse selectors (idx + 1) v) filteredAttrs clan-pytest-with-core> E | ^ clan-pytest-with-core> E 326| else if selector.type == "maybe" then 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 calling the 'getAttr' builtin clan-pytest-with-core> E at /build/store/nix/store/cba1x9mxnwr8b36cw41bya7g6d5v1p7d-source/select.nix:321:29: clan-pytest-with-core> E 320| name = x.value; clan-pytest-with-core> E 321| value = builtins.getAttr x.value obj; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 322| }) attrsAvailable clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:1195:17: clan-pytest-with-core> E 1194| mapAttrs ( clan-pytest-with-core> E 1195| name: value: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1196| if isAttrs value && cond value then recurse (path ++ [ name ]) value else f (path ++ [ name ]) value clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:1196:85: clan-pytest-with-core> E 1195| name: value: clan-pytest-with-core> E 1196| if isAttrs value && cond value then recurse (path ++ [ name ]) value else f (path ++ [ name ]) value clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1197| ); clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:282:71: clan-pytest-with-core> E 281| # For definitions that have an associated option clan-pytest-with-core> E 282| declaredConfig = mapAttrsRecursiveCond (v: !isOption v) (_: v: v.value) options; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 283| clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'value' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1149:7: clan-pytest-with-core> E 1148| // { clan-pytest-with-core> E 1149| value = addErrorContext "while evaluating the option `${showOption loc}':" value; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1150| inherit (res.defsFinal') highestPrio; clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the option `clanInternals.systems.x86_64-linux.exports.A.generators.one.files.foo.group': clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'mergedValue' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1246:5: clan-pytest-with-core> E 1245| # Type-check the remaining definitions, and merge them. Or throw if no definitions. clan-pytest-with-core> E 1246| mergedValue = clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1247| if isDefined then 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1247:7: clan-pytest-with-core> E 1246| mergedValue = clan-pytest-with-core> E 1247| if isDefined then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1248| if type.merge ? v2 then clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'values' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1240:11: clan-pytest-with-core> E 1239| { clan-pytest-with-core> E 1240| values = defsSorted; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1241| inherit (defsFiltered) highestPrio; 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1211:11: clan-pytest-with-core> E 1210| # Avoid sorting if we don't have to. clan-pytest-with-core> E 1211| if any (def: def.value._type or "" == "order") defsFiltered.values then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1212| sortProperties defsFiltered.values clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'any' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1211:14: clan-pytest-with-core> E 1210| # Avoid sorting if we don't have to. clan-pytest-with-core> E 1211| if any (def: def.value._type or "" == "order") defsFiltered.values then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1212| sortProperties defsFiltered.values clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1211:19: clan-pytest-with-core> E 1210| # Avoid sorting if we don't have to. clan-pytest-with-core> E 1211| if any (def: def.value._type or "" == "order") defsFiltered.values then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1212| sortProperties defsFiltered.values clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'value._type' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1422:67: clan-pytest-with-core> E 1421| strip = clan-pytest-with-core> E 1422| def: if def.value._type or "" == "override" then def // { value = def.value.content; } else def; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1423| in clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'value.content' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1566:22: clan-pytest-with-core> E 1565| _type = "override"; clan-pytest-with-core> E 1566| inherit priority content; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1567| }; clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'default' clan-pytest-with-core> E at /build/store/nix/store/y3h139bhv4373m1hab367ma4p5i95i2f-source/modules/clan/export-modules/generic-generator.nix:167:19: clan-pytest-with-core> E 166| ''; clan-pytest-with-core> E 167| default = if config.pkgs.stdenv.hostPlatform.isDarwin then "wheel" else "root"; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 168| defaultText = lib.literalExpression ''if pkgs.stdenv.hostPlatform.isDarwin then "wheel" else "root"''; 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/y3h139bhv4373m1hab367ma4p5i95i2f-source/modules/clan/export-modules/generic-generator.nix:167:29: clan-pytest-with-core> E 166| ''; clan-pytest-with-core> E 167| default = if config.pkgs.stdenv.hostPlatform.isDarwin then "wheel" else "root"; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 168| defaultText = lib.literalExpression ''if pkgs.stdenv.hostPlatform.isDarwin then "wheel" else "root"''; clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/y3h139bhv4373m1hab367ma4p5i95i2f-source/modules/clan/export-modules/generic-generator.nix:167:32: clan-pytest-with-core> E 166| ''; clan-pytest-with-core> E 167| default = if config.pkgs.stdenv.hostPlatform.isDarwin then "wheel" else "root"; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 168| defaultText = lib.literalExpression ''if pkgs.stdenv.hostPlatform.isDarwin then "wheel" else "root"''; clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:1195:17: clan-pytest-with-core> E 1194| mapAttrs ( clan-pytest-with-core> E 1195| name: value: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1196| if isAttrs value && cond value then recurse (path ++ [ name ]) value else f (path ++ [ name ]) value clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:1196:85: clan-pytest-with-core> E 1195| name: value: clan-pytest-with-core> E 1196| if isAttrs value && cond value then recurse (path ++ [ name ]) value else f (path ++ [ name ]) value clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1197| ); clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:282:71: clan-pytest-with-core> E 281| # For definitions that have an associated option clan-pytest-with-core> E 282| declaredConfig = mapAttrsRecursiveCond (v: !isOption v) (_: v: v.value) options; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 283| clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'value' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1149:7: clan-pytest-with-core> E 1148| // { clan-pytest-with-core> E 1149| value = addErrorContext "while evaluating the option `${showOption loc}':" value; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1150| inherit (res.defsFinal') highestPrio; clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the option `clanInternals.systems.x86_64-linux.exports.A.generators.one.pkgs': clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'mergedValue' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1246:5: clan-pytest-with-core> E 1245| # Type-check the remaining definitions, and merge them. Or throw if no definitions. clan-pytest-with-core> E 1246| mergedValue = clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1247| if isDefined then 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1247:7: clan-pytest-with-core> E 1246| mergedValue = clan-pytest-with-core> E 1247| if isDefined then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1248| if type.merge ? v2 then 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1223:7: clan-pytest-with-core> E 1222| # above are lazy and thus never forced on this branch. clan-pytest-with-core> E 1223| if clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1224| length defs == 1 clan-pytest-with-core> E clan-pytest-with-core> E … in the right operand of the AND (&&) operator clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1225:9: clan-pytest-with-core> E 1224| length defs == 1 clan-pytest-with-core> E 1225| && ( clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1226| let clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating definitions from `/nix/store/y3h139bhv4373m1hab367ma4p5i95i2f-source/modules/clan/module.nix': clan-pytest-with-core> E clan-pytest-with-core> E … in the argument of the not operator clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1230:31: clan-pytest-with-core> E 1229| addErrorContext "while evaluating definitions from `${d.file}':" ( clan-pytest-with-core> E 1230| !(isAttrs d.value && d.value ? _type) clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1231| ) clan-pytest-with-core> E clan-pytest-with-core> E … in the left operand of the AND (&&) operator clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1230:31: clan-pytest-with-core> E 1229| addErrorContext "while evaluating definitions from `${d.file}':" ( clan-pytest-with-core> E 1230| !(isAttrs d.value && d.value ? _type) clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1231| ) clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'isAttrs' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1230:15: clan-pytest-with-core> E 1229| addErrorContext "while evaluating definitions from `${d.file}':" ( clan-pytest-with-core> E 1230| !(isAttrs d.value && d.value ? _type) clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1231| ) clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'value' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:851:21: clan-pytest-with-core> E 850| inherit (module) file; clan-pytest-with-core> E 851| inherit value; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 852| }) module.config clan-pytest-with-core> E clan-pytest-with-core> E error: attribute 'x86_64-linux' missing clan-pytest-with-core> E at /build/store/nix/store/y3h139bhv4373m1hab367ma4p5i95i2f-source/modules/clan/module.nix:76:14: clan-pytest-with-core> E 75| # inherit system; clan-pytest-with-core> E 76| pkgs = nixpkgsMatrix.default.${system}; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 77| }; 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 0x7fffe63eab70> clan-pytest-with-core> flake_with_sops = 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_flake_level_generators( clan-pytest-with-core> monkeypatch: pytest.MonkeyPatch, flake_with_sops: ClanFlake clan-pytest-with-core> ) -> None: clan-pytest-with-core> """Execute vars generators that are not bound to any machine""" clan-pytest-with-core> flake = flake_with_sops clan-pytest-with-core> flake.clan_nix_raw = textwrap.dedent(r""" clan-pytest-with-core> { self, ... }: clan-pytest-with-core> let clan-pytest-with-core> clan-core = self.inputs.clan-core; clan-pytest-with-core> in clan-pytest-with-core> { clan-pytest-with-core> machines.jon = {}; clan-pytest-with-core> machines.sara = {}; clan-pytest-with-core> exports."A" = { clan-pytest-with-core> imports = [ (clan-core + "/modules/clan/export-modules/generators.nix") ]; clan-pytest-with-core> generators.one = { clan-pytest-with-core> files.foo = { }; clan-pytest-with-core> script = '' clan-pytest-with-core> echo hello > $out/foo clan-pytest-with-core> ''; clan-pytest-with-core> }; clan-pytest-with-core> }; clan-pytest-with-core> exports."B" = { clan-pytest-with-core> imports = [ (clan-core + "/modules/clan/export-modules/generators.nix") ]; clan-pytest-with-core> generators.one = { clan-pytest-with-core> dependencies.A = { exportKey = "A"; generator = "one"; }; clan-pytest-with-core> files.foo = { secret = false; }; clan-pytest-with-core> script = '' clan-pytest-with-core> cat $in/A/foo > $out/foo clan-pytest-with-core> echo "world!" >> $out/foo clan-pytest-with-core> ''; clan-pytest-with-core> }; clan-pytest-with-core> generators.two = { clan-pytest-with-core> dependencies.one = { exportKey = "B"; generator = "one"; }; clan-pytest-with-core> files.foo = { deploy = [ "jon" ]; }; clan-pytest-with-core> script = '' clan-pytest-with-core> cat $in/one/foo > $out/foo clan-pytest-with-core> echo "world!" >> $out/foo clan-pytest-with-core> ''; clan-pytest-with-core> }; clan-pytest-with-core> }; clan-pytest-with-core> } clan-pytest-with-core> """) clan-pytest-with-core> flake.refresh() clan-pytest-with-core> clan-pytest-with-core> monkeypatch.chdir(flake.path) clan-pytest-with-core> clan-pytest-with-core> flake_obj = Flake(str(flake.path)) clan-pytest-with-core> > run_flake_generators(flake_obj, True) clan-pytest-with-core> clan-pytest-with-core> /build/src/clan_cli/tests/test_vars_generate.py:1022: clan-pytest-with-core> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ clan-pytest-with-core> /build/src/clan_lib/vars/generate.py:449: in run_flake_generators clan-pytest-with-core> generators = get_flake_generators(flake) clan-pytest-with-core> ^^^^^^^^^^^^^^^^^^^^^^^^^^^ clan-pytest-with-core> /build/src/clan_lib/vars/generate.py:387: in get_flake_generators clan-pytest-with-core> raw_files = flake.select( 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-l8d8a79q/flake', hash='sha256-OAJ/fzIxwQ7OCBbMsB/yNlqOp2YXSdYPnOke5MJleqU=', 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.systems.x86_64-linux.exports.*.generators.*.files.*.{secret,deploy,owner,group,mode,neededFor}'] 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.systems.x86_64-linux.exports.*.generators.*.files.*.{secret,deploy,owner,group,mode,neededFor}' clan-pytest-with-core> E Reason: attribute 'x86_64-linux' missing clan-pytest-with-core> E at /build/store/nix/store/y3h139bhv4373m1hab367ma4p5i95i2f-source/modules/clan/module.nix:76:14: clan-pytest-with-core> E 75| # inherit system; clan-pytest-with-core> E 76| pkgs = nixpkgsMatrix.default.${system}; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 77| };. 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 setup ----------------------------- clan-pytest-with-core> !! $HOME does not point to a temp directory!! HOME=/build/pytest-l8d8a79q clan-pytest-with-core> [localhost] $ clan vars keygen --flake /build/pytest-l8d8a79q/flake --user admin --no-interactive clan-pytest-with-core> Caller: /build/src/clan_cli/tests/age_keys.py:31::init clan-pytest-with-core> clan-pytest-with-core> Prefetching flake /build/pytest-l8d8a79q/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/febbcab65441be6ccc547560fd0155faadebbbb7 clan-pytest-with-core> (cached) $ clan select clanInternals.inventoryClass.relativeDirectory 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> git \ clan-pytest-with-core> -C /build/pytest-l8d8a79q/flake \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-l8d8a79q/flake/sops/users/admin 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/admin to git clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-l8d8a79q/flake \ clan-pytest-with-core> diff \ clan-pytest-with-core> --cached --exit-code \ clan-pytest-with-core> -- /build/pytest-l8d8a79q/flake/sops/users/admin 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-l8d8a79q/flake \ clan-pytest-with-core> commit \ clan-pytest-with-core> -m 'secrets: add user admin' \ clan-pytest-with-core> --no-verify /build/pytest-l8d8a79q/flake/sops/users/admin 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/admin to git 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/pytest-l8d8a79q clan-pytest-with-core> DEBUG clan_cli.tests.helpers.cli:__init__.py:143 $ clan vars keygen --flake /build/pytest-l8d8a79q/flake --user admin --no-interactive clan-pytest-with-core> Caller: /build/src/clan_cli/tests/age_keys.py:31::init clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:927 Prefetching flake /build/pytest-l8d8a79q/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/febbcab65441be6ccc547560fd0155faadebbbb7 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.cmd:__init__.py:143 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> DEBUG clan_lib.cmd:__init__.py:143 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> DEBUG clan_cli.secrets.sops:sops.py:99 Found age public key from a private key in the environment (SOPS_AGE_KEY): age1dhwqzkah943xzc34tc3dlmfayyevcmdmxzjezdgdy33euxwf59vsp3vk3c clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:143 git \ clan-pytest-with-core> -C /build/pytest-l8d8a79q/flake \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-l8d8a79q/flake/sops/users/admin 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> DEBUG clan_lib.cmd:__init__.py:143 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> DEBUG clan_lib.git:__init__.py:98 Adding sops/users/admin to git clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:143 git \ clan-pytest-with-core> -C /build/pytest-l8d8a79q/flake \ clan-pytest-with-core> diff \ clan-pytest-with-core> --cached --exit-code \ clan-pytest-with-core> -- /build/pytest-l8d8a79q/flake/sops/users/admin 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> DEBUG clan_lib.cmd:__init__.py:143 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> DEBUG clan_lib.cmd:__init__.py:143 git \ clan-pytest-with-core> -C /build/pytest-l8d8a79q/flake \ clan-pytest-with-core> commit \ clan-pytest-with-core> -m 'secrets: add user admin' \ clan-pytest-with-core> --no-verify /build/pytest-l8d8a79q/flake/sops/users/admin 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> DEBUG clan_lib.cmd:__init__.py:143 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> INFO clan_lib.git:__init__.py:141 Committed sops/users/admin to git clan-pytest-with-core> ----------------------------- Captured stdout call ----------------------------- clan-pytest-with-core> [main cf9f761] flake: update by flake generator clan-pytest-with-core> 1 file changed, 37 insertions(+) clan-pytest-with-core> create mode 100644 clan.nix clan-pytest-with-core> ----------------------------- Captured stderr call ----------------------------- clan-pytest-with-core> Prefetching flake /build/pytest-l8d8a79q/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.systems.x86_64-linux.exports.*.generators.*.{share,dependencies,prompts,validationHash} clan-pytest-with-core> Cache miss for clanInternals.systems.x86_64-linux.exports.*.generators.*.files.*.{secret,deploy,owner,group,mode,neededFor} clan-pytest-with-core> ------------------------------ Captured log call ------------------------------- clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:927 Prefetching flake /build/pytest-l8d8a79q/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.systems.x86_64-linux.exports.*.generators.*.{share,dependencies,prompts,validationHash} clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1174 Cache miss for clanInternals.systems.x86_64-linux.exports.*.generators.*.files.*.{secret,deploy,owner,group,mode,neededFor} clan-pytest-with-core> _______________________ test_generate_shared_secret_sops _______________________ clan-pytest-with-core> [gw13] linux -- Python 3.14.7 /nix/store/3n4qphl9s728sz8frmpqqrv9b1m87g68-python3-3.14.7/bin/python clan-pytest-with-core> clan-pytest-with-core> self = Flake(identifier='/build/pytest-8ji283i5/flake', hash='sha256-WTHjkJHZKMohO+2i2QTgWmOuvm4uKnW9mEcxahWbyjg=', 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.?secrets.?age.?plugins', 'clanInternals.machines.x86_64-linux.{machine1,machine2,machine3}.config.clan...', 'clanInternals.machines.x86_64-linux.{machine1,machine2,machine3}.config.clan.core.vars.settings.secretModule', ...] 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-8ji283i5/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/0srawq7p87m757gnbpaaysxi6wcd0mri-source?narHash=sha256-WTHjkJHZKMohO+2i2QTgWmOuvm4uKnW9mEcxahWbyjg="; 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": "maybe", "value": "secrets"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "plugins"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}, {"type": "str", "value": "machine3"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "share"}, {"type": "str", "value": "dependencies"}, {"type": "str", "value": "prompts"}, {"type": "str", "value": "validationHash"}]}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}, {"type": "str", "value": "machine3"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "str", "value": "files"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "secret"}, {"type": "str", "value": "deploy"}, {"type": "str", "value": "owner"}, {"type": "str", "value": "group"}, {"type": "str", "value": "mode"}, {"type": "str", "value": "neededFor"}]}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}, {"type": "str", "value": "machine3"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "defaultGroups"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}, {"type": "str", "value": "machine3"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "publicModule"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}, {"type": "str", "value": "machine3"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "secretModule"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}, {"type": "str", "value": "machine3"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "secretUploadDirectory"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}, {"type": "str", "value": "machine3"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "passCommand"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}, {"type": "str", "value": "machine3"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "secretLocation"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "maybe", "value": "recipients"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}, {"type": "str", "value": "machine3"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "secretLocation"}]'"'"''"'"') 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": "maybe", "value": "secrets"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "plugins"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}, {"type": "str", "value": "machine3"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "share"}, {"type": "str", "value": "dependencies"}, {"type": "str", "value": "prompts"}, {"type": "str", "value": "validationHash"}]}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}, {"type": "str", "value": "machine3"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "str", "value": "files"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "secret"}, {"type": "str", "value": "deploy"}, {"type": "str", "value": "owner"}, {"type": "str", "value": "group"}, {"type": "str", "value": "mode"}, {"type": "str", "value": "neededFor"}]}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}, {"type": "str", "value": "machine3"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "defaultGroups"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}, {"type": "str", "value": "machine3"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "publicModule"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}, {"type": "str", "value": "machine3"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "secretModule"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}, {"type": "str", "value": "machine3"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "secretUploadDirectory"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}, {"type": "str", "value": "machine3"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "passCommand"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}, {"type": "str", "value": "machine3"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "secretLocation"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "maybe", "value": "recipients"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}, {"type": "str", "value": "machine3"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "secretLocation"}]'') 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": "maybe", "value": "secrets"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "plugins"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}, {"type": "str", "value": "machine3"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "share"}, {"type": "str", "value": "dependencies"}, {"type": "str", "value": "prompts"}, {"type": "str", "value": "validationHash"}]}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}, {"type": "str", "value": "machine3"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "str", "value": "files"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "secret"}, {"type": "str", "value": "deploy"}, {"type": "str", "value": "owner"}, {"type": "str", "value": "group"}, {"type": "str", "value": "mode"}, {"type": "str", "value": "neededFor"}]}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}, {"type": "str", "value": "machine3"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "defaultGroups"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}, {"type": "str", "value": "machine3"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "publicModule"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}, {"type": "str", "value": "machine3"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "secretModule"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}, {"type": "str", "value": "machine3"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "secretUploadDirectory"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}, {"type": "str", "value": "machine3"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "passCommand"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}, {"type": "str", "value": "machine3"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "secretLocation"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "maybe", "value": "recipients"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}, {"type": "str", "value": "machine3"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "secretLocation"}]'') flake) clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating list element at index 1 clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating attribute 'machine1' clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/cba1x9mxnwr8b36cw41bya7g6d5v1p7d-source/select.nix:325:37: clan-pytest-with-core> E 324| in clan-pytest-with-core> E 325| builtins.mapAttrs (_: v: recurse selectors (idx + 1) v) filteredAttrs clan-pytest-with-core> E | ^ clan-pytest-with-core> E 326| else if selector.type == "maybe" then 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:325:40: clan-pytest-with-core> E 324| in clan-pytest-with-core> E 325| builtins.mapAttrs (_: v: recurse selectors (idx + 1) v) filteredAttrs clan-pytest-with-core> E | ^ clan-pytest-with-core> E 326| else if selector.type == "maybe" then 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 … from call site clan-pytest-with-core> E at /build/store/nix/store/cba1x9mxnwr8b36cw41bya7g6d5v1p7d-source/select.nix:312:15: clan-pytest-with-core> E 311| else if selector.type == "str" then clan-pytest-with-core> E 312| recurse selectors (idx + 1) (builtins.getAttr selector.value obj) clan-pytest-with-core> E | ^ clan-pytest-with-core> E 313| else if selector.type == "set" then 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 'getAttr' builtin clan-pytest-with-core> E at /build/store/nix/store/cba1x9mxnwr8b36cw41bya7g6d5v1p7d-source/select.nix:312:44: clan-pytest-with-core> E 311| else if selector.type == "str" then clan-pytest-with-core> E 312| recurse selectors (idx + 1) (builtins.getAttr selector.value obj) clan-pytest-with-core> E | ^ clan-pytest-with-core> E 313| else if selector.type == "set" then clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'seq' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:401:18: clan-pytest-with-core> E 400| options = checked options; clan-pytest-with-core> E 401| config = checked (removeAttrs config [ "_module" ]); clan-pytest-with-core> E | ^ clan-pytest-with-core> E 402| _module = checked (config._module); 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:304:9: clan-pytest-with-core> E 303| checkUnmatched = clan-pytest-with-core> E 304| if config._module.check && config._module.freeformType == null && merged.unmatchedDefns != [ ] then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 305| let clan-pytest-with-core> E clan-pytest-with-core> E … in the right operand of the AND (&&) operator clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:304:72: clan-pytest-with-core> E 303| checkUnmatched = clan-pytest-with-core> E 304| if config._module.check && config._module.freeformType == null && merged.unmatchedDefns != [ ] then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 305| let clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'unmatchedDefns' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:940:7: clan-pytest-with-core> E 939| # Transforms unmatchedDefnsByName into a list of definitions clan-pytest-with-core> E 940| unmatchedDefns = clan-pytest-with-core> E | ^ clan-pytest-with-core> E 941| if configs == [ ] then clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'concatLists' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:946:11: clan-pytest-with-core> E 945| else clan-pytest-with-core> E 946| concatLists ( clan-pytest-with-core> E | ^ clan-pytest-with-core> E 947| mapAttrsToList ( clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:948:21: clan-pytest-with-core> E 947| mapAttrsToList ( clan-pytest-with-core> E 948| name: defs: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 949| map ( clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'map' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:949:15: clan-pytest-with-core> E 948| name: defs: clan-pytest-with-core> E 949| map ( clan-pytest-with-core> E | ^ clan-pytest-with-core> E 950| def: clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:932:22: clan-pytest-with-core> E 931| # Propagate all unmatched definitions from nested option sets clan-pytest-with-core> E 932| mapAttrs (n: v: v.unmatchedDefns) resultsByName clan-pytest-with-core> E | ^ clan-pytest-with-core> E 933| # Plus the definitions for the current prefix that don't have a matching option clan-pytest-with-core> E clan-pytest-with-core> E (10 duplicate frames omitted) clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:932:25: clan-pytest-with-core> E 931| # Propagate all unmatched definitions from nested option sets clan-pytest-with-core> E 932| mapAttrs (n: v: v.unmatchedDefns) resultsByName clan-pytest-with-core> E | ^ clan-pytest-with-core> E 933| # Plus the definitions for the current prefix that don't have a matching option clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:876:15: clan-pytest-with-core> E 875| resultsByName = mapAttrs ( clan-pytest-with-core> E 876| name: decls: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 877| # We're descending into attribute ‘name’. 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:888:9: clan-pytest-with-core> E 887| in clan-pytest-with-core> E 888| if length optionDecls == length decls then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 889| let clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'length' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:888:12: clan-pytest-with-core> E 887| in clan-pytest-with-core> E 888| if length optionDecls == length decls then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 889| let clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'filter' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:882:25: clan-pytest-with-core> E 881| defns' = rawDefinitionsByName.${name} or [ ]; clan-pytest-with-core> E 882| optionDecls = filter ( clan-pytest-with-core> E | ^ clan-pytest-with-core> E 883| m: clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:883:13: clan-pytest-with-core> E 882| optionDecls = filter ( clan-pytest-with-core> E 883| m: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 884| m.options ? _type clan-pytest-with-core> E clan-pytest-with-core> E … in the left operand of the AND (&&) operator clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:885:13: clan-pytest-with-core> E 884| m.options ? _type clan-pytest-with-core> E 885| && (m.options._type == "option" || throwDeclarationTypeError loc m.options._type m._file) clan-pytest-with-core> E | ^ clan-pytest-with-core> E 886| ) decls; clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'options' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:807:15: clan-pytest-with-core> E 806| pos = unsafeGetAttrPos n subtree; clan-pytest-with-core> E 807| options = option; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 808| }) subtree clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:289:73: clan-pytest-with-core> E 288| len = length attrPath; clan-pytest-with-core> E 289| atDepth = n: if n == len then value else { ${elemAt attrPath n} = atDepth (n + 1); }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 290| in clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'atDepth' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:289:17: clan-pytest-with-core> E 288| len = length attrPath; clan-pytest-with-core> E 289| atDepth = n: if n == len then value else { ${elemAt attrPath n} = atDepth (n + 1); }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 290| in clan-pytest-with-core> E clan-pytest-with-core> E … in the right operand of the update (//) operator clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:2047:9: clan-pytest-with-core> E 2046| } clan-pytest-with-core> E 2047| // optionalAttrs (toType != null) { clan-pytest-with-core> E | ^ clan-pytest-with-core> E 2048| type = toType; clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:2047:12: clan-pytest-with-core> E 2046| } clan-pytest-with-core> E 2047| // optionalAttrs (toType != null) { clan-pytest-with-core> E | ^ clan-pytest-with-core> E 2048| type = toType; clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'optionalAttrs' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:1492:25: clan-pytest-with-core> E 1491| */ clan-pytest-with-core> E 1492| optionalAttrs = cond: as: if cond then as else { }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1493| 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:1492:29: clan-pytest-with-core> E 1491| */ clan-pytest-with-core> E 1492| optionalAttrs = cond: as: if cond then as else { }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1493| clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:2036:17: clan-pytest-with-core> E 2035| let clan-pytest-with-core> E 2036| opt = attrByPath to { } options; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 2037| in clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'attrByPath' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:89:24: clan-pytest-with-core> E 88| attrByPath = clan-pytest-with-core> E 89| attrPath: default: set: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 90| let clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:106:5: clan-pytest-with-core> E 105| in clan-pytest-with-core> E 106| attrByPath' 0 set; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 107| clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'attrByPath'' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:93:12: clan-pytest-with-core> E 92| attrByPath' = clan-pytest-with-core> E 93| n: s: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 94| ( clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:102:35: clan-pytest-with-core> E 101| in clan-pytest-with-core> E 102| if s ? ${attr} then attrByPath' (n + 1) s.${attr} else default clan-pytest-with-core> E | ^ clan-pytest-with-core> E 103| ) clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'attrByPath'' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:93:12: clan-pytest-with-core> E 92| attrByPath' = clan-pytest-with-core> E 93| n: s: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 94| ( clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:102:35: clan-pytest-with-core> E 101| in clan-pytest-with-core> E 102| if s ? ${attr} then attrByPath' (n + 1) s.${attr} else default clan-pytest-with-core> E | ^ clan-pytest-with-core> E 103| ) clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'attrByPath'' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:93:12: clan-pytest-with-core> E 92| attrByPath' = clan-pytest-with-core> E 93| n: s: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 94| ( clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:102:35: clan-pytest-with-core> E 101| in clan-pytest-with-core> E 102| if s ? ${attr} then attrByPath' (n + 1) s.${attr} else default clan-pytest-with-core> E | ^ clan-pytest-with-core> E 103| ) clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'attrByPath'' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:93:12: clan-pytest-with-core> E 92| attrByPath' = clan-pytest-with-core> E 93| n: s: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 94| ( clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:102:55: clan-pytest-with-core> E 101| in clan-pytest-with-core> E 102| if s ? ${attr} then attrByPath' (n + 1) s.${attr} else default clan-pytest-with-core> E | ^ clan-pytest-with-core> E 103| ) clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:927:37: clan-pytest-with-core> E 926| clan-pytest-with-core> E 927| matchedOptions = mapAttrs (n: v: v.matchedOptions) resultsByName; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 928| clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'matchedOptions' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:893:13: clan-pytest-with-core> E 892| { clan-pytest-with-core> E 893| matchedOptions = evalOptionValue loc opt defns'; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 894| unmatchedDefns = [ ]; clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:893:30: clan-pytest-with-core> E 892| { clan-pytest-with-core> E 893| matchedOptions = evalOptionValue loc opt defns'; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 894| unmatchedDefns = [ ]; clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'evalOptionValue' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1103:15: clan-pytest-with-core> E 1102| evalOptionValue = clan-pytest-with-core> E 1103| loc: opt: defs: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1104| let clan-pytest-with-core> E clan-pytest-with-core> E … in the left operand of the update (//) operator clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1148:5: clan-pytest-with-core> E 1147| warnDeprecation opt clan-pytest-with-core> E 1148| // { clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1149| value = addErrorContext "while evaluating the option `${showOption loc}':" value; 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1141:9: clan-pytest-with-core> E 1140| warnDeprecation = clan-pytest-with-core> E 1141| if (opt.type.deprecationMessage != null) then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1142| warn "The type `types.${opt.type.name}' of option `${showOption loc}' defined in ${showFiles opt.declarations} is deprecated. ${opt.type.deprecationMessage}" clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:890:19: clan-pytest-with-core> E 889| let clan-pytest-with-core> E 890| opt = fixupOptionType loc (mergeOptionDecls loc decls); clan-pytest-with-core> E | ^ clan-pytest-with-core> E 891| in clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'fixupOptionType' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1473:10: clan-pytest-with-core> E 1472| fixupOptionType = clan-pytest-with-core> E 1473| loc: opt: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1474| if opt.type.getSubModules or null == null then 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1474:5: clan-pytest-with-core> E 1473| loc: opt: clan-pytest-with-core> E 1474| if opt.type.getSubModules or null == null then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1475| opt // { type = opt.type or types.unspecified; } clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'type.getSubModules' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/nixos/modules/services/hardware/bluetooth.nix:72:9: clan-pytest-with-core> E 71| settings = mkOption { clan-pytest-with-core> E 72| type = cfgFmt.type; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 73| default = { }; clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/nixos/modules/services/hardware/bluetooth.nix:26:12: clan-pytest-with-core> E 25| clan-pytest-with-core> E 26| cfgFmt = pkgs.formats.ini { }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 27| clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:727:15: clan-pytest-with-core> E 726| extraArgs = mapAttrs ( clan-pytest-with-core> E 727| name: _: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 728| addErrorContext (context name) ( clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the module argument `pkgs' in "/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/nixos/modules/services/hardware/bluetooth.nix": clan-pytest-with-core> E clan-pytest-with-core> E … noting that argument `pkgs` is not externally provided, so querying `_module.args` instead, requiring `config` clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:731:13: clan-pytest-with-core> E 730| "noting that argument `${name}` is not externally provided, so querying `_module.args` instead, requiring `config`" clan-pytest-with-core> E 731| config._module.args.${name} clan-pytest-with-core> E | ^ clan-pytest-with-core> E 732| ) clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/types.nix:1029:18: clan-pytest-with-core> E 1028| value = mapAttrs ( clan-pytest-with-core> E 1029| n: v: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1030| if lazy then clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'optionalValue.value' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1312:5: clan-pytest-with-core> E 1311| clan-pytest-with-core> E 1312| optionalValue = if isDefined then { value = mergedValue; } else { }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1313| }; 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1312:21: clan-pytest-with-core> E 1311| clan-pytest-with-core> E 1312| optionalValue = if isDefined then { value = mergedValue; } else { }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1313| }; clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'values' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1240:11: clan-pytest-with-core> E 1239| { clan-pytest-with-core> E 1240| values = defsSorted; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1241| inherit (defsFiltered) highestPrio; 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1211:11: clan-pytest-with-core> E 1210| # Avoid sorting if we don't have to. clan-pytest-with-core> E 1211| if any (def: def.value._type or "" == "order") defsFiltered.values then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1212| sortProperties defsFiltered.values clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'any' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1211:14: clan-pytest-with-core> E 1210| # Avoid sorting if we don't have to. clan-pytest-with-core> E 1211| if any (def: def.value._type or "" == "order") defsFiltered.values then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1212| sortProperties defsFiltered.values clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1211:19: clan-pytest-with-core> E 1210| # Avoid sorting if we don't have to. clan-pytest-with-core> E 1211| if any (def: def.value._type or "" == "order") defsFiltered.values then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1212| sortProperties defsFiltered.values clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'value._type' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1422:67: clan-pytest-with-core> E 1421| strip = clan-pytest-with-core> E 1422| def: if def.value._type or "" == "override" then def // { value = def.value.content; } else def; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1423| in clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'value.content' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1566:22: clan-pytest-with-core> E 1565| _type = "override"; clan-pytest-with-core> E 1566| inherit priority content; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1567| }; 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/nixos/modules/misc/nixpkgs.nix:107:15: clan-pytest-with-core> E 106| clan-pytest-with-core> E 107| finalPkgs = if opt.pkgs.isDefined then cfg.pkgs.appendOverlays cfg.overlays else defaultPkgs; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 108| clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'pkgs.isDefined' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1154:21: clan-pytest-with-core> E 1153| definitionsWithLocations = res.defsFinal; clan-pytest-with-core> E 1154| inherit (res) isDefined; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1155| inherit (res.checkedAndMerged) valueMeta; clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'isDefined' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1310:5: clan-pytest-with-core> E 1309| clan-pytest-with-core> E 1310| isDefined = defsFinal != [ ]; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1311| clan-pytest-with-core> E clan-pytest-with-core> E (6 duplicate frames omitted) clan-pytest-with-core> E clan-pytest-with-core> E error: attribute 'system' missing clan-pytest-with-core> E at /build/store/nix/store/y3h139bhv4373m1hab367ma4p5i95i2f-source/modules/clan/module.nix:164:24: clan-pytest-with-core> E 163| (lib.modules.importApply ../../nixosModules/machineModules/overridePkgs.nix { clan-pytest-with-core> E 164| pkgs = nixpkgsMatrix.${config.inventory.machines.${name}.nixpkgs}.system.${system}.pkgs; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 165| }) clan-pytest-with-core> E Did you mean systems? 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 0x7fffe58c4c80> clan-pytest-with-core> flake_with_sops = 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_generate_shared_secret_sops( clan-pytest-with-core> monkeypatch: pytest.MonkeyPatch, clan-pytest-with-core> flake_with_sops: ClanFlake, clan-pytest-with-core> ) -> None: clan-pytest-with-core> flake = flake_with_sops clan-pytest-with-core> clan-pytest-with-core> m1_config = flake.machines["machine1"] = create_test_machine_config() clan-pytest-with-core> shared_generator = m1_config["clan"]["core"]["vars"]["generators"][ clan-pytest-with-core> "my_shared_generator" clan-pytest-with-core> ] clan-pytest-with-core> shared_generator["share"] = True clan-pytest-with-core> shared_generator["files"]["my_shared_secret"]["secret"] = True clan-pytest-with-core> shared_generator["files"]["no_deploy_secret"]["secret"] = True clan-pytest-with-core> shared_generator["files"]["no_deploy_secret"]["deploy"] = False clan-pytest-with-core> shared_generator["script"] = ( clan-pytest-with-core> 'echo hello > "$out"/my_shared_secret; echo no_hello > "$out"/no_deploy_secret' clan-pytest-with-core> ) clan-pytest-with-core> m2_config = flake.machines["machine2"] = create_test_machine_config() clan-pytest-with-core> m2_config["clan"]["core"]["vars"]["generators"]["my_shared_generator"] = ( clan-pytest-with-core> shared_generator.copy() clan-pytest-with-core> ) clan-pytest-with-core> # machine 3 should not have the shared secret clan-pytest-with-core> flake.machines["machine3"] = create_test_machine_config() clan-pytest-with-core> flake.refresh() clan-pytest-with-core> monkeypatch.chdir(flake.path) clan-pytest-with-core> machine1 = Machine(name="machine1", flake=Flake(str(flake.path))) clan-pytest-with-core> machine2 = Machine(name="machine2", flake=Flake(str(flake.path))) clan-pytest-with-core> > cli.run(["vars", "generate", "--flake", str(flake.path), "machine2"]) clan-pytest-with-core> clan-pytest-with-core> /build/src/clan_cli/tests/test_vars_generate.py:436: 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/vars/generate.py:33: in generate_command clan-pytest-with-core> run_generators( clan-pytest-with-core> /build/src/clan_lib/vars/generate.py:306: in run_generators clan-pytest-with-core> all_generators = get_generators(machines, full_closure=True) clan-pytest-with-core> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ clan-pytest-with-core> /build/src/clan_lib/vars/generate.py:146: in get_generators clan-pytest-with-core> flake.precache(get_generators_precache_selectors(list(all_machines))) clan-pytest-with-core> /build/src/clan_lib/flake/flake.py:1151: in precache clan-pytest-with-core> self.get_from_nix(not_fetched_selectors) clan-pytest-with-core> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ clan-pytest-with-core> clan-pytest-with-core> self = Flake(identifier='/build/pytest-8ji283i5/flake', hash='sha256-WTHjkJHZKMohO+2i2QTgWmOuvm4uKnW9mEcxahWbyjg=', 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.?secrets.?age.?plugins', 'clanInternals.machines.x86_64-linux.{machine1,machine2,machine3}.config.clan...', 'clanInternals.machines.x86_64-linux.{machine1,machine2,machine3}.config.clan.core.vars.settings.secretModule', ...] 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 while executing:$ clan select 'clanInternals.?secrets.?age.?plugins' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{machine1,machine2,machine3}.config.clan.core.vars.generators.*.{share,dependencies,prompts,validationHash}' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{machine1,machine2,machine3}.config.clan.core.vars.generators.*.files.*.{secret,deploy,owner,group,mode,neededFor}' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{machine1,machine2,machine3}.config.clan.core.?sops.?defaultGroups' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{machine1,machine2,machine3}.config.clan.core.vars.settings.publicModule' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{machine1,machine2,machine3}.config.clan.core.vars.settings.secretModule' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{machine1,machine2,machine3}.config.clan.core.vars.?sops.?secretUploadDirectory' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{machine1,machine2,machine3}.config.clan.core.vars.?password-store.?passCommand' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{machine1,machine2,machine3}.config.clan.core.vars.?password-store.?secretLocation' clan-pytest-with-core> E $ clan select 'clanInternals.vars.settings.?recipients' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{machine1,machine2,machine3}.config.clan.core.vars.?age.?secretLocation' clan-pytest-with-core> E Reason: attribute 'system' missing clan-pytest-with-core> E at /build/store/nix/store/y3h139bhv4373m1hab367ma4p5i95i2f-source/modules/clan/module.nix:164:24: clan-pytest-with-core> E 163| (lib.modules.importApply ../../nixosModules/machineModules/overridePkgs.nix { clan-pytest-with-core> E 164| pkgs = nixpkgsMatrix.${config.inventory.machines.${name}.nixpkgs}.system.${system}.pkgs; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 165| }) clan-pytest-with-core> E Did you mean systems?. 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 setup ----------------------------- clan-pytest-with-core> !! $HOME does not point to a temp directory!! HOME=/build/pytest-8ji283i5 clan-pytest-with-core> [localhost] $ clan vars keygen --flake /build/pytest-8ji283i5/flake --user admin --no-interactive clan-pytest-with-core> Caller: /build/src/clan_cli/tests/age_keys.py:31::init clan-pytest-with-core> clan-pytest-with-core> Prefetching flake /build/pytest-8ji283i5/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/febbcab65441be6ccc547560fd0155faadebbbb7 clan-pytest-with-core> (cached) $ clan select clanInternals.inventoryClass.relativeDirectory 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> git \ clan-pytest-with-core> -C /build/pytest-8ji283i5/flake \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-8ji283i5/flake/sops/users/admin 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/admin to git clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-8ji283i5/flake \ clan-pytest-with-core> diff \ clan-pytest-with-core> --cached --exit-code \ clan-pytest-with-core> -- /build/pytest-8ji283i5/flake/sops/users/admin 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-8ji283i5/flake \ clan-pytest-with-core> commit \ clan-pytest-with-core> -m 'secrets: add user admin' \ clan-pytest-with-core> --no-verify /build/pytest-8ji283i5/flake/sops/users/admin 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/admin to git 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/pytest-8ji283i5 clan-pytest-with-core> DEBUG clan_cli.tests.helpers.cli:__init__.py:143 $ clan vars keygen --flake /build/pytest-8ji283i5/flake --user admin --no-interactive clan-pytest-with-core> Caller: /build/src/clan_cli/tests/age_keys.py:31::init clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:927 Prefetching flake /build/pytest-8ji283i5/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/febbcab65441be6ccc547560fd0155faadebbbb7 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.cmd:__init__.py:143 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> DEBUG clan_lib.cmd:__init__.py:143 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> DEBUG clan_cli.secrets.sops:sops.py:99 Found age public key from a private key in the environment (SOPS_AGE_KEY): age1dhwqzkah943xzc34tc3dlmfayyevcmdmxzjezdgdy33euxwf59vsp3vk3c clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:143 git \ clan-pytest-with-core> -C /build/pytest-8ji283i5/flake \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-8ji283i5/flake/sops/users/admin 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> DEBUG clan_lib.cmd:__init__.py:143 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> DEBUG clan_lib.git:__init__.py:98 Adding sops/users/admin to git clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:143 git \ clan-pytest-with-core> -C /build/pytest-8ji283i5/flake \ clan-pytest-with-core> diff \ clan-pytest-with-core> --cached --exit-code \ clan-pytest-with-core> -- /build/pytest-8ji283i5/flake/sops/users/admin 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> DEBUG clan_lib.cmd:__init__.py:143 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> DEBUG clan_lib.cmd:__init__.py:143 git \ clan-pytest-with-core> -C /build/pytest-8ji283i5/flake \ clan-pytest-with-core> commit \ clan-pytest-with-core> -m 'secrets: add user admin' \ clan-pytest-with-core> --no-verify /build/pytest-8ji283i5/flake/sops/users/admin 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> DEBUG clan_lib.cmd:__init__.py:143 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> INFO clan_lib.git:__init__.py:141 Committed sops/users/admin to git clan-pytest-with-core> ----------------------------- Captured stdout call ----------------------------- clan-pytest-with-core> [main 44184ca] flake: update by flake generator clan-pytest-with-core> 6 files changed, 100 insertions(+) clan-pytest-with-core> create mode 100644 machines/machine1/configuration.json clan-pytest-with-core> create mode 100644 machines/machine1/configuration.nix clan-pytest-with-core> create mode 100644 machines/machine2/configuration.json clan-pytest-with-core> create mode 100644 machines/machine2/configuration.nix clan-pytest-with-core> create mode 100644 machines/machine3/configuration.json clan-pytest-with-core> create mode 100644 machines/machine3/configuration.nix clan-pytest-with-core> ----------------------------- Captured stderr call ----------------------------- clan-pytest-with-core> Prefetching flake /build/pytest-8ji283i5/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/d2c0050d97832c3ac5193485b93705d00938c15e clan-pytest-with-core> (cached) $ clan select clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> Prefetching flake /build/pytest-8ji283i5/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/d2c0050d97832c3ac5193485b93705d00938c15e clan-pytest-with-core> (cached) $ clan select clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> Prefetching flake /build/pytest-8ji283i5/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/d2c0050d97832c3ac5193485b93705d00938c15e clan-pytest-with-core> (cached) $ clan select clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> [localhost] $ clan vars generate --flake /build/pytest-8ji283i5/flake machine2 clan-pytest-with-core> Caller: /build/src/clan_cli/tests/test_vars_generate.py:436::test_generate_shared_secret_sops clan-pytest-with-core> clan-pytest-with-core> Prefetching flake /build/pytest-8ji283i5/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.cliChecks clan-pytest-with-core> Cache miss for clanInternals.inventoryClass.inventorySerialization.{instances,machines,meta} clan-pytest-with-core> Loading flake cache from file /build/clan-flake-cache/flakes-v2/01ecdf4b170ce84e80fdeb00b04cabd4f56e83a8 clan-pytest-with-core> Cache miss for clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> Loading flake cache from file /build/clan-flake-cache/flakes-v2/01ecdf4b170ce84e80fdeb00b04cabd4f56e83a8 clan-pytest-with-core> (cached) $ clan select 'clanInternals.inventoryClass.inventorySerialization.{instances,machines,meta}' clan-pytest-with-core> Precaching selectors: clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.machines clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.instances clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.meta clan-pytest-with-core> - (not cached) clanInternals.?secrets.?age.?plugins clan-pytest-with-core> - (cached) clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2,machine3}.config.clan.core.vars.generators.*.{share,dependencies,prompts,validationHash} clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2,machine3}.config.clan.core.vars.generators.*.files.*.{secret,deploy,owner,group,mode,neededFor} clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2,machine3}.config.clan.core.?sops.?defaultGroups clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2,machine3}.config.clan.core.vars.settings.publicModule clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2,machine3}.config.clan.core.vars.settings.secretModule clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2,machine3}.config.clan.core.vars.?sops.?secretUploadDirectory clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2,machine3}.config.clan.core.vars.?password-store.?passCommand clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2,machine3}.config.clan.core.vars.?password-store.?secretLocation clan-pytest-with-core> - (not cached) clanInternals.vars.settings.?recipients clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2,machine3}.config.clan.core.vars.?age.?secretLocation clan-pytest-with-core> ------------------------------ Captured log call ------------------------------- clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:927 Prefetching flake /build/pytest-8ji283i5/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/d2c0050d97832c3ac5193485b93705d00938c15e 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-8ji283i5/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/d2c0050d97832c3ac5193485b93705d00938c15e 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-8ji283i5/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/d2c0050d97832c3ac5193485b93705d00938c15e clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1179 (cached) $ clan select clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> DEBUG clan_cli.tests.helpers.cli:__init__.py:143 $ clan vars generate --flake /build/pytest-8ji283i5/flake machine2 clan-pytest-with-core> Caller: /build/src/clan_cli/tests/test_vars_generate.py:436::test_generate_shared_secret_sops clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:927 Prefetching flake /build/pytest-8ji283i5/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.cliChecks clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1174 Cache miss for clanInternals.inventoryClass.inventorySerialization.{instances,machines,meta} clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:789 Loading flake cache from file /build/clan-flake-cache/flakes-v2/01ecdf4b170ce84e80fdeb00b04cabd4f56e83a8 clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1174 Cache miss for clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:789 Loading flake cache from file /build/clan-flake-cache/flakes-v2/01ecdf4b170ce84e80fdeb00b04cabd4f56e83a8 clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1179 (cached) $ clan select 'clanInternals.inventoryClass.inventorySerialization.{instances,machines,meta}' clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1144 Precaching selectors: clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.machines clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.instances clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.meta clan-pytest-with-core> - (not cached) clanInternals.?secrets.?age.?plugins clan-pytest-with-core> - (cached) clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2,machine3}.config.clan.core.vars.generators.*.{share,dependencies,prompts,validationHash} clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2,machine3}.config.clan.core.vars.generators.*.files.*.{secret,deploy,owner,group,mode,neededFor} clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2,machine3}.config.clan.core.?sops.?defaultGroups clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2,machine3}.config.clan.core.vars.settings.publicModule clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2,machine3}.config.clan.core.vars.settings.secretModule clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2,machine3}.config.clan.core.vars.?sops.?secretUploadDirectory clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2,machine3}.config.clan.core.vars.?password-store.?passCommand clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2,machine3}.config.clan.core.vars.?password-store.?secretLocation clan-pytest-with-core> - (not cached) clanInternals.vars.settings.?recipients clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2,machine3}.config.clan.core.vars.?age.?secretLocation clan-pytest-with-core> ___________________________ test_stdout_of_generate ____________________________ clan-pytest-with-core> [gw3] linux -- Python 3.14.7 /nix/store/3n4qphl9s728sz8frmpqqrv9b1m87g68-python3-3.14.7/bin/python clan-pytest-with-core> clan-pytest-with-core> self = Flake(identifier='/build/pytest-6y2za9xa/flake', hash='sha256-uey+ZXSySqpgDiDtldidvmXjKsoIu+fh/IArOboIz5w=', 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.?secrets.?age.?plugins', 'clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.gener...ngs.publicModule', 'clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.settings.secretModule', ...] 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-6y2za9xa/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 --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/clsrmfvhs1hpgjmizs5cyl75h8ag8nid-source?narHash=sha256-uey+ZXSySqpgDiDtldidvmXjKsoIu+fh/IArOboIz5w="; 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": "maybe", "value": "secrets"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "plugins"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "share"}, {"type": "str", "value": "dependencies"}, {"type": "str", "value": "prompts"}, {"type": "str", "value": "validationHash"}]}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "str", "value": "files"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "secret"}, {"type": "str", "value": "deploy"}, {"type": "str", "value": "owner"}, {"type": "str", "value": "group"}, {"type": "str", "value": "mode"}, {"type": "str", "value": "neededFor"}]}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "defaultGroups"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "publicModule"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "secretModule"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "secretUploadDirectory"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "passCommand"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "secretLocation"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "maybe", "value": "recipients"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "secretLocation"}]'"'"''"'"') 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": "maybe", "value": "secrets"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "plugins"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "share"}, {"type": "str", "value": "dependencies"}, {"type": "str", "value": "prompts"}, {"type": "str", "value": "validationHash"}]}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "str", "value": "files"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "secret"}, {"type": "str", "value": "deploy"}, {"type": "str", "value": "owner"}, {"type": "str", "value": "group"}, {"type": "str", "value": "mode"}, {"type": "str", "value": "neededFor"}]}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "defaultGroups"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "publicModule"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "secretModule"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "secretUploadDirectory"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "passCommand"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "secretLocation"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "maybe", "value": "recipients"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "secretLocation"}]'') flake) clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the module argument `pkgs' in "/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/nixos/modules/services/hardware/bluetooth.nix": clan-pytest-with-core> E clan-pytest-with-core> E … noting that argument `pkgs` is not externally provided, so querying `_module.args` instead, requiring `config` 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: attribute 'system' missing clan-pytest-with-core> E at /build/store/nix/store/y3h139bhv4373m1hab367ma4p5i95i2f-source/modules/clan/module.nix:164:24: clan-pytest-with-core> E 163| (lib.modules.importApply ../../nixosModules/machineModules/overridePkgs.nix { clan-pytest-with-core> E 164| pkgs = nixpkgsMatrix.${config.inventory.machines.${name}.nixpkgs}.system.${system}.pkgs; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 165| }) clan-pytest-with-core> E Did you mean systems? 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 0x7fffe55cf290> clan-pytest-with-core> flake_with_sops = clan-pytest-with-core> caplog = <_pytest.logging.LogCaptureFixture object at 0x7fffe6594ec0> 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_stdout_of_generate( clan-pytest-with-core> monkeypatch: pytest.MonkeyPatch, clan-pytest-with-core> flake_with_sops: ClanFlake, clan-pytest-with-core> caplog: pytest.LogCaptureFixture, clan-pytest-with-core> ) -> None: clan-pytest-with-core> flake_ = flake_with_sops clan-pytest-with-core> clan-pytest-with-core> config = flake_.machines["my_machine"] = create_test_machine_config() clan-pytest-with-core> my_generator = config["clan"]["core"]["vars"]["generators"]["my_generator"] clan-pytest-with-core> my_generator["files"]["my_value"]["secret"] = False clan-pytest-with-core> my_generator["script"] = 'echo -n hello > "$out"/my_value' clan-pytest-with-core> my_secret_generator = config["clan"]["core"]["vars"]["generators"][ clan-pytest-with-core> "my_secret_generator" clan-pytest-with-core> ] clan-pytest-with-core> my_secret_generator["files"]["my_secret"]["secret"] = True clan-pytest-with-core> my_secret_generator["script"] = 'echo -n hello > "$out"/my_secret' clan-pytest-with-core> flake_.refresh() clan-pytest-with-core> monkeypatch.chdir(flake_.path) clan-pytest-with-core> flake = Flake(str(flake_.path)) clan-pytest-with-core> # with capture_output as output: clan-pytest-with-core> with caplog.at_level(logging.INFO): clan-pytest-with-core> > run_generators( clan-pytest-with-core> machines=[Machine(name="my_machine", flake=flake)], clan-pytest-with-core> generators=["my_generator"], clan-pytest-with-core> ) clan-pytest-with-core> clan-pytest-with-core> /build/src/clan_cli/tests/test_vars_generate.py:726: clan-pytest-with-core> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ clan-pytest-with-core> /build/src/clan_lib/vars/generate.py:306: in run_generators clan-pytest-with-core> all_generators = get_generators(machines, full_closure=True) clan-pytest-with-core> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ clan-pytest-with-core> /build/src/clan_lib/vars/generate.py:146: in get_generators clan-pytest-with-core> flake.precache(get_generators_precache_selectors(list(all_machines))) clan-pytest-with-core> /build/src/clan_lib/flake/flake.py:1151: in precache clan-pytest-with-core> self.get_from_nix(not_fetched_selectors) clan-pytest-with-core> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ clan-pytest-with-core> clan-pytest-with-core> self = Flake(identifier='/build/pytest-6y2za9xa/flake', hash='sha256-uey+ZXSySqpgDiDtldidvmXjKsoIu+fh/IArOboIz5w=', 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.?secrets.?age.?plugins', 'clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.gener...ngs.publicModule', 'clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.settings.secretModule', ...] 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 while executing:$ clan select 'clanInternals.?secrets.?age.?plugins' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.generators.*.{share,dependencies,prompts,validationHash}' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.generators.*.files.*.{secret,deploy,owner,group,mode,neededFor}' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.?sops.?defaultGroups' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.settings.publicModule' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.settings.secretModule' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.?sops.?secretUploadDirectory' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.?password-store.?passCommand' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.?password-store.?secretLocation' clan-pytest-with-core> E $ clan select 'clanInternals.vars.settings.?recipients' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.?age.?secretLocation' clan-pytest-with-core> E Reason: attribute 'system' missing clan-pytest-with-core> E at /build/store/nix/store/y3h139bhv4373m1hab367ma4p5i95i2f-source/modules/clan/module.nix:164:24: clan-pytest-with-core> E 163| (lib.modules.importApply ../../nixosModules/machineModules/overridePkgs.nix { clan-pytest-with-core> E 164| pkgs = nixpkgsMatrix.${config.inventory.machines.${name}.nixpkgs}.system.${system}.pkgs; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 165| }) clan-pytest-with-core> E Did you mean systems?. 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 setup ----------------------------- clan-pytest-with-core> !! $HOME does not point to a temp directory!! HOME=/build/pytest-6y2za9xa clan-pytest-with-core> [localhost] $ clan vars keygen --flake /build/pytest-6y2za9xa/flake --user admin --no-interactive clan-pytest-with-core> Caller: /build/src/clan_cli/tests/age_keys.py:31::init clan-pytest-with-core> clan-pytest-with-core> Prefetching flake /build/pytest-6y2za9xa/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/febbcab65441be6ccc547560fd0155faadebbbb7 clan-pytest-with-core> (cached) $ clan select clanInternals.inventoryClass.relativeDirectory 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> git \ clan-pytest-with-core> -C /build/pytest-6y2za9xa/flake \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-6y2za9xa/flake/sops/users/admin 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/admin to git clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-6y2za9xa/flake \ clan-pytest-with-core> diff \ clan-pytest-with-core> --cached --exit-code \ clan-pytest-with-core> -- /build/pytest-6y2za9xa/flake/sops/users/admin 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-6y2za9xa/flake \ clan-pytest-with-core> commit \ clan-pytest-with-core> -m 'secrets: add user admin' \ clan-pytest-with-core> --no-verify /build/pytest-6y2za9xa/flake/sops/users/admin 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/admin to git 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/pytest-6y2za9xa clan-pytest-with-core> DEBUG clan_cli.tests.helpers.cli:__init__.py:143 $ clan vars keygen --flake /build/pytest-6y2za9xa/flake --user admin --no-interactive clan-pytest-with-core> Caller: /build/src/clan_cli/tests/age_keys.py:31::init clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:927 Prefetching flake /build/pytest-6y2za9xa/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/febbcab65441be6ccc547560fd0155faadebbbb7 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.cmd:__init__.py:143 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> DEBUG clan_lib.cmd:__init__.py:143 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> DEBUG clan_cli.secrets.sops:sops.py:99 Found age public key from a private key in the environment (SOPS_AGE_KEY): age1dhwqzkah943xzc34tc3dlmfayyevcmdmxzjezdgdy33euxwf59vsp3vk3c clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:143 git \ clan-pytest-with-core> -C /build/pytest-6y2za9xa/flake \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-6y2za9xa/flake/sops/users/admin 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> DEBUG clan_lib.cmd:__init__.py:143 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> DEBUG clan_lib.git:__init__.py:98 Adding sops/users/admin to git clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:143 git \ clan-pytest-with-core> -C /build/pytest-6y2za9xa/flake \ clan-pytest-with-core> diff \ clan-pytest-with-core> --cached --exit-code \ clan-pytest-with-core> -- /build/pytest-6y2za9xa/flake/sops/users/admin 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> DEBUG clan_lib.cmd:__init__.py:143 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> DEBUG clan_lib.cmd:__init__.py:143 git \ clan-pytest-with-core> -C /build/pytest-6y2za9xa/flake \ clan-pytest-with-core> commit \ clan-pytest-with-core> -m 'secrets: add user admin' \ clan-pytest-with-core> --no-verify /build/pytest-6y2za9xa/flake/sops/users/admin 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> DEBUG clan_lib.cmd:__init__.py:143 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> INFO clan_lib.git:__init__.py:141 Committed sops/users/admin to git clan-pytest-with-core> ----------------------------- Captured stdout call ----------------------------- clan-pytest-with-core> [main 1de6b70] flake: update by flake generator clan-pytest-with-core> 2 files changed, 42 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> ----------------------------- Captured stderr call ----------------------------- clan-pytest-with-core> Prefetching flake /build/pytest-6y2za9xa/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/d2c0050d97832c3ac5193485b93705d00938c15e clan-pytest-with-core> (cached) $ clan select clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> warning: you don't have Internet access; disabling some network-dependent features clan-pytest-with-core> ------------------------------ Captured log call ------------------------------- clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:927 Prefetching flake /build/pytest-6y2za9xa/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/d2c0050d97832c3ac5193485b93705d00938c15e clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1179 (cached) $ clan select clanInternals.inventoryClass.relativeDirectory 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> __________ test_shared_generator_conflicting_definition_raises_error ___________ clan-pytest-with-core> [gw11] linux -- Python 3.14.7 /nix/store/3n4qphl9s728sz8frmpqqrv9b1m87g68-python3-3.14.7/bin/python clan-pytest-with-core> clan-pytest-with-core> monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7fffe63b2200> clan-pytest-with-core> flake_with_sops = 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_shared_generator_conflicting_definition_raises_error( clan-pytest-with-core> monkeypatch: pytest.MonkeyPatch, clan-pytest-with-core> flake_with_sops: ClanFlake, clan-pytest-with-core> ) -> None: clan-pytest-with-core> """Test that vars generation raises an error when two machines have different clan-pytest-with-core> definitions for the same shared generator. clan-pytest-with-core> """ clan-pytest-with-core> flake = flake_with_sops clan-pytest-with-core> clan-pytest-with-core> # Create machine1 with a shared generator clan-pytest-with-core> machine1_config = flake.machines["machine1"] = create_test_machine_config() clan-pytest-with-core> shared_gen1 = machine1_config["clan"]["core"]["vars"]["generators"][ clan-pytest-with-core> "shared_generator" clan-pytest-with-core> ] clan-pytest-with-core> shared_gen1["share"] = True clan-pytest-with-core> shared_gen1["files"]["file1"]["secret"] = False clan-pytest-with-core> shared_gen1["script"] = 'echo "test" > "$out"/file1' clan-pytest-with-core> clan-pytest-with-core> # Create machine2 with the same shared generator but different files clan-pytest-with-core> machine2_config = flake.machines["machine2"] = create_test_machine_config() clan-pytest-with-core> shared_gen2 = machine2_config["clan"]["core"]["vars"]["generators"][ clan-pytest-with-core> "shared_generator" clan-pytest-with-core> ] clan-pytest-with-core> shared_gen2["share"] = True clan-pytest-with-core> shared_gen2["files"]["file2"]["secret"] = False # Different file name clan-pytest-with-core> shared_gen2["script"] = 'echo "test" > "$out"/file2' clan-pytest-with-core> clan-pytest-with-core> flake.refresh() clan-pytest-with-core> monkeypatch.chdir(flake.path) clan-pytest-with-core> clan-pytest-with-core> # Attempting to generate vars for both machines should raise an error clan-pytest-with-core> # because they have conflicting definitions for the same shared generator clan-pytest-with-core> > with pytest.raises( clan-pytest-with-core> ClanError, clan-pytest-with-core> match=r".*differ.*", clan-pytest-with-core> ): clan-pytest-with-core> E AssertionError: Regex pattern did not match. clan-pytest-with-core> E Expected regex: '.*differ.*' clan-pytest-with-core> E Actual message: "Error while executing:$ clan select 'clanInternals.?secrets.?age.?plugins'\n$ clan select 'clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.generators.*.{share,dependencies,prompts,validationHash}'\n$ clan select 'clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.generators.*.files.*.{secret,deploy,owner,group,mode,neededFor}'\n$ clan select 'clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.?sops.?defaultGroups'\n$ clan select 'clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.settings.publicModule'\n$ clan select 'clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.settings.secretModule'\n$ clan select 'clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.?sops.?secretUploadDirectory'\n$ clan select 'clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.?password-store.?passCommand'\n$ clan select 'clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.?password-store.?secretLocation'\n$ clan select 'clanInternals.vars.settings.?recipients'\n$ clan select 'clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.?age.?secretLocation'\n Reason: attribute 'system' missing\n at /build/store/nix/store/y3h139bhv4373m1hab367ma4p5i95i2f-source/modules/clan/module.nix:164:24:\n 163| (lib.modules.importApply ../../nixosModules/machineModules/overridePkgs.nix {\n 164| pkgs = nixpkgsMatrix.${config.inventory.machines.${name}.nixpkgs}.system.${system}.pkgs;\n | ^\n 165| })\n Did you mean systems?. Use flag '--debug' to see full nix trace." clan-pytest-with-core> clan-pytest-with-core> /build/src/clan_cli/tests/test_vars_errors.py:219: AssertionError clan-pytest-with-core> ---------------------------- Captured stderr setup ----------------------------- clan-pytest-with-core> !! $HOME does not point to a temp directory!! HOME=/build/pytest-krghn5tk clan-pytest-with-core> [localhost] $ clan vars keygen --flake /build/pytest-krghn5tk/flake --user admin --no-interactive clan-pytest-with-core> Caller: /build/src/clan_cli/tests/age_keys.py:31::init clan-pytest-with-core> clan-pytest-with-core> Prefetching flake /build/pytest-krghn5tk/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/febbcab65441be6ccc547560fd0155faadebbbb7 clan-pytest-with-core> (cached) $ clan select clanInternals.inventoryClass.relativeDirectory 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> git \ clan-pytest-with-core> -C /build/pytest-krghn5tk/flake \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-krghn5tk/flake/sops/users/admin 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/admin to git clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-krghn5tk/flake \ clan-pytest-with-core> diff \ clan-pytest-with-core> --cached --exit-code \ clan-pytest-with-core> -- /build/pytest-krghn5tk/flake/sops/users/admin 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-krghn5tk/flake \ clan-pytest-with-core> commit \ clan-pytest-with-core> -m 'secrets: add user admin' \ clan-pytest-with-core> --no-verify /build/pytest-krghn5tk/flake/sops/users/admin 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/admin to git 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/pytest-krghn5tk clan-pytest-with-core> DEBUG clan_cli.tests.helpers.cli:__init__.py:143 $ clan vars keygen --flake /build/pytest-krghn5tk/flake --user admin --no-interactive clan-pytest-with-core> Caller: /build/src/clan_cli/tests/age_keys.py:31::init clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:927 Prefetching flake /build/pytest-krghn5tk/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/febbcab65441be6ccc547560fd0155faadebbbb7 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.cmd:__init__.py:143 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> DEBUG clan_lib.cmd:__init__.py:143 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> DEBUG clan_cli.secrets.sops:sops.py:99 Found age public key from a private key in the environment (SOPS_AGE_KEY): age1dhwqzkah943xzc34tc3dlmfayyevcmdmxzjezdgdy33euxwf59vsp3vk3c clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:143 git \ clan-pytest-with-core> -C /build/pytest-krghn5tk/flake \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-krghn5tk/flake/sops/users/admin 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> DEBUG clan_lib.cmd:__init__.py:143 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> DEBUG clan_lib.git:__init__.py:98 Adding sops/users/admin to git clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:143 git \ clan-pytest-with-core> -C /build/pytest-krghn5tk/flake \ clan-pytest-with-core> diff \ clan-pytest-with-core> --cached --exit-code \ clan-pytest-with-core> -- /build/pytest-krghn5tk/flake/sops/users/admin 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> DEBUG clan_lib.cmd:__init__.py:143 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> DEBUG clan_lib.cmd:__init__.py:143 git \ clan-pytest-with-core> -C /build/pytest-krghn5tk/flake \ clan-pytest-with-core> commit \ clan-pytest-with-core> -m 'secrets: add user admin' \ clan-pytest-with-core> --no-verify /build/pytest-krghn5tk/flake/sops/users/admin 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> DEBUG clan_lib.cmd:__init__.py:143 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> INFO clan_lib.git:__init__.py:141 Committed sops/users/admin to git clan-pytest-with-core> ----------------------------- Captured stdout call ----------------------------- clan-pytest-with-core> [main 71ff376] flake: update by flake generator clan-pytest-with-core> 4 files changed, 70 insertions(+) clan-pytest-with-core> create mode 100644 machines/machine1/configuration.json clan-pytest-with-core> create mode 100644 machines/machine1/configuration.nix clan-pytest-with-core> create mode 100644 machines/machine2/configuration.json clan-pytest-with-core> create mode 100644 machines/machine2/configuration.nix clan-pytest-with-core> ----------------------------- Captured stderr call ----------------------------- clan-pytest-with-core> Prefetching flake /build/pytest-krghn5tk/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/d2c0050d97832c3ac5193485b93705d00938c15e clan-pytest-with-core> (cached) $ clan select clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> Prefetching flake /build/pytest-krghn5tk/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/d2c0050d97832c3ac5193485b93705d00938c15e clan-pytest-with-core> (cached) $ clan select clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> [localhost] $ clan vars generate --flake /build/pytest-krghn5tk/flake clan-pytest-with-core> Caller: /build/src/clan_cli/tests/test_vars_errors.py:223::test_shared_generator_conflicting_definition_raises_error clan-pytest-with-core> clan-pytest-with-core> Prefetching flake /build/pytest-krghn5tk/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.cliChecks clan-pytest-with-core> Cache miss for clanInternals.inventoryClass.inventorySerialization.{instances,machines,meta} clan-pytest-with-core> Loading flake cache from file /build/clan-flake-cache/flakes-v2/142b198138151df6f256a2e3ad5841dd88b47e78 clan-pytest-with-core> Cache miss for clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> Loading flake cache from file /build/clan-flake-cache/flakes-v2/142b198138151df6f256a2e3ad5841dd88b47e78 clan-pytest-with-core> (cached) $ clan select 'clanInternals.inventoryClass.inventorySerialization.{instances,machines,meta}' clan-pytest-with-core> Precaching selectors: clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.machines clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.instances clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.meta clan-pytest-with-core> - (not cached) clanInternals.?secrets.?age.?plugins clan-pytest-with-core> - (cached) clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.generators.*.{share,dependencies,prompts,validationHash} clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.generators.*.files.*.{secret,deploy,owner,group,mode,neededFor} clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.?sops.?defaultGroups clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.settings.publicModule clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.settings.secretModule clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.?sops.?secretUploadDirectory clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.?password-store.?passCommand clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.?password-store.?secretLocation clan-pytest-with-core> - (not cached) clanInternals.vars.settings.?recipients clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.?age.?secretLocation clan-pytest-with-core> ------------------------------ Captured log call ------------------------------- clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:927 Prefetching flake /build/pytest-krghn5tk/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/d2c0050d97832c3ac5193485b93705d00938c15e 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-krghn5tk/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/d2c0050d97832c3ac5193485b93705d00938c15e clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1179 (cached) $ clan select clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> DEBUG clan_cli.tests.helpers.cli:__init__.py:143 $ clan vars generate --flake /build/pytest-krghn5tk/flake clan-pytest-with-core> Caller: /build/src/clan_cli/tests/test_vars_errors.py:223::test_shared_generator_conflicting_definition_raises_error clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:927 Prefetching flake /build/pytest-krghn5tk/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.cliChecks clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1174 Cache miss for clanInternals.inventoryClass.inventorySerialization.{instances,machines,meta} clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:789 Loading flake cache from file /build/clan-flake-cache/flakes-v2/142b198138151df6f256a2e3ad5841dd88b47e78 clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1174 Cache miss for clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:789 Loading flake cache from file /build/clan-flake-cache/flakes-v2/142b198138151df6f256a2e3ad5841dd88b47e78 clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1179 (cached) $ clan select 'clanInternals.inventoryClass.inventorySerialization.{instances,machines,meta}' clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1144 Precaching selectors: clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.machines clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.instances clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.meta clan-pytest-with-core> - (not cached) clanInternals.?secrets.?age.?plugins clan-pytest-with-core> - (cached) clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.generators.*.{share,dependencies,prompts,validationHash} clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.generators.*.files.*.{secret,deploy,owner,group,mode,neededFor} clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.?sops.?defaultGroups clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.settings.publicModule clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.settings.secretModule clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.?sops.?secretUploadDirectory clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.?password-store.?passCommand clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.?password-store.?secretLocation clan-pytest-with-core> - (not cached) clanInternals.vars.settings.?recipients clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.?age.?secretLocation clan-pytest-with-core> ______________________________ test_invalidation _______________________________ clan-pytest-with-core> [gw10] linux -- Python 3.14.7 /nix/store/3n4qphl9s728sz8frmpqqrv9b1m87g68-python3-3.14.7/bin/python clan-pytest-with-core> clan-pytest-with-core> self = Flake(identifier='/build/pytest-y_9j7jlx/flake', hash='sha256-PAwt2BJAQ64bPgDnJrYvjnMBKUU1yIEjKNZB9b3Qn64=', 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.?secrets.?age.?plugins', 'clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.gener...ngs.publicModule', 'clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.settings.secretModule', ...] 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-y_9j7jlx/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/5n40bsisxk74v41p17rqpxbnhjhi2nka-source?narHash=sha256-PAwt2BJAQ64bPgDnJrYvjnMBKUU1yIEjKNZB9b3Qn64="; 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": "maybe", "value": "secrets"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "plugins"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "share"}, {"type": "str", "value": "dependencies"}, {"type": "str", "value": "prompts"}, {"type": "str", "value": "validationHash"}]}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "str", "value": "files"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "secret"}, {"type": "str", "value": "deploy"}, {"type": "str", "value": "owner"}, {"type": "str", "value": "group"}, {"type": "str", "value": "mode"}, {"type": "str", "value": "neededFor"}]}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "defaultGroups"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "publicModule"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "secretModule"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "secretUploadDirectory"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "passCommand"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "secretLocation"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "maybe", "value": "recipients"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "secretLocation"}]'"'"''"'"') 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": "maybe", "value": "secrets"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "plugins"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "share"}, {"type": "str", "value": "dependencies"}, {"type": "str", "value": "prompts"}, {"type": "str", "value": "validationHash"}]}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "str", "value": "files"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "secret"}, {"type": "str", "value": "deploy"}, {"type": "str", "value": "owner"}, {"type": "str", "value": "group"}, {"type": "str", "value": "mode"}, {"type": "str", "value": "neededFor"}]}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "defaultGroups"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "publicModule"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "secretModule"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "secretUploadDirectory"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "passCommand"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "secretLocation"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "maybe", "value": "recipients"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "secretLocation"}]'') 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": "maybe", "value": "secrets"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "plugins"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "share"}, {"type": "str", "value": "dependencies"}, {"type": "str", "value": "prompts"}, {"type": "str", "value": "validationHash"}]}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "str", "value": "files"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "secret"}, {"type": "str", "value": "deploy"}, {"type": "str", "value": "owner"}, {"type": "str", "value": "group"}, {"type": "str", "value": "mode"}, {"type": "str", "value": "neededFor"}]}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "defaultGroups"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "publicModule"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "secretModule"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "secretUploadDirectory"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "passCommand"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "secretLocation"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "maybe", "value": "recipients"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "secretLocation"}]'') flake) clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating list element at index 1 clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating attribute 'my_machine' clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/cba1x9mxnwr8b36cw41bya7g6d5v1p7d-source/select.nix:325:37: clan-pytest-with-core> E 324| in clan-pytest-with-core> E 325| builtins.mapAttrs (_: v: recurse selectors (idx + 1) v) filteredAttrs clan-pytest-with-core> E | ^ clan-pytest-with-core> E 326| else if selector.type == "maybe" then 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:325:40: clan-pytest-with-core> E 324| in clan-pytest-with-core> E 325| builtins.mapAttrs (_: v: recurse selectors (idx + 1) v) filteredAttrs clan-pytest-with-core> E | ^ clan-pytest-with-core> E 326| else if selector.type == "maybe" then 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 … from call site clan-pytest-with-core> E at /build/store/nix/store/cba1x9mxnwr8b36cw41bya7g6d5v1p7d-source/select.nix:312:15: clan-pytest-with-core> E 311| else if selector.type == "str" then clan-pytest-with-core> E 312| recurse selectors (idx + 1) (builtins.getAttr selector.value obj) clan-pytest-with-core> E | ^ clan-pytest-with-core> E 313| else if selector.type == "set" then 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 'getAttr' builtin clan-pytest-with-core> E at /build/store/nix/store/cba1x9mxnwr8b36cw41bya7g6d5v1p7d-source/select.nix:312:44: clan-pytest-with-core> E 311| else if selector.type == "str" then clan-pytest-with-core> E 312| recurse selectors (idx + 1) (builtins.getAttr selector.value obj) clan-pytest-with-core> E | ^ clan-pytest-with-core> E 313| else if selector.type == "set" then clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'seq' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:401:18: clan-pytest-with-core> E 400| options = checked options; clan-pytest-with-core> E 401| config = checked (removeAttrs config [ "_module" ]); clan-pytest-with-core> E | ^ clan-pytest-with-core> E 402| _module = checked (config._module); 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:304:9: clan-pytest-with-core> E 303| checkUnmatched = clan-pytest-with-core> E 304| if config._module.check && config._module.freeformType == null && merged.unmatchedDefns != [ ] then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 305| let clan-pytest-with-core> E clan-pytest-with-core> E … in the right operand of the AND (&&) operator clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:304:72: clan-pytest-with-core> E 303| checkUnmatched = clan-pytest-with-core> E 304| if config._module.check && config._module.freeformType == null && merged.unmatchedDefns != [ ] then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 305| let clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'unmatchedDefns' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:940:7: clan-pytest-with-core> E 939| # Transforms unmatchedDefnsByName into a list of definitions clan-pytest-with-core> E 940| unmatchedDefns = clan-pytest-with-core> E | ^ clan-pytest-with-core> E 941| if configs == [ ] then clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'concatLists' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:946:11: clan-pytest-with-core> E 945| else clan-pytest-with-core> E 946| concatLists ( clan-pytest-with-core> E | ^ clan-pytest-with-core> E 947| mapAttrsToList ( clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:948:21: clan-pytest-with-core> E 947| mapAttrsToList ( clan-pytest-with-core> E 948| name: defs: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 949| map ( clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'map' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:949:15: clan-pytest-with-core> E 948| name: defs: clan-pytest-with-core> E 949| map ( clan-pytest-with-core> E | ^ clan-pytest-with-core> E 950| def: clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:932:22: clan-pytest-with-core> E 931| # Propagate all unmatched definitions from nested option sets clan-pytest-with-core> E 932| mapAttrs (n: v: v.unmatchedDefns) resultsByName clan-pytest-with-core> E | ^ clan-pytest-with-core> E 933| # Plus the definitions for the current prefix that don't have a matching option clan-pytest-with-core> E clan-pytest-with-core> E (10 duplicate frames omitted) clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:932:25: clan-pytest-with-core> E 931| # Propagate all unmatched definitions from nested option sets clan-pytest-with-core> E 932| mapAttrs (n: v: v.unmatchedDefns) resultsByName clan-pytest-with-core> E | ^ clan-pytest-with-core> E 933| # Plus the definitions for the current prefix that don't have a matching option clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:876:15: clan-pytest-with-core> E 875| resultsByName = mapAttrs ( clan-pytest-with-core> E 876| name: decls: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 877| # We're descending into attribute ‘name’. 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:888:9: clan-pytest-with-core> E 887| in clan-pytest-with-core> E 888| if length optionDecls == length decls then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 889| let clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'length' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:888:12: clan-pytest-with-core> E 887| in clan-pytest-with-core> E 888| if length optionDecls == length decls then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 889| let clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'filter' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:882:25: clan-pytest-with-core> E 881| defns' = rawDefinitionsByName.${name} or [ ]; clan-pytest-with-core> E 882| optionDecls = filter ( clan-pytest-with-core> E | ^ clan-pytest-with-core> E 883| m: clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:883:13: clan-pytest-with-core> E 882| optionDecls = filter ( clan-pytest-with-core> E 883| m: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 884| m.options ? _type clan-pytest-with-core> E clan-pytest-with-core> E … in the left operand of the AND (&&) operator clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:885:13: clan-pytest-with-core> E 884| m.options ? _type clan-pytest-with-core> E 885| && (m.options._type == "option" || throwDeclarationTypeError loc m.options._type m._file) clan-pytest-with-core> E | ^ clan-pytest-with-core> E 886| ) decls; clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'options' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:807:15: clan-pytest-with-core> E 806| pos = unsafeGetAttrPos n subtree; clan-pytest-with-core> E 807| options = option; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 808| }) subtree clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:289:73: clan-pytest-with-core> E 288| len = length attrPath; clan-pytest-with-core> E 289| atDepth = n: if n == len then value else { ${elemAt attrPath n} = atDepth (n + 1); }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 290| in clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'atDepth' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:289:17: clan-pytest-with-core> E 288| len = length attrPath; clan-pytest-with-core> E 289| atDepth = n: if n == len then value else { ${elemAt attrPath n} = atDepth (n + 1); }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 290| in clan-pytest-with-core> E clan-pytest-with-core> E … in the right operand of the update (//) operator clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:2047:9: clan-pytest-with-core> E 2046| } clan-pytest-with-core> E 2047| // optionalAttrs (toType != null) { clan-pytest-with-core> E | ^ clan-pytest-with-core> E 2048| type = toType; clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:2047:12: clan-pytest-with-core> E 2046| } clan-pytest-with-core> E 2047| // optionalAttrs (toType != null) { clan-pytest-with-core> E | ^ clan-pytest-with-core> E 2048| type = toType; clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'optionalAttrs' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:1492:25: clan-pytest-with-core> E 1491| */ clan-pytest-with-core> E 1492| optionalAttrs = cond: as: if cond then as else { }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1493| 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:1492:29: clan-pytest-with-core> E 1491| */ clan-pytest-with-core> E 1492| optionalAttrs = cond: as: if cond then as else { }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1493| clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:2036:17: clan-pytest-with-core> E 2035| let clan-pytest-with-core> E 2036| opt = attrByPath to { } options; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 2037| in clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'attrByPath' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:89:24: clan-pytest-with-core> E 88| attrByPath = clan-pytest-with-core> E 89| attrPath: default: set: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 90| let clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:106:5: clan-pytest-with-core> E 105| in clan-pytest-with-core> E 106| attrByPath' 0 set; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 107| clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'attrByPath'' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:93:12: clan-pytest-with-core> E 92| attrByPath' = clan-pytest-with-core> E 93| n: s: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 94| ( clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:102:35: clan-pytest-with-core> E 101| in clan-pytest-with-core> E 102| if s ? ${attr} then attrByPath' (n + 1) s.${attr} else default clan-pytest-with-core> E | ^ clan-pytest-with-core> E 103| ) clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'attrByPath'' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:93:12: clan-pytest-with-core> E 92| attrByPath' = clan-pytest-with-core> E 93| n: s: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 94| ( clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:102:35: clan-pytest-with-core> E 101| in clan-pytest-with-core> E 102| if s ? ${attr} then attrByPath' (n + 1) s.${attr} else default clan-pytest-with-core> E | ^ clan-pytest-with-core> E 103| ) clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'attrByPath'' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:93:12: clan-pytest-with-core> E 92| attrByPath' = clan-pytest-with-core> E 93| n: s: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 94| ( clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:102:35: clan-pytest-with-core> E 101| in clan-pytest-with-core> E 102| if s ? ${attr} then attrByPath' (n + 1) s.${attr} else default clan-pytest-with-core> E | ^ clan-pytest-with-core> E 103| ) clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'attrByPath'' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:93:12: clan-pytest-with-core> E 92| attrByPath' = clan-pytest-with-core> E 93| n: s: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 94| ( clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:102:55: clan-pytest-with-core> E 101| in clan-pytest-with-core> E 102| if s ? ${attr} then attrByPath' (n + 1) s.${attr} else default clan-pytest-with-core> E | ^ clan-pytest-with-core> E 103| ) clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:927:37: clan-pytest-with-core> E 926| clan-pytest-with-core> E 927| matchedOptions = mapAttrs (n: v: v.matchedOptions) resultsByName; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 928| clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'matchedOptions' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:893:13: clan-pytest-with-core> E 892| { clan-pytest-with-core> E 893| matchedOptions = evalOptionValue loc opt defns'; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 894| unmatchedDefns = [ ]; clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:893:30: clan-pytest-with-core> E 892| { clan-pytest-with-core> E 893| matchedOptions = evalOptionValue loc opt defns'; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 894| unmatchedDefns = [ ]; clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'evalOptionValue' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1103:15: clan-pytest-with-core> E 1102| evalOptionValue = clan-pytest-with-core> E 1103| loc: opt: defs: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1104| let clan-pytest-with-core> E clan-pytest-with-core> E … in the left operand of the update (//) operator clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1148:5: clan-pytest-with-core> E 1147| warnDeprecation opt clan-pytest-with-core> E 1148| // { clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1149| value = addErrorContext "while evaluating the option `${showOption loc}':" value; 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1141:9: clan-pytest-with-core> E 1140| warnDeprecation = clan-pytest-with-core> E 1141| if (opt.type.deprecationMessage != null) then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1142| warn "The type `types.${opt.type.name}' of option `${showOption loc}' defined in ${showFiles opt.declarations} is deprecated. ${opt.type.deprecationMessage}" clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:890:19: clan-pytest-with-core> E 889| let clan-pytest-with-core> E 890| opt = fixupOptionType loc (mergeOptionDecls loc decls); clan-pytest-with-core> E | ^ clan-pytest-with-core> E 891| in clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'fixupOptionType' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1473:10: clan-pytest-with-core> E 1472| fixupOptionType = clan-pytest-with-core> E 1473| loc: opt: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1474| if opt.type.getSubModules or null == null then 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1474:5: clan-pytest-with-core> E 1473| loc: opt: clan-pytest-with-core> E 1474| if opt.type.getSubModules or null == null then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1475| opt // { type = opt.type or types.unspecified; } clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'type.getSubModules' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/nixos/modules/services/hardware/bluetooth.nix:72:9: clan-pytest-with-core> E 71| settings = mkOption { clan-pytest-with-core> E 72| type = cfgFmt.type; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 73| default = { }; clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/nixos/modules/services/hardware/bluetooth.nix:26:12: clan-pytest-with-core> E 25| clan-pytest-with-core> E 26| cfgFmt = pkgs.formats.ini { }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 27| clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:727:15: clan-pytest-with-core> E 726| extraArgs = mapAttrs ( clan-pytest-with-core> E 727| name: _: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 728| addErrorContext (context name) ( clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the module argument `pkgs' in "/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/nixos/modules/services/hardware/bluetooth.nix": clan-pytest-with-core> E clan-pytest-with-core> E … noting that argument `pkgs` is not externally provided, so querying `_module.args` instead, requiring `config` clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:731:13: clan-pytest-with-core> E 730| "noting that argument `${name}` is not externally provided, so querying `_module.args` instead, requiring `config`" clan-pytest-with-core> E 731| config._module.args.${name} clan-pytest-with-core> E | ^ clan-pytest-with-core> E 732| ) clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/types.nix:1029:18: clan-pytest-with-core> E 1028| value = mapAttrs ( clan-pytest-with-core> E 1029| n: v: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1030| if lazy then clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'optionalValue.value' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1312:5: clan-pytest-with-core> E 1311| clan-pytest-with-core> E 1312| optionalValue = if isDefined then { value = mergedValue; } else { }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1313| }; 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1312:21: clan-pytest-with-core> E 1311| clan-pytest-with-core> E 1312| optionalValue = if isDefined then { value = mergedValue; } else { }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1313| }; clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'values' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1240:11: clan-pytest-with-core> E 1239| { clan-pytest-with-core> E 1240| values = defsSorted; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1241| inherit (defsFiltered) highestPrio; 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1211:11: clan-pytest-with-core> E 1210| # Avoid sorting if we don't have to. clan-pytest-with-core> E 1211| if any (def: def.value._type or "" == "order") defsFiltered.values then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1212| sortProperties defsFiltered.values clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'any' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1211:14: clan-pytest-with-core> E 1210| # Avoid sorting if we don't have to. clan-pytest-with-core> E 1211| if any (def: def.value._type or "" == "order") defsFiltered.values then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1212| sortProperties defsFiltered.values clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1211:19: clan-pytest-with-core> E 1210| # Avoid sorting if we don't have to. clan-pytest-with-core> E 1211| if any (def: def.value._type or "" == "order") defsFiltered.values then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1212| sortProperties defsFiltered.values clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'value._type' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1422:67: clan-pytest-with-core> E 1421| strip = clan-pytest-with-core> E 1422| def: if def.value._type or "" == "override" then def // { value = def.value.content; } else def; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1423| in clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'value.content' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1566:22: clan-pytest-with-core> E 1565| _type = "override"; clan-pytest-with-core> E 1566| inherit priority content; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1567| }; 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/nixos/modules/misc/nixpkgs.nix:107:15: clan-pytest-with-core> E 106| clan-pytest-with-core> E 107| finalPkgs = if opt.pkgs.isDefined then cfg.pkgs.appendOverlays cfg.overlays else defaultPkgs; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 108| clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'pkgs.isDefined' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1154:21: clan-pytest-with-core> E 1153| definitionsWithLocations = res.defsFinal; clan-pytest-with-core> E 1154| inherit (res) isDefined; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1155| inherit (res.checkedAndMerged) valueMeta; clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'isDefined' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1310:5: clan-pytest-with-core> E 1309| clan-pytest-with-core> E 1310| isDefined = defsFinal != [ ]; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1311| clan-pytest-with-core> E clan-pytest-with-core> E (6 duplicate frames omitted) clan-pytest-with-core> E clan-pytest-with-core> E error: attribute 'system' missing clan-pytest-with-core> E at /build/store/nix/store/y3h139bhv4373m1hab367ma4p5i95i2f-source/modules/clan/module.nix:164:24: clan-pytest-with-core> E 163| (lib.modules.importApply ../../nixosModules/machineModules/overridePkgs.nix { clan-pytest-with-core> E 164| pkgs = nixpkgsMatrix.${config.inventory.machines.${name}.nixpkgs}.system.${system}.pkgs; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 165| }) clan-pytest-with-core> E Did you mean systems? 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 0x7fffe5699570> clan-pytest-with-core> flake = 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_invalidation( clan-pytest-with-core> monkeypatch: pytest.MonkeyPatch, clan-pytest-with-core> flake: ClanFlake, clan-pytest-with-core> ) -> None: clan-pytest-with-core> config = flake.machines["my_machine"] = create_test_machine_config() clan-pytest-with-core> my_generator = config["clan"]["core"]["vars"]["generators"]["my_generator"] clan-pytest-with-core> my_generator["files"]["my_value"]["secret"] = False clan-pytest-with-core> my_generator["script"] = 'echo -n "$RANDOM" > "$out"/my_value' clan-pytest-with-core> flake.refresh() clan-pytest-with-core> monkeypatch.chdir(flake.path) clan-pytest-with-core> > cli.run(["vars", "generate", "--flake", str(flake.path), "my_machine"]) clan-pytest-with-core> clan-pytest-with-core> /build/src/clan_cli/tests/test_vars_cache.py:41: 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/vars/generate.py:33: in generate_command clan-pytest-with-core> run_generators( clan-pytest-with-core> /build/src/clan_lib/vars/generate.py:306: in run_generators clan-pytest-with-core> all_generators = get_generators(machines, full_closure=True) clan-pytest-with-core> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ clan-pytest-with-core> /build/src/clan_lib/vars/generate.py:146: in get_generators clan-pytest-with-core> flake.precache(get_generators_precache_selectors(list(all_machines))) clan-pytest-with-core> /build/src/clan_lib/flake/flake.py:1151: in precache clan-pytest-with-core> self.get_from_nix(not_fetched_selectors) clan-pytest-with-core> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ clan-pytest-with-core> clan-pytest-with-core> self = Flake(identifier='/build/pytest-y_9j7jlx/flake', hash='sha256-PAwt2BJAQ64bPgDnJrYvjnMBKUU1yIEjKNZB9b3Qn64=', 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.?secrets.?age.?plugins', 'clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.gener...ngs.publicModule', 'clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.settings.secretModule', ...] 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 while executing:$ clan select 'clanInternals.?secrets.?age.?plugins' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.generators.*.{share,dependencies,prompts,validationHash}' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.generators.*.files.*.{secret,deploy,owner,group,mode,neededFor}' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.?sops.?defaultGroups' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.settings.publicModule' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.settings.secretModule' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.?sops.?secretUploadDirectory' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.?password-store.?passCommand' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.?password-store.?secretLocation' clan-pytest-with-core> E $ clan select 'clanInternals.vars.settings.?recipients' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.?age.?secretLocation' clan-pytest-with-core> E Reason: attribute 'system' missing clan-pytest-with-core> E at /build/store/nix/store/y3h139bhv4373m1hab367ma4p5i95i2f-source/modules/clan/module.nix:164:24: clan-pytest-with-core> E 163| (lib.modules.importApply ../../nixosModules/machineModules/overridePkgs.nix { clan-pytest-with-core> E 164| pkgs = nixpkgsMatrix.${config.inventory.machines.${name}.nixpkgs}.system.${system}.pkgs; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 165| }) clan-pytest-with-core> E Did you mean systems?. 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 setup ----------------------------- clan-pytest-with-core> !! $HOME does not point to a temp directory!! HOME=/build/pytest-y_9j7jlx 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/pytest-y_9j7jlx clan-pytest-with-core> ----------------------------- Captured stdout call ----------------------------- clan-pytest-with-core> [main d3cd20e] flake: update by flake generator clan-pytest-with-core> 2 files changed, 34 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> ----------------------------- Captured stderr call ----------------------------- clan-pytest-with-core> Prefetching flake /build/pytest-y_9j7jlx/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/febbcab65441be6ccc547560fd0155faadebbbb7 clan-pytest-with-core> (cached) $ clan select clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> [localhost] $ clan vars generate --flake /build/pytest-y_9j7jlx/flake my_machine clan-pytest-with-core> Caller: /build/src/clan_cli/tests/test_vars_cache.py:41::test_invalidation clan-pytest-with-core> clan-pytest-with-core> Prefetching flake /build/pytest-y_9j7jlx/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.cliChecks clan-pytest-with-core> Cache miss for clanInternals.inventoryClass.inventorySerialization.{instances,machines,meta} clan-pytest-with-core> Loading flake cache from file /build/clan-flake-cache/flakes-v2/3d0cec000bfe5b969eeaeaf71cbc022300b8908a clan-pytest-with-core> Cache miss for clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> Loading flake cache from file /build/clan-flake-cache/flakes-v2/3d0cec000bfe5b969eeaeaf71cbc022300b8908a clan-pytest-with-core> (cached) $ clan select 'clanInternals.inventoryClass.inventorySerialization.{instances,machines,meta}' clan-pytest-with-core> Precaching selectors: clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.machines clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.instances clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.meta clan-pytest-with-core> - (not cached) clanInternals.?secrets.?age.?plugins clan-pytest-with-core> - (cached) clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.generators.*.{share,dependencies,prompts,validationHash} clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.generators.*.files.*.{secret,deploy,owner,group,mode,neededFor} clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.?sops.?defaultGroups clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.settings.publicModule clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.settings.secretModule clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.?sops.?secretUploadDirectory clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.?password-store.?passCommand clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.?password-store.?secretLocation clan-pytest-with-core> - (not cached) clanInternals.vars.settings.?recipients clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.?age.?secretLocation clan-pytest-with-core> ------------------------------ Captured log call ------------------------------- clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:927 Prefetching flake /build/pytest-y_9j7jlx/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/febbcab65441be6ccc547560fd0155faadebbbb7 clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1179 (cached) $ clan select clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> DEBUG clan_cli.tests.helpers.cli:__init__.py:143 $ clan vars generate --flake /build/pytest-y_9j7jlx/flake my_machine clan-pytest-with-core> Caller: /build/src/clan_cli/tests/test_vars_cache.py:41::test_invalidation clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:927 Prefetching flake /build/pytest-y_9j7jlx/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.cliChecks clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1174 Cache miss for clanInternals.inventoryClass.inventorySerialization.{instances,machines,meta} clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:789 Loading flake cache from file /build/clan-flake-cache/flakes-v2/3d0cec000bfe5b969eeaeaf71cbc022300b8908a clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1174 Cache miss for clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:789 Loading flake cache from file /build/clan-flake-cache/flakes-v2/3d0cec000bfe5b969eeaeaf71cbc022300b8908a clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1179 (cached) $ clan select 'clanInternals.inventoryClass.inventorySerialization.{instances,machines,meta}' clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1144 Precaching selectors: clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.machines clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.instances clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.meta clan-pytest-with-core> - (not cached) clanInternals.?secrets.?age.?plugins clan-pytest-with-core> - (cached) clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.generators.*.{share,dependencies,prompts,validationHash} clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.generators.*.files.*.{secret,deploy,owner,group,mode,neededFor} clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.?sops.?defaultGroups clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.settings.publicModule clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.settings.secretModule clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.?sops.?secretUploadDirectory clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.?password-store.?passCommand clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.?password-store.?secretLocation clan-pytest-with-core> - (not cached) clanInternals.vars.settings.?recipients clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.?age.?secretLocation clan-pytest-with-core> __________________________ test_dynamic_invalidation ___________________________ clan-pytest-with-core> [gw1] linux -- Python 3.14.7 /nix/store/3n4qphl9s728sz8frmpqqrv9b1m87g68-python3-3.14.7/bin/python clan-pytest-with-core> clan-pytest-with-core> self = Flake(identifier='/build/pytest-7faq288a/flake', hash='sha256-CIjIJn7Q2IHWULrljUnV+YzaPmZxy9efmLcEFIU26sY=', 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.machines.x86_64-linux.{my_machine}.config.clan.core.vars.generators.*.{share,dependencies,prompts,validationHash}'] 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-7faq288a/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/pkdzpfpa1j89pb46jd75kdy786dbl2kz-source?narHash=sha256-CIjIJn7Q2IHWULrljUnV+YzaPmZxy9efmLcEFIU26sY="; 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": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "share"}, {"type": "str", "value": "dependencies"}, {"type": "str", "value": "prompts"}, {"type": "str", "value": "validationHash"}]}]'"'"''"'"') 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": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "share"}, {"type": "str", "value": "dependencies"}, {"type": "str", "value": "prompts"}, {"type": "str", "value": "validationHash"}]}]'') 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": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "share"}, {"type": "str", "value": "dependencies"}, {"type": "str", "value": "prompts"}, {"type": "str", "value": "validationHash"}]}]'') 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 evaluating attribute 'my_machine' clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/cba1x9mxnwr8b36cw41bya7g6d5v1p7d-source/select.nix:325:37: clan-pytest-with-core> E 324| in clan-pytest-with-core> E 325| builtins.mapAttrs (_: v: recurse selectors (idx + 1) v) filteredAttrs clan-pytest-with-core> E | ^ clan-pytest-with-core> E 326| else if selector.type == "maybe" then 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:325:40: clan-pytest-with-core> E 324| in clan-pytest-with-core> E 325| builtins.mapAttrs (_: v: recurse selectors (idx + 1) v) filteredAttrs clan-pytest-with-core> E | ^ clan-pytest-with-core> E 326| else if selector.type == "maybe" then 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 … from call site clan-pytest-with-core> E at /build/store/nix/store/cba1x9mxnwr8b36cw41bya7g6d5v1p7d-source/select.nix:312:15: clan-pytest-with-core> E 311| else if selector.type == "str" then clan-pytest-with-core> E 312| recurse selectors (idx + 1) (builtins.getAttr selector.value obj) clan-pytest-with-core> E | ^ clan-pytest-with-core> E 313| else if selector.type == "set" then 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 'getAttr' builtin clan-pytest-with-core> E at /build/store/nix/store/cba1x9mxnwr8b36cw41bya7g6d5v1p7d-source/select.nix:312:44: clan-pytest-with-core> E 311| else if selector.type == "str" then clan-pytest-with-core> E 312| recurse selectors (idx + 1) (builtins.getAttr selector.value obj) clan-pytest-with-core> E | ^ clan-pytest-with-core> E 313| else if selector.type == "set" then clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'seq' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:401:18: clan-pytest-with-core> E 400| options = checked options; clan-pytest-with-core> E 401| config = checked (removeAttrs config [ "_module" ]); clan-pytest-with-core> E | ^ clan-pytest-with-core> E 402| _module = checked (config._module); 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:304:9: clan-pytest-with-core> E 303| checkUnmatched = clan-pytest-with-core> E 304| if config._module.check && config._module.freeformType == null && merged.unmatchedDefns != [ ] then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 305| let clan-pytest-with-core> E clan-pytest-with-core> E … in the right operand of the AND (&&) operator clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:304:72: clan-pytest-with-core> E 303| checkUnmatched = clan-pytest-with-core> E 304| if config._module.check && config._module.freeformType == null && merged.unmatchedDefns != [ ] then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 305| let clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'unmatchedDefns' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:940:7: clan-pytest-with-core> E 939| # Transforms unmatchedDefnsByName into a list of definitions clan-pytest-with-core> E 940| unmatchedDefns = clan-pytest-with-core> E | ^ clan-pytest-with-core> E 941| if configs == [ ] then clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'concatLists' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:946:11: clan-pytest-with-core> E 945| else clan-pytest-with-core> E 946| concatLists ( clan-pytest-with-core> E | ^ clan-pytest-with-core> E 947| mapAttrsToList ( clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:948:21: clan-pytest-with-core> E 947| mapAttrsToList ( clan-pytest-with-core> E 948| name: defs: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 949| map ( clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'map' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:949:15: clan-pytest-with-core> E 948| name: defs: clan-pytest-with-core> E 949| map ( clan-pytest-with-core> E | ^ clan-pytest-with-core> E 950| def: clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:932:22: clan-pytest-with-core> E 931| # Propagate all unmatched definitions from nested option sets clan-pytest-with-core> E 932| mapAttrs (n: v: v.unmatchedDefns) resultsByName clan-pytest-with-core> E | ^ clan-pytest-with-core> E 933| # Plus the definitions for the current prefix that don't have a matching option clan-pytest-with-core> E clan-pytest-with-core> E (10 duplicate frames omitted) clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:932:25: clan-pytest-with-core> E 931| # Propagate all unmatched definitions from nested option sets clan-pytest-with-core> E 932| mapAttrs (n: v: v.unmatchedDefns) resultsByName clan-pytest-with-core> E | ^ clan-pytest-with-core> E 933| # Plus the definitions for the current prefix that don't have a matching option clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:876:15: clan-pytest-with-core> E 875| resultsByName = mapAttrs ( clan-pytest-with-core> E 876| name: decls: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 877| # We're descending into attribute ‘name’. 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:888:9: clan-pytest-with-core> E 887| in clan-pytest-with-core> E 888| if length optionDecls == length decls then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 889| let clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'length' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:888:12: clan-pytest-with-core> E 887| in clan-pytest-with-core> E 888| if length optionDecls == length decls then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 889| let clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'filter' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:882:25: clan-pytest-with-core> E 881| defns' = rawDefinitionsByName.${name} or [ ]; clan-pytest-with-core> E 882| optionDecls = filter ( clan-pytest-with-core> E | ^ clan-pytest-with-core> E 883| m: clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:883:13: clan-pytest-with-core> E 882| optionDecls = filter ( clan-pytest-with-core> E 883| m: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 884| m.options ? _type clan-pytest-with-core> E clan-pytest-with-core> E … in the left operand of the AND (&&) operator clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:885:13: clan-pytest-with-core> E 884| m.options ? _type clan-pytest-with-core> E 885| && (m.options._type == "option" || throwDeclarationTypeError loc m.options._type m._file) clan-pytest-with-core> E | ^ clan-pytest-with-core> E 886| ) decls; clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'options' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:807:15: clan-pytest-with-core> E 806| pos = unsafeGetAttrPos n subtree; clan-pytest-with-core> E 807| options = option; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 808| }) subtree clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:289:73: clan-pytest-with-core> E 288| len = length attrPath; clan-pytest-with-core> E 289| atDepth = n: if n == len then value else { ${elemAt attrPath n} = atDepth (n + 1); }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 290| in clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'atDepth' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:289:17: clan-pytest-with-core> E 288| len = length attrPath; clan-pytest-with-core> E 289| atDepth = n: if n == len then value else { ${elemAt attrPath n} = atDepth (n + 1); }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 290| in clan-pytest-with-core> E clan-pytest-with-core> E … in the right operand of the update (//) operator clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:2047:9: clan-pytest-with-core> E 2046| } clan-pytest-with-core> E 2047| // optionalAttrs (toType != null) { clan-pytest-with-core> E | ^ clan-pytest-with-core> E 2048| type = toType; clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:2047:12: clan-pytest-with-core> E 2046| } clan-pytest-with-core> E 2047| // optionalAttrs (toType != null) { clan-pytest-with-core> E | ^ clan-pytest-with-core> E 2048| type = toType; clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'optionalAttrs' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:1492:25: clan-pytest-with-core> E 1491| */ clan-pytest-with-core> E 1492| optionalAttrs = cond: as: if cond then as else { }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1493| 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:1492:29: clan-pytest-with-core> E 1491| */ clan-pytest-with-core> E 1492| optionalAttrs = cond: as: if cond then as else { }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1493| clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:2036:17: clan-pytest-with-core> E 2035| let clan-pytest-with-core> E 2036| opt = attrByPath to { } options; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 2037| in clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'attrByPath' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:89:24: clan-pytest-with-core> E 88| attrByPath = clan-pytest-with-core> E 89| attrPath: default: set: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 90| let clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:106:5: clan-pytest-with-core> E 105| in clan-pytest-with-core> E 106| attrByPath' 0 set; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 107| clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'attrByPath'' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:93:12: clan-pytest-with-core> E 92| attrByPath' = clan-pytest-with-core> E 93| n: s: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 94| ( clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:102:35: clan-pytest-with-core> E 101| in clan-pytest-with-core> E 102| if s ? ${attr} then attrByPath' (n + 1) s.${attr} else default clan-pytest-with-core> E | ^ clan-pytest-with-core> E 103| ) clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'attrByPath'' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:93:12: clan-pytest-with-core> E 92| attrByPath' = clan-pytest-with-core> E 93| n: s: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 94| ( clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:102:35: clan-pytest-with-core> E 101| in clan-pytest-with-core> E 102| if s ? ${attr} then attrByPath' (n + 1) s.${attr} else default clan-pytest-with-core> E | ^ clan-pytest-with-core> E 103| ) clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'attrByPath'' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:93:12: clan-pytest-with-core> E 92| attrByPath' = clan-pytest-with-core> E 93| n: s: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 94| ( clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:102:35: clan-pytest-with-core> E 101| in clan-pytest-with-core> E 102| if s ? ${attr} then attrByPath' (n + 1) s.${attr} else default clan-pytest-with-core> E | ^ clan-pytest-with-core> E 103| ) clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'attrByPath'' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:93:12: clan-pytest-with-core> E 92| attrByPath' = clan-pytest-with-core> E 93| n: s: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 94| ( clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:102:55: clan-pytest-with-core> E 101| in clan-pytest-with-core> E 102| if s ? ${attr} then attrByPath' (n + 1) s.${attr} else default clan-pytest-with-core> E | ^ clan-pytest-with-core> E 103| ) clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:927:37: clan-pytest-with-core> E 926| clan-pytest-with-core> E 927| matchedOptions = mapAttrs (n: v: v.matchedOptions) resultsByName; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 928| clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'matchedOptions' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:893:13: clan-pytest-with-core> E 892| { clan-pytest-with-core> E 893| matchedOptions = evalOptionValue loc opt defns'; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 894| unmatchedDefns = [ ]; clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:893:30: clan-pytest-with-core> E 892| { clan-pytest-with-core> E 893| matchedOptions = evalOptionValue loc opt defns'; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 894| unmatchedDefns = [ ]; clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'evalOptionValue' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1103:15: clan-pytest-with-core> E 1102| evalOptionValue = clan-pytest-with-core> E 1103| loc: opt: defs: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1104| let clan-pytest-with-core> E clan-pytest-with-core> E … in the left operand of the update (//) operator clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1148:5: clan-pytest-with-core> E 1147| warnDeprecation opt clan-pytest-with-core> E 1148| // { clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1149| value = addErrorContext "while evaluating the option `${showOption loc}':" value; 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1141:9: clan-pytest-with-core> E 1140| warnDeprecation = clan-pytest-with-core> E 1141| if (opt.type.deprecationMessage != null) then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1142| warn "The type `types.${opt.type.name}' of option `${showOption loc}' defined in ${showFiles opt.declarations} is deprecated. ${opt.type.deprecationMessage}" clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:890:19: clan-pytest-with-core> E 889| let clan-pytest-with-core> E 890| opt = fixupOptionType loc (mergeOptionDecls loc decls); clan-pytest-with-core> E | ^ clan-pytest-with-core> E 891| in clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'fixupOptionType' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1473:10: clan-pytest-with-core> E 1472| fixupOptionType = clan-pytest-with-core> E 1473| loc: opt: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1474| if opt.type.getSubModules or null == null then 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1474:5: clan-pytest-with-core> E 1473| loc: opt: clan-pytest-with-core> E 1474| if opt.type.getSubModules or null == null then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1475| opt // { type = opt.type or types.unspecified; } clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'type.getSubModules' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/nixos/modules/services/hardware/bluetooth.nix:72:9: clan-pytest-with-core> E 71| settings = mkOption { clan-pytest-with-core> E 72| type = cfgFmt.type; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 73| default = { }; clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/nixos/modules/services/hardware/bluetooth.nix:26:12: clan-pytest-with-core> E 25| clan-pytest-with-core> E 26| cfgFmt = pkgs.formats.ini { }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 27| clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:727:15: clan-pytest-with-core> E 726| extraArgs = mapAttrs ( clan-pytest-with-core> E 727| name: _: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 728| addErrorContext (context name) ( clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the module argument `pkgs' in "/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/nixos/modules/services/hardware/bluetooth.nix": clan-pytest-with-core> E clan-pytest-with-core> E … noting that argument `pkgs` is not externally provided, so querying `_module.args` instead, requiring `config` clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:731:13: clan-pytest-with-core> E 730| "noting that argument `${name}` is not externally provided, so querying `_module.args` instead, requiring `config`" clan-pytest-with-core> E 731| config._module.args.${name} clan-pytest-with-core> E | ^ clan-pytest-with-core> E 732| ) clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/types.nix:1029:18: clan-pytest-with-core> E 1028| value = mapAttrs ( clan-pytest-with-core> E 1029| n: v: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1030| if lazy then clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'optionalValue.value' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1312:5: clan-pytest-with-core> E 1311| clan-pytest-with-core> E 1312| optionalValue = if isDefined then { value = mergedValue; } else { }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1313| }; 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1312:21: clan-pytest-with-core> E 1311| clan-pytest-with-core> E 1312| optionalValue = if isDefined then { value = mergedValue; } else { }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1313| }; clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'values' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1240:11: clan-pytest-with-core> E 1239| { clan-pytest-with-core> E 1240| values = defsSorted; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1241| inherit (defsFiltered) highestPrio; 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1211:11: clan-pytest-with-core> E 1210| # Avoid sorting if we don't have to. clan-pytest-with-core> E 1211| if any (def: def.value._type or "" == "order") defsFiltered.values then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1212| sortProperties defsFiltered.values clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'any' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1211:14: clan-pytest-with-core> E 1210| # Avoid sorting if we don't have to. clan-pytest-with-core> E 1211| if any (def: def.value._type or "" == "order") defsFiltered.values then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1212| sortProperties defsFiltered.values clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1211:19: clan-pytest-with-core> E 1210| # Avoid sorting if we don't have to. clan-pytest-with-core> E 1211| if any (def: def.value._type or "" == "order") defsFiltered.values then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1212| sortProperties defsFiltered.values clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'value._type' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1422:67: clan-pytest-with-core> E 1421| strip = clan-pytest-with-core> E 1422| def: if def.value._type or "" == "override" then def // { value = def.value.content; } else def; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1423| in clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'value.content' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1566:22: clan-pytest-with-core> E 1565| _type = "override"; clan-pytest-with-core> E 1566| inherit priority content; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1567| }; 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/nixos/modules/misc/nixpkgs.nix:107:15: clan-pytest-with-core> E 106| clan-pytest-with-core> E 107| finalPkgs = if opt.pkgs.isDefined then cfg.pkgs.appendOverlays cfg.overlays else defaultPkgs; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 108| clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'pkgs.isDefined' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1154:21: clan-pytest-with-core> E 1153| definitionsWithLocations = res.defsFinal; clan-pytest-with-core> E 1154| inherit (res) isDefined; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1155| inherit (res.checkedAndMerged) valueMeta; clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'isDefined' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1310:5: clan-pytest-with-core> E 1309| clan-pytest-with-core> E 1310| isDefined = defsFinal != [ ]; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1311| clan-pytest-with-core> E clan-pytest-with-core> E (6 duplicate frames omitted) clan-pytest-with-core> E clan-pytest-with-core> E error: attribute 'system' missing clan-pytest-with-core> E at /build/store/nix/store/y3h139bhv4373m1hab367ma4p5i95i2f-source/modules/clan/module.nix:164:24: clan-pytest-with-core> E 163| (lib.modules.importApply ../../nixosModules/machineModules/overridePkgs.nix { clan-pytest-with-core> E 164| pkgs = nixpkgsMatrix.${config.inventory.machines.${name}.nixpkgs}.system.${system}.pkgs; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 165| }) clan-pytest-with-core> E Did you mean systems? 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 0x7fffe6340c50> clan-pytest-with-core> flake = 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_dynamic_invalidation( clan-pytest-with-core> monkeypatch: pytest.MonkeyPatch, clan-pytest-with-core> flake: ClanFlake, clan-pytest-with-core> ) -> None: clan-pytest-with-core> clan_flake = Flake(str(flake.path)) clan-pytest-with-core> machine = Machine(name="my_machine", flake=clan_flake) clan-pytest-with-core> clan-pytest-with-core> config = flake.machines[machine.name] = create_test_machine_config() clan-pytest-with-core> clan-pytest-with-core> my_generator = config["clan"]["core"]["vars"]["generators"]["my_generator"] clan-pytest-with-core> my_generator["files"]["my_value"]["secret"] = False clan-pytest-with-core> my_generator["script"] = 'echo -n "$RANDOM" > "$out"/my_value' clan-pytest-with-core> clan-pytest-with-core> dependent_generator = config["clan"]["core"]["vars"]["generators"][ clan-pytest-with-core> "dependent_generator" clan-pytest-with-core> ] clan-pytest-with-core> dependent_generator["files"]["my_value"]["secret"] = False clan-pytest-with-core> dependent_generator["dependencies"] = ["my_generator"] clan-pytest-with-core> dependent_generator["script"] = 'echo -n "$RANDOM" > "$out"/my_value' clan-pytest-with-core> clan-pytest-with-core> flake.refresh() clan-pytest-with-core> clan-pytest-with-core> # this is an abuse clan-pytest-with-core> custom_nix = flake.path / "machines" / machine.name / "hardware-configuration.nix" clan-pytest-with-core> # Set the validation such that we have a ValidationHash clan-pytest-with-core> # The validationHash changes every time, if the my_generator.files.my_value.value changes clan-pytest-with-core> # So every time we re-generate, the dependent_generator should also re-generate. clan-pytest-with-core> # This however is the case anyways. So i dont understand why we have validationHash here. clan-pytest-with-core> custom_nix.write_text( clan-pytest-with-core> """ clan-pytest-with-core> { config, ... }: let clan-pytest-with-core> p = config.clan.core.vars.generators.my_generator.files.my_value.flakePath; clan-pytest-with-core> in { clan-pytest-with-core> clan.core.vars.generators.dependent_generator.validation = if builtins.pathExists p then builtins.readFile p else null; clan-pytest-with-core> } clan-pytest-with-core> """, clan-pytest-with-core> ) clan-pytest-with-core> clan-pytest-with-core> flake.refresh() clan-pytest-with-core> clan_flake.invalidate_cache(reset_tracking=True) clan-pytest-with-core> monkeypatch.chdir(flake.path) clan-pytest-with-core> clan-pytest-with-core> # before generating, dependent generator validation should be empty; see bogus hardware-configuration.nix above clan-pytest-with-core> # we have to avoid `*.files.value` in this initial select because the generators haven't been run yet clan-pytest-with-core> # Generators 0: The initial generators before any 'vars generate' clan-pytest-with-core> clan-pytest-with-core> system = current_system() clan-pytest-with-core> > generators_0 = machine.flake.select( clan-pytest-with-core> vars_generators_metadata(system, [machine.name]) clan-pytest-with-core> )[machine.name] clan-pytest-with-core> clan-pytest-with-core> /build/src/clan_cli/tests/test_vars_cache.py:429: 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-7faq288a/flake', hash='sha256-CIjIJn7Q2IHWULrljUnV+YzaPmZxy9efmLcEFIU26sY=', 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.machines.x86_64-linux.{my_machine}.config.clan.core.vars.generators.*.{share,dependencies,prompts,validationHash}'] 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.machines.x86_64-linux.{my_machine}.config.clan.core.vars.generators.*.{share,dependencies,prompts,validationHash}' clan-pytest-with-core> E Reason: attribute 'system' missing clan-pytest-with-core> E at /build/store/nix/store/y3h139bhv4373m1hab367ma4p5i95i2f-source/modules/clan/module.nix:164:24: clan-pytest-with-core> E 163| (lib.modules.importApply ../../nixosModules/machineModules/overridePkgs.nix { clan-pytest-with-core> E 164| pkgs = nixpkgsMatrix.${config.inventory.machines.${name}.nixpkgs}.system.${system}.pkgs; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 165| }) clan-pytest-with-core> E Did you mean systems?. 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 setup ----------------------------- clan-pytest-with-core> !! $HOME does not point to a temp directory!! HOME=/build/pytest-7faq288a 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/pytest-7faq288a clan-pytest-with-core> ----------------------------- Captured stdout call ----------------------------- clan-pytest-with-core> [main e0e8798] flake: update by flake generator clan-pytest-with-core> 2 files changed, 45 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 6cc59ff] flake: update by flake generator clan-pytest-with-core> 1 file changed, 7 insertions(+) clan-pytest-with-core> create mode 100644 machines/my_machine/hardware-configuration.nix clan-pytest-with-core> ----------------------------- Captured stderr call ----------------------------- clan-pytest-with-core> Prefetching flake /build/pytest-7faq288a/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/febbcab65441be6ccc547560fd0155faadebbbb7 clan-pytest-with-core> (cached) $ clan select clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> Prefetching flake /build/pytest-7faq288a/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.inventoryClass.relativeDirectory clan-pytest-with-core> Prefetching flake /build/pytest-7faq288a/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.machines.x86_64-linux.{my_machine}.config.clan.core.vars.generators.*.{share,dependencies,prompts,validationHash} clan-pytest-with-core> ------------------------------ Captured log call ------------------------------- clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:927 Prefetching flake /build/pytest-7faq288a/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/febbcab65441be6ccc547560fd0155faadebbbb7 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-7faq288a/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.inventoryClass.relativeDirectory clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:927 Prefetching flake /build/pytest-7faq288a/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.machines.x86_64-linux.{my_machine}.config.clan.core.vars.generators.*.{share,dependencies,prompts,validationHash} clan-pytest-with-core> ______________ test_generate_secret_var_sops_minimal_select_calls ______________ clan-pytest-with-core> [gw9] linux -- Python 3.14.7 /nix/store/3n4qphl9s728sz8frmpqqrv9b1m87g68-python3-3.14.7/bin/python clan-pytest-with-core> clan-pytest-with-core> self = Flake(identifier='/build/pytest-6njkxjyg/flake', hash='sha256-38JcfIHnZju47I13YF49j77qFBGEnbSpo2oJNO2GyrA=', 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.?secrets.?age.?plugins', 'clanInternals.machines.x86_64-linux.{machine1,machine2,machine3}.config.clan...', 'clanInternals.machines.x86_64-linux.{machine1,machine2,machine3}.config.clan.core.vars.settings.secretModule', ...] 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-6njkxjyg/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/5vr2i4yd6l4pskpqbbsqy8qwwys536nn-source?narHash=sha256-38JcfIHnZju47I13YF49j77qFBGEnbSpo2oJNO2GyrA="; 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": "maybe", "value": "secrets"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "plugins"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}, {"type": "str", "value": "machine3"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "share"}, {"type": "str", "value": "dependencies"}, {"type": "str", "value": "prompts"}, {"type": "str", "value": "validationHash"}]}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}, {"type": "str", "value": "machine3"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "str", "value": "files"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "secret"}, {"type": "str", "value": "deploy"}, {"type": "str", "value": "owner"}, {"type": "str", "value": "group"}, {"type": "str", "value": "mode"}, {"type": "str", "value": "neededFor"}]}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}, {"type": "str", "value": "machine3"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "defaultGroups"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}, {"type": "str", "value": "machine3"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "publicModule"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}, {"type": "str", "value": "machine3"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "secretModule"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}, {"type": "str", "value": "machine3"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "secretUploadDirectory"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}, {"type": "str", "value": "machine3"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "passCommand"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}, {"type": "str", "value": "machine3"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "secretLocation"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "maybe", "value": "recipients"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}, {"type": "str", "value": "machine3"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "secretLocation"}]'"'"''"'"') 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": "maybe", "value": "secrets"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "plugins"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}, {"type": "str", "value": "machine3"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "share"}, {"type": "str", "value": "dependencies"}, {"type": "str", "value": "prompts"}, {"type": "str", "value": "validationHash"}]}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}, {"type": "str", "value": "machine3"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "str", "value": "files"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "secret"}, {"type": "str", "value": "deploy"}, {"type": "str", "value": "owner"}, {"type": "str", "value": "group"}, {"type": "str", "value": "mode"}, {"type": "str", "value": "neededFor"}]}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}, {"type": "str", "value": "machine3"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "defaultGroups"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}, {"type": "str", "value": "machine3"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "publicModule"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}, {"type": "str", "value": "machine3"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "secretModule"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}, {"type": "str", "value": "machine3"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "secretUploadDirectory"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}, {"type": "str", "value": "machine3"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "passCommand"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}, {"type": "str", "value": "machine3"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "secretLocation"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "maybe", "value": "recipients"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}, {"type": "str", "value": "machine3"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "secretLocation"}]'') 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": "maybe", "value": "secrets"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "plugins"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}, {"type": "str", "value": "machine3"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "share"}, {"type": "str", "value": "dependencies"}, {"type": "str", "value": "prompts"}, {"type": "str", "value": "validationHash"}]}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}, {"type": "str", "value": "machine3"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "str", "value": "files"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "secret"}, {"type": "str", "value": "deploy"}, {"type": "str", "value": "owner"}, {"type": "str", "value": "group"}, {"type": "str", "value": "mode"}, {"type": "str", "value": "neededFor"}]}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}, {"type": "str", "value": "machine3"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "defaultGroups"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}, {"type": "str", "value": "machine3"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "publicModule"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}, {"type": "str", "value": "machine3"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "secretModule"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}, {"type": "str", "value": "machine3"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "secretUploadDirectory"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}, {"type": "str", "value": "machine3"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "passCommand"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}, {"type": "str", "value": "machine3"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "secretLocation"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "maybe", "value": "recipients"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}, {"type": "str", "value": "machine3"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "secretLocation"}]'') flake) clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating list element at index 1 clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating attribute 'machine1' clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/cba1x9mxnwr8b36cw41bya7g6d5v1p7d-source/select.nix:325:37: clan-pytest-with-core> E 324| in clan-pytest-with-core> E 325| builtins.mapAttrs (_: v: recurse selectors (idx + 1) v) filteredAttrs clan-pytest-with-core> E | ^ clan-pytest-with-core> E 326| else if selector.type == "maybe" then 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:325:40: clan-pytest-with-core> E 324| in clan-pytest-with-core> E 325| builtins.mapAttrs (_: v: recurse selectors (idx + 1) v) filteredAttrs clan-pytest-with-core> E | ^ clan-pytest-with-core> E 326| else if selector.type == "maybe" then 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 … from call site clan-pytest-with-core> E at /build/store/nix/store/cba1x9mxnwr8b36cw41bya7g6d5v1p7d-source/select.nix:312:15: clan-pytest-with-core> E 311| else if selector.type == "str" then clan-pytest-with-core> E 312| recurse selectors (idx + 1) (builtins.getAttr selector.value obj) clan-pytest-with-core> E | ^ clan-pytest-with-core> E 313| else if selector.type == "set" then 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 'getAttr' builtin clan-pytest-with-core> E at /build/store/nix/store/cba1x9mxnwr8b36cw41bya7g6d5v1p7d-source/select.nix:312:44: clan-pytest-with-core> E 311| else if selector.type == "str" then clan-pytest-with-core> E 312| recurse selectors (idx + 1) (builtins.getAttr selector.value obj) clan-pytest-with-core> E | ^ clan-pytest-with-core> E 313| else if selector.type == "set" then clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'seq' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:401:18: clan-pytest-with-core> E 400| options = checked options; clan-pytest-with-core> E 401| config = checked (removeAttrs config [ "_module" ]); clan-pytest-with-core> E | ^ clan-pytest-with-core> E 402| _module = checked (config._module); 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:304:9: clan-pytest-with-core> E 303| checkUnmatched = clan-pytest-with-core> E 304| if config._module.check && config._module.freeformType == null && merged.unmatchedDefns != [ ] then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 305| let clan-pytest-with-core> E clan-pytest-with-core> E … in the right operand of the AND (&&) operator clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:304:72: clan-pytest-with-core> E 303| checkUnmatched = clan-pytest-with-core> E 304| if config._module.check && config._module.freeformType == null && merged.unmatchedDefns != [ ] then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 305| let clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'unmatchedDefns' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:940:7: clan-pytest-with-core> E 939| # Transforms unmatchedDefnsByName into a list of definitions clan-pytest-with-core> E 940| unmatchedDefns = clan-pytest-with-core> E | ^ clan-pytest-with-core> E 941| if configs == [ ] then clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'concatLists' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:946:11: clan-pytest-with-core> E 945| else clan-pytest-with-core> E 946| concatLists ( clan-pytest-with-core> E | ^ clan-pytest-with-core> E 947| mapAttrsToList ( clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:948:21: clan-pytest-with-core> E 947| mapAttrsToList ( clan-pytest-with-core> E 948| name: defs: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 949| map ( clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'map' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:949:15: clan-pytest-with-core> E 948| name: defs: clan-pytest-with-core> E 949| map ( clan-pytest-with-core> E | ^ clan-pytest-with-core> E 950| def: clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:932:22: clan-pytest-with-core> E 931| # Propagate all unmatched definitions from nested option sets clan-pytest-with-core> E 932| mapAttrs (n: v: v.unmatchedDefns) resultsByName clan-pytest-with-core> E | ^ clan-pytest-with-core> E 933| # Plus the definitions for the current prefix that don't have a matching option clan-pytest-with-core> E clan-pytest-with-core> E (10 duplicate frames omitted) clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:932:25: clan-pytest-with-core> E 931| # Propagate all unmatched definitions from nested option sets clan-pytest-with-core> E 932| mapAttrs (n: v: v.unmatchedDefns) resultsByName clan-pytest-with-core> E | ^ clan-pytest-with-core> E 933| # Plus the definitions for the current prefix that don't have a matching option clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:876:15: clan-pytest-with-core> E 875| resultsByName = mapAttrs ( clan-pytest-with-core> E 876| name: decls: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 877| # We're descending into attribute ‘name’. 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:888:9: clan-pytest-with-core> E 887| in clan-pytest-with-core> E 888| if length optionDecls == length decls then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 889| let clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'length' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:888:12: clan-pytest-with-core> E 887| in clan-pytest-with-core> E 888| if length optionDecls == length decls then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 889| let clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'filter' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:882:25: clan-pytest-with-core> E 881| defns' = rawDefinitionsByName.${name} or [ ]; clan-pytest-with-core> E 882| optionDecls = filter ( clan-pytest-with-core> E | ^ clan-pytest-with-core> E 883| m: clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:883:13: clan-pytest-with-core> E 882| optionDecls = filter ( clan-pytest-with-core> E 883| m: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 884| m.options ? _type clan-pytest-with-core> E clan-pytest-with-core> E … in the left operand of the AND (&&) operator clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:885:13: clan-pytest-with-core> E 884| m.options ? _type clan-pytest-with-core> E 885| && (m.options._type == "option" || throwDeclarationTypeError loc m.options._type m._file) clan-pytest-with-core> E | ^ clan-pytest-with-core> E 886| ) decls; clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'options' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:807:15: clan-pytest-with-core> E 806| pos = unsafeGetAttrPos n subtree; clan-pytest-with-core> E 807| options = option; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 808| }) subtree clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:289:73: clan-pytest-with-core> E 288| len = length attrPath; clan-pytest-with-core> E 289| atDepth = n: if n == len then value else { ${elemAt attrPath n} = atDepth (n + 1); }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 290| in clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'atDepth' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:289:17: clan-pytest-with-core> E 288| len = length attrPath; clan-pytest-with-core> E 289| atDepth = n: if n == len then value else { ${elemAt attrPath n} = atDepth (n + 1); }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 290| in clan-pytest-with-core> E clan-pytest-with-core> E … in the right operand of the update (//) operator clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:2047:9: clan-pytest-with-core> E 2046| } clan-pytest-with-core> E 2047| // optionalAttrs (toType != null) { clan-pytest-with-core> E | ^ clan-pytest-with-core> E 2048| type = toType; clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:2047:12: clan-pytest-with-core> E 2046| } clan-pytest-with-core> E 2047| // optionalAttrs (toType != null) { clan-pytest-with-core> E | ^ clan-pytest-with-core> E 2048| type = toType; clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'optionalAttrs' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:1492:25: clan-pytest-with-core> E 1491| */ clan-pytest-with-core> E 1492| optionalAttrs = cond: as: if cond then as else { }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1493| 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:1492:29: clan-pytest-with-core> E 1491| */ clan-pytest-with-core> E 1492| optionalAttrs = cond: as: if cond then as else { }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1493| clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:2036:17: clan-pytest-with-core> E 2035| let clan-pytest-with-core> E 2036| opt = attrByPath to { } options; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 2037| in clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'attrByPath' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:89:24: clan-pytest-with-core> E 88| attrByPath = clan-pytest-with-core> E 89| attrPath: default: set: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 90| let clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:106:5: clan-pytest-with-core> E 105| in clan-pytest-with-core> E 106| attrByPath' 0 set; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 107| clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'attrByPath'' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:93:12: clan-pytest-with-core> E 92| attrByPath' = clan-pytest-with-core> E 93| n: s: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 94| ( clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:102:35: clan-pytest-with-core> E 101| in clan-pytest-with-core> E 102| if s ? ${attr} then attrByPath' (n + 1) s.${attr} else default clan-pytest-with-core> E | ^ clan-pytest-with-core> E 103| ) clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'attrByPath'' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:93:12: clan-pytest-with-core> E 92| attrByPath' = clan-pytest-with-core> E 93| n: s: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 94| ( clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:102:35: clan-pytest-with-core> E 101| in clan-pytest-with-core> E 102| if s ? ${attr} then attrByPath' (n + 1) s.${attr} else default clan-pytest-with-core> E | ^ clan-pytest-with-core> E 103| ) clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'attrByPath'' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:93:12: clan-pytest-with-core> E 92| attrByPath' = clan-pytest-with-core> E 93| n: s: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 94| ( clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:102:35: clan-pytest-with-core> E 101| in clan-pytest-with-core> E 102| if s ? ${attr} then attrByPath' (n + 1) s.${attr} else default clan-pytest-with-core> E | ^ clan-pytest-with-core> E 103| ) clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'attrByPath'' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:93:12: clan-pytest-with-core> E 92| attrByPath' = clan-pytest-with-core> E 93| n: s: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 94| ( clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:102:55: clan-pytest-with-core> E 101| in clan-pytest-with-core> E 102| if s ? ${attr} then attrByPath' (n + 1) s.${attr} else default clan-pytest-with-core> E | ^ clan-pytest-with-core> E 103| ) clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:927:37: clan-pytest-with-core> E 926| clan-pytest-with-core> E 927| matchedOptions = mapAttrs (n: v: v.matchedOptions) resultsByName; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 928| clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'matchedOptions' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:893:13: clan-pytest-with-core> E 892| { clan-pytest-with-core> E 893| matchedOptions = evalOptionValue loc opt defns'; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 894| unmatchedDefns = [ ]; clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:893:30: clan-pytest-with-core> E 892| { clan-pytest-with-core> E 893| matchedOptions = evalOptionValue loc opt defns'; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 894| unmatchedDefns = [ ]; clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'evalOptionValue' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1103:15: clan-pytest-with-core> E 1102| evalOptionValue = clan-pytest-with-core> E 1103| loc: opt: defs: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1104| let clan-pytest-with-core> E clan-pytest-with-core> E … in the left operand of the update (//) operator clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1148:5: clan-pytest-with-core> E 1147| warnDeprecation opt clan-pytest-with-core> E 1148| // { clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1149| value = addErrorContext "while evaluating the option `${showOption loc}':" value; 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1141:9: clan-pytest-with-core> E 1140| warnDeprecation = clan-pytest-with-core> E 1141| if (opt.type.deprecationMessage != null) then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1142| warn "The type `types.${opt.type.name}' of option `${showOption loc}' defined in ${showFiles opt.declarations} is deprecated. ${opt.type.deprecationMessage}" clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:890:19: clan-pytest-with-core> E 889| let clan-pytest-with-core> E 890| opt = fixupOptionType loc (mergeOptionDecls loc decls); clan-pytest-with-core> E | ^ clan-pytest-with-core> E 891| in clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'fixupOptionType' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1473:10: clan-pytest-with-core> E 1472| fixupOptionType = clan-pytest-with-core> E 1473| loc: opt: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1474| if opt.type.getSubModules or null == null then 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1474:5: clan-pytest-with-core> E 1473| loc: opt: clan-pytest-with-core> E 1474| if opt.type.getSubModules or null == null then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1475| opt // { type = opt.type or types.unspecified; } clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'type.getSubModules' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/nixos/modules/services/hardware/bluetooth.nix:72:9: clan-pytest-with-core> E 71| settings = mkOption { clan-pytest-with-core> E 72| type = cfgFmt.type; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 73| default = { }; clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/nixos/modules/services/hardware/bluetooth.nix:26:12: clan-pytest-with-core> E 25| clan-pytest-with-core> E 26| cfgFmt = pkgs.formats.ini { }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 27| clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:727:15: clan-pytest-with-core> E 726| extraArgs = mapAttrs ( clan-pytest-with-core> E 727| name: _: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 728| addErrorContext (context name) ( clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the module argument `pkgs' in "/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/nixos/modules/services/hardware/bluetooth.nix": clan-pytest-with-core> E clan-pytest-with-core> E … noting that argument `pkgs` is not externally provided, so querying `_module.args` instead, requiring `config` clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:731:13: clan-pytest-with-core> E 730| "noting that argument `${name}` is not externally provided, so querying `_module.args` instead, requiring `config`" clan-pytest-with-core> E 731| config._module.args.${name} clan-pytest-with-core> E | ^ clan-pytest-with-core> E 732| ) clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/types.nix:1029:18: clan-pytest-with-core> E 1028| value = mapAttrs ( clan-pytest-with-core> E 1029| n: v: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1030| if lazy then clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'optionalValue.value' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1312:5: clan-pytest-with-core> E 1311| clan-pytest-with-core> E 1312| optionalValue = if isDefined then { value = mergedValue; } else { }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1313| }; 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1312:21: clan-pytest-with-core> E 1311| clan-pytest-with-core> E 1312| optionalValue = if isDefined then { value = mergedValue; } else { }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1313| }; clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'values' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1240:11: clan-pytest-with-core> E 1239| { clan-pytest-with-core> E 1240| values = defsSorted; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1241| inherit (defsFiltered) highestPrio; 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1211:11: clan-pytest-with-core> E 1210| # Avoid sorting if we don't have to. clan-pytest-with-core> E 1211| if any (def: def.value._type or "" == "order") defsFiltered.values then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1212| sortProperties defsFiltered.values clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'any' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1211:14: clan-pytest-with-core> E 1210| # Avoid sorting if we don't have to. clan-pytest-with-core> E 1211| if any (def: def.value._type or "" == "order") defsFiltered.values then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1212| sortProperties defsFiltered.values clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1211:19: clan-pytest-with-core> E 1210| # Avoid sorting if we don't have to. clan-pytest-with-core> E 1211| if any (def: def.value._type or "" == "order") defsFiltered.values then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1212| sortProperties defsFiltered.values clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'value._type' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1422:67: clan-pytest-with-core> E 1421| strip = clan-pytest-with-core> E 1422| def: if def.value._type or "" == "override" then def // { value = def.value.content; } else def; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1423| in clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'value.content' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1566:22: clan-pytest-with-core> E 1565| _type = "override"; clan-pytest-with-core> E 1566| inherit priority content; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1567| }; 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/nixos/modules/misc/nixpkgs.nix:107:15: clan-pytest-with-core> E 106| clan-pytest-with-core> E 107| finalPkgs = if opt.pkgs.isDefined then cfg.pkgs.appendOverlays cfg.overlays else defaultPkgs; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 108| clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'pkgs.isDefined' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1154:21: clan-pytest-with-core> E 1153| definitionsWithLocations = res.defsFinal; clan-pytest-with-core> E 1154| inherit (res) isDefined; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1155| inherit (res.checkedAndMerged) valueMeta; clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'isDefined' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1310:5: clan-pytest-with-core> E 1309| clan-pytest-with-core> E 1310| isDefined = defsFinal != [ ]; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1311| clan-pytest-with-core> E clan-pytest-with-core> E (6 duplicate frames omitted) clan-pytest-with-core> E clan-pytest-with-core> E error: attribute 'system' missing clan-pytest-with-core> E at /build/store/nix/store/y3h139bhv4373m1hab367ma4p5i95i2f-source/modules/clan/module.nix:164:24: clan-pytest-with-core> E 163| (lib.modules.importApply ../../nixosModules/machineModules/overridePkgs.nix { clan-pytest-with-core> E 164| pkgs = nixpkgsMatrix.${config.inventory.machines.${name}.nixpkgs}.system.${system}.pkgs; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 165| }) clan-pytest-with-core> E Did you mean systems? 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 0x7fffe61dc290> clan-pytest-with-core> flake_with_sops = 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_generate_secret_var_sops_minimal_select_calls( clan-pytest-with-core> monkeypatch: pytest.MonkeyPatch, clan-pytest-with-core> flake_with_sops: ClanFlake, clan-pytest-with-core> ) -> None: clan-pytest-with-core> """Test that sops backend doesn't make unnecessary select calls. clan-pytest-with-core> clan-pytest-with-core> This test uses multiple machines and multiple generators to ensure clan-pytest-with-core> that the batching optimization works correctly across the board. clan-pytest-with-core> """ clan-pytest-with-core> flake = flake_with_sops clan-pytest-with-core> clan-pytest-with-core> # Set up first machine with two generators clan-pytest-with-core> machine1_config = flake.machines["machine1"] = create_test_machine_config() clan-pytest-with-core> clan-pytest-with-core> gen1_m1 = machine1_config["clan"]["core"]["vars"]["generators"]["gen1"] clan-pytest-with-core> gen1_m1["files"]["secret1"]["secret"] = True clan-pytest-with-core> gen1_m1["files"]["value1"]["secret"] = False clan-pytest-with-core> gen1_m1["script"] = ( clan-pytest-with-core> 'echo -n "secret1" > "$out"/secret1 && echo -n "value1" > "$out"/value1' clan-pytest-with-core> ) clan-pytest-with-core> clan-pytest-with-core> gen2_m1 = machine1_config["clan"]["core"]["vars"]["generators"]["gen2"] clan-pytest-with-core> gen2_m1["files"]["secret2"]["secret"] = True clan-pytest-with-core> gen2_m1["files"]["value2"]["secret"] = False clan-pytest-with-core> gen2_m1["script"] = ( clan-pytest-with-core> 'echo -n "secret2" > "$out"/secret2 && echo -n "value2" > "$out"/value2' clan-pytest-with-core> ) clan-pytest-with-core> clan-pytest-with-core> # Set up second machine with the same generator configuration clan-pytest-with-core> flake.machines["machine2"] = machine1_config.copy() clan-pytest-with-core> flake.machines["machine3"] = machine1_config.copy() clan-pytest-with-core> clan-pytest-with-core> flake.refresh() clan-pytest-with-core> monkeypatch.chdir(flake.path) clan-pytest-with-core> clan-pytest-with-core> # Create a fresh flake object and invalidate cache to ensure clean state clan-pytest-with-core> invalidate_flake_cache(flake.path) clan-pytest-with-core> flake_obj = Flake(str(flake.path)) clan-pytest-with-core> # Generate secrets for multiple machines - this should result in minimal select calls clan-pytest-with-core> > generate_command( clan-pytest-with-core> argparse.Namespace( clan-pytest-with-core> # don't select all machines, since this can trigger more eval calls clan-pytest-with-core> # due to a difference in `all generators` vs `selected generators` clan-pytest-with-core> machines=["machine1", "machine2"], clan-pytest-with-core> generator=None, clan-pytest-with-core> flake=flake_obj, clan-pytest-with-core> regenerate=False, clan-pytest-with-core> no_sandbox=False, clan-pytest-with-core> ) clan-pytest-with-core> ) clan-pytest-with-core> clan-pytest-with-core> /build/src/clan_cli/tests/test_vars_cache.py:233: clan-pytest-with-core> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ clan-pytest-with-core> /build/src/clan_cli/vars/generate.py:33: in generate_command clan-pytest-with-core> run_generators( clan-pytest-with-core> /build/src/clan_lib/vars/generate.py:306: in run_generators clan-pytest-with-core> all_generators = get_generators(machines, full_closure=True) clan-pytest-with-core> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ clan-pytest-with-core> /build/src/clan_lib/vars/generate.py:146: in get_generators clan-pytest-with-core> flake.precache(get_generators_precache_selectors(list(all_machines))) clan-pytest-with-core> /build/src/clan_lib/flake/flake.py:1151: in precache clan-pytest-with-core> self.get_from_nix(not_fetched_selectors) clan-pytest-with-core> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ clan-pytest-with-core> clan-pytest-with-core> self = Flake(identifier='/build/pytest-6njkxjyg/flake', hash='sha256-38JcfIHnZju47I13YF49j77qFBGEnbSpo2oJNO2GyrA=', 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.?secrets.?age.?plugins', 'clanInternals.machines.x86_64-linux.{machine1,machine2,machine3}.config.clan...', 'clanInternals.machines.x86_64-linux.{machine1,machine2,machine3}.config.clan.core.vars.settings.secretModule', ...] 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 while executing:$ clan select 'clanInternals.?secrets.?age.?plugins' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{machine1,machine2,machine3}.config.clan.core.vars.generators.*.{share,dependencies,prompts,validationHash}' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{machine1,machine2,machine3}.config.clan.core.vars.generators.*.files.*.{secret,deploy,owner,group,mode,neededFor}' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{machine1,machine2,machine3}.config.clan.core.?sops.?defaultGroups' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{machine1,machine2,machine3}.config.clan.core.vars.settings.publicModule' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{machine1,machine2,machine3}.config.clan.core.vars.settings.secretModule' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{machine1,machine2,machine3}.config.clan.core.vars.?sops.?secretUploadDirectory' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{machine1,machine2,machine3}.config.clan.core.vars.?password-store.?passCommand' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{machine1,machine2,machine3}.config.clan.core.vars.?password-store.?secretLocation' clan-pytest-with-core> E $ clan select 'clanInternals.vars.settings.?recipients' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{machine1,machine2,machine3}.config.clan.core.vars.?age.?secretLocation' clan-pytest-with-core> E Reason: attribute 'system' missing clan-pytest-with-core> E at /build/store/nix/store/y3h139bhv4373m1hab367ma4p5i95i2f-source/modules/clan/module.nix:164:24: clan-pytest-with-core> E 163| (lib.modules.importApply ../../nixosModules/machineModules/overridePkgs.nix { clan-pytest-with-core> E 164| pkgs = nixpkgsMatrix.${config.inventory.machines.${name}.nixpkgs}.system.${system}.pkgs; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 165| }) clan-pytest-with-core> E Did you mean systems?. 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 setup ----------------------------- clan-pytest-with-core> !! $HOME does not point to a temp directory!! HOME=/build/pytest-6njkxjyg clan-pytest-with-core> [localhost] $ clan vars keygen --flake /build/pytest-6njkxjyg/flake --user admin --no-interactive clan-pytest-with-core> Caller: /build/src/clan_cli/tests/age_keys.py:31::init clan-pytest-with-core> clan-pytest-with-core> Prefetching flake /build/pytest-6njkxjyg/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/febbcab65441be6ccc547560fd0155faadebbbb7 clan-pytest-with-core> (cached) $ clan select clanInternals.inventoryClass.relativeDirectory 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> git \ clan-pytest-with-core> -C /build/pytest-6njkxjyg/flake \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-6njkxjyg/flake/sops/users/admin 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/admin to git clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-6njkxjyg/flake \ clan-pytest-with-core> diff \ clan-pytest-with-core> --cached --exit-code \ clan-pytest-with-core> -- /build/pytest-6njkxjyg/flake/sops/users/admin 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-6njkxjyg/flake \ clan-pytest-with-core> commit \ clan-pytest-with-core> -m 'secrets: add user admin' \ clan-pytest-with-core> --no-verify /build/pytest-6njkxjyg/flake/sops/users/admin 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/admin to git 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/pytest-6njkxjyg clan-pytest-with-core> DEBUG clan_cli.tests.helpers.cli:__init__.py:143 $ clan vars keygen --flake /build/pytest-6njkxjyg/flake --user admin --no-interactive clan-pytest-with-core> Caller: /build/src/clan_cli/tests/age_keys.py:31::init clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:927 Prefetching flake /build/pytest-6njkxjyg/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/febbcab65441be6ccc547560fd0155faadebbbb7 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.cmd:__init__.py:143 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> DEBUG clan_lib.cmd:__init__.py:143 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> DEBUG clan_cli.secrets.sops:sops.py:99 Found age public key from a private key in the environment (SOPS_AGE_KEY): age1dhwqzkah943xzc34tc3dlmfayyevcmdmxzjezdgdy33euxwf59vsp3vk3c clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:143 git \ clan-pytest-with-core> -C /build/pytest-6njkxjyg/flake \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-6njkxjyg/flake/sops/users/admin 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> DEBUG clan_lib.cmd:__init__.py:143 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> DEBUG clan_lib.git:__init__.py:98 Adding sops/users/admin to git clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:143 git \ clan-pytest-with-core> -C /build/pytest-6njkxjyg/flake \ clan-pytest-with-core> diff \ clan-pytest-with-core> --cached --exit-code \ clan-pytest-with-core> -- /build/pytest-6njkxjyg/flake/sops/users/admin 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> DEBUG clan_lib.cmd:__init__.py:143 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> DEBUG clan_lib.cmd:__init__.py:143 git \ clan-pytest-with-core> -C /build/pytest-6njkxjyg/flake \ clan-pytest-with-core> commit \ clan-pytest-with-core> -m 'secrets: add user admin' \ clan-pytest-with-core> --no-verify /build/pytest-6njkxjyg/flake/sops/users/admin 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> DEBUG clan_lib.cmd:__init__.py:143 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> INFO clan_lib.git:__init__.py:141 Committed sops/users/admin to git clan-pytest-with-core> ----------------------------- Captured stdout call ----------------------------- clan-pytest-with-core> [main 60ffea3] flake: update by flake generator clan-pytest-with-core> 6 files changed, 144 insertions(+) clan-pytest-with-core> create mode 100644 machines/machine1/configuration.json clan-pytest-with-core> create mode 100644 machines/machine1/configuration.nix clan-pytest-with-core> create mode 100644 machines/machine2/configuration.json clan-pytest-with-core> create mode 100644 machines/machine2/configuration.nix clan-pytest-with-core> create mode 100644 machines/machine3/configuration.json clan-pytest-with-core> create mode 100644 machines/machine3/configuration.nix clan-pytest-with-core> ----------------------------- Captured stderr call ----------------------------- clan-pytest-with-core> Prefetching flake /build/pytest-6njkxjyg/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/d2c0050d97832c3ac5193485b93705d00938c15e clan-pytest-with-core> (cached) $ clan select clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> Prefetching flake /build/pytest-6njkxjyg/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/d2c0050d97832c3ac5193485b93705d00938c15e clan-pytest-with-core> (cached) $ clan select clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> Prefetching flake /build/pytest-6njkxjyg/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/d2c0050d97832c3ac5193485b93705d00938c15e clan-pytest-with-core> (cached) $ clan select clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> git \ clan-pytest-with-core> add \ clan-pytest-with-core> /build/pytest-6njkxjyg/flake/.cache_invalidation_1787050286.797492 clan-pytest-with-core> Caller: /build/src/clan_cli/tests/helpers/flake_cache.py:15::invalidate_flake_cache clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_cli/tests/helpers/flake_cache.py:15::invalidate_flake_cache clan-pytest-with-core> clan-pytest-with-core> Prefetching flake /build/pytest-6njkxjyg/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.cliChecks clan-pytest-with-core> Cache miss for clanInternals.inventoryClass.inventorySerialization.{instances,machines,meta} clan-pytest-with-core> Loading flake cache from file /build/clan-flake-cache/flakes-v2/299f9db84d58a73f131ebb7486becc04135ad65a clan-pytest-with-core> Cache miss for clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> Loading flake cache from file /build/clan-flake-cache/flakes-v2/299f9db84d58a73f131ebb7486becc04135ad65a clan-pytest-with-core> (cached) $ clan select 'clanInternals.inventoryClass.inventorySerialization.{instances,machines,meta}' clan-pytest-with-core> Precaching selectors: clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.machines clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.instances clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.meta clan-pytest-with-core> - (not cached) clanInternals.?secrets.?age.?plugins clan-pytest-with-core> - (cached) clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2,machine3}.config.clan.core.vars.generators.*.{share,dependencies,prompts,validationHash} clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2,machine3}.config.clan.core.vars.generators.*.files.*.{secret,deploy,owner,group,mode,neededFor} clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2,machine3}.config.clan.core.?sops.?defaultGroups clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2,machine3}.config.clan.core.vars.settings.publicModule clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2,machine3}.config.clan.core.vars.settings.secretModule clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2,machine3}.config.clan.core.vars.?sops.?secretUploadDirectory clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2,machine3}.config.clan.core.vars.?password-store.?passCommand clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2,machine3}.config.clan.core.vars.?password-store.?secretLocation clan-pytest-with-core> - (not cached) clanInternals.vars.settings.?recipients clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2,machine3}.config.clan.core.vars.?age.?secretLocation clan-pytest-with-core> ------------------------------ Captured log call ------------------------------- clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:927 Prefetching flake /build/pytest-6njkxjyg/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/d2c0050d97832c3ac5193485b93705d00938c15e 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-6njkxjyg/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/d2c0050d97832c3ac5193485b93705d00938c15e 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-6njkxjyg/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/d2c0050d97832c3ac5193485b93705d00938c15e 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.cmd:__init__.py:143 git \ clan-pytest-with-core> add \ clan-pytest-with-core> /build/pytest-6njkxjyg/flake/.cache_invalidation_1787050286.797492 clan-pytest-with-core> Caller: /build/src/clan_cli/tests/helpers/flake_cache.py:15::invalidate_flake_cache clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:143 Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_cli/tests/helpers/flake_cache.py:15::invalidate_flake_cache clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:927 Prefetching flake /build/pytest-6njkxjyg/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.cliChecks clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1174 Cache miss for clanInternals.inventoryClass.inventorySerialization.{instances,machines,meta} clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:789 Loading flake cache from file /build/clan-flake-cache/flakes-v2/299f9db84d58a73f131ebb7486becc04135ad65a clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1174 Cache miss for clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:789 Loading flake cache from file /build/clan-flake-cache/flakes-v2/299f9db84d58a73f131ebb7486becc04135ad65a clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1179 (cached) $ clan select 'clanInternals.inventoryClass.inventorySerialization.{instances,machines,meta}' clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1144 Precaching selectors: clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.machines clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.instances clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.meta clan-pytest-with-core> - (not cached) clanInternals.?secrets.?age.?plugins clan-pytest-with-core> - (cached) clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2,machine3}.config.clan.core.vars.generators.*.{share,dependencies,prompts,validationHash} clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2,machine3}.config.clan.core.vars.generators.*.files.*.{secret,deploy,owner,group,mode,neededFor} clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2,machine3}.config.clan.core.?sops.?defaultGroups clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2,machine3}.config.clan.core.vars.settings.publicModule clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2,machine3}.config.clan.core.vars.settings.secretModule clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2,machine3}.config.clan.core.vars.?sops.?secretUploadDirectory clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2,machine3}.config.clan.core.vars.?password-store.?passCommand clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2,machine3}.config.clan.core.vars.?password-store.?secretLocation clan-pytest-with-core> - (not cached) clanInternals.vars.settings.?recipients clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2,machine3}.config.clan.core.vars.?age.?secretLocation clan-pytest-with-core> __________________________ test_known_selectors_exist __________________________ clan-pytest-with-core> [gw2] linux -- Python 3.14.7 /nix/store/3n4qphl9s728sz8frmpqqrv9b1m87g68-python3-3.14.7/bin/python clan-pytest-with-core> clan-pytest-with-core> self = Flake(identifier='/build/pytest-of-nixbld/pytest-0/popen-gw2/test_known_selectors_exist0/my-clan', hash='sha256-tbdVKt...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.machines.x86_64-linux."jon".config.clan.core.backups'] 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> 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/src'), log=, prefix=None, m...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/9597k80vpih8vrfmsyw0j1dnba7zrz37-source?narHash=sha256-tbdVKtpvWQ2a6EUCLg8n+7ebskgOan2SPOs1z6NeiJs="; 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": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "str", "value": "jon"}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "backups"}]'"'"''"'"') 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": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "str", "value": "jon"}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "backups"}]'') 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": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "str", "value": "jon"}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "backups"}]'') 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": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "str", "value": "jon"}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "backups"}]'') 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 … from call site clan-pytest-with-core> E at /build/store/nix/store/cba1x9mxnwr8b36cw41bya7g6d5v1p7d-source/select.nix:312:15: clan-pytest-with-core> E 311| else if selector.type == "str" then clan-pytest-with-core> E 312| recurse selectors (idx + 1) (builtins.getAttr selector.value obj) clan-pytest-with-core> E | ^ clan-pytest-with-core> E 313| else if selector.type == "set" then clan-pytest-with-core> E clan-pytest-with-core> E (9 duplicate frames omitted) 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 'getAttr' builtin clan-pytest-with-core> E at /build/store/nix/store/cba1x9mxnwr8b36cw41bya7g6d5v1p7d-source/select.nix:312:44: clan-pytest-with-core> E 311| else if selector.type == "str" then clan-pytest-with-core> E 312| recurse selectors (idx + 1) (builtins.getAttr selector.value obj) clan-pytest-with-core> E | ^ clan-pytest-with-core> E 313| else if selector.type == "set" then clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'seq' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:401:18: clan-pytest-with-core> E 400| options = checked options; clan-pytest-with-core> E 401| config = checked (removeAttrs config [ "_module" ]); clan-pytest-with-core> E | ^ clan-pytest-with-core> E 402| _module = checked (config._module); 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:304:9: clan-pytest-with-core> E 303| checkUnmatched = clan-pytest-with-core> E 304| if config._module.check && config._module.freeformType == null && merged.unmatchedDefns != [ ] then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 305| let clan-pytest-with-core> E clan-pytest-with-core> E … in the right operand of the AND (&&) operator clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:304:72: clan-pytest-with-core> E 303| checkUnmatched = clan-pytest-with-core> E 304| if config._module.check && config._module.freeformType == null && merged.unmatchedDefns != [ ] then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 305| let clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'unmatchedDefns' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:940:7: clan-pytest-with-core> E 939| # Transforms unmatchedDefnsByName into a list of definitions clan-pytest-with-core> E 940| unmatchedDefns = clan-pytest-with-core> E | ^ clan-pytest-with-core> E 941| if configs == [ ] then clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'concatLists' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:946:11: clan-pytest-with-core> E 945| else clan-pytest-with-core> E 946| concatLists ( clan-pytest-with-core> E | ^ clan-pytest-with-core> E 947| mapAttrsToList ( clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:948:21: clan-pytest-with-core> E 947| mapAttrsToList ( clan-pytest-with-core> E 948| name: defs: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 949| map ( clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'map' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:949:15: clan-pytest-with-core> E 948| name: defs: clan-pytest-with-core> E 949| map ( clan-pytest-with-core> E | ^ clan-pytest-with-core> E 950| def: clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:932:22: clan-pytest-with-core> E 931| # Propagate all unmatched definitions from nested option sets clan-pytest-with-core> E 932| mapAttrs (n: v: v.unmatchedDefns) resultsByName clan-pytest-with-core> E | ^ clan-pytest-with-core> E 933| # Plus the definitions for the current prefix that don't have a matching option clan-pytest-with-core> E clan-pytest-with-core> E (10 duplicate frames omitted) clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:932:25: clan-pytest-with-core> E 931| # Propagate all unmatched definitions from nested option sets clan-pytest-with-core> E 932| mapAttrs (n: v: v.unmatchedDefns) resultsByName clan-pytest-with-core> E | ^ clan-pytest-with-core> E 933| # Plus the definitions for the current prefix that don't have a matching option clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:876:15: clan-pytest-with-core> E 875| resultsByName = mapAttrs ( clan-pytest-with-core> E 876| name: decls: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 877| # We're descending into attribute ‘name’. 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:888:9: clan-pytest-with-core> E 887| in clan-pytest-with-core> E 888| if length optionDecls == length decls then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 889| let clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'length' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:888:12: clan-pytest-with-core> E 887| in clan-pytest-with-core> E 888| if length optionDecls == length decls then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 889| let clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'filter' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:882:25: clan-pytest-with-core> E 881| defns' = rawDefinitionsByName.${name} or [ ]; clan-pytest-with-core> E 882| optionDecls = filter ( clan-pytest-with-core> E | ^ clan-pytest-with-core> E 883| m: clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:883:13: clan-pytest-with-core> E 882| optionDecls = filter ( clan-pytest-with-core> E 883| m: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 884| m.options ? _type clan-pytest-with-core> E clan-pytest-with-core> E … in the left operand of the AND (&&) operator clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:885:13: clan-pytest-with-core> E 884| m.options ? _type clan-pytest-with-core> E 885| && (m.options._type == "option" || throwDeclarationTypeError loc m.options._type m._file) clan-pytest-with-core> E | ^ clan-pytest-with-core> E 886| ) decls; clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'options' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:807:15: clan-pytest-with-core> E 806| pos = unsafeGetAttrPos n subtree; clan-pytest-with-core> E 807| options = option; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 808| }) subtree clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:289:73: clan-pytest-with-core> E 288| len = length attrPath; clan-pytest-with-core> E 289| atDepth = n: if n == len then value else { ${elemAt attrPath n} = atDepth (n + 1); }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 290| in clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'atDepth' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:289:17: clan-pytest-with-core> E 288| len = length attrPath; clan-pytest-with-core> E 289| atDepth = n: if n == len then value else { ${elemAt attrPath n} = atDepth (n + 1); }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 290| in clan-pytest-with-core> E clan-pytest-with-core> E … in the right operand of the update (//) operator clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:2047:9: clan-pytest-with-core> E 2046| } clan-pytest-with-core> E 2047| // optionalAttrs (toType != null) { clan-pytest-with-core> E | ^ clan-pytest-with-core> E 2048| type = toType; clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:2047:12: clan-pytest-with-core> E 2046| } clan-pytest-with-core> E 2047| // optionalAttrs (toType != null) { clan-pytest-with-core> E | ^ clan-pytest-with-core> E 2048| type = toType; clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'optionalAttrs' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:1492:25: clan-pytest-with-core> E 1491| */ clan-pytest-with-core> E 1492| optionalAttrs = cond: as: if cond then as else { }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1493| 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:1492:29: clan-pytest-with-core> E 1491| */ clan-pytest-with-core> E 1492| optionalAttrs = cond: as: if cond then as else { }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1493| clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:2036:17: clan-pytest-with-core> E 2035| let clan-pytest-with-core> E 2036| opt = attrByPath to { } options; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 2037| in clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'attrByPath' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:89:24: clan-pytest-with-core> E 88| attrByPath = clan-pytest-with-core> E 89| attrPath: default: set: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 90| let clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:106:5: clan-pytest-with-core> E 105| in clan-pytest-with-core> E 106| attrByPath' 0 set; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 107| clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'attrByPath'' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:93:12: clan-pytest-with-core> E 92| attrByPath' = clan-pytest-with-core> E 93| n: s: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 94| ( clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:102:35: clan-pytest-with-core> E 101| in clan-pytest-with-core> E 102| if s ? ${attr} then attrByPath' (n + 1) s.${attr} else default clan-pytest-with-core> E | ^ clan-pytest-with-core> E 103| ) clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'attrByPath'' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:93:12: clan-pytest-with-core> E 92| attrByPath' = clan-pytest-with-core> E 93| n: s: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 94| ( clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:102:35: clan-pytest-with-core> E 101| in clan-pytest-with-core> E 102| if s ? ${attr} then attrByPath' (n + 1) s.${attr} else default clan-pytest-with-core> E | ^ clan-pytest-with-core> E 103| ) clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'attrByPath'' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:93:12: clan-pytest-with-core> E 92| attrByPath' = clan-pytest-with-core> E 93| n: s: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 94| ( clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:102:35: clan-pytest-with-core> E 101| in clan-pytest-with-core> E 102| if s ? ${attr} then attrByPath' (n + 1) s.${attr} else default clan-pytest-with-core> E | ^ clan-pytest-with-core> E 103| ) clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'attrByPath'' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:93:12: clan-pytest-with-core> E 92| attrByPath' = clan-pytest-with-core> E 93| n: s: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 94| ( clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:102:55: clan-pytest-with-core> E 101| in clan-pytest-with-core> E 102| if s ? ${attr} then attrByPath' (n + 1) s.${attr} else default clan-pytest-with-core> E | ^ clan-pytest-with-core> E 103| ) clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:927:37: clan-pytest-with-core> E 926| clan-pytest-with-core> E 927| matchedOptions = mapAttrs (n: v: v.matchedOptions) resultsByName; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 928| clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'matchedOptions' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:893:13: clan-pytest-with-core> E 892| { clan-pytest-with-core> E 893| matchedOptions = evalOptionValue loc opt defns'; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 894| unmatchedDefns = [ ]; clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:893:30: clan-pytest-with-core> E 892| { clan-pytest-with-core> E 893| matchedOptions = evalOptionValue loc opt defns'; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 894| unmatchedDefns = [ ]; clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'evalOptionValue' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1103:15: clan-pytest-with-core> E 1102| evalOptionValue = clan-pytest-with-core> E 1103| loc: opt: defs: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1104| let clan-pytest-with-core> E clan-pytest-with-core> E … in the left operand of the update (//) operator clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1148:5: clan-pytest-with-core> E 1147| warnDeprecation opt clan-pytest-with-core> E 1148| // { clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1149| value = addErrorContext "while evaluating the option `${showOption loc}':" value; 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1141:9: clan-pytest-with-core> E 1140| warnDeprecation = clan-pytest-with-core> E 1141| if (opt.type.deprecationMessage != null) then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1142| warn "The type `types.${opt.type.name}' of option `${showOption loc}' defined in ${showFiles opt.declarations} is deprecated. ${opt.type.deprecationMessage}" clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:890:19: clan-pytest-with-core> E 889| let clan-pytest-with-core> E 890| opt = fixupOptionType loc (mergeOptionDecls loc decls); clan-pytest-with-core> E | ^ clan-pytest-with-core> E 891| in clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'fixupOptionType' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1473:10: clan-pytest-with-core> E 1472| fixupOptionType = clan-pytest-with-core> E 1473| loc: opt: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1474| if opt.type.getSubModules or null == null then 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1474:5: clan-pytest-with-core> E 1473| loc: opt: clan-pytest-with-core> E 1474| if opt.type.getSubModules or null == null then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1475| opt // { type = opt.type or types.unspecified; } clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'type.getSubModules' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/nixos/modules/services/hardware/bluetooth.nix:72:9: clan-pytest-with-core> E 71| settings = mkOption { clan-pytest-with-core> E 72| type = cfgFmt.type; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 73| default = { }; clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/nixos/modules/services/hardware/bluetooth.nix:26:12: clan-pytest-with-core> E 25| clan-pytest-with-core> E 26| cfgFmt = pkgs.formats.ini { }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 27| clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:727:15: clan-pytest-with-core> E 726| extraArgs = mapAttrs ( clan-pytest-with-core> E 727| name: _: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 728| addErrorContext (context name) ( clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the module argument `pkgs' in "/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/nixos/modules/services/hardware/bluetooth.nix": clan-pytest-with-core> E clan-pytest-with-core> E … noting that argument `pkgs` is not externally provided, so querying `_module.args` instead, requiring `config` clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:731:13: clan-pytest-with-core> E 730| "noting that argument `${name}` is not externally provided, so querying `_module.args` instead, requiring `config`" clan-pytest-with-core> E 731| config._module.args.${name} clan-pytest-with-core> E | ^ clan-pytest-with-core> E 732| ) clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/types.nix:1029:18: clan-pytest-with-core> E 1028| value = mapAttrs ( clan-pytest-with-core> E 1029| n: v: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1030| if lazy then clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'optionalValue.value' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1312:5: clan-pytest-with-core> E 1311| clan-pytest-with-core> E 1312| optionalValue = if isDefined then { value = mergedValue; } else { }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1313| }; 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1312:21: clan-pytest-with-core> E 1311| clan-pytest-with-core> E 1312| optionalValue = if isDefined then { value = mergedValue; } else { }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1313| }; clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'values' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1240:11: clan-pytest-with-core> E 1239| { clan-pytest-with-core> E 1240| values = defsSorted; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1241| inherit (defsFiltered) highestPrio; 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1211:11: clan-pytest-with-core> E 1210| # Avoid sorting if we don't have to. clan-pytest-with-core> E 1211| if any (def: def.value._type or "" == "order") defsFiltered.values then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1212| sortProperties defsFiltered.values clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'any' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1211:14: clan-pytest-with-core> E 1210| # Avoid sorting if we don't have to. clan-pytest-with-core> E 1211| if any (def: def.value._type or "" == "order") defsFiltered.values then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1212| sortProperties defsFiltered.values clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1211:19: clan-pytest-with-core> E 1210| # Avoid sorting if we don't have to. clan-pytest-with-core> E 1211| if any (def: def.value._type or "" == "order") defsFiltered.values then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1212| sortProperties defsFiltered.values clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'value._type' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1422:67: clan-pytest-with-core> E 1421| strip = clan-pytest-with-core> E 1422| def: if def.value._type or "" == "override" then def // { value = def.value.content; } else def; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1423| in clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'value.content' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1566:22: clan-pytest-with-core> E 1565| _type = "override"; clan-pytest-with-core> E 1566| inherit priority content; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1567| }; 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/nixos/modules/misc/nixpkgs.nix:107:15: clan-pytest-with-core> E 106| clan-pytest-with-core> E 107| finalPkgs = if opt.pkgs.isDefined then cfg.pkgs.appendOverlays cfg.overlays else defaultPkgs; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 108| clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'pkgs.isDefined' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1154:21: clan-pytest-with-core> E 1153| definitionsWithLocations = res.defsFinal; clan-pytest-with-core> E 1154| inherit (res) isDefined; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1155| inherit (res.checkedAndMerged) valueMeta; clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'isDefined' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1310:5: clan-pytest-with-core> E 1309| clan-pytest-with-core> E 1310| isDefined = defsFinal != [ ]; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1311| clan-pytest-with-core> E clan-pytest-with-core> E (6 duplicate frames omitted) clan-pytest-with-core> E clan-pytest-with-core> E error: attribute 'system' missing clan-pytest-with-core> E at /build/store/nix/store/y3h139bhv4373m1hab367ma4p5i95i2f-source/modules/clan/module.nix:164:24: clan-pytest-with-core> E 163| (lib.modules.importApply ../../nixosModules/machineModules/overridePkgs.nix { clan-pytest-with-core> E 164| pkgs = nixpkgsMatrix.${config.inventory.machines.${name}.nixpkgs}.system.${system}.pkgs; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 165| }) clan-pytest-with-core> E Did you mean systems? clan-pytest-with-core> E clan-pytest-with-core> E Return Code: 1 clan-pytest-with-core> clan-pytest-with-core> 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> clan_flake = .factory at 0x7fffe66cfc10> 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_known_selectors_exist(clan_flake: Callable[..., Flake]) -> None: clan-pytest-with-core> """Test that every selector""" clan-pytest-with-core> clan_config: ClanInput = { clan-pytest-with-core> "inventory": { clan-pytest-with-core> "meta": {"name": "test-clan"}, clan-pytest-with-core> "machines": { clan-pytest-with-core> "jon": {}, clan-pytest-with-core> "sara": {"machineClass": "darwin"}, clan-pytest-with-core> }, clan-pytest-with-core> } clan-pytest-with-core> } clan-pytest-with-core> clan-pytest-with-core> raw_clan = r""" clan-pytest-with-core> let clan-pytest-with-core> generator = { clan-pytest-with-core> files.password.deploy = false; clan-pytest-with-core> clan-pytest-with-core> prompts.password.display = { clan-pytest-with-core> group = "User"; clan-pytest-with-core> label = "Password"; clan-pytest-with-core> required = false; clan-pytest-with-core> helperText = '' clan-pytest-with-core> Your password will be encrypted and stored securely using the secret store you've configured. clan-pytest-with-core> ''; clan-pytest-with-core> }; clan-pytest-with-core> clan-pytest-with-core> prompts.password.type = "hidden"; clan-pytest-with-core> prompts.password.persist = true; clan-pytest-with-core> prompts.password.description = "Leave empty to generate automatically"; clan-pytest-with-core> clan-pytest-with-core> script = '' clan-pytest-with-core> echo "login" > $out/password clan-pytest-with-core> ''; clan-pytest-with-core> }; clan-pytest-with-core> in clan-pytest-with-core> { clan-pytest-with-core> # Minimal system configuration clan-pytest-with-core> machines.jon = { clan-pytest-with-core> system.stateVersion = "25.11"; clan-pytest-with-core> nixpkgs.hostPlatform = "x86_64-linux"; clan-pytest-with-core> clan.core.vars.generators.testgen = generator; clan-pytest-with-core> }; clan-pytest-with-core> machines.sara = { clan-pytest-with-core> system.stateVersion = 5; clan-pytest-with-core> nixpkgs.hostPlatform = "aarch64-darwin"; clan-pytest-with-core> clan.core.vars.generators.testgen = generator; clan-pytest-with-core> }; clan-pytest-with-core> } clan-pytest-with-core> """ clan-pytest-with-core> clan-pytest-with-core> flake = clan_flake(clan_config, raw_clan) clan-pytest-with-core> machines = list_machines(flake) clan-pytest-with-core> assert list(machines.keys()) == ["jon", "sara"] clan-pytest-with-core> clan-pytest-with-core> config = nix_config() clan-pytest-with-core> system = config["system"] clan-pytest-with-core> generator_name = "testgen" clan-pytest-with-core> clan-pytest-with-core> # Build the full list of selectors first so we can resolve them in a clan-pytest-with-core> # single nix invocation. Selecting one at a time spawns a fresh nix clan-pytest-with-core> # build per selector (~10s each on a busy CI builder). clan-pytest-with-core> selectors: list[tuple[str, str]] = [ clan-pytest-with-core> (fn.__name__, fn()) for fn in nix_selectors.STATIC_SELECTORS clan-pytest-with-core> ] clan-pytest-with-core> selectors += [ clan-pytest-with-core> (fn.__name__, fn("Y2xhbi1jaW9yZS1uZXZlci1kZXBlbmQtb24tbWU", "*")) clan-pytest-with-core> for fn in nix_selectors.MODULE_SELECTORS clan-pytest-with-core> ] clan-pytest-with-core> for machine_name in machines: clan-pytest-with-core> selectors += [ clan-pytest-with-core> (fn.__name__, fn(system, machine_name)) clan-pytest-with-core> for fn in nix_selectors.MACHINE_SELECTORS clan-pytest-with-core> ] clan-pytest-with-core> selectors += [ clan-pytest-with-core> (fn.__name__, fn(system, machine_name, generator_name)) clan-pytest-with-core> for fn in nix_selectors.GENERATOR_SELECTORS clan-pytest-with-core> ] clan-pytest-with-core> selectors += [ clan-pytest-with-core> (fn.__name__, fn(system, list(machines))) clan-pytest-with-core> for fn in nix_selectors.MACHINES_SELECTORS clan-pytest-with-core> ] clan-pytest-with-core> clan-pytest-with-core> # Try to resolve everything in one nix build. If that succeeds, the clan-pytest-with-core> # per-selector loop below is just cache lookups. If it fails, fall back clan-pytest-with-core> # to one-by-one so the failure points at the offending selector. clan-pytest-with-core> with contextlib.suppress(ClanError): clan-pytest-with-core> flake.precache([sel for _, sel in selectors]) clan-pytest-with-core> clan-pytest-with-core> for name, selector_str in selectors: clan-pytest-with-core> try: clan-pytest-with-core> > flake.select(selector_str) clan-pytest-with-core> clan-pytest-with-core> clan_lib/tests/test_known_selectors.py:111: clan-pytest-with-core> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ clan-pytest-with-core> 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-of-nixbld/pytest-0/popen-gw2/test_known_selectors_exist0/my-clan', hash='sha256-tbdVKt...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.machines.x86_64-linux."jon".config.clan.core.backups'] 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.machines.x86_64-linux."jon".config.clan.core.backups' clan-pytest-with-core> E Reason: attribute 'system' missing clan-pytest-with-core> E at /build/store/nix/store/y3h139bhv4373m1hab367ma4p5i95i2f-source/modules/clan/module.nix:164:24: clan-pytest-with-core> E 163| (lib.modules.importApply ../../nixosModules/machineModules/overridePkgs.nix { clan-pytest-with-core> E 164| pkgs = nixpkgsMatrix.${config.inventory.machines.${name}.nixpkgs}.system.${system}.pkgs; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 165| }) clan-pytest-with-core> E Did you mean systems?. Use flag '--debug' to see full nix trace. clan-pytest-with-core> clan-pytest-with-core> clan_lib/flake/flake.py:1094: ClanSelectError clan-pytest-with-core> clan-pytest-with-core> During handling of the above exception, another exception occurred: clan-pytest-with-core> clan-pytest-with-core> clan_flake = .factory at 0x7fffe66cfc10> 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_known_selectors_exist(clan_flake: Callable[..., Flake]) -> None: clan-pytest-with-core> """Test that every selector""" clan-pytest-with-core> clan_config: ClanInput = { clan-pytest-with-core> "inventory": { clan-pytest-with-core> "meta": {"name": "test-clan"}, clan-pytest-with-core> "machines": { clan-pytest-with-core> "jon": {}, clan-pytest-with-core> "sara": {"machineClass": "darwin"}, clan-pytest-with-core> }, clan-pytest-with-core> } clan-pytest-with-core> } clan-pytest-with-core> clan-pytest-with-core> raw_clan = r""" clan-pytest-with-core> let clan-pytest-with-core> generator = { clan-pytest-with-core> files.password.deploy = false; clan-pytest-with-core> clan-pytest-with-core> prompts.password.display = { clan-pytest-with-core> group = "User"; clan-pytest-with-core> label = "Password"; clan-pytest-with-core> required = false; clan-pytest-with-core> helperText = '' clan-pytest-with-core> Your password will be encrypted and stored securely using the secret store you've configured. clan-pytest-with-core> ''; clan-pytest-with-core> }; clan-pytest-with-core> clan-pytest-with-core> prompts.password.type = "hidden"; clan-pytest-with-core> prompts.password.persist = true; clan-pytest-with-core> prompts.password.description = "Leave empty to generate automatically"; clan-pytest-with-core> clan-pytest-with-core> script = '' clan-pytest-with-core> echo "login" > $out/password clan-pytest-with-core> ''; clan-pytest-with-core> }; clan-pytest-with-core> in clan-pytest-with-core> { clan-pytest-with-core> # Minimal system configuration clan-pytest-with-core> machines.jon = { clan-pytest-with-core> system.stateVersion = "25.11"; clan-pytest-with-core> nixpkgs.hostPlatform = "x86_64-linux"; clan-pytest-with-core> clan.core.vars.generators.testgen = generator; clan-pytest-with-core> }; clan-pytest-with-core> machines.sara = { clan-pytest-with-core> system.stateVersion = 5; clan-pytest-with-core> nixpkgs.hostPlatform = "aarch64-darwin"; clan-pytest-with-core> clan.core.vars.generators.testgen = generator; clan-pytest-with-core> }; clan-pytest-with-core> } clan-pytest-with-core> """ clan-pytest-with-core> clan-pytest-with-core> flake = clan_flake(clan_config, raw_clan) clan-pytest-with-core> machines = list_machines(flake) clan-pytest-with-core> assert list(machines.keys()) == ["jon", "sara"] clan-pytest-with-core> clan-pytest-with-core> config = nix_config() clan-pytest-with-core> system = config["system"] clan-pytest-with-core> generator_name = "testgen" clan-pytest-with-core> clan-pytest-with-core> # Build the full list of selectors first so we can resolve them in a clan-pytest-with-core> # single nix invocation. Selecting one at a time spawns a fresh nix clan-pytest-with-core> # build per selector (~10s each on a busy CI builder). clan-pytest-with-core> selectors: list[tuple[str, str]] = [ clan-pytest-with-core> (fn.__name__, fn()) for fn in nix_selectors.STATIC_SELECTORS clan-pytest-with-core> ] clan-pytest-with-core> selectors += [ clan-pytest-with-core> (fn.__name__, fn("Y2xhbi1jaW9yZS1uZXZlci1kZXBlbmQtb24tbWU", "*")) clan-pytest-with-core> for fn in nix_selectors.MODULE_SELECTORS clan-pytest-with-core> ] clan-pytest-with-core> for machine_name in machines: clan-pytest-with-core> selectors += [ clan-pytest-with-core> (fn.__name__, fn(system, machine_name)) clan-pytest-with-core> for fn in nix_selectors.MACHINE_SELECTORS clan-pytest-with-core> ] clan-pytest-with-core> selectors += [ clan-pytest-with-core> (fn.__name__, fn(system, machine_name, generator_name)) clan-pytest-with-core> for fn in nix_selectors.GENERATOR_SELECTORS clan-pytest-with-core> ] clan-pytest-with-core> selectors += [ clan-pytest-with-core> (fn.__name__, fn(system, list(machines))) clan-pytest-with-core> for fn in nix_selectors.MACHINES_SELECTORS clan-pytest-with-core> ] clan-pytest-with-core> clan-pytest-with-core> # Try to resolve everything in one nix build. If that succeeds, the clan-pytest-with-core> # per-selector loop below is just cache lookups. If it fails, fall back clan-pytest-with-core> # to one-by-one so the failure points at the offending selector. clan-pytest-with-core> with contextlib.suppress(ClanError): clan-pytest-with-core> flake.precache([sel for _, sel in selectors]) clan-pytest-with-core> clan-pytest-with-core> for name, selector_str in selectors: clan-pytest-with-core> try: clan-pytest-with-core> flake.select(selector_str) clan-pytest-with-core> except ClanError as e: clan-pytest-with-core> > pytest.fail( clan-pytest-with-core> f"Selector '{name}' failed\n Selector: {selector_str}\n Error: {e}" clan-pytest-with-core> ) clan-pytest-with-core> E Failed: Selector 'machine_backups' failed clan-pytest-with-core> E Selector: clanInternals.machines.x86_64-linux."jon".config.clan.core.backups clan-pytest-with-core> E Error: Error on: $ clan select 'clanInternals.machines.x86_64-linux."jon".config.clan.core.backups' clan-pytest-with-core> E Reason: attribute 'system' missing clan-pytest-with-core> E at /build/store/nix/store/y3h139bhv4373m1hab367ma4p5i95i2f-source/modules/clan/module.nix:164:24: clan-pytest-with-core> E 163| (lib.modules.importApply ../../nixosModules/machineModules/overridePkgs.nix { clan-pytest-with-core> E 164| pkgs = nixpkgsMatrix.${config.inventory.machines.${name}.nixpkgs}.system.${system}.pkgs; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 165| }) clan-pytest-with-core> E Did you mean systems?. Use flag '--debug' to see full nix trace. clan-pytest-with-core> clan-pytest-with-core> clan_lib/tests/test_known_selectors.py:113: Failed clan-pytest-with-core> ----------------------------- Captured stderr call ----------------------------- clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-of-nixbld/pytest-0/popen-gw2/test_known_selectors_exist0/my-clan \ clan-pytest-with-core> init clan-pytest-with-core> Caller: ~/src/clan_lib/clan/create.py:156::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: ~/src/clan_lib/clan/create.py:156::create_clan clan-pytest-with-core> clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-of-nixbld/pytest-0/popen-gw2/test_known_selectors_exist0/my-clan \ clan-pytest-with-core> add \ clan-pytest-with-core> . clan-pytest-with-core> Caller: ~/src/clan_lib/clan/create.py:157::create_clan clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: ~/src/clan_lib/clan/create.py:157::create_clan clan-pytest-with-core> clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-of-nixbld/pytest-0/popen-gw2/test_known_selectors_exist0/my-clan \ clan-pytest-with-core> config \ clan-pytest-with-core> user.name clan-pytest-with-core> Caller: ~/src/clan_lib/clan/create.py:160::create_clan clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 1 clan-pytest-with-core> Caller: ~/src/clan_lib/clan/create.py:160::create_clan clan-pytest-with-core> clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-of-nixbld/pytest-0/popen-gw2/test_known_selectors_exist0/my-clan \ clan-pytest-with-core> config \ clan-pytest-with-core> user.name \ clan-pytest-with-core> clan-tool clan-pytest-with-core> Caller: ~/src/clan_lib/clan/create.py:165::create_clan clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: ~/src/clan_lib/clan/create.py:165::create_clan clan-pytest-with-core> clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-of-nixbld/pytest-0/popen-gw2/test_known_selectors_exist0/my-clan \ clan-pytest-with-core> config \ clan-pytest-with-core> user.email clan-pytest-with-core> Caller: ~/src/clan_lib/clan/create.py:167::create_clan clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 1 clan-pytest-with-core> Caller: ~/src/clan_lib/clan/create.py:167::create_clan clan-pytest-with-core> clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-of-nixbld/pytest-0/popen-gw2/test_known_selectors_exist0/my-clan \ clan-pytest-with-core> config \ clan-pytest-with-core> user.email \ clan-pytest-with-core> clan@example.com clan-pytest-with-core> Caller: ~/src/clan_lib/clan/create.py:172::create_clan clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: ~/src/clan_lib/clan/create.py:172::create_clan clan-pytest-with-core> clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-of-nixbld/pytest-0/popen-gw2/test_known_selectors_exist0/my-clan \ clan-pytest-with-core> add \ clan-pytest-with-core> . clan-pytest-with-core> Caller: ~/src/clan_lib/clan/create.py:186::create_clan clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: ~/src/clan_lib/clan/create.py:186::create_clan clan-pytest-with-core> clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-of-nixbld/pytest-0/popen-gw2/test_known_selectors_exist0/my-clan \ clan-pytest-with-core> commit \ clan-pytest-with-core> -m 'Initial commit' clan-pytest-with-core> Caller: ~/src/clan_lib/clan/create.py:187::create_clan clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: ~/src/clan_lib/clan/create.py:187::create_clan clan-pytest-with-core> clan-pytest-with-core> Prefetching flake /build/pytest-of-nixbld/pytest-0/popen-gw2/test_known_selectors_exist0/my-clan 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/c034a164aa1321b113259b8b85694bd30a06e4b6 clan-pytest-with-core> (cached) $ clan select 'clanInternals.inventoryClass.inventorySerialization.{instances,machines,meta}' clan-pytest-with-core> Prefetching flake /build/pytest-of-nixbld/pytest-0/popen-gw2/test_known_selectors_exist0/my-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.inventoryClass.inventorySerialization.{instances,machines,meta} clan-pytest-with-core> Precaching selectors: clan-pytest-with-core> - (not cached) sourceInfo clan-pytest-with-core> - (not cached) clanInternals.?secrets.?age.?plugins clan-pytest-with-core> - (not cached) clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> - (not cached) clan.?exports clan-pytest-with-core> - (not cached) clanInternals.inventoryClass.modulesPerSource clan-pytest-with-core> - (not cached) clanInternals.inventoryClass.staticModules clan-pytest-with-core> - (not cached) clanInternals.vars.settings.?recipients clan-pytest-with-core> - (not cached) clanInternals.inventoryClass.moduleSchemas.Y2xhbi1jaW9yZS1uZXZlci1kZXBlbmQtb24tbWU.* clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux."jon".config.clan.core.backups clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux."jon".config.clan.core.state clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux."jon".config.clan.core.networking.targetHost clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux."jon".config.clan.core.networking.buildHost clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux."jon".config.clan.core.vars.settings.secretModule clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux."jon".config.clan.core.vars.settings.publicModule clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux."jon".config.clan.core.vars.generators."testgen".finalScript clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux."sara".config.clan.core.backups clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux."sara".config.clan.core.state clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux."sara".config.clan.core.networking.targetHost clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux."sara".config.clan.core.networking.buildHost clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux."sara".config.clan.core.vars.settings.secretModule clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux."sara".config.clan.core.vars.settings.publicModule clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux."sara".config.clan.core.vars.generators."testgen".finalScript clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{jon,sara}.config.clan.core.vars.generators.*.{share,dependencies,prompts,validationHash} clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{jon,sara}.config.clan.core.vars.generators.*.files.*.{secret,deploy,owner,group,mode,neededFor} clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{jon,sara}.config.clan.core.?sops.?defaultGroups clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{jon,sara}.config.clan.core.vars.settings.publicModule clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{jon,sara}.config.clan.core.vars.settings.secretModule clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{jon,sara}.config.clan.core.vars.?sops.?secretUploadDirectory clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{jon,sara}.config.clan.core.vars.?password-store.?passCommand clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{jon,sara}.config.clan.core.vars.?password-store.?secretLocation clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{jon,sara}.config.clan.core.vars.settings.?age.?keyFile clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{jon,sara}.config.clan.core.vars.?age.?secretLocation clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{jon,sara}.config.clan.deployment.requireExplicitUpdate clan-pytest-with-core> Cache miss for sourceInfo clan-pytest-with-core> Loading flake cache from file /build/clan-flake-cache/flakes-v2/bda71f2d571cdff4c936f5dd74dcd3410d865b43 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/bda71f2d571cdff4c936f5dd74dcd3410d865b43 clan-pytest-with-core> Cache miss for clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> Loading flake cache from file /build/clan-flake-cache/flakes-v2/bda71f2d571cdff4c936f5dd74dcd3410d865b43 clan-pytest-with-core> Cache miss for clan.?exports clan-pytest-with-core> Loading flake cache from file /build/clan-flake-cache/flakes-v2/bda71f2d571cdff4c936f5dd74dcd3410d865b43 clan-pytest-with-core> Cache miss for clanInternals.inventoryClass.modulesPerSource clan-pytest-with-core> Loading flake cache from file /build/clan-flake-cache/flakes-v2/bda71f2d571cdff4c936f5dd74dcd3410d865b43 clan-pytest-with-core> Cache miss for clanInternals.inventoryClass.staticModules clan-pytest-with-core> Loading flake cache from file /build/clan-flake-cache/flakes-v2/bda71f2d571cdff4c936f5dd74dcd3410d865b43 clan-pytest-with-core> Cache miss for clanInternals.vars.settings.?recipients clan-pytest-with-core> Loading flake cache from file /build/clan-flake-cache/flakes-v2/bda71f2d571cdff4c936f5dd74dcd3410d865b43 clan-pytest-with-core> Cache miss for clanInternals.inventoryClass.moduleSchemas.Y2xhbi1jaW9yZS1uZXZlci1kZXBlbmQtb24tbWU.* clan-pytest-with-core> Loading flake cache from file /build/clan-flake-cache/flakes-v2/bda71f2d571cdff4c936f5dd74dcd3410d865b43 clan-pytest-with-core> Cache miss for clanInternals.machines.x86_64-linux."jon".config.clan.core.backups clan-pytest-with-core> ------------------------------ Captured log call ------------------------------- clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:143 git \ clan-pytest-with-core> -C /build/pytest-of-nixbld/pytest-0/popen-gw2/test_known_selectors_exist0/my-clan \ clan-pytest-with-core> init clan-pytest-with-core> Caller: ~/src/clan_lib/clan/create.py:156::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:143 Command exited with return code 0 clan-pytest-with-core> Caller: ~/src/clan_lib/clan/create.py:156::create_clan clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:143 git \ clan-pytest-with-core> -C /build/pytest-of-nixbld/pytest-0/popen-gw2/test_known_selectors_exist0/my-clan \ clan-pytest-with-core> add \ clan-pytest-with-core> . clan-pytest-with-core> Caller: ~/src/clan_lib/clan/create.py:157::create_clan clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:143 Command exited with return code 0 clan-pytest-with-core> Caller: ~/src/clan_lib/clan/create.py:157::create_clan clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:143 git \ clan-pytest-with-core> -C /build/pytest-of-nixbld/pytest-0/popen-gw2/test_known_selectors_exist0/my-clan \ clan-pytest-with-core> config \ clan-pytest-with-core> user.name clan-pytest-with-core> Caller: ~/src/clan_lib/clan/create.py:160::create_clan clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:143 Command exited with return code 1 clan-pytest-with-core> Caller: ~/src/clan_lib/clan/create.py:160::create_clan clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:143 git \ clan-pytest-with-core> -C /build/pytest-of-nixbld/pytest-0/popen-gw2/test_known_selectors_exist0/my-clan \ clan-pytest-with-core> config \ clan-pytest-with-core> user.name \ clan-pytest-with-core> clan-tool clan-pytest-with-core> Caller: ~/src/clan_lib/clan/create.py:165::create_clan clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:143 Command exited with return code 0 clan-pytest-with-core> Caller: ~/src/clan_lib/clan/create.py:165::create_clan clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:143 git \ clan-pytest-with-core> -C /build/pytest-of-nixbld/pytest-0/popen-gw2/test_known_selectors_exist0/my-clan \ clan-pytest-with-core> config \ clan-pytest-with-core> user.email clan-pytest-with-core> Caller: ~/src/clan_lib/clan/create.py:167::create_clan clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:143 Command exited with return code 1 clan-pytest-with-core> Caller: ~/src/clan_lib/clan/create.py:167::create_clan clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:143 git \ clan-pytest-with-core> -C /build/pytest-of-nixbld/pytest-0/popen-gw2/test_known_selectors_exist0/my-clan \ clan-pytest-with-core> config \ clan-pytest-with-core> user.email \ clan-pytest-with-core> clan@example.com clan-pytest-with-core> Caller: ~/src/clan_lib/clan/create.py:172::create_clan clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:143 Command exited with return code 0 clan-pytest-with-core> Caller: ~/src/clan_lib/clan/create.py:172::create_clan clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:143 git \ clan-pytest-with-core> -C /build/pytest-of-nixbld/pytest-0/popen-gw2/test_known_selectors_exist0/my-clan \ clan-pytest-with-core> add \ clan-pytest-with-core> . clan-pytest-with-core> Caller: ~/src/clan_lib/clan/create.py:186::create_clan clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:143 Command exited with return code 0 clan-pytest-with-core> Caller: ~/src/clan_lib/clan/create.py:186::create_clan clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:143 git \ clan-pytest-with-core> -C /build/pytest-of-nixbld/pytest-0/popen-gw2/test_known_selectors_exist0/my-clan \ clan-pytest-with-core> commit \ clan-pytest-with-core> -m 'Initial commit' clan-pytest-with-core> Caller: ~/src/clan_lib/clan/create.py:187::create_clan clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:143 Command exited with return code 0 clan-pytest-with-core> Caller: ~/src/clan_lib/clan/create.py:187::create_clan clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:927 Prefetching flake /build/pytest-of-nixbld/pytest-0/popen-gw2/test_known_selectors_exist0/my-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:789 Loading flake cache from file /build/clan-flake-cache/flakes-v2/c034a164aa1321b113259b8b85694bd30a06e4b6 clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1179 (cached) $ clan select 'clanInternals.inventoryClass.inventorySerialization.{instances,machines,meta}' clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:927 Prefetching flake /build/pytest-of-nixbld/pytest-0/popen-gw2/test_known_selectors_exist0/my-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.inventoryClass.inventorySerialization.{instances,machines,meta} clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1144 Precaching selectors: clan-pytest-with-core> - (not cached) sourceInfo clan-pytest-with-core> - (not cached) clanInternals.?secrets.?age.?plugins clan-pytest-with-core> - (not cached) clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> - (not cached) clan.?exports clan-pytest-with-core> - (not cached) clanInternals.inventoryClass.modulesPerSource clan-pytest-with-core> - (not cached) clanInternals.inventoryClass.staticModules clan-pytest-with-core> - (not cached) clanInternals.vars.settings.?recipients clan-pytest-with-core> - (not cached) clanInternals.inventoryClass.moduleSchemas.Y2xhbi1jaW9yZS1uZXZlci1kZXBlbmQtb24tbWU.* clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux."jon".config.clan.core.backups clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux."jon".config.clan.core.state clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux."jon".config.clan.core.networking.targetHost clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux."jon".config.clan.core.networking.buildHost clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux."jon".config.clan.core.vars.settings.secretModule clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux."jon".config.clan.core.vars.settings.publicModule clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux."jon".config.clan.core.vars.generators."testgen".finalScript clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux."sara".config.clan.core.backups clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux."sara".config.clan.core.state clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux."sara".config.clan.core.networking.targetHost clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux."sara".config.clan.core.networking.buildHost clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux."sara".config.clan.core.vars.settings.secretModule clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux."sara".config.clan.core.vars.settings.publicModule clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux."sara".config.clan.core.vars.generators."testgen".finalScript clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{jon,sara}.config.clan.core.vars.generators.*.{share,dependencies,prompts,validationHash} clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{jon,sara}.config.clan.core.vars.generators.*.files.*.{secret,deploy,owner,group,mode,neededFor} clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{jon,sara}.config.clan.core.?sops.?defaultGroups clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{jon,sara}.config.clan.core.vars.settings.publicModule clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{jon,sara}.config.clan.core.vars.settings.secretModule clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{jon,sara}.config.clan.core.vars.?sops.?secretUploadDirectory clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{jon,sara}.config.clan.core.vars.?password-store.?passCommand clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{jon,sara}.config.clan.core.vars.?password-store.?secretLocation clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{jon,sara}.config.clan.core.vars.settings.?age.?keyFile clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{jon,sara}.config.clan.core.vars.?age.?secretLocation clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{jon,sara}.config.clan.deployment.requireExplicitUpdate clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1174 Cache miss for sourceInfo clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:789 Loading flake cache from file /build/clan-flake-cache/flakes-v2/bda71f2d571cdff4c936f5dd74dcd3410d865b43 clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1174 Cache miss for clanInternals.?secrets.?age.?plugins clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:789 Loading flake cache from file /build/clan-flake-cache/flakes-v2/bda71f2d571cdff4c936f5dd74dcd3410d865b43 clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1174 Cache miss for clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:789 Loading flake cache from file /build/clan-flake-cache/flakes-v2/bda71f2d571cdff4c936f5dd74dcd3410d865b43 clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1174 Cache miss for clan.?exports clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:789 Loading flake cache from file /build/clan-flake-cache/flakes-v2/bda71f2d571cdff4c936f5dd74dcd3410d865b43 clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1174 Cache miss for clanInternals.inventoryClass.modulesPerSource clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:789 Loading flake cache from file /build/clan-flake-cache/flakes-v2/bda71f2d571cdff4c936f5dd74dcd3410d865b43 clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1174 Cache miss for clanInternals.inventoryClass.staticModules clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:789 Loading flake cache from file /build/clan-flake-cache/flakes-v2/bda71f2d571cdff4c936f5dd74dcd3410d865b43 clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1174 Cache miss for clanInternals.vars.settings.?recipients clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:789 Loading flake cache from file /build/clan-flake-cache/flakes-v2/bda71f2d571cdff4c936f5dd74dcd3410d865b43 clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1174 Cache miss for clanInternals.inventoryClass.moduleSchemas.Y2xhbi1jaW9yZS1uZXZlci1kZXBlbmQtb24tbWU.* clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:789 Loading flake cache from file /build/clan-flake-cache/flakes-v2/bda71f2d571cdff4c936f5dd74dcd3410d865b43 clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1174 Cache miss for clanInternals.machines.x86_64-linux."jon".config.clan.core.backups clan-pytest-with-core> __________________ test_generator_script_missing_output_file ___________________ clan-pytest-with-core> [gw12] linux -- Python 3.14.7 /nix/store/3n4qphl9s728sz8frmpqqrv9b1m87g68-python3-3.14.7/bin/python clan-pytest-with-core> clan-pytest-with-core> monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7fffe63d5450> clan-pytest-with-core> flake_with_sops = 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_generator_script_missing_output_file( clan-pytest-with-core> monkeypatch: pytest.MonkeyPatch, clan-pytest-with-core> flake_with_sops: ClanFlake, clan-pytest-with-core> ) -> None: clan-pytest-with-core> """Ensure a clear error when a generator script doesn't produce a declared output file.""" clan-pytest-with-core> flake = flake_with_sops clan-pytest-with-core> clan-pytest-with-core> config = flake.machines["my_machine"] = create_test_machine_config() clan-pytest-with-core> my_generator = config["clan"]["core"]["vars"]["generators"]["my_generator"] clan-pytest-with-core> my_generator["files"]["expected_file"]["secret"] = False clan-pytest-with-core> # Script writes to wrong filename clan-pytest-with-core> my_generator["script"] = 'echo "hello" > "$out"/wrong_file' clan-pytest-with-core> flake.refresh() clan-pytest-with-core> monkeypatch.chdir(flake.path) clan-pytest-with-core> > with pytest.raises( clan-pytest-with-core> ClanError, clan-pytest-with-core> match="did not generate a file for 'expected_file'", clan-pytest-with-core> ): clan-pytest-with-core> E AssertionError: Regex pattern did not match. clan-pytest-with-core> E Expected regex: "did not generate a file for 'expected_file'" clan-pytest-with-core> E Actual message: "Error while executing:$ clan select 'clanInternals.?secrets.?age.?plugins'\n$ clan select 'clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.generators.*.{share,dependencies,prompts,validationHash}'\n$ clan select 'clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.generators.*.files.*.{secret,deploy,owner,group,mode,neededFor}'\n$ clan select 'clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.?sops.?defaultGroups'\n$ clan select 'clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.settings.publicModule'\n$ clan select 'clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.settings.secretModule'\n$ clan select 'clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.?sops.?secretUploadDirectory'\n$ clan select 'clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.?password-store.?passCommand'\n$ clan select 'clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.?password-store.?secretLocation'\n$ clan select 'clanInternals.vars.settings.?recipients'\n$ clan select 'clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.?age.?secretLocation'\n Reason: attribute 'system' missing\n at /build/store/nix/store/y3h139bhv4373m1hab367ma4p5i95i2f-source/modules/clan/module.nix:164:24:\n 163| (lib.modules.importApply ../../nixosModules/machineModules/overridePkgs.nix {\n 164| pkgs = nixpkgsMatrix.${config.inventory.machines.${name}.nixpkgs}.system.${system}.pkgs;\n | ^\n 165| })\n Did you mean systems?. Use flag '--debug' to see full nix trace." clan-pytest-with-core> clan-pytest-with-core> /build/src/clan_cli/tests/test_vars_errors.py:53: AssertionError clan-pytest-with-core> ---------------------------- Captured stderr setup ----------------------------- clan-pytest-with-core> !! $HOME does not point to a temp directory!! HOME=/build/pytest-2u46krkm clan-pytest-with-core> [localhost] $ clan vars keygen --flake /build/pytest-2u46krkm/flake --user admin --no-interactive clan-pytest-with-core> Caller: /build/src/clan_cli/tests/age_keys.py:31::init clan-pytest-with-core> clan-pytest-with-core> Prefetching flake /build/pytest-2u46krkm/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/febbcab65441be6ccc547560fd0155faadebbbb7 clan-pytest-with-core> (cached) $ clan select clanInternals.inventoryClass.relativeDirectory 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> git \ clan-pytest-with-core> -C /build/pytest-2u46krkm/flake \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-2u46krkm/flake/sops/users/admin 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/admin to git clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-2u46krkm/flake \ clan-pytest-with-core> diff \ clan-pytest-with-core> --cached --exit-code \ clan-pytest-with-core> -- /build/pytest-2u46krkm/flake/sops/users/admin 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-2u46krkm/flake \ clan-pytest-with-core> commit \ clan-pytest-with-core> -m 'secrets: add user admin' \ clan-pytest-with-core> --no-verify /build/pytest-2u46krkm/flake/sops/users/admin 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/admin to git 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/pytest-2u46krkm clan-pytest-with-core> DEBUG clan_cli.tests.helpers.cli:__init__.py:143 $ clan vars keygen --flake /build/pytest-2u46krkm/flake --user admin --no-interactive clan-pytest-with-core> Caller: /build/src/clan_cli/tests/age_keys.py:31::init clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:927 Prefetching flake /build/pytest-2u46krkm/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/febbcab65441be6ccc547560fd0155faadebbbb7 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.cmd:__init__.py:143 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> DEBUG clan_lib.cmd:__init__.py:143 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> DEBUG clan_cli.secrets.sops:sops.py:99 Found age public key from a private key in the environment (SOPS_AGE_KEY): age1dhwqzkah943xzc34tc3dlmfayyevcmdmxzjezdgdy33euxwf59vsp3vk3c clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:143 git \ clan-pytest-with-core> -C /build/pytest-2u46krkm/flake \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-2u46krkm/flake/sops/users/admin 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> DEBUG clan_lib.cmd:__init__.py:143 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> DEBUG clan_lib.git:__init__.py:98 Adding sops/users/admin to git clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:143 git \ clan-pytest-with-core> -C /build/pytest-2u46krkm/flake \ clan-pytest-with-core> diff \ clan-pytest-with-core> --cached --exit-code \ clan-pytest-with-core> -- /build/pytest-2u46krkm/flake/sops/users/admin 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> DEBUG clan_lib.cmd:__init__.py:143 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> DEBUG clan_lib.cmd:__init__.py:143 git \ clan-pytest-with-core> -C /build/pytest-2u46krkm/flake \ clan-pytest-with-core> commit \ clan-pytest-with-core> -m 'secrets: add user admin' \ clan-pytest-with-core> --no-verify /build/pytest-2u46krkm/flake/sops/users/admin 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> DEBUG clan_lib.cmd:__init__.py:143 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> INFO clan_lib.git:__init__.py:141 Committed sops/users/admin to git clan-pytest-with-core> ----------------------------- Captured stdout call ----------------------------- clan-pytest-with-core> [main c12a8da] flake: update by flake generator clan-pytest-with-core> 2 files changed, 34 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> ----------------------------- Captured stderr call ----------------------------- clan-pytest-with-core> Prefetching flake /build/pytest-2u46krkm/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/d2c0050d97832c3ac5193485b93705d00938c15e clan-pytest-with-core> (cached) $ clan select clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> [localhost] $ clan vars generate --flake /build/pytest-2u46krkm/flake my_machine clan-pytest-with-core> Caller: /build/src/clan_cli/tests/test_vars_errors.py:57::test_generator_script_missing_output_file clan-pytest-with-core> clan-pytest-with-core> Prefetching flake /build/pytest-2u46krkm/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.cliChecks clan-pytest-with-core> Cache miss for clanInternals.inventoryClass.inventorySerialization.{instances,machines,meta} clan-pytest-with-core> Loading flake cache from file /build/clan-flake-cache/flakes-v2/7f559aa41d756977f67d6431a1675e06ef6a0c8b clan-pytest-with-core> Cache miss for clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> Loading flake cache from file /build/clan-flake-cache/flakes-v2/7f559aa41d756977f67d6431a1675e06ef6a0c8b clan-pytest-with-core> (cached) $ clan select 'clanInternals.inventoryClass.inventorySerialization.{instances,machines,meta}' clan-pytest-with-core> Precaching selectors: clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.machines clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.instances clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.meta clan-pytest-with-core> - (not cached) clanInternals.?secrets.?age.?plugins clan-pytest-with-core> - (cached) clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.generators.*.{share,dependencies,prompts,validationHash} clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.generators.*.files.*.{secret,deploy,owner,group,mode,neededFor} clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.?sops.?defaultGroups clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.settings.publicModule clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.settings.secretModule clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.?sops.?secretUploadDirectory clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.?password-store.?passCommand clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.?password-store.?secretLocation clan-pytest-with-core> - (not cached) clanInternals.vars.settings.?recipients clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.?age.?secretLocation clan-pytest-with-core> ------------------------------ Captured log call ------------------------------- clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:927 Prefetching flake /build/pytest-2u46krkm/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/d2c0050d97832c3ac5193485b93705d00938c15e clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1179 (cached) $ clan select clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> DEBUG clan_cli.tests.helpers.cli:__init__.py:143 $ clan vars generate --flake /build/pytest-2u46krkm/flake my_machine clan-pytest-with-core> Caller: /build/src/clan_cli/tests/test_vars_errors.py:57::test_generator_script_missing_output_file clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:927 Prefetching flake /build/pytest-2u46krkm/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.cliChecks clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1174 Cache miss for clanInternals.inventoryClass.inventorySerialization.{instances,machines,meta} clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:789 Loading flake cache from file /build/clan-flake-cache/flakes-v2/7f559aa41d756977f67d6431a1675e06ef6a0c8b clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1174 Cache miss for clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:789 Loading flake cache from file /build/clan-flake-cache/flakes-v2/7f559aa41d756977f67d6431a1675e06ef6a0c8b clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1179 (cached) $ clan select 'clanInternals.inventoryClass.inventorySerialization.{instances,machines,meta}' clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1144 Precaching selectors: clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.machines clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.instances clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.meta clan-pytest-with-core> - (not cached) clanInternals.?secrets.?age.?plugins clan-pytest-with-core> - (cached) clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.generators.*.{share,dependencies,prompts,validationHash} clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.generators.*.files.*.{secret,deploy,owner,group,mode,neededFor} clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.?sops.?defaultGroups clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.settings.publicModule clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.settings.secretModule clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.?sops.?secretUploadDirectory clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.?password-store.?passCommand clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.?password-store.?secretLocation clan-pytest-with-core> - (not cached) clanInternals.vars.settings.?recipients clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.?age.?secretLocation clan-pytest-with-core> ___________________ test_generate_secret_var_password_store ____________________ clan-pytest-with-core> [gw13] linux -- Python 3.14.7 /nix/store/3n4qphl9s728sz8frmpqqrv9b1m87g68-python3-3.14.7/bin/python clan-pytest-with-core> clan-pytest-with-core> self = Flake(identifier='/build/pytest-3o02_5hx/flake', hash='sha256-1OzNnRugt4HmTv7+5n3OXQuYtaIXlQfM1izfJ7MCEEo=', 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.?secrets.?age.?plugins', 'clanInternals.inventoryClass.relativeDirectory', 'clanInternals.machines.x86...s.?defaultGroups', 'clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.settings.publicModule', ...] 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-3o02_5hx/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/znirjqzykrhcdbxyz05raiv98qp3lc9v-source?narHash=sha256-1OzNnRugt4HmTv7+5n3OXQuYtaIXlQfM1izfJ7MCEEo="; 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": "maybe", "value": "secrets"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "plugins"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "inventoryClass"}, {"type": "str", "value": "relativeDirectory"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "share"}, {"type": "str", "value": "dependencies"}, {"type": "str", "value": "prompts"}, {"type": "str", "value": "validationHash"}]}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "str", "value": "files"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "secret"}, {"type": "str", "value": "deploy"}, {"type": "str", "value": "owner"}, {"type": "str", "value": "group"}, {"type": "str", "value": "mode"}, {"type": "str", "value": "neededFor"}]}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "defaultGroups"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "publicModule"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "secretModule"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "secretUploadDirectory"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "passCommand"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "secretLocation"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "maybe", "value": "recipients"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "secretLocation"}]'"'"''"'"') 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": "maybe", "value": "secrets"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "plugins"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "inventoryClass"}, {"type": "str", "value": "relativeDirectory"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "share"}, {"type": "str", "value": "dependencies"}, {"type": "str", "value": "prompts"}, {"type": "str", "value": "validationHash"}]}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "str", "value": "files"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "secret"}, {"type": "str", "value": "deploy"}, {"type": "str", "value": "owner"}, {"type": "str", "value": "group"}, {"type": "str", "value": "mode"}, {"type": "str", "value": "neededFor"}]}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "defaultGroups"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "publicModule"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "secretModule"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "secretUploadDirectory"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "passCommand"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "secretLocation"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "maybe", "value": "recipients"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "secretLocation"}]'') 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": "maybe", "value": "secrets"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "plugins"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "inventoryClass"}, {"type": "str", "value": "relativeDirectory"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "share"}, {"type": "str", "value": "dependencies"}, {"type": "str", "value": "prompts"}, {"type": "str", "value": "validationHash"}]}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "str", "value": "files"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "secret"}, {"type": "str", "value": "deploy"}, {"type": "str", "value": "owner"}, {"type": "str", "value": "group"}, {"type": "str", "value": "mode"}, {"type": "str", "value": "neededFor"}]}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "defaultGroups"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "publicModule"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "secretModule"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "secretUploadDirectory"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "passCommand"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "secretLocation"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "maybe", "value": "recipients"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "secretLocation"}]'') flake) clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating list element at index 2 clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating attribute 'my_machine' clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/cba1x9mxnwr8b36cw41bya7g6d5v1p7d-source/select.nix:325:37: clan-pytest-with-core> E 324| in clan-pytest-with-core> E 325| builtins.mapAttrs (_: v: recurse selectors (idx + 1) v) filteredAttrs clan-pytest-with-core> E | ^ clan-pytest-with-core> E 326| else if selector.type == "maybe" then 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:325:40: clan-pytest-with-core> E 324| in clan-pytest-with-core> E 325| builtins.mapAttrs (_: v: recurse selectors (idx + 1) v) filteredAttrs clan-pytest-with-core> E | ^ clan-pytest-with-core> E 326| else if selector.type == "maybe" then 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 … from call site clan-pytest-with-core> E at /build/store/nix/store/cba1x9mxnwr8b36cw41bya7g6d5v1p7d-source/select.nix:312:15: clan-pytest-with-core> E 311| else if selector.type == "str" then clan-pytest-with-core> E 312| recurse selectors (idx + 1) (builtins.getAttr selector.value obj) clan-pytest-with-core> E | ^ clan-pytest-with-core> E 313| else if selector.type == "set" then 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 'getAttr' builtin clan-pytest-with-core> E at /build/store/nix/store/cba1x9mxnwr8b36cw41bya7g6d5v1p7d-source/select.nix:312:44: clan-pytest-with-core> E 311| else if selector.type == "str" then clan-pytest-with-core> E 312| recurse selectors (idx + 1) (builtins.getAttr selector.value obj) clan-pytest-with-core> E | ^ clan-pytest-with-core> E 313| else if selector.type == "set" then clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'seq' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:401:18: clan-pytest-with-core> E 400| options = checked options; clan-pytest-with-core> E 401| config = checked (removeAttrs config [ "_module" ]); clan-pytest-with-core> E | ^ clan-pytest-with-core> E 402| _module = checked (config._module); 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:304:9: clan-pytest-with-core> E 303| checkUnmatched = clan-pytest-with-core> E 304| if config._module.check && config._module.freeformType == null && merged.unmatchedDefns != [ ] then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 305| let clan-pytest-with-core> E clan-pytest-with-core> E … in the right operand of the AND (&&) operator clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:304:72: clan-pytest-with-core> E 303| checkUnmatched = clan-pytest-with-core> E 304| if config._module.check && config._module.freeformType == null && merged.unmatchedDefns != [ ] then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 305| let clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'unmatchedDefns' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:940:7: clan-pytest-with-core> E 939| # Transforms unmatchedDefnsByName into a list of definitions clan-pytest-with-core> E 940| unmatchedDefns = clan-pytest-with-core> E | ^ clan-pytest-with-core> E 941| if configs == [ ] then clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'concatLists' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:946:11: clan-pytest-with-core> E 945| else clan-pytest-with-core> E 946| concatLists ( clan-pytest-with-core> E | ^ clan-pytest-with-core> E 947| mapAttrsToList ( clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:948:21: clan-pytest-with-core> E 947| mapAttrsToList ( clan-pytest-with-core> E 948| name: defs: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 949| map ( clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'map' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:949:15: clan-pytest-with-core> E 948| name: defs: clan-pytest-with-core> E 949| map ( clan-pytest-with-core> E | ^ clan-pytest-with-core> E 950| def: clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:932:22: clan-pytest-with-core> E 931| # Propagate all unmatched definitions from nested option sets clan-pytest-with-core> E 932| mapAttrs (n: v: v.unmatchedDefns) resultsByName clan-pytest-with-core> E | ^ clan-pytest-with-core> E 933| # Plus the definitions for the current prefix that don't have a matching option clan-pytest-with-core> E clan-pytest-with-core> E (10 duplicate frames omitted) clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:932:25: clan-pytest-with-core> E 931| # Propagate all unmatched definitions from nested option sets clan-pytest-with-core> E 932| mapAttrs (n: v: v.unmatchedDefns) resultsByName clan-pytest-with-core> E | ^ clan-pytest-with-core> E 933| # Plus the definitions for the current prefix that don't have a matching option clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:876:15: clan-pytest-with-core> E 875| resultsByName = mapAttrs ( clan-pytest-with-core> E 876| name: decls: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 877| # We're descending into attribute ‘name’. 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:888:9: clan-pytest-with-core> E 887| in clan-pytest-with-core> E 888| if length optionDecls == length decls then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 889| let clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'length' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:888:12: clan-pytest-with-core> E 887| in clan-pytest-with-core> E 888| if length optionDecls == length decls then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 889| let clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'filter' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:882:25: clan-pytest-with-core> E 881| defns' = rawDefinitionsByName.${name} or [ ]; clan-pytest-with-core> E 882| optionDecls = filter ( clan-pytest-with-core> E | ^ clan-pytest-with-core> E 883| m: clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:883:13: clan-pytest-with-core> E 882| optionDecls = filter ( clan-pytest-with-core> E 883| m: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 884| m.options ? _type clan-pytest-with-core> E clan-pytest-with-core> E … in the left operand of the AND (&&) operator clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:885:13: clan-pytest-with-core> E 884| m.options ? _type clan-pytest-with-core> E 885| && (m.options._type == "option" || throwDeclarationTypeError loc m.options._type m._file) clan-pytest-with-core> E | ^ clan-pytest-with-core> E 886| ) decls; clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'options' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:807:15: clan-pytest-with-core> E 806| pos = unsafeGetAttrPos n subtree; clan-pytest-with-core> E 807| options = option; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 808| }) subtree clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:289:73: clan-pytest-with-core> E 288| len = length attrPath; clan-pytest-with-core> E 289| atDepth = n: if n == len then value else { ${elemAt attrPath n} = atDepth (n + 1); }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 290| in clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'atDepth' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:289:17: clan-pytest-with-core> E 288| len = length attrPath; clan-pytest-with-core> E 289| atDepth = n: if n == len then value else { ${elemAt attrPath n} = atDepth (n + 1); }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 290| in clan-pytest-with-core> E clan-pytest-with-core> E … in the right operand of the update (//) operator clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:2047:9: clan-pytest-with-core> E 2046| } clan-pytest-with-core> E 2047| // optionalAttrs (toType != null) { clan-pytest-with-core> E | ^ clan-pytest-with-core> E 2048| type = toType; clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:2047:12: clan-pytest-with-core> E 2046| } clan-pytest-with-core> E 2047| // optionalAttrs (toType != null) { clan-pytest-with-core> E | ^ clan-pytest-with-core> E 2048| type = toType; clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'optionalAttrs' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:1492:25: clan-pytest-with-core> E 1491| */ clan-pytest-with-core> E 1492| optionalAttrs = cond: as: if cond then as else { }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1493| 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:1492:29: clan-pytest-with-core> E 1491| */ clan-pytest-with-core> E 1492| optionalAttrs = cond: as: if cond then as else { }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1493| clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:2036:17: clan-pytest-with-core> E 2035| let clan-pytest-with-core> E 2036| opt = attrByPath to { } options; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 2037| in clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'attrByPath' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:89:24: clan-pytest-with-core> E 88| attrByPath = clan-pytest-with-core> E 89| attrPath: default: set: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 90| let clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:106:5: clan-pytest-with-core> E 105| in clan-pytest-with-core> E 106| attrByPath' 0 set; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 107| clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'attrByPath'' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:93:12: clan-pytest-with-core> E 92| attrByPath' = clan-pytest-with-core> E 93| n: s: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 94| ( clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:102:35: clan-pytest-with-core> E 101| in clan-pytest-with-core> E 102| if s ? ${attr} then attrByPath' (n + 1) s.${attr} else default clan-pytest-with-core> E | ^ clan-pytest-with-core> E 103| ) clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'attrByPath'' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:93:12: clan-pytest-with-core> E 92| attrByPath' = clan-pytest-with-core> E 93| n: s: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 94| ( clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:102:35: clan-pytest-with-core> E 101| in clan-pytest-with-core> E 102| if s ? ${attr} then attrByPath' (n + 1) s.${attr} else default clan-pytest-with-core> E | ^ clan-pytest-with-core> E 103| ) clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'attrByPath'' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:93:12: clan-pytest-with-core> E 92| attrByPath' = clan-pytest-with-core> E 93| n: s: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 94| ( clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:102:35: clan-pytest-with-core> E 101| in clan-pytest-with-core> E 102| if s ? ${attr} then attrByPath' (n + 1) s.${attr} else default clan-pytest-with-core> E | ^ clan-pytest-with-core> E 103| ) clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'attrByPath'' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:93:12: clan-pytest-with-core> E 92| attrByPath' = clan-pytest-with-core> E 93| n: s: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 94| ( clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:102:55: clan-pytest-with-core> E 101| in clan-pytest-with-core> E 102| if s ? ${attr} then attrByPath' (n + 1) s.${attr} else default clan-pytest-with-core> E | ^ clan-pytest-with-core> E 103| ) clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:927:37: clan-pytest-with-core> E 926| clan-pytest-with-core> E 927| matchedOptions = mapAttrs (n: v: v.matchedOptions) resultsByName; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 928| clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'matchedOptions' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:893:13: clan-pytest-with-core> E 892| { clan-pytest-with-core> E 893| matchedOptions = evalOptionValue loc opt defns'; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 894| unmatchedDefns = [ ]; clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:893:30: clan-pytest-with-core> E 892| { clan-pytest-with-core> E 893| matchedOptions = evalOptionValue loc opt defns'; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 894| unmatchedDefns = [ ]; clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'evalOptionValue' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1103:15: clan-pytest-with-core> E 1102| evalOptionValue = clan-pytest-with-core> E 1103| loc: opt: defs: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1104| let clan-pytest-with-core> E clan-pytest-with-core> E … in the left operand of the update (//) operator clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1148:5: clan-pytest-with-core> E 1147| warnDeprecation opt clan-pytest-with-core> E 1148| // { clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1149| value = addErrorContext "while evaluating the option `${showOption loc}':" value; 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1141:9: clan-pytest-with-core> E 1140| warnDeprecation = clan-pytest-with-core> E 1141| if (opt.type.deprecationMessage != null) then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1142| warn "The type `types.${opt.type.name}' of option `${showOption loc}' defined in ${showFiles opt.declarations} is deprecated. ${opt.type.deprecationMessage}" clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:890:19: clan-pytest-with-core> E 889| let clan-pytest-with-core> E 890| opt = fixupOptionType loc (mergeOptionDecls loc decls); clan-pytest-with-core> E | ^ clan-pytest-with-core> E 891| in clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'fixupOptionType' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1473:10: clan-pytest-with-core> E 1472| fixupOptionType = clan-pytest-with-core> E 1473| loc: opt: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1474| if opt.type.getSubModules or null == null then 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1474:5: clan-pytest-with-core> E 1473| loc: opt: clan-pytest-with-core> E 1474| if opt.type.getSubModules or null == null then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1475| opt // { type = opt.type or types.unspecified; } clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'type.getSubModules' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/nixos/modules/services/hardware/bluetooth.nix:72:9: clan-pytest-with-core> E 71| settings = mkOption { clan-pytest-with-core> E 72| type = cfgFmt.type; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 73| default = { }; clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/nixos/modules/services/hardware/bluetooth.nix:26:12: clan-pytest-with-core> E 25| clan-pytest-with-core> E 26| cfgFmt = pkgs.formats.ini { }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 27| clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:727:15: clan-pytest-with-core> E 726| extraArgs = mapAttrs ( clan-pytest-with-core> E 727| name: _: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 728| addErrorContext (context name) ( clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the module argument `pkgs' in "/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/nixos/modules/services/hardware/bluetooth.nix": clan-pytest-with-core> E clan-pytest-with-core> E … noting that argument `pkgs` is not externally provided, so querying `_module.args` instead, requiring `config` clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:731:13: clan-pytest-with-core> E 730| "noting that argument `${name}` is not externally provided, so querying `_module.args` instead, requiring `config`" clan-pytest-with-core> E 731| config._module.args.${name} clan-pytest-with-core> E | ^ clan-pytest-with-core> E 732| ) clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/types.nix:1029:18: clan-pytest-with-core> E 1028| value = mapAttrs ( clan-pytest-with-core> E 1029| n: v: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1030| if lazy then clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'optionalValue.value' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1312:5: clan-pytest-with-core> E 1311| clan-pytest-with-core> E 1312| optionalValue = if isDefined then { value = mergedValue; } else { }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1313| }; 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1312:21: clan-pytest-with-core> E 1311| clan-pytest-with-core> E 1312| optionalValue = if isDefined then { value = mergedValue; } else { }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1313| }; clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'values' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1240:11: clan-pytest-with-core> E 1239| { clan-pytest-with-core> E 1240| values = defsSorted; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1241| inherit (defsFiltered) highestPrio; 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1211:11: clan-pytest-with-core> E 1210| # Avoid sorting if we don't have to. clan-pytest-with-core> E 1211| if any (def: def.value._type or "" == "order") defsFiltered.values then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1212| sortProperties defsFiltered.values clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'any' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1211:14: clan-pytest-with-core> E 1210| # Avoid sorting if we don't have to. clan-pytest-with-core> E 1211| if any (def: def.value._type or "" == "order") defsFiltered.values then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1212| sortProperties defsFiltered.values clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1211:19: clan-pytest-with-core> E 1210| # Avoid sorting if we don't have to. clan-pytest-with-core> E 1211| if any (def: def.value._type or "" == "order") defsFiltered.values then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1212| sortProperties defsFiltered.values clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'value._type' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1422:67: clan-pytest-with-core> E 1421| strip = clan-pytest-with-core> E 1422| def: if def.value._type or "" == "override" then def // { value = def.value.content; } else def; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1423| in clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'value.content' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1566:22: clan-pytest-with-core> E 1565| _type = "override"; clan-pytest-with-core> E 1566| inherit priority content; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1567| }; 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/nixos/modules/misc/nixpkgs.nix:107:15: clan-pytest-with-core> E 106| clan-pytest-with-core> E 107| finalPkgs = if opt.pkgs.isDefined then cfg.pkgs.appendOverlays cfg.overlays else defaultPkgs; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 108| clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'pkgs.isDefined' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1154:21: clan-pytest-with-core> E 1153| definitionsWithLocations = res.defsFinal; clan-pytest-with-core> E 1154| inherit (res) isDefined; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1155| inherit (res.checkedAndMerged) valueMeta; clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'isDefined' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1310:5: clan-pytest-with-core> E 1309| clan-pytest-with-core> E 1310| isDefined = defsFinal != [ ]; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1311| clan-pytest-with-core> E clan-pytest-with-core> E (6 duplicate frames omitted) clan-pytest-with-core> E clan-pytest-with-core> E error: attribute 'system' missing clan-pytest-with-core> E at /build/store/nix/store/y3h139bhv4373m1hab367ma4p5i95i2f-source/modules/clan/module.nix:164:24: clan-pytest-with-core> E 163| (lib.modules.importApply ../../nixosModules/machineModules/overridePkgs.nix { clan-pytest-with-core> E 164| pkgs = nixpkgsMatrix.${config.inventory.machines.${name}.nixpkgs}.system.${system}.pkgs; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 165| }) clan-pytest-with-core> E Did you mean systems? 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 0x7fffe56e7850> clan-pytest-with-core> flake = clan-pytest-with-core> test_root = PosixPath('/build/src/clan_cli/tests') 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_generate_secret_var_password_store( clan-pytest-with-core> monkeypatch: pytest.MonkeyPatch, clan-pytest-with-core> flake: ClanFlake, clan-pytest-with-core> test_root: Path, clan-pytest-with-core> ) -> None: clan-pytest-with-core> config = flake.machines["my_machine"] = create_test_machine_config() clan-pytest-with-core> clan_vars = config["clan"]["core"]["vars"] clan-pytest-with-core> clan_vars["settings"]["secretStore"] = "password-store" clan-pytest-with-core> # Use pass (GPG-based) for this test clan-pytest-with-core> config["clan"]["core"]["vars"]["password-store"]["passCommand"] = "pass" clan-pytest-with-core> # Create a second secret so that when we delete the first one, clan-pytest-with-core> # we still have the second one to test `delete_store`: clan-pytest-with-core> my_generator = clan_vars["generators"]["my_generator"] clan-pytest-with-core> my_generator["files"]["my_secret"]["secret"] = True clan-pytest-with-core> my_generator["script"] = 'echo hello > "$out"/my_secret' clan-pytest-with-core> my_generator2 = clan_vars["generators"]["my_generator2"] clan-pytest-with-core> my_generator2["files"]["my_secret2"]["secret"] = True clan-pytest-with-core> my_generator2["script"] = 'echo world > "$out"/my_secret2' clan-pytest-with-core> my_shared_generator = clan_vars["generators"]["my_shared_generator"] clan-pytest-with-core> my_shared_generator["share"] = True clan-pytest-with-core> my_shared_generator["files"]["my_shared_secret"]["secret"] = True clan-pytest-with-core> my_shared_generator["script"] = 'echo hello > "$out"/my_shared_secret' clan-pytest-with-core> flake.refresh() clan-pytest-with-core> monkeypatch.chdir(flake.path) clan-pytest-with-core> gnupghome = flake.path / "gpg" clan-pytest-with-core> shutil.copytree(test_root / "data" / "gnupg-home", gnupghome) clan-pytest-with-core> monkeypatch.setenv("GNUPGHOME", str(gnupghome)) clan-pytest-with-core> clan-pytest-with-core> password_store_dir = flake.path / "pass" clan-pytest-with-core> shutil.copytree(test_root / "data" / "password-store", password_store_dir) clan-pytest-with-core> monkeypatch.setenv("PASSWORD_STORE_DIR", str(password_store_dir)) clan-pytest-with-core> clan-pytest-with-core> # Initialize password store as a git repository clan-pytest-with-core> clan-pytest-with-core> subprocess.run(["git", "init"], cwd=password_store_dir, check=True) clan-pytest-with-core> subprocess.run( clan-pytest-with-core> ["git", "config", "user.email", "test@example.com"], clan-pytest-with-core> cwd=password_store_dir, clan-pytest-with-core> check=True, clan-pytest-with-core> ) clan-pytest-with-core> subprocess.run( clan-pytest-with-core> ["git", "config", "user.name", "Test User"], clan-pytest-with-core> cwd=password_store_dir, clan-pytest-with-core> check=True, clan-pytest-with-core> ) clan-pytest-with-core> clan-pytest-with-core> flake_obj = Flake(str(flake.path)) clan-pytest-with-core> machine = Machine(name="my_machine", flake=flake_obj) clan-pytest-with-core> > assert not check_vars(machine.name, machine.flake) clan-pytest-with-core> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ clan-pytest-with-core> clan-pytest-with-core> /build/src/clan_cli/tests/test_vars_generate.py:571: clan-pytest-with-core> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ clan-pytest-with-core> /build/src/clan_lib/vars/check.py:149: in check_vars clan-pytest-with-core> status = vars_status(machine_name, flake, generator_name=generator_name) clan-pytest-with-core> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ clan-pytest-with-core> /build/src/clan_lib/vars/check.py:63: in vars_status clan-pytest-with-core> generators = get_machine_generators([machine.name], machine.flake) clan-pytest-with-core> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ clan-pytest-with-core> /build/src/clan_lib/vars/generator.py:243: in get_machine_generators clan-pytest-with-core> flake.precache(get_machine_selectors(machine_names)) clan-pytest-with-core> /build/src/clan_lib/flake/flake.py:1151: in precache clan-pytest-with-core> self.get_from_nix(not_fetched_selectors) clan-pytest-with-core> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ clan-pytest-with-core> clan-pytest-with-core> self = Flake(identifier='/build/pytest-3o02_5hx/flake', hash='sha256-1OzNnRugt4HmTv7+5n3OXQuYtaIXlQfM1izfJ7MCEEo=', 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.?secrets.?age.?plugins', 'clanInternals.inventoryClass.relativeDirectory', 'clanInternals.machines.x86...s.?defaultGroups', 'clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.settings.publicModule', ...] 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 while executing:$ clan select 'clanInternals.?secrets.?age.?plugins' clan-pytest-with-core> E $ clan select 'clanInternals.inventoryClass.relativeDirectory' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.generators.*.{share,dependencies,prompts,validationHash}' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.generators.*.files.*.{secret,deploy,owner,group,mode,neededFor}' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.?sops.?defaultGroups' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.settings.publicModule' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.settings.secretModule' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.?sops.?secretUploadDirectory' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.?password-store.?passCommand' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.?password-store.?secretLocation' clan-pytest-with-core> E $ clan select 'clanInternals.vars.settings.?recipients' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.?age.?secretLocation' clan-pytest-with-core> E Reason: attribute 'system' missing clan-pytest-with-core> E at /build/store/nix/store/y3h139bhv4373m1hab367ma4p5i95i2f-source/modules/clan/module.nix:164:24: clan-pytest-with-core> E 163| (lib.modules.importApply ../../nixosModules/machineModules/overridePkgs.nix { clan-pytest-with-core> E 164| pkgs = nixpkgsMatrix.${config.inventory.machines.${name}.nixpkgs}.system.${system}.pkgs; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 165| }) clan-pytest-with-core> E Did you mean systems?. 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 setup ----------------------------- clan-pytest-with-core> !! $HOME does not point to a temp directory!! HOME=/build/pytest-3o02_5hx 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/pytest-3o02_5hx clan-pytest-with-core> ----------------------------- Captured stdout call ----------------------------- clan-pytest-with-core> [main a300556] flake: update by flake generator clan-pytest-with-core> 2 files changed, 57 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> Initialized empty Git repository in /build/pytest-3o02_5hx/flake/pass/.git/ clan-pytest-with-core> ----------------------------- Captured stderr call ----------------------------- clan-pytest-with-core> Prefetching flake /build/pytest-3o02_5hx/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/febbcab65441be6ccc547560fd0155faadebbbb7 clan-pytest-with-core> (cached) $ clan select clanInternals.inventoryClass.relativeDirectory 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> Prefetching flake /build/pytest-3o02_5hx/flake clan-pytest-with-core> warning: you don't have Internet access; disabling some network-dependent features clan-pytest-with-core> Precaching selectors: clan-pytest-with-core> - (not cached) clanInternals.?secrets.?age.?plugins clan-pytest-with-core> - (not cached) clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.generators.*.{share,dependencies,prompts,validationHash} clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.generators.*.files.*.{secret,deploy,owner,group,mode,neededFor} clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.?sops.?defaultGroups clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.settings.publicModule clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.settings.secretModule clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.?sops.?secretUploadDirectory clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.?password-store.?passCommand clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.?password-store.?secretLocation clan-pytest-with-core> - (not cached) clanInternals.vars.settings.?recipients clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.?age.?secretLocation clan-pytest-with-core> ------------------------------ Captured log call ------------------------------- clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:927 Prefetching flake /build/pytest-3o02_5hx/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/febbcab65441be6ccc547560fd0155faadebbbb7 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-3o02_5hx/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:1144 Precaching selectors: clan-pytest-with-core> - (not cached) clanInternals.?secrets.?age.?plugins clan-pytest-with-core> - (not cached) clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.generators.*.{share,dependencies,prompts,validationHash} clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.generators.*.files.*.{secret,deploy,owner,group,mode,neededFor} clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.?sops.?defaultGroups clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.settings.publicModule clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.settings.secretModule clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.?sops.?secretUploadDirectory clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.?password-store.?passCommand clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.?password-store.?secretLocation clan-pytest-with-core> - (not cached) clanInternals.vars.settings.?recipients clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.?age.?secretLocation clan-pytest-with-core> _________________ test_age_incremental_generate_shared_secret __________________ clan-pytest-with-core> [gw3] linux -- Python 3.14.7 /nix/store/3n4qphl9s728sz8frmpqqrv9b1m87g68-python3-3.14.7/bin/python clan-pytest-with-core> clan-pytest-with-core> self = Flake(identifier='/build/pytest-e14smgm7/flake', hash='sha256-xXHMSUoSajExJkvex9HrU4ocrVS0xk20TLXEh0OGRyc=', 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.?secrets.?age.?plugins', 'clanInternals.machines.x86_64-linux.{machine_a,machine_b}.config.clan.core.v...cModule', 'clanInternals.machines.x86_64-linux.{machine_a,machine_b}.config.clan.core.vars.settings.secretModule', ...] 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-e14smgm7/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/bxcp3hkyzcansk08h2iafvfi3m39zhaf-source?narHash=sha256-xXHMSUoSajExJkvex9HrU4ocrVS0xk20TLXEh0OGRyc="; 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": "maybe", "value": "secrets"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "plugins"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine_a"}, {"type": "str", "value": "machine_b"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "share"}, {"type": "str", "value": "dependencies"}, {"type": "str", "value": "prompts"}, {"type": "str", "value": "validationHash"}]}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine_a"}, {"type": "str", "value": "machine_b"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "str", "value": "files"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "secret"}, {"type": "str", "value": "deploy"}, {"type": "str", "value": "owner"}, {"type": "str", "value": "group"}, {"type": "str", "value": "mode"}, {"type": "str", "value": "neededFor"}]}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine_a"}, {"type": "str", "value": "machine_b"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "defaultGroups"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine_a"}, {"type": "str", "value": "machine_b"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "publicModule"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine_a"}, {"type": "str", "value": "machine_b"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "secretModule"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine_a"}, {"type": "str", "value": "machine_b"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "secretUploadDirectory"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine_a"}, {"type": "str", "value": "machine_b"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "passCommand"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine_a"}, {"type": "str", "value": "machine_b"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "secretLocation"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "maybe", "value": "recipients"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine_a"}, {"type": "str", "value": "machine_b"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "secretLocation"}]'"'"''"'"') 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": "maybe", "value": "secrets"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "plugins"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine_a"}, {"type": "str", "value": "machine_b"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "share"}, {"type": "str", "value": "dependencies"}, {"type": "str", "value": "prompts"}, {"type": "str", "value": "validationHash"}]}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine_a"}, {"type": "str", "value": "machine_b"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "str", "value": "files"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "secret"}, {"type": "str", "value": "deploy"}, {"type": "str", "value": "owner"}, {"type": "str", "value": "group"}, {"type": "str", "value": "mode"}, {"type": "str", "value": "neededFor"}]}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine_a"}, {"type": "str", "value": "machine_b"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "defaultGroups"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine_a"}, {"type": "str", "value": "machine_b"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "publicModule"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine_a"}, {"type": "str", "value": "machine_b"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "secretModule"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine_a"}, {"type": "str", "value": "machine_b"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "secretUploadDirectory"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine_a"}, {"type": "str", "value": "machine_b"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "passCommand"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine_a"}, {"type": "str", "value": "machine_b"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "secretLocation"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "maybe", "value": "recipients"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine_a"}, {"type": "str", "value": "machine_b"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "secretLocation"}]'') 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": "maybe", "value": "secrets"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "plugins"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine_a"}, {"type": "str", "value": "machine_b"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "share"}, {"type": "str", "value": "dependencies"}, {"type": "str", "value": "prompts"}, {"type": "str", "value": "validationHash"}]}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine_a"}, {"type": "str", "value": "machine_b"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "str", "value": "files"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "secret"}, {"type": "str", "value": "deploy"}, {"type": "str", "value": "owner"}, {"type": "str", "value": "group"}, {"type": "str", "value": "mode"}, {"type": "str", "value": "neededFor"}]}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine_a"}, {"type": "str", "value": "machine_b"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "defaultGroups"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine_a"}, {"type": "str", "value": "machine_b"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "publicModule"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine_a"}, {"type": "str", "value": "machine_b"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "secretModule"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine_a"}, {"type": "str", "value": "machine_b"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "secretUploadDirectory"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine_a"}, {"type": "str", "value": "machine_b"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "passCommand"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine_a"}, {"type": "str", "value": "machine_b"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "secretLocation"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "maybe", "value": "recipients"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine_a"}, {"type": "str", "value": "machine_b"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "secretLocation"}]'') flake) clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating list element at index 1 clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating attribute 'machine_a' clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/cba1x9mxnwr8b36cw41bya7g6d5v1p7d-source/select.nix:325:37: clan-pytest-with-core> E 324| in clan-pytest-with-core> E 325| builtins.mapAttrs (_: v: recurse selectors (idx + 1) v) filteredAttrs clan-pytest-with-core> E | ^ clan-pytest-with-core> E 326| else if selector.type == "maybe" then 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:325:40: clan-pytest-with-core> E 324| in clan-pytest-with-core> E 325| builtins.mapAttrs (_: v: recurse selectors (idx + 1) v) filteredAttrs clan-pytest-with-core> E | ^ clan-pytest-with-core> E 326| else if selector.type == "maybe" then 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 … from call site clan-pytest-with-core> E at /build/store/nix/store/cba1x9mxnwr8b36cw41bya7g6d5v1p7d-source/select.nix:312:15: clan-pytest-with-core> E 311| else if selector.type == "str" then clan-pytest-with-core> E 312| recurse selectors (idx + 1) (builtins.getAttr selector.value obj) clan-pytest-with-core> E | ^ clan-pytest-with-core> E 313| else if selector.type == "set" then 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 'getAttr' builtin clan-pytest-with-core> E at /build/store/nix/store/cba1x9mxnwr8b36cw41bya7g6d5v1p7d-source/select.nix:312:44: clan-pytest-with-core> E 311| else if selector.type == "str" then clan-pytest-with-core> E 312| recurse selectors (idx + 1) (builtins.getAttr selector.value obj) clan-pytest-with-core> E | ^ clan-pytest-with-core> E 313| else if selector.type == "set" then clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'seq' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:401:18: clan-pytest-with-core> E 400| options = checked options; clan-pytest-with-core> E 401| config = checked (removeAttrs config [ "_module" ]); clan-pytest-with-core> E | ^ clan-pytest-with-core> E 402| _module = checked (config._module); 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:304:9: clan-pytest-with-core> E 303| checkUnmatched = clan-pytest-with-core> E 304| if config._module.check && config._module.freeformType == null && merged.unmatchedDefns != [ ] then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 305| let clan-pytest-with-core> E clan-pytest-with-core> E … in the right operand of the AND (&&) operator clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:304:72: clan-pytest-with-core> E 303| checkUnmatched = clan-pytest-with-core> E 304| if config._module.check && config._module.freeformType == null && merged.unmatchedDefns != [ ] then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 305| let clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'unmatchedDefns' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:940:7: clan-pytest-with-core> E 939| # Transforms unmatchedDefnsByName into a list of definitions clan-pytest-with-core> E 940| unmatchedDefns = clan-pytest-with-core> E | ^ clan-pytest-with-core> E 941| if configs == [ ] then clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'concatLists' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:946:11: clan-pytest-with-core> E 945| else clan-pytest-with-core> E 946| concatLists ( clan-pytest-with-core> E | ^ clan-pytest-with-core> E 947| mapAttrsToList ( clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:948:21: clan-pytest-with-core> E 947| mapAttrsToList ( clan-pytest-with-core> E 948| name: defs: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 949| map ( clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'map' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:949:15: clan-pytest-with-core> E 948| name: defs: clan-pytest-with-core> E 949| map ( clan-pytest-with-core> E | ^ clan-pytest-with-core> E 950| def: clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:932:22: clan-pytest-with-core> E 931| # Propagate all unmatched definitions from nested option sets clan-pytest-with-core> E 932| mapAttrs (n: v: v.unmatchedDefns) resultsByName clan-pytest-with-core> E | ^ clan-pytest-with-core> E 933| # Plus the definitions for the current prefix that don't have a matching option clan-pytest-with-core> E clan-pytest-with-core> E (10 duplicate frames omitted) clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:932:25: clan-pytest-with-core> E 931| # Propagate all unmatched definitions from nested option sets clan-pytest-with-core> E 932| mapAttrs (n: v: v.unmatchedDefns) resultsByName clan-pytest-with-core> E | ^ clan-pytest-with-core> E 933| # Plus the definitions for the current prefix that don't have a matching option clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:876:15: clan-pytest-with-core> E 875| resultsByName = mapAttrs ( clan-pytest-with-core> E 876| name: decls: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 877| # We're descending into attribute ‘name’. 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:888:9: clan-pytest-with-core> E 887| in clan-pytest-with-core> E 888| if length optionDecls == length decls then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 889| let clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'length' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:888:12: clan-pytest-with-core> E 887| in clan-pytest-with-core> E 888| if length optionDecls == length decls then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 889| let clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'filter' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:882:25: clan-pytest-with-core> E 881| defns' = rawDefinitionsByName.${name} or [ ]; clan-pytest-with-core> E 882| optionDecls = filter ( clan-pytest-with-core> E | ^ clan-pytest-with-core> E 883| m: clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:883:13: clan-pytest-with-core> E 882| optionDecls = filter ( clan-pytest-with-core> E 883| m: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 884| m.options ? _type clan-pytest-with-core> E clan-pytest-with-core> E … in the left operand of the AND (&&) operator clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:885:13: clan-pytest-with-core> E 884| m.options ? _type clan-pytest-with-core> E 885| && (m.options._type == "option" || throwDeclarationTypeError loc m.options._type m._file) clan-pytest-with-core> E | ^ clan-pytest-with-core> E 886| ) decls; clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'options' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:807:15: clan-pytest-with-core> E 806| pos = unsafeGetAttrPos n subtree; clan-pytest-with-core> E 807| options = option; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 808| }) subtree clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:289:73: clan-pytest-with-core> E 288| len = length attrPath; clan-pytest-with-core> E 289| atDepth = n: if n == len then value else { ${elemAt attrPath n} = atDepth (n + 1); }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 290| in clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'atDepth' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:289:17: clan-pytest-with-core> E 288| len = length attrPath; clan-pytest-with-core> E 289| atDepth = n: if n == len then value else { ${elemAt attrPath n} = atDepth (n + 1); }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 290| in clan-pytest-with-core> E clan-pytest-with-core> E … in the right operand of the update (//) operator clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:2047:9: clan-pytest-with-core> E 2046| } clan-pytest-with-core> E 2047| // optionalAttrs (toType != null) { clan-pytest-with-core> E | ^ clan-pytest-with-core> E 2048| type = toType; clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:2047:12: clan-pytest-with-core> E 2046| } clan-pytest-with-core> E 2047| // optionalAttrs (toType != null) { clan-pytest-with-core> E | ^ clan-pytest-with-core> E 2048| type = toType; clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'optionalAttrs' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:1492:25: clan-pytest-with-core> E 1491| */ clan-pytest-with-core> E 1492| optionalAttrs = cond: as: if cond then as else { }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1493| 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:1492:29: clan-pytest-with-core> E 1491| */ clan-pytest-with-core> E 1492| optionalAttrs = cond: as: if cond then as else { }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1493| clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:2036:17: clan-pytest-with-core> E 2035| let clan-pytest-with-core> E 2036| opt = attrByPath to { } options; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 2037| in clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'attrByPath' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:89:24: clan-pytest-with-core> E 88| attrByPath = clan-pytest-with-core> E 89| attrPath: default: set: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 90| let clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:106:5: clan-pytest-with-core> E 105| in clan-pytest-with-core> E 106| attrByPath' 0 set; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 107| clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'attrByPath'' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:93:12: clan-pytest-with-core> E 92| attrByPath' = clan-pytest-with-core> E 93| n: s: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 94| ( clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:102:35: clan-pytest-with-core> E 101| in clan-pytest-with-core> E 102| if s ? ${attr} then attrByPath' (n + 1) s.${attr} else default clan-pytest-with-core> E | ^ clan-pytest-with-core> E 103| ) clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'attrByPath'' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:93:12: clan-pytest-with-core> E 92| attrByPath' = clan-pytest-with-core> E 93| n: s: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 94| ( clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:102:35: clan-pytest-with-core> E 101| in clan-pytest-with-core> E 102| if s ? ${attr} then attrByPath' (n + 1) s.${attr} else default clan-pytest-with-core> E | ^ clan-pytest-with-core> E 103| ) clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'attrByPath'' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:93:12: clan-pytest-with-core> E 92| attrByPath' = clan-pytest-with-core> E 93| n: s: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 94| ( clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:102:35: clan-pytest-with-core> E 101| in clan-pytest-with-core> E 102| if s ? ${attr} then attrByPath' (n + 1) s.${attr} else default clan-pytest-with-core> E | ^ clan-pytest-with-core> E 103| ) clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'attrByPath'' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:93:12: clan-pytest-with-core> E 92| attrByPath' = clan-pytest-with-core> E 93| n: s: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 94| ( clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:102:55: clan-pytest-with-core> E 101| in clan-pytest-with-core> E 102| if s ? ${attr} then attrByPath' (n + 1) s.${attr} else default clan-pytest-with-core> E | ^ clan-pytest-with-core> E 103| ) clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:927:37: clan-pytest-with-core> E 926| clan-pytest-with-core> E 927| matchedOptions = mapAttrs (n: v: v.matchedOptions) resultsByName; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 928| clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'matchedOptions' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:893:13: clan-pytest-with-core> E 892| { clan-pytest-with-core> E 893| matchedOptions = evalOptionValue loc opt defns'; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 894| unmatchedDefns = [ ]; clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:893:30: clan-pytest-with-core> E 892| { clan-pytest-with-core> E 893| matchedOptions = evalOptionValue loc opt defns'; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 894| unmatchedDefns = [ ]; clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'evalOptionValue' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1103:15: clan-pytest-with-core> E 1102| evalOptionValue = clan-pytest-with-core> E 1103| loc: opt: defs: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1104| let clan-pytest-with-core> E clan-pytest-with-core> E … in the left operand of the update (//) operator clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1148:5: clan-pytest-with-core> E 1147| warnDeprecation opt clan-pytest-with-core> E 1148| // { clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1149| value = addErrorContext "while evaluating the option `${showOption loc}':" value; 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1141:9: clan-pytest-with-core> E 1140| warnDeprecation = clan-pytest-with-core> E 1141| if (opt.type.deprecationMessage != null) then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1142| warn "The type `types.${opt.type.name}' of option `${showOption loc}' defined in ${showFiles opt.declarations} is deprecated. ${opt.type.deprecationMessage}" clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:890:19: clan-pytest-with-core> E 889| let clan-pytest-with-core> E 890| opt = fixupOptionType loc (mergeOptionDecls loc decls); clan-pytest-with-core> E | ^ clan-pytest-with-core> E 891| in clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'fixupOptionType' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1473:10: clan-pytest-with-core> E 1472| fixupOptionType = clan-pytest-with-core> E 1473| loc: opt: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1474| if opt.type.getSubModules or null == null then 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1474:5: clan-pytest-with-core> E 1473| loc: opt: clan-pytest-with-core> E 1474| if opt.type.getSubModules or null == null then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1475| opt // { type = opt.type or types.unspecified; } clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'type.getSubModules' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/nixos/modules/services/hardware/bluetooth.nix:72:9: clan-pytest-with-core> E 71| settings = mkOption { clan-pytest-with-core> E 72| type = cfgFmt.type; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 73| default = { }; clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/nixos/modules/services/hardware/bluetooth.nix:26:12: clan-pytest-with-core> E 25| clan-pytest-with-core> E 26| cfgFmt = pkgs.formats.ini { }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 27| clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:727:15: clan-pytest-with-core> E 726| extraArgs = mapAttrs ( clan-pytest-with-core> E 727| name: _: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 728| addErrorContext (context name) ( clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the module argument `pkgs' in "/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/nixos/modules/services/hardware/bluetooth.nix": clan-pytest-with-core> E clan-pytest-with-core> E … noting that argument `pkgs` is not externally provided, so querying `_module.args` instead, requiring `config` clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:731:13: clan-pytest-with-core> E 730| "noting that argument `${name}` is not externally provided, so querying `_module.args` instead, requiring `config`" clan-pytest-with-core> E 731| config._module.args.${name} clan-pytest-with-core> E | ^ clan-pytest-with-core> E 732| ) clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/types.nix:1029:18: clan-pytest-with-core> E 1028| value = mapAttrs ( clan-pytest-with-core> E 1029| n: v: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1030| if lazy then clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'optionalValue.value' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1312:5: clan-pytest-with-core> E 1311| clan-pytest-with-core> E 1312| optionalValue = if isDefined then { value = mergedValue; } else { }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1313| }; 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1312:21: clan-pytest-with-core> E 1311| clan-pytest-with-core> E 1312| optionalValue = if isDefined then { value = mergedValue; } else { }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1313| }; clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'values' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1240:11: clan-pytest-with-core> E 1239| { clan-pytest-with-core> E 1240| values = defsSorted; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1241| inherit (defsFiltered) highestPrio; 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1211:11: clan-pytest-with-core> E 1210| # Avoid sorting if we don't have to. clan-pytest-with-core> E 1211| if any (def: def.value._type or "" == "order") defsFiltered.values then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1212| sortProperties defsFiltered.values clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'any' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1211:14: clan-pytest-with-core> E 1210| # Avoid sorting if we don't have to. clan-pytest-with-core> E 1211| if any (def: def.value._type or "" == "order") defsFiltered.values then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1212| sortProperties defsFiltered.values clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1211:19: clan-pytest-with-core> E 1210| # Avoid sorting if we don't have to. clan-pytest-with-core> E 1211| if any (def: def.value._type or "" == "order") defsFiltered.values then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1212| sortProperties defsFiltered.values clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'value._type' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1422:67: clan-pytest-with-core> E 1421| strip = clan-pytest-with-core> E 1422| def: if def.value._type or "" == "override" then def // { value = def.value.content; } else def; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1423| in clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'value.content' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1566:22: clan-pytest-with-core> E 1565| _type = "override"; clan-pytest-with-core> E 1566| inherit priority content; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1567| }; 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/nixos/modules/misc/nixpkgs.nix:107:15: clan-pytest-with-core> E 106| clan-pytest-with-core> E 107| finalPkgs = if opt.pkgs.isDefined then cfg.pkgs.appendOverlays cfg.overlays else defaultPkgs; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 108| clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'pkgs.isDefined' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1154:21: clan-pytest-with-core> E 1153| definitionsWithLocations = res.defsFinal; clan-pytest-with-core> E 1154| inherit (res) isDefined; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1155| inherit (res.checkedAndMerged) valueMeta; clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'isDefined' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1310:5: clan-pytest-with-core> E 1309| clan-pytest-with-core> E 1310| isDefined = defsFinal != [ ]; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1311| clan-pytest-with-core> E clan-pytest-with-core> E (6 duplicate frames omitted) clan-pytest-with-core> E clan-pytest-with-core> E error: attribute 'system' missing clan-pytest-with-core> E at /build/store/nix/store/y3h139bhv4373m1hab367ma4p5i95i2f-source/modules/clan/module.nix:164:24: clan-pytest-with-core> E 163| (lib.modules.importApply ../../nixosModules/machineModules/overridePkgs.nix { clan-pytest-with-core> E 164| pkgs = nixpkgsMatrix.${config.inventory.machines.${name}.nixpkgs}.system.${system}.pkgs; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 165| }) clan-pytest-with-core> E Did you mean systems? 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 0x7fffe62cd180> 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> def test_age_incremental_generate_shared_secret( 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> """Generating machines one at a time must not lock others out of shared secrets. clan-pytest-with-core> clan-pytest-with-core> Scenario: machines A and B share a generator. Running clan-pytest-with-core> `clan vars generate A` then `clan vars generate B` must leave both clan-pytest-with-core> machines able to decrypt the shared secret. The fix() workaround in clan-pytest-with-core> run_generators re-encrypts shared secrets to all machines known to clan-pytest-with-core> the clan, not just the ones passed on the command line. clan-pytest-with-core> """ clan-pytest-with-core> age_key = age_keys[0] clan-pytest-with-core> clan-pytest-with-core> # Set up both machines with a shared generator clan-pytest-with-core> for m in ["machine_a", "machine_b"]: clan-pytest-with-core> config = flake.machines[m] = create_test_machine_config() clan-pytest-with-core> clan_vars = config["clan"]["core"]["vars"] clan-pytest-with-core> clan_vars["settings"]["secretStore"] = "age" clan-pytest-with-core> shared_gen = clan_vars["generators"]["cluster_token"] clan-pytest-with-core> shared_gen["share"] = True clan-pytest-with-core> shared_gen["files"]["token"]["secret"] = True clan-pytest-with-core> shared_gen["script"] = 'echo cluster-secret > "$out"/token' clan-pytest-with-core> clan-pytest-with-core> flake.refresh() clan-pytest-with-core> monkeypatch.chdir(flake.path) clan-pytest-with-core> clan-pytest-with-core> # Write clan.nix with recipients for both machines clan-pytest-with-core> (flake.path / "clan.nix").write_text( clan-pytest-with-core> f"{{\n" clan-pytest-with-core> f' vars.settings.recipients.hosts.machine_a = ["{age_key.pubkey}"];\n' clan-pytest-with-core> f' vars.settings.recipients.hosts.machine_b = ["{age_key.pubkey}"];\n' clan-pytest-with-core> f"}}\n" clan-pytest-with-core> ) clan-pytest-with-core> clan-pytest-with-core> # Set up age key clan-pytest-with-core> age_key_dir = flake.path / ".age" clan-pytest-with-core> age_key_dir.mkdir() clan-pytest-with-core> age_key_file = age_key_dir / "key.txt" clan-pytest-with-core> age_key_file.write_text(age_key.privkey) clan-pytest-with-core> monkeypatch.setenv("AGE_KEYFILE", str(age_key_file)) clan-pytest-with-core> clan-pytest-with-core> subprocess.run(["git", "add", "."], cwd=flake.path, check=True) clan-pytest-with-core> subprocess.run( clan-pytest-with-core> ["git", "commit", "-m", "setup"], clan-pytest-with-core> cwd=flake.path, clan-pytest-with-core> check=True, clan-pytest-with-core> ) clan-pytest-with-core> clan-pytest-with-core> # Step 1: Generate only machine_a clan-pytest-with-core> > cli.run(["vars", "generate", "--flake", str(flake.path), "machine_a"]) clan-pytest-with-core> clan-pytest-with-core> /build/src/clan_cli/tests/test_vars_age.py:813: 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/vars/generate.py:33: in generate_command clan-pytest-with-core> run_generators( clan-pytest-with-core> /build/src/clan_lib/vars/generate.py:306: in run_generators clan-pytest-with-core> all_generators = get_generators(machines, full_closure=True) clan-pytest-with-core> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ clan-pytest-with-core> /build/src/clan_lib/vars/generate.py:146: in get_generators clan-pytest-with-core> flake.precache(get_generators_precache_selectors(list(all_machines))) clan-pytest-with-core> /build/src/clan_lib/flake/flake.py:1151: in precache clan-pytest-with-core> self.get_from_nix(not_fetched_selectors) clan-pytest-with-core> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ clan-pytest-with-core> clan-pytest-with-core> self = Flake(identifier='/build/pytest-e14smgm7/flake', hash='sha256-xXHMSUoSajExJkvex9HrU4ocrVS0xk20TLXEh0OGRyc=', 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.?secrets.?age.?plugins', 'clanInternals.machines.x86_64-linux.{machine_a,machine_b}.config.clan.core.v...cModule', 'clanInternals.machines.x86_64-linux.{machine_a,machine_b}.config.clan.core.vars.settings.secretModule', ...] 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 while executing:$ clan select 'clanInternals.?secrets.?age.?plugins' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{machine_a,machine_b}.config.clan.core.vars.generators.*.{share,dependencies,prompts,validationHash}' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{machine_a,machine_b}.config.clan.core.vars.generators.*.files.*.{secret,deploy,owner,group,mode,neededFor}' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{machine_a,machine_b}.config.clan.core.?sops.?defaultGroups' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{machine_a,machine_b}.config.clan.core.vars.settings.publicModule' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{machine_a,machine_b}.config.clan.core.vars.settings.secretModule' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{machine_a,machine_b}.config.clan.core.vars.?sops.?secretUploadDirectory' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{machine_a,machine_b}.config.clan.core.vars.?password-store.?passCommand' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{machine_a,machine_b}.config.clan.core.vars.?password-store.?secretLocation' clan-pytest-with-core> E $ clan select 'clanInternals.vars.settings.?recipients' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{machine_a,machine_b}.config.clan.core.vars.?age.?secretLocation' clan-pytest-with-core> E Reason: attribute 'system' missing clan-pytest-with-core> E at /build/store/nix/store/y3h139bhv4373m1hab367ma4p5i95i2f-source/modules/clan/module.nix:164:24: clan-pytest-with-core> E 163| (lib.modules.importApply ../../nixosModules/machineModules/overridePkgs.nix { clan-pytest-with-core> E 164| pkgs = nixpkgsMatrix.${config.inventory.machines.${name}.nixpkgs}.system.${system}.pkgs; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 165| }) clan-pytest-with-core> E Did you mean systems?. 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 setup ----------------------------- clan-pytest-with-core> !! $HOME does not point to a temp directory!! HOME=/build/pytest-e14smgm7 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/pytest-e14smgm7 clan-pytest-with-core> ----------------------------- Captured stdout call ----------------------------- clan-pytest-with-core> [main 6dcac41] flake: update by flake generator clan-pytest-with-core> 4 files changed, 76 insertions(+) clan-pytest-with-core> create mode 100644 machines/machine_a/configuration.json clan-pytest-with-core> create mode 100644 machines/machine_a/configuration.nix clan-pytest-with-core> create mode 100644 machines/machine_b/configuration.json clan-pytest-with-core> create mode 100644 machines/machine_b/configuration.nix clan-pytest-with-core> [main 384636d] setup clan-pytest-with-core> 2 files changed, 5 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-e14smgm7/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/febbcab65441be6ccc547560fd0155faadebbbb7 clan-pytest-with-core> (cached) $ clan select clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> Prefetching flake /build/pytest-e14smgm7/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/febbcab65441be6ccc547560fd0155faadebbbb7 clan-pytest-with-core> (cached) $ clan select clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> [localhost] $ clan vars generate --flake /build/pytest-e14smgm7/flake machine_a clan-pytest-with-core> Caller: /build/src/clan_cli/tests/test_vars_age.py:813::test_age_incremental_generate_shared_secret clan-pytest-with-core> clan-pytest-with-core> Prefetching flake /build/pytest-e14smgm7/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.cliChecks clan-pytest-with-core> Cache miss for clanInternals.inventoryClass.inventorySerialization.{instances,machines,meta} clan-pytest-with-core> Loading flake cache from file /build/clan-flake-cache/flakes-v2/dcb17e054149f2a731b83077051121460d8f6df3 clan-pytest-with-core> Cache miss for clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> Loading flake cache from file /build/clan-flake-cache/flakes-v2/dcb17e054149f2a731b83077051121460d8f6df3 clan-pytest-with-core> (cached) $ clan select 'clanInternals.inventoryClass.inventorySerialization.{instances,machines,meta}' clan-pytest-with-core> Precaching selectors: clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.machines clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.instances clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.meta clan-pytest-with-core> - (not cached) clanInternals.?secrets.?age.?plugins clan-pytest-with-core> - (cached) clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine_a,machine_b}.config.clan.core.vars.generators.*.{share,dependencies,prompts,validationHash} clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine_a,machine_b}.config.clan.core.vars.generators.*.files.*.{secret,deploy,owner,group,mode,neededFor} clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine_a,machine_b}.config.clan.core.?sops.?defaultGroups clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine_a,machine_b}.config.clan.core.vars.settings.publicModule clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine_a,machine_b}.config.clan.core.vars.settings.secretModule clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine_a,machine_b}.config.clan.core.vars.?sops.?secretUploadDirectory clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine_a,machine_b}.config.clan.core.vars.?password-store.?passCommand clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine_a,machine_b}.config.clan.core.vars.?password-store.?secretLocation clan-pytest-with-core> - (not cached) clanInternals.vars.settings.?recipients clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine_a,machine_b}.config.clan.core.vars.?age.?secretLocation clan-pytest-with-core> ------------------------------ Captured log call ------------------------------- clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:927 Prefetching flake /build/pytest-e14smgm7/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/febbcab65441be6ccc547560fd0155faadebbbb7 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-e14smgm7/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/febbcab65441be6ccc547560fd0155faadebbbb7 clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1179 (cached) $ clan select clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> DEBUG clan_cli.tests.helpers.cli:__init__.py:143 $ clan vars generate --flake /build/pytest-e14smgm7/flake machine_a clan-pytest-with-core> Caller: /build/src/clan_cli/tests/test_vars_age.py:813::test_age_incremental_generate_shared_secret clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:927 Prefetching flake /build/pytest-e14smgm7/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.cliChecks clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1174 Cache miss for clanInternals.inventoryClass.inventorySerialization.{instances,machines,meta} clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:789 Loading flake cache from file /build/clan-flake-cache/flakes-v2/dcb17e054149f2a731b83077051121460d8f6df3 clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1174 Cache miss for clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:789 Loading flake cache from file /build/clan-flake-cache/flakes-v2/dcb17e054149f2a731b83077051121460d8f6df3 clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1179 (cached) $ clan select 'clanInternals.inventoryClass.inventorySerialization.{instances,machines,meta}' clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1144 Precaching selectors: clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.machines clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.instances clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.meta clan-pytest-with-core> - (not cached) clanInternals.?secrets.?age.?plugins clan-pytest-with-core> - (cached) clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine_a,machine_b}.config.clan.core.vars.generators.*.{share,dependencies,prompts,validationHash} clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine_a,machine_b}.config.clan.core.vars.generators.*.files.*.{secret,deploy,owner,group,mode,neededFor} clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine_a,machine_b}.config.clan.core.?sops.?defaultGroups clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine_a,machine_b}.config.clan.core.vars.settings.publicModule clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine_a,machine_b}.config.clan.core.vars.settings.secretModule clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine_a,machine_b}.config.clan.core.vars.?sops.?secretUploadDirectory clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine_a,machine_b}.config.clan.core.vars.?password-store.?passCommand clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine_a,machine_b}.config.clan.core.vars.?password-store.?secretLocation clan-pytest-with-core> - (not cached) clanInternals.vars.settings.?recipients clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine_a,machine_b}.config.clan.core.vars.?age.?secretLocation clan-pytest-with-core> ____________________ test_circular_dependency_raises_error _____________________ clan-pytest-with-core> [gw6] linux -- Python 3.14.7 /nix/store/3n4qphl9s728sz8frmpqqrv9b1m87g68-python3-3.14.7/bin/python clan-pytest-with-core> clan-pytest-with-core> monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7fffe6710b50> clan-pytest-with-core> flake_with_sops = 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_circular_dependency_raises_error( clan-pytest-with-core> monkeypatch: pytest.MonkeyPatch, clan-pytest-with-core> flake_with_sops: ClanFlake, clan-pytest-with-core> ) -> None: clan-pytest-with-core> """Ensure that circular dependencies between generators are caught.""" clan-pytest-with-core> flake = flake_with_sops clan-pytest-with-core> clan-pytest-with-core> config = flake.machines["my_machine"] = create_test_machine_config() clan-pytest-with-core> gen_a = config["clan"]["core"]["vars"]["generators"]["gen_a"] clan-pytest-with-core> gen_a["files"]["value_a"]["secret"] = False clan-pytest-with-core> gen_a["script"] = 'echo "a" > "$out"/value_a' clan-pytest-with-core> gen_a["dependencies"] = ["gen_b"] clan-pytest-with-core> clan-pytest-with-core> gen_b = config["clan"]["core"]["vars"]["generators"]["gen_b"] clan-pytest-with-core> gen_b["files"]["value_b"]["secret"] = False clan-pytest-with-core> gen_b["script"] = 'echo "b" > "$out"/value_b' clan-pytest-with-core> gen_b["dependencies"] = ["gen_a"] clan-pytest-with-core> clan-pytest-with-core> flake.refresh() clan-pytest-with-core> monkeypatch.chdir(flake.path) clan-pytest-with-core> > with pytest.raises(Exception, match="cycle"): clan-pytest-with-core> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ clan-pytest-with-core> E AssertionError: Regex pattern did not match. clan-pytest-with-core> E Expected regex: 'cycle' clan-pytest-with-core> E Actual message: "Error while executing:$ clan select 'clanInternals.?secrets.?age.?plugins'\n$ clan select 'clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.generators.*.{share,dependencies,prompts,validationHash}'\n$ clan select 'clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.generators.*.files.*.{secret,deploy,owner,group,mode,neededFor}'\n$ clan select 'clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.?sops.?defaultGroups'\n$ clan select 'clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.settings.publicModule'\n$ clan select 'clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.settings.secretModule'\n$ clan select 'clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.?sops.?secretUploadDirectory'\n$ clan select 'clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.?password-store.?passCommand'\n$ clan select 'clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.?password-store.?secretLocation'\n$ clan select 'clanInternals.vars.settings.?recipients'\n$ clan select 'clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.?age.?secretLocation'\n Reason: attribute 'system' missing\n at /build/store/nix/store/y3h139bhv4373m1hab367ma4p5i95i2f-source/modules/clan/module.nix:164:24:\n 163| (lib.modules.importApply ../../nixosModules/machineModules/overridePkgs.nix {\n 164| pkgs = nixpkgsMatrix.${config.inventory.machines.${name}.nixpkgs}.system.${system}.pkgs;\n | ^\n 165| })\n Did you mean systems?. Use flag '--debug' to see full nix trace." clan-pytest-with-core> clan-pytest-with-core> /build/src/clan_cli/tests/test_vars_errors.py:101: AssertionError clan-pytest-with-core> ---------------------------- Captured stderr setup ----------------------------- clan-pytest-with-core> !! $HOME does not point to a temp directory!! HOME=/build/pytest-mkx7s7pr clan-pytest-with-core> [localhost] $ clan vars keygen --flake /build/pytest-mkx7s7pr/flake --user admin --no-interactive clan-pytest-with-core> Caller: /build/src/clan_cli/tests/age_keys.py:31::init clan-pytest-with-core> clan-pytest-with-core> Prefetching flake /build/pytest-mkx7s7pr/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/febbcab65441be6ccc547560fd0155faadebbbb7 clan-pytest-with-core> (cached) $ clan select clanInternals.inventoryClass.relativeDirectory 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> git \ clan-pytest-with-core> -C /build/pytest-mkx7s7pr/flake \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-mkx7s7pr/flake/sops/users/admin 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/admin to git clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-mkx7s7pr/flake \ clan-pytest-with-core> diff \ clan-pytest-with-core> --cached --exit-code \ clan-pytest-with-core> -- /build/pytest-mkx7s7pr/flake/sops/users/admin 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-mkx7s7pr/flake \ clan-pytest-with-core> commit \ clan-pytest-with-core> -m 'secrets: add user admin' \ clan-pytest-with-core> --no-verify /build/pytest-mkx7s7pr/flake/sops/users/admin 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/admin to git 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/pytest-mkx7s7pr clan-pytest-with-core> DEBUG clan_cli.tests.helpers.cli:__init__.py:143 $ clan vars keygen --flake /build/pytest-mkx7s7pr/flake --user admin --no-interactive clan-pytest-with-core> Caller: /build/src/clan_cli/tests/age_keys.py:31::init clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:927 Prefetching flake /build/pytest-mkx7s7pr/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/febbcab65441be6ccc547560fd0155faadebbbb7 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.cmd:__init__.py:143 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> DEBUG clan_lib.cmd:__init__.py:143 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> DEBUG clan_cli.secrets.sops:sops.py:99 Found age public key from a private key in the environment (SOPS_AGE_KEY): age1dhwqzkah943xzc34tc3dlmfayyevcmdmxzjezdgdy33euxwf59vsp3vk3c clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:143 git \ clan-pytest-with-core> -C /build/pytest-mkx7s7pr/flake \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-mkx7s7pr/flake/sops/users/admin 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> DEBUG clan_lib.cmd:__init__.py:143 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> DEBUG clan_lib.git:__init__.py:98 Adding sops/users/admin to git clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:143 git \ clan-pytest-with-core> -C /build/pytest-mkx7s7pr/flake \ clan-pytest-with-core> diff \ clan-pytest-with-core> --cached --exit-code \ clan-pytest-with-core> -- /build/pytest-mkx7s7pr/flake/sops/users/admin 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> DEBUG clan_lib.cmd:__init__.py:143 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> DEBUG clan_lib.cmd:__init__.py:143 git \ clan-pytest-with-core> -C /build/pytest-mkx7s7pr/flake \ clan-pytest-with-core> commit \ clan-pytest-with-core> -m 'secrets: add user admin' \ clan-pytest-with-core> --no-verify /build/pytest-mkx7s7pr/flake/sops/users/admin 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> DEBUG clan_lib.cmd:__init__.py:143 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> INFO clan_lib.git:__init__.py:141 Committed sops/users/admin to git clan-pytest-with-core> ----------------------------- Captured stdout call ----------------------------- clan-pytest-with-core> [main 7c32740] flake: update by flake generator clan-pytest-with-core> 2 files changed, 48 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> ----------------------------- Captured stderr call ----------------------------- clan-pytest-with-core> Prefetching flake /build/pytest-mkx7s7pr/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/d2c0050d97832c3ac5193485b93705d00938c15e clan-pytest-with-core> (cached) $ clan select clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> [localhost] $ clan vars generate --flake /build/pytest-mkx7s7pr/flake my_machine clan-pytest-with-core> Caller: /build/src/clan_cli/tests/test_vars_errors.py:102::test_circular_dependency_raises_error clan-pytest-with-core> clan-pytest-with-core> Prefetching flake /build/pytest-mkx7s7pr/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.cliChecks clan-pytest-with-core> Cache miss for clanInternals.inventoryClass.inventorySerialization.{instances,machines,meta} clan-pytest-with-core> Loading flake cache from file /build/clan-flake-cache/flakes-v2/0b870d120a5a2af992ad4430eda376b37def2c02 clan-pytest-with-core> Cache miss for clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> Loading flake cache from file /build/clan-flake-cache/flakes-v2/0b870d120a5a2af992ad4430eda376b37def2c02 clan-pytest-with-core> (cached) $ clan select 'clanInternals.inventoryClass.inventorySerialization.{instances,machines,meta}' clan-pytest-with-core> Precaching selectors: clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.machines clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.instances clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.meta clan-pytest-with-core> - (not cached) clanInternals.?secrets.?age.?plugins clan-pytest-with-core> - (cached) clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.generators.*.{share,dependencies,prompts,validationHash} clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.generators.*.files.*.{secret,deploy,owner,group,mode,neededFor} clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.?sops.?defaultGroups clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.settings.publicModule clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.settings.secretModule clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.?sops.?secretUploadDirectory clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.?password-store.?passCommand clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.?password-store.?secretLocation clan-pytest-with-core> - (not cached) clanInternals.vars.settings.?recipients clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.?age.?secretLocation clan-pytest-with-core> ------------------------------ Captured log call ------------------------------- clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:927 Prefetching flake /build/pytest-mkx7s7pr/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/d2c0050d97832c3ac5193485b93705d00938c15e clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1179 (cached) $ clan select clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> DEBUG clan_cli.tests.helpers.cli:__init__.py:143 $ clan vars generate --flake /build/pytest-mkx7s7pr/flake my_machine clan-pytest-with-core> Caller: /build/src/clan_cli/tests/test_vars_errors.py:102::test_circular_dependency_raises_error clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:927 Prefetching flake /build/pytest-mkx7s7pr/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.cliChecks clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1174 Cache miss for clanInternals.inventoryClass.inventorySerialization.{instances,machines,meta} clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:789 Loading flake cache from file /build/clan-flake-cache/flakes-v2/0b870d120a5a2af992ad4430eda376b37def2c02 clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1174 Cache miss for clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:789 Loading flake cache from file /build/clan-flake-cache/flakes-v2/0b870d120a5a2af992ad4430eda376b37def2c02 clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1179 (cached) $ clan select 'clanInternals.inventoryClass.inventorySerialization.{instances,machines,meta}' clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1144 Precaching selectors: clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.machines clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.instances clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.meta clan-pytest-with-core> - (not cached) clanInternals.?secrets.?age.?plugins clan-pytest-with-core> - (cached) clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.generators.*.{share,dependencies,prompts,validationHash} clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.generators.*.files.*.{secret,deploy,owner,group,mode,neededFor} clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.?sops.?defaultGroups clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.settings.publicModule clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.settings.secretModule clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.?sops.?secretUploadDirectory clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.?password-store.?passCommand clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.?password-store.?secretLocation clan-pytest-with-core> - (not cached) clanInternals.vars.settings.?recipients clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.?age.?secretLocation clan-pytest-with-core> _____________ test_get_generators_only_decrypts_requested_machines _____________ clan-pytest-with-core> [gw1] linux -- Python 3.14.7 /nix/store/3n4qphl9s728sz8frmpqqrv9b1m87g68-python3-3.14.7/bin/python clan-pytest-with-core> clan-pytest-with-core> self = Flake(identifier='/build/pytest-rxhxgfwo/flake', hash='sha256-CjZJItZD7uJZURbnceQrhQx5NU+cOATivAsugm6JnFY=', 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.?secrets.?age.?plugins', 'clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.var...licModule', 'clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.settings.secretModule', ...] 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-rxhxgfwo/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/jg9vxgv0sm4g7a9dh4irfhp0kcz9s1az-source?narHash=sha256-CjZJItZD7uJZURbnceQrhQx5NU+cOATivAsugm6JnFY="; 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": "maybe", "value": "secrets"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "plugins"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "share"}, {"type": "str", "value": "dependencies"}, {"type": "str", "value": "prompts"}, {"type": "str", "value": "validationHash"}]}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "str", "value": "files"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "secret"}, {"type": "str", "value": "deploy"}, {"type": "str", "value": "owner"}, {"type": "str", "value": "group"}, {"type": "str", "value": "mode"}, {"type": "str", "value": "neededFor"}]}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "defaultGroups"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "publicModule"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "secretModule"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "secretUploadDirectory"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "passCommand"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "secretLocation"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "maybe", "value": "recipients"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "secretLocation"}]'"'"''"'"') 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": "maybe", "value": "secrets"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "plugins"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "share"}, {"type": "str", "value": "dependencies"}, {"type": "str", "value": "prompts"}, {"type": "str", "value": "validationHash"}]}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "str", "value": "files"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "secret"}, {"type": "str", "value": "deploy"}, {"type": "str", "value": "owner"}, {"type": "str", "value": "group"}, {"type": "str", "value": "mode"}, {"type": "str", "value": "neededFor"}]}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "defaultGroups"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "publicModule"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "secretModule"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "secretUploadDirectory"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "passCommand"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "secretLocation"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "maybe", "value": "recipients"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "secretLocation"}]'') 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": "maybe", "value": "secrets"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "plugins"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "share"}, {"type": "str", "value": "dependencies"}, {"type": "str", "value": "prompts"}, {"type": "str", "value": "validationHash"}]}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "str", "value": "files"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "secret"}, {"type": "str", "value": "deploy"}, {"type": "str", "value": "owner"}, {"type": "str", "value": "group"}, {"type": "str", "value": "mode"}, {"type": "str", "value": "neededFor"}]}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "defaultGroups"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "publicModule"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "secretModule"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "secretUploadDirectory"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "passCommand"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "secretLocation"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "maybe", "value": "recipients"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine1"}, {"type": "str", "value": "machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "secretLocation"}]'') flake) clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating list element at index 1 clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating attribute 'machine1' clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/cba1x9mxnwr8b36cw41bya7g6d5v1p7d-source/select.nix:325:37: clan-pytest-with-core> E 324| in clan-pytest-with-core> E 325| builtins.mapAttrs (_: v: recurse selectors (idx + 1) v) filteredAttrs clan-pytest-with-core> E | ^ clan-pytest-with-core> E 326| else if selector.type == "maybe" then 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:325:40: clan-pytest-with-core> E 324| in clan-pytest-with-core> E 325| builtins.mapAttrs (_: v: recurse selectors (idx + 1) v) filteredAttrs clan-pytest-with-core> E | ^ clan-pytest-with-core> E 326| else if selector.type == "maybe" then 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 … from call site clan-pytest-with-core> E at /build/store/nix/store/cba1x9mxnwr8b36cw41bya7g6d5v1p7d-source/select.nix:312:15: clan-pytest-with-core> E 311| else if selector.type == "str" then clan-pytest-with-core> E 312| recurse selectors (idx + 1) (builtins.getAttr selector.value obj) clan-pytest-with-core> E | ^ clan-pytest-with-core> E 313| else if selector.type == "set" then 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 'getAttr' builtin clan-pytest-with-core> E at /build/store/nix/store/cba1x9mxnwr8b36cw41bya7g6d5v1p7d-source/select.nix:312:44: clan-pytest-with-core> E 311| else if selector.type == "str" then clan-pytest-with-core> E 312| recurse selectors (idx + 1) (builtins.getAttr selector.value obj) clan-pytest-with-core> E | ^ clan-pytest-with-core> E 313| else if selector.type == "set" then clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'seq' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:401:18: clan-pytest-with-core> E 400| options = checked options; clan-pytest-with-core> E 401| config = checked (removeAttrs config [ "_module" ]); clan-pytest-with-core> E | ^ clan-pytest-with-core> E 402| _module = checked (config._module); 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:304:9: clan-pytest-with-core> E 303| checkUnmatched = clan-pytest-with-core> E 304| if config._module.check && config._module.freeformType == null && merged.unmatchedDefns != [ ] then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 305| let clan-pytest-with-core> E clan-pytest-with-core> E … in the right operand of the AND (&&) operator clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:304:72: clan-pytest-with-core> E 303| checkUnmatched = clan-pytest-with-core> E 304| if config._module.check && config._module.freeformType == null && merged.unmatchedDefns != [ ] then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 305| let clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'unmatchedDefns' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:940:7: clan-pytest-with-core> E 939| # Transforms unmatchedDefnsByName into a list of definitions clan-pytest-with-core> E 940| unmatchedDefns = clan-pytest-with-core> E | ^ clan-pytest-with-core> E 941| if configs == [ ] then clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'concatLists' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:946:11: clan-pytest-with-core> E 945| else clan-pytest-with-core> E 946| concatLists ( clan-pytest-with-core> E | ^ clan-pytest-with-core> E 947| mapAttrsToList ( clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:948:21: clan-pytest-with-core> E 947| mapAttrsToList ( clan-pytest-with-core> E 948| name: defs: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 949| map ( clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'map' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:949:15: clan-pytest-with-core> E 948| name: defs: clan-pytest-with-core> E 949| map ( clan-pytest-with-core> E | ^ clan-pytest-with-core> E 950| def: clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:932:22: clan-pytest-with-core> E 931| # Propagate all unmatched definitions from nested option sets clan-pytest-with-core> E 932| mapAttrs (n: v: v.unmatchedDefns) resultsByName clan-pytest-with-core> E | ^ clan-pytest-with-core> E 933| # Plus the definitions for the current prefix that don't have a matching option clan-pytest-with-core> E clan-pytest-with-core> E (10 duplicate frames omitted) clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:932:25: clan-pytest-with-core> E 931| # Propagate all unmatched definitions from nested option sets clan-pytest-with-core> E 932| mapAttrs (n: v: v.unmatchedDefns) resultsByName clan-pytest-with-core> E | ^ clan-pytest-with-core> E 933| # Plus the definitions for the current prefix that don't have a matching option clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:876:15: clan-pytest-with-core> E 875| resultsByName = mapAttrs ( clan-pytest-with-core> E 876| name: decls: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 877| # We're descending into attribute ‘name’. 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:888:9: clan-pytest-with-core> E 887| in clan-pytest-with-core> E 888| if length optionDecls == length decls then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 889| let clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'length' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:888:12: clan-pytest-with-core> E 887| in clan-pytest-with-core> E 888| if length optionDecls == length decls then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 889| let clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'filter' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:882:25: clan-pytest-with-core> E 881| defns' = rawDefinitionsByName.${name} or [ ]; clan-pytest-with-core> E 882| optionDecls = filter ( clan-pytest-with-core> E | ^ clan-pytest-with-core> E 883| m: clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:883:13: clan-pytest-with-core> E 882| optionDecls = filter ( clan-pytest-with-core> E 883| m: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 884| m.options ? _type clan-pytest-with-core> E clan-pytest-with-core> E … in the left operand of the AND (&&) operator clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:885:13: clan-pytest-with-core> E 884| m.options ? _type clan-pytest-with-core> E 885| && (m.options._type == "option" || throwDeclarationTypeError loc m.options._type m._file) clan-pytest-with-core> E | ^ clan-pytest-with-core> E 886| ) decls; clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'options' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:807:15: clan-pytest-with-core> E 806| pos = unsafeGetAttrPos n subtree; clan-pytest-with-core> E 807| options = option; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 808| }) subtree clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:289:73: clan-pytest-with-core> E 288| len = length attrPath; clan-pytest-with-core> E 289| atDepth = n: if n == len then value else { ${elemAt attrPath n} = atDepth (n + 1); }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 290| in clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'atDepth' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:289:17: clan-pytest-with-core> E 288| len = length attrPath; clan-pytest-with-core> E 289| atDepth = n: if n == len then value else { ${elemAt attrPath n} = atDepth (n + 1); }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 290| in clan-pytest-with-core> E clan-pytest-with-core> E … in the right operand of the update (//) operator clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:2047:9: clan-pytest-with-core> E 2046| } clan-pytest-with-core> E 2047| // optionalAttrs (toType != null) { clan-pytest-with-core> E | ^ clan-pytest-with-core> E 2048| type = toType; clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:2047:12: clan-pytest-with-core> E 2046| } clan-pytest-with-core> E 2047| // optionalAttrs (toType != null) { clan-pytest-with-core> E | ^ clan-pytest-with-core> E 2048| type = toType; clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'optionalAttrs' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:1492:25: clan-pytest-with-core> E 1491| */ clan-pytest-with-core> E 1492| optionalAttrs = cond: as: if cond then as else { }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1493| 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:1492:29: clan-pytest-with-core> E 1491| */ clan-pytest-with-core> E 1492| optionalAttrs = cond: as: if cond then as else { }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1493| clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:2036:17: clan-pytest-with-core> E 2035| let clan-pytest-with-core> E 2036| opt = attrByPath to { } options; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 2037| in clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'attrByPath' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:89:24: clan-pytest-with-core> E 88| attrByPath = clan-pytest-with-core> E 89| attrPath: default: set: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 90| let clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:106:5: clan-pytest-with-core> E 105| in clan-pytest-with-core> E 106| attrByPath' 0 set; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 107| clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'attrByPath'' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:93:12: clan-pytest-with-core> E 92| attrByPath' = clan-pytest-with-core> E 93| n: s: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 94| ( clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:102:35: clan-pytest-with-core> E 101| in clan-pytest-with-core> E 102| if s ? ${attr} then attrByPath' (n + 1) s.${attr} else default clan-pytest-with-core> E | ^ clan-pytest-with-core> E 103| ) clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'attrByPath'' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:93:12: clan-pytest-with-core> E 92| attrByPath' = clan-pytest-with-core> E 93| n: s: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 94| ( clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:102:35: clan-pytest-with-core> E 101| in clan-pytest-with-core> E 102| if s ? ${attr} then attrByPath' (n + 1) s.${attr} else default clan-pytest-with-core> E | ^ clan-pytest-with-core> E 103| ) clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'attrByPath'' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:93:12: clan-pytest-with-core> E 92| attrByPath' = clan-pytest-with-core> E 93| n: s: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 94| ( clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:102:35: clan-pytest-with-core> E 101| in clan-pytest-with-core> E 102| if s ? ${attr} then attrByPath' (n + 1) s.${attr} else default clan-pytest-with-core> E | ^ clan-pytest-with-core> E 103| ) clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'attrByPath'' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:93:12: clan-pytest-with-core> E 92| attrByPath' = clan-pytest-with-core> E 93| n: s: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 94| ( clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:102:55: clan-pytest-with-core> E 101| in clan-pytest-with-core> E 102| if s ? ${attr} then attrByPath' (n + 1) s.${attr} else default clan-pytest-with-core> E | ^ clan-pytest-with-core> E 103| ) clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:927:37: clan-pytest-with-core> E 926| clan-pytest-with-core> E 927| matchedOptions = mapAttrs (n: v: v.matchedOptions) resultsByName; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 928| clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'matchedOptions' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:893:13: clan-pytest-with-core> E 892| { clan-pytest-with-core> E 893| matchedOptions = evalOptionValue loc opt defns'; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 894| unmatchedDefns = [ ]; clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:893:30: clan-pytest-with-core> E 892| { clan-pytest-with-core> E 893| matchedOptions = evalOptionValue loc opt defns'; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 894| unmatchedDefns = [ ]; clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'evalOptionValue' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1103:15: clan-pytest-with-core> E 1102| evalOptionValue = clan-pytest-with-core> E 1103| loc: opt: defs: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1104| let clan-pytest-with-core> E clan-pytest-with-core> E … in the left operand of the update (//) operator clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1148:5: clan-pytest-with-core> E 1147| warnDeprecation opt clan-pytest-with-core> E 1148| // { clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1149| value = addErrorContext "while evaluating the option `${showOption loc}':" value; 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1141:9: clan-pytest-with-core> E 1140| warnDeprecation = clan-pytest-with-core> E 1141| if (opt.type.deprecationMessage != null) then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1142| warn "The type `types.${opt.type.name}' of option `${showOption loc}' defined in ${showFiles opt.declarations} is deprecated. ${opt.type.deprecationMessage}" clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:890:19: clan-pytest-with-core> E 889| let clan-pytest-with-core> E 890| opt = fixupOptionType loc (mergeOptionDecls loc decls); clan-pytest-with-core> E | ^ clan-pytest-with-core> E 891| in clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'fixupOptionType' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1473:10: clan-pytest-with-core> E 1472| fixupOptionType = clan-pytest-with-core> E 1473| loc: opt: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1474| if opt.type.getSubModules or null == null then 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1474:5: clan-pytest-with-core> E 1473| loc: opt: clan-pytest-with-core> E 1474| if opt.type.getSubModules or null == null then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1475| opt // { type = opt.type or types.unspecified; } clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'type.getSubModules' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/nixos/modules/services/hardware/bluetooth.nix:72:9: clan-pytest-with-core> E 71| settings = mkOption { clan-pytest-with-core> E 72| type = cfgFmt.type; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 73| default = { }; clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/nixos/modules/services/hardware/bluetooth.nix:26:12: clan-pytest-with-core> E 25| clan-pytest-with-core> E 26| cfgFmt = pkgs.formats.ini { }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 27| clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:727:15: clan-pytest-with-core> E 726| extraArgs = mapAttrs ( clan-pytest-with-core> E 727| name: _: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 728| addErrorContext (context name) ( clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the module argument `pkgs' in "/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/nixos/modules/services/hardware/bluetooth.nix": clan-pytest-with-core> E clan-pytest-with-core> E … noting that argument `pkgs` is not externally provided, so querying `_module.args` instead, requiring `config` clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:731:13: clan-pytest-with-core> E 730| "noting that argument `${name}` is not externally provided, so querying `_module.args` instead, requiring `config`" clan-pytest-with-core> E 731| config._module.args.${name} clan-pytest-with-core> E | ^ clan-pytest-with-core> E 732| ) clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/types.nix:1029:18: clan-pytest-with-core> E 1028| value = mapAttrs ( clan-pytest-with-core> E 1029| n: v: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1030| if lazy then clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'optionalValue.value' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1312:5: clan-pytest-with-core> E 1311| clan-pytest-with-core> E 1312| optionalValue = if isDefined then { value = mergedValue; } else { }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1313| }; 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1312:21: clan-pytest-with-core> E 1311| clan-pytest-with-core> E 1312| optionalValue = if isDefined then { value = mergedValue; } else { }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1313| }; clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'values' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1240:11: clan-pytest-with-core> E 1239| { clan-pytest-with-core> E 1240| values = defsSorted; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1241| inherit (defsFiltered) highestPrio; 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1211:11: clan-pytest-with-core> E 1210| # Avoid sorting if we don't have to. clan-pytest-with-core> E 1211| if any (def: def.value._type or "" == "order") defsFiltered.values then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1212| sortProperties defsFiltered.values clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'any' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1211:14: clan-pytest-with-core> E 1210| # Avoid sorting if we don't have to. clan-pytest-with-core> E 1211| if any (def: def.value._type or "" == "order") defsFiltered.values then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1212| sortProperties defsFiltered.values clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1211:19: clan-pytest-with-core> E 1210| # Avoid sorting if we don't have to. clan-pytest-with-core> E 1211| if any (def: def.value._type or "" == "order") defsFiltered.values then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1212| sortProperties defsFiltered.values clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'value._type' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1422:67: clan-pytest-with-core> E 1421| strip = clan-pytest-with-core> E 1422| def: if def.value._type or "" == "override" then def // { value = def.value.content; } else def; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1423| in clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'value.content' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1566:22: clan-pytest-with-core> E 1565| _type = "override"; clan-pytest-with-core> E 1566| inherit priority content; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1567| }; 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/nixos/modules/misc/nixpkgs.nix:107:15: clan-pytest-with-core> E 106| clan-pytest-with-core> E 107| finalPkgs = if opt.pkgs.isDefined then cfg.pkgs.appendOverlays cfg.overlays else defaultPkgs; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 108| clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'pkgs.isDefined' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1154:21: clan-pytest-with-core> E 1153| definitionsWithLocations = res.defsFinal; clan-pytest-with-core> E 1154| inherit (res) isDefined; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1155| inherit (res.checkedAndMerged) valueMeta; clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'isDefined' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1310:5: clan-pytest-with-core> E 1309| clan-pytest-with-core> E 1310| isDefined = defsFinal != [ ]; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1311| clan-pytest-with-core> E clan-pytest-with-core> E (6 duplicate frames omitted) clan-pytest-with-core> E clan-pytest-with-core> E error: attribute 'system' missing clan-pytest-with-core> E at /build/store/nix/store/y3h139bhv4373m1hab367ma4p5i95i2f-source/modules/clan/module.nix:164:24: clan-pytest-with-core> E 163| (lib.modules.importApply ../../nixosModules/machineModules/overridePkgs.nix { clan-pytest-with-core> E 164| pkgs = nixpkgsMatrix.${config.inventory.machines.${name}.nixpkgs}.system.${system}.pkgs; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 165| }) clan-pytest-with-core> E Did you mean systems? 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 0x7fffe6602a80> clan-pytest-with-core> flake_with_sops = 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_get_generators_only_decrypts_requested_machines( clan-pytest-with-core> monkeypatch: pytest.MonkeyPatch, clan-pytest-with-core> flake_with_sops: ClanFlake, clan-pytest-with-core> ) -> None: clan-pytest-with-core> """Test that get_generators only decrypts secrets for requested machines. clan-pytest-with-core> clan-pytest-with-core> This verifies the fix for the bug where `clan machines update ` clan-pytest-with-core> would try to decrypt secrets for all machines in the flake, not just the clan-pytest-with-core> target machine. Users who don't have access to decrypt secrets for other clan-pytest-with-core> machines should still be able to update their target machine. clan-pytest-with-core> """ clan-pytest-with-core> flake = flake_with_sops clan-pytest-with-core> clan-pytest-with-core> # Create two machines with secret prompts clan-pytest-with-core> m1_config = flake.machines["machine1"] = create_test_machine_config() clan-pytest-with-core> m1_gen = m1_config["clan"]["core"]["vars"]["generators"]["my_generator"] clan-pytest-with-core> m1_gen["prompts"]["secret_prompt"]["type"] = "hidden" clan-pytest-with-core> m1_gen["prompts"]["secret_prompt"]["persist"] = True clan-pytest-with-core> m1_gen["files"]["secret_prompt"]["secret"] = True clan-pytest-with-core> clan-pytest-with-core> m2_config = flake.machines["machine2"] = create_test_machine_config() clan-pytest-with-core> m2_gen = m2_config["clan"]["core"]["vars"]["generators"]["my_generator"] clan-pytest-with-core> m2_gen["prompts"]["secret_prompt"]["type"] = "hidden" clan-pytest-with-core> m2_gen["prompts"]["secret_prompt"]["persist"] = True clan-pytest-with-core> m2_gen["files"]["secret_prompt"]["secret"] = True clan-pytest-with-core> clan-pytest-with-core> flake.refresh() clan-pytest-with-core> monkeypatch.chdir(flake.path) clan-pytest-with-core> clan-pytest-with-core> # Generate secrets for both machines clan-pytest-with-core> > run_generators( clan-pytest-with-core> machines=[Machine(name="machine1", flake=Flake(str(flake.path)))], clan-pytest-with-core> generators=["my_generator"], clan-pytest-with-core> prompt_values={"my_generator": {"secret_prompt": "secret1"}}, clan-pytest-with-core> ) clan-pytest-with-core> clan-pytest-with-core> /build/src/clan_cli/tests/test_vars_cache.py:501: clan-pytest-with-core> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ clan-pytest-with-core> /build/src/clan_lib/vars/generate.py:306: in run_generators clan-pytest-with-core> all_generators = get_generators(machines, full_closure=True) clan-pytest-with-core> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ clan-pytest-with-core> /build/src/clan_lib/vars/generate.py:146: in get_generators clan-pytest-with-core> flake.precache(get_generators_precache_selectors(list(all_machines))) clan-pytest-with-core> /build/src/clan_lib/flake/flake.py:1151: in precache clan-pytest-with-core> self.get_from_nix(not_fetched_selectors) clan-pytest-with-core> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ clan-pytest-with-core> clan-pytest-with-core> self = Flake(identifier='/build/pytest-rxhxgfwo/flake', hash='sha256-CjZJItZD7uJZURbnceQrhQx5NU+cOATivAsugm6JnFY=', 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.?secrets.?age.?plugins', 'clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.var...licModule', 'clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.settings.secretModule', ...] 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 while executing:$ clan select 'clanInternals.?secrets.?age.?plugins' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.generators.*.{share,dependencies,prompts,validationHash}' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.generators.*.files.*.{secret,deploy,owner,group,mode,neededFor}' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.?sops.?defaultGroups' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.settings.publicModule' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.settings.secretModule' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.?sops.?secretUploadDirectory' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.?password-store.?passCommand' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.?password-store.?secretLocation' clan-pytest-with-core> E $ clan select 'clanInternals.vars.settings.?recipients' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.?age.?secretLocation' clan-pytest-with-core> E Reason: attribute 'system' missing clan-pytest-with-core> E at /build/store/nix/store/y3h139bhv4373m1hab367ma4p5i95i2f-source/modules/clan/module.nix:164:24: clan-pytest-with-core> E 163| (lib.modules.importApply ../../nixosModules/machineModules/overridePkgs.nix { clan-pytest-with-core> E 164| pkgs = nixpkgsMatrix.${config.inventory.machines.${name}.nixpkgs}.system.${system}.pkgs; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 165| }) clan-pytest-with-core> E Did you mean systems?. 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 setup ----------------------------- clan-pytest-with-core> !! $HOME does not point to a temp directory!! HOME=/build/pytest-rxhxgfwo clan-pytest-with-core> [localhost] $ clan vars keygen --flake /build/pytest-rxhxgfwo/flake --user admin --no-interactive clan-pytest-with-core> Caller: /build/src/clan_cli/tests/age_keys.py:31::init clan-pytest-with-core> clan-pytest-with-core> Prefetching flake /build/pytest-rxhxgfwo/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/febbcab65441be6ccc547560fd0155faadebbbb7 clan-pytest-with-core> (cached) $ clan select clanInternals.inventoryClass.relativeDirectory 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> git \ clan-pytest-with-core> -C /build/pytest-rxhxgfwo/flake \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-rxhxgfwo/flake/sops/users/admin 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/admin to git clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-rxhxgfwo/flake \ clan-pytest-with-core> diff \ clan-pytest-with-core> --cached --exit-code \ clan-pytest-with-core> -- /build/pytest-rxhxgfwo/flake/sops/users/admin 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-rxhxgfwo/flake \ clan-pytest-with-core> commit \ clan-pytest-with-core> -m 'secrets: add user admin' \ clan-pytest-with-core> --no-verify /build/pytest-rxhxgfwo/flake/sops/users/admin 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/admin to git 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/pytest-rxhxgfwo clan-pytest-with-core> DEBUG clan_cli.tests.helpers.cli:__init__.py:143 $ clan vars keygen --flake /build/pytest-rxhxgfwo/flake --user admin --no-interactive clan-pytest-with-core> Caller: /build/src/clan_cli/tests/age_keys.py:31::init clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:927 Prefetching flake /build/pytest-rxhxgfwo/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/febbcab65441be6ccc547560fd0155faadebbbb7 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.cmd:__init__.py:143 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> DEBUG clan_lib.cmd:__init__.py:143 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> DEBUG clan_cli.secrets.sops:sops.py:99 Found age public key from a private key in the environment (SOPS_AGE_KEY): age1dhwqzkah943xzc34tc3dlmfayyevcmdmxzjezdgdy33euxwf59vsp3vk3c clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:143 git \ clan-pytest-with-core> -C /build/pytest-rxhxgfwo/flake \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-rxhxgfwo/flake/sops/users/admin 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> DEBUG clan_lib.cmd:__init__.py:143 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> DEBUG clan_lib.git:__init__.py:98 Adding sops/users/admin to git clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:143 git \ clan-pytest-with-core> -C /build/pytest-rxhxgfwo/flake \ clan-pytest-with-core> diff \ clan-pytest-with-core> --cached --exit-code \ clan-pytest-with-core> -- /build/pytest-rxhxgfwo/flake/sops/users/admin 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> DEBUG clan_lib.cmd:__init__.py:143 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> DEBUG clan_lib.cmd:__init__.py:143 git \ clan-pytest-with-core> -C /build/pytest-rxhxgfwo/flake \ clan-pytest-with-core> commit \ clan-pytest-with-core> -m 'secrets: add user admin' \ clan-pytest-with-core> --no-verify /build/pytest-rxhxgfwo/flake/sops/users/admin 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> DEBUG clan_lib.cmd:__init__.py:143 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> INFO clan_lib.git:__init__.py:141 Committed sops/users/admin to git clan-pytest-with-core> ----------------------------- Captured stdout call ----------------------------- clan-pytest-with-core> [main 8cd3bf0] flake: update by flake generator clan-pytest-with-core> 4 files changed, 78 insertions(+) clan-pytest-with-core> create mode 100644 machines/machine1/configuration.json clan-pytest-with-core> create mode 100644 machines/machine1/configuration.nix clan-pytest-with-core> create mode 100644 machines/machine2/configuration.json clan-pytest-with-core> create mode 100644 machines/machine2/configuration.nix clan-pytest-with-core> ----------------------------- Captured stderr call ----------------------------- clan-pytest-with-core> Prefetching flake /build/pytest-rxhxgfwo/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/d2c0050d97832c3ac5193485b93705d00938c15e clan-pytest-with-core> (cached) $ clan select clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> Prefetching flake /build/pytest-rxhxgfwo/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/d2c0050d97832c3ac5193485b93705d00938c15e clan-pytest-with-core> (cached) $ clan select clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> Prefetching flake /build/pytest-rxhxgfwo/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.inventoryClass.relativeDirectory clan-pytest-with-core> Cache miss for clanInternals.inventoryClass.inventorySerialization.{instances,machines,meta} clan-pytest-with-core> Loading flake cache from file /build/clan-flake-cache/flakes-v2/3b7c84b15a4b0f91ce4184c98f6042e86e889155 clan-pytest-with-core> Precaching selectors: clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.machines clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.instances clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.meta clan-pytest-with-core> - (not cached) clanInternals.?secrets.?age.?plugins clan-pytest-with-core> - (cached) clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.generators.*.{share,dependencies,prompts,validationHash} clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.generators.*.files.*.{secret,deploy,owner,group,mode,neededFor} clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.?sops.?defaultGroups clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.settings.publicModule clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.settings.secretModule clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.?sops.?secretUploadDirectory clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.?password-store.?passCommand clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.?password-store.?secretLocation clan-pytest-with-core> - (not cached) clanInternals.vars.settings.?recipients clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.?age.?secretLocation clan-pytest-with-core> ------------------------------ Captured log call ------------------------------- clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:927 Prefetching flake /build/pytest-rxhxgfwo/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/d2c0050d97832c3ac5193485b93705d00938c15e 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-rxhxgfwo/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/d2c0050d97832c3ac5193485b93705d00938c15e 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-rxhxgfwo/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.inventoryClass.relativeDirectory clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1174 Cache miss for clanInternals.inventoryClass.inventorySerialization.{instances,machines,meta} clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:789 Loading flake cache from file /build/clan-flake-cache/flakes-v2/3b7c84b15a4b0f91ce4184c98f6042e86e889155 clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1144 Precaching selectors: clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.machines clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.instances clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.meta clan-pytest-with-core> - (not cached) clanInternals.?secrets.?age.?plugins clan-pytest-with-core> - (cached) clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.generators.*.{share,dependencies,prompts,validationHash} clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.generators.*.files.*.{secret,deploy,owner,group,mode,neededFor} clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.?sops.?defaultGroups clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.settings.publicModule clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.settings.secretModule clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.?sops.?secretUploadDirectory clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.?password-store.?passCommand clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.?password-store.?secretLocation clan-pytest-with-core> - (not cached) clanInternals.vars.settings.?recipients clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine1,machine2}.config.clan.core.vars.?age.?secretLocation clan-pytest-with-core> _________ test_generate_secret_var_password_store_minimal_select_calls _________ clan-pytest-with-core> [gw10] linux -- Python 3.14.7 /nix/store/3n4qphl9s728sz8frmpqqrv9b1m87g68-python3-3.14.7/bin/python clan-pytest-with-core> clan-pytest-with-core> self = Flake(identifier='/build/pytest-gdxmxbyr/flake', hash='sha256-FIYPaPAoHd94nvJIl2+JecZVrPdEWVKQklfCJ09DRj0=', 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.?secrets.?age.?plugins', 'clanInternals.machines.x86_64-linux.{machine2,machine3,my_machine}.config.cl... 'clanInternals.machines.x86_64-linux.{machine2,machine3,my_machine}.config.clan.core.vars.settings.secretModule', ...] 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-gdxmxbyr/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/xnw2n71mjm580zwjhmcyipg6g36m1yvn-source?narHash=sha256-FIYPaPAoHd94nvJIl2+JecZVrPdEWVKQklfCJ09DRj0="; 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": "maybe", "value": "secrets"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "plugins"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine2"}, {"type": "str", "value": "machine3"}, {"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "share"}, {"type": "str", "value": "dependencies"}, {"type": "str", "value": "prompts"}, {"type": "str", "value": "validationHash"}]}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine2"}, {"type": "str", "value": "machine3"}, {"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "str", "value": "files"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "secret"}, {"type": "str", "value": "deploy"}, {"type": "str", "value": "owner"}, {"type": "str", "value": "group"}, {"type": "str", "value": "mode"}, {"type": "str", "value": "neededFor"}]}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine2"}, {"type": "str", "value": "machine3"}, {"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "defaultGroups"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine2"}, {"type": "str", "value": "machine3"}, {"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "publicModule"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine2"}, {"type": "str", "value": "machine3"}, {"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "secretModule"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine2"}, {"type": "str", "value": "machine3"}, {"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "secretUploadDirectory"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine2"}, {"type": "str", "value": "machine3"}, {"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "passCommand"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine2"}, {"type": "str", "value": "machine3"}, {"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "secretLocation"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "maybe", "value": "recipients"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine2"}, {"type": "str", "value": "machine3"}, {"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "secretLocation"}]'"'"''"'"') 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": "maybe", "value": "secrets"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "plugins"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine2"}, {"type": "str", "value": "machine3"}, {"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "share"}, {"type": "str", "value": "dependencies"}, {"type": "str", "value": "prompts"}, {"type": "str", "value": "validationHash"}]}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine2"}, {"type": "str", "value": "machine3"}, {"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "str", "value": "files"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "secret"}, {"type": "str", "value": "deploy"}, {"type": "str", "value": "owner"}, {"type": "str", "value": "group"}, {"type": "str", "value": "mode"}, {"type": "str", "value": "neededFor"}]}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine2"}, {"type": "str", "value": "machine3"}, {"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "defaultGroups"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine2"}, {"type": "str", "value": "machine3"}, {"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "publicModule"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine2"}, {"type": "str", "value": "machine3"}, {"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "secretModule"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine2"}, {"type": "str", "value": "machine3"}, {"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "secretUploadDirectory"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine2"}, {"type": "str", "value": "machine3"}, {"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "passCommand"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine2"}, {"type": "str", "value": "machine3"}, {"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "secretLocation"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "maybe", "value": "recipients"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine2"}, {"type": "str", "value": "machine3"}, {"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "secretLocation"}]'') 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": "maybe", "value": "secrets"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "plugins"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine2"}, {"type": "str", "value": "machine3"}, {"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "share"}, {"type": "str", "value": "dependencies"}, {"type": "str", "value": "prompts"}, {"type": "str", "value": "validationHash"}]}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine2"}, {"type": "str", "value": "machine3"}, {"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "str", "value": "files"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "secret"}, {"type": "str", "value": "deploy"}, {"type": "str", "value": "owner"}, {"type": "str", "value": "group"}, {"type": "str", "value": "mode"}, {"type": "str", "value": "neededFor"}]}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine2"}, {"type": "str", "value": "machine3"}, {"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "defaultGroups"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine2"}, {"type": "str", "value": "machine3"}, {"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "publicModule"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine2"}, {"type": "str", "value": "machine3"}, {"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "secretModule"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine2"}, {"type": "str", "value": "machine3"}, {"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "secretUploadDirectory"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine2"}, {"type": "str", "value": "machine3"}, {"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "passCommand"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine2"}, {"type": "str", "value": "machine3"}, {"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "secretLocation"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "maybe", "value": "recipients"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine2"}, {"type": "str", "value": "machine3"}, {"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "secretLocation"}]'') flake) clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating list element at index 1 clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating attribute 'machine2' clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/cba1x9mxnwr8b36cw41bya7g6d5v1p7d-source/select.nix:325:37: clan-pytest-with-core> E 324| in clan-pytest-with-core> E 325| builtins.mapAttrs (_: v: recurse selectors (idx + 1) v) filteredAttrs clan-pytest-with-core> E | ^ clan-pytest-with-core> E 326| else if selector.type == "maybe" then 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:325:40: clan-pytest-with-core> E 324| in clan-pytest-with-core> E 325| builtins.mapAttrs (_: v: recurse selectors (idx + 1) v) filteredAttrs clan-pytest-with-core> E | ^ clan-pytest-with-core> E 326| else if selector.type == "maybe" then 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 … from call site clan-pytest-with-core> E at /build/store/nix/store/cba1x9mxnwr8b36cw41bya7g6d5v1p7d-source/select.nix:312:15: clan-pytest-with-core> E 311| else if selector.type == "str" then clan-pytest-with-core> E 312| recurse selectors (idx + 1) (builtins.getAttr selector.value obj) clan-pytest-with-core> E | ^ clan-pytest-with-core> E 313| else if selector.type == "set" then 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 'getAttr' builtin clan-pytest-with-core> E at /build/store/nix/store/cba1x9mxnwr8b36cw41bya7g6d5v1p7d-source/select.nix:312:44: clan-pytest-with-core> E 311| else if selector.type == "str" then clan-pytest-with-core> E 312| recurse selectors (idx + 1) (builtins.getAttr selector.value obj) clan-pytest-with-core> E | ^ clan-pytest-with-core> E 313| else if selector.type == "set" then clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'seq' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:401:18: clan-pytest-with-core> E 400| options = checked options; clan-pytest-with-core> E 401| config = checked (removeAttrs config [ "_module" ]); clan-pytest-with-core> E | ^ clan-pytest-with-core> E 402| _module = checked (config._module); 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:304:9: clan-pytest-with-core> E 303| checkUnmatched = clan-pytest-with-core> E 304| if config._module.check && config._module.freeformType == null && merged.unmatchedDefns != [ ] then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 305| let clan-pytest-with-core> E clan-pytest-with-core> E … in the right operand of the AND (&&) operator clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:304:72: clan-pytest-with-core> E 303| checkUnmatched = clan-pytest-with-core> E 304| if config._module.check && config._module.freeformType == null && merged.unmatchedDefns != [ ] then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 305| let clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'unmatchedDefns' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:940:7: clan-pytest-with-core> E 939| # Transforms unmatchedDefnsByName into a list of definitions clan-pytest-with-core> E 940| unmatchedDefns = clan-pytest-with-core> E | ^ clan-pytest-with-core> E 941| if configs == [ ] then clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'concatLists' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:946:11: clan-pytest-with-core> E 945| else clan-pytest-with-core> E 946| concatLists ( clan-pytest-with-core> E | ^ clan-pytest-with-core> E 947| mapAttrsToList ( clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:948:21: clan-pytest-with-core> E 947| mapAttrsToList ( clan-pytest-with-core> E 948| name: defs: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 949| map ( clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'map' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:949:15: clan-pytest-with-core> E 948| name: defs: clan-pytest-with-core> E 949| map ( clan-pytest-with-core> E | ^ clan-pytest-with-core> E 950| def: clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:932:22: clan-pytest-with-core> E 931| # Propagate all unmatched definitions from nested option sets clan-pytest-with-core> E 932| mapAttrs (n: v: v.unmatchedDefns) resultsByName clan-pytest-with-core> E | ^ clan-pytest-with-core> E 933| # Plus the definitions for the current prefix that don't have a matching option clan-pytest-with-core> E clan-pytest-with-core> E (10 duplicate frames omitted) clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:932:25: clan-pytest-with-core> E 931| # Propagate all unmatched definitions from nested option sets clan-pytest-with-core> E 932| mapAttrs (n: v: v.unmatchedDefns) resultsByName clan-pytest-with-core> E | ^ clan-pytest-with-core> E 933| # Plus the definitions for the current prefix that don't have a matching option clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:876:15: clan-pytest-with-core> E 875| resultsByName = mapAttrs ( clan-pytest-with-core> E 876| name: decls: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 877| # We're descending into attribute ‘name’. 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:888:9: clan-pytest-with-core> E 887| in clan-pytest-with-core> E 888| if length optionDecls == length decls then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 889| let clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'length' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:888:12: clan-pytest-with-core> E 887| in clan-pytest-with-core> E 888| if length optionDecls == length decls then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 889| let clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'filter' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:882:25: clan-pytest-with-core> E 881| defns' = rawDefinitionsByName.${name} or [ ]; clan-pytest-with-core> E 882| optionDecls = filter ( clan-pytest-with-core> E | ^ clan-pytest-with-core> E 883| m: clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:883:13: clan-pytest-with-core> E 882| optionDecls = filter ( clan-pytest-with-core> E 883| m: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 884| m.options ? _type clan-pytest-with-core> E clan-pytest-with-core> E … in the left operand of the AND (&&) operator clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:885:13: clan-pytest-with-core> E 884| m.options ? _type clan-pytest-with-core> E 885| && (m.options._type == "option" || throwDeclarationTypeError loc m.options._type m._file) clan-pytest-with-core> E | ^ clan-pytest-with-core> E 886| ) decls; clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'options' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:807:15: clan-pytest-with-core> E 806| pos = unsafeGetAttrPos n subtree; clan-pytest-with-core> E 807| options = option; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 808| }) subtree clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:289:73: clan-pytest-with-core> E 288| len = length attrPath; clan-pytest-with-core> E 289| atDepth = n: if n == len then value else { ${elemAt attrPath n} = atDepth (n + 1); }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 290| in clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'atDepth' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:289:17: clan-pytest-with-core> E 288| len = length attrPath; clan-pytest-with-core> E 289| atDepth = n: if n == len then value else { ${elemAt attrPath n} = atDepth (n + 1); }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 290| in clan-pytest-with-core> E clan-pytest-with-core> E … in the right operand of the update (//) operator clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:2047:9: clan-pytest-with-core> E 2046| } clan-pytest-with-core> E 2047| // optionalAttrs (toType != null) { clan-pytest-with-core> E | ^ clan-pytest-with-core> E 2048| type = toType; clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:2047:12: clan-pytest-with-core> E 2046| } clan-pytest-with-core> E 2047| // optionalAttrs (toType != null) { clan-pytest-with-core> E | ^ clan-pytest-with-core> E 2048| type = toType; clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'optionalAttrs' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:1492:25: clan-pytest-with-core> E 1491| */ clan-pytest-with-core> E 1492| optionalAttrs = cond: as: if cond then as else { }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1493| 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:1492:29: clan-pytest-with-core> E 1491| */ clan-pytest-with-core> E 1492| optionalAttrs = cond: as: if cond then as else { }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1493| clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:2036:17: clan-pytest-with-core> E 2035| let clan-pytest-with-core> E 2036| opt = attrByPath to { } options; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 2037| in clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'attrByPath' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:89:24: clan-pytest-with-core> E 88| attrByPath = clan-pytest-with-core> E 89| attrPath: default: set: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 90| let clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:106:5: clan-pytest-with-core> E 105| in clan-pytest-with-core> E 106| attrByPath' 0 set; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 107| clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'attrByPath'' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:93:12: clan-pytest-with-core> E 92| attrByPath' = clan-pytest-with-core> E 93| n: s: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 94| ( clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:102:35: clan-pytest-with-core> E 101| in clan-pytest-with-core> E 102| if s ? ${attr} then attrByPath' (n + 1) s.${attr} else default clan-pytest-with-core> E | ^ clan-pytest-with-core> E 103| ) clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'attrByPath'' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:93:12: clan-pytest-with-core> E 92| attrByPath' = clan-pytest-with-core> E 93| n: s: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 94| ( clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:102:35: clan-pytest-with-core> E 101| in clan-pytest-with-core> E 102| if s ? ${attr} then attrByPath' (n + 1) s.${attr} else default clan-pytest-with-core> E | ^ clan-pytest-with-core> E 103| ) clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'attrByPath'' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:93:12: clan-pytest-with-core> E 92| attrByPath' = clan-pytest-with-core> E 93| n: s: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 94| ( clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:102:35: clan-pytest-with-core> E 101| in clan-pytest-with-core> E 102| if s ? ${attr} then attrByPath' (n + 1) s.${attr} else default clan-pytest-with-core> E | ^ clan-pytest-with-core> E 103| ) clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'attrByPath'' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:93:12: clan-pytest-with-core> E 92| attrByPath' = clan-pytest-with-core> E 93| n: s: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 94| ( clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:102:55: clan-pytest-with-core> E 101| in clan-pytest-with-core> E 102| if s ? ${attr} then attrByPath' (n + 1) s.${attr} else default clan-pytest-with-core> E | ^ clan-pytest-with-core> E 103| ) clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:927:37: clan-pytest-with-core> E 926| clan-pytest-with-core> E 927| matchedOptions = mapAttrs (n: v: v.matchedOptions) resultsByName; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 928| clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'matchedOptions' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:893:13: clan-pytest-with-core> E 892| { clan-pytest-with-core> E 893| matchedOptions = evalOptionValue loc opt defns'; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 894| unmatchedDefns = [ ]; clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:893:30: clan-pytest-with-core> E 892| { clan-pytest-with-core> E 893| matchedOptions = evalOptionValue loc opt defns'; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 894| unmatchedDefns = [ ]; clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'evalOptionValue' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1103:15: clan-pytest-with-core> E 1102| evalOptionValue = clan-pytest-with-core> E 1103| loc: opt: defs: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1104| let clan-pytest-with-core> E clan-pytest-with-core> E … in the left operand of the update (//) operator clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1148:5: clan-pytest-with-core> E 1147| warnDeprecation opt clan-pytest-with-core> E 1148| // { clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1149| value = addErrorContext "while evaluating the option `${showOption loc}':" value; 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1141:9: clan-pytest-with-core> E 1140| warnDeprecation = clan-pytest-with-core> E 1141| if (opt.type.deprecationMessage != null) then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1142| warn "The type `types.${opt.type.name}' of option `${showOption loc}' defined in ${showFiles opt.declarations} is deprecated. ${opt.type.deprecationMessage}" clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:890:19: clan-pytest-with-core> E 889| let clan-pytest-with-core> E 890| opt = fixupOptionType loc (mergeOptionDecls loc decls); clan-pytest-with-core> E | ^ clan-pytest-with-core> E 891| in clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'fixupOptionType' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1473:10: clan-pytest-with-core> E 1472| fixupOptionType = clan-pytest-with-core> E 1473| loc: opt: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1474| if opt.type.getSubModules or null == null then 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1474:5: clan-pytest-with-core> E 1473| loc: opt: clan-pytest-with-core> E 1474| if opt.type.getSubModules or null == null then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1475| opt // { type = opt.type or types.unspecified; } clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'type.getSubModules' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/nixos/modules/services/hardware/bluetooth.nix:72:9: clan-pytest-with-core> E 71| settings = mkOption { clan-pytest-with-core> E 72| type = cfgFmt.type; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 73| default = { }; clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/nixos/modules/services/hardware/bluetooth.nix:26:12: clan-pytest-with-core> E 25| clan-pytest-with-core> E 26| cfgFmt = pkgs.formats.ini { }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 27| clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:727:15: clan-pytest-with-core> E 726| extraArgs = mapAttrs ( clan-pytest-with-core> E 727| name: _: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 728| addErrorContext (context name) ( clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the module argument `pkgs' in "/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/nixos/modules/services/hardware/bluetooth.nix": clan-pytest-with-core> E clan-pytest-with-core> E … noting that argument `pkgs` is not externally provided, so querying `_module.args` instead, requiring `config` clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:731:13: clan-pytest-with-core> E 730| "noting that argument `${name}` is not externally provided, so querying `_module.args` instead, requiring `config`" clan-pytest-with-core> E 731| config._module.args.${name} clan-pytest-with-core> E | ^ clan-pytest-with-core> E 732| ) clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/types.nix:1029:18: clan-pytest-with-core> E 1028| value = mapAttrs ( clan-pytest-with-core> E 1029| n: v: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1030| if lazy then clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'optionalValue.value' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1312:5: clan-pytest-with-core> E 1311| clan-pytest-with-core> E 1312| optionalValue = if isDefined then { value = mergedValue; } else { }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1313| }; 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1312:21: clan-pytest-with-core> E 1311| clan-pytest-with-core> E 1312| optionalValue = if isDefined then { value = mergedValue; } else { }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1313| }; clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'values' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1240:11: clan-pytest-with-core> E 1239| { clan-pytest-with-core> E 1240| values = defsSorted; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1241| inherit (defsFiltered) highestPrio; 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1211:11: clan-pytest-with-core> E 1210| # Avoid sorting if we don't have to. clan-pytest-with-core> E 1211| if any (def: def.value._type or "" == "order") defsFiltered.values then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1212| sortProperties defsFiltered.values clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'any' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1211:14: clan-pytest-with-core> E 1210| # Avoid sorting if we don't have to. clan-pytest-with-core> E 1211| if any (def: def.value._type or "" == "order") defsFiltered.values then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1212| sortProperties defsFiltered.values clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1211:19: clan-pytest-with-core> E 1210| # Avoid sorting if we don't have to. clan-pytest-with-core> E 1211| if any (def: def.value._type or "" == "order") defsFiltered.values then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1212| sortProperties defsFiltered.values clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'value._type' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1422:67: clan-pytest-with-core> E 1421| strip = clan-pytest-with-core> E 1422| def: if def.value._type or "" == "override" then def // { value = def.value.content; } else def; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1423| in clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'value.content' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1566:22: clan-pytest-with-core> E 1565| _type = "override"; clan-pytest-with-core> E 1566| inherit priority content; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1567| }; 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/nixos/modules/misc/nixpkgs.nix:107:15: clan-pytest-with-core> E 106| clan-pytest-with-core> E 107| finalPkgs = if opt.pkgs.isDefined then cfg.pkgs.appendOverlays cfg.overlays else defaultPkgs; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 108| clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'pkgs.isDefined' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1154:21: clan-pytest-with-core> E 1153| definitionsWithLocations = res.defsFinal; clan-pytest-with-core> E 1154| inherit (res) isDefined; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1155| inherit (res.checkedAndMerged) valueMeta; clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'isDefined' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1310:5: clan-pytest-with-core> E 1309| clan-pytest-with-core> E 1310| isDefined = defsFinal != [ ]; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1311| clan-pytest-with-core> E clan-pytest-with-core> E (6 duplicate frames omitted) clan-pytest-with-core> E clan-pytest-with-core> E error: attribute 'system' missing clan-pytest-with-core> E at /build/store/nix/store/y3h139bhv4373m1hab367ma4p5i95i2f-source/modules/clan/module.nix:164:24: clan-pytest-with-core> E 163| (lib.modules.importApply ../../nixosModules/machineModules/overridePkgs.nix { clan-pytest-with-core> E 164| pkgs = nixpkgsMatrix.${config.inventory.machines.${name}.nixpkgs}.system.${system}.pkgs; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 165| }) clan-pytest-with-core> E Did you mean systems? 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 0x7fffe6258e90> 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> def test_generate_secret_var_password_store_minimal_select_calls( clan-pytest-with-core> monkeypatch: pytest.MonkeyPatch, clan-pytest-with-core> flake: ClanFlake, clan-pytest-with-core> age_keys: list, clan-pytest-with-core> ) -> None: clan-pytest-with-core> """Test that password_store backend doesn't make unnecessary select calls.""" clan-pytest-with-core> config = flake.machines["my_machine"] = create_test_machine_config() clan-pytest-with-core> clan_vars = config["clan"]["core"]["vars"] clan-pytest-with-core> clan_vars["settings"]["secretStore"] = "password-store" clan-pytest-with-core> # Use passage (age-based) instead of pass (GPG-based) clan-pytest-with-core> config["clan"]["core"]["vars"]["password-store"]["passCommand"] = "passage" clan-pytest-with-core> clan-pytest-with-core> # Create a simple generator with a secret clan-pytest-with-core> my_generator = clan_vars["generators"]["my_generator"] clan-pytest-with-core> my_generator["files"]["my_secret"]["secret"] = True clan-pytest-with-core> my_generator["script"] = 'echo hello > "$out"/my_secret' clan-pytest-with-core> clan-pytest-with-core> # Add machine2 and machine3 with the same configuration clan-pytest-with-core> flake.machines["machine2"] = config.copy() clan-pytest-with-core> flake.machines["machine3"] = config.copy() clan-pytest-with-core> clan-pytest-with-core> flake.refresh() clan-pytest-with-core> monkeypatch.chdir(flake.path) clan-pytest-with-core> clan-pytest-with-core> # Set up age key for passage using test fixtures clan-pytest-with-core> age_key = age_keys[0] clan-pytest-with-core> age_key_dir = flake.path / ".age" clan-pytest-with-core> age_key_dir.mkdir() clan-pytest-with-core> age_key_file = age_key_dir / "key.txt" clan-pytest-with-core> age_key_file.write_text(age_key.privkey) clan-pytest-with-core> clan-pytest-with-core> # Set up password store directory for passage clan-pytest-with-core> password_store_dir = flake.path / "pass" clan-pytest-with-core> password_store_dir.mkdir(parents=True) clan-pytest-with-core> # Create .age-recipients file for passage (passage uses this instead of .gpg-id) clan-pytest-with-core> (password_store_dir / ".age-recipients").write_text(f"{age_key.pubkey}\n") clan-pytest-with-core> clan-pytest-with-core> # Passage uses PASSAGE_DIR (not PASSWORD_STORE_DIR like pass does) clan-pytest-with-core> monkeypatch.setenv("PASSAGE_DIR", str(password_store_dir)) clan-pytest-with-core> # Set the age identities file for passage clan-pytest-with-core> monkeypatch.setenv("PASSAGE_IDENTITIES_FILE", str(age_key_file)) clan-pytest-with-core> clan-pytest-with-core> # Initialize password store as a git repository clan-pytest-with-core> subprocess.run(["git", "init"], cwd=password_store_dir, check=True) clan-pytest-with-core> subprocess.run( clan-pytest-with-core> ["git", "config", "user.email", "test@example.com"], clan-pytest-with-core> cwd=password_store_dir, clan-pytest-with-core> check=True, clan-pytest-with-core> ) clan-pytest-with-core> subprocess.run( clan-pytest-with-core> ["git", "config", "user.name", "Test User"], clan-pytest-with-core> cwd=password_store_dir, clan-pytest-with-core> check=True, clan-pytest-with-core> ) clan-pytest-with-core> # Create an initial commit so the git repo is valid clan-pytest-with-core> subprocess.run( clan-pytest-with-core> ["git", "add", ".age-recipients"], clan-pytest-with-core> cwd=password_store_dir, clan-pytest-with-core> check=True, clan-pytest-with-core> ) clan-pytest-with-core> subprocess.run( clan-pytest-with-core> ["git", "commit", "-m", "Initialize password store"], clan-pytest-with-core> cwd=password_store_dir, clan-pytest-with-core> check=True, clan-pytest-with-core> ) clan-pytest-with-core> clan-pytest-with-core> # Create a fresh flake object and invalidate cache to ensure clean state clan-pytest-with-core> invalidate_flake_cache(flake.path) clan-pytest-with-core> flake_obj = Flake(str(flake.path)) clan-pytest-with-core> clan-pytest-with-core> # Generate the secret - this will initialize the password store backend clan-pytest-with-core> # and should result in minimal select calls clan-pytest-with-core> > generate_command( clan-pytest-with-core> argparse.Namespace( clan-pytest-with-core> machines=["my_machine", "machine2", "machine3"], clan-pytest-with-core> generator=None, clan-pytest-with-core> flake=flake_obj, clan-pytest-with-core> regenerate=False, clan-pytest-with-core> no_sandbox=False, clan-pytest-with-core> ) clan-pytest-with-core> ) clan-pytest-with-core> clan-pytest-with-core> /build/src/clan_cli/tests/test_vars_cache.py:151: clan-pytest-with-core> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ clan-pytest-with-core> /build/src/clan_cli/vars/generate.py:33: in generate_command clan-pytest-with-core> run_generators( clan-pytest-with-core> /build/src/clan_lib/vars/generate.py:306: in run_generators clan-pytest-with-core> all_generators = get_generators(machines, full_closure=True) clan-pytest-with-core> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ clan-pytest-with-core> /build/src/clan_lib/vars/generate.py:146: in get_generators clan-pytest-with-core> flake.precache(get_generators_precache_selectors(list(all_machines))) clan-pytest-with-core> /build/src/clan_lib/flake/flake.py:1151: in precache clan-pytest-with-core> self.get_from_nix(not_fetched_selectors) clan-pytest-with-core> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ clan-pytest-with-core> clan-pytest-with-core> self = Flake(identifier='/build/pytest-gdxmxbyr/flake', hash='sha256-FIYPaPAoHd94nvJIl2+JecZVrPdEWVKQklfCJ09DRj0=', 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.?secrets.?age.?plugins', 'clanInternals.machines.x86_64-linux.{machine2,machine3,my_machine}.config.cl... 'clanInternals.machines.x86_64-linux.{machine2,machine3,my_machine}.config.clan.core.vars.settings.secretModule', ...] 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 while executing:$ clan select 'clanInternals.?secrets.?age.?plugins' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{machine2,machine3,my_machine}.config.clan.core.vars.generators.*.{share,dependencies,prompts,validationHash}' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{machine2,machine3,my_machine}.config.clan.core.vars.generators.*.files.*.{secret,deploy,owner,group,mode,neededFor}' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{machine2,machine3,my_machine}.config.clan.core.?sops.?defaultGroups' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{machine2,machine3,my_machine}.config.clan.core.vars.settings.publicModule' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{machine2,machine3,my_machine}.config.clan.core.vars.settings.secretModule' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{machine2,machine3,my_machine}.config.clan.core.vars.?sops.?secretUploadDirectory' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{machine2,machine3,my_machine}.config.clan.core.vars.?password-store.?passCommand' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{machine2,machine3,my_machine}.config.clan.core.vars.?password-store.?secretLocation' clan-pytest-with-core> E $ clan select 'clanInternals.vars.settings.?recipients' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{machine2,machine3,my_machine}.config.clan.core.vars.?age.?secretLocation' clan-pytest-with-core> E Reason: attribute 'system' missing clan-pytest-with-core> E at /build/store/nix/store/y3h139bhv4373m1hab367ma4p5i95i2f-source/modules/clan/module.nix:164:24: clan-pytest-with-core> E 163| (lib.modules.importApply ../../nixosModules/machineModules/overridePkgs.nix { clan-pytest-with-core> E 164| pkgs = nixpkgsMatrix.${config.inventory.machines.${name}.nixpkgs}.system.${system}.pkgs; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 165| }) clan-pytest-with-core> E Did you mean systems?. 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 setup ----------------------------- clan-pytest-with-core> !! $HOME does not point to a temp directory!! HOME=/build/pytest-gdxmxbyr 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/pytest-gdxmxbyr clan-pytest-with-core> ----------------------------- Captured stdout call ----------------------------- clan-pytest-with-core> [main c90a0a3] flake: update by flake generator clan-pytest-with-core> 6 files changed, 120 insertions(+) clan-pytest-with-core> create mode 100644 machines/machine2/configuration.json clan-pytest-with-core> create mode 100644 machines/machine2/configuration.nix clan-pytest-with-core> create mode 100644 machines/machine3/configuration.json clan-pytest-with-core> create mode 100644 machines/machine3/configuration.nix 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> Initialized empty Git repository in /build/pytest-gdxmxbyr/flake/pass/.git/ clan-pytest-with-core> [master (root-commit) c8ea17e] Initialize password store clan-pytest-with-core> 1 file changed, 1 insertion(+) clan-pytest-with-core> create mode 100644 .age-recipients clan-pytest-with-core> ----------------------------- Captured stderr call ----------------------------- clan-pytest-with-core> Prefetching flake /build/pytest-gdxmxbyr/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/febbcab65441be6ccc547560fd0155faadebbbb7 clan-pytest-with-core> (cached) $ clan select clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> Prefetching flake /build/pytest-gdxmxbyr/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/febbcab65441be6ccc547560fd0155faadebbbb7 clan-pytest-with-core> (cached) $ clan select clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> Prefetching flake /build/pytest-gdxmxbyr/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/febbcab65441be6ccc547560fd0155faadebbbb7 clan-pytest-with-core> (cached) $ clan select clanInternals.inventoryClass.relativeDirectory 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> git \ clan-pytest-with-core> add \ clan-pytest-with-core> /build/pytest-gdxmxbyr/flake/.cache_invalidation_1787050287.5239923 clan-pytest-with-core> Caller: /build/src/clan_cli/tests/helpers/flake_cache.py:15::invalidate_flake_cache clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_cli/tests/helpers/flake_cache.py:15::invalidate_flake_cache clan-pytest-with-core> clan-pytest-with-core> Prefetching flake /build/pytest-gdxmxbyr/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.cliChecks clan-pytest-with-core> Cache miss for clanInternals.inventoryClass.inventorySerialization.{instances,machines,meta} clan-pytest-with-core> Loading flake cache from file /build/clan-flake-cache/flakes-v2/5ccdfde8a38dedc07c4349e031de93a7f5a1d5c6 clan-pytest-with-core> Cache miss for clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> Loading flake cache from file /build/clan-flake-cache/flakes-v2/5ccdfde8a38dedc07c4349e031de93a7f5a1d5c6 clan-pytest-with-core> (cached) $ clan select 'clanInternals.inventoryClass.inventorySerialization.{instances,machines,meta}' clan-pytest-with-core> Precaching selectors: clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.machines clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.instances clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.meta clan-pytest-with-core> - (not cached) clanInternals.?secrets.?age.?plugins clan-pytest-with-core> - (cached) clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine2,machine3,my_machine}.config.clan.core.vars.generators.*.{share,dependencies,prompts,validationHash} clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine2,machine3,my_machine}.config.clan.core.vars.generators.*.files.*.{secret,deploy,owner,group,mode,neededFor} clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine2,machine3,my_machine}.config.clan.core.?sops.?defaultGroups clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine2,machine3,my_machine}.config.clan.core.vars.settings.publicModule clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine2,machine3,my_machine}.config.clan.core.vars.settings.secretModule clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine2,machine3,my_machine}.config.clan.core.vars.?sops.?secretUploadDirectory clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine2,machine3,my_machine}.config.clan.core.vars.?password-store.?passCommand clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine2,machine3,my_machine}.config.clan.core.vars.?password-store.?secretLocation clan-pytest-with-core> - (not cached) clanInternals.vars.settings.?recipients clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine2,machine3,my_machine}.config.clan.core.vars.?age.?secretLocation clan-pytest-with-core> ------------------------------ Captured log call ------------------------------- clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:927 Prefetching flake /build/pytest-gdxmxbyr/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/febbcab65441be6ccc547560fd0155faadebbbb7 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-gdxmxbyr/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/febbcab65441be6ccc547560fd0155faadebbbb7 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-gdxmxbyr/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/febbcab65441be6ccc547560fd0155faadebbbb7 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.cmd:__init__.py:143 git \ clan-pytest-with-core> add \ clan-pytest-with-core> /build/pytest-gdxmxbyr/flake/.cache_invalidation_1787050287.5239923 clan-pytest-with-core> Caller: /build/src/clan_cli/tests/helpers/flake_cache.py:15::invalidate_flake_cache clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:143 Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_cli/tests/helpers/flake_cache.py:15::invalidate_flake_cache clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:927 Prefetching flake /build/pytest-gdxmxbyr/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.cliChecks clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1174 Cache miss for clanInternals.inventoryClass.inventorySerialization.{instances,machines,meta} clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:789 Loading flake cache from file /build/clan-flake-cache/flakes-v2/5ccdfde8a38dedc07c4349e031de93a7f5a1d5c6 clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1174 Cache miss for clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:789 Loading flake cache from file /build/clan-flake-cache/flakes-v2/5ccdfde8a38dedc07c4349e031de93a7f5a1d5c6 clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1179 (cached) $ clan select 'clanInternals.inventoryClass.inventorySerialization.{instances,machines,meta}' clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1144 Precaching selectors: clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.machines clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.instances clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.meta clan-pytest-with-core> - (not cached) clanInternals.?secrets.?age.?plugins clan-pytest-with-core> - (cached) clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine2,machine3,my_machine}.config.clan.core.vars.generators.*.{share,dependencies,prompts,validationHash} clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine2,machine3,my_machine}.config.clan.core.vars.generators.*.files.*.{secret,deploy,owner,group,mode,neededFor} clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine2,machine3,my_machine}.config.clan.core.?sops.?defaultGroups clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine2,machine3,my_machine}.config.clan.core.vars.settings.publicModule clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine2,machine3,my_machine}.config.clan.core.vars.settings.secretModule clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine2,machine3,my_machine}.config.clan.core.vars.?sops.?secretUploadDirectory clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine2,machine3,my_machine}.config.clan.core.vars.?password-store.?passCommand clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine2,machine3,my_machine}.config.clan.core.vars.?password-store.?secretLocation clan-pytest-with-core> - (not cached) clanInternals.vars.settings.?recipients clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine2,machine3,my_machine}.config.clan.core.vars.?age.?secretLocation clan-pytest-with-core> ____________________ test_cache_misses_for_vars_operations _____________________ clan-pytest-with-core> [gw9] linux -- Python 3.14.7 /nix/store/3n4qphl9s728sz8frmpqqrv9b1m87g68-python3-3.14.7/bin/python clan-pytest-with-core> clan-pytest-with-core> self = Flake(identifier='/build/pytest-hc5321nj/flake', hash='sha256-/zdRiVCX0U3AK2QysSKP2pseW+w23bzg0zsdK9AMl3A=', 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.?secrets.?age.?plugins', 'clanInternals.machines.x86_64-linux.{my_machine,other_machine}.config.clan.c...le', 'clanInternals.machines.x86_64-linux.{my_machine,other_machine}.config.clan.core.vars.settings.secretModule', ...] 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-hc5321nj/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/wzqrpj792whh4r7k9fjvdd0vc71h9rc2-source?narHash=sha256-/zdRiVCX0U3AK2QysSKP2pseW+w23bzg0zsdK9AMl3A="; 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": "maybe", "value": "secrets"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "plugins"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}, {"type": "str", "value": "other_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "share"}, {"type": "str", "value": "dependencies"}, {"type": "str", "value": "prompts"}, {"type": "str", "value": "validationHash"}]}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}, {"type": "str", "value": "other_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "str", "value": "files"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "secret"}, {"type": "str", "value": "deploy"}, {"type": "str", "value": "owner"}, {"type": "str", "value": "group"}, {"type": "str", "value": "mode"}, {"type": "str", "value": "neededFor"}]}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}, {"type": "str", "value": "other_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "defaultGroups"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}, {"type": "str", "value": "other_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "publicModule"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}, {"type": "str", "value": "other_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "secretModule"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}, {"type": "str", "value": "other_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "secretUploadDirectory"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}, {"type": "str", "value": "other_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "passCommand"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}, {"type": "str", "value": "other_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "secretLocation"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "maybe", "value": "recipients"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}, {"type": "str", "value": "other_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "secretLocation"}]'"'"''"'"') 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": "maybe", "value": "secrets"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "plugins"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}, {"type": "str", "value": "other_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "share"}, {"type": "str", "value": "dependencies"}, {"type": "str", "value": "prompts"}, {"type": "str", "value": "validationHash"}]}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}, {"type": "str", "value": "other_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "str", "value": "files"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "secret"}, {"type": "str", "value": "deploy"}, {"type": "str", "value": "owner"}, {"type": "str", "value": "group"}, {"type": "str", "value": "mode"}, {"type": "str", "value": "neededFor"}]}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}, {"type": "str", "value": "other_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "defaultGroups"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}, {"type": "str", "value": "other_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "publicModule"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}, {"type": "str", "value": "other_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "secretModule"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}, {"type": "str", "value": "other_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "secretUploadDirectory"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}, {"type": "str", "value": "other_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "passCommand"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}, {"type": "str", "value": "other_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "secretLocation"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "maybe", "value": "recipients"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}, {"type": "str", "value": "other_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "secretLocation"}]'') 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": "maybe", "value": "secrets"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "plugins"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}, {"type": "str", "value": "other_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "share"}, {"type": "str", "value": "dependencies"}, {"type": "str", "value": "prompts"}, {"type": "str", "value": "validationHash"}]}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}, {"type": "str", "value": "other_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "str", "value": "files"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "secret"}, {"type": "str", "value": "deploy"}, {"type": "str", "value": "owner"}, {"type": "str", "value": "group"}, {"type": "str", "value": "mode"}, {"type": "str", "value": "neededFor"}]}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}, {"type": "str", "value": "other_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "defaultGroups"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}, {"type": "str", "value": "other_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "publicModule"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}, {"type": "str", "value": "other_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "secretModule"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}, {"type": "str", "value": "other_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "secretUploadDirectory"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}, {"type": "str", "value": "other_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "passCommand"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}, {"type": "str", "value": "other_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "secretLocation"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "maybe", "value": "recipients"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}, {"type": "str", "value": "other_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "secretLocation"}]'') flake) clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating list element at index 1 clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating attribute 'my_machine' clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/cba1x9mxnwr8b36cw41bya7g6d5v1p7d-source/select.nix:325:37: clan-pytest-with-core> E 324| in clan-pytest-with-core> E 325| builtins.mapAttrs (_: v: recurse selectors (idx + 1) v) filteredAttrs clan-pytest-with-core> E | ^ clan-pytest-with-core> E 326| else if selector.type == "maybe" then 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:325:40: clan-pytest-with-core> E 324| in clan-pytest-with-core> E 325| builtins.mapAttrs (_: v: recurse selectors (idx + 1) v) filteredAttrs clan-pytest-with-core> E | ^ clan-pytest-with-core> E 326| else if selector.type == "maybe" then 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 … from call site clan-pytest-with-core> E at /build/store/nix/store/cba1x9mxnwr8b36cw41bya7g6d5v1p7d-source/select.nix:312:15: clan-pytest-with-core> E 311| else if selector.type == "str" then clan-pytest-with-core> E 312| recurse selectors (idx + 1) (builtins.getAttr selector.value obj) clan-pytest-with-core> E | ^ clan-pytest-with-core> E 313| else if selector.type == "set" then 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 'getAttr' builtin clan-pytest-with-core> E at /build/store/nix/store/cba1x9mxnwr8b36cw41bya7g6d5v1p7d-source/select.nix:312:44: clan-pytest-with-core> E 311| else if selector.type == "str" then clan-pytest-with-core> E 312| recurse selectors (idx + 1) (builtins.getAttr selector.value obj) clan-pytest-with-core> E | ^ clan-pytest-with-core> E 313| else if selector.type == "set" then clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'seq' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:401:18: clan-pytest-with-core> E 400| options = checked options; clan-pytest-with-core> E 401| config = checked (removeAttrs config [ "_module" ]); clan-pytest-with-core> E | ^ clan-pytest-with-core> E 402| _module = checked (config._module); 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:304:9: clan-pytest-with-core> E 303| checkUnmatched = clan-pytest-with-core> E 304| if config._module.check && config._module.freeformType == null && merged.unmatchedDefns != [ ] then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 305| let clan-pytest-with-core> E clan-pytest-with-core> E … in the right operand of the AND (&&) operator clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:304:72: clan-pytest-with-core> E 303| checkUnmatched = clan-pytest-with-core> E 304| if config._module.check && config._module.freeformType == null && merged.unmatchedDefns != [ ] then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 305| let clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'unmatchedDefns' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:940:7: clan-pytest-with-core> E 939| # Transforms unmatchedDefnsByName into a list of definitions clan-pytest-with-core> E 940| unmatchedDefns = clan-pytest-with-core> E | ^ clan-pytest-with-core> E 941| if configs == [ ] then clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'concatLists' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:946:11: clan-pytest-with-core> E 945| else clan-pytest-with-core> E 946| concatLists ( clan-pytest-with-core> E | ^ clan-pytest-with-core> E 947| mapAttrsToList ( clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:948:21: clan-pytest-with-core> E 947| mapAttrsToList ( clan-pytest-with-core> E 948| name: defs: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 949| map ( clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'map' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:949:15: clan-pytest-with-core> E 948| name: defs: clan-pytest-with-core> E 949| map ( clan-pytest-with-core> E | ^ clan-pytest-with-core> E 950| def: clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:932:22: clan-pytest-with-core> E 931| # Propagate all unmatched definitions from nested option sets clan-pytest-with-core> E 932| mapAttrs (n: v: v.unmatchedDefns) resultsByName clan-pytest-with-core> E | ^ clan-pytest-with-core> E 933| # Plus the definitions for the current prefix that don't have a matching option clan-pytest-with-core> E clan-pytest-with-core> E (10 duplicate frames omitted) clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:932:25: clan-pytest-with-core> E 931| # Propagate all unmatched definitions from nested option sets clan-pytest-with-core> E 932| mapAttrs (n: v: v.unmatchedDefns) resultsByName clan-pytest-with-core> E | ^ clan-pytest-with-core> E 933| # Plus the definitions for the current prefix that don't have a matching option clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:876:15: clan-pytest-with-core> E 875| resultsByName = mapAttrs ( clan-pytest-with-core> E 876| name: decls: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 877| # We're descending into attribute ‘name’. 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:888:9: clan-pytest-with-core> E 887| in clan-pytest-with-core> E 888| if length optionDecls == length decls then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 889| let clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'length' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:888:12: clan-pytest-with-core> E 887| in clan-pytest-with-core> E 888| if length optionDecls == length decls then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 889| let clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'filter' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:882:25: clan-pytest-with-core> E 881| defns' = rawDefinitionsByName.${name} or [ ]; clan-pytest-with-core> E 882| optionDecls = filter ( clan-pytest-with-core> E | ^ clan-pytest-with-core> E 883| m: clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:883:13: clan-pytest-with-core> E 882| optionDecls = filter ( clan-pytest-with-core> E 883| m: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 884| m.options ? _type clan-pytest-with-core> E clan-pytest-with-core> E … in the left operand of the AND (&&) operator clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:885:13: clan-pytest-with-core> E 884| m.options ? _type clan-pytest-with-core> E 885| && (m.options._type == "option" || throwDeclarationTypeError loc m.options._type m._file) clan-pytest-with-core> E | ^ clan-pytest-with-core> E 886| ) decls; clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'options' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:807:15: clan-pytest-with-core> E 806| pos = unsafeGetAttrPos n subtree; clan-pytest-with-core> E 807| options = option; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 808| }) subtree clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:289:73: clan-pytest-with-core> E 288| len = length attrPath; clan-pytest-with-core> E 289| atDepth = n: if n == len then value else { ${elemAt attrPath n} = atDepth (n + 1); }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 290| in clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'atDepth' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:289:17: clan-pytest-with-core> E 288| len = length attrPath; clan-pytest-with-core> E 289| atDepth = n: if n == len then value else { ${elemAt attrPath n} = atDepth (n + 1); }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 290| in clan-pytest-with-core> E clan-pytest-with-core> E … in the right operand of the update (//) operator clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:2047:9: clan-pytest-with-core> E 2046| } clan-pytest-with-core> E 2047| // optionalAttrs (toType != null) { clan-pytest-with-core> E | ^ clan-pytest-with-core> E 2048| type = toType; clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:2047:12: clan-pytest-with-core> E 2046| } clan-pytest-with-core> E 2047| // optionalAttrs (toType != null) { clan-pytest-with-core> E | ^ clan-pytest-with-core> E 2048| type = toType; clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'optionalAttrs' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:1492:25: clan-pytest-with-core> E 1491| */ clan-pytest-with-core> E 1492| optionalAttrs = cond: as: if cond then as else { }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1493| 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:1492:29: clan-pytest-with-core> E 1491| */ clan-pytest-with-core> E 1492| optionalAttrs = cond: as: if cond then as else { }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1493| clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:2036:17: clan-pytest-with-core> E 2035| let clan-pytest-with-core> E 2036| opt = attrByPath to { } options; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 2037| in clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'attrByPath' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:89:24: clan-pytest-with-core> E 88| attrByPath = clan-pytest-with-core> E 89| attrPath: default: set: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 90| let clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:106:5: clan-pytest-with-core> E 105| in clan-pytest-with-core> E 106| attrByPath' 0 set; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 107| clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'attrByPath'' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:93:12: clan-pytest-with-core> E 92| attrByPath' = clan-pytest-with-core> E 93| n: s: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 94| ( clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:102:35: clan-pytest-with-core> E 101| in clan-pytest-with-core> E 102| if s ? ${attr} then attrByPath' (n + 1) s.${attr} else default clan-pytest-with-core> E | ^ clan-pytest-with-core> E 103| ) clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'attrByPath'' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:93:12: clan-pytest-with-core> E 92| attrByPath' = clan-pytest-with-core> E 93| n: s: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 94| ( clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:102:35: clan-pytest-with-core> E 101| in clan-pytest-with-core> E 102| if s ? ${attr} then attrByPath' (n + 1) s.${attr} else default clan-pytest-with-core> E | ^ clan-pytest-with-core> E 103| ) clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'attrByPath'' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:93:12: clan-pytest-with-core> E 92| attrByPath' = clan-pytest-with-core> E 93| n: s: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 94| ( clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:102:35: clan-pytest-with-core> E 101| in clan-pytest-with-core> E 102| if s ? ${attr} then attrByPath' (n + 1) s.${attr} else default clan-pytest-with-core> E | ^ clan-pytest-with-core> E 103| ) clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'attrByPath'' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:93:12: clan-pytest-with-core> E 92| attrByPath' = clan-pytest-with-core> E 93| n: s: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 94| ( clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:102:55: clan-pytest-with-core> E 101| in clan-pytest-with-core> E 102| if s ? ${attr} then attrByPath' (n + 1) s.${attr} else default clan-pytest-with-core> E | ^ clan-pytest-with-core> E 103| ) clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:927:37: clan-pytest-with-core> E 926| clan-pytest-with-core> E 927| matchedOptions = mapAttrs (n: v: v.matchedOptions) resultsByName; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 928| clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'matchedOptions' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:893:13: clan-pytest-with-core> E 892| { clan-pytest-with-core> E 893| matchedOptions = evalOptionValue loc opt defns'; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 894| unmatchedDefns = [ ]; clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:893:30: clan-pytest-with-core> E 892| { clan-pytest-with-core> E 893| matchedOptions = evalOptionValue loc opt defns'; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 894| unmatchedDefns = [ ]; clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'evalOptionValue' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1103:15: clan-pytest-with-core> E 1102| evalOptionValue = clan-pytest-with-core> E 1103| loc: opt: defs: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1104| let clan-pytest-with-core> E clan-pytest-with-core> E … in the left operand of the update (//) operator clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1148:5: clan-pytest-with-core> E 1147| warnDeprecation opt clan-pytest-with-core> E 1148| // { clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1149| value = addErrorContext "while evaluating the option `${showOption loc}':" value; 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1141:9: clan-pytest-with-core> E 1140| warnDeprecation = clan-pytest-with-core> E 1141| if (opt.type.deprecationMessage != null) then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1142| warn "The type `types.${opt.type.name}' of option `${showOption loc}' defined in ${showFiles opt.declarations} is deprecated. ${opt.type.deprecationMessage}" clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:890:19: clan-pytest-with-core> E 889| let clan-pytest-with-core> E 890| opt = fixupOptionType loc (mergeOptionDecls loc decls); clan-pytest-with-core> E | ^ clan-pytest-with-core> E 891| in clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'fixupOptionType' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1473:10: clan-pytest-with-core> E 1472| fixupOptionType = clan-pytest-with-core> E 1473| loc: opt: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1474| if opt.type.getSubModules or null == null then 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1474:5: clan-pytest-with-core> E 1473| loc: opt: clan-pytest-with-core> E 1474| if opt.type.getSubModules or null == null then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1475| opt // { type = opt.type or types.unspecified; } clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'type.getSubModules' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/nixos/modules/services/hardware/bluetooth.nix:72:9: clan-pytest-with-core> E 71| settings = mkOption { clan-pytest-with-core> E 72| type = cfgFmt.type; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 73| default = { }; clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/nixos/modules/services/hardware/bluetooth.nix:26:12: clan-pytest-with-core> E 25| clan-pytest-with-core> E 26| cfgFmt = pkgs.formats.ini { }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 27| clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:727:15: clan-pytest-with-core> E 726| extraArgs = mapAttrs ( clan-pytest-with-core> E 727| name: _: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 728| addErrorContext (context name) ( clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the module argument `pkgs' in "/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/nixos/modules/services/hardware/bluetooth.nix": clan-pytest-with-core> E clan-pytest-with-core> E … noting that argument `pkgs` is not externally provided, so querying `_module.args` instead, requiring `config` clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:731:13: clan-pytest-with-core> E 730| "noting that argument `${name}` is not externally provided, so querying `_module.args` instead, requiring `config`" clan-pytest-with-core> E 731| config._module.args.${name} clan-pytest-with-core> E | ^ clan-pytest-with-core> E 732| ) clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/types.nix:1029:18: clan-pytest-with-core> E 1028| value = mapAttrs ( clan-pytest-with-core> E 1029| n: v: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1030| if lazy then clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'optionalValue.value' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1312:5: clan-pytest-with-core> E 1311| clan-pytest-with-core> E 1312| optionalValue = if isDefined then { value = mergedValue; } else { }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1313| }; 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1312:21: clan-pytest-with-core> E 1311| clan-pytest-with-core> E 1312| optionalValue = if isDefined then { value = mergedValue; } else { }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1313| }; clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'values' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1240:11: clan-pytest-with-core> E 1239| { clan-pytest-with-core> E 1240| values = defsSorted; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1241| inherit (defsFiltered) highestPrio; 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1211:11: clan-pytest-with-core> E 1210| # Avoid sorting if we don't have to. clan-pytest-with-core> E 1211| if any (def: def.value._type or "" == "order") defsFiltered.values then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1212| sortProperties defsFiltered.values clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'any' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1211:14: clan-pytest-with-core> E 1210| # Avoid sorting if we don't have to. clan-pytest-with-core> E 1211| if any (def: def.value._type or "" == "order") defsFiltered.values then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1212| sortProperties defsFiltered.values clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1211:19: clan-pytest-with-core> E 1210| # Avoid sorting if we don't have to. clan-pytest-with-core> E 1211| if any (def: def.value._type or "" == "order") defsFiltered.values then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1212| sortProperties defsFiltered.values clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'value._type' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1422:67: clan-pytest-with-core> E 1421| strip = clan-pytest-with-core> E 1422| def: if def.value._type or "" == "override" then def // { value = def.value.content; } else def; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1423| in clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'value.content' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1566:22: clan-pytest-with-core> E 1565| _type = "override"; clan-pytest-with-core> E 1566| inherit priority content; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1567| }; 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/nixos/modules/misc/nixpkgs.nix:107:15: clan-pytest-with-core> E 106| clan-pytest-with-core> E 107| finalPkgs = if opt.pkgs.isDefined then cfg.pkgs.appendOverlays cfg.overlays else defaultPkgs; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 108| clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'pkgs.isDefined' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1154:21: clan-pytest-with-core> E 1153| definitionsWithLocations = res.defsFinal; clan-pytest-with-core> E 1154| inherit (res) isDefined; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1155| inherit (res.checkedAndMerged) valueMeta; clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'isDefined' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1310:5: clan-pytest-with-core> E 1309| clan-pytest-with-core> E 1310| isDefined = defsFinal != [ ]; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1311| clan-pytest-with-core> E clan-pytest-with-core> E (6 duplicate frames omitted) clan-pytest-with-core> E clan-pytest-with-core> E error: attribute 'system' missing clan-pytest-with-core> E at /build/store/nix/store/y3h139bhv4373m1hab367ma4p5i95i2f-source/modules/clan/module.nix:164:24: clan-pytest-with-core> E 163| (lib.modules.importApply ../../nixosModules/machineModules/overridePkgs.nix { clan-pytest-with-core> E 164| pkgs = nixpkgsMatrix.${config.inventory.machines.${name}.nixpkgs}.system.${system}.pkgs; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 165| }) clan-pytest-with-core> E Did you mean systems? 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 0x7fffe639a510> clan-pytest-with-core> flake = 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_cache_misses_for_vars_operations( clan-pytest-with-core> monkeypatch: pytest.MonkeyPatch, clan-pytest-with-core> flake: ClanFlake, clan-pytest-with-core> ) -> None: clan-pytest-with-core> """Test that vars operations result in minimal cache misses.""" clan-pytest-with-core> # Set up first machine with two generators clan-pytest-with-core> config = flake.machines["my_machine"] = create_test_machine_config() clan-pytest-with-core> clan-pytest-with-core> # Set up two generators with public values clan-pytest-with-core> gen1 = config["clan"]["core"]["vars"]["generators"]["gen1"] clan-pytest-with-core> gen1["files"]["value1"]["secret"] = False clan-pytest-with-core> gen1["script"] = 'echo -n "test_value1" > "$out"/value1' clan-pytest-with-core> clan-pytest-with-core> gen2 = config["clan"]["core"]["vars"]["generators"]["gen2"] clan-pytest-with-core> gen2["files"]["value2"]["secret"] = False clan-pytest-with-core> gen2["script"] = 'echo -n "test_value2" > "$out"/value2' clan-pytest-with-core> clan-pytest-with-core> # Add a second machine with the same generator configuration clan-pytest-with-core> flake.machines["other_machine"] = config.copy() clan-pytest-with-core> clan-pytest-with-core> flake.refresh() clan-pytest-with-core> monkeypatch.chdir(flake.path) clan-pytest-with-core> clan-pytest-with-core> # Create fresh machine objects to ensure clean cache state clan-pytest-with-core> flake_obj = Flake(str(flake.path)) clan-pytest-with-core> machine1 = Machine(name="my_machine", flake=flake_obj) clan-pytest-with-core> clan-pytest-with-core> # Test 1: Running vars generate for BOTH machines simultaneously should result in exactly 5 cache misses clan-pytest-with-core> # Even though we have: clan-pytest-with-core> # - 2 machines (my_machine and other_machine) clan-pytest-with-core> # - 2 generators per machine (gen1 and gen2) clan-pytest-with-core> # We get 5 cache misses when generating for both machines: clan-pytest-with-core> # 1. cliChecks selectors (from run_inventory_checks) clan-pytest-with-core> # 2. Inventory selectors (from list_full_machines) clan-pytest-with-core> # 3. relativeDirectory selector (from get_clan_dir in run_generators) clan-pytest-with-core> # 4. Generator metadata selectors (from generate_command precache) clan-pytest-with-core> # 5. finalScript selectors (from run_generators precache) clan-pytest-with-core> clan-pytest-with-core> > generate_command( clan-pytest-with-core> argparse.Namespace( clan-pytest-with-core> machines=["my_machine", "other_machine"], clan-pytest-with-core> generator=None, clan-pytest-with-core> flake=flake_obj, clan-pytest-with-core> regenerate=False, clan-pytest-with-core> no_sandbox=False, clan-pytest-with-core> ) clan-pytest-with-core> ) clan-pytest-with-core> clan-pytest-with-core> /build/src/clan_cli/tests/test_vars_cache.py:336: clan-pytest-with-core> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ clan-pytest-with-core> /build/src/clan_cli/vars/generate.py:33: in generate_command clan-pytest-with-core> run_generators( clan-pytest-with-core> /build/src/clan_lib/vars/generate.py:306: in run_generators clan-pytest-with-core> all_generators = get_generators(machines, full_closure=True) clan-pytest-with-core> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ clan-pytest-with-core> /build/src/clan_lib/vars/generate.py:146: in get_generators clan-pytest-with-core> flake.precache(get_generators_precache_selectors(list(all_machines))) clan-pytest-with-core> /build/src/clan_lib/flake/flake.py:1151: in precache clan-pytest-with-core> self.get_from_nix(not_fetched_selectors) clan-pytest-with-core> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ clan-pytest-with-core> clan-pytest-with-core> self = Flake(identifier='/build/pytest-hc5321nj/flake', hash='sha256-/zdRiVCX0U3AK2QysSKP2pseW+w23bzg0zsdK9AMl3A=', 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.?secrets.?age.?plugins', 'clanInternals.machines.x86_64-linux.{my_machine,other_machine}.config.clan.c...le', 'clanInternals.machines.x86_64-linux.{my_machine,other_machine}.config.clan.core.vars.settings.secretModule', ...] 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 while executing:$ clan select 'clanInternals.?secrets.?age.?plugins' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{my_machine,other_machine}.config.clan.core.vars.generators.*.{share,dependencies,prompts,validationHash}' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{my_machine,other_machine}.config.clan.core.vars.generators.*.files.*.{secret,deploy,owner,group,mode,neededFor}' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{my_machine,other_machine}.config.clan.core.?sops.?defaultGroups' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{my_machine,other_machine}.config.clan.core.vars.settings.publicModule' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{my_machine,other_machine}.config.clan.core.vars.settings.secretModule' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{my_machine,other_machine}.config.clan.core.vars.?sops.?secretUploadDirectory' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{my_machine,other_machine}.config.clan.core.vars.?password-store.?passCommand' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{my_machine,other_machine}.config.clan.core.vars.?password-store.?secretLocation' clan-pytest-with-core> E $ clan select 'clanInternals.vars.settings.?recipients' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{my_machine,other_machine}.config.clan.core.vars.?age.?secretLocation' clan-pytest-with-core> E Reason: attribute 'system' missing clan-pytest-with-core> E at /build/store/nix/store/y3h139bhv4373m1hab367ma4p5i95i2f-source/modules/clan/module.nix:164:24: clan-pytest-with-core> E 163| (lib.modules.importApply ../../nixosModules/machineModules/overridePkgs.nix { clan-pytest-with-core> E 164| pkgs = nixpkgsMatrix.${config.inventory.machines.${name}.nixpkgs}.system.${system}.pkgs; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 165| }) clan-pytest-with-core> E Did you mean systems?. 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 setup ----------------------------- clan-pytest-with-core> !! $HOME does not point to a temp directory!! HOME=/build/pytest-hc5321nj 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/pytest-hc5321nj clan-pytest-with-core> ----------------------------- Captured stdout call ----------------------------- clan-pytest-with-core> [main ae7af30] flake: update by flake generator clan-pytest-with-core> 4 files changed, 84 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> create mode 100644 machines/other_machine/configuration.json clan-pytest-with-core> create mode 100644 machines/other_machine/configuration.nix clan-pytest-with-core> ----------------------------- Captured stderr call ----------------------------- clan-pytest-with-core> Prefetching flake /build/pytest-hc5321nj/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/febbcab65441be6ccc547560fd0155faadebbbb7 clan-pytest-with-core> (cached) $ clan select clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> Prefetching flake /build/pytest-hc5321nj/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/febbcab65441be6ccc547560fd0155faadebbbb7 clan-pytest-with-core> (cached) $ clan select clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> Prefetching flake /build/pytest-hc5321nj/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.cliChecks clan-pytest-with-core> Cache miss for clanInternals.inventoryClass.inventorySerialization.{instances,machines,meta} clan-pytest-with-core> Loading flake cache from file /build/clan-flake-cache/flakes-v2/863728ae2a704911d932637899c80741a3ca2f3e clan-pytest-with-core> Cache miss for clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> Loading flake cache from file /build/clan-flake-cache/flakes-v2/863728ae2a704911d932637899c80741a3ca2f3e clan-pytest-with-core> (cached) $ clan select 'clanInternals.inventoryClass.inventorySerialization.{instances,machines,meta}' clan-pytest-with-core> Precaching selectors: clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.machines clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.instances clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.meta clan-pytest-with-core> - (not cached) clanInternals.?secrets.?age.?plugins clan-pytest-with-core> - (cached) clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine,other_machine}.config.clan.core.vars.generators.*.{share,dependencies,prompts,validationHash} clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine,other_machine}.config.clan.core.vars.generators.*.files.*.{secret,deploy,owner,group,mode,neededFor} clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine,other_machine}.config.clan.core.?sops.?defaultGroups clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine,other_machine}.config.clan.core.vars.settings.publicModule clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine,other_machine}.config.clan.core.vars.settings.secretModule clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine,other_machine}.config.clan.core.vars.?sops.?secretUploadDirectory clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine,other_machine}.config.clan.core.vars.?password-store.?passCommand clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine,other_machine}.config.clan.core.vars.?password-store.?secretLocation clan-pytest-with-core> - (not cached) clanInternals.vars.settings.?recipients clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine,other_machine}.config.clan.core.vars.?age.?secretLocation clan-pytest-with-core> ------------------------------ Captured log call ------------------------------- clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:927 Prefetching flake /build/pytest-hc5321nj/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/febbcab65441be6ccc547560fd0155faadebbbb7 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-hc5321nj/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/febbcab65441be6ccc547560fd0155faadebbbb7 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-hc5321nj/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.cliChecks clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1174 Cache miss for clanInternals.inventoryClass.inventorySerialization.{instances,machines,meta} clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:789 Loading flake cache from file /build/clan-flake-cache/flakes-v2/863728ae2a704911d932637899c80741a3ca2f3e clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1174 Cache miss for clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:789 Loading flake cache from file /build/clan-flake-cache/flakes-v2/863728ae2a704911d932637899c80741a3ca2f3e clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1179 (cached) $ clan select 'clanInternals.inventoryClass.inventorySerialization.{instances,machines,meta}' clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1144 Precaching selectors: clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.machines clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.instances clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.meta clan-pytest-with-core> - (not cached) clanInternals.?secrets.?age.?plugins clan-pytest-with-core> - (cached) clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine,other_machine}.config.clan.core.vars.generators.*.{share,dependencies,prompts,validationHash} clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine,other_machine}.config.clan.core.vars.generators.*.files.*.{secret,deploy,owner,group,mode,neededFor} clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine,other_machine}.config.clan.core.?sops.?defaultGroups clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine,other_machine}.config.clan.core.vars.settings.publicModule clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine,other_machine}.config.clan.core.vars.settings.secretModule clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine,other_machine}.config.clan.core.vars.?sops.?secretUploadDirectory clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine,other_machine}.config.clan.core.vars.?password-store.?passCommand clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine,other_machine}.config.clan.core.vars.?password-store.?secretLocation clan-pytest-with-core> - (not cached) clanInternals.vars.settings.?recipients clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine,other_machine}.config.clan.core.vars.?age.?secretLocation clan-pytest-with-core> _________ test_shared_vars_must_never_depend_on_machine_specific_vars __________ clan-pytest-with-core> [gw2] linux -- Python 3.14.7 /nix/store/3n4qphl9s728sz8frmpqqrv9b1m87g68-python3-3.14.7/bin/python clan-pytest-with-core> clan-pytest-with-core> monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7fffe6230270> clan-pytest-with-core> flake_with_sops = 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_shared_vars_must_never_depend_on_machine_specific_vars( clan-pytest-with-core> monkeypatch: pytest.MonkeyPatch, clan-pytest-with-core> flake_with_sops: ClanFlake, clan-pytest-with-core> ) -> None: clan-pytest-with-core> """Ensure that shared vars never depend on machine specific vars.""" clan-pytest-with-core> flake = flake_with_sops clan-pytest-with-core> clan-pytest-with-core> config = flake.machines["my_machine"] = create_test_machine_config() clan-pytest-with-core> my_generator = config["clan"]["core"]["vars"]["generators"]["my_generator"] clan-pytest-with-core> my_generator["share"] = True clan-pytest-with-core> my_generator["files"]["my_value"]["secret"] = False clan-pytest-with-core> my_generator["script"] = 'echo "$RANDOM" > "$out"/my_value' clan-pytest-with-core> my_generator["dependencies"] = ["machine_specific_generator"] clan-pytest-with-core> machine_specific_generator = config["clan"]["core"]["vars"]["generators"][ clan-pytest-with-core> "machine_specific_generator" clan-pytest-with-core> ] clan-pytest-with-core> machine_specific_generator["share"] = False clan-pytest-with-core> machine_specific_generator["files"]["my_value"]["secret"] = False clan-pytest-with-core> machine_specific_generator["script"] = 'echo "$RANDOM" > "$out"/my_value' clan-pytest-with-core> flake.refresh() clan-pytest-with-core> monkeypatch.chdir(flake.path) clan-pytest-with-core> # make sure an Exception is raised when trying to generate vars clan-pytest-with-core> > with pytest.raises( clan-pytest-with-core> ClanError, clan-pytest-with-core> match="Shared generators must not depend on machine specific generators", clan-pytest-with-core> ): clan-pytest-with-core> E AssertionError: Regex pattern did not match. clan-pytest-with-core> E Expected regex: 'Shared generators must not depend on machine specific generators' clan-pytest-with-core> E Actual message: "Error while executing:$ clan select 'clanInternals.?secrets.?age.?plugins'\n$ clan select 'clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.generators.*.{share,dependencies,prompts,validationHash}'\n$ clan select 'clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.generators.*.files.*.{secret,deploy,owner,group,mode,neededFor}'\n$ clan select 'clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.?sops.?defaultGroups'\n$ clan select 'clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.settings.publicModule'\n$ clan select 'clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.settings.secretModule'\n$ clan select 'clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.?sops.?secretUploadDirectory'\n$ clan select 'clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.?password-store.?passCommand'\n$ clan select 'clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.?password-store.?secretLocation'\n$ clan select 'clanInternals.vars.settings.?recipients'\n$ clan select 'clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.?age.?secretLocation'\n Reason: attribute 'system' missing\n at /build/store/nix/store/y3h139bhv4373m1hab367ma4p5i95i2f-source/modules/clan/module.nix:164:24:\n 163| (lib.modules.importApply ../../nixosModules/machineModules/overridePkgs.nix {\n 164| pkgs = nixpkgsMatrix.${config.inventory.machines.${name}.nixpkgs}.system.${system}.pkgs;\n | ^\n 165| })\n Did you mean systems?. Use flag '--debug' to see full nix trace." clan-pytest-with-core> clan-pytest-with-core> /build/src/clan_cli/tests/test_vars_errors.py:129: AssertionError clan-pytest-with-core> ---------------------------- Captured stdout setup ----------------------------- clan-pytest-with-core> Initialized empty Git repository in /build/minimal-flake-688w5fnv/flake/.git/ clan-pytest-with-core> [main (root-commit) 30af4d4] 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-688w5fnv/flake/flake.lock": clan-pytest-with-core> • Added input 'clan-core': clan-pytest-with-core> 'path:/nix/store/x4g1qsn1nq0q56zn8h9c7xaiysv7bsf2-clan-core-flake?lastModified=1&narHash=sha256-Ynx5u312tlxJbGJCSevw5zZVxrd02FisWE1my%2B%2BFRSw%3D' (1970-01-01) clan-pytest-with-core> • Added input 'clan-core/data-mesher': clan-pytest-with-core> 'path:/nix/store/kdjkigwckgrfz0yg0d9z7kj2xkf084vs-source?lastModified=1&narHash=sha256-Yase/4e4aNN9QvUMqPH9ngbAmlcJCqLmFL0zuURdkuA%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/w2c23ykc12mswlg8hrrjzb5gv9gvkzwq-source?lastModified=1&narHash=sha256-RxWs5ND31KzTG7wvMM%2BPMfUjyNpmIEr999lqNARaM5o%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/lrxvs4l9bqbgjfz7w9bkfg5zqq442jxc-source?lastModified=1&narHash=sha256-4dtXQk/NMePegK/nWp5NSeuZKLATItOq61lpEvmXqGw%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/p17akwn814w226jq2cdkkhcw4psb0ga9-source?lastModified=0&narHash=sha256-tkD1h/1jLJ6qZHjG7/TOZT1qqI1ej3VPPCufHQyv1Uo%3D' (1970-01-01) clan-pytest-with-core> • Added input 'clan-core/sops-nix': clan-pytest-with-core> 'path:/nix/store/s154mmk8ahvc71gq8xfkbzlk240yvniv-source?lastModified=1&narHash=sha256-gkig4nPi1CWc4Z50GBsjE4ygSE7hMpl/TwID2an2Cck%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/9m1jsz5b9ggmjij2vkmafnhn26g96jjn-source?lastModified=1&narHash=sha256-brhZ8DmuGtzkCYHJg4HEd602amKm89Y9ytsFZ5uWD1w%3D' (1970-01-01) clan-pytest-with-core> • Added input 'clan-core/treefmt-nix': clan-pytest-with-core> 'path:/nix/store/7sjy8935654h3220n5gbaclf5nfw4nzx-source?lastModified=1&narHash=sha256-WSFCsDSE5ffgD2MqzkM2CYjeFiKhRF/dJUN8uedb6YE%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-uy6_18dl clan-pytest-with-core> [localhost] $ clan vars keygen --flake /build/pytest-uy6_18dl/flake --user admin --no-interactive clan-pytest-with-core> Caller: /build/src/clan_cli/tests/age_keys.py:31::init clan-pytest-with-core> clan-pytest-with-core> Prefetching flake /build/pytest-uy6_18dl/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/febbcab65441be6ccc547560fd0155faadebbbb7 clan-pytest-with-core> (cached) $ clan select clanInternals.inventoryClass.relativeDirectory 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> git \ clan-pytest-with-core> -C /build/pytest-uy6_18dl/flake \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-uy6_18dl/flake/sops/users/admin 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/admin to git clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-uy6_18dl/flake \ clan-pytest-with-core> diff \ clan-pytest-with-core> --cached --exit-code \ clan-pytest-with-core> -- /build/pytest-uy6_18dl/flake/sops/users/admin 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-uy6_18dl/flake \ clan-pytest-with-core> commit \ clan-pytest-with-core> -m 'secrets: add user admin' \ clan-pytest-with-core> --no-verify /build/pytest-uy6_18dl/flake/sops/users/admin 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/admin to git 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:143 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-688w5fnv/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/x4g1qsn1nq0q56zn8h9c7xaiysv7bsf2-clan-core-flake?lastModified=1&narHash=sha256-Ynx5u312tlxJbGJCSevw5zZVxrd02FisWE1my%2B%2BFRSw%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/kdjkigwckgrfz0yg0d9z7kj2xkf084vs-source?lastModified=1&narHash=sha256-Yase/4e4aNN9QvUMqPH9ngbAmlcJCqLmFL0zuURdkuA%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/w2c23ykc12mswlg8hrrjzb5gv9gvkzwq-source?lastModified=1&narHash=sha256-RxWs5ND31KzTG7wvMM%2BPMfUjyNpmIEr999lqNARaM5o%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/lrxvs4l9bqbgjfz7w9bkfg5zqq442jxc-source?lastModified=1&narHash=sha256-4dtXQk/NMePegK/nWp5NSeuZKLATItOq61lpEvmXqGw%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/p17akwn814w226jq2cdkkhcw4psb0ga9-source?lastModified=0&narHash=sha256-tkD1h/1jLJ6qZHjG7/TOZT1qqI1ej3VPPCufHQyv1Uo%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/s154mmk8ahvc71gq8xfkbzlk240yvniv-source?lastModified=1&narHash=sha256-gkig4nPi1CWc4Z50GBsjE4ygSE7hMpl/TwID2an2Cck%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/9m1jsz5b9ggmjij2vkmafnhn26g96jjn-source?lastModified=1&narHash=sha256-brhZ8DmuGtzkCYHJg4HEd602amKm89Y9ytsFZ5uWD1w%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/7sjy8935654h3220n5gbaclf5nfw4nzx-source?lastModified=1&narHash=sha256-WSFCsDSE5ffgD2MqzkM2CYjeFiKhRF/dJUN8uedb6YE%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:143 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-uy6_18dl clan-pytest-with-core> DEBUG clan_cli.tests.helpers.cli:__init__.py:143 $ clan vars keygen --flake /build/pytest-uy6_18dl/flake --user admin --no-interactive clan-pytest-with-core> Caller: /build/src/clan_cli/tests/age_keys.py:31::init clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:927 Prefetching flake /build/pytest-uy6_18dl/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/febbcab65441be6ccc547560fd0155faadebbbb7 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.cmd:__init__.py:143 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> DEBUG clan_lib.cmd:__init__.py:143 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> DEBUG clan_cli.secrets.sops:sops.py:99 Found age public key from a private key in the environment (SOPS_AGE_KEY): age1dhwqzkah943xzc34tc3dlmfayyevcmdmxzjezdgdy33euxwf59vsp3vk3c clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:143 git \ clan-pytest-with-core> -C /build/pytest-uy6_18dl/flake \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-uy6_18dl/flake/sops/users/admin 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> DEBUG clan_lib.cmd:__init__.py:143 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> DEBUG clan_lib.git:__init__.py:98 Adding sops/users/admin to git clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:143 git \ clan-pytest-with-core> -C /build/pytest-uy6_18dl/flake \ clan-pytest-with-core> diff \ clan-pytest-with-core> --cached --exit-code \ clan-pytest-with-core> -- /build/pytest-uy6_18dl/flake/sops/users/admin 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> DEBUG clan_lib.cmd:__init__.py:143 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> DEBUG clan_lib.cmd:__init__.py:143 git \ clan-pytest-with-core> -C /build/pytest-uy6_18dl/flake \ clan-pytest-with-core> commit \ clan-pytest-with-core> -m 'secrets: add user admin' \ clan-pytest-with-core> --no-verify /build/pytest-uy6_18dl/flake/sops/users/admin 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> DEBUG clan_lib.cmd:__init__.py:143 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> INFO clan_lib.git:__init__.py:141 Committed sops/users/admin to git clan-pytest-with-core> ----------------------------- Captured stdout call ----------------------------- clan-pytest-with-core> [main c0af1c3] flake: update by flake generator clan-pytest-with-core> 2 files changed, 47 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> ----------------------------- Captured stderr call ----------------------------- clan-pytest-with-core> Prefetching flake /build/pytest-uy6_18dl/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/d2c0050d97832c3ac5193485b93705d00938c15e clan-pytest-with-core> (cached) $ clan select clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> [localhost] $ clan vars generate --flake /build/pytest-uy6_18dl/flake my_machine clan-pytest-with-core> Caller: /build/src/clan_cli/tests/test_vars_errors.py:133::test_shared_vars_must_never_depend_on_machine_specific_vars clan-pytest-with-core> clan-pytest-with-core> Prefetching flake /build/pytest-uy6_18dl/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.cliChecks clan-pytest-with-core> Cache miss for clanInternals.inventoryClass.inventorySerialization.{instances,machines,meta} clan-pytest-with-core> Loading flake cache from file /build/clan-flake-cache/flakes-v2/b45a88f2124df67e270a4f286d135b90891ac5b5 clan-pytest-with-core> Cache miss for clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> Loading flake cache from file /build/clan-flake-cache/flakes-v2/b45a88f2124df67e270a4f286d135b90891ac5b5 clan-pytest-with-core> (cached) $ clan select 'clanInternals.inventoryClass.inventorySerialization.{instances,machines,meta}' clan-pytest-with-core> Precaching selectors: clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.machines clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.instances clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.meta clan-pytest-with-core> - (not cached) clanInternals.?secrets.?age.?plugins clan-pytest-with-core> - (cached) clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.generators.*.{share,dependencies,prompts,validationHash} clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.generators.*.files.*.{secret,deploy,owner,group,mode,neededFor} clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.?sops.?defaultGroups clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.settings.publicModule clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.settings.secretModule clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.?sops.?secretUploadDirectory clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.?password-store.?passCommand clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.?password-store.?secretLocation clan-pytest-with-core> - (not cached) clanInternals.vars.settings.?recipients clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.?age.?secretLocation clan-pytest-with-core> ------------------------------ Captured log call ------------------------------- clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:927 Prefetching flake /build/pytest-uy6_18dl/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/d2c0050d97832c3ac5193485b93705d00938c15e clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1179 (cached) $ clan select clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> DEBUG clan_cli.tests.helpers.cli:__init__.py:143 $ clan vars generate --flake /build/pytest-uy6_18dl/flake my_machine clan-pytest-with-core> Caller: /build/src/clan_cli/tests/test_vars_errors.py:133::test_shared_vars_must_never_depend_on_machine_specific_vars clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:927 Prefetching flake /build/pytest-uy6_18dl/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.cliChecks clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1174 Cache miss for clanInternals.inventoryClass.inventorySerialization.{instances,machines,meta} clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:789 Loading flake cache from file /build/clan-flake-cache/flakes-v2/b45a88f2124df67e270a4f286d135b90891ac5b5 clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1174 Cache miss for clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:789 Loading flake cache from file /build/clan-flake-cache/flakes-v2/b45a88f2124df67e270a4f286d135b90891ac5b5 clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1179 (cached) $ clan select 'clanInternals.inventoryClass.inventorySerialization.{instances,machines,meta}' clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1144 Precaching selectors: clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.machines clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.instances clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.meta clan-pytest-with-core> - (not cached) clanInternals.?secrets.?age.?plugins clan-pytest-with-core> - (cached) clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.generators.*.{share,dependencies,prompts,validationHash} clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.generators.*.files.*.{secret,deploy,owner,group,mode,neededFor} clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.?sops.?defaultGroups clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.settings.publicModule clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.settings.secretModule clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.?sops.?secretUploadDirectory clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.?password-store.?passCommand clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.?password-store.?secretLocation clan-pytest-with-core> - (not cached) clanInternals.vars.settings.?recipients clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.?age.?secretLocation clan-pytest-with-core> ___________ test_accessing_path_before_generate_shows_helpful_error ____________ clan-pytest-with-core> [gw11] linux -- Python 3.14.7 /nix/store/3n4qphl9s728sz8frmpqqrv9b1m87g68-python3-3.14.7/bin/python clan-pytest-with-core> clan-pytest-with-core> self = Flake(identifier='/build/pytest-j_xztit8/flake', hash='sha256-5xw2CpOn/bdBvpgtT1xyDiOB0bTjI6vkwOypqTORFT4=', 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.?secrets.?age.?plugins', 'clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.gener...ngs.publicModule', 'clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.settings.secretModule', ...] 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-j_xztit8/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/zawqsvj53aah3ivdpq3bb4n7gjq8vzzl-source?narHash=sha256-5xw2CpOn/bdBvpgtT1xyDiOB0bTjI6vkwOypqTORFT4="; 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": "maybe", "value": "secrets"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "plugins"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "share"}, {"type": "str", "value": "dependencies"}, {"type": "str", "value": "prompts"}, {"type": "str", "value": "validationHash"}]}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "str", "value": "files"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "secret"}, {"type": "str", "value": "deploy"}, {"type": "str", "value": "owner"}, {"type": "str", "value": "group"}, {"type": "str", "value": "mode"}, {"type": "str", "value": "neededFor"}]}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "defaultGroups"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "publicModule"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "secretModule"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "secretUploadDirectory"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "passCommand"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "secretLocation"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "maybe", "value": "recipients"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "secretLocation"}]'"'"''"'"') 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": "maybe", "value": "secrets"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "plugins"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "share"}, {"type": "str", "value": "dependencies"}, {"type": "str", "value": "prompts"}, {"type": "str", "value": "validationHash"}]}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "str", "value": "files"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "secret"}, {"type": "str", "value": "deploy"}, {"type": "str", "value": "owner"}, {"type": "str", "value": "group"}, {"type": "str", "value": "mode"}, {"type": "str", "value": "neededFor"}]}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "defaultGroups"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "publicModule"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "secretModule"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "secretUploadDirectory"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "passCommand"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "secretLocation"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "maybe", "value": "recipients"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "secretLocation"}]'') 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": "maybe", "value": "secrets"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "plugins"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "share"}, {"type": "str", "value": "dependencies"}, {"type": "str", "value": "prompts"}, {"type": "str", "value": "validationHash"}]}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "str", "value": "files"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "secret"}, {"type": "str", "value": "deploy"}, {"type": "str", "value": "owner"}, {"type": "str", "value": "group"}, {"type": "str", "value": "mode"}, {"type": "str", "value": "neededFor"}]}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "defaultGroups"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "publicModule"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "secretModule"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "secretUploadDirectory"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "passCommand"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "secretLocation"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "maybe", "value": "recipients"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "secretLocation"}]'') flake) clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating list element at index 1 clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating attribute 'my_machine' clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/cba1x9mxnwr8b36cw41bya7g6d5v1p7d-source/select.nix:325:37: clan-pytest-with-core> E 324| in clan-pytest-with-core> E 325| builtins.mapAttrs (_: v: recurse selectors (idx + 1) v) filteredAttrs clan-pytest-with-core> E | ^ clan-pytest-with-core> E 326| else if selector.type == "maybe" then 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:325:40: clan-pytest-with-core> E 324| in clan-pytest-with-core> E 325| builtins.mapAttrs (_: v: recurse selectors (idx + 1) v) filteredAttrs clan-pytest-with-core> E | ^ clan-pytest-with-core> E 326| else if selector.type == "maybe" then 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 … from call site clan-pytest-with-core> E at /build/store/nix/store/cba1x9mxnwr8b36cw41bya7g6d5v1p7d-source/select.nix:312:15: clan-pytest-with-core> E 311| else if selector.type == "str" then clan-pytest-with-core> E 312| recurse selectors (idx + 1) (builtins.getAttr selector.value obj) clan-pytest-with-core> E | ^ clan-pytest-with-core> E 313| else if selector.type == "set" then 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 'getAttr' builtin clan-pytest-with-core> E at /build/store/nix/store/cba1x9mxnwr8b36cw41bya7g6d5v1p7d-source/select.nix:312:44: clan-pytest-with-core> E 311| else if selector.type == "str" then clan-pytest-with-core> E 312| recurse selectors (idx + 1) (builtins.getAttr selector.value obj) clan-pytest-with-core> E | ^ clan-pytest-with-core> E 313| else if selector.type == "set" then clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'seq' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:401:18: clan-pytest-with-core> E 400| options = checked options; clan-pytest-with-core> E 401| config = checked (removeAttrs config [ "_module" ]); clan-pytest-with-core> E | ^ clan-pytest-with-core> E 402| _module = checked (config._module); 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:304:9: clan-pytest-with-core> E 303| checkUnmatched = clan-pytest-with-core> E 304| if config._module.check && config._module.freeformType == null && merged.unmatchedDefns != [ ] then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 305| let clan-pytest-with-core> E clan-pytest-with-core> E … in the right operand of the AND (&&) operator clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:304:72: clan-pytest-with-core> E 303| checkUnmatched = clan-pytest-with-core> E 304| if config._module.check && config._module.freeformType == null && merged.unmatchedDefns != [ ] then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 305| let clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'unmatchedDefns' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:940:7: clan-pytest-with-core> E 939| # Transforms unmatchedDefnsByName into a list of definitions clan-pytest-with-core> E 940| unmatchedDefns = clan-pytest-with-core> E | ^ clan-pytest-with-core> E 941| if configs == [ ] then clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'concatLists' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:946:11: clan-pytest-with-core> E 945| else clan-pytest-with-core> E 946| concatLists ( clan-pytest-with-core> E | ^ clan-pytest-with-core> E 947| mapAttrsToList ( clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:948:21: clan-pytest-with-core> E 947| mapAttrsToList ( clan-pytest-with-core> E 948| name: defs: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 949| map ( clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'map' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:949:15: clan-pytest-with-core> E 948| name: defs: clan-pytest-with-core> E 949| map ( clan-pytest-with-core> E | ^ clan-pytest-with-core> E 950| def: clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:932:22: clan-pytest-with-core> E 931| # Propagate all unmatched definitions from nested option sets clan-pytest-with-core> E 932| mapAttrs (n: v: v.unmatchedDefns) resultsByName clan-pytest-with-core> E | ^ clan-pytest-with-core> E 933| # Plus the definitions for the current prefix that don't have a matching option clan-pytest-with-core> E clan-pytest-with-core> E (10 duplicate frames omitted) clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:932:25: clan-pytest-with-core> E 931| # Propagate all unmatched definitions from nested option sets clan-pytest-with-core> E 932| mapAttrs (n: v: v.unmatchedDefns) resultsByName clan-pytest-with-core> E | ^ clan-pytest-with-core> E 933| # Plus the definitions for the current prefix that don't have a matching option clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:876:15: clan-pytest-with-core> E 875| resultsByName = mapAttrs ( clan-pytest-with-core> E 876| name: decls: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 877| # We're descending into attribute ‘name’. 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:888:9: clan-pytest-with-core> E 887| in clan-pytest-with-core> E 888| if length optionDecls == length decls then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 889| let clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'length' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:888:12: clan-pytest-with-core> E 887| in clan-pytest-with-core> E 888| if length optionDecls == length decls then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 889| let clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'filter' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:882:25: clan-pytest-with-core> E 881| defns' = rawDefinitionsByName.${name} or [ ]; clan-pytest-with-core> E 882| optionDecls = filter ( clan-pytest-with-core> E | ^ clan-pytest-with-core> E 883| m: clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:883:13: clan-pytest-with-core> E 882| optionDecls = filter ( clan-pytest-with-core> E 883| m: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 884| m.options ? _type clan-pytest-with-core> E clan-pytest-with-core> E … in the left operand of the AND (&&) operator clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:885:13: clan-pytest-with-core> E 884| m.options ? _type clan-pytest-with-core> E 885| && (m.options._type == "option" || throwDeclarationTypeError loc m.options._type m._file) clan-pytest-with-core> E | ^ clan-pytest-with-core> E 886| ) decls; clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'options' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:807:15: clan-pytest-with-core> E 806| pos = unsafeGetAttrPos n subtree; clan-pytest-with-core> E 807| options = option; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 808| }) subtree clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:289:73: clan-pytest-with-core> E 288| len = length attrPath; clan-pytest-with-core> E 289| atDepth = n: if n == len then value else { ${elemAt attrPath n} = atDepth (n + 1); }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 290| in clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'atDepth' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:289:17: clan-pytest-with-core> E 288| len = length attrPath; clan-pytest-with-core> E 289| atDepth = n: if n == len then value else { ${elemAt attrPath n} = atDepth (n + 1); }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 290| in clan-pytest-with-core> E clan-pytest-with-core> E … in the right operand of the update (//) operator clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:2047:9: clan-pytest-with-core> E 2046| } clan-pytest-with-core> E 2047| // optionalAttrs (toType != null) { clan-pytest-with-core> E | ^ clan-pytest-with-core> E 2048| type = toType; clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:2047:12: clan-pytest-with-core> E 2046| } clan-pytest-with-core> E 2047| // optionalAttrs (toType != null) { clan-pytest-with-core> E | ^ clan-pytest-with-core> E 2048| type = toType; clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'optionalAttrs' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:1492:25: clan-pytest-with-core> E 1491| */ clan-pytest-with-core> E 1492| optionalAttrs = cond: as: if cond then as else { }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1493| 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:1492:29: clan-pytest-with-core> E 1491| */ clan-pytest-with-core> E 1492| optionalAttrs = cond: as: if cond then as else { }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1493| clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:2036:17: clan-pytest-with-core> E 2035| let clan-pytest-with-core> E 2036| opt = attrByPath to { } options; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 2037| in clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'attrByPath' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:89:24: clan-pytest-with-core> E 88| attrByPath = clan-pytest-with-core> E 89| attrPath: default: set: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 90| let clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:106:5: clan-pytest-with-core> E 105| in clan-pytest-with-core> E 106| attrByPath' 0 set; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 107| clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'attrByPath'' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:93:12: clan-pytest-with-core> E 92| attrByPath' = clan-pytest-with-core> E 93| n: s: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 94| ( clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:102:35: clan-pytest-with-core> E 101| in clan-pytest-with-core> E 102| if s ? ${attr} then attrByPath' (n + 1) s.${attr} else default clan-pytest-with-core> E | ^ clan-pytest-with-core> E 103| ) clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'attrByPath'' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:93:12: clan-pytest-with-core> E 92| attrByPath' = clan-pytest-with-core> E 93| n: s: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 94| ( clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:102:35: clan-pytest-with-core> E 101| in clan-pytest-with-core> E 102| if s ? ${attr} then attrByPath' (n + 1) s.${attr} else default clan-pytest-with-core> E | ^ clan-pytest-with-core> E 103| ) clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'attrByPath'' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:93:12: clan-pytest-with-core> E 92| attrByPath' = clan-pytest-with-core> E 93| n: s: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 94| ( clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:102:35: clan-pytest-with-core> E 101| in clan-pytest-with-core> E 102| if s ? ${attr} then attrByPath' (n + 1) s.${attr} else default clan-pytest-with-core> E | ^ clan-pytest-with-core> E 103| ) clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'attrByPath'' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:93:12: clan-pytest-with-core> E 92| attrByPath' = clan-pytest-with-core> E 93| n: s: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 94| ( clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:102:55: clan-pytest-with-core> E 101| in clan-pytest-with-core> E 102| if s ? ${attr} then attrByPath' (n + 1) s.${attr} else default clan-pytest-with-core> E | ^ clan-pytest-with-core> E 103| ) clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:927:37: clan-pytest-with-core> E 926| clan-pytest-with-core> E 927| matchedOptions = mapAttrs (n: v: v.matchedOptions) resultsByName; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 928| clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'matchedOptions' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:893:13: clan-pytest-with-core> E 892| { clan-pytest-with-core> E 893| matchedOptions = evalOptionValue loc opt defns'; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 894| unmatchedDefns = [ ]; clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:893:30: clan-pytest-with-core> E 892| { clan-pytest-with-core> E 893| matchedOptions = evalOptionValue loc opt defns'; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 894| unmatchedDefns = [ ]; clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'evalOptionValue' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1103:15: clan-pytest-with-core> E 1102| evalOptionValue = clan-pytest-with-core> E 1103| loc: opt: defs: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1104| let clan-pytest-with-core> E clan-pytest-with-core> E … in the left operand of the update (//) operator clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1148:5: clan-pytest-with-core> E 1147| warnDeprecation opt clan-pytest-with-core> E 1148| // { clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1149| value = addErrorContext "while evaluating the option `${showOption loc}':" value; 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1141:9: clan-pytest-with-core> E 1140| warnDeprecation = clan-pytest-with-core> E 1141| if (opt.type.deprecationMessage != null) then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1142| warn "The type `types.${opt.type.name}' of option `${showOption loc}' defined in ${showFiles opt.declarations} is deprecated. ${opt.type.deprecationMessage}" clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:890:19: clan-pytest-with-core> E 889| let clan-pytest-with-core> E 890| opt = fixupOptionType loc (mergeOptionDecls loc decls); clan-pytest-with-core> E | ^ clan-pytest-with-core> E 891| in clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'fixupOptionType' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1473:10: clan-pytest-with-core> E 1472| fixupOptionType = clan-pytest-with-core> E 1473| loc: opt: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1474| if opt.type.getSubModules or null == null then 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1474:5: clan-pytest-with-core> E 1473| loc: opt: clan-pytest-with-core> E 1474| if opt.type.getSubModules or null == null then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1475| opt // { type = opt.type or types.unspecified; } clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'type.getSubModules' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/nixos/modules/services/hardware/bluetooth.nix:72:9: clan-pytest-with-core> E 71| settings = mkOption { clan-pytest-with-core> E 72| type = cfgFmt.type; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 73| default = { }; clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/nixos/modules/services/hardware/bluetooth.nix:26:12: clan-pytest-with-core> E 25| clan-pytest-with-core> E 26| cfgFmt = pkgs.formats.ini { }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 27| clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:727:15: clan-pytest-with-core> E 726| extraArgs = mapAttrs ( clan-pytest-with-core> E 727| name: _: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 728| addErrorContext (context name) ( clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the module argument `pkgs' in "/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/nixos/modules/services/hardware/bluetooth.nix": clan-pytest-with-core> E clan-pytest-with-core> E … noting that argument `pkgs` is not externally provided, so querying `_module.args` instead, requiring `config` clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:731:13: clan-pytest-with-core> E 730| "noting that argument `${name}` is not externally provided, so querying `_module.args` instead, requiring `config`" clan-pytest-with-core> E 731| config._module.args.${name} clan-pytest-with-core> E | ^ clan-pytest-with-core> E 732| ) clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/types.nix:1029:18: clan-pytest-with-core> E 1028| value = mapAttrs ( clan-pytest-with-core> E 1029| n: v: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1030| if lazy then clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'optionalValue.value' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1312:5: clan-pytest-with-core> E 1311| clan-pytest-with-core> E 1312| optionalValue = if isDefined then { value = mergedValue; } else { }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1313| }; 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1312:21: clan-pytest-with-core> E 1311| clan-pytest-with-core> E 1312| optionalValue = if isDefined then { value = mergedValue; } else { }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1313| }; clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'values' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1240:11: clan-pytest-with-core> E 1239| { clan-pytest-with-core> E 1240| values = defsSorted; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1241| inherit (defsFiltered) highestPrio; 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1211:11: clan-pytest-with-core> E 1210| # Avoid sorting if we don't have to. clan-pytest-with-core> E 1211| if any (def: def.value._type or "" == "order") defsFiltered.values then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1212| sortProperties defsFiltered.values clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'any' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1211:14: clan-pytest-with-core> E 1210| # Avoid sorting if we don't have to. clan-pytest-with-core> E 1211| if any (def: def.value._type or "" == "order") defsFiltered.values then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1212| sortProperties defsFiltered.values clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1211:19: clan-pytest-with-core> E 1210| # Avoid sorting if we don't have to. clan-pytest-with-core> E 1211| if any (def: def.value._type or "" == "order") defsFiltered.values then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1212| sortProperties defsFiltered.values clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'value._type' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1422:67: clan-pytest-with-core> E 1421| strip = clan-pytest-with-core> E 1422| def: if def.value._type or "" == "override" then def // { value = def.value.content; } else def; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1423| in clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'value.content' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1566:22: clan-pytest-with-core> E 1565| _type = "override"; clan-pytest-with-core> E 1566| inherit priority content; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1567| }; 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/nixos/modules/misc/nixpkgs.nix:107:15: clan-pytest-with-core> E 106| clan-pytest-with-core> E 107| finalPkgs = if opt.pkgs.isDefined then cfg.pkgs.appendOverlays cfg.overlays else defaultPkgs; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 108| clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'pkgs.isDefined' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1154:21: clan-pytest-with-core> E 1153| definitionsWithLocations = res.defsFinal; clan-pytest-with-core> E 1154| inherit (res) isDefined; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1155| inherit (res.checkedAndMerged) valueMeta; clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'isDefined' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1310:5: clan-pytest-with-core> E 1309| clan-pytest-with-core> E 1310| isDefined = defsFinal != [ ]; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1311| clan-pytest-with-core> E clan-pytest-with-core> E (6 duplicate frames omitted) clan-pytest-with-core> E clan-pytest-with-core> E error: attribute 'system' missing clan-pytest-with-core> E at /build/store/nix/store/y3h139bhv4373m1hab367ma4p5i95i2f-source/modules/clan/module.nix:164:24: clan-pytest-with-core> E 163| (lib.modules.importApply ../../nixosModules/machineModules/overridePkgs.nix { clan-pytest-with-core> E 164| pkgs = nixpkgsMatrix.${config.inventory.machines.${name}.nixpkgs}.system.${system}.pkgs; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 165| }) clan-pytest-with-core> E Did you mean systems? 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 0x7fffe63b1230> clan-pytest-with-core> flake_with_sops = 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_accessing_path_before_generate_shows_helpful_error( clan-pytest-with-core> monkeypatch: pytest.MonkeyPatch, clan-pytest-with-core> flake_with_sops: ClanFlake, clan-pytest-with-core> ) -> None: clan-pytest-with-core> """Ensure that accessing .path of a var file that hasn't been generated yet clan-pytest-with-core> produces an explicit error message telling the user to run 'clan machines update'. clan-pytest-with-core> """ clan-pytest-with-core> flake = flake_with_sops clan-pytest-with-core> clan-pytest-with-core> config = flake.machines["my_machine"] = create_test_machine_config() clan-pytest-with-core> my_generator = config["clan"]["core"]["vars"]["generators"]["my_generator"] clan-pytest-with-core> my_generator["files"]["my_value"]["secret"] = False clan-pytest-with-core> my_generator["script"] = 'echo hello > "$out"/my_value' clan-pytest-with-core> flake.refresh() clan-pytest-with-core> monkeypatch.chdir(flake.path) clan-pytest-with-core> clan-pytest-with-core> eval_args = nix_eval( clan-pytest-with-core> [ clan-pytest-with-core> f"{flake.path}#nixosConfigurations.my_machine.config.clan.core.vars.generators.my_generator.files.my_value.path", clan-pytest-with-core> ], clan-pytest-with-core> ) clan-pytest-with-core> clan-pytest-with-core> # Var should not exist before any generation clan-pytest-with-core> result = run(eval_args, RunOpts(check=False)) clan-pytest-with-core> assert result.returncode != 0, ( clan-pytest-with-core> "nix eval should fail when .path is accessed before generation" clan-pytest-with-core> ) clan-pytest-with-core> assert "does not exist" in result.stderr clan-pytest-with-core> assert "clan vars generate" in result.stderr clan-pytest-with-core> clan-pytest-with-core> # Var should exist after 'vars generate' clan-pytest-with-core> > cli.run(["vars", "generate", "--flake", str(flake.path), "my_machine"]) clan-pytest-with-core> clan-pytest-with-core> /build/src/clan_cli/tests/test_vars_errors.py:259: 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/vars/generate.py:33: in generate_command clan-pytest-with-core> run_generators( clan-pytest-with-core> /build/src/clan_lib/vars/generate.py:306: in run_generators clan-pytest-with-core> all_generators = get_generators(machines, full_closure=True) clan-pytest-with-core> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ clan-pytest-with-core> /build/src/clan_lib/vars/generate.py:146: in get_generators clan-pytest-with-core> flake.precache(get_generators_precache_selectors(list(all_machines))) clan-pytest-with-core> /build/src/clan_lib/flake/flake.py:1151: in precache clan-pytest-with-core> self.get_from_nix(not_fetched_selectors) clan-pytest-with-core> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ clan-pytest-with-core> clan-pytest-with-core> self = Flake(identifier='/build/pytest-j_xztit8/flake', hash='sha256-5xw2CpOn/bdBvpgtT1xyDiOB0bTjI6vkwOypqTORFT4=', 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.?secrets.?age.?plugins', 'clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.gener...ngs.publicModule', 'clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.settings.secretModule', ...] 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 while executing:$ clan select 'clanInternals.?secrets.?age.?plugins' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.generators.*.{share,dependencies,prompts,validationHash}' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.generators.*.files.*.{secret,deploy,owner,group,mode,neededFor}' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.?sops.?defaultGroups' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.settings.publicModule' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.settings.secretModule' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.?sops.?secretUploadDirectory' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.?password-store.?passCommand' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.?password-store.?secretLocation' clan-pytest-with-core> E $ clan select 'clanInternals.vars.settings.?recipients' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.?age.?secretLocation' clan-pytest-with-core> E Reason: attribute 'system' missing clan-pytest-with-core> E at /build/store/nix/store/y3h139bhv4373m1hab367ma4p5i95i2f-source/modules/clan/module.nix:164:24: clan-pytest-with-core> E 163| (lib.modules.importApply ../../nixosModules/machineModules/overridePkgs.nix { clan-pytest-with-core> E 164| pkgs = nixpkgsMatrix.${config.inventory.machines.${name}.nixpkgs}.system.${system}.pkgs; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 165| }) clan-pytest-with-core> E Did you mean systems?. 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 setup ----------------------------- clan-pytest-with-core> !! $HOME does not point to a temp directory!! HOME=/build/pytest-j_xztit8 clan-pytest-with-core> [localhost] $ clan vars keygen --flake /build/pytest-j_xztit8/flake --user admin --no-interactive clan-pytest-with-core> Caller: /build/src/clan_cli/tests/age_keys.py:31::init clan-pytest-with-core> clan-pytest-with-core> Prefetching flake /build/pytest-j_xztit8/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/febbcab65441be6ccc547560fd0155faadebbbb7 clan-pytest-with-core> (cached) $ clan select clanInternals.inventoryClass.relativeDirectory 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> git \ clan-pytest-with-core> -C /build/pytest-j_xztit8/flake \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-j_xztit8/flake/sops/users/admin 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/admin to git clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-j_xztit8/flake \ clan-pytest-with-core> diff \ clan-pytest-with-core> --cached --exit-code \ clan-pytest-with-core> -- /build/pytest-j_xztit8/flake/sops/users/admin 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-j_xztit8/flake \ clan-pytest-with-core> commit \ clan-pytest-with-core> -m 'secrets: add user admin' \ clan-pytest-with-core> --no-verify /build/pytest-j_xztit8/flake/sops/users/admin 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/admin to git 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/pytest-j_xztit8 clan-pytest-with-core> DEBUG clan_cli.tests.helpers.cli:__init__.py:143 $ clan vars keygen --flake /build/pytest-j_xztit8/flake --user admin --no-interactive clan-pytest-with-core> Caller: /build/src/clan_cli/tests/age_keys.py:31::init clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:927 Prefetching flake /build/pytest-j_xztit8/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/febbcab65441be6ccc547560fd0155faadebbbb7 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.cmd:__init__.py:143 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> DEBUG clan_lib.cmd:__init__.py:143 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> DEBUG clan_cli.secrets.sops:sops.py:99 Found age public key from a private key in the environment (SOPS_AGE_KEY): age1dhwqzkah943xzc34tc3dlmfayyevcmdmxzjezdgdy33euxwf59vsp3vk3c clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:143 git \ clan-pytest-with-core> -C /build/pytest-j_xztit8/flake \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-j_xztit8/flake/sops/users/admin 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> DEBUG clan_lib.cmd:__init__.py:143 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> DEBUG clan_lib.git:__init__.py:98 Adding sops/users/admin to git clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:143 git \ clan-pytest-with-core> -C /build/pytest-j_xztit8/flake \ clan-pytest-with-core> diff \ clan-pytest-with-core> --cached --exit-code \ clan-pytest-with-core> -- /build/pytest-j_xztit8/flake/sops/users/admin 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> DEBUG clan_lib.cmd:__init__.py:143 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> DEBUG clan_lib.cmd:__init__.py:143 git \ clan-pytest-with-core> -C /build/pytest-j_xztit8/flake \ clan-pytest-with-core> commit \ clan-pytest-with-core> -m 'secrets: add user admin' \ clan-pytest-with-core> --no-verify /build/pytest-j_xztit8/flake/sops/users/admin 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> DEBUG clan_lib.cmd:__init__.py:143 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> INFO clan_lib.git:__init__.py:141 Committed sops/users/admin to git clan-pytest-with-core> ----------------------------- Captured stdout call ----------------------------- clan-pytest-with-core> [main e735dae] flake: update by flake generator clan-pytest-with-core> 2 files changed, 34 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> ----------------------------- Captured stderr call ----------------------------- clan-pytest-with-core> Prefetching flake /build/pytest-j_xztit8/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/d2c0050d97832c3ac5193485b93705d00938c15e clan-pytest-with-core> (cached) $ clan select clanInternals.inventoryClass.relativeDirectory 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> eval \ clan-pytest-with-core> --show-trace --json \ clan-pytest-with-core> --print-build-logs --store \ clan-pytest-with-core> /build/store \ clan-pytest-with-core> --override-input nixpkgs \ clan-pytest-with-core> /nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source \ clan-pytest-with-core> '/build/pytest-j_xztit8/flake#nixosConfigurations.my_machine.config.clan.core.vars.generators.my_generator.files.my_value.path' clan-pytest-with-core> Caller: /build/src/clan_cli/tests/test_vars_errors.py:251::test_accessing_path_before_generate_shows_helpful_error 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: not writing modified lock file of flake 'git+file:///build/pytest-j_xztit8/flake': clan-pytest-with-core> • Updated input 'nixpkgs': clan-pytest-with-core> follows 'clan-core/nixpkgs' clan-pytest-with-core> → 'path:/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source?lastModified=0&narHash=sha256-tkD1h/1jLJ6qZHjG7/TOZT1qqI1ej3VPPCufHQyv1Uo%3D' (1970-01-01) clan-pytest-with-core> error: clan-pytest-with-core> … while calling anonymous lambda clan-pytest-with-core> at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:1195:17: clan-pytest-with-core> 1194| mapAttrs ( clan-pytest-with-core> 1195| name: value: clan-pytest-with-core> | ^ clan-pytest-with-core> 1196| if isAttrs value && cond value then recurse (path ++ [ name ]) value else f (path ++ [ name ]) value clan-pytest-with-core> clan-pytest-with-core> … from call site clan-pytest-with-core> at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:1196:85: clan-pytest-with-core> 1195| name: value: clan-pytest-with-core> 1196| if isAttrs value && cond value then recurse (path ++ [ name ]) value else f (path ++ [ name ]) value clan-pytest-with-core> | ^ clan-pytest-with-core> 1197| ); clan-pytest-with-core> clan-pytest-with-core> … while calling anonymous lambda clan-pytest-with-core> at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:282:71: clan-pytest-with-core> 281| # For definitions that have an associated option clan-pytest-with-core> 282| declaredConfig = mapAttrsRecursiveCond (v: !isOption v) (_: v: v.value) options; clan-pytest-with-core> | ^ clan-pytest-with-core> 283| clan-pytest-with-core> clan-pytest-with-core> … while evaluating the attribute 'value' clan-pytest-with-core> at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1149:7: clan-pytest-with-core> 1148| // { clan-pytest-with-core> 1149| value = addErrorContext "while evaluating the option `${showOption loc}':" value; clan-pytest-with-core> | ^ clan-pytest-with-core> 1150| inherit (res.defsFinal') highestPrio; clan-pytest-with-core> clan-pytest-with-core> … while evaluating the option `clan.core.vars.generators.my_generator.files.my_value.path': clan-pytest-with-core> clan-pytest-with-core> … while evaluating the attribute 'mergedValue' clan-pytest-with-core> at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1246:5: clan-pytest-with-core> 1245| # Type-check the remaining definitions, and merge them. Or throw if no definitions. clan-pytest-with-core> 1246| mergedValue = clan-pytest-with-core> | ^ clan-pytest-with-core> 1247| if isDefined then clan-pytest-with-core> clan-pytest-with-core> … while evaluating a branch condition clan-pytest-with-core> at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1247:7: clan-pytest-with-core> 1246| mergedValue = clan-pytest-with-core> 1247| if isDefined then clan-pytest-with-core> | ^ clan-pytest-with-core> 1248| if type.merge ? v2 then clan-pytest-with-core> clan-pytest-with-core> … while evaluating the attribute 'values' clan-pytest-with-core> at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1240:11: clan-pytest-with-core> 1239| { clan-pytest-with-core> 1240| values = defsSorted; clan-pytest-with-core> | ^ clan-pytest-with-core> 1241| inherit (defsFiltered) highestPrio; clan-pytest-with-core> clan-pytest-with-core> … while evaluating a branch condition clan-pytest-with-core> at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1211:11: clan-pytest-with-core> 1210| # Avoid sorting if we don't have to. clan-pytest-with-core> 1211| if any (def: def.value._type or "" == "order") defsFiltered.values then clan-pytest-with-core> | ^ clan-pytest-with-core> 1212| sortProperties defsFiltered.values clan-pytest-with-core> clan-pytest-with-core> … while calling the 'any' builtin clan-pytest-with-core> at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1211:14: clan-pytest-with-core> 1210| # Avoid sorting if we don't have to. clan-pytest-with-core> 1211| if any (def: def.value._type or "" == "order") defsFiltered.values then clan-pytest-with-core> | ^ clan-pytest-with-core> 1212| sortProperties defsFiltered.values clan-pytest-with-core> clan-pytest-with-core> … while calling anonymous lambda clan-pytest-with-core> at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1211:19: clan-pytest-with-core> 1210| # Avoid sorting if we don't have to. clan-pytest-with-core> 1211| if any (def: def.value._type or "" == "order") defsFiltered.values then clan-pytest-with-core> | ^ clan-pytest-with-core> 1212| sortProperties defsFiltered.values clan-pytest-with-core> clan-pytest-with-core> … while evaluating the attribute 'value._type' clan-pytest-with-core> at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1422:67: clan-pytest-with-core> 1421| strip = clan-pytest-with-core> 1422| def: if def.value._type or "" == "override" then def // { va clan-pytest-with-core> lue = def.value.content; } else def; clan-pytest-with-core> | ^ clan-pytest-with-core> 1423| in clan-pytest-with-core> clan-pytest-with-core> … while evaluating the attribute 'value.content' clan-pytest-with-core> at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1566:22: clan-pytest-with-core> 1565| _type = "override"; clan-pytest-with-core> 1566| inherit priority content; clan-pytest-with-core> | ^ clan-pytest-with-core> 1567| }; clan-pytest-with-core> clan-pytest-with-core> … while evaluating the attribute 'default' clan-pytest-with-core> at /build/store/nix/store/y3h139bhv4373m1hab367ma4p5i95i2f-source/modules/clan/vars/settings-opts.nix:80:9: clan-pytest-with-core> 79| ''; clan-pytest-with-core> 80| default = clan-pytest-with-core> | ^ clan-pytest-with-core> 81| if file.config.flakePath == null then clan-pytest-with-core> clan-pytest-with-core> … while calling the 'throw' builtin clan-pytest-with-core> at /build/store/nix/store/y3h139bhv4373m1hab367ma4p5i95i2f-source/modules/clan/vars/settings-opts.nix:84:13: clan-pytest-with-core> 83| else if !builtins.pathExists file.config.flakePath then clan-pytest-with-core> 84| throw "File '${file.config.name}' at '${file.config.rel_dir}' does not exist. Try running 'clan vars generate' first." clan-pytest-with-core> | ^ clan-pytest-with-core> 85| else clan-pytest-with-core> clan-pytest-with-core> error: File 'my_value' at 'per-machine/my_machine/my_generator' does not exist. Try running 'clan vars generate' first. clan-pytest-with-core> Command exited with return code 1 clan-pytest-with-core> Caller: /build/src/clan_cli/tests/test_vars_errors.py:251::test_accessing_path_before_generate_shows_helpful_error clan-pytest-with-core> clan-pytest-with-core> [localhost] $ clan vars generate --flake /build/pytest-j_xztit8/flake my_machine clan-pytest-with-core> Caller: /build/src/clan_cli/tests/test_vars_errors.py:259::test_accessing_path_before_generate_shows_helpful_error clan-pytest-with-core> clan-pytest-with-core> Prefetching flake /build/pytest-j_xztit8/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.cliChecks clan-pytest-with-core> Cache miss for clanInternals.inventoryClass.inventorySerialization.{instances,machines,meta} clan-pytest-with-core> Loading flake cache from file /build/clan-flake-cache/flakes-v2/8905a853ca9a9405f12af2015512567f02b8b738 clan-pytest-with-core> Cache miss for clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> Loading flake cache from file /build/clan-flake-cache/flakes-v2/8905a853ca9a9405f12af2015512567f02b8b738 clan-pytest-with-core> (cached) $ clan select 'clanInternals.inventoryClass.inventorySerialization.{instances,machines,meta}' clan-pytest-with-core> Precaching selectors: clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.machines clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.instances clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.meta clan-pytest-with-core> - (not cached) clanInternals.?secrets.?age.?plugins clan-pytest-with-core> - (cached) clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.generators.*.{share,dependencies,prompts,validationHash} clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.generators.*.files.*.{secret,deploy,owner,group,mode,neededFor} clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.?sops.?defaultGroups clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.settings.publicModule clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.settings.secretModule clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.?sops.?secretUploadDirectory clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.?password-store.?passCommand clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.?password-store.?secretLocation clan-pytest-with-core> - (not cached) clanInternals.vars.settings.?recipients clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.?age.?secretLocation clan-pytest-with-core> ------------------------------ Captured log call ------------------------------- clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:927 Prefetching flake /build/pytest-j_xztit8/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/d2c0050d97832c3ac5193485b93705d00938c15e 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.cmd:__init__.py:143 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> eval \ clan-pytest-with-core> --show-trace --json \ clan-pytest-with-core> --print-build-logs --store \ clan-pytest-with-core> /build/store \ clan-pytest-with-core> --override-input nixpkgs \ clan-pytest-with-core> /nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source \ clan-pytest-with-core> '/build/pytest-j_xztit8/flake#nixosConfigurations.my_machine.config.clan.core.vars.generators.my_generator.files.my_value.path' clan-pytest-with-core> Caller: /build/src/clan_cli/tests/test_vars_errors.py:251::test_accessing_path_before_generate_shows_helpful_error 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: not writing modified lock file of flake 'git+file:///build/pytest-j_xztit8/flake': clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 • Updated input '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 → 'path:/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source?lastModified=0&narHash=sha256-tkD1h/1jLJ6qZHjG7/TOZT1qqI1ej3VPPCufHQyv1Uo%3D' (1970-01-01) clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 error: clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 … while calling anonymous lambda clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:1195:17: clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 1194| mapAttrs ( clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 1195| name: value: clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 | ^ clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 1196| if isAttrs value && cond value then recurse (path ++ [ name ]) value else f (path ++ [ name ]) value clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 … from call site clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:1196:85: clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 1195| name: value: clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 1196| if isAttrs value && cond value then recurse (path ++ [ name ]) value else f (path ++ [ name ]) value clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 | ^ clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 1197| ); clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 … while calling anonymous lambda clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:282:71: clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 281| # For definitions that have an associated option clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 282| declaredConfig = mapAttrsRecursiveCond (v: !isOption v) (_: v: v.value) options; clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 | ^ clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 283| clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 … while evaluating the attribute 'value' clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1149:7: clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 1148| // { clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 1149| value = addErrorContext "while evaluating the option `${showOption loc}':" value; clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 | ^ clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 1150| inherit (res.defsFinal') highestPrio; clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 … while evaluating the option `clan.core.vars.generators.my_generator.files.my_value.path': clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 … while evaluating the attribute 'mergedValue' clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1246:5: clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 1245| # Type-check the remaining definitions, and merge them. Or throw if no definitions. clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 1246| mergedValue = clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 | ^ clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 1247| if isDefined then clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 … while evaluating a branch condition clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1247:7: clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 1246| mergedValue = clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 1247| if isDefined then clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 | ^ clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 1248| if type.merge ? v2 then clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 … while evaluating the attribute 'values' clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1240:11: clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 1239| { clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 1240| values = defsSorted; clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 | ^ clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 1241| inherit (defsFiltered) highestPrio; clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 … while evaluating a branch condition clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1211:11: clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 1210| # Avoid sorting if we don't have to. clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 1211| if any (def: def.value._type or "" == "order") defsFiltered.values then clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 | ^ clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 1212| sortProperties defsFiltered.values clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 … while calling the 'any' builtin clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1211:14: clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 1210| # Avoid sorting if we don't have to. clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 1211| if any (def: def.value._type or "" == "order") defsFiltered.values then clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 | ^ clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 1212| sortProperties defsFiltered.values clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 … while calling anonymous lambda clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1211:19: clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 1210| # Avoid sorting if we don't have to. clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 1211| if any (def: def.value._type or "" == "order") defsFiltered.values then clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 | ^ clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 1212| sortProperties defsFiltered.values clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 … while evaluating the attribute 'value._type' clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1422:67: clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 1421| strip = clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 1422| def: if def.value._type or "" == "override" then def // { va clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 lue = def.value.content; } else def; clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 | ^ clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 1423| in clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 … while evaluating the attribute 'value.content' clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1566:22: clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 1565| _type = "override"; clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 1566| inherit priority content; clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 | ^ clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 1567| }; clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 … while evaluating the attribute 'default' clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 at /build/store/nix/store/y3h139bhv4373m1hab367ma4p5i95i2f-source/modules/clan/vars/settings-opts.nix:80:9: clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 79| ''; clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 80| default = clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 | ^ clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 81| if file.config.flakePath == null then clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 … while calling the 'throw' builtin clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 at /build/store/nix/store/y3h139bhv4373m1hab367ma4p5i95i2f-source/modules/clan/vars/settings-opts.nix:84:13: clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 83| else if !builtins.pathExists file.config.flakePath then clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 84| throw "File '${file.config.name}' at '${file.config.rel_dir}' does not exist. Try running 'clan vars generate' first." clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 | ^ clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 85| else clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 error: File 'my_value' at 'per-machine/my_machine/my_generator' does not exist. Try running 'clan vars generate' first. clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:143 Command exited with return code 1 clan-pytest-with-core> Caller: /build/src/clan_cli/tests/test_vars_errors.py:251::test_accessing_path_before_generate_shows_helpful_error clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_cli.tests.helpers.cli:__init__.py:143 $ clan vars generate --flake /build/pytest-j_xztit8/flake my_machine clan-pytest-with-core> Caller: /build/src/clan_cli/tests/test_vars_errors.py:259::test_accessing_path_before_generate_shows_helpful_error clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:927 Prefetching flake /build/pytest-j_xztit8/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.cliChecks clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1174 Cache miss for clanInternals.inventoryClass.inventorySerialization.{instances,machines,meta} clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:789 Loading flake cache from file /build/clan-flake-cache/flakes-v2/8905a853ca9a9405f12af2015512567f02b8b738 clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1174 Cache miss for clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:789 Loading flake cache from file /build/clan-flake-cache/flakes-v2/8905a853ca9a9405f12af2015512567f02b8b738 clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1179 (cached) $ clan select 'clanInternals.inventoryClass.inventorySerialization.{instances,machines,meta}' clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1144 Precaching selectors: clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.machines clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.instances clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.meta clan-pytest-with-core> - (not cached) clanInternals.?secrets.?age.?plugins clan-pytest-with-core> - (cached) clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.generators.*.{share,dependencies,prompts,validationHash} clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.generators.*.files.*.{secret,deploy,owner,group,mode,neededFor} clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.?sops.?defaultGroups clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.settings.publicModule clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.settings.secretModule clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.?sops.?secretUploadDirectory clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.?password-store.?passCommand clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.?password-store.?secretLocation clan-pytest-with-core> - (not cached) clanInternals.vars.settings.?recipients clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.?age.?secretLocation clan-pytest-with-core> _________________________ test_generate_secret_var_age _________________________ clan-pytest-with-core> [gw15] linux -- Python 3.14.7 /nix/store/3n4qphl9s728sz8frmpqqrv9b1m87g68-python3-3.14.7/bin/python clan-pytest-with-core> clan-pytest-with-core> self = Flake(identifier='/build/pytest-urxtniwp/flake', hash='sha256-P5DkkyqSbZJsgQFmE7tVAT+mjyREoYw4T/rl5qFLN/M=', 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.?secrets.?age.?plugins', 'clanInternals.inventoryClass.relativeDirectory', 'clanInternals.machines.x86...s.?defaultGroups', 'clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.settings.publicModule', ...] 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-urxtniwp/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/xll128ajz6la2qaib5f3j1czypp05lh4-source?narHash=sha256-P5DkkyqSbZJsgQFmE7tVAT+mjyREoYw4T/rl5qFLN/M="; 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": "maybe", "value": "secrets"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "plugins"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "inventoryClass"}, {"type": "str", "value": "relativeDirectory"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "share"}, {"type": "str", "value": "dependencies"}, {"type": "str", "value": "prompts"}, {"type": "str", "value": "validationHash"}]}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "str", "value": "files"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "secret"}, {"type": "str", "value": "deploy"}, {"type": "str", "value": "owner"}, {"type": "str", "value": "group"}, {"type": "str", "value": "mode"}, {"type": "str", "value": "neededFor"}]}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "defaultGroups"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "publicModule"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "secretModule"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "secretUploadDirectory"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "passCommand"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "secretLocation"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "maybe", "value": "recipients"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "secretLocation"}]'"'"''"'"') 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": "maybe", "value": "secrets"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "plugins"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "inventoryClass"}, {"type": "str", "value": "relativeDirectory"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "share"}, {"type": "str", "value": "dependencies"}, {"type": "str", "value": "prompts"}, {"type": "str", "value": "validationHash"}]}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "str", "value": "files"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "secret"}, {"type": "str", "value": "deploy"}, {"type": "str", "value": "owner"}, {"type": "str", "value": "group"}, {"type": "str", "value": "mode"}, {"type": "str", "value": "neededFor"}]}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "defaultGroups"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "publicModule"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "secretModule"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "secretUploadDirectory"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "passCommand"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "secretLocation"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "maybe", "value": "recipients"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "secretLocation"}]'') 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": "maybe", "value": "secrets"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "plugins"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "inventoryClass"}, {"type": "str", "value": "relativeDirectory"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "share"}, {"type": "str", "value": "dependencies"}, {"type": "str", "value": "prompts"}, {"type": "str", "value": "validationHash"}]}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "str", "value": "files"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "secret"}, {"type": "str", "value": "deploy"}, {"type": "str", "value": "owner"}, {"type": "str", "value": "group"}, {"type": "str", "value": "mode"}, {"type": "str", "value": "neededFor"}]}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "defaultGroups"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "publicModule"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "secretModule"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "secretUploadDirectory"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "passCommand"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "secretLocation"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "maybe", "value": "recipients"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "secretLocation"}]'') flake) clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating list element at index 2 clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating attribute 'my_machine' clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/cba1x9mxnwr8b36cw41bya7g6d5v1p7d-source/select.nix:325:37: clan-pytest-with-core> E 324| in clan-pytest-with-core> E 325| builtins.mapAttrs (_: v: recurse selectors (idx + 1) v) filteredAttrs clan-pytest-with-core> E | ^ clan-pytest-with-core> E 326| else if selector.type == "maybe" then 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:325:40: clan-pytest-with-core> E 324| in clan-pytest-with-core> E 325| builtins.mapAttrs (_: v: recurse selectors (idx + 1) v) filteredAttrs clan-pytest-with-core> E | ^ clan-pytest-with-core> E 326| else if selector.type == "maybe" then 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 … from call site clan-pytest-with-core> E at /build/store/nix/store/cba1x9mxnwr8b36cw41bya7g6d5v1p7d-source/select.nix:312:15: clan-pytest-with-core> E 311| else if selector.type == "str" then clan-pytest-with-core> E 312| recurse selectors (idx + 1) (builtins.getAttr selector.value obj) clan-pytest-with-core> E | ^ clan-pytest-with-core> E 313| else if selector.type == "set" then 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 'getAttr' builtin clan-pytest-with-core> E at /build/store/nix/store/cba1x9mxnwr8b36cw41bya7g6d5v1p7d-source/select.nix:312:44: clan-pytest-with-core> E 311| else if selector.type == "str" then clan-pytest-with-core> E 312| recurse selectors (idx + 1) (builtins.getAttr selector.value obj) clan-pytest-with-core> E | ^ clan-pytest-with-core> E 313| else if selector.type == "set" then clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'seq' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:401:18: clan-pytest-with-core> E 400| options = checked options; clan-pytest-with-core> E 401| config = checked (removeAttrs config [ "_module" ]); clan-pytest-with-core> E | ^ clan-pytest-with-core> E 402| _module = checked (config._module); 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:304:9: clan-pytest-with-core> E 303| checkUnmatched = clan-pytest-with-core> E 304| if config._module.check && config._module.freeformType == null && merged.unmatchedDefns != [ ] then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 305| let clan-pytest-with-core> E clan-pytest-with-core> E … in the right operand of the AND (&&) operator clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:304:72: clan-pytest-with-core> E 303| checkUnmatched = clan-pytest-with-core> E 304| if config._module.check && config._module.freeformType == null && merged.unmatchedDefns != [ ] then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 305| let clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'unmatchedDefns' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:940:7: clan-pytest-with-core> E 939| # Transforms unmatchedDefnsByName into a list of definitions clan-pytest-with-core> E 940| unmatchedDefns = clan-pytest-with-core> E | ^ clan-pytest-with-core> E 941| if configs == [ ] then clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'concatLists' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:946:11: clan-pytest-with-core> E 945| else clan-pytest-with-core> E 946| concatLists ( clan-pytest-with-core> E | ^ clan-pytest-with-core> E 947| mapAttrsToList ( clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:948:21: clan-pytest-with-core> E 947| mapAttrsToList ( clan-pytest-with-core> E 948| name: defs: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 949| map ( clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'map' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:949:15: clan-pytest-with-core> E 948| name: defs: clan-pytest-with-core> E 949| map ( clan-pytest-with-core> E | ^ clan-pytest-with-core> E 950| def: clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:932:22: clan-pytest-with-core> E 931| # Propagate all unmatched definitions from nested option sets clan-pytest-with-core> E 932| mapAttrs (n: v: v.unmatchedDefns) resultsByName clan-pytest-with-core> E | ^ clan-pytest-with-core> E 933| # Plus the definitions for the current prefix that don't have a matching option clan-pytest-with-core> E clan-pytest-with-core> E (10 duplicate frames omitted) clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:932:25: clan-pytest-with-core> E 931| # Propagate all unmatched definitions from nested option sets clan-pytest-with-core> E 932| mapAttrs (n: v: v.unmatchedDefns) resultsByName clan-pytest-with-core> E | ^ clan-pytest-with-core> E 933| # Plus the definitions for the current prefix that don't have a matching option clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:876:15: clan-pytest-with-core> E 875| resultsByName = mapAttrs ( clan-pytest-with-core> E 876| name: decls: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 877| # We're descending into attribute ‘name’. 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:888:9: clan-pytest-with-core> E 887| in clan-pytest-with-core> E 888| if length optionDecls == length decls then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 889| let clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'length' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:888:12: clan-pytest-with-core> E 887| in clan-pytest-with-core> E 888| if length optionDecls == length decls then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 889| let clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'filter' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:882:25: clan-pytest-with-core> E 881| defns' = rawDefinitionsByName.${name} or [ ]; clan-pytest-with-core> E 882| optionDecls = filter ( clan-pytest-with-core> E | ^ clan-pytest-with-core> E 883| m: clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:883:13: clan-pytest-with-core> E 882| optionDecls = filter ( clan-pytest-with-core> E 883| m: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 884| m.options ? _type clan-pytest-with-core> E clan-pytest-with-core> E … in the left operand of the AND (&&) operator clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:885:13: clan-pytest-with-core> E 884| m.options ? _type clan-pytest-with-core> E 885| && (m.options._type == "option" || throwDeclarationTypeError loc m.options._type m._file) clan-pytest-with-core> E | ^ clan-pytest-with-core> E 886| ) decls; clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'options' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:807:15: clan-pytest-with-core> E 806| pos = unsafeGetAttrPos n subtree; clan-pytest-with-core> E 807| options = option; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 808| }) subtree clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:289:73: clan-pytest-with-core> E 288| len = length attrPath; clan-pytest-with-core> E 289| atDepth = n: if n == len then value else { ${elemAt attrPath n} = atDepth (n + 1); }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 290| in clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'atDepth' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:289:17: clan-pytest-with-core> E 288| len = length attrPath; clan-pytest-with-core> E 289| atDepth = n: if n == len then value else { ${elemAt attrPath n} = atDepth (n + 1); }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 290| in clan-pytest-with-core> E clan-pytest-with-core> E … in the right operand of the update (//) operator clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:2047:9: clan-pytest-with-core> E 2046| } clan-pytest-with-core> E 2047| // optionalAttrs (toType != null) { clan-pytest-with-core> E | ^ clan-pytest-with-core> E 2048| type = toType; clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:2047:12: clan-pytest-with-core> E 2046| } clan-pytest-with-core> E 2047| // optionalAttrs (toType != null) { clan-pytest-with-core> E | ^ clan-pytest-with-core> E 2048| type = toType; clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'optionalAttrs' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:1492:25: clan-pytest-with-core> E 1491| */ clan-pytest-with-core> E 1492| optionalAttrs = cond: as: if cond then as else { }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1493| 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:1492:29: clan-pytest-with-core> E 1491| */ clan-pytest-with-core> E 1492| optionalAttrs = cond: as: if cond then as else { }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1493| clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:2036:17: clan-pytest-with-core> E 2035| let clan-pytest-with-core> E 2036| opt = attrByPath to { } options; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 2037| in clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'attrByPath' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:89:24: clan-pytest-with-core> E 88| attrByPath = clan-pytest-with-core> E 89| attrPath: default: set: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 90| let clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:106:5: clan-pytest-with-core> E 105| in clan-pytest-with-core> E 106| attrByPath' 0 set; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 107| clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'attrByPath'' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:93:12: clan-pytest-with-core> E 92| attrByPath' = clan-pytest-with-core> E 93| n: s: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 94| ( clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:102:35: clan-pytest-with-core> E 101| in clan-pytest-with-core> E 102| if s ? ${attr} then attrByPath' (n + 1) s.${attr} else default clan-pytest-with-core> E | ^ clan-pytest-with-core> E 103| ) clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'attrByPath'' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:93:12: clan-pytest-with-core> E 92| attrByPath' = clan-pytest-with-core> E 93| n: s: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 94| ( clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:102:35: clan-pytest-with-core> E 101| in clan-pytest-with-core> E 102| if s ? ${attr} then attrByPath' (n + 1) s.${attr} else default clan-pytest-with-core> E | ^ clan-pytest-with-core> E 103| ) clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'attrByPath'' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:93:12: clan-pytest-with-core> E 92| attrByPath' = clan-pytest-with-core> E 93| n: s: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 94| ( clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:102:35: clan-pytest-with-core> E 101| in clan-pytest-with-core> E 102| if s ? ${attr} then attrByPath' (n + 1) s.${attr} else default clan-pytest-with-core> E | ^ clan-pytest-with-core> E 103| ) clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'attrByPath'' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:93:12: clan-pytest-with-core> E 92| attrByPath' = clan-pytest-with-core> E 93| n: s: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 94| ( clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:102:55: clan-pytest-with-core> E 101| in clan-pytest-with-core> E 102| if s ? ${attr} then attrByPath' (n + 1) s.${attr} else default clan-pytest-with-core> E | ^ clan-pytest-with-core> E 103| ) clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:927:37: clan-pytest-with-core> E 926| clan-pytest-with-core> E 927| matchedOptions = mapAttrs (n: v: v.matchedOptions) resultsByName; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 928| clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'matchedOptions' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:893:13: clan-pytest-with-core> E 892| { clan-pytest-with-core> E 893| matchedOptions = evalOptionValue loc opt defns'; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 894| unmatchedDefns = [ ]; clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:893:30: clan-pytest-with-core> E 892| { clan-pytest-with-core> E 893| matchedOptions = evalOptionValue loc opt defns'; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 894| unmatchedDefns = [ ]; clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'evalOptionValue' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1103:15: clan-pytest-with-core> E 1102| evalOptionValue = clan-pytest-with-core> E 1103| loc: opt: defs: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1104| let clan-pytest-with-core> E clan-pytest-with-core> E … in the left operand of the update (//) operator clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1148:5: clan-pytest-with-core> E 1147| warnDeprecation opt clan-pytest-with-core> E 1148| // { clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1149| value = addErrorContext "while evaluating the option `${showOption loc}':" value; 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1141:9: clan-pytest-with-core> E 1140| warnDeprecation = clan-pytest-with-core> E 1141| if (opt.type.deprecationMessage != null) then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1142| warn "The type `types.${opt.type.name}' of option `${showOption loc}' defined in ${showFiles opt.declarations} is deprecated. ${opt.type.deprecationMessage}" clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:890:19: clan-pytest-with-core> E 889| let clan-pytest-with-core> E 890| opt = fixupOptionType loc (mergeOptionDecls loc decls); clan-pytest-with-core> E | ^ clan-pytest-with-core> E 891| in clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'fixupOptionType' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1473:10: clan-pytest-with-core> E 1472| fixupOptionType = clan-pytest-with-core> E 1473| loc: opt: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1474| if opt.type.getSubModules or null == null then 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1474:5: clan-pytest-with-core> E 1473| loc: opt: clan-pytest-with-core> E 1474| if opt.type.getSubModules or null == null then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1475| opt // { type = opt.type or types.unspecified; } clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'type.getSubModules' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/nixos/modules/services/hardware/bluetooth.nix:72:9: clan-pytest-with-core> E 71| settings = mkOption { clan-pytest-with-core> E 72| type = cfgFmt.type; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 73| default = { }; clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/nixos/modules/services/hardware/bluetooth.nix:26:12: clan-pytest-with-core> E 25| clan-pytest-with-core> E 26| cfgFmt = pkgs.formats.ini { }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 27| clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:727:15: clan-pytest-with-core> E 726| extraArgs = mapAttrs ( clan-pytest-with-core> E 727| name: _: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 728| addErrorContext (context name) ( clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the module argument `pkgs' in "/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/nixos/modules/services/hardware/bluetooth.nix": clan-pytest-with-core> E clan-pytest-with-core> E … noting that argument `pkgs` is not externally provided, so querying `_module.args` instead, requiring `config` clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:731:13: clan-pytest-with-core> E 730| "noting that argument `${name}` is not externally provided, so querying `_module.args` instead, requiring `config`" clan-pytest-with-core> E 731| config._module.args.${name} clan-pytest-with-core> E | ^ clan-pytest-with-core> E 732| ) clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/types.nix:1029:18: clan-pytest-with-core> E 1028| value = mapAttrs ( clan-pytest-with-core> E 1029| n: v: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1030| if lazy then clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'optionalValue.value' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1312:5: clan-pytest-with-core> E 1311| clan-pytest-with-core> E 1312| optionalValue = if isDefined then { value = mergedValue; } else { }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1313| }; 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1312:21: clan-pytest-with-core> E 1311| clan-pytest-with-core> E 1312| optionalValue = if isDefined then { value = mergedValue; } else { }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1313| }; clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'values' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1240:11: clan-pytest-with-core> E 1239| { clan-pytest-with-core> E 1240| values = defsSorted; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1241| inherit (defsFiltered) highestPrio; 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1211:11: clan-pytest-with-core> E 1210| # Avoid sorting if we don't have to. clan-pytest-with-core> E 1211| if any (def: def.value._type or "" == "order") defsFiltered.values then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1212| sortProperties defsFiltered.values clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'any' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1211:14: clan-pytest-with-core> E 1210| # Avoid sorting if we don't have to. clan-pytest-with-core> E 1211| if any (def: def.value._type or "" == "order") defsFiltered.values then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1212| sortProperties defsFiltered.values clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1211:19: clan-pytest-with-core> E 1210| # Avoid sorting if we don't have to. clan-pytest-with-core> E 1211| if any (def: def.value._type or "" == "order") defsFiltered.values then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1212| sortProperties defsFiltered.values clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'value._type' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1422:67: clan-pytest-with-core> E 1421| strip = clan-pytest-with-core> E 1422| def: if def.value._type or "" == "override" then def // { value = def.value.content; } else def; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1423| in clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'value.content' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1566:22: clan-pytest-with-core> E 1565| _type = "override"; clan-pytest-with-core> E 1566| inherit priority content; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1567| }; 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/nixos/modules/misc/nixpkgs.nix:107:15: clan-pytest-with-core> E 106| clan-pytest-with-core> E 107| finalPkgs = if opt.pkgs.isDefined then cfg.pkgs.appendOverlays cfg.overlays else defaultPkgs; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 108| clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'pkgs.isDefined' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1154:21: clan-pytest-with-core> E 1153| definitionsWithLocations = res.defsFinal; clan-pytest-with-core> E 1154| inherit (res) isDefined; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1155| inherit (res.checkedAndMerged) valueMeta; clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'isDefined' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1310:5: clan-pytest-with-core> E 1309| clan-pytest-with-core> E 1310| isDefined = defsFinal != [ ]; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1311| clan-pytest-with-core> E clan-pytest-with-core> E (6 duplicate frames omitted) clan-pytest-with-core> E clan-pytest-with-core> E error: attribute 'system' missing clan-pytest-with-core> E at /build/store/nix/store/y3h139bhv4373m1hab367ma4p5i95i2f-source/modules/clan/module.nix:164:24: clan-pytest-with-core> E 163| (lib.modules.importApply ../../nixosModules/machineModules/overridePkgs.nix { clan-pytest-with-core> E 164| pkgs = nixpkgsMatrix.${config.inventory.machines.${name}.nixpkgs}.system.${system}.pkgs; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 165| }) clan-pytest-with-core> E Did you mean systems? 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 0x7fffe6510cb0> 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> def test_generate_secret_var_age( 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> """Test the age secret store backend.""" clan-pytest-with-core> age_key = age_keys[0] clan-pytest-with-core> clan-pytest-with-core> # Set up machine configuration with age backend clan-pytest-with-core> config = flake.machines["my_machine"] = create_test_machine_config() clan-pytest-with-core> clan_vars = config["clan"]["core"]["vars"] clan-pytest-with-core> clan_vars["settings"]["secretStore"] = "age" clan-pytest-with-core> clan-pytest-with-core> # Create generators with secrets clan-pytest-with-core> my_generator = clan_vars["generators"]["my_generator"] clan-pytest-with-core> my_generator["files"]["my_secret"]["secret"] = True clan-pytest-with-core> my_generator["script"] = 'echo hello > "$out"/my_secret' clan-pytest-with-core> clan-pytest-with-core> my_generator2 = clan_vars["generators"]["my_generator2"] clan-pytest-with-core> my_generator2["files"]["my_secret2"]["secret"] = True clan-pytest-with-core> my_generator2["script"] = 'echo world > "$out"/my_secret2' clan-pytest-with-core> clan-pytest-with-core> my_shared_generator = clan_vars["generators"]["my_shared_generator"] clan-pytest-with-core> my_shared_generator["share"] = True clan-pytest-with-core> my_shared_generator["files"]["my_shared_secret"]["secret"] = True clan-pytest-with-core> my_shared_generator["script"] = 'echo shared > "$out"/my_shared_secret' clan-pytest-with-core> clan-pytest-with-core> flake.refresh() clan-pytest-with-core> monkeypatch.chdir(flake.path) clan-pytest-with-core> clan-pytest-with-core> # Write clan.nix with age recipients configuration clan-pytest-with-core> clan_nix_content = f""" clan-pytest-with-core> {{ clan-pytest-with-core> vars.settings.recipients.hosts.my_machine = [ clan-pytest-with-core> "{age_key.pubkey}" clan-pytest-with-core> ]; clan-pytest-with-core> }} clan-pytest-with-core> """ clan-pytest-with-core> (flake.path / "clan.nix").write_text(clan_nix_content) clan-pytest-with-core> clan-pytest-with-core> # Set up age key file clan-pytest-with-core> age_key_dir = flake.path / ".age" clan-pytest-with-core> age_key_dir.mkdir() clan-pytest-with-core> age_key_file = age_key_dir / "key.txt" clan-pytest-with-core> age_key_file.write_text(age_key.privkey) clan-pytest-with-core> clan-pytest-with-core> # Set AGE_KEYFILE environment variable clan-pytest-with-core> monkeypatch.setenv("AGE_KEYFILE", str(age_key_file)) clan-pytest-with-core> clan-pytest-with-core> # Commit the changes clan-pytest-with-core> subprocess.run(["git", "add", "."], cwd=flake.path, check=True) clan-pytest-with-core> subprocess.run( clan-pytest-with-core> ["git", "commit", "-m", "Add clan.nix with age recipients"], clan-pytest-with-core> cwd=flake.path, clan-pytest-with-core> check=True, clan-pytest-with-core> ) clan-pytest-with-core> clan-pytest-with-core> flake_obj = Flake(str(flake.path)) clan-pytest-with-core> machine = Machine(name="my_machine", flake=flake_obj) clan-pytest-with-core> clan-pytest-with-core> # Generate secrets clan-pytest-with-core> > assert not check_vars(machine.name, machine.flake) clan-pytest-with-core> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ clan-pytest-with-core> clan-pytest-with-core> /build/src/clan_cli/tests/test_vars_age.py:186: clan-pytest-with-core> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ clan-pytest-with-core> /build/src/clan_lib/vars/check.py:149: in check_vars clan-pytest-with-core> status = vars_status(machine_name, flake, generator_name=generator_name) clan-pytest-with-core> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ clan-pytest-with-core> /build/src/clan_lib/vars/check.py:63: in vars_status clan-pytest-with-core> generators = get_machine_generators([machine.name], machine.flake) clan-pytest-with-core> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ clan-pytest-with-core> /build/src/clan_lib/vars/generator.py:243: in get_machine_generators clan-pytest-with-core> flake.precache(get_machine_selectors(machine_names)) clan-pytest-with-core> /build/src/clan_lib/flake/flake.py:1151: in precache clan-pytest-with-core> self.get_from_nix(not_fetched_selectors) clan-pytest-with-core> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ clan-pytest-with-core> clan-pytest-with-core> self = Flake(identifier='/build/pytest-urxtniwp/flake', hash='sha256-P5DkkyqSbZJsgQFmE7tVAT+mjyREoYw4T/rl5qFLN/M=', 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.?secrets.?age.?plugins', 'clanInternals.inventoryClass.relativeDirectory', 'clanInternals.machines.x86...s.?defaultGroups', 'clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.settings.publicModule', ...] 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 while executing:$ clan select 'clanInternals.?secrets.?age.?plugins' clan-pytest-with-core> E $ clan select 'clanInternals.inventoryClass.relativeDirectory' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.generators.*.{share,dependencies,prompts,validationHash}' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.generators.*.files.*.{secret,deploy,owner,group,mode,neededFor}' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.?sops.?defaultGroups' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.settings.publicModule' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.settings.secretModule' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.?sops.?secretUploadDirectory' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.?password-store.?passCommand' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.?password-store.?secretLocation' clan-pytest-with-core> E $ clan select 'clanInternals.vars.settings.?recipients' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.?age.?secretLocation' clan-pytest-with-core> E Reason: attribute 'system' missing clan-pytest-with-core> E at /build/store/nix/store/y3h139bhv4373m1hab367ma4p5i95i2f-source/modules/clan/module.nix:164:24: clan-pytest-with-core> E 163| (lib.modules.importApply ../../nixosModules/machineModules/overridePkgs.nix { clan-pytest-with-core> E 164| pkgs = nixpkgsMatrix.${config.inventory.machines.${name}.nixpkgs}.system.${system}.pkgs; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 165| }) clan-pytest-with-core> E Did you mean systems?. 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-bzga6fal/flake/.git/ clan-pytest-with-core> [main (root-commit) 90b1ee2] 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-bzga6fal/flake/flake.lock": clan-pytest-with-core> • Added input 'clan-core': clan-pytest-with-core> 'path:/nix/store/x4g1qsn1nq0q56zn8h9c7xaiysv7bsf2-clan-core-flake?lastModified=1&narHash=sha256-Ynx5u312tlxJbGJCSevw5zZVxrd02FisWE1my%2B%2BFRSw%3D' (1970-01-01) clan-pytest-with-core> • Added input 'clan-core/data-mesher': clan-pytest-with-core> 'path:/nix/store/kdjkigwckgrfz0yg0d9z7kj2xkf084vs-source?lastModified=1&narHash=sha256-Yase/4e4aNN9QvUMqPH9ngbAmlcJCqLmFL0zuURdkuA%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/w2c23ykc12mswlg8hrrjzb5gv9gvkzwq-source?lastModified=1&narHash=sha256-RxWs5ND31KzTG7wvMM%2BPMfUjyNpmIEr999lqNARaM5o%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/lrxvs4l9bqbgjfz7w9bkfg5zqq442jxc-source?lastModified=1&narHash=sha256-4dtXQk/NMePegK/nWp5NSeuZKLATItOq61lpEvmXqGw%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/p17akwn814w226jq2cdkkhcw4psb0ga9-source?lastModified=0&narHash=sha256-tkD1h/1jLJ6qZHjG7/TOZT1qqI1ej3VPPCufHQyv1Uo%3D' (1970-01-01) clan-pytest-with-core> • Added input 'clan-core/sops-nix': clan-pytest-with-core> 'path:/nix/store/s154mmk8ahvc71gq8xfkbzlk240yvniv-source?lastModified=1&narHash=sha256-gkig4nPi1CWc4Z50GBsjE4ygSE7hMpl/TwID2an2Cck%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/9m1jsz5b9ggmjij2vkmafnhn26g96jjn-source?lastModified=1&narHash=sha256-brhZ8DmuGtzkCYHJg4HEd602amKm89Y9ytsFZ5uWD1w%3D' (1970-01-01) clan-pytest-with-core> • Added input 'clan-core/treefmt-nix': clan-pytest-with-core> 'path:/nix/store/7sjy8935654h3220n5gbaclf5nfw4nzx-source?lastModified=1&narHash=sha256-WSFCsDSE5ffgD2MqzkM2CYjeFiKhRF/dJUN8uedb6YE%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-urxtniwp 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:143 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-bzga6fal/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/x4g1qsn1nq0q56zn8h9c7xaiysv7bsf2-clan-core-flake?lastModified=1&narHash=sha256-Ynx5u312tlxJbGJCSevw5zZVxrd02FisWE1my%2B%2BFRSw%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/kdjkigwckgrfz0yg0d9z7kj2xkf084vs-source?lastModified=1&narHash=sha256-Yase/4e4aNN9QvUMqPH9ngbAmlcJCqLmFL0zuURdkuA%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/w2c23ykc12mswlg8hrrjzb5gv9gvkzwq-source?lastModified=1&narHash=sha256-RxWs5ND31KzTG7wvMM%2BPMfUjyNpmIEr999lqNARaM5o%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/lrxvs4l9bqbgjfz7w9bkfg5zqq442jxc-source?lastModified=1&narHash=sha256-4dtXQk/NMePegK/nWp5NSeuZKLATItOq61lpEvmXqGw%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/p17akwn814w226jq2cdkkhcw4psb0ga9-source?lastModified=0&narHash=sha256-tkD1h/1jLJ6qZHjG7/TOZT1qqI1ej3VPPCufHQyv1Uo%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/s154mmk8ahvc71gq8xfkbzlk240yvniv-source?lastModified=1&narHash=sha256-gkig4nPi1CWc4Z50GBsjE4ygSE7hMpl/TwID2an2Cck%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/9m1jsz5b9ggmjij2vkmafnhn26g96jjn-source?lastModified=1&narHash=sha256-brhZ8DmuGtzkCYHJg4HEd602amKm89Y9ytsFZ5uWD1w%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/7sjy8935654h3220n5gbaclf5nfw4nzx-source?lastModified=1&narHash=sha256-WSFCsDSE5ffgD2MqzkM2CYjeFiKhRF/dJUN8uedb6YE%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:143 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-urxtniwp clan-pytest-with-core> ----------------------------- Captured stdout call ----------------------------- clan-pytest-with-core> [main 0e3041f] flake: update by flake generator clan-pytest-with-core> 2 files changed, 54 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 aab69f0] Add clan.nix with age recipients clan-pytest-with-core> 2 files changed, 7 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-urxtniwp/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/febbcab65441be6ccc547560fd0155faadebbbb7 clan-pytest-with-core> (cached) $ clan select clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> Prefetching flake /build/pytest-urxtniwp/flake clan-pytest-with-core> warning: you don't have Internet access; disabling some network-dependent features clan-pytest-with-core> Precaching selectors: clan-pytest-with-core> - (not cached) clanInternals.?secrets.?age.?plugins clan-pytest-with-core> - (not cached) clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.generators.*.{share,dependencies,prompts,validationHash} clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.generators.*.files.*.{secret,deploy,owner,group,mode,neededFor} clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.?sops.?defaultGroups clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.settings.publicModule clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.settings.secretModule clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.?sops.?secretUploadDirectory clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.?password-store.?passCommand clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.?password-store.?secretLocation clan-pytest-with-core> - (not cached) clanInternals.vars.settings.?recipients clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.?age.?secretLocation clan-pytest-with-core> ------------------------------ Captured log call ------------------------------- clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:927 Prefetching flake /build/pytest-urxtniwp/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/febbcab65441be6ccc547560fd0155faadebbbb7 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-urxtniwp/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:1144 Precaching selectors: clan-pytest-with-core> - (not cached) clanInternals.?secrets.?age.?plugins clan-pytest-with-core> - (not cached) clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.generators.*.{share,dependencies,prompts,validationHash} clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.generators.*.files.*.{secret,deploy,owner,group,mode,neededFor} clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.?sops.?defaultGroups clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.settings.publicModule clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.settings.secretModule clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.?sops.?secretUploadDirectory clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.?password-store.?passCommand clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.?password-store.?secretLocation clan-pytest-with-core> - (not cached) clanInternals.vars.settings.?recipients clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.?age.?secretLocation clan-pytest-with-core> ______________ test_fails_when_files_are_left_from_other_backend _______________ clan-pytest-with-core> [gw2] linux -- Python 3.14.7 /nix/store/3n4qphl9s728sz8frmpqqrv9b1m87g68-python3-3.14.7/bin/python clan-pytest-with-core> clan-pytest-with-core> self = Flake(identifier='/build/pytest-21v695hn/flake', hash='sha256-+newB/BZ1hSoK2+BjKzgg1XJRW5WxBh5xAU3KnaMp28=', 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.?secrets.?age.?plugins', 'clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.gener...ngs.publicModule', 'clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.settings.secretModule', ...] 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-21v695hn/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/k7sny2ym63isn76hlxw7j4irazzxyilp-source?narHash=sha256-+newB/BZ1hSoK2+BjKzgg1XJRW5WxBh5xAU3KnaMp28="; 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": "maybe", "value": "secrets"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "plugins"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "share"}, {"type": "str", "value": "dependencies"}, {"type": "str", "value": "prompts"}, {"type": "str", "value": "validationHash"}]}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "str", "value": "files"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "secret"}, {"type": "str", "value": "deploy"}, {"type": "str", "value": "owner"}, {"type": "str", "value": "group"}, {"type": "str", "value": "mode"}, {"type": "str", "value": "neededFor"}]}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "defaultGroups"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "publicModule"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "secretModule"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "secretUploadDirectory"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "passCommand"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "secretLocation"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "maybe", "value": "recipients"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "secretLocation"}]'"'"''"'"') 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": "maybe", "value": "secrets"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "plugins"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "share"}, {"type": "str", "value": "dependencies"}, {"type": "str", "value": "prompts"}, {"type": "str", "value": "validationHash"}]}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "str", "value": "files"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "secret"}, {"type": "str", "value": "deploy"}, {"type": "str", "value": "owner"}, {"type": "str", "value": "group"}, {"type": "str", "value": "mode"}, {"type": "str", "value": "neededFor"}]}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "defaultGroups"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "publicModule"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "secretModule"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "secretUploadDirectory"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "passCommand"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "secretLocation"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "maybe", "value": "recipients"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "secretLocation"}]'') 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": "maybe", "value": "secrets"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "plugins"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "share"}, {"type": "str", "value": "dependencies"}, {"type": "str", "value": "prompts"}, {"type": "str", "value": "validationHash"}]}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "str", "value": "files"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "secret"}, {"type": "str", "value": "deploy"}, {"type": "str", "value": "owner"}, {"type": "str", "value": "group"}, {"type": "str", "value": "mode"}, {"type": "str", "value": "neededFor"}]}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "defaultGroups"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "publicModule"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "secretModule"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "secretUploadDirectory"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "passCommand"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "secretLocation"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "maybe", "value": "recipients"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "secretLocation"}]'') flake) clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating list element at index 1 clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating attribute 'my_machine' clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/cba1x9mxnwr8b36cw41bya7g6d5v1p7d-source/select.nix:325:37: clan-pytest-with-core> E 324| in clan-pytest-with-core> E 325| builtins.mapAttrs (_: v: recurse selectors (idx + 1) v) filteredAttrs clan-pytest-with-core> E | ^ clan-pytest-with-core> E 326| else if selector.type == "maybe" then 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:325:40: clan-pytest-with-core> E 324| in clan-pytest-with-core> E 325| builtins.mapAttrs (_: v: recurse selectors (idx + 1) v) filteredAttrs clan-pytest-with-core> E | ^ clan-pytest-with-core> E 326| else if selector.type == "maybe" then 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 … from call site clan-pytest-with-core> E at /build/store/nix/store/cba1x9mxnwr8b36cw41bya7g6d5v1p7d-source/select.nix:312:15: clan-pytest-with-core> E 311| else if selector.type == "str" then clan-pytest-with-core> E 312| recurse selectors (idx + 1) (builtins.getAttr selector.value obj) clan-pytest-with-core> E | ^ clan-pytest-with-core> E 313| else if selector.type == "set" then 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 'getAttr' builtin clan-pytest-with-core> E at /build/store/nix/store/cba1x9mxnwr8b36cw41bya7g6d5v1p7d-source/select.nix:312:44: clan-pytest-with-core> E 311| else if selector.type == "str" then clan-pytest-with-core> E 312| recurse selectors (idx + 1) (builtins.getAttr selector.value obj) clan-pytest-with-core> E | ^ clan-pytest-with-core> E 313| else if selector.type == "set" then clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'seq' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:401:18: clan-pytest-with-core> E 400| options = checked options; clan-pytest-with-core> E 401| config = checked (removeAttrs config [ "_module" ]); clan-pytest-with-core> E | ^ clan-pytest-with-core> E 402| _module = checked (config._module); 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:304:9: clan-pytest-with-core> E 303| checkUnmatched = clan-pytest-with-core> E 304| if config._module.check && config._module.freeformType == null && merged.unmatchedDefns != [ ] then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 305| let clan-pytest-with-core> E clan-pytest-with-core> E … in the right operand of the AND (&&) operator clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:304:72: clan-pytest-with-core> E 303| checkUnmatched = clan-pytest-with-core> E 304| if config._module.check && config._module.freeformType == null && merged.unmatchedDefns != [ ] then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 305| let clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'unmatchedDefns' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:940:7: clan-pytest-with-core> E 939| # Transforms unmatchedDefnsByName into a list of definitions clan-pytest-with-core> E 940| unmatchedDefns = clan-pytest-with-core> E | ^ clan-pytest-with-core> E 941| if configs == [ ] then clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'concatLists' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:946:11: clan-pytest-with-core> E 945| else clan-pytest-with-core> E 946| concatLists ( clan-pytest-with-core> E | ^ clan-pytest-with-core> E 947| mapAttrsToList ( clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:948:21: clan-pytest-with-core> E 947| mapAttrsToList ( clan-pytest-with-core> E 948| name: defs: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 949| map ( clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'map' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:949:15: clan-pytest-with-core> E 948| name: defs: clan-pytest-with-core> E 949| map ( clan-pytest-with-core> E | ^ clan-pytest-with-core> E 950| def: clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:932:22: clan-pytest-with-core> E 931| # Propagate all unmatched definitions from nested option sets clan-pytest-with-core> E 932| mapAttrs (n: v: v.unmatchedDefns) resultsByName clan-pytest-with-core> E | ^ clan-pytest-with-core> E 933| # Plus the definitions for the current prefix that don't have a matching option clan-pytest-with-core> E clan-pytest-with-core> E (10 duplicate frames omitted) clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:932:25: clan-pytest-with-core> E 931| # Propagate all unmatched definitions from nested option sets clan-pytest-with-core> E 932| mapAttrs (n: v: v.unmatchedDefns) resultsByName clan-pytest-with-core> E | ^ clan-pytest-with-core> E 933| # Plus the definitions for the current prefix that don't have a matching option clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:876:15: clan-pytest-with-core> E 875| resultsByName = mapAttrs ( clan-pytest-with-core> E 876| name: decls: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 877| # We're descending into attribute ‘name’. 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:888:9: clan-pytest-with-core> E 887| in clan-pytest-with-core> E 888| if length optionDecls == length decls then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 889| let clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'length' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:888:12: clan-pytest-with-core> E 887| in clan-pytest-with-core> E 888| if length optionDecls == length decls then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 889| let clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'filter' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:882:25: clan-pytest-with-core> E 881| defns' = rawDefinitionsByName.${name} or [ ]; clan-pytest-with-core> E 882| optionDecls = filter ( clan-pytest-with-core> E | ^ clan-pytest-with-core> E 883| m: clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:883:13: clan-pytest-with-core> E 882| optionDecls = filter ( clan-pytest-with-core> E 883| m: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 884| m.options ? _type clan-pytest-with-core> E clan-pytest-with-core> E … in the left operand of the AND (&&) operator clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:885:13: clan-pytest-with-core> E 884| m.options ? _type clan-pytest-with-core> E 885| && (m.options._type == "option" || throwDeclarationTypeError loc m.options._type m._file) clan-pytest-with-core> E | ^ clan-pytest-with-core> E 886| ) decls; clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'options' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:807:15: clan-pytest-with-core> E 806| pos = unsafeGetAttrPos n subtree; clan-pytest-with-core> E 807| options = option; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 808| }) subtree clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:289:73: clan-pytest-with-core> E 288| len = length attrPath; clan-pytest-with-core> E 289| atDepth = n: if n == len then value else { ${elemAt attrPath n} = atDepth (n + 1); }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 290| in clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'atDepth' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:289:17: clan-pytest-with-core> E 288| len = length attrPath; clan-pytest-with-core> E 289| atDepth = n: if n == len then value else { ${elemAt attrPath n} = atDepth (n + 1); }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 290| in clan-pytest-with-core> E clan-pytest-with-core> E … in the right operand of the update (//) operator clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:2047:9: clan-pytest-with-core> E 2046| } clan-pytest-with-core> E 2047| // optionalAttrs (toType != null) { clan-pytest-with-core> E | ^ clan-pytest-with-core> E 2048| type = toType; clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:2047:12: clan-pytest-with-core> E 2046| } clan-pytest-with-core> E 2047| // optionalAttrs (toType != null) { clan-pytest-with-core> E | ^ clan-pytest-with-core> E 2048| type = toType; clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'optionalAttrs' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:1492:25: clan-pytest-with-core> E 1491| */ clan-pytest-with-core> E 1492| optionalAttrs = cond: as: if cond then as else { }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1493| 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:1492:29: clan-pytest-with-core> E 1491| */ clan-pytest-with-core> E 1492| optionalAttrs = cond: as: if cond then as else { }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1493| clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:2036:17: clan-pytest-with-core> E 2035| let clan-pytest-with-core> E 2036| opt = attrByPath to { } options; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 2037| in clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'attrByPath' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:89:24: clan-pytest-with-core> E 88| attrByPath = clan-pytest-with-core> E 89| attrPath: default: set: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 90| let clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:106:5: clan-pytest-with-core> E 105| in clan-pytest-with-core> E 106| attrByPath' 0 set; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 107| clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'attrByPath'' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:93:12: clan-pytest-with-core> E 92| attrByPath' = clan-pytest-with-core> E 93| n: s: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 94| ( clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:102:35: clan-pytest-with-core> E 101| in clan-pytest-with-core> E 102| if s ? ${attr} then attrByPath' (n + 1) s.${attr} else default clan-pytest-with-core> E | ^ clan-pytest-with-core> E 103| ) clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'attrByPath'' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:93:12: clan-pytest-with-core> E 92| attrByPath' = clan-pytest-with-core> E 93| n: s: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 94| ( clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:102:35: clan-pytest-with-core> E 101| in clan-pytest-with-core> E 102| if s ? ${attr} then attrByPath' (n + 1) s.${attr} else default clan-pytest-with-core> E | ^ clan-pytest-with-core> E 103| ) clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'attrByPath'' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:93:12: clan-pytest-with-core> E 92| attrByPath' = clan-pytest-with-core> E 93| n: s: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 94| ( clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:102:35: clan-pytest-with-core> E 101| in clan-pytest-with-core> E 102| if s ? ${attr} then attrByPath' (n + 1) s.${attr} else default clan-pytest-with-core> E | ^ clan-pytest-with-core> E 103| ) clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'attrByPath'' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:93:12: clan-pytest-with-core> E 92| attrByPath' = clan-pytest-with-core> E 93| n: s: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 94| ( clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:102:55: clan-pytest-with-core> E 101| in clan-pytest-with-core> E 102| if s ? ${attr} then attrByPath' (n + 1) s.${attr} else default clan-pytest-with-core> E | ^ clan-pytest-with-core> E 103| ) clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:927:37: clan-pytest-with-core> E 926| clan-pytest-with-core> E 927| matchedOptions = mapAttrs (n: v: v.matchedOptions) resultsByName; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 928| clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'matchedOptions' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:893:13: clan-pytest-with-core> E 892| { clan-pytest-with-core> E 893| matchedOptions = evalOptionValue loc opt defns'; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 894| unmatchedDefns = [ ]; clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:893:30: clan-pytest-with-core> E 892| { clan-pytest-with-core> E 893| matchedOptions = evalOptionValue loc opt defns'; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 894| unmatchedDefns = [ ]; clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'evalOptionValue' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1103:15: clan-pytest-with-core> E 1102| evalOptionValue = clan-pytest-with-core> E 1103| loc: opt: defs: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1104| let clan-pytest-with-core> E clan-pytest-with-core> E … in the left operand of the update (//) operator clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1148:5: clan-pytest-with-core> E 1147| warnDeprecation opt clan-pytest-with-core> E 1148| // { clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1149| value = addErrorContext "while evaluating the option `${showOption loc}':" value; 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1141:9: clan-pytest-with-core> E 1140| warnDeprecation = clan-pytest-with-core> E 1141| if (opt.type.deprecationMessage != null) then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1142| warn "The type `types.${opt.type.name}' of option `${showOption loc}' defined in ${showFiles opt.declarations} is deprecated. ${opt.type.deprecationMessage}" clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:890:19: clan-pytest-with-core> E 889| let clan-pytest-with-core> E 890| opt = fixupOptionType loc (mergeOptionDecls loc decls); clan-pytest-with-core> E | ^ clan-pytest-with-core> E 891| in clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'fixupOptionType' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1473:10: clan-pytest-with-core> E 1472| fixupOptionType = clan-pytest-with-core> E 1473| loc: opt: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1474| if opt.type.getSubModules or null == null then 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1474:5: clan-pytest-with-core> E 1473| loc: opt: clan-pytest-with-core> E 1474| if opt.type.getSubModules or null == null then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1475| opt // { type = opt.type or types.unspecified; } clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'type.getSubModules' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/nixos/modules/services/hardware/bluetooth.nix:72:9: clan-pytest-with-core> E 71| settings = mkOption { clan-pytest-with-core> E 72| type = cfgFmt.type; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 73| default = { }; clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/nixos/modules/services/hardware/bluetooth.nix:26:12: clan-pytest-with-core> E 25| clan-pytest-with-core> E 26| cfgFmt = pkgs.formats.ini { }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 27| clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:727:15: clan-pytest-with-core> E 726| extraArgs = mapAttrs ( clan-pytest-with-core> E 727| name: _: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 728| addErrorContext (context name) ( clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the module argument `pkgs' in "/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/nixos/modules/services/hardware/bluetooth.nix": clan-pytest-with-core> E clan-pytest-with-core> E … noting that argument `pkgs` is not externally provided, so querying `_module.args` instead, requiring `config` clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:731:13: clan-pytest-with-core> E 730| "noting that argument `${name}` is not externally provided, so querying `_module.args` instead, requiring `config`" clan-pytest-with-core> E 731| config._module.args.${name} clan-pytest-with-core> E | ^ clan-pytest-with-core> E 732| ) clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/types.nix:1029:18: clan-pytest-with-core> E 1028| value = mapAttrs ( clan-pytest-with-core> E 1029| n: v: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1030| if lazy then clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'optionalValue.value' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1312:5: clan-pytest-with-core> E 1311| clan-pytest-with-core> E 1312| optionalValue = if isDefined then { value = mergedValue; } else { }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1313| }; 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1312:21: clan-pytest-with-core> E 1311| clan-pytest-with-core> E 1312| optionalValue = if isDefined then { value = mergedValue; } else { }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1313| }; clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'values' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1240:11: clan-pytest-with-core> E 1239| { clan-pytest-with-core> E 1240| values = defsSorted; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1241| inherit (defsFiltered) highestPrio; 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1211:11: clan-pytest-with-core> E 1210| # Avoid sorting if we don't have to. clan-pytest-with-core> E 1211| if any (def: def.value._type or "" == "order") defsFiltered.values then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1212| sortProperties defsFiltered.values clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'any' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1211:14: clan-pytest-with-core> E 1210| # Avoid sorting if we don't have to. clan-pytest-with-core> E 1211| if any (def: def.value._type or "" == "order") defsFiltered.values then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1212| sortProperties defsFiltered.values clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1211:19: clan-pytest-with-core> E 1210| # Avoid sorting if we don't have to. clan-pytest-with-core> E 1211| if any (def: def.value._type or "" == "order") defsFiltered.values then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1212| sortProperties defsFiltered.values clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'value._type' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1422:67: clan-pytest-with-core> E 1421| strip = clan-pytest-with-core> E 1422| def: if def.value._type or "" == "override" then def // { value = def.value.content; } else def; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1423| in clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'value.content' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1566:22: clan-pytest-with-core> E 1565| _type = "override"; clan-pytest-with-core> E 1566| inherit priority content; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1567| }; 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/nixos/modules/misc/nixpkgs.nix:107:15: clan-pytest-with-core> E 106| clan-pytest-with-core> E 107| finalPkgs = if opt.pkgs.isDefined then cfg.pkgs.appendOverlays cfg.overlays else defaultPkgs; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 108| clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'pkgs.isDefined' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1154:21: clan-pytest-with-core> E 1153| definitionsWithLocations = res.defsFinal; clan-pytest-with-core> E 1154| inherit (res) isDefined; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1155| inherit (res.checkedAndMerged) valueMeta; clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'isDefined' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1310:5: clan-pytest-with-core> E 1309| clan-pytest-with-core> E 1310| isDefined = defsFinal != [ ]; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1311| clan-pytest-with-core> E clan-pytest-with-core> E (6 duplicate frames omitted) clan-pytest-with-core> E clan-pytest-with-core> E error: attribute 'system' missing clan-pytest-with-core> E at /build/store/nix/store/y3h139bhv4373m1hab367ma4p5i95i2f-source/modules/clan/module.nix:164:24: clan-pytest-with-core> E 163| (lib.modules.importApply ../../nixosModules/machineModules/overridePkgs.nix { clan-pytest-with-core> E 164| pkgs = nixpkgsMatrix.${config.inventory.machines.${name}.nixpkgs}.system.${system}.pkgs; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 165| }) clan-pytest-with-core> E Did you mean systems? 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 0x7fffe62fcd50> clan-pytest-with-core> flake_with_sops = 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_fails_when_files_are_left_from_other_backend( clan-pytest-with-core> monkeypatch: pytest.MonkeyPatch, clan-pytest-with-core> flake_with_sops: ClanFlake, clan-pytest-with-core> ) -> None: clan-pytest-with-core> flake = flake_with_sops clan-pytest-with-core> clan-pytest-with-core> config = flake.machines["my_machine"] = create_test_machine_config() clan-pytest-with-core> my_secret_generator = config["clan"]["core"]["vars"]["generators"][ clan-pytest-with-core> "my_secret_generator" clan-pytest-with-core> ] clan-pytest-with-core> my_secret_generator["files"]["my_secret"]["secret"] = True clan-pytest-with-core> my_secret_generator["script"] = 'echo hello > "$out"/my_secret' clan-pytest-with-core> my_value_generator = config["clan"]["core"]["vars"]["generators"][ clan-pytest-with-core> "my_value_generator" clan-pytest-with-core> ] clan-pytest-with-core> my_value_generator["files"]["my_value"]["secret"] = False clan-pytest-with-core> my_value_generator["script"] = 'echo hello > "$out"/my_value' clan-pytest-with-core> flake.refresh() clan-pytest-with-core> monkeypatch.chdir(flake.path) clan-pytest-with-core> for generator in ["my_secret_generator", "my_value_generator"]: clan-pytest-with-core> > run_generators( clan-pytest-with-core> machines=[Machine(name="my_machine", flake=Flake(str(flake.path)))], clan-pytest-with-core> generators=[generator], clan-pytest-with-core> ) clan-pytest-with-core> clan-pytest-with-core> /build/src/clan_cli/tests/test_vars_errors.py:158: clan-pytest-with-core> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ clan-pytest-with-core> /build/src/clan_lib/vars/generate.py:306: in run_generators clan-pytest-with-core> all_generators = get_generators(machines, full_closure=True) clan-pytest-with-core> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ clan-pytest-with-core> /build/src/clan_lib/vars/generate.py:146: in get_generators clan-pytest-with-core> flake.precache(get_generators_precache_selectors(list(all_machines))) clan-pytest-with-core> /build/src/clan_lib/flake/flake.py:1151: in precache clan-pytest-with-core> self.get_from_nix(not_fetched_selectors) clan-pytest-with-core> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ clan-pytest-with-core> clan-pytest-with-core> self = Flake(identifier='/build/pytest-21v695hn/flake', hash='sha256-+newB/BZ1hSoK2+BjKzgg1XJRW5WxBh5xAU3KnaMp28=', 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.?secrets.?age.?plugins', 'clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.gener...ngs.publicModule', 'clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.settings.secretModule', ...] 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 while executing:$ clan select 'clanInternals.?secrets.?age.?plugins' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.generators.*.{share,dependencies,prompts,validationHash}' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.generators.*.files.*.{secret,deploy,owner,group,mode,neededFor}' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.?sops.?defaultGroups' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.settings.publicModule' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.settings.secretModule' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.?sops.?secretUploadDirectory' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.?password-store.?passCommand' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.?password-store.?secretLocation' clan-pytest-with-core> E $ clan select 'clanInternals.vars.settings.?recipients' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.?age.?secretLocation' clan-pytest-with-core> E Reason: attribute 'system' missing clan-pytest-with-core> E at /build/store/nix/store/y3h139bhv4373m1hab367ma4p5i95i2f-source/modules/clan/module.nix:164:24: clan-pytest-with-core> E 163| (lib.modules.importApply ../../nixosModules/machineModules/overridePkgs.nix { clan-pytest-with-core> E 164| pkgs = nixpkgsMatrix.${config.inventory.machines.${name}.nixpkgs}.system.${system}.pkgs; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 165| }) clan-pytest-with-core> E Did you mean systems?. 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 setup ----------------------------- clan-pytest-with-core> !! $HOME does not point to a temp directory!! HOME=/build/pytest-21v695hn clan-pytest-with-core> [localhost] $ clan vars keygen --flake /build/pytest-21v695hn/flake --user admin --no-interactive clan-pytest-with-core> Caller: /build/src/clan_cli/tests/age_keys.py:31::init clan-pytest-with-core> clan-pytest-with-core> Prefetching flake /build/pytest-21v695hn/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/febbcab65441be6ccc547560fd0155faadebbbb7 clan-pytest-with-core> (cached) $ clan select clanInternals.inventoryClass.relativeDirectory 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> git \ clan-pytest-with-core> -C /build/pytest-21v695hn/flake \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-21v695hn/flake/sops/users/admin 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/admin to git clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-21v695hn/flake \ clan-pytest-with-core> diff \ clan-pytest-with-core> --cached --exit-code \ clan-pytest-with-core> -- /build/pytest-21v695hn/flake/sops/users/admin 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-21v695hn/flake \ clan-pytest-with-core> commit \ clan-pytest-with-core> -m 'secrets: add user admin' \ clan-pytest-with-core> --no-verify /build/pytest-21v695hn/flake/sops/users/admin 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/admin to git 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/pytest-21v695hn clan-pytest-with-core> DEBUG clan_cli.tests.helpers.cli:__init__.py:143 $ clan vars keygen --flake /build/pytest-21v695hn/flake --user admin --no-interactive clan-pytest-with-core> Caller: /build/src/clan_cli/tests/age_keys.py:31::init clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:927 Prefetching flake /build/pytest-21v695hn/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/febbcab65441be6ccc547560fd0155faadebbbb7 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.cmd:__init__.py:143 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> DEBUG clan_lib.cmd:__init__.py:143 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> DEBUG clan_cli.secrets.sops:sops.py:99 Found age public key from a private key in the environment (SOPS_AGE_KEY): age1dhwqzkah943xzc34tc3dlmfayyevcmdmxzjezdgdy33euxwf59vsp3vk3c clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:143 git \ clan-pytest-with-core> -C /build/pytest-21v695hn/flake \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-21v695hn/flake/sops/users/admin 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> DEBUG clan_lib.cmd:__init__.py:143 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> DEBUG clan_lib.git:__init__.py:98 Adding sops/users/admin to git clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:143 git \ clan-pytest-with-core> -C /build/pytest-21v695hn/flake \ clan-pytest-with-core> diff \ clan-pytest-with-core> --cached --exit-code \ clan-pytest-with-core> -- /build/pytest-21v695hn/flake/sops/users/admin 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> DEBUG clan_lib.cmd:__init__.py:143 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> DEBUG clan_lib.cmd:__init__.py:143 git \ clan-pytest-with-core> -C /build/pytest-21v695hn/flake \ clan-pytest-with-core> commit \ clan-pytest-with-core> -m 'secrets: add user admin' \ clan-pytest-with-core> --no-verify /build/pytest-21v695hn/flake/sops/users/admin 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> DEBUG clan_lib.cmd:__init__.py:143 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> INFO clan_lib.git:__init__.py:141 Committed sops/users/admin to git clan-pytest-with-core> ----------------------------- Captured stdout call ----------------------------- clan-pytest-with-core> [main 7fb177b] flake: update by flake generator clan-pytest-with-core> 2 files changed, 42 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> ----------------------------- Captured stderr call ----------------------------- clan-pytest-with-core> Prefetching flake /build/pytest-21v695hn/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/d2c0050d97832c3ac5193485b93705d00938c15e clan-pytest-with-core> (cached) $ clan select clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> Prefetching flake /build/pytest-21v695hn/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.inventoryClass.relativeDirectory clan-pytest-with-core> Cache miss for clanInternals.inventoryClass.inventorySerialization.{instances,machines,meta} clan-pytest-with-core> Loading flake cache from file /build/clan-flake-cache/flakes-v2/1bdd513ae9bdee4de89b6e8439756d2d84dcd687 clan-pytest-with-core> Precaching selectors: clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.machines clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.instances clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.meta clan-pytest-with-core> - (not cached) clanInternals.?secrets.?age.?plugins clan-pytest-with-core> - (cached) clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.generators.*.{share,dependencies,prompts,validationHash} clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.generators.*.files.*.{secret,deploy,owner,group,mode,neededFor} clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.?sops.?defaultGroups clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.settings.publicModule clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.settings.secretModule clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.?sops.?secretUploadDirectory clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.?password-store.?passCommand clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.?password-store.?secretLocation clan-pytest-with-core> - (not cached) clanInternals.vars.settings.?recipients clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.?age.?secretLocation clan-pytest-with-core> ------------------------------ Captured log call ------------------------------- clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:927 Prefetching flake /build/pytest-21v695hn/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/d2c0050d97832c3ac5193485b93705d00938c15e 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-21v695hn/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.inventoryClass.relativeDirectory clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1174 Cache miss for clanInternals.inventoryClass.inventorySerialization.{instances,machines,meta} clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:789 Loading flake cache from file /build/clan-flake-cache/flakes-v2/1bdd513ae9bdee4de89b6e8439756d2d84dcd687 clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1144 Precaching selectors: clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.machines clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.instances clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.meta clan-pytest-with-core> - (not cached) clanInternals.?secrets.?age.?plugins clan-pytest-with-core> - (cached) clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.generators.*.{share,dependencies,prompts,validationHash} clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.generators.*.files.*.{secret,deploy,owner,group,mode,neededFor} clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.?sops.?defaultGroups clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.settings.publicModule clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.settings.secretModule clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.?sops.?secretUploadDirectory clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.?password-store.?passCommand clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.?password-store.?secretLocation clan-pytest-with-core> - (not cached) clanInternals.vars.settings.?recipients clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my_machine}.config.clan.core.vars.?age.?secretLocation clan-pytest-with-core> _________________ test_password_store_upload_directory[custom] _________________ clan-pytest-with-core> [gw9] linux -- Python 3.14.7 /nix/store/3n4qphl9s728sz8frmpqqrv9b1m87g68-python3-3.14.7/bin/python clan-pytest-with-core> clan-pytest-with-core> self = Flake(identifier='/build/pytest-egq83i9c/flake', hash='sha256-M57VgK1sqNit3RsYpWRw9c65TaZOiF36kgzjuCml80k=', 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.machines.x86_64-linux."test_machine".config.clan.core.vars.settings.secretModule'] 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-egq83i9c/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/095p2i6vsg6bi853xvlb5ixm184adbql-source?narHash=sha256-M57VgK1sqNit3RsYpWRw9c65TaZOiF36kgzjuCml80k="; 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": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "str", "value": "test_machine"}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "secretModule"}]'"'"''"'"') 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": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "str", "value": "test_machine"}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "secretModule"}]'') 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": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "str", "value": "test_machine"}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "secretModule"}]'') 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": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "str", "value": "test_machine"}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "secretModule"}]'') 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 … from call site clan-pytest-with-core> E at /build/store/nix/store/cba1x9mxnwr8b36cw41bya7g6d5v1p7d-source/select.nix:312:15: clan-pytest-with-core> E 311| else if selector.type == "str" then clan-pytest-with-core> E 312| recurse selectors (idx + 1) (builtins.getAttr selector.value obj) clan-pytest-with-core> E | ^ clan-pytest-with-core> E 313| else if selector.type == "set" then clan-pytest-with-core> E clan-pytest-with-core> E (9 duplicate frames omitted) 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 'getAttr' builtin clan-pytest-with-core> E at /build/store/nix/store/cba1x9mxnwr8b36cw41bya7g6d5v1p7d-source/select.nix:312:44: clan-pytest-with-core> E 311| else if selector.type == "str" then clan-pytest-with-core> E 312| recurse selectors (idx + 1) (builtins.getAttr selector.value obj) clan-pytest-with-core> E | ^ clan-pytest-with-core> E 313| else if selector.type == "set" then clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'seq' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:401:18: clan-pytest-with-core> E 400| options = checked options; clan-pytest-with-core> E 401| config = checked (removeAttrs config [ "_module" ]); clan-pytest-with-core> E | ^ clan-pytest-with-core> E 402| _module = checked (config._module); 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:304:9: clan-pytest-with-core> E 303| checkUnmatched = clan-pytest-with-core> E 304| if config._module.check && config._module.freeformType == null && merged.unmatchedDefns != [ ] then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 305| let clan-pytest-with-core> E clan-pytest-with-core> E … in the right operand of the AND (&&) operator clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:304:72: clan-pytest-with-core> E 303| checkUnmatched = clan-pytest-with-core> E 304| if config._module.check && config._module.freeformType == null && merged.unmatchedDefns != [ ] then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 305| let clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'unmatchedDefns' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:940:7: clan-pytest-with-core> E 939| # Transforms unmatchedDefnsByName into a list of definitions clan-pytest-with-core> E 940| unmatchedDefns = clan-pytest-with-core> E | ^ clan-pytest-with-core> E 941| if configs == [ ] then clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'concatLists' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:946:11: clan-pytest-with-core> E 945| else clan-pytest-with-core> E 946| concatLists ( clan-pytest-with-core> E | ^ clan-pytest-with-core> E 947| mapAttrsToList ( clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:948:21: clan-pytest-with-core> E 947| mapAttrsToList ( clan-pytest-with-core> E 948| name: defs: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 949| map ( clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'map' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:949:15: clan-pytest-with-core> E 948| name: defs: clan-pytest-with-core> E 949| map ( clan-pytest-with-core> E | ^ clan-pytest-with-core> E 950| def: clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:932:22: clan-pytest-with-core> E 931| # Propagate all unmatched definitions from nested option sets clan-pytest-with-core> E 932| mapAttrs (n: v: v.unmatchedDefns) resultsByName clan-pytest-with-core> E | ^ clan-pytest-with-core> E 933| # Plus the definitions for the current prefix that don't have a matching option clan-pytest-with-core> E clan-pytest-with-core> E (10 duplicate frames omitted) clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:932:25: clan-pytest-with-core> E 931| # Propagate all unmatched definitions from nested option sets clan-pytest-with-core> E 932| mapAttrs (n: v: v.unmatchedDefns) resultsByName clan-pytest-with-core> E | ^ clan-pytest-with-core> E 933| # Plus the definitions for the current prefix that don't have a matching option clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:876:15: clan-pytest-with-core> E 875| resultsByName = mapAttrs ( clan-pytest-with-core> E 876| name: decls: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 877| # We're descending into attribute ‘name’. 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:888:9: clan-pytest-with-core> E 887| in clan-pytest-with-core> E 888| if length optionDecls == length decls then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 889| let clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'length' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:888:12: clan-pytest-with-core> E 887| in clan-pytest-with-core> E 888| if length optionDecls == length decls then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 889| let clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'filter' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:882:25: clan-pytest-with-core> E 881| defns' = rawDefinitionsByName.${name} or [ ]; clan-pytest-with-core> E 882| optionDecls = filter ( clan-pytest-with-core> E | ^ clan-pytest-with-core> E 883| m: clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:883:13: clan-pytest-with-core> E 882| optionDecls = filter ( clan-pytest-with-core> E 883| m: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 884| m.options ? _type clan-pytest-with-core> E clan-pytest-with-core> E … in the left operand of the AND (&&) operator clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:885:13: clan-pytest-with-core> E 884| m.options ? _type clan-pytest-with-core> E 885| && (m.options._type == "option" || throwDeclarationTypeError loc m.options._type m._file) clan-pytest-with-core> E | ^ clan-pytest-with-core> E 886| ) decls; clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'options' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:807:15: clan-pytest-with-core> E 806| pos = unsafeGetAttrPos n subtree; clan-pytest-with-core> E 807| options = option; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 808| }) subtree clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:289:73: clan-pytest-with-core> E 288| len = length attrPath; clan-pytest-with-core> E 289| atDepth = n: if n == len then value else { ${elemAt attrPath n} = atDepth (n + 1); }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 290| in clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'atDepth' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:289:17: clan-pytest-with-core> E 288| len = length attrPath; clan-pytest-with-core> E 289| atDepth = n: if n == len then value else { ${elemAt attrPath n} = atDepth (n + 1); }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 290| in clan-pytest-with-core> E clan-pytest-with-core> E … in the right operand of the update (//) operator clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:2047:9: clan-pytest-with-core> E 2046| } clan-pytest-with-core> E 2047| // optionalAttrs (toType != null) { clan-pytest-with-core> E | ^ clan-pytest-with-core> E 2048| type = toType; clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:2047:12: clan-pytest-with-core> E 2046| } clan-pytest-with-core> E 2047| // optionalAttrs (toType != null) { clan-pytest-with-core> E | ^ clan-pytest-with-core> E 2048| type = toType; clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'optionalAttrs' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:1492:25: clan-pytest-with-core> E 1491| */ clan-pytest-with-core> E 1492| optionalAttrs = cond: as: if cond then as else { }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1493| 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:1492:29: clan-pytest-with-core> E 1491| */ clan-pytest-with-core> E 1492| optionalAttrs = cond: as: if cond then as else { }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1493| clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:2036:17: clan-pytest-with-core> E 2035| let clan-pytest-with-core> E 2036| opt = attrByPath to { } options; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 2037| in clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'attrByPath' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:89:24: clan-pytest-with-core> E 88| attrByPath = clan-pytest-with-core> E 89| attrPath: default: set: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 90| let clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:106:5: clan-pytest-with-core> E 105| in clan-pytest-with-core> E 106| attrByPath' 0 set; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 107| clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'attrByPath'' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:93:12: clan-pytest-with-core> E 92| attrByPath' = clan-pytest-with-core> E 93| n: s: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 94| ( clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:102:35: clan-pytest-with-core> E 101| in clan-pytest-with-core> E 102| if s ? ${attr} then attrByPath' (n + 1) s.${attr} else default clan-pytest-with-core> E | ^ clan-pytest-with-core> E 103| ) clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'attrByPath'' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:93:12: clan-pytest-with-core> E 92| attrByPath' = clan-pytest-with-core> E 93| n: s: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 94| ( clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:102:35: clan-pytest-with-core> E 101| in clan-pytest-with-core> E 102| if s ? ${attr} then attrByPath' (n + 1) s.${attr} else default clan-pytest-with-core> E | ^ clan-pytest-with-core> E 103| ) clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'attrByPath'' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:93:12: clan-pytest-with-core> E 92| attrByPath' = clan-pytest-with-core> E 93| n: s: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 94| ( clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:102:35: clan-pytest-with-core> E 101| in clan-pytest-with-core> E 102| if s ? ${attr} then attrByPath' (n + 1) s.${attr} else default clan-pytest-with-core> E | ^ clan-pytest-with-core> E 103| ) clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'attrByPath'' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:93:12: clan-pytest-with-core> E 92| attrByPath' = clan-pytest-with-core> E 93| n: s: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 94| ( clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:102:55: clan-pytest-with-core> E 101| in clan-pytest-with-core> E 102| if s ? ${attr} then attrByPath' (n + 1) s.${attr} else default clan-pytest-with-core> E | ^ clan-pytest-with-core> E 103| ) clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:927:37: clan-pytest-with-core> E 926| clan-pytest-with-core> E 927| matchedOptions = mapAttrs (n: v: v.matchedOptions) resultsByName; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 928| clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'matchedOptions' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:893:13: clan-pytest-with-core> E 892| { clan-pytest-with-core> E 893| matchedOptions = evalOptionValue loc opt defns'; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 894| unmatchedDefns = [ ]; clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:893:30: clan-pytest-with-core> E 892| { clan-pytest-with-core> E 893| matchedOptions = evalOptionValue loc opt defns'; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 894| unmatchedDefns = [ ]; clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'evalOptionValue' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1103:15: clan-pytest-with-core> E 1102| evalOptionValue = clan-pytest-with-core> E 1103| loc: opt: defs: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1104| let clan-pytest-with-core> E clan-pytest-with-core> E … in the left operand of the update (//) operator clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1148:5: clan-pytest-with-core> E 1147| warnDeprecation opt clan-pytest-with-core> E 1148| // { clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1149| value = addErrorContext "while evaluating the option `${showOption loc}':" value; 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1141:9: clan-pytest-with-core> E 1140| warnDeprecation = clan-pytest-with-core> E 1141| if (opt.type.deprecationMessage != null) then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1142| warn "The type `types.${opt.type.name}' of option `${showOption loc}' defined in ${showFiles opt.declarations} is deprecated. ${opt.type.deprecationMessage}" clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:890:19: clan-pytest-with-core> E 889| let clan-pytest-with-core> E 890| opt = fixupOptionType loc (mergeOptionDecls loc decls); clan-pytest-with-core> E | ^ clan-pytest-with-core> E 891| in clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'fixupOptionType' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1473:10: clan-pytest-with-core> E 1472| fixupOptionType = clan-pytest-with-core> E 1473| loc: opt: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1474| if opt.type.getSubModules or null == null then 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1474:5: clan-pytest-with-core> E 1473| loc: opt: clan-pytest-with-core> E 1474| if opt.type.getSubModules or null == null then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1475| opt // { type = opt.type or types.unspecified; } clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'type.getSubModules' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/nixos/modules/services/hardware/bluetooth.nix:72:9: clan-pytest-with-core> E 71| settings = mkOption { clan-pytest-with-core> E 72| type = cfgFmt.type; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 73| default = { }; clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/nixos/modules/services/hardware/bluetooth.nix:26:12: clan-pytest-with-core> E 25| clan-pytest-with-core> E 26| cfgFmt = pkgs.formats.ini { }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 27| clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:727:15: clan-pytest-with-core> E 726| extraArgs = mapAttrs ( clan-pytest-with-core> E 727| name: _: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 728| addErrorContext (context name) ( clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the module argument `pkgs' in "/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/nixos/modules/services/hardware/bluetooth.nix": clan-pytest-with-core> E clan-pytest-with-core> E … noting that argument `pkgs` is not externally provided, so querying `_module.args` instead, requiring `config` clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:731:13: clan-pytest-with-core> E 730| "noting that argument `${name}` is not externally provided, so querying `_module.args` instead, requiring `config`" clan-pytest-with-core> E 731| config._module.args.${name} clan-pytest-with-core> E | ^ clan-pytest-with-core> E 732| ) clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/types.nix:1029:18: clan-pytest-with-core> E 1028| value = mapAttrs ( clan-pytest-with-core> E 1029| n: v: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1030| if lazy then clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'optionalValue.value' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1312:5: clan-pytest-with-core> E 1311| clan-pytest-with-core> E 1312| optionalValue = if isDefined then { value = mergedValue; } else { }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1313| }; 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1312:21: clan-pytest-with-core> E 1311| clan-pytest-with-core> E 1312| optionalValue = if isDefined then { value = mergedValue; } else { }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1313| }; clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'values' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1240:11: clan-pytest-with-core> E 1239| { clan-pytest-with-core> E 1240| values = defsSorted; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1241| inherit (defsFiltered) highestPrio; 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1211:11: clan-pytest-with-core> E 1210| # Avoid sorting if we don't have to. clan-pytest-with-core> E 1211| if any (def: def.value._type or "" == "order") defsFiltered.values then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1212| sortProperties defsFiltered.values clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'any' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1211:14: clan-pytest-with-core> E 1210| # Avoid sorting if we don't have to. clan-pytest-with-core> E 1211| if any (def: def.value._type or "" == "order") defsFiltered.values then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1212| sortProperties defsFiltered.values clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1211:19: clan-pytest-with-core> E 1210| # Avoid sorting if we don't have to. clan-pytest-with-core> E 1211| if any (def: def.value._type or "" == "order") defsFiltered.values then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1212| sortProperties defsFiltered.values clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'value._type' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1422:67: clan-pytest-with-core> E 1421| strip = clan-pytest-with-core> E 1422| def: if def.value._type or "" == "override" then def // { value = def.value.content; } else def; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1423| in clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'value.content' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1566:22: clan-pytest-with-core> E 1565| _type = "override"; clan-pytest-with-core> E 1566| inherit priority content; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1567| }; 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/nixos/modules/misc/nixpkgs.nix:107:15: clan-pytest-with-core> E 106| clan-pytest-with-core> E 107| finalPkgs = if opt.pkgs.isDefined then cfg.pkgs.appendOverlays cfg.overlays else defaultPkgs; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 108| clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'pkgs.isDefined' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1154:21: clan-pytest-with-core> E 1153| definitionsWithLocations = res.defsFinal; clan-pytest-with-core> E 1154| inherit (res) isDefined; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1155| inherit (res.checkedAndMerged) valueMeta; clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'isDefined' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1310:5: clan-pytest-with-core> E 1309| clan-pytest-with-core> E 1310| isDefined = defsFinal != [ ]; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1311| clan-pytest-with-core> E clan-pytest-with-core> E (6 duplicate frames omitted) clan-pytest-with-core> E clan-pytest-with-core> E error: attribute 'system' missing clan-pytest-with-core> E at /build/store/nix/store/y3h139bhv4373m1hab367ma4p5i95i2f-source/modules/clan/module.nix:164:24: clan-pytest-with-core> E 163| (lib.modules.importApply ../../nixosModules/machineModules/overridePkgs.nix { clan-pytest-with-core> E 164| pkgs = nixpkgsMatrix.${config.inventory.machines.${name}.nixpkgs}.system.${system}.pkgs; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 165| }) clan-pytest-with-core> E Did you mean systems? 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 0x7fffe58559a0> clan-pytest-with-core> flake = clan-pytest-with-core> secret_location = '/etc/pass-secrets', expected_path = '/etc/pass-secrets' 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.parametrize( clan-pytest-with-core> ("secret_location", "expected_path"), clan-pytest-with-core> [ clan-pytest-with-core> pytest.param(None, "/etc/secret-vars", id="default"), clan-pytest-with-core> pytest.param("/etc/pass-secrets", "/etc/pass-secrets", id="custom"), clan-pytest-with-core> ], clan-pytest-with-core> ) clan-pytest-with-core> def test_password_store_upload_directory( clan-pytest-with-core> monkeypatch: pytest.MonkeyPatch, clan-pytest-with-core> flake: ClanFlake, clan-pytest-with-core> secret_location: str | None, clan-pytest-with-core> expected_path: str, clan-pytest-with-core> ) -> None: clan-pytest-with-core> """Verify get_upload_directory returns configured secretLocation.""" clan-pytest-with-core> config = flake.machines["test_machine"] = create_test_machine_config() clan-pytest-with-core> config["clan"]["core"]["vars"]["settings"]["secretStore"] = "password-store" clan-pytest-with-core> if secret_location is not None: clan-pytest-with-core> config["clan"]["core"]["vars"]["password-store"]["secretLocation"] = ( clan-pytest-with-core> secret_location clan-pytest-with-core> ) clan-pytest-with-core> clan-pytest-with-core> flake.refresh() clan-pytest-with-core> monkeypatch.chdir(flake.path) clan-pytest-with-core> clan-pytest-with-core> machine = Machine(name="test_machine", flake=Flake(str(flake.path))) clan-pytest-with-core> > assert machine.secret_vars_store.get_upload_directory(machine.name) == expected_path clan-pytest-with-core> ^^^^^^^^^^^^^^^^^^^^^^^^^ clan-pytest-with-core> clan-pytest-with-core> /build/src/clan_cli/tests/test_install_secret_path.py:110: clan-pytest-with-core> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ clan-pytest-with-core> /nix/store/3n4qphl9s728sz8frmpqqrv9b1m87g68-python3-3.14.7/lib/python3.14/functools.py:1126: in __get__ clan-pytest-with-core> val = self.func(instance) clan-pytest-with-core> ^^^^^^^^^^^^^^^^^^^ clan-pytest-with-core> /build/src/clan_lib/machines/machines.py:95: in secret_vars_store clan-pytest-with-core> secret_module = self.flake.select( 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-egq83i9c/flake', hash='sha256-M57VgK1sqNit3RsYpWRw9c65TaZOiF36kgzjuCml80k=', 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.machines.x86_64-linux."test_machine".config.clan.core.vars.settings.secretModule'] 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.machines.x86_64-linux."test_machine".config.clan.core.vars.settings.secretModule' clan-pytest-with-core> E Reason: attribute 'system' missing clan-pytest-with-core> E at /build/store/nix/store/y3h139bhv4373m1hab367ma4p5i95i2f-source/modules/clan/module.nix:164:24: clan-pytest-with-core> E 163| (lib.modules.importApply ../../nixosModules/machineModules/overridePkgs.nix { clan-pytest-with-core> E 164| pkgs = nixpkgsMatrix.${config.inventory.machines.${name}.nixpkgs}.system.${system}.pkgs; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 165| }) clan-pytest-with-core> E Did you mean systems?. 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 setup ----------------------------- clan-pytest-with-core> !! $HOME does not point to a temp directory!! HOME=/build/pytest-egq83i9c 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/pytest-egq83i9c clan-pytest-with-core> ----------------------------- Captured stdout call ----------------------------- clan-pytest-with-core> [main c591235] flake: update by flake generator clan-pytest-with-core> 2 files changed, 30 insertions(+) clan-pytest-with-core> create mode 100644 machines/test_machine/configuration.json clan-pytest-with-core> create mode 100644 machines/test_machine/configuration.nix clan-pytest-with-core> ----------------------------- Captured stderr call ----------------------------- clan-pytest-with-core> Prefetching flake /build/pytest-egq83i9c/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/febbcab65441be6ccc547560fd0155faadebbbb7 clan-pytest-with-core> (cached) $ clan select clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> Prefetching flake /build/pytest-egq83i9c/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.machines.x86_64-linux."test_machine".config.clan.core.vars.settings.secretModule clan-pytest-with-core> ------------------------------ Captured log call ------------------------------- clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:927 Prefetching flake /build/pytest-egq83i9c/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/febbcab65441be6ccc547560fd0155faadebbbb7 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-egq83i9c/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.machines.x86_64-linux."test_machine".config.clan.core.vars.settings.secretModule clan-pytest-with-core> ____________________ test_sops_install_secret_path[default] ____________________ clan-pytest-with-core> [gw5] linux -- Python 3.14.7 /nix/store/3n4qphl9s728sz8frmpqqrv9b1m87g68-python3-3.14.7/bin/python clan-pytest-with-core> clan-pytest-with-core> self = Flake(identifier='/build/pytest-oaemf73n/flake', hash='sha256-h1mpnp3/ZjFGwOeEwUxoPutW8Af8NOuOInF77jTr7Ws=', 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.?secrets.?age.?plugins', 'clanInternals.machines.x86_64-linux.{test_machine}.config.clan.core.vars.gen...s.publicModule', 'clanInternals.machines.x86_64-linux.{test_machine}.config.clan.core.vars.settings.secretModule', ...] 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-oaemf73n/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/nidf3wfpvy3cy6i73jd79f8r36275aa8-source?narHash=sha256-h1mpnp3/ZjFGwOeEwUxoPutW8Af8NOuOInF77jTr7Ws="; 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": "maybe", "value": "secrets"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "plugins"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "test_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "share"}, {"type": "str", "value": "dependencies"}, {"type": "str", "value": "prompts"}, {"type": "str", "value": "validationHash"}]}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "test_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "str", "value": "files"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "secret"}, {"type": "str", "value": "deploy"}, {"type": "str", "value": "owner"}, {"type": "str", "value": "group"}, {"type": "str", "value": "mode"}, {"type": "str", "value": "neededFor"}]}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "test_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "defaultGroups"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "test_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "publicModule"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "test_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "secretModule"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "test_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "secretUploadDirectory"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "test_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "passCommand"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "test_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "secretLocation"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "maybe", "value": "recipients"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "test_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "secretLocation"}]'"'"''"'"') 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": "maybe", "value": "secrets"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "plugins"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "test_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "share"}, {"type": "str", "value": "dependencies"}, {"type": "str", "value": "prompts"}, {"type": "str", "value": "validationHash"}]}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "test_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "str", "value": "files"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "secret"}, {"type": "str", "value": "deploy"}, {"type": "str", "value": "owner"}, {"type": "str", "value": "group"}, {"type": "str", "value": "mode"}, {"type": "str", "value": "neededFor"}]}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "test_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "defaultGroups"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "test_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "publicModule"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "test_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "secretModule"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "test_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "secretUploadDirectory"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "test_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "passCommand"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "test_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "secretLocation"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "maybe", "value": "recipients"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "test_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "secretLocation"}]'') 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": "maybe", "value": "secrets"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "plugins"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "test_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "share"}, {"type": "str", "value": "dependencies"}, {"type": "str", "value": "prompts"}, {"type": "str", "value": "validationHash"}]}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "test_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "str", "value": "files"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "secret"}, {"type": "str", "value": "deploy"}, {"type": "str", "value": "owner"}, {"type": "str", "value": "group"}, {"type": "str", "value": "mode"}, {"type": "str", "value": "neededFor"}]}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "test_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "defaultGroups"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "test_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "publicModule"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "test_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "secretModule"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "test_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "secretUploadDirectory"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "test_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "passCommand"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "test_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "secretLocation"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "maybe", "value": "recipients"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "test_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "secretLocation"}]'') flake) clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating list element at index 1 clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating attribute 'test_machine' clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/cba1x9mxnwr8b36cw41bya7g6d5v1p7d-source/select.nix:325:37: clan-pytest-with-core> E 324| in clan-pytest-with-core> E 325| builtins.mapAttrs (_: v: recurse selectors (idx + 1) v) filteredAttrs clan-pytest-with-core> E | ^ clan-pytest-with-core> E 326| else if selector.type == "maybe" then 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:325:40: clan-pytest-with-core> E 324| in clan-pytest-with-core> E 325| builtins.mapAttrs (_: v: recurse selectors (idx + 1) v) filteredAttrs clan-pytest-with-core> E | ^ clan-pytest-with-core> E 326| else if selector.type == "maybe" then 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 … from call site clan-pytest-with-core> E at /build/store/nix/store/cba1x9mxnwr8b36cw41bya7g6d5v1p7d-source/select.nix:312:15: clan-pytest-with-core> E 311| else if selector.type == "str" then clan-pytest-with-core> E 312| recurse selectors (idx + 1) (builtins.getAttr selector.value obj) clan-pytest-with-core> E | ^ clan-pytest-with-core> E 313| else if selector.type == "set" then 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 'getAttr' builtin clan-pytest-with-core> E at /build/store/nix/store/cba1x9mxnwr8b36cw41bya7g6d5v1p7d-source/select.nix:312:44: clan-pytest-with-core> E 311| else if selector.type == "str" then clan-pytest-with-core> E 312| recurse selectors (idx + 1) (builtins.getAttr selector.value obj) clan-pytest-with-core> E | ^ clan-pytest-with-core> E 313| else if selector.type == "set" then clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'seq' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:401:18: clan-pytest-with-core> E 400| options = checked options; clan-pytest-with-core> E 401| config = checked (removeAttrs config [ "_module" ]); clan-pytest-with-core> E | ^ clan-pytest-with-core> E 402| _module = checked (config._module); 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:304:9: clan-pytest-with-core> E 303| checkUnmatched = clan-pytest-with-core> E 304| if config._module.check && config._module.freeformType == null && merged.unmatchedDefns != [ ] then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 305| let clan-pytest-with-core> E clan-pytest-with-core> E … in the right operand of the AND (&&) operator clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:304:72: clan-pytest-with-core> E 303| checkUnmatched = clan-pytest-with-core> E 304| if config._module.check && config._module.freeformType == null && merged.unmatchedDefns != [ ] then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 305| let clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'unmatchedDefns' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:940:7: clan-pytest-with-core> E 939| # Transforms unmatchedDefnsByName into a list of definitions clan-pytest-with-core> E 940| unmatchedDefns = clan-pytest-with-core> E | ^ clan-pytest-with-core> E 941| if configs == [ ] then clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'concatLists' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:946:11: clan-pytest-with-core> E 945| else clan-pytest-with-core> E 946| concatLists ( clan-pytest-with-core> E | ^ clan-pytest-with-core> E 947| mapAttrsToList ( clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:948:21: clan-pytest-with-core> E 947| mapAttrsToList ( clan-pytest-with-core> E 948| name: defs: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 949| map ( clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'map' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:949:15: clan-pytest-with-core> E 948| name: defs: clan-pytest-with-core> E 949| map ( clan-pytest-with-core> E | ^ clan-pytest-with-core> E 950| def: clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:932:22: clan-pytest-with-core> E 931| # Propagate all unmatched definitions from nested option sets clan-pytest-with-core> E 932| mapAttrs (n: v: v.unmatchedDefns) resultsByName clan-pytest-with-core> E | ^ clan-pytest-with-core> E 933| # Plus the definitions for the current prefix that don't have a matching option clan-pytest-with-core> E clan-pytest-with-core> E (10 duplicate frames omitted) clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:932:25: clan-pytest-with-core> E 931| # Propagate all unmatched definitions from nested option sets clan-pytest-with-core> E 932| mapAttrs (n: v: v.unmatchedDefns) resultsByName clan-pytest-with-core> E | ^ clan-pytest-with-core> E 933| # Plus the definitions for the current prefix that don't have a matching option clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:876:15: clan-pytest-with-core> E 875| resultsByName = mapAttrs ( clan-pytest-with-core> E 876| name: decls: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 877| # We're descending into attribute ‘name’. 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:888:9: clan-pytest-with-core> E 887| in clan-pytest-with-core> E 888| if length optionDecls == length decls then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 889| let clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'length' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:888:12: clan-pytest-with-core> E 887| in clan-pytest-with-core> E 888| if length optionDecls == length decls then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 889| let clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'filter' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:882:25: clan-pytest-with-core> E 881| defns' = rawDefinitionsByName.${name} or [ ]; clan-pytest-with-core> E 882| optionDecls = filter ( clan-pytest-with-core> E | ^ clan-pytest-with-core> E 883| m: clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:883:13: clan-pytest-with-core> E 882| optionDecls = filter ( clan-pytest-with-core> E 883| m: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 884| m.options ? _type clan-pytest-with-core> E clan-pytest-with-core> E … in the left operand of the AND (&&) operator clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:885:13: clan-pytest-with-core> E 884| m.options ? _type clan-pytest-with-core> E 885| && (m.options._type == "option" || throwDeclarationTypeError loc m.options._type m._file) clan-pytest-with-core> E | ^ clan-pytest-with-core> E 886| ) decls; clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'options' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:807:15: clan-pytest-with-core> E 806| pos = unsafeGetAttrPos n subtree; clan-pytest-with-core> E 807| options = option; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 808| }) subtree clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:289:73: clan-pytest-with-core> E 288| len = length attrPath; clan-pytest-with-core> E 289| atDepth = n: if n == len then value else { ${elemAt attrPath n} = atDepth (n + 1); }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 290| in clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'atDepth' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:289:17: clan-pytest-with-core> E 288| len = length attrPath; clan-pytest-with-core> E 289| atDepth = n: if n == len then value else { ${elemAt attrPath n} = atDepth (n + 1); }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 290| in clan-pytest-with-core> E clan-pytest-with-core> E … in the right operand of the update (//) operator clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:2047:9: clan-pytest-with-core> E 2046| } clan-pytest-with-core> E 2047| // optionalAttrs (toType != null) { clan-pytest-with-core> E | ^ clan-pytest-with-core> E 2048| type = toType; clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:2047:12: clan-pytest-with-core> E 2046| } clan-pytest-with-core> E 2047| // optionalAttrs (toType != null) { clan-pytest-with-core> E | ^ clan-pytest-with-core> E 2048| type = toType; clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'optionalAttrs' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:1492:25: clan-pytest-with-core> E 1491| */ clan-pytest-with-core> E 1492| optionalAttrs = cond: as: if cond then as else { }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1493| 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:1492:29: clan-pytest-with-core> E 1491| */ clan-pytest-with-core> E 1492| optionalAttrs = cond: as: if cond then as else { }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1493| clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:2036:17: clan-pytest-with-core> E 2035| let clan-pytest-with-core> E 2036| opt = attrByPath to { } options; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 2037| in clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'attrByPath' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:89:24: clan-pytest-with-core> E 88| attrByPath = clan-pytest-with-core> E 89| attrPath: default: set: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 90| let clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:106:5: clan-pytest-with-core> E 105| in clan-pytest-with-core> E 106| attrByPath' 0 set; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 107| clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'attrByPath'' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:93:12: clan-pytest-with-core> E 92| attrByPath' = clan-pytest-with-core> E 93| n: s: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 94| ( clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:102:35: clan-pytest-with-core> E 101| in clan-pytest-with-core> E 102| if s ? ${attr} then attrByPath' (n + 1) s.${attr} else default clan-pytest-with-core> E | ^ clan-pytest-with-core> E 103| ) clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'attrByPath'' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:93:12: clan-pytest-with-core> E 92| attrByPath' = clan-pytest-with-core> E 93| n: s: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 94| ( clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:102:35: clan-pytest-with-core> E 101| in clan-pytest-with-core> E 102| if s ? ${attr} then attrByPath' (n + 1) s.${attr} else default clan-pytest-with-core> E | ^ clan-pytest-with-core> E 103| ) clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'attrByPath'' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:93:12: clan-pytest-with-core> E 92| attrByPath' = clan-pytest-with-core> E 93| n: s: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 94| ( clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:102:35: clan-pytest-with-core> E 101| in clan-pytest-with-core> E 102| if s ? ${attr} then attrByPath' (n + 1) s.${attr} else default clan-pytest-with-core> E | ^ clan-pytest-with-core> E 103| ) clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'attrByPath'' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:93:12: clan-pytest-with-core> E 92| attrByPath' = clan-pytest-with-core> E 93| n: s: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 94| ( clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:102:55: clan-pytest-with-core> E 101| in clan-pytest-with-core> E 102| if s ? ${attr} then attrByPath' (n + 1) s.${attr} else default clan-pytest-with-core> E | ^ clan-pytest-with-core> E 103| ) clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:927:37: clan-pytest-with-core> E 926| clan-pytest-with-core> E 927| matchedOptions = mapAttrs (n: v: v.matchedOptions) resultsByName; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 928| clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'matchedOptions' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:893:13: clan-pytest-with-core> E 892| { clan-pytest-with-core> E 893| matchedOptions = evalOptionValue loc opt defns'; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 894| unmatchedDefns = [ ]; clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:893:30: clan-pytest-with-core> E 892| { clan-pytest-with-core> E 893| matchedOptions = evalOptionValue loc opt defns'; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 894| unmatchedDefns = [ ]; clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'evalOptionValue' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1103:15: clan-pytest-with-core> E 1102| evalOptionValue = clan-pytest-with-core> E 1103| loc: opt: defs: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1104| let clan-pytest-with-core> E clan-pytest-with-core> E … in the left operand of the update (//) operator clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1148:5: clan-pytest-with-core> E 1147| warnDeprecation opt clan-pytest-with-core> E 1148| // { clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1149| value = addErrorContext "while evaluating the option `${showOption loc}':" value; 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1141:9: clan-pytest-with-core> E 1140| warnDeprecation = clan-pytest-with-core> E 1141| if (opt.type.deprecationMessage != null) then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1142| warn "The type `types.${opt.type.name}' of option `${showOption loc}' defined in ${showFiles opt.declarations} is deprecated. ${opt.type.deprecationMessage}" clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:890:19: clan-pytest-with-core> E 889| let clan-pytest-with-core> E 890| opt = fixupOptionType loc (mergeOptionDecls loc decls); clan-pytest-with-core> E | ^ clan-pytest-with-core> E 891| in clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'fixupOptionType' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1473:10: clan-pytest-with-core> E 1472| fixupOptionType = clan-pytest-with-core> E 1473| loc: opt: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1474| if opt.type.getSubModules or null == null then 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1474:5: clan-pytest-with-core> E 1473| loc: opt: clan-pytest-with-core> E 1474| if opt.type.getSubModules or null == null then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1475| opt // { type = opt.type or types.unspecified; } clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'type.getSubModules' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/nixos/modules/services/hardware/bluetooth.nix:72:9: clan-pytest-with-core> E 71| settings = mkOption { clan-pytest-with-core> E 72| type = cfgFmt.type; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 73| default = { }; clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/nixos/modules/services/hardware/bluetooth.nix:26:12: clan-pytest-with-core> E 25| clan-pytest-with-core> E 26| cfgFmt = pkgs.formats.ini { }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 27| clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:727:15: clan-pytest-with-core> E 726| extraArgs = mapAttrs ( clan-pytest-with-core> E 727| name: _: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 728| addErrorContext (context name) ( clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the module argument `pkgs' in "/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/nixos/modules/services/hardware/bluetooth.nix": clan-pytest-with-core> E clan-pytest-with-core> E … noting that argument `pkgs` is not externally provided, so querying `_module.args` instead, requiring `config` clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:731:13: clan-pytest-with-core> E 730| "noting that argument `${name}` is not externally provided, so querying `_module.args` instead, requiring `config`" clan-pytest-with-core> E 731| config._module.args.${name} clan-pytest-with-core> E | ^ clan-pytest-with-core> E 732| ) clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/types.nix:1029:18: clan-pytest-with-core> E 1028| value = mapAttrs ( clan-pytest-with-core> E 1029| n: v: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1030| if lazy then clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'optionalValue.value' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1312:5: clan-pytest-with-core> E 1311| clan-pytest-with-core> E 1312| optionalValue = if isDefined then { value = mergedValue; } else { }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1313| }; 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1312:21: clan-pytest-with-core> E 1311| clan-pytest-with-core> E 1312| optionalValue = if isDefined then { value = mergedValue; } else { }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1313| }; clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'values' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1240:11: clan-pytest-with-core> E 1239| { clan-pytest-with-core> E 1240| values = defsSorted; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1241| inherit (defsFiltered) highestPrio; 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1211:11: clan-pytest-with-core> E 1210| # Avoid sorting if we don't have to. clan-pytest-with-core> E 1211| if any (def: def.value._type or "" == "order") defsFiltered.values then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1212| sortProperties defsFiltered.values clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'any' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1211:14: clan-pytest-with-core> E 1210| # Avoid sorting if we don't have to. clan-pytest-with-core> E 1211| if any (def: def.value._type or "" == "order") defsFiltered.values then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1212| sortProperties defsFiltered.values clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1211:19: clan-pytest-with-core> E 1210| # Avoid sorting if we don't have to. clan-pytest-with-core> E 1211| if any (def: def.value._type or "" == "order") defsFiltered.values then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1212| sortProperties defsFiltered.values clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'value._type' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1422:67: clan-pytest-with-core> E 1421| strip = clan-pytest-with-core> E 1422| def: if def.value._type or "" == "override" then def // { value = def.value.content; } else def; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1423| in clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'value.content' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1566:22: clan-pytest-with-core> E 1565| _type = "override"; clan-pytest-with-core> E 1566| inherit priority content; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1567| }; 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/nixos/modules/misc/nixpkgs.nix:107:15: clan-pytest-with-core> E 106| clan-pytest-with-core> E 107| finalPkgs = if opt.pkgs.isDefined then cfg.pkgs.appendOverlays cfg.overlays else defaultPkgs; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 108| clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'pkgs.isDefined' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1154:21: clan-pytest-with-core> E 1153| definitionsWithLocations = res.defsFinal; clan-pytest-with-core> E 1154| inherit (res) isDefined; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1155| inherit (res.checkedAndMerged) valueMeta; clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'isDefined' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1310:5: clan-pytest-with-core> E 1309| clan-pytest-with-core> E 1310| isDefined = defsFinal != [ ]; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1311| clan-pytest-with-core> E clan-pytest-with-core> E (6 duplicate frames omitted) clan-pytest-with-core> E clan-pytest-with-core> E error: attribute 'system' missing clan-pytest-with-core> E at /build/store/nix/store/y3h139bhv4373m1hab367ma4p5i95i2f-source/modules/clan/module.nix:164:24: clan-pytest-with-core> E 163| (lib.modules.importApply ../../nixosModules/machineModules/overridePkgs.nix { clan-pytest-with-core> E 164| pkgs = nixpkgsMatrix.${config.inventory.machines.${name}.nixpkgs}.system.${system}.pkgs; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 165| }) clan-pytest-with-core> E Did you mean systems? 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 0x7fffe5980b90> clan-pytest-with-core> flake_with_sops = clan-pytest-with-core> secret_upload_dir = None, expected_relative_path = 'var/lib/sops-nix' 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.parametrize( clan-pytest-with-core> ("secret_upload_dir", "expected_relative_path"), clan-pytest-with-core> [ clan-pytest-with-core> pytest.param(None, "var/lib/sops-nix", id="default"), clan-pytest-with-core> pytest.param("/custom/sops-secrets", "custom/sops-secrets", id="custom"), clan-pytest-with-core> ], clan-pytest-with-core> ) clan-pytest-with-core> def test_sops_install_secret_path( clan-pytest-with-core> monkeypatch: pytest.MonkeyPatch, clan-pytest-with-core> flake_with_sops: ClanFlake, clan-pytest-with-core> secret_upload_dir: str | None, clan-pytest-with-core> expected_relative_path: str, clan-pytest-with-core> ) -> None: clan-pytest-with-core> """Verify secrets are placed at configured secretUploadDirectory for nixos-anywhere.""" clan-pytest-with-core> config = flake_with_sops.machines["test_machine"] = create_test_machine_config() clan-pytest-with-core> if secret_upload_dir is not None: clan-pytest-with-core> config["clan"]["core"]["vars"]["sops"]["secretUploadDirectory"] = ( clan-pytest-with-core> secret_upload_dir clan-pytest-with-core> ) clan-pytest-with-core> generator = config["clan"]["core"]["vars"]["generators"]["my_generator"] clan-pytest-with-core> generator["files"]["my_secret"]["secret"] = True clan-pytest-with-core> generator["script"] = 'echo -n "test_secret_value" > "$out"/my_secret' clan-pytest-with-core> clan-pytest-with-core> flake_with_sops.refresh() clan-pytest-with-core> monkeypatch.chdir(flake_with_sops.path) clan-pytest-with-core> > cli.run(["vars", "generate", "--flake", str(flake_with_sops.path), "test_machine"]) clan-pytest-with-core> clan-pytest-with-core> /build/src/clan_cli/tests/test_install_secret_path.py:51: 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/vars/generate.py:33: in generate_command clan-pytest-with-core> run_generators( clan-pytest-with-core> /build/src/clan_lib/vars/generate.py:306: in run_generators clan-pytest-with-core> all_generators = get_generators(machines, full_closure=True) clan-pytest-with-core> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ clan-pytest-with-core> /build/src/clan_lib/vars/generate.py:146: in get_generators clan-pytest-with-core> flake.precache(get_generators_precache_selectors(list(all_machines))) clan-pytest-with-core> /build/src/clan_lib/flake/flake.py:1151: in precache clan-pytest-with-core> self.get_from_nix(not_fetched_selectors) clan-pytest-with-core> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ clan-pytest-with-core> clan-pytest-with-core> self = Flake(identifier='/build/pytest-oaemf73n/flake', hash='sha256-h1mpnp3/ZjFGwOeEwUxoPutW8Af8NOuOInF77jTr7Ws=', 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.?secrets.?age.?plugins', 'clanInternals.machines.x86_64-linux.{test_machine}.config.clan.core.vars.gen...s.publicModule', 'clanInternals.machines.x86_64-linux.{test_machine}.config.clan.core.vars.settings.secretModule', ...] 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 while executing:$ clan select 'clanInternals.?secrets.?age.?plugins' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{test_machine}.config.clan.core.vars.generators.*.{share,dependencies,prompts,validationHash}' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{test_machine}.config.clan.core.vars.generators.*.files.*.{secret,deploy,owner,group,mode,neededFor}' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{test_machine}.config.clan.core.?sops.?defaultGroups' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{test_machine}.config.clan.core.vars.settings.publicModule' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{test_machine}.config.clan.core.vars.settings.secretModule' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{test_machine}.config.clan.core.vars.?sops.?secretUploadDirectory' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{test_machine}.config.clan.core.vars.?password-store.?passCommand' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{test_machine}.config.clan.core.vars.?password-store.?secretLocation' clan-pytest-with-core> E $ clan select 'clanInternals.vars.settings.?recipients' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{test_machine}.config.clan.core.vars.?age.?secretLocation' clan-pytest-with-core> E Reason: attribute 'system' missing clan-pytest-with-core> E at /build/store/nix/store/y3h139bhv4373m1hab367ma4p5i95i2f-source/modules/clan/module.nix:164:24: clan-pytest-with-core> E 163| (lib.modules.importApply ../../nixosModules/machineModules/overridePkgs.nix { clan-pytest-with-core> E 164| pkgs = nixpkgsMatrix.${config.inventory.machines.${name}.nixpkgs}.system.${system}.pkgs; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 165| }) clan-pytest-with-core> E Did you mean systems?. 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 setup ----------------------------- clan-pytest-with-core> !! $HOME does not point to a temp directory!! HOME=/build/pytest-oaemf73n clan-pytest-with-core> [localhost] $ clan vars keygen --flake /build/pytest-oaemf73n/flake --user admin --no-interactive clan-pytest-with-core> Caller: /build/src/clan_cli/tests/age_keys.py:31::init clan-pytest-with-core> clan-pytest-with-core> Prefetching flake /build/pytest-oaemf73n/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/febbcab65441be6ccc547560fd0155faadebbbb7 clan-pytest-with-core> (cached) $ clan select clanInternals.inventoryClass.relativeDirectory 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> git \ clan-pytest-with-core> -C /build/pytest-oaemf73n/flake \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-oaemf73n/flake/sops/users/admin 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/admin to git clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-oaemf73n/flake \ clan-pytest-with-core> diff \ clan-pytest-with-core> --cached --exit-code \ clan-pytest-with-core> -- /build/pytest-oaemf73n/flake/sops/users/admin 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-oaemf73n/flake \ clan-pytest-with-core> commit \ clan-pytest-with-core> -m 'secrets: add user admin' \ clan-pytest-with-core> --no-verify /build/pytest-oaemf73n/flake/sops/users/admin 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/admin to git 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/pytest-oaemf73n clan-pytest-with-core> DEBUG clan_cli.tests.helpers.cli:__init__.py:143 $ clan vars keygen --flake /build/pytest-oaemf73n/flake --user admin --no-interactive clan-pytest-with-core> Caller: /build/src/clan_cli/tests/age_keys.py:31::init clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:927 Prefetching flake /build/pytest-oaemf73n/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/febbcab65441be6ccc547560fd0155faadebbbb7 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.cmd:__init__.py:143 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> DEBUG clan_lib.cmd:__init__.py:143 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> DEBUG clan_cli.secrets.sops:sops.py:99 Found age public key from a private key in the environment (SOPS_AGE_KEY): age1dhwqzkah943xzc34tc3dlmfayyevcmdmxzjezdgdy33euxwf59vsp3vk3c clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:143 git \ clan-pytest-with-core> -C /build/pytest-oaemf73n/flake \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-oaemf73n/flake/sops/users/admin 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> DEBUG clan_lib.cmd:__init__.py:143 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> DEBUG clan_lib.git:__init__.py:98 Adding sops/users/admin to git clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:143 git \ clan-pytest-with-core> -C /build/pytest-oaemf73n/flake \ clan-pytest-with-core> diff \ clan-pytest-with-core> --cached --exit-code \ clan-pytest-with-core> -- /build/pytest-oaemf73n/flake/sops/users/admin 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> DEBUG clan_lib.cmd:__init__.py:143 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> DEBUG clan_lib.cmd:__init__.py:143 git \ clan-pytest-with-core> -C /build/pytest-oaemf73n/flake \ clan-pytest-with-core> commit \ clan-pytest-with-core> -m 'secrets: add user admin' \ clan-pytest-with-core> --no-verify /build/pytest-oaemf73n/flake/sops/users/admin 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> DEBUG clan_lib.cmd:__init__.py:143 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> INFO clan_lib.git:__init__.py:141 Committed sops/users/admin to git clan-pytest-with-core> ----------------------------- Captured stdout call ----------------------------- clan-pytest-with-core> [main 8ba1ec7] flake: update by flake generator clan-pytest-with-core> 2 files changed, 34 insertions(+) clan-pytest-with-core> create mode 100644 machines/test_machine/configuration.json clan-pytest-with-core> create mode 100644 machines/test_machine/configuration.nix clan-pytest-with-core> ----------------------------- Captured stderr call ----------------------------- clan-pytest-with-core> Prefetching flake /build/pytest-oaemf73n/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/d2c0050d97832c3ac5193485b93705d00938c15e clan-pytest-with-core> (cached) $ clan select clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> [localhost] $ clan vars generate --flake /build/pytest-oaemf73n/flake test_machine clan-pytest-with-core> Caller: /build/src/clan_cli/tests/test_install_secret_path.py:51::test_sops_install_secret_path clan-pytest-with-core> clan-pytest-with-core> Prefetching flake /build/pytest-oaemf73n/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.cliChecks clan-pytest-with-core> Cache miss for clanInternals.inventoryClass.inventorySerialization.{instances,machines,meta} clan-pytest-with-core> Loading flake cache from file /build/clan-flake-cache/flakes-v2/402ed58e5d3b6c766c623025d004cb92197fc627 clan-pytest-with-core> Cache miss for clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> Loading flake cache from file /build/clan-flake-cache/flakes-v2/402ed58e5d3b6c766c623025d004cb92197fc627 clan-pytest-with-core> (cached) $ clan select 'clanInternals.inventoryClass.inventorySerialization.{instances,machines,meta}' clan-pytest-with-core> Precaching selectors: clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.machines clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.instances clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.meta clan-pytest-with-core> - (not cached) clanInternals.?secrets.?age.?plugins clan-pytest-with-core> - (cached) clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{test_machine}.config.clan.core.vars.generators.*.{share,dependencies,prompts,validationHash} clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{test_machine}.config.clan.core.vars.generators.*.files.*.{secret,deploy,owner,group,mode,neededFor} clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{test_machine}.config.clan.core.?sops.?defaultGroups clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{test_machine}.config.clan.core.vars.settings.publicModule clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{test_machine}.config.clan.core.vars.settings.secretModule clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{test_machine}.config.clan.core.vars.?sops.?secretUploadDirectory clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{test_machine}.config.clan.core.vars.?password-store.?passCommand clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{test_machine}.config.clan.core.vars.?password-store.?secretLocation clan-pytest-with-core> - (not cached) clanInternals.vars.settings.?recipients clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{test_machine}.config.clan.core.vars.?age.?secretLocation clan-pytest-with-core> ------------------------------ Captured log call ------------------------------- clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:927 Prefetching flake /build/pytest-oaemf73n/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/d2c0050d97832c3ac5193485b93705d00938c15e clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1179 (cached) $ clan select clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> DEBUG clan_cli.tests.helpers.cli:__init__.py:143 $ clan vars generate --flake /build/pytest-oaemf73n/flake test_machine clan-pytest-with-core> Caller: /build/src/clan_cli/tests/test_install_secret_path.py:51::test_sops_install_secret_path clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:927 Prefetching flake /build/pytest-oaemf73n/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.cliChecks clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1174 Cache miss for clanInternals.inventoryClass.inventorySerialization.{instances,machines,meta} clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:789 Loading flake cache from file /build/clan-flake-cache/flakes-v2/402ed58e5d3b6c766c623025d004cb92197fc627 clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1174 Cache miss for clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:789 Loading flake cache from file /build/clan-flake-cache/flakes-v2/402ed58e5d3b6c766c623025d004cb92197fc627 clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1179 (cached) $ clan select 'clanInternals.inventoryClass.inventorySerialization.{instances,machines,meta}' clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1144 Precaching selectors: clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.machines clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.instances clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.meta clan-pytest-with-core> - (not cached) clanInternals.?secrets.?age.?plugins clan-pytest-with-core> - (cached) clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{test_machine}.config.clan.core.vars.generators.*.{share,dependencies,prompts,validationHash} clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{test_machine}.config.clan.core.vars.generators.*.files.*.{secret,deploy,owner,group,mode,neededFor} clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{test_machine}.config.clan.core.?sops.?defaultGroups clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{test_machine}.config.clan.core.vars.settings.publicModule clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{test_machine}.config.clan.core.vars.settings.secretModule clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{test_machine}.config.clan.core.vars.?sops.?secretUploadDirectory clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{test_machine}.config.clan.core.vars.?password-store.?passCommand clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{test_machine}.config.clan.core.vars.?password-store.?secretLocation clan-pytest-with-core> - (not cached) clanInternals.vars.settings.?recipients clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{test_machine}.config.clan.core.vars.?age.?secretLocation clan-pytest-with-core> ______________ test_generate_secret_var_age_minimal_select_calls _______________ clan-pytest-with-core> [gw15] linux -- Python 3.14.7 /nix/store/3n4qphl9s728sz8frmpqqrv9b1m87g68-python3-3.14.7/bin/python clan-pytest-with-core> clan-pytest-with-core> self = Flake(identifier='/build/pytest-4b6_ffwf/flake', hash='sha256-alF0Y5quHkbFMsR3cVYwz2+N4Yj6ZikBBy3tH74UlJs=', 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.?secrets.?age.?plugins', 'clanInternals.machines.x86_64-linux.{machine2,machine3,my_machine}.config.cl... 'clanInternals.machines.x86_64-linux.{machine2,machine3,my_machine}.config.clan.core.vars.settings.secretModule', ...] 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-4b6_ffwf/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/gipksqxhy96al8zv011zisr9y6jp81f4-source?narHash=sha256-alF0Y5quHkbFMsR3cVYwz2+N4Yj6ZikBBy3tH74UlJs="; 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": "maybe", "value": "secrets"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "plugins"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine2"}, {"type": "str", "value": "machine3"}, {"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "share"}, {"type": "str", "value": "dependencies"}, {"type": "str", "value": "prompts"}, {"type": "str", "value": "validationHash"}]}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine2"}, {"type": "str", "value": "machine3"}, {"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "str", "value": "files"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "secret"}, {"type": "str", "value": "deploy"}, {"type": "str", "value": "owner"}, {"type": "str", "value": "group"}, {"type": "str", "value": "mode"}, {"type": "str", "value": "neededFor"}]}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine2"}, {"type": "str", "value": "machine3"}, {"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "defaultGroups"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine2"}, {"type": "str", "value": "machine3"}, {"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "publicModule"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine2"}, {"type": "str", "value": "machine3"}, {"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "secretModule"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine2"}, {"type": "str", "value": "machine3"}, {"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "secretUploadDirectory"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine2"}, {"type": "str", "value": "machine3"}, {"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "passCommand"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine2"}, {"type": "str", "value": "machine3"}, {"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "secretLocation"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "maybe", "value": "recipients"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine2"}, {"type": "str", "value": "machine3"}, {"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "secretLocation"}]'"'"''"'"') 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": "maybe", "value": "secrets"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "plugins"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine2"}, {"type": "str", "value": "machine3"}, {"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "share"}, {"type": "str", "value": "dependencies"}, {"type": "str", "value": "prompts"}, {"type": "str", "value": "validationHash"}]}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine2"}, {"type": "str", "value": "machine3"}, {"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "str", "value": "files"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "secret"}, {"type": "str", "value": "deploy"}, {"type": "str", "value": "owner"}, {"type": "str", "value": "group"}, {"type": "str", "value": "mode"}, {"type": "str", "value": "neededFor"}]}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine2"}, {"type": "str", "value": "machine3"}, {"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "defaultGroups"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine2"}, {"type": "str", "value": "machine3"}, {"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "publicModule"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine2"}, {"type": "str", "value": "machine3"}, {"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "secretModule"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine2"}, {"type": "str", "value": "machine3"}, {"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "secretUploadDirectory"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine2"}, {"type": "str", "value": "machine3"}, {"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "passCommand"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine2"}, {"type": "str", "value": "machine3"}, {"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "secretLocation"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "maybe", "value": "recipients"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine2"}, {"type": "str", "value": "machine3"}, {"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "secretLocation"}]'') 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": "maybe", "value": "secrets"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "plugins"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine2"}, {"type": "str", "value": "machine3"}, {"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "share"}, {"type": "str", "value": "dependencies"}, {"type": "str", "value": "prompts"}, {"type": "str", "value": "validationHash"}]}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine2"}, {"type": "str", "value": "machine3"}, {"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "str", "value": "files"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "secret"}, {"type": "str", "value": "deploy"}, {"type": "str", "value": "owner"}, {"type": "str", "value": "group"}, {"type": "str", "value": "mode"}, {"type": "str", "value": "neededFor"}]}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine2"}, {"type": "str", "value": "machine3"}, {"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "defaultGroups"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine2"}, {"type": "str", "value": "machine3"}, {"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "publicModule"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine2"}, {"type": "str", "value": "machine3"}, {"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "secretModule"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine2"}, {"type": "str", "value": "machine3"}, {"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "secretUploadDirectory"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine2"}, {"type": "str", "value": "machine3"}, {"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "passCommand"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine2"}, {"type": "str", "value": "machine3"}, {"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "secretLocation"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "maybe", "value": "recipients"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "machine2"}, {"type": "str", "value": "machine3"}, {"type": "str", "value": "my_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "secretLocation"}]'') flake) clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating list element at index 1 clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating attribute 'machine2' clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/cba1x9mxnwr8b36cw41bya7g6d5v1p7d-source/select.nix:325:37: clan-pytest-with-core> E 324| in clan-pytest-with-core> E 325| builtins.mapAttrs (_: v: recurse selectors (idx + 1) v) filteredAttrs clan-pytest-with-core> E | ^ clan-pytest-with-core> E 326| else if selector.type == "maybe" then 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:325:40: clan-pytest-with-core> E 324| in clan-pytest-with-core> E 325| builtins.mapAttrs (_: v: recurse selectors (idx + 1) v) filteredAttrs clan-pytest-with-core> E | ^ clan-pytest-with-core> E 326| else if selector.type == "maybe" then 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 … from call site clan-pytest-with-core> E at /build/store/nix/store/cba1x9mxnwr8b36cw41bya7g6d5v1p7d-source/select.nix:312:15: clan-pytest-with-core> E 311| else if selector.type == "str" then clan-pytest-with-core> E 312| recurse selectors (idx + 1) (builtins.getAttr selector.value obj) clan-pytest-with-core> E | ^ clan-pytest-with-core> E 313| else if selector.type == "set" then 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 'getAttr' builtin clan-pytest-with-core> E at /build/store/nix/store/cba1x9mxnwr8b36cw41bya7g6d5v1p7d-source/select.nix:312:44: clan-pytest-with-core> E 311| else if selector.type == "str" then clan-pytest-with-core> E 312| recurse selectors (idx + 1) (builtins.getAttr selector.value obj) clan-pytest-with-core> E | ^ clan-pytest-with-core> E 313| else if selector.type == "set" then clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'seq' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:401:18: clan-pytest-with-core> E 400| options = checked options; clan-pytest-with-core> E 401| config = checked (removeAttrs config [ "_module" ]); clan-pytest-with-core> E | ^ clan-pytest-with-core> E 402| _module = checked (config._module); 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:304:9: clan-pytest-with-core> E 303| checkUnmatched = clan-pytest-with-core> E 304| if config._module.check && config._module.freeformType == null && merged.unmatchedDefns != [ ] then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 305| let clan-pytest-with-core> E clan-pytest-with-core> E … in the right operand of the AND (&&) operator clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:304:72: clan-pytest-with-core> E 303| checkUnmatched = clan-pytest-with-core> E 304| if config._module.check && config._module.freeformType == null && merged.unmatchedDefns != [ ] then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 305| let clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'unmatchedDefns' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:940:7: clan-pytest-with-core> E 939| # Transforms unmatchedDefnsByName into a list of definitions clan-pytest-with-core> E 940| unmatchedDefns = clan-pytest-with-core> E | ^ clan-pytest-with-core> E 941| if configs == [ ] then clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'concatLists' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:946:11: clan-pytest-with-core> E 945| else clan-pytest-with-core> E 946| concatLists ( clan-pytest-with-core> E | ^ clan-pytest-with-core> E 947| mapAttrsToList ( clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:948:21: clan-pytest-with-core> E 947| mapAttrsToList ( clan-pytest-with-core> E 948| name: defs: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 949| map ( clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'map' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:949:15: clan-pytest-with-core> E 948| name: defs: clan-pytest-with-core> E 949| map ( clan-pytest-with-core> E | ^ clan-pytest-with-core> E 950| def: clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:932:22: clan-pytest-with-core> E 931| # Propagate all unmatched definitions from nested option sets clan-pytest-with-core> E 932| mapAttrs (n: v: v.unmatchedDefns) resultsByName clan-pytest-with-core> E | ^ clan-pytest-with-core> E 933| # Plus the definitions for the current prefix that don't have a matching option clan-pytest-with-core> E clan-pytest-with-core> E (10 duplicate frames omitted) clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:932:25: clan-pytest-with-core> E 931| # Propagate all unmatched definitions from nested option sets clan-pytest-with-core> E 932| mapAttrs (n: v: v.unmatchedDefns) resultsByName clan-pytest-with-core> E | ^ clan-pytest-with-core> E 933| # Plus the definitions for the current prefix that don't have a matching option clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:876:15: clan-pytest-with-core> E 875| resultsByName = mapAttrs ( clan-pytest-with-core> E 876| name: decls: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 877| # We're descending into attribute ‘name’. 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:888:9: clan-pytest-with-core> E 887| in clan-pytest-with-core> E 888| if length optionDecls == length decls then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 889| let clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'length' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:888:12: clan-pytest-with-core> E 887| in clan-pytest-with-core> E 888| if length optionDecls == length decls then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 889| let clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'filter' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:882:25: clan-pytest-with-core> E 881| defns' = rawDefinitionsByName.${name} or [ ]; clan-pytest-with-core> E 882| optionDecls = filter ( clan-pytest-with-core> E | ^ clan-pytest-with-core> E 883| m: clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:883:13: clan-pytest-with-core> E 882| optionDecls = filter ( clan-pytest-with-core> E 883| m: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 884| m.options ? _type clan-pytest-with-core> E clan-pytest-with-core> E … in the left operand of the AND (&&) operator clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:885:13: clan-pytest-with-core> E 884| m.options ? _type clan-pytest-with-core> E 885| && (m.options._type == "option" || throwDeclarationTypeError loc m.options._type m._file) clan-pytest-with-core> E | ^ clan-pytest-with-core> E 886| ) decls; clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'options' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:807:15: clan-pytest-with-core> E 806| pos = unsafeGetAttrPos n subtree; clan-pytest-with-core> E 807| options = option; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 808| }) subtree clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:289:73: clan-pytest-with-core> E 288| len = length attrPath; clan-pytest-with-core> E 289| atDepth = n: if n == len then value else { ${elemAt attrPath n} = atDepth (n + 1); }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 290| in clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'atDepth' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:289:17: clan-pytest-with-core> E 288| len = length attrPath; clan-pytest-with-core> E 289| atDepth = n: if n == len then value else { ${elemAt attrPath n} = atDepth (n + 1); }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 290| in clan-pytest-with-core> E clan-pytest-with-core> E … in the right operand of the update (//) operator clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:2047:9: clan-pytest-with-core> E 2046| } clan-pytest-with-core> E 2047| // optionalAttrs (toType != null) { clan-pytest-with-core> E | ^ clan-pytest-with-core> E 2048| type = toType; clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:2047:12: clan-pytest-with-core> E 2046| } clan-pytest-with-core> E 2047| // optionalAttrs (toType != null) { clan-pytest-with-core> E | ^ clan-pytest-with-core> E 2048| type = toType; clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'optionalAttrs' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:1492:25: clan-pytest-with-core> E 1491| */ clan-pytest-with-core> E 1492| optionalAttrs = cond: as: if cond then as else { }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1493| 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:1492:29: clan-pytest-with-core> E 1491| */ clan-pytest-with-core> E 1492| optionalAttrs = cond: as: if cond then as else { }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1493| clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:2036:17: clan-pytest-with-core> E 2035| let clan-pytest-with-core> E 2036| opt = attrByPath to { } options; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 2037| in clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'attrByPath' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:89:24: clan-pytest-with-core> E 88| attrByPath = clan-pytest-with-core> E 89| attrPath: default: set: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 90| let clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:106:5: clan-pytest-with-core> E 105| in clan-pytest-with-core> E 106| attrByPath' 0 set; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 107| clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'attrByPath'' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:93:12: clan-pytest-with-core> E 92| attrByPath' = clan-pytest-with-core> E 93| n: s: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 94| ( clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:102:35: clan-pytest-with-core> E 101| in clan-pytest-with-core> E 102| if s ? ${attr} then attrByPath' (n + 1) s.${attr} else default clan-pytest-with-core> E | ^ clan-pytest-with-core> E 103| ) clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'attrByPath'' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:93:12: clan-pytest-with-core> E 92| attrByPath' = clan-pytest-with-core> E 93| n: s: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 94| ( clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:102:35: clan-pytest-with-core> E 101| in clan-pytest-with-core> E 102| if s ? ${attr} then attrByPath' (n + 1) s.${attr} else default clan-pytest-with-core> E | ^ clan-pytest-with-core> E 103| ) clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'attrByPath'' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:93:12: clan-pytest-with-core> E 92| attrByPath' = clan-pytest-with-core> E 93| n: s: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 94| ( clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:102:35: clan-pytest-with-core> E 101| in clan-pytest-with-core> E 102| if s ? ${attr} then attrByPath' (n + 1) s.${attr} else default clan-pytest-with-core> E | ^ clan-pytest-with-core> E 103| ) clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'attrByPath'' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:93:12: clan-pytest-with-core> E 92| attrByPath' = clan-pytest-with-core> E 93| n: s: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 94| ( clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:102:55: clan-pytest-with-core> E 101| in clan-pytest-with-core> E 102| if s ? ${attr} then attrByPath' (n + 1) s.${attr} else default clan-pytest-with-core> E | ^ clan-pytest-with-core> E 103| ) clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:927:37: clan-pytest-with-core> E 926| clan-pytest-with-core> E 927| matchedOptions = mapAttrs (n: v: v.matchedOptions) resultsByName; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 928| clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'matchedOptions' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:893:13: clan-pytest-with-core> E 892| { clan-pytest-with-core> E 893| matchedOptions = evalOptionValue loc opt defns'; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 894| unmatchedDefns = [ ]; clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:893:30: clan-pytest-with-core> E 892| { clan-pytest-with-core> E 893| matchedOptions = evalOptionValue loc opt defns'; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 894| unmatchedDefns = [ ]; clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'evalOptionValue' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1103:15: clan-pytest-with-core> E 1102| evalOptionValue = clan-pytest-with-core> E 1103| loc: opt: defs: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1104| let clan-pytest-with-core> E clan-pytest-with-core> E … in the left operand of the update (//) operator clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1148:5: clan-pytest-with-core> E 1147| warnDeprecation opt clan-pytest-with-core> E 1148| // { clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1149| value = addErrorContext "while evaluating the option `${showOption loc}':" value; 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1141:9: clan-pytest-with-core> E 1140| warnDeprecation = clan-pytest-with-core> E 1141| if (opt.type.deprecationMessage != null) then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1142| warn "The type `types.${opt.type.name}' of option `${showOption loc}' defined in ${showFiles opt.declarations} is deprecated. ${opt.type.deprecationMessage}" clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:890:19: clan-pytest-with-core> E 889| let clan-pytest-with-core> E 890| opt = fixupOptionType loc (mergeOptionDecls loc decls); clan-pytest-with-core> E | ^ clan-pytest-with-core> E 891| in clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'fixupOptionType' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1473:10: clan-pytest-with-core> E 1472| fixupOptionType = clan-pytest-with-core> E 1473| loc: opt: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1474| if opt.type.getSubModules or null == null then 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1474:5: clan-pytest-with-core> E 1473| loc: opt: clan-pytest-with-core> E 1474| if opt.type.getSubModules or null == null then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1475| opt // { type = opt.type or types.unspecified; } clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'type.getSubModules' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/nixos/modules/services/hardware/bluetooth.nix:72:9: clan-pytest-with-core> E 71| settings = mkOption { clan-pytest-with-core> E 72| type = cfgFmt.type; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 73| default = { }; clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/nixos/modules/services/hardware/bluetooth.nix:26:12: clan-pytest-with-core> E 25| clan-pytest-with-core> E 26| cfgFmt = pkgs.formats.ini { }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 27| clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:727:15: clan-pytest-with-core> E 726| extraArgs = mapAttrs ( clan-pytest-with-core> E 727| name: _: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 728| addErrorContext (context name) ( clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the module argument `pkgs' in "/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/nixos/modules/services/hardware/bluetooth.nix": clan-pytest-with-core> E clan-pytest-with-core> E … noting that argument `pkgs` is not externally provided, so querying `_module.args` instead, requiring `config` clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:731:13: clan-pytest-with-core> E 730| "noting that argument `${name}` is not externally provided, so querying `_module.args` instead, requiring `config`" clan-pytest-with-core> E 731| config._module.args.${name} clan-pytest-with-core> E | ^ clan-pytest-with-core> E 732| ) clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/types.nix:1029:18: clan-pytest-with-core> E 1028| value = mapAttrs ( clan-pytest-with-core> E 1029| n: v: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1030| if lazy then clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'optionalValue.value' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1312:5: clan-pytest-with-core> E 1311| clan-pytest-with-core> E 1312| optionalValue = if isDefined then { value = mergedValue; } else { }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1313| }; 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1312:21: clan-pytest-with-core> E 1311| clan-pytest-with-core> E 1312| optionalValue = if isDefined then { value = mergedValue; } else { }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1313| }; clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'values' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1240:11: clan-pytest-with-core> E 1239| { clan-pytest-with-core> E 1240| values = defsSorted; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1241| inherit (defsFiltered) highestPrio; 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1211:11: clan-pytest-with-core> E 1210| # Avoid sorting if we don't have to. clan-pytest-with-core> E 1211| if any (def: def.value._type or "" == "order") defsFiltered.values then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1212| sortProperties defsFiltered.values clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'any' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1211:14: clan-pytest-with-core> E 1210| # Avoid sorting if we don't have to. clan-pytest-with-core> E 1211| if any (def: def.value._type or "" == "order") defsFiltered.values then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1212| sortProperties defsFiltered.values clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1211:19: clan-pytest-with-core> E 1210| # Avoid sorting if we don't have to. clan-pytest-with-core> E 1211| if any (def: def.value._type or "" == "order") defsFiltered.values then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1212| sortProperties defsFiltered.values clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'value._type' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1422:67: clan-pytest-with-core> E 1421| strip = clan-pytest-with-core> E 1422| def: if def.value._type or "" == "override" then def // { value = def.value.content; } else def; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1423| in clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'value.content' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1566:22: clan-pytest-with-core> E 1565| _type = "override"; clan-pytest-with-core> E 1566| inherit priority content; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1567| }; 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/nixos/modules/misc/nixpkgs.nix:107:15: clan-pytest-with-core> E 106| clan-pytest-with-core> E 107| finalPkgs = if opt.pkgs.isDefined then cfg.pkgs.appendOverlays cfg.overlays else defaultPkgs; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 108| clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'pkgs.isDefined' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1154:21: clan-pytest-with-core> E 1153| definitionsWithLocations = res.defsFinal; clan-pytest-with-core> E 1154| inherit (res) isDefined; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1155| inherit (res.checkedAndMerged) valueMeta; clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'isDefined' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1310:5: clan-pytest-with-core> E 1309| clan-pytest-with-core> E 1310| isDefined = defsFinal != [ ]; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1311| clan-pytest-with-core> E clan-pytest-with-core> E (6 duplicate frames omitted) clan-pytest-with-core> E clan-pytest-with-core> E error: attribute 'system' missing clan-pytest-with-core> E at /build/store/nix/store/y3h139bhv4373m1hab367ma4p5i95i2f-source/modules/clan/module.nix:164:24: clan-pytest-with-core> E 163| (lib.modules.importApply ../../nixosModules/machineModules/overridePkgs.nix { clan-pytest-with-core> E 164| pkgs = nixpkgsMatrix.${config.inventory.machines.${name}.nixpkgs}.system.${system}.pkgs; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 165| }) clan-pytest-with-core> E Did you mean systems? 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 0x7fffe6362470> 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> def test_generate_secret_var_age_minimal_select_calls( 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> """Test that age backend doesn't make unnecessary select calls.""" clan-pytest-with-core> age_key = age_keys[0] clan-pytest-with-core> clan-pytest-with-core> config = flake.machines["my_machine"] = create_test_machine_config() clan-pytest-with-core> clan_vars = config["clan"]["core"]["vars"] clan-pytest-with-core> clan_vars["settings"]["secretStore"] = "age" clan-pytest-with-core> clan-pytest-with-core> # Create a simple generator with a secret clan-pytest-with-core> my_generator = clan_vars["generators"]["my_generator"] clan-pytest-with-core> my_generator["files"]["my_secret"]["secret"] = True clan-pytest-with-core> my_generator["script"] = 'echo hello > "$out"/my_secret' clan-pytest-with-core> clan-pytest-with-core> # Add machine2 and machine3 with the same configuration clan-pytest-with-core> flake.machines["machine2"] = config.copy() clan-pytest-with-core> flake.machines["machine3"] = config.copy() clan-pytest-with-core> clan-pytest-with-core> flake.refresh() clan-pytest-with-core> monkeypatch.chdir(flake.path) clan-pytest-with-core> clan-pytest-with-core> # Write clan.nix with age recipients configuration for all machines clan-pytest-with-core> clan_nix_content = f""" clan-pytest-with-core> {{ clan-pytest-with-core> vars.settings.recipients.hosts.my_machine = [ clan-pytest-with-core> "{age_key.pubkey}" clan-pytest-with-core> ]; clan-pytest-with-core> vars.settings.recipients.hosts.machine2 = [ clan-pytest-with-core> "{age_key.pubkey}" clan-pytest-with-core> ]; clan-pytest-with-core> vars.settings.recipients.hosts.machine3 = [ clan-pytest-with-core> "{age_key.pubkey}" clan-pytest-with-core> ]; clan-pytest-with-core> }} clan-pytest-with-core> """ clan-pytest-with-core> (flake.path / "clan.nix").write_text(clan_nix_content) clan-pytest-with-core> clan-pytest-with-core> # Set up age key file clan-pytest-with-core> age_key_dir = flake.path / ".age" clan-pytest-with-core> age_key_dir.mkdir() clan-pytest-with-core> age_key_file = age_key_dir / "key.txt" clan-pytest-with-core> age_key_file.write_text(age_key.privkey) clan-pytest-with-core> clan-pytest-with-core> # Set AGE_KEYFILE environment variable clan-pytest-with-core> monkeypatch.setenv("AGE_KEYFILE", str(age_key_file)) clan-pytest-with-core> clan-pytest-with-core> # Commit the changes clan-pytest-with-core> subprocess.run(["git", "add", "."], cwd=flake.path, check=True) clan-pytest-with-core> subprocess.run( clan-pytest-with-core> ["git", "commit", "-m", "Add clan.nix with age recipients"], clan-pytest-with-core> cwd=flake.path, clan-pytest-with-core> check=True, clan-pytest-with-core> ) clan-pytest-with-core> clan-pytest-with-core> # Create a fresh flake object and invalidate cache to ensure clean state clan-pytest-with-core> invalidate_flake_cache(flake.path) clan-pytest-with-core> flake_obj = Flake(str(flake.path)) clan-pytest-with-core> clan-pytest-with-core> # Generate the secrets clan-pytest-with-core> > generate_command( clan-pytest-with-core> argparse.Namespace( clan-pytest-with-core> machines=["my_machine", "machine2", "machine3"], clan-pytest-with-core> generator=None, clan-pytest-with-core> flake=flake_obj, clan-pytest-with-core> regenerate=False, clan-pytest-with-core> no_sandbox=False, clan-pytest-with-core> ) clan-pytest-with-core> ) clan-pytest-with-core> clan-pytest-with-core> /build/src/clan_cli/tests/test_vars_age.py:297: clan-pytest-with-core> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ clan-pytest-with-core> /build/src/clan_cli/vars/generate.py:33: in generate_command clan-pytest-with-core> run_generators( clan-pytest-with-core> /build/src/clan_lib/vars/generate.py:306: in run_generators clan-pytest-with-core> all_generators = get_generators(machines, full_closure=True) clan-pytest-with-core> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ clan-pytest-with-core> /build/src/clan_lib/vars/generate.py:146: in get_generators clan-pytest-with-core> flake.precache(get_generators_precache_selectors(list(all_machines))) clan-pytest-with-core> /build/src/clan_lib/flake/flake.py:1151: in precache clan-pytest-with-core> self.get_from_nix(not_fetched_selectors) clan-pytest-with-core> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ clan-pytest-with-core> clan-pytest-with-core> self = Flake(identifier='/build/pytest-4b6_ffwf/flake', hash='sha256-alF0Y5quHkbFMsR3cVYwz2+N4Yj6ZikBBy3tH74UlJs=', 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.?secrets.?age.?plugins', 'clanInternals.machines.x86_64-linux.{machine2,machine3,my_machine}.config.cl... 'clanInternals.machines.x86_64-linux.{machine2,machine3,my_machine}.config.clan.core.vars.settings.secretModule', ...] 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 while executing:$ clan select 'clanInternals.?secrets.?age.?plugins' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{machine2,machine3,my_machine}.config.clan.core.vars.generators.*.{share,dependencies,prompts,validationHash}' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{machine2,machine3,my_machine}.config.clan.core.vars.generators.*.files.*.{secret,deploy,owner,group,mode,neededFor}' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{machine2,machine3,my_machine}.config.clan.core.?sops.?defaultGroups' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{machine2,machine3,my_machine}.config.clan.core.vars.settings.publicModule' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{machine2,machine3,my_machine}.config.clan.core.vars.settings.secretModule' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{machine2,machine3,my_machine}.config.clan.core.vars.?sops.?secretUploadDirectory' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{machine2,machine3,my_machine}.config.clan.core.vars.?password-store.?passCommand' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{machine2,machine3,my_machine}.config.clan.core.vars.?password-store.?secretLocation' clan-pytest-with-core> E $ clan select 'clanInternals.vars.settings.?recipients' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{machine2,machine3,my_machine}.config.clan.core.vars.?age.?secretLocation' clan-pytest-with-core> E Reason: attribute 'system' missing clan-pytest-with-core> E at /build/store/nix/store/y3h139bhv4373m1hab367ma4p5i95i2f-source/modules/clan/module.nix:164:24: clan-pytest-with-core> E 163| (lib.modules.importApply ../../nixosModules/machineModules/overridePkgs.nix { clan-pytest-with-core> E 164| pkgs = nixpkgsMatrix.${config.inventory.machines.${name}.nixpkgs}.system.${system}.pkgs; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 165| }) clan-pytest-with-core> E Did you mean systems?. 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 setup ----------------------------- clan-pytest-with-core> !! $HOME does not point to a temp directory!! HOME=/build/pytest-4b6_ffwf 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/pytest-4b6_ffwf clan-pytest-with-core> ----------------------------- Captured stdout call ----------------------------- clan-pytest-with-core> [main 544df9e] flake: update by flake generator clan-pytest-with-core> 6 files changed, 111 insertions(+) clan-pytest-with-core> create mode 100644 machines/machine2/configuration.json clan-pytest-with-core> create mode 100644 machines/machine2/configuration.nix clan-pytest-with-core> create mode 100644 machines/machine3/configuration.json clan-pytest-with-core> create mode 100644 machines/machine3/configuration.nix 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 25dcbea] Add clan.nix with age recipients clan-pytest-with-core> 2 files changed, 13 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-4b6_ffwf/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/febbcab65441be6ccc547560fd0155faadebbbb7 clan-pytest-with-core> (cached) $ clan select clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> Prefetching flake /build/pytest-4b6_ffwf/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/febbcab65441be6ccc547560fd0155faadebbbb7 clan-pytest-with-core> (cached) $ clan select clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> Prefetching flake /build/pytest-4b6_ffwf/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/febbcab65441be6ccc547560fd0155faadebbbb7 clan-pytest-with-core> (cached) $ clan select clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> git \ clan-pytest-with-core> add \ clan-pytest-with-core> /build/pytest-4b6_ffwf/flake/.cache_invalidation_1787050289.080485 clan-pytest-with-core> Caller: /build/src/clan_cli/tests/helpers/flake_cache.py:15::invalidate_flake_cache clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_cli/tests/helpers/flake_cache.py:15::invalidate_flake_cache clan-pytest-with-core> clan-pytest-with-core> Prefetching flake /build/pytest-4b6_ffwf/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.cliChecks clan-pytest-with-core> Cache miss for clanInternals.inventoryClass.inventorySerialization.{instances,machines,meta} clan-pytest-with-core> Loading flake cache from file /build/clan-flake-cache/flakes-v2/9303c579011073b152a3ec533131a70b08a11f29 clan-pytest-with-core> Cache miss for clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> Loading flake cache from file /build/clan-flake-cache/flakes-v2/9303c579011073b152a3ec533131a70b08a11f29 clan-pytest-with-core> (cached) $ clan select 'clanInternals.inventoryClass.inventorySerialization.{instances,machines,meta}' clan-pytest-with-core> Precaching selectors: clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.machines clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.instances clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.meta clan-pytest-with-core> - (not cached) clanInternals.?secrets.?age.?plugins clan-pytest-with-core> - (cached) clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine2,machine3,my_machine}.config.clan.core.vars.generators.*.{share,dependencies,prompts,validationHash} clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine2,machine3,my_machine}.config.clan.core.vars.generators.*.files.*.{secret,deploy,owner,group,mode,neededFor} clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine2,machine3,my_machine}.config.clan.core.?sops.?defaultGroups clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine2,machine3,my_machine}.config.clan.core.vars.settings.publicModule clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine2,machine3,my_machine}.config.clan.core.vars.settings.secretModule clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine2,machine3,my_machine}.config.clan.core.vars.?sops.?secretUploadDirectory clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine2,machine3,my_machine}.config.clan.core.vars.?password-store.?passCommand clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine2,machine3,my_machine}.config.clan.core.vars.?password-store.?secretLocation clan-pytest-with-core> - (not cached) clanInternals.vars.settings.?recipients clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine2,machine3,my_machine}.config.clan.core.vars.?age.?secretLocation clan-pytest-with-core> ------------------------------ Captured log call ------------------------------- clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:927 Prefetching flake /build/pytest-4b6_ffwf/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/febbcab65441be6ccc547560fd0155faadebbbb7 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-4b6_ffwf/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/febbcab65441be6ccc547560fd0155faadebbbb7 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-4b6_ffwf/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/febbcab65441be6ccc547560fd0155faadebbbb7 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.cmd:__init__.py:143 git \ clan-pytest-with-core> add \ clan-pytest-with-core> /build/pytest-4b6_ffwf/flake/.cache_invalidation_1787050289.080485 clan-pytest-with-core> Caller: /build/src/clan_cli/tests/helpers/flake_cache.py:15::invalidate_flake_cache clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:143 Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_cli/tests/helpers/flake_cache.py:15::invalidate_flake_cache clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:927 Prefetching flake /build/pytest-4b6_ffwf/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.cliChecks clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1174 Cache miss for clanInternals.inventoryClass.inventorySerialization.{instances,machines,meta} clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:789 Loading flake cache from file /build/clan-flake-cache/flakes-v2/9303c579011073b152a3ec533131a70b08a11f29 clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1174 Cache miss for clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:789 Loading flake cache from file /build/clan-flake-cache/flakes-v2/9303c579011073b152a3ec533131a70b08a11f29 clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1179 (cached) $ clan select 'clanInternals.inventoryClass.inventorySerialization.{instances,machines,meta}' clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1144 Precaching selectors: clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.machines clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.instances clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.meta clan-pytest-with-core> - (not cached) clanInternals.?secrets.?age.?plugins clan-pytest-with-core> - (cached) clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine2,machine3,my_machine}.config.clan.core.vars.generators.*.{share,dependencies,prompts,validationHash} clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine2,machine3,my_machine}.config.clan.core.vars.generators.*.files.*.{secret,deploy,owner,group,mode,neededFor} clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine2,machine3,my_machine}.config.clan.core.?sops.?defaultGroups clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine2,machine3,my_machine}.config.clan.core.vars.settings.publicModule clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine2,machine3,my_machine}.config.clan.core.vars.settings.secretModule clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine2,machine3,my_machine}.config.clan.core.vars.?sops.?secretUploadDirectory clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine2,machine3,my_machine}.config.clan.core.vars.?password-store.?passCommand clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine2,machine3,my_machine}.config.clan.core.vars.?password-store.?secretLocation clan-pytest-with-core> - (not cached) clanInternals.vars.settings.?recipients clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{machine2,machine3,my_machine}.config.clan.core.vars.?age.?secretLocation clan-pytest-with-core> ____________________ test_sops_install_secret_path[custom] _____________________ clan-pytest-with-core> [gw11] linux -- Python 3.14.7 /nix/store/3n4qphl9s728sz8frmpqqrv9b1m87g68-python3-3.14.7/bin/python clan-pytest-with-core> clan-pytest-with-core> self = Flake(identifier='/build/pytest-rwtg58s9/flake', hash='sha256-N230gOZwWwBz+Fm9vkRGZ5Wn0EG7W2bbnKfh614lPvI=', 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.?secrets.?age.?plugins', 'clanInternals.machines.x86_64-linux.{test_machine}.config.clan.core.vars.gen...s.publicModule', 'clanInternals.machines.x86_64-linux.{test_machine}.config.clan.core.vars.settings.secretModule', ...] 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-rwtg58s9/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/pwwv8y51sw2g1xpw52ds7n4sc5r5x8sz-source?narHash=sha256-N230gOZwWwBz+Fm9vkRGZ5Wn0EG7W2bbnKfh614lPvI="; 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": "maybe", "value": "secrets"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "plugins"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "test_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "share"}, {"type": "str", "value": "dependencies"}, {"type": "str", "value": "prompts"}, {"type": "str", "value": "validationHash"}]}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "test_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "str", "value": "files"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "secret"}, {"type": "str", "value": "deploy"}, {"type": "str", "value": "owner"}, {"type": "str", "value": "group"}, {"type": "str", "value": "mode"}, {"type": "str", "value": "neededFor"}]}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "test_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "defaultGroups"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "test_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "publicModule"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "test_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "secretModule"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "test_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "secretUploadDirectory"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "test_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "passCommand"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "test_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "secretLocation"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "maybe", "value": "recipients"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "test_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "secretLocation"}]'"'"''"'"') 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": "maybe", "value": "secrets"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "plugins"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "test_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "share"}, {"type": "str", "value": "dependencies"}, {"type": "str", "value": "prompts"}, {"type": "str", "value": "validationHash"}]}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "test_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "str", "value": "files"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "secret"}, {"type": "str", "value": "deploy"}, {"type": "str", "value": "owner"}, {"type": "str", "value": "group"}, {"type": "str", "value": "mode"}, {"type": "str", "value": "neededFor"}]}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "test_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "defaultGroups"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "test_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "publicModule"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "test_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "secretModule"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "test_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "secretUploadDirectory"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "test_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "passCommand"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "test_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "secretLocation"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "maybe", "value": "recipients"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "test_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "secretLocation"}]'') 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": "maybe", "value": "secrets"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "plugins"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "test_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "share"}, {"type": "str", "value": "dependencies"}, {"type": "str", "value": "prompts"}, {"type": "str", "value": "validationHash"}]}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "test_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "str", "value": "files"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "secret"}, {"type": "str", "value": "deploy"}, {"type": "str", "value": "owner"}, {"type": "str", "value": "group"}, {"type": "str", "value": "mode"}, {"type": "str", "value": "neededFor"}]}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "test_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "defaultGroups"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "test_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "publicModule"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "test_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "secretModule"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "test_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "secretUploadDirectory"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "test_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "passCommand"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "test_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "secretLocation"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "maybe", "value": "recipients"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "test_machine"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "secretLocation"}]'') flake) clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating list element at index 1 clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating attribute 'test_machine' clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/cba1x9mxnwr8b36cw41bya7g6d5v1p7d-source/select.nix:325:37: clan-pytest-with-core> E 324| in clan-pytest-with-core> E 325| builtins.mapAttrs (_: v: recurse selectors (idx + 1) v) filteredAttrs clan-pytest-with-core> E | ^ clan-pytest-with-core> E 326| else if selector.type == "maybe" then 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:325:40: clan-pytest-with-core> E 324| in clan-pytest-with-core> E 325| builtins.mapAttrs (_: v: recurse selectors (idx + 1) v) filteredAttrs clan-pytest-with-core> E | ^ clan-pytest-with-core> E 326| else if selector.type == "maybe" then 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 … from call site clan-pytest-with-core> E at /build/store/nix/store/cba1x9mxnwr8b36cw41bya7g6d5v1p7d-source/select.nix:312:15: clan-pytest-with-core> E 311| else if selector.type == "str" then clan-pytest-with-core> E 312| recurse selectors (idx + 1) (builtins.getAttr selector.value obj) clan-pytest-with-core> E | ^ clan-pytest-with-core> E 313| else if selector.type == "set" then 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 'getAttr' builtin clan-pytest-with-core> E at /build/store/nix/store/cba1x9mxnwr8b36cw41bya7g6d5v1p7d-source/select.nix:312:44: clan-pytest-with-core> E 311| else if selector.type == "str" then clan-pytest-with-core> E 312| recurse selectors (idx + 1) (builtins.getAttr selector.value obj) clan-pytest-with-core> E | ^ clan-pytest-with-core> E 313| else if selector.type == "set" then clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'seq' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:401:18: clan-pytest-with-core> E 400| options = checked options; clan-pytest-with-core> E 401| config = checked (removeAttrs config [ "_module" ]); clan-pytest-with-core> E | ^ clan-pytest-with-core> E 402| _module = checked (config._module); 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:304:9: clan-pytest-with-core> E 303| checkUnmatched = clan-pytest-with-core> E 304| if config._module.check && config._module.freeformType == null && merged.unmatchedDefns != [ ] then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 305| let clan-pytest-with-core> E clan-pytest-with-core> E … in the right operand of the AND (&&) operator clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:304:72: clan-pytest-with-core> E 303| checkUnmatched = clan-pytest-with-core> E 304| if config._module.check && config._module.freeformType == null && merged.unmatchedDefns != [ ] then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 305| let clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'unmatchedDefns' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:940:7: clan-pytest-with-core> E 939| # Transforms unmatchedDefnsByName into a list of definitions clan-pytest-with-core> E 940| unmatchedDefns = clan-pytest-with-core> E | ^ clan-pytest-with-core> E 941| if configs == [ ] then clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'concatLists' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:946:11: clan-pytest-with-core> E 945| else clan-pytest-with-core> E 946| concatLists ( clan-pytest-with-core> E | ^ clan-pytest-with-core> E 947| mapAttrsToList ( clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:948:21: clan-pytest-with-core> E 947| mapAttrsToList ( clan-pytest-with-core> E 948| name: defs: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 949| map ( clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'map' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:949:15: clan-pytest-with-core> E 948| name: defs: clan-pytest-with-core> E 949| map ( clan-pytest-with-core> E | ^ clan-pytest-with-core> E 950| def: clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:932:22: clan-pytest-with-core> E 931| # Propagate all unmatched definitions from nested option sets clan-pytest-with-core> E 932| mapAttrs (n: v: v.unmatchedDefns) resultsByName clan-pytest-with-core> E | ^ clan-pytest-with-core> E 933| # Plus the definitions for the current prefix that don't have a matching option clan-pytest-with-core> E clan-pytest-with-core> E (10 duplicate frames omitted) clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:932:25: clan-pytest-with-core> E 931| # Propagate all unmatched definitions from nested option sets clan-pytest-with-core> E 932| mapAttrs (n: v: v.unmatchedDefns) resultsByName clan-pytest-with-core> E | ^ clan-pytest-with-core> E 933| # Plus the definitions for the current prefix that don't have a matching option clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:876:15: clan-pytest-with-core> E 875| resultsByName = mapAttrs ( clan-pytest-with-core> E 876| name: decls: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 877| # We're descending into attribute ‘name’. 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:888:9: clan-pytest-with-core> E 887| in clan-pytest-with-core> E 888| if length optionDecls == length decls then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 889| let clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'length' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:888:12: clan-pytest-with-core> E 887| in clan-pytest-with-core> E 888| if length optionDecls == length decls then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 889| let clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'filter' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:882:25: clan-pytest-with-core> E 881| defns' = rawDefinitionsByName.${name} or [ ]; clan-pytest-with-core> E 882| optionDecls = filter ( clan-pytest-with-core> E | ^ clan-pytest-with-core> E 883| m: clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:883:13: clan-pytest-with-core> E 882| optionDecls = filter ( clan-pytest-with-core> E 883| m: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 884| m.options ? _type clan-pytest-with-core> E clan-pytest-with-core> E … in the left operand of the AND (&&) operator clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:885:13: clan-pytest-with-core> E 884| m.options ? _type clan-pytest-with-core> E 885| && (m.options._type == "option" || throwDeclarationTypeError loc m.options._type m._file) clan-pytest-with-core> E | ^ clan-pytest-with-core> E 886| ) decls; clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'options' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:807:15: clan-pytest-with-core> E 806| pos = unsafeGetAttrPos n subtree; clan-pytest-with-core> E 807| options = option; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 808| }) subtree clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:289:73: clan-pytest-with-core> E 288| len = length attrPath; clan-pytest-with-core> E 289| atDepth = n: if n == len then value else { ${elemAt attrPath n} = atDepth (n + 1); }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 290| in clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'atDepth' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:289:17: clan-pytest-with-core> E 288| len = length attrPath; clan-pytest-with-core> E 289| atDepth = n: if n == len then value else { ${elemAt attrPath n} = atDepth (n + 1); }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 290| in clan-pytest-with-core> E clan-pytest-with-core> E … in the right operand of the update (//) operator clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:2047:9: clan-pytest-with-core> E 2046| } clan-pytest-with-core> E 2047| // optionalAttrs (toType != null) { clan-pytest-with-core> E | ^ clan-pytest-with-core> E 2048| type = toType; clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:2047:12: clan-pytest-with-core> E 2046| } clan-pytest-with-core> E 2047| // optionalAttrs (toType != null) { clan-pytest-with-core> E | ^ clan-pytest-with-core> E 2048| type = toType; clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'optionalAttrs' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:1492:25: clan-pytest-with-core> E 1491| */ clan-pytest-with-core> E 1492| optionalAttrs = cond: as: if cond then as else { }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1493| 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:1492:29: clan-pytest-with-core> E 1491| */ clan-pytest-with-core> E 1492| optionalAttrs = cond: as: if cond then as else { }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1493| clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:2036:17: clan-pytest-with-core> E 2035| let clan-pytest-with-core> E 2036| opt = attrByPath to { } options; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 2037| in clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'attrByPath' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:89:24: clan-pytest-with-core> E 88| attrByPath = clan-pytest-with-core> E 89| attrPath: default: set: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 90| let clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:106:5: clan-pytest-with-core> E 105| in clan-pytest-with-core> E 106| attrByPath' 0 set; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 107| clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'attrByPath'' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:93:12: clan-pytest-with-core> E 92| attrByPath' = clan-pytest-with-core> E 93| n: s: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 94| ( clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:102:35: clan-pytest-with-core> E 101| in clan-pytest-with-core> E 102| if s ? ${attr} then attrByPath' (n + 1) s.${attr} else default clan-pytest-with-core> E | ^ clan-pytest-with-core> E 103| ) clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'attrByPath'' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:93:12: clan-pytest-with-core> E 92| attrByPath' = clan-pytest-with-core> E 93| n: s: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 94| ( clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:102:35: clan-pytest-with-core> E 101| in clan-pytest-with-core> E 102| if s ? ${attr} then attrByPath' (n + 1) s.${attr} else default clan-pytest-with-core> E | ^ clan-pytest-with-core> E 103| ) clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'attrByPath'' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:93:12: clan-pytest-with-core> E 92| attrByPath' = clan-pytest-with-core> E 93| n: s: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 94| ( clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:102:35: clan-pytest-with-core> E 101| in clan-pytest-with-core> E 102| if s ? ${attr} then attrByPath' (n + 1) s.${attr} else default clan-pytest-with-core> E | ^ clan-pytest-with-core> E 103| ) clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'attrByPath'' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:93:12: clan-pytest-with-core> E 92| attrByPath' = clan-pytest-with-core> E 93| n: s: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 94| ( clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:102:55: clan-pytest-with-core> E 101| in clan-pytest-with-core> E 102| if s ? ${attr} then attrByPath' (n + 1) s.${attr} else default clan-pytest-with-core> E | ^ clan-pytest-with-core> E 103| ) clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:927:37: clan-pytest-with-core> E 926| clan-pytest-with-core> E 927| matchedOptions = mapAttrs (n: v: v.matchedOptions) resultsByName; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 928| clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'matchedOptions' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:893:13: clan-pytest-with-core> E 892| { clan-pytest-with-core> E 893| matchedOptions = evalOptionValue loc opt defns'; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 894| unmatchedDefns = [ ]; clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:893:30: clan-pytest-with-core> E 892| { clan-pytest-with-core> E 893| matchedOptions = evalOptionValue loc opt defns'; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 894| unmatchedDefns = [ ]; clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'evalOptionValue' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1103:15: clan-pytest-with-core> E 1102| evalOptionValue = clan-pytest-with-core> E 1103| loc: opt: defs: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1104| let clan-pytest-with-core> E clan-pytest-with-core> E … in the left operand of the update (//) operator clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1148:5: clan-pytest-with-core> E 1147| warnDeprecation opt clan-pytest-with-core> E 1148| // { clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1149| value = addErrorContext "while evaluating the option `${showOption loc}':" value; 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1141:9: clan-pytest-with-core> E 1140| warnDeprecation = clan-pytest-with-core> E 1141| if (opt.type.deprecationMessage != null) then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1142| warn "The type `types.${opt.type.name}' of option `${showOption loc}' defined in ${showFiles opt.declarations} is deprecated. ${opt.type.deprecationMessage}" clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:890:19: clan-pytest-with-core> E 889| let clan-pytest-with-core> E 890| opt = fixupOptionType loc (mergeOptionDecls loc decls); clan-pytest-with-core> E | ^ clan-pytest-with-core> E 891| in clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'fixupOptionType' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1473:10: clan-pytest-with-core> E 1472| fixupOptionType = clan-pytest-with-core> E 1473| loc: opt: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1474| if opt.type.getSubModules or null == null then 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1474:5: clan-pytest-with-core> E 1473| loc: opt: clan-pytest-with-core> E 1474| if opt.type.getSubModules or null == null then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1475| opt // { type = opt.type or types.unspecified; } clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'type.getSubModules' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/nixos/modules/services/hardware/bluetooth.nix:72:9: clan-pytest-with-core> E 71| settings = mkOption { clan-pytest-with-core> E 72| type = cfgFmt.type; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 73| default = { }; clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/nixos/modules/services/hardware/bluetooth.nix:26:12: clan-pytest-with-core> E 25| clan-pytest-with-core> E 26| cfgFmt = pkgs.formats.ini { }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 27| clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:727:15: clan-pytest-with-core> E 726| extraArgs = mapAttrs ( clan-pytest-with-core> E 727| name: _: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 728| addErrorContext (context name) ( clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the module argument `pkgs' in "/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/nixos/modules/services/hardware/bluetooth.nix": clan-pytest-with-core> E clan-pytest-with-core> E … noting that argument `pkgs` is not externally provided, so querying `_module.args` instead, requiring `config` clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:731:13: clan-pytest-with-core> E 730| "noting that argument `${name}` is not externally provided, so querying `_module.args` instead, requiring `config`" clan-pytest-with-core> E 731| config._module.args.${name} clan-pytest-with-core> E | ^ clan-pytest-with-core> E 732| ) clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/types.nix:1029:18: clan-pytest-with-core> E 1028| value = mapAttrs ( clan-pytest-with-core> E 1029| n: v: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1030| if lazy then clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'optionalValue.value' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1312:5: clan-pytest-with-core> E 1311| clan-pytest-with-core> E 1312| optionalValue = if isDefined then { value = mergedValue; } else { }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1313| }; 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1312:21: clan-pytest-with-core> E 1311| clan-pytest-with-core> E 1312| optionalValue = if isDefined then { value = mergedValue; } else { }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1313| }; clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'values' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1240:11: clan-pytest-with-core> E 1239| { clan-pytest-with-core> E 1240| values = defsSorted; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1241| inherit (defsFiltered) highestPrio; 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1211:11: clan-pytest-with-core> E 1210| # Avoid sorting if we don't have to. clan-pytest-with-core> E 1211| if any (def: def.value._type or "" == "order") defsFiltered.values then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1212| sortProperties defsFiltered.values clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'any' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1211:14: clan-pytest-with-core> E 1210| # Avoid sorting if we don't have to. clan-pytest-with-core> E 1211| if any (def: def.value._type or "" == "order") defsFiltered.values then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1212| sortProperties defsFiltered.values clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1211:19: clan-pytest-with-core> E 1210| # Avoid sorting if we don't have to. clan-pytest-with-core> E 1211| if any (def: def.value._type or "" == "order") defsFiltered.values then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1212| sortProperties defsFiltered.values clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'value._type' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1422:67: clan-pytest-with-core> E 1421| strip = clan-pytest-with-core> E 1422| def: if def.value._type or "" == "override" then def // { value = def.value.content; } else def; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1423| in clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'value.content' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1566:22: clan-pytest-with-core> E 1565| _type = "override"; clan-pytest-with-core> E 1566| inherit priority content; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1567| }; 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/nixos/modules/misc/nixpkgs.nix:107:15: clan-pytest-with-core> E 106| clan-pytest-with-core> E 107| finalPkgs = if opt.pkgs.isDefined then cfg.pkgs.appendOverlays cfg.overlays else defaultPkgs; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 108| clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'pkgs.isDefined' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1154:21: clan-pytest-with-core> E 1153| definitionsWithLocations = res.defsFinal; clan-pytest-with-core> E 1154| inherit (res) isDefined; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1155| inherit (res.checkedAndMerged) valueMeta; clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'isDefined' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1310:5: clan-pytest-with-core> E 1309| clan-pytest-with-core> E 1310| isDefined = defsFinal != [ ]; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1311| clan-pytest-with-core> E clan-pytest-with-core> E (6 duplicate frames omitted) clan-pytest-with-core> E clan-pytest-with-core> E error: attribute 'system' missing clan-pytest-with-core> E at /build/store/nix/store/y3h139bhv4373m1hab367ma4p5i95i2f-source/modules/clan/module.nix:164:24: clan-pytest-with-core> E 163| (lib.modules.importApply ../../nixosModules/machineModules/overridePkgs.nix { clan-pytest-with-core> E 164| pkgs = nixpkgsMatrix.${config.inventory.machines.${name}.nixpkgs}.system.${system}.pkgs; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 165| }) clan-pytest-with-core> E Did you mean systems? 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 0x7fffe5adbe30> clan-pytest-with-core> flake_with_sops = clan-pytest-with-core> secret_upload_dir = '/custom/sops-secrets' clan-pytest-with-core> expected_relative_path = 'custom/sops-secrets' 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.parametrize( clan-pytest-with-core> ("secret_upload_dir", "expected_relative_path"), clan-pytest-with-core> [ clan-pytest-with-core> pytest.param(None, "var/lib/sops-nix", id="default"), clan-pytest-with-core> pytest.param("/custom/sops-secrets", "custom/sops-secrets", id="custom"), clan-pytest-with-core> ], clan-pytest-with-core> ) clan-pytest-with-core> def test_sops_install_secret_path( clan-pytest-with-core> monkeypatch: pytest.MonkeyPatch, clan-pytest-with-core> flake_with_sops: ClanFlake, clan-pytest-with-core> secret_upload_dir: str | None, clan-pytest-with-core> expected_relative_path: str, clan-pytest-with-core> ) -> None: clan-pytest-with-core> """Verify secrets are placed at configured secretUploadDirectory for nixos-anywhere.""" clan-pytest-with-core> config = flake_with_sops.machines["test_machine"] = create_test_machine_config() clan-pytest-with-core> if secret_upload_dir is not None: clan-pytest-with-core> config["clan"]["core"]["vars"]["sops"]["secretUploadDirectory"] = ( clan-pytest-with-core> secret_upload_dir clan-pytest-with-core> ) clan-pytest-with-core> generator = config["clan"]["core"]["vars"]["generators"]["my_generator"] clan-pytest-with-core> generator["files"]["my_secret"]["secret"] = True clan-pytest-with-core> generator["script"] = 'echo -n "test_secret_value" > "$out"/my_secret' clan-pytest-with-core> clan-pytest-with-core> flake_with_sops.refresh() clan-pytest-with-core> monkeypatch.chdir(flake_with_sops.path) clan-pytest-with-core> > cli.run(["vars", "generate", "--flake", str(flake_with_sops.path), "test_machine"]) clan-pytest-with-core> clan-pytest-with-core> /build/src/clan_cli/tests/test_install_secret_path.py:51: 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/vars/generate.py:33: in generate_command clan-pytest-with-core> run_generators( clan-pytest-with-core> /build/src/clan_lib/vars/generate.py:306: in run_generators clan-pytest-with-core> all_generators = get_generators(machines, full_closure=True) clan-pytest-with-core> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ clan-pytest-with-core> /build/src/clan_lib/vars/generate.py:146: in get_generators clan-pytest-with-core> flake.precache(get_generators_precache_selectors(list(all_machines))) clan-pytest-with-core> /build/src/clan_lib/flake/flake.py:1151: in precache clan-pytest-with-core> self.get_from_nix(not_fetched_selectors) clan-pytest-with-core> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ clan-pytest-with-core> clan-pytest-with-core> self = Flake(identifier='/build/pytest-rwtg58s9/flake', hash='sha256-N230gOZwWwBz+Fm9vkRGZ5Wn0EG7W2bbnKfh614lPvI=', 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.?secrets.?age.?plugins', 'clanInternals.machines.x86_64-linux.{test_machine}.config.clan.core.vars.gen...s.publicModule', 'clanInternals.machines.x86_64-linux.{test_machine}.config.clan.core.vars.settings.secretModule', ...] 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 while executing:$ clan select 'clanInternals.?secrets.?age.?plugins' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{test_machine}.config.clan.core.vars.generators.*.{share,dependencies,prompts,validationHash}' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{test_machine}.config.clan.core.vars.generators.*.files.*.{secret,deploy,owner,group,mode,neededFor}' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{test_machine}.config.clan.core.?sops.?defaultGroups' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{test_machine}.config.clan.core.vars.settings.publicModule' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{test_machine}.config.clan.core.vars.settings.secretModule' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{test_machine}.config.clan.core.vars.?sops.?secretUploadDirectory' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{test_machine}.config.clan.core.vars.?password-store.?passCommand' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{test_machine}.config.clan.core.vars.?password-store.?secretLocation' clan-pytest-with-core> E $ clan select 'clanInternals.vars.settings.?recipients' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{test_machine}.config.clan.core.vars.?age.?secretLocation' clan-pytest-with-core> E Reason: attribute 'system' missing clan-pytest-with-core> E at /build/store/nix/store/y3h139bhv4373m1hab367ma4p5i95i2f-source/modules/clan/module.nix:164:24: clan-pytest-with-core> E 163| (lib.modules.importApply ../../nixosModules/machineModules/overridePkgs.nix { clan-pytest-with-core> E 164| pkgs = nixpkgsMatrix.${config.inventory.machines.${name}.nixpkgs}.system.${system}.pkgs; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 165| }) clan-pytest-with-core> E Did you mean systems?. 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 setup ----------------------------- clan-pytest-with-core> !! $HOME does not point to a temp directory!! HOME=/build/pytest-rwtg58s9 clan-pytest-with-core> [localhost] $ clan vars keygen --flake /build/pytest-rwtg58s9/flake --user admin --no-interactive clan-pytest-with-core> Caller: /build/src/clan_cli/tests/age_keys.py:31::init clan-pytest-with-core> clan-pytest-with-core> Prefetching flake /build/pytest-rwtg58s9/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/febbcab65441be6ccc547560fd0155faadebbbb7 clan-pytest-with-core> (cached) $ clan select clanInternals.inventoryClass.relativeDirectory 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> git \ clan-pytest-with-core> -C /build/pytest-rwtg58s9/flake \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-rwtg58s9/flake/sops/users/admin 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/admin to git clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-rwtg58s9/flake \ clan-pytest-with-core> diff \ clan-pytest-with-core> --cached --exit-code \ clan-pytest-with-core> -- /build/pytest-rwtg58s9/flake/sops/users/admin 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-rwtg58s9/flake \ clan-pytest-with-core> commit \ clan-pytest-with-core> -m 'secrets: add user admin' \ clan-pytest-with-core> --no-verify /build/pytest-rwtg58s9/flake/sops/users/admin 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/admin to git 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/pytest-rwtg58s9 clan-pytest-with-core> DEBUG clan_cli.tests.helpers.cli:__init__.py:143 $ clan vars keygen --flake /build/pytest-rwtg58s9/flake --user admin --no-interactive clan-pytest-with-core> Caller: /build/src/clan_cli/tests/age_keys.py:31::init clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:927 Prefetching flake /build/pytest-rwtg58s9/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/febbcab65441be6ccc547560fd0155faadebbbb7 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.cmd:__init__.py:143 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> DEBUG clan_lib.cmd:__init__.py:143 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> DEBUG clan_cli.secrets.sops:sops.py:99 Found age public key from a private key in the environment (SOPS_AGE_KEY): age1dhwqzkah943xzc34tc3dlmfayyevcmdmxzjezdgdy33euxwf59vsp3vk3c clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:143 git \ clan-pytest-with-core> -C /build/pytest-rwtg58s9/flake \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-rwtg58s9/flake/sops/users/admin 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> DEBUG clan_lib.cmd:__init__.py:143 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> DEBUG clan_lib.git:__init__.py:98 Adding sops/users/admin to git clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:143 git \ clan-pytest-with-core> -C /build/pytest-rwtg58s9/flake \ clan-pytest-with-core> diff \ clan-pytest-with-core> --cached --exit-code \ clan-pytest-with-core> -- /build/pytest-rwtg58s9/flake/sops/users/admin 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> DEBUG clan_lib.cmd:__init__.py:143 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> DEBUG clan_lib.cmd:__init__.py:143 git \ clan-pytest-with-core> -C /build/pytest-rwtg58s9/flake \ clan-pytest-with-core> commit \ clan-pytest-with-core> -m 'secrets: add user admin' \ clan-pytest-with-core> --no-verify /build/pytest-rwtg58s9/flake/sops/users/admin 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> DEBUG clan_lib.cmd:__init__.py:143 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> INFO clan_lib.git:__init__.py:141 Committed sops/users/admin to git clan-pytest-with-core> ----------------------------- Captured stdout call ----------------------------- clan-pytest-with-core> [main 0483d1a] flake: update by flake generator clan-pytest-with-core> 2 files changed, 37 insertions(+) clan-pytest-with-core> create mode 100644 machines/test_machine/configuration.json clan-pytest-with-core> create mode 100644 machines/test_machine/configuration.nix clan-pytest-with-core> ----------------------------- Captured stderr call ----------------------------- clan-pytest-with-core> Prefetching flake /build/pytest-rwtg58s9/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/d2c0050d97832c3ac5193485b93705d00938c15e clan-pytest-with-core> (cached) $ clan select clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> [localhost] $ clan vars generate --flake /build/pytest-rwtg58s9/flake test_machine clan-pytest-with-core> Caller: /build/src/clan_cli/tests/test_install_secret_path.py:51::test_sops_install_secret_path clan-pytest-with-core> clan-pytest-with-core> Prefetching flake /build/pytest-rwtg58s9/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.cliChecks clan-pytest-with-core> Cache miss for clanInternals.inventoryClass.inventorySerialization.{instances,machines,meta} clan-pytest-with-core> Loading flake cache from file /build/clan-flake-cache/flakes-v2/43053f10ae91c94d57991dbe7017352b66be3bc9 clan-pytest-with-core> Cache miss for clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> Loading flake cache from file /build/clan-flake-cache/flakes-v2/43053f10ae91c94d57991dbe7017352b66be3bc9 clan-pytest-with-core> (cached) $ clan select 'clanInternals.inventoryClass.inventorySerialization.{instances,machines,meta}' clan-pytest-with-core> Precaching selectors: clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.machines clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.instances clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.meta clan-pytest-with-core> - (not cached) clanInternals.?secrets.?age.?plugins clan-pytest-with-core> - (cached) clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{test_machine}.config.clan.core.vars.generators.*.{share,dependencies,prompts,validationHash} clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{test_machine}.config.clan.core.vars.generators.*.files.*.{secret,deploy,owner,group,mode,neededFor} clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{test_machine}.config.clan.core.?sops.?defaultGroups clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{test_machine}.config.clan.core.vars.settings.publicModule clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{test_machine}.config.clan.core.vars.settings.secretModule clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{test_machine}.config.clan.core.vars.?sops.?secretUploadDirectory clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{test_machine}.config.clan.core.vars.?password-store.?passCommand clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{test_machine}.config.clan.core.vars.?password-store.?secretLocation clan-pytest-with-core> - (not cached) clanInternals.vars.settings.?recipients clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{test_machine}.config.clan.core.vars.?age.?secretLocation clan-pytest-with-core> ------------------------------ Captured log call ------------------------------- clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:927 Prefetching flake /build/pytest-rwtg58s9/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/d2c0050d97832c3ac5193485b93705d00938c15e clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1179 (cached) $ clan select clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> DEBUG clan_cli.tests.helpers.cli:__init__.py:143 $ clan vars generate --flake /build/pytest-rwtg58s9/flake test_machine clan-pytest-with-core> Caller: /build/src/clan_cli/tests/test_install_secret_path.py:51::test_sops_install_secret_path clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:927 Prefetching flake /build/pytest-rwtg58s9/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.cliChecks clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1174 Cache miss for clanInternals.inventoryClass.inventorySerialization.{instances,machines,meta} clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:789 Loading flake cache from file /build/clan-flake-cache/flakes-v2/43053f10ae91c94d57991dbe7017352b66be3bc9 clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1174 Cache miss for clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:789 Loading flake cache from file /build/clan-flake-cache/flakes-v2/43053f10ae91c94d57991dbe7017352b66be3bc9 clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1179 (cached) $ clan select 'clanInternals.inventoryClass.inventorySerialization.{instances,machines,meta}' clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1144 Precaching selectors: clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.machines clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.instances clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.meta clan-pytest-with-core> - (not cached) clanInternals.?secrets.?age.?plugins clan-pytest-with-core> - (cached) clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{test_machine}.config.clan.core.vars.generators.*.{share,dependencies,prompts,validationHash} clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{test_machine}.config.clan.core.vars.generators.*.files.*.{secret,deploy,owner,group,mode,neededFor} clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{test_machine}.config.clan.core.?sops.?defaultGroups clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{test_machine}.config.clan.core.vars.settings.publicModule clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{test_machine}.config.clan.core.vars.settings.secretModule clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{test_machine}.config.clan.core.vars.?sops.?secretUploadDirectory clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{test_machine}.config.clan.core.vars.?password-store.?passCommand clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{test_machine}.config.clan.core.vars.?password-store.?secretLocation clan-pytest-with-core> - (not cached) clanInternals.vars.settings.?recipients clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{test_machine}.config.clan.core.vars.?age.?secretLocation clan-pytest-with-core> ________________ test_password_store_upload_directory[default] _________________ clan-pytest-with-core> [gw6] linux -- Python 3.14.7 /nix/store/3n4qphl9s728sz8frmpqqrv9b1m87g68-python3-3.14.7/bin/python clan-pytest-with-core> clan-pytest-with-core> self = Flake(identifier='/build/pytest-0bw4go06/flake', hash='sha256-+T3M/5afjf9NfgwDLOujHb4bhBWL01MYPePjJaAdBZU=', 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.machines.x86_64-linux."test_machine".config.clan.core.vars.settings.secretModule'] 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-0bw4go06/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/f061xlwwk51ld7lv21iz926mdq444hjq-source?narHash=sha256-+T3M/5afjf9NfgwDLOujHb4bhBWL01MYPePjJaAdBZU="; 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": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "str", "value": "test_machine"}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "secretModule"}]'"'"''"'"') 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": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "str", "value": "test_machine"}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "secretModule"}]'') 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": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "str", "value": "test_machine"}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "secretModule"}]'') 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": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "str", "value": "test_machine"}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "secretModule"}]'') 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 … from call site clan-pytest-with-core> E at /build/store/nix/store/cba1x9mxnwr8b36cw41bya7g6d5v1p7d-source/select.nix:312:15: clan-pytest-with-core> E 311| else if selector.type == "str" then clan-pytest-with-core> E 312| recurse selectors (idx + 1) (builtins.getAttr selector.value obj) clan-pytest-with-core> E | ^ clan-pytest-with-core> E 313| else if selector.type == "set" then clan-pytest-with-core> E clan-pytest-with-core> E (9 duplicate frames omitted) 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 'getAttr' builtin clan-pytest-with-core> E at /build/store/nix/store/cba1x9mxnwr8b36cw41bya7g6d5v1p7d-source/select.nix:312:44: clan-pytest-with-core> E 311| else if selector.type == "str" then clan-pytest-with-core> E 312| recurse selectors (idx + 1) (builtins.getAttr selector.value obj) clan-pytest-with-core> E | ^ clan-pytest-with-core> E 313| else if selector.type == "set" then clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'seq' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:401:18: clan-pytest-with-core> E 400| options = checked options; clan-pytest-with-core> E 401| config = checked (removeAttrs config [ "_module" ]); clan-pytest-with-core> E | ^ clan-pytest-with-core> E 402| _module = checked (config._module); 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:304:9: clan-pytest-with-core> E 303| checkUnmatched = clan-pytest-with-core> E 304| if config._module.check && config._module.freeformType == null && merged.unmatchedDefns != [ ] then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 305| let clan-pytest-with-core> E clan-pytest-with-core> E … in the right operand of the AND (&&) operator clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:304:72: clan-pytest-with-core> E 303| checkUnmatched = clan-pytest-with-core> E 304| if config._module.check && config._module.freeformType == null && merged.unmatchedDefns != [ ] then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 305| let clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'unmatchedDefns' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:940:7: clan-pytest-with-core> E 939| # Transforms unmatchedDefnsByName into a list of definitions clan-pytest-with-core> E 940| unmatchedDefns = clan-pytest-with-core> E | ^ clan-pytest-with-core> E 941| if configs == [ ] then clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'concatLists' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:946:11: clan-pytest-with-core> E 945| else clan-pytest-with-core> E 946| concatLists ( clan-pytest-with-core> E | ^ clan-pytest-with-core> E 947| mapAttrsToList ( clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:948:21: clan-pytest-with-core> E 947| mapAttrsToList ( clan-pytest-with-core> E 948| name: defs: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 949| map ( clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'map' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:949:15: clan-pytest-with-core> E 948| name: defs: clan-pytest-with-core> E 949| map ( clan-pytest-with-core> E | ^ clan-pytest-with-core> E 950| def: clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:932:22: clan-pytest-with-core> E 931| # Propagate all unmatched definitions from nested option sets clan-pytest-with-core> E 932| mapAttrs (n: v: v.unmatchedDefns) resultsByName clan-pytest-with-core> E | ^ clan-pytest-with-core> E 933| # Plus the definitions for the current prefix that don't have a matching option clan-pytest-with-core> E clan-pytest-with-core> E (10 duplicate frames omitted) clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:932:25: clan-pytest-with-core> E 931| # Propagate all unmatched definitions from nested option sets clan-pytest-with-core> E 932| mapAttrs (n: v: v.unmatchedDefns) resultsByName clan-pytest-with-core> E | ^ clan-pytest-with-core> E 933| # Plus the definitions for the current prefix that don't have a matching option clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:876:15: clan-pytest-with-core> E 875| resultsByName = mapAttrs ( clan-pytest-with-core> E 876| name: decls: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 877| # We're descending into attribute ‘name’. 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:888:9: clan-pytest-with-core> E 887| in clan-pytest-with-core> E 888| if length optionDecls == length decls then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 889| let clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'length' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:888:12: clan-pytest-with-core> E 887| in clan-pytest-with-core> E 888| if length optionDecls == length decls then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 889| let clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'filter' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:882:25: clan-pytest-with-core> E 881| defns' = rawDefinitionsByName.${name} or [ ]; clan-pytest-with-core> E 882| optionDecls = filter ( clan-pytest-with-core> E | ^ clan-pytest-with-core> E 883| m: clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:883:13: clan-pytest-with-core> E 882| optionDecls = filter ( clan-pytest-with-core> E 883| m: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 884| m.options ? _type clan-pytest-with-core> E clan-pytest-with-core> E … in the left operand of the AND (&&) operator clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:885:13: clan-pytest-with-core> E 884| m.options ? _type clan-pytest-with-core> E 885| && (m.options._type == "option" || throwDeclarationTypeError loc m.options._type m._file) clan-pytest-with-core> E | ^ clan-pytest-with-core> E 886| ) decls; clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'options' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:807:15: clan-pytest-with-core> E 806| pos = unsafeGetAttrPos n subtree; clan-pytest-with-core> E 807| options = option; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 808| }) subtree clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:289:73: clan-pytest-with-core> E 288| len = length attrPath; clan-pytest-with-core> E 289| atDepth = n: if n == len then value else { ${elemAt attrPath n} = atDepth (n + 1); }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 290| in clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'atDepth' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:289:17: clan-pytest-with-core> E 288| len = length attrPath; clan-pytest-with-core> E 289| atDepth = n: if n == len then value else { ${elemAt attrPath n} = atDepth (n + 1); }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 290| in clan-pytest-with-core> E clan-pytest-with-core> E … in the right operand of the update (//) operator clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:2047:9: clan-pytest-with-core> E 2046| } clan-pytest-with-core> E 2047| // optionalAttrs (toType != null) { clan-pytest-with-core> E | ^ clan-pytest-with-core> E 2048| type = toType; clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:2047:12: clan-pytest-with-core> E 2046| } clan-pytest-with-core> E 2047| // optionalAttrs (toType != null) { clan-pytest-with-core> E | ^ clan-pytest-with-core> E 2048| type = toType; clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'optionalAttrs' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:1492:25: clan-pytest-with-core> E 1491| */ clan-pytest-with-core> E 1492| optionalAttrs = cond: as: if cond then as else { }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1493| 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:1492:29: clan-pytest-with-core> E 1491| */ clan-pytest-with-core> E 1492| optionalAttrs = cond: as: if cond then as else { }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1493| clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:2036:17: clan-pytest-with-core> E 2035| let clan-pytest-with-core> E 2036| opt = attrByPath to { } options; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 2037| in clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'attrByPath' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:89:24: clan-pytest-with-core> E 88| attrByPath = clan-pytest-with-core> E 89| attrPath: default: set: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 90| let clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:106:5: clan-pytest-with-core> E 105| in clan-pytest-with-core> E 106| attrByPath' 0 set; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 107| clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'attrByPath'' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:93:12: clan-pytest-with-core> E 92| attrByPath' = clan-pytest-with-core> E 93| n: s: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 94| ( clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:102:35: clan-pytest-with-core> E 101| in clan-pytest-with-core> E 102| if s ? ${attr} then attrByPath' (n + 1) s.${attr} else default clan-pytest-with-core> E | ^ clan-pytest-with-core> E 103| ) clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'attrByPath'' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:93:12: clan-pytest-with-core> E 92| attrByPath' = clan-pytest-with-core> E 93| n: s: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 94| ( clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:102:35: clan-pytest-with-core> E 101| in clan-pytest-with-core> E 102| if s ? ${attr} then attrByPath' (n + 1) s.${attr} else default clan-pytest-with-core> E | ^ clan-pytest-with-core> E 103| ) clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'attrByPath'' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:93:12: clan-pytest-with-core> E 92| attrByPath' = clan-pytest-with-core> E 93| n: s: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 94| ( clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:102:35: clan-pytest-with-core> E 101| in clan-pytest-with-core> E 102| if s ? ${attr} then attrByPath' (n + 1) s.${attr} else default clan-pytest-with-core> E | ^ clan-pytest-with-core> E 103| ) clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'attrByPath'' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:93:12: clan-pytest-with-core> E 92| attrByPath' = clan-pytest-with-core> E 93| n: s: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 94| ( clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:102:55: clan-pytest-with-core> E 101| in clan-pytest-with-core> E 102| if s ? ${attr} then attrByPath' (n + 1) s.${attr} else default clan-pytest-with-core> E | ^ clan-pytest-with-core> E 103| ) clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:927:37: clan-pytest-with-core> E 926| clan-pytest-with-core> E 927| matchedOptions = mapAttrs (n: v: v.matchedOptions) resultsByName; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 928| clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'matchedOptions' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:893:13: clan-pytest-with-core> E 892| { clan-pytest-with-core> E 893| matchedOptions = evalOptionValue loc opt defns'; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 894| unmatchedDefns = [ ]; clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:893:30: clan-pytest-with-core> E 892| { clan-pytest-with-core> E 893| matchedOptions = evalOptionValue loc opt defns'; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 894| unmatchedDefns = [ ]; clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'evalOptionValue' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1103:15: clan-pytest-with-core> E 1102| evalOptionValue = clan-pytest-with-core> E 1103| loc: opt: defs: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1104| let clan-pytest-with-core> E clan-pytest-with-core> E … in the left operand of the update (//) operator clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1148:5: clan-pytest-with-core> E 1147| warnDeprecation opt clan-pytest-with-core> E 1148| // { clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1149| value = addErrorContext "while evaluating the option `${showOption loc}':" value; 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1141:9: clan-pytest-with-core> E 1140| warnDeprecation = clan-pytest-with-core> E 1141| if (opt.type.deprecationMessage != null) then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1142| warn "The type `types.${opt.type.name}' of option `${showOption loc}' defined in ${showFiles opt.declarations} is deprecated. ${opt.type.deprecationMessage}" clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:890:19: clan-pytest-with-core> E 889| let clan-pytest-with-core> E 890| opt = fixupOptionType loc (mergeOptionDecls loc decls); clan-pytest-with-core> E | ^ clan-pytest-with-core> E 891| in clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'fixupOptionType' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1473:10: clan-pytest-with-core> E 1472| fixupOptionType = clan-pytest-with-core> E 1473| loc: opt: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1474| if opt.type.getSubModules or null == null then 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1474:5: clan-pytest-with-core> E 1473| loc: opt: clan-pytest-with-core> E 1474| if opt.type.getSubModules or null == null then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1475| opt // { type = opt.type or types.unspecified; } clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'type.getSubModules' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/nixos/modules/services/hardware/bluetooth.nix:72:9: clan-pytest-with-core> E 71| settings = mkOption { clan-pytest-with-core> E 72| type = cfgFmt.type; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 73| default = { }; clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/nixos/modules/services/hardware/bluetooth.nix:26:12: clan-pytest-with-core> E 25| clan-pytest-with-core> E 26| cfgFmt = pkgs.formats.ini { }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 27| clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:727:15: clan-pytest-with-core> E 726| extraArgs = mapAttrs ( clan-pytest-with-core> E 727| name: _: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 728| addErrorContext (context name) ( clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the module argument `pkgs' in "/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/nixos/modules/services/hardware/bluetooth.nix": clan-pytest-with-core> E clan-pytest-with-core> E … noting that argument `pkgs` is not externally provided, so querying `_module.args` instead, requiring `config` clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:731:13: clan-pytest-with-core> E 730| "noting that argument `${name}` is not externally provided, so querying `_module.args` instead, requiring `config`" clan-pytest-with-core> E 731| config._module.args.${name} clan-pytest-with-core> E | ^ clan-pytest-with-core> E 732| ) clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/types.nix:1029:18: clan-pytest-with-core> E 1028| value = mapAttrs ( clan-pytest-with-core> E 1029| n: v: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1030| if lazy then clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'optionalValue.value' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1312:5: clan-pytest-with-core> E 1311| clan-pytest-with-core> E 1312| optionalValue = if isDefined then { value = mergedValue; } else { }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1313| }; 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1312:21: clan-pytest-with-core> E 1311| clan-pytest-with-core> E 1312| optionalValue = if isDefined then { value = mergedValue; } else { }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1313| }; clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'values' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1240:11: clan-pytest-with-core> E 1239| { clan-pytest-with-core> E 1240| values = defsSorted; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1241| inherit (defsFiltered) highestPrio; 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1211:11: clan-pytest-with-core> E 1210| # Avoid sorting if we don't have to. clan-pytest-with-core> E 1211| if any (def: def.value._type or "" == "order") defsFiltered.values then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1212| sortProperties defsFiltered.values clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'any' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1211:14: clan-pytest-with-core> E 1210| # Avoid sorting if we don't have to. clan-pytest-with-core> E 1211| if any (def: def.value._type or "" == "order") defsFiltered.values then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1212| sortProperties defsFiltered.values clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1211:19: clan-pytest-with-core> E 1210| # Avoid sorting if we don't have to. clan-pytest-with-core> E 1211| if any (def: def.value._type or "" == "order") defsFiltered.values then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1212| sortProperties defsFiltered.values clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'value._type' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1422:67: clan-pytest-with-core> E 1421| strip = clan-pytest-with-core> E 1422| def: if def.value._type or "" == "override" then def // { value = def.value.content; } else def; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1423| in clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'value.content' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1566:22: clan-pytest-with-core> E 1565| _type = "override"; clan-pytest-with-core> E 1566| inherit priority content; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1567| }; 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/nixos/modules/misc/nixpkgs.nix:107:15: clan-pytest-with-core> E 106| clan-pytest-with-core> E 107| finalPkgs = if opt.pkgs.isDefined then cfg.pkgs.appendOverlays cfg.overlays else defaultPkgs; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 108| clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'pkgs.isDefined' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1154:21: clan-pytest-with-core> E 1153| definitionsWithLocations = res.defsFinal; clan-pytest-with-core> E 1154| inherit (res) isDefined; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1155| inherit (res.checkedAndMerged) valueMeta; clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'isDefined' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1310:5: clan-pytest-with-core> E 1309| clan-pytest-with-core> E 1310| isDefined = defsFinal != [ ]; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1311| clan-pytest-with-core> E clan-pytest-with-core> E (6 duplicate frames omitted) clan-pytest-with-core> E clan-pytest-with-core> E error: attribute 'system' missing clan-pytest-with-core> E at /build/store/nix/store/y3h139bhv4373m1hab367ma4p5i95i2f-source/modules/clan/module.nix:164:24: clan-pytest-with-core> E 163| (lib.modules.importApply ../../nixosModules/machineModules/overridePkgs.nix { clan-pytest-with-core> E 164| pkgs = nixpkgsMatrix.${config.inventory.machines.${name}.nixpkgs}.system.${system}.pkgs; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 165| }) clan-pytest-with-core> E Did you mean systems? 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 0x7fffe62bcc90> clan-pytest-with-core> flake = clan-pytest-with-core> secret_location = None, expected_path = '/etc/secret-vars' 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.parametrize( clan-pytest-with-core> ("secret_location", "expected_path"), clan-pytest-with-core> [ clan-pytest-with-core> pytest.param(None, "/etc/secret-vars", id="default"), clan-pytest-with-core> pytest.param("/etc/pass-secrets", "/etc/pass-secrets", id="custom"), clan-pytest-with-core> ], clan-pytest-with-core> ) clan-pytest-with-core> def test_password_store_upload_directory( clan-pytest-with-core> monkeypatch: pytest.MonkeyPatch, clan-pytest-with-core> flake: ClanFlake, clan-pytest-with-core> secret_location: str | None, clan-pytest-with-core> expected_path: str, clan-pytest-with-core> ) -> None: clan-pytest-with-core> """Verify get_upload_directory returns configured secretLocation.""" clan-pytest-with-core> config = flake.machines["test_machine"] = create_test_machine_config() clan-pytest-with-core> config["clan"]["core"]["vars"]["settings"]["secretStore"] = "password-store" clan-pytest-with-core> if secret_location is not None: clan-pytest-with-core> config["clan"]["core"]["vars"]["password-store"]["secretLocation"] = ( clan-pytest-with-core> secret_location clan-pytest-with-core> ) clan-pytest-with-core> clan-pytest-with-core> flake.refresh() clan-pytest-with-core> monkeypatch.chdir(flake.path) clan-pytest-with-core> clan-pytest-with-core> machine = Machine(name="test_machine", flake=Flake(str(flake.path))) clan-pytest-with-core> > assert machine.secret_vars_store.get_upload_directory(machine.name) == expected_path clan-pytest-with-core> ^^^^^^^^^^^^^^^^^^^^^^^^^ clan-pytest-with-core> clan-pytest-with-core> /build/src/clan_cli/tests/test_install_secret_path.py:110: clan-pytest-with-core> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ clan-pytest-with-core> /nix/store/3n4qphl9s728sz8frmpqqrv9b1m87g68-python3-3.14.7/lib/python3.14/functools.py:1126: in __get__ clan-pytest-with-core> val = self.func(instance) clan-pytest-with-core> ^^^^^^^^^^^^^^^^^^^ clan-pytest-with-core> /build/src/clan_lib/machines/machines.py:95: in secret_vars_store clan-pytest-with-core> secret_module = self.flake.select( 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-0bw4go06/flake', hash='sha256-+T3M/5afjf9NfgwDLOujHb4bhBWL01MYPePjJaAdBZU=', 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.machines.x86_64-linux."test_machine".config.clan.core.vars.settings.secretModule'] 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.machines.x86_64-linux."test_machine".config.clan.core.vars.settings.secretModule' clan-pytest-with-core> E Reason: attribute 'system' missing clan-pytest-with-core> E at /build/store/nix/store/y3h139bhv4373m1hab367ma4p5i95i2f-source/modules/clan/module.nix:164:24: clan-pytest-with-core> E 163| (lib.modules.importApply ../../nixosModules/machineModules/overridePkgs.nix { clan-pytest-with-core> E 164| pkgs = nixpkgsMatrix.${config.inventory.machines.${name}.nixpkgs}.system.${system}.pkgs; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 165| }) clan-pytest-with-core> E Did you mean systems?. 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 setup ----------------------------- clan-pytest-with-core> !! $HOME does not point to a temp directory!! HOME=/build/pytest-0bw4go06 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/pytest-0bw4go06 clan-pytest-with-core> ----------------------------- Captured stdout call ----------------------------- clan-pytest-with-core> [main 5a41ee7] flake: update by flake generator clan-pytest-with-core> 2 files changed, 27 insertions(+) clan-pytest-with-core> create mode 100644 machines/test_machine/configuration.json clan-pytest-with-core> create mode 100644 machines/test_machine/configuration.nix clan-pytest-with-core> ----------------------------- Captured stderr call ----------------------------- clan-pytest-with-core> Prefetching flake /build/pytest-0bw4go06/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/febbcab65441be6ccc547560fd0155faadebbbb7 clan-pytest-with-core> (cached) $ clan select clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> Prefetching flake /build/pytest-0bw4go06/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.machines.x86_64-linux."test_machine".config.clan.core.vars.settings.secretModule clan-pytest-with-core> ------------------------------ Captured log call ------------------------------- clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:927 Prefetching flake /build/pytest-0bw4go06/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/febbcab65441be6ccc547560fd0155faadebbbb7 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-0bw4go06/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.machines.x86_64-linux."test_machine".config.clan.core.vars.settings.secretModule clan-pytest-with-core> --------------------------- Captured stdout teardown --------------------------- clan-pytest-with-core> FAILED [ 3%] clan-pytest-with-core> ___________________________ test_machine_subcommands ___________________________ clan-pytest-with-core> [gw13] linux -- Python 3.14.7 /nix/store/3n4qphl9s728sz8frmpqqrv9b1m87g68-python3-3.14.7/bin/python clan-pytest-with-core> clan-pytest-with-core> self = Flake(identifier='/build/pytest-75mc4nfk/test_flake_with_core', hash='sha256-s/2SklzNaoWCvUkmxM+PUdCPCeDHEC2v/mW/tFHZA...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.machines.x86_64-linux."machine1".config.clan.core.vars.settings.publicModule'] 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-75mc4nfk'), 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/cv1jf3v92xq28laqzfkmqg38aa09bcjj-source?narHash=sha256-s/2SklzNaoWCvUkmxM+PUdCPCeDHEC2v/mW/tFHZA7o="; 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": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "str", "value": "machine1"}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "publicModule"}]'"'"''"'"') 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": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "str", "value": "machine1"}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "publicModule"}]'') 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": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "str", "value": "machine1"}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "publicModule"}]'') 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": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "str", "value": "machine1"}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "publicModule"}]'') 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 … from call site clan-pytest-with-core> E at /build/store/nix/store/cba1x9mxnwr8b36cw41bya7g6d5v1p7d-source/select.nix:312:15: clan-pytest-with-core> E 311| else if selector.type == "str" then clan-pytest-with-core> E 312| recurse selectors (idx + 1) (builtins.getAttr selector.value obj) clan-pytest-with-core> E | ^ clan-pytest-with-core> E 313| else if selector.type == "set" then clan-pytest-with-core> E clan-pytest-with-core> E (9 duplicate frames omitted) 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 'getAttr' builtin clan-pytest-with-core> E at /build/store/nix/store/cba1x9mxnwr8b36cw41bya7g6d5v1p7d-source/select.nix:312:44: clan-pytest-with-core> E 311| else if selector.type == "str" then clan-pytest-with-core> E 312| recurse selectors (idx + 1) (builtins.getAttr selector.value obj) clan-pytest-with-core> E | ^ clan-pytest-with-core> E 313| else if selector.type == "set" then clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'seq' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:401:18: clan-pytest-with-core> E 400| options = checked options; clan-pytest-with-core> E 401| config = checked (removeAttrs config [ "_module" ]); clan-pytest-with-core> E | ^ clan-pytest-with-core> E 402| _module = checked (config._module); 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:304:9: clan-pytest-with-core> E 303| checkUnmatched = clan-pytest-with-core> E 304| if config._module.check && config._module.freeformType == null && merged.unmatchedDefns != [ ] then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 305| let clan-pytest-with-core> E clan-pytest-with-core> E … in the right operand of the AND (&&) operator clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:304:72: clan-pytest-with-core> E 303| checkUnmatched = clan-pytest-with-core> E 304| if config._module.check && config._module.freeformType == null && merged.unmatchedDefns != [ ] then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 305| let clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'unmatchedDefns' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:940:7: clan-pytest-with-core> E 939| # Transforms unmatchedDefnsByName into a list of definitions clan-pytest-with-core> E 940| unmatchedDefns = clan-pytest-with-core> E | ^ clan-pytest-with-core> E 941| if configs == [ ] then clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'concatLists' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:946:11: clan-pytest-with-core> E 945| else clan-pytest-with-core> E 946| concatLists ( clan-pytest-with-core> E | ^ clan-pytest-with-core> E 947| mapAttrsToList ( clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:948:21: clan-pytest-with-core> E 947| mapAttrsToList ( clan-pytest-with-core> E 948| name: defs: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 949| map ( clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'map' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:949:15: clan-pytest-with-core> E 948| name: defs: clan-pytest-with-core> E 949| map ( clan-pytest-with-core> E | ^ clan-pytest-with-core> E 950| def: clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:932:22: clan-pytest-with-core> E 931| # Propagate all unmatched definitions from nested option sets clan-pytest-with-core> E 932| mapAttrs (n: v: v.unmatchedDefns) resultsByName clan-pytest-with-core> E | ^ clan-pytest-with-core> E 933| # Plus the definitions for the current prefix that don't have a matching option clan-pytest-with-core> E clan-pytest-with-core> E (10 duplicate frames omitted) clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:932:25: clan-pytest-with-core> E 931| # Propagate all unmatched definitions from nested option sets clan-pytest-with-core> E 932| mapAttrs (n: v: v.unmatchedDefns) resultsByName clan-pytest-with-core> E | ^ clan-pytest-with-core> E 933| # Plus the definitions for the current prefix that don't have a matching option clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:876:15: clan-pytest-with-core> E 875| resultsByName = mapAttrs ( clan-pytest-with-core> E 876| name: decls: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 877| # We're descending into attribute ‘name’. 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:888:9: clan-pytest-with-core> E 887| in clan-pytest-with-core> E 888| if length optionDecls == length decls then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 889| let clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'length' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:888:12: clan-pytest-with-core> E 887| in clan-pytest-with-core> E 888| if length optionDecls == length decls then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 889| let clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'filter' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:882:25: clan-pytest-with-core> E 881| defns' = rawDefinitionsByName.${name} or [ ]; clan-pytest-with-core> E 882| optionDecls = filter ( clan-pytest-with-core> E | ^ clan-pytest-with-core> E 883| m: clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:883:13: clan-pytest-with-core> E 882| optionDecls = filter ( clan-pytest-with-core> E 883| m: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 884| m.options ? _type clan-pytest-with-core> E clan-pytest-with-core> E … in the left operand of the AND (&&) operator clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:885:13: clan-pytest-with-core> E 884| m.options ? _type clan-pytest-with-core> E 885| && (m.options._type == "option" || throwDeclarationTypeError loc m.options._type m._file) clan-pytest-with-core> E | ^ clan-pytest-with-core> E 886| ) decls; clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'options' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:807:15: clan-pytest-with-core> E 806| pos = unsafeGetAttrPos n subtree; clan-pytest-with-core> E 807| options = option; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 808| }) subtree clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:289:73: clan-pytest-with-core> E 288| len = length attrPath; clan-pytest-with-core> E 289| atDepth = n: if n == len then value else { ${elemAt attrPath n} = atDepth (n + 1); }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 290| in clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'atDepth' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:289:17: clan-pytest-with-core> E 288| len = length attrPath; clan-pytest-with-core> E 289| atDepth = n: if n == len then value else { ${elemAt attrPath n} = atDepth (n + 1); }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 290| in clan-pytest-with-core> E clan-pytest-with-core> E … in the right operand of the update (//) operator clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:2047:9: clan-pytest-with-core> E 2046| } clan-pytest-with-core> E 2047| // optionalAttrs (toType != null) { clan-pytest-with-core> E | ^ clan-pytest-with-core> E 2048| type = toType; clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:2047:12: clan-pytest-with-core> E 2046| } clan-pytest-with-core> E 2047| // optionalAttrs (toType != null) { clan-pytest-with-core> E | ^ clan-pytest-with-core> E 2048| type = toType; clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'optionalAttrs' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:1492:25: clan-pytest-with-core> E 1491| */ clan-pytest-with-core> E 1492| optionalAttrs = cond: as: if cond then as else { }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1493| 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:1492:29: clan-pytest-with-core> E 1491| */ clan-pytest-with-core> E 1492| optionalAttrs = cond: as: if cond then as else { }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1493| clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:2036:17: clan-pytest-with-core> E 2035| let clan-pytest-with-core> E 2036| opt = attrByPath to { } options; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 2037| in clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'attrByPath' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:89:24: clan-pytest-with-core> E 88| attrByPath = clan-pytest-with-core> E 89| attrPath: default: set: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 90| let clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:106:5: clan-pytest-with-core> E 105| in clan-pytest-with-core> E 106| attrByPath' 0 set; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 107| clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'attrByPath'' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:93:12: clan-pytest-with-core> E 92| attrByPath' = clan-pytest-with-core> E 93| n: s: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 94| ( clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:102:35: clan-pytest-with-core> E 101| in clan-pytest-with-core> E 102| if s ? ${attr} then attrByPath' (n + 1) s.${attr} else default clan-pytest-with-core> E | ^ clan-pytest-with-core> E 103| ) clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'attrByPath'' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:93:12: clan-pytest-with-core> E 92| attrByPath' = clan-pytest-with-core> E 93| n: s: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 94| ( clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:102:35: clan-pytest-with-core> E 101| in clan-pytest-with-core> E 102| if s ? ${attr} then attrByPath' (n + 1) s.${attr} else default clan-pytest-with-core> E | ^ clan-pytest-with-core> E 103| ) clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'attrByPath'' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:93:12: clan-pytest-with-core> E 92| attrByPath' = clan-pytest-with-core> E 93| n: s: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 94| ( clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:102:35: clan-pytest-with-core> E 101| in clan-pytest-with-core> E 102| if s ? ${attr} then attrByPath' (n + 1) s.${attr} else default clan-pytest-with-core> E | ^ clan-pytest-with-core> E 103| ) clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'attrByPath'' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:93:12: clan-pytest-with-core> E 92| attrByPath' = clan-pytest-with-core> E 93| n: s: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 94| ( clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:102:55: clan-pytest-with-core> E 101| in clan-pytest-with-core> E 102| if s ? ${attr} then attrByPath' (n + 1) s.${attr} else default clan-pytest-with-core> E | ^ clan-pytest-with-core> E 103| ) clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:927:37: clan-pytest-with-core> E 926| clan-pytest-with-core> E 927| matchedOptions = mapAttrs (n: v: v.matchedOptions) resultsByName; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 928| clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'matchedOptions' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:893:13: clan-pytest-with-core> E 892| { clan-pytest-with-core> E 893| matchedOptions = evalOptionValue loc opt defns'; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 894| unmatchedDefns = [ ]; clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:893:30: clan-pytest-with-core> E 892| { clan-pytest-with-core> E 893| matchedOptions = evalOptionValue loc opt defns'; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 894| unmatchedDefns = [ ]; clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'evalOptionValue' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1103:15: clan-pytest-with-core> E 1102| evalOptionValue = clan-pytest-with-core> E 1103| loc: opt: defs: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1104| let clan-pytest-with-core> E clan-pytest-with-core> E … in the left operand of the update (//) operator clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1148:5: clan-pytest-with-core> E 1147| warnDeprecation opt clan-pytest-with-core> E 1148| // { clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1149| value = addErrorContext "while evaluating the option `${showOption loc}':" value; 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1141:9: clan-pytest-with-core> E 1140| warnDeprecation = clan-pytest-with-core> E 1141| if (opt.type.deprecationMessage != null) then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1142| warn "The type `types.${opt.type.name}' of option `${showOption loc}' defined in ${showFiles opt.declarations} is deprecated. ${opt.type.deprecationMessage}" clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:890:19: clan-pytest-with-core> E 889| let clan-pytest-with-core> E 890| opt = fixupOptionType loc (mergeOptionDecls loc decls); clan-pytest-with-core> E | ^ clan-pytest-with-core> E 891| in clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'fixupOptionType' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1473:10: clan-pytest-with-core> E 1472| fixupOptionType = clan-pytest-with-core> E 1473| loc: opt: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1474| if opt.type.getSubModules or null == null then 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1474:5: clan-pytest-with-core> E 1473| loc: opt: clan-pytest-with-core> E 1474| if opt.type.getSubModules or null == null then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1475| opt // { type = opt.type or types.unspecified; } clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'type.getSubModules' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/nixos/modules/services/hardware/bluetooth.nix:72:9: clan-pytest-with-core> E 71| settings = mkOption { clan-pytest-with-core> E 72| type = cfgFmt.type; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 73| default = { }; clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/nixos/modules/services/hardware/bluetooth.nix:26:12: clan-pytest-with-core> E 25| clan-pytest-with-core> E 26| cfgFmt = pkgs.formats.ini { }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 27| clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:727:15: clan-pytest-with-core> E 726| extraArgs = mapAttrs ( clan-pytest-with-core> E 727| name: _: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 728| addErrorContext (context name) ( clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the module argument `pkgs' in "/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/nixos/modules/services/hardware/bluetooth.nix": clan-pytest-with-core> E clan-pytest-with-core> E … noting that argument `pkgs` is not externally provided, so querying `_module.args` instead, requiring `config` clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:731:13: clan-pytest-with-core> E 730| "noting that argument `${name}` is not externally provided, so querying `_module.args` instead, requiring `config`" clan-pytest-with-core> E 731| config._module.args.${name} clan-pytest-with-core> E | ^ clan-pytest-with-core> E 732| ) clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/types.nix:1029:18: clan-pytest-with-core> E 1028| value = mapAttrs ( clan-pytest-with-core> E 1029| n: v: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1030| if lazy then clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'optionalValue.value' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1312:5: clan-pytest-with-core> E 1311| clan-pytest-with-core> E 1312| optionalValue = if isDefined then { value = mergedValue; } else { }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1313| }; 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1312:21: clan-pytest-with-core> E 1311| clan-pytest-with-core> E 1312| optionalValue = if isDefined then { value = mergedValue; } else { }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1313| }; clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'values' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1240:11: clan-pytest-with-core> E 1239| { clan-pytest-with-core> E 1240| values = defsSorted; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1241| inherit (defsFiltered) highestPrio; 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1211:11: clan-pytest-with-core> E 1210| # Avoid sorting if we don't have to. clan-pytest-with-core> E 1211| if any (def: def.value._type or "" == "order") defsFiltered.values then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1212| sortProperties defsFiltered.values clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'any' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1211:14: clan-pytest-with-core> E 1210| # Avoid sorting if we don't have to. clan-pytest-with-core> E 1211| if any (def: def.value._type or "" == "order") defsFiltered.values then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1212| sortProperties defsFiltered.values clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1211:19: clan-pytest-with-core> E 1210| # Avoid sorting if we don't have to. clan-pytest-with-core> E 1211| if any (def: def.value._type or "" == "order") defsFiltered.values then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1212| sortProperties defsFiltered.values clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'value._type' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1422:67: clan-pytest-with-core> E 1421| strip = clan-pytest-with-core> E 1422| def: if def.value._type or "" == "override" then def // { value = def.value.content; } else def; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1423| in clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'value.content' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1566:22: clan-pytest-with-core> E 1565| _type = "override"; clan-pytest-with-core> E 1566| inherit priority content; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1567| }; 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/nixos/modules/misc/nixpkgs.nix:107:15: clan-pytest-with-core> E 106| clan-pytest-with-core> E 107| finalPkgs = if opt.pkgs.isDefined then cfg.pkgs.appendOverlays cfg.overlays else defaultPkgs; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 108| clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'pkgs.isDefined' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1154:21: clan-pytest-with-core> E 1153| definitionsWithLocations = res.defsFinal; clan-pytest-with-core> E 1154| inherit (res) isDefined; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1155| inherit (res.checkedAndMerged) valueMeta; clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'isDefined' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1310:5: clan-pytest-with-core> E 1309| clan-pytest-with-core> E 1310| isDefined = defsFinal != [ ]; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1311| clan-pytest-with-core> E clan-pytest-with-core> E (6 duplicate frames omitted) clan-pytest-with-core> E clan-pytest-with-core> E error: attribute 'system' missing clan-pytest-with-core> E at /build/store/nix/store/y3h139bhv4373m1hab367ma4p5i95i2f-source/modules/clan/module.nix:164:24: clan-pytest-with-core> E 163| (lib.modules.importApply ../../nixosModules/machineModules/overridePkgs.nix { clan-pytest-with-core> E 164| pkgs = nixpkgsMatrix.${config.inventory.machines.${name}.nixpkgs}.system.${system}.pkgs; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 165| }) clan-pytest-with-core> E Did you mean systems? 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> test_flake_with_core = FlakeForTest(path=PosixPath('/build/pytest-75mc4nfk/test_flake_with_core')) clan-pytest-with-core> capture_output = 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_machine_subcommands( clan-pytest-with-core> test_flake_with_core: fixtures_flakes.FlakeForTest, clan-pytest-with-core> capture_output: CaptureOutput, clan-pytest-with-core> ) -> None: clan-pytest-with-core> inventory_store = InventoryStore(Flake(str(test_flake_with_core.path))) clan-pytest-with-core> inventory = inventory_store.read() clan-pytest-with-core> assert "machine1" not in inventory.get("machines", {}) clan-pytest-with-core> clan-pytest-with-core> cli.run( clan-pytest-with-core> [ clan-pytest-with-core> "machines", clan-pytest-with-core> "create", clan-pytest-with-core> "--flake", clan-pytest-with-core> str(test_flake_with_core.path), clan-pytest-with-core> "machine1", clan-pytest-with-core> "--tags", clan-pytest-with-core> "vm", clan-pytest-with-core> ], clan-pytest-with-core> ) clan-pytest-with-core> # Usually this is done by `inventory.write` but we created a separate flake object in the test that now holds stale data clan-pytest-with-core> inventory_store._flake.invalidate_cache() clan-pytest-with-core> clan-pytest-with-core> inventory = inventory_store.read() clan-pytest-with-core> persisted_inventory = inventory_store._get_persisted() clan-pytest-with-core> assert "machine1" in inventory.get("machines", {}) clan-pytest-with-core> clan-pytest-with-core> assert "services" not in persisted_inventory clan-pytest-with-core> clan-pytest-with-core> with capture_output as output: clan-pytest-with-core> cli.run(["machines", "list", "--flake", str(test_flake_with_core.path)]) clan-pytest-with-core> clan-pytest-with-core> print(output.out) clan-pytest-with-core> assert "machine1" in output.out clan-pytest-with-core> assert "vm1" in output.out clan-pytest-with-core> assert "vm2" in output.out clan-pytest-with-core> clan-pytest-with-core> > cli.run( clan-pytest-with-core> ["machines", "delete", "--flake", str(test_flake_with_core.path), "machine1"], clan-pytest-with-core> ) clan-pytest-with-core> clan-pytest-with-core> /build/src/clan_cli/tests/test_machines_cli.py:99: 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/machines/delete.py:15: in delete_command clan-pytest-with-core> delete_machine(Machine(flake=args.flake, name=args.name)) clan-pytest-with-core> /build/src/clan_lib/machines/delete.py:74: in delete_machine clan-pytest-with-core> changed_paths.extend(machine.public_vars_store.delete_store(machine.name)) clan-pytest-with-core> ^^^^^^^^^^^^^^^^^^^^^^^^^ clan-pytest-with-core> /nix/store/3n4qphl9s728sz8frmpqqrv9b1m87g68-python3-3.14.7/lib/python3.14/functools.py:1126: in __get__ clan-pytest-with-core> val = self.func(instance) clan-pytest-with-core> ^^^^^^^^^^^^^^^^^^^ clan-pytest-with-core> /build/src/clan_lib/machines/machines.py:106: in public_vars_store clan-pytest-with-core> public_module = self.flake.select( 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-75mc4nfk/test_flake_with_core', hash='sha256-s/2SklzNaoWCvUkmxM+PUdCPCeDHEC2v/mW/tFHZA...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.machines.x86_64-linux."machine1".config.clan.core.vars.settings.publicModule'] 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.machines.x86_64-linux."machine1".config.clan.core.vars.settings.publicModule' clan-pytest-with-core> E Reason: attribute 'system' missing clan-pytest-with-core> E at /build/store/nix/store/y3h139bhv4373m1hab367ma4p5i95i2f-source/modules/clan/module.nix:164:24: clan-pytest-with-core> E 163| (lib.modules.importApply ../../nixosModules/machineModules/overridePkgs.nix { clan-pytest-with-core> E 164| pkgs = nixpkgsMatrix.${config.inventory.machines.${name}.nixpkgs}.system.${system}.pkgs; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 165| }) clan-pytest-with-core> E Did you mean systems?. 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-75mc4nfk/test_flake_with_core/flake.nix clan-pytest-with-core> clan_core: /nix/store/x4g1qsn1nq0q56zn8h9c7xaiysv7bsf2-clan-core-flake clan-pytest-with-core> flake: /build/pytest-75mc4nfk/test_flake_with_core clan-pytest-with-core> Initialized empty Git repository in /build/pytest-75mc4nfk/test_flake_with_core/.git/ clan-pytest-with-core> [main (root-commit) f86d7b7] Initial commit clan-pytest-with-core> 4 files changed, 254 insertions(+) clan-pytest-with-core> create mode 100644 .clan-flake 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 machines/.gitkeep clan-pytest-with-core> ---------------------------- Captured stderr setup ----------------------------- 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: /build/src/clan_cli/tests/fixtures_flakes.py:118::substitute 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/pytest-75mc4nfk/test_flake_with_core/flake.lock": clan-pytest-with-core> • Added input 'clan-core': clan-pytest-with-core> 'path:/nix/store/x4g1qsn1nq0q56zn8h9c7xaiysv7bsf2-clan-core-flake?lastModified=1&narHash=sha256-Ynx5u312tlxJbGJCSevw5zZVxrd02FisWE1my%2B%2BFRSw%3D' (1970-01-01) clan-pytest-with-core> • Added input 'clan-core/data-mesher': clan-pytest-with-core> 'path:/nix/store/kdjkigwckgrfz0yg0d9z7kj2xkf084vs-source?lastModified=1&narHash=sha256-Yase/4e4aNN9QvUMqPH9ngbAmlcJCqLmFL0zuURdkuA%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/w2c23ykc12mswlg8hrrjzb5gv9gvkzwq-source?lastModified=1&narHash=sha256-RxWs5ND31KzTG7wvMM%2BPMfUjyNpmIEr999lqNARaM5o%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/lrxvs4l9bqbgjfz7w9bkfg5zqq442jxc-source?lastModified=1&narHash=sha256-4dtXQk/NMePegK/nWp5NSeuZKLATItOq61lpEvmXqGw%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/p17akwn814w226jq2cdkkhcw4psb0ga9-source?lastModified=0&narHash=sha256-tkD1h/1jLJ6qZHjG7/TOZT1qqI1ej3VPPCufHQyv1Uo%3D' (1970-01-01) clan-pytest-with-core> • Added input 'clan-core/sops-nix': clan-pytest-with-core> 'path:/nix/store/s154mmk8ahvc71gq8xfkbzlk240yvniv-source?lastModified=1&narHash=sha256-gkig4nPi1CWc4Z50GBsjE4ygSE7hMpl/TwID2an2Cck%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/9m1jsz5b9ggmjij2vkmafnhn26g96jjn-source?lastModified=1&narHash=sha256-brhZ8DmuGtzkCYHJg4HEd602amKm89Y9ytsFZ5uWD1w%3D' (1970-01-01) clan-pytest-with-core> • Added input 'clan-core/treefmt-nix': clan-pytest-with-core> 'path:/nix/store/7sjy8935654h3220n5gbaclf5nfw4nzx-source?lastModified=1&narHash=sha256-WSFCsDSE5ffgD2MqzkM2CYjeFiKhRF/dJUN8uedb6YE%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> 'path:/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source?lastModified=0&narHash=sha256-tkD1h/1jLJ6qZHjG7/TOZT1qqI1ej3VPPCufHQyv1Uo%3D' (1970-01-01) clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_cli/tests/fixtures_flakes.py:118::substitute clan-pytest-with-core> clan-pytest-with-core> warning: you don't have Internet access; disabling some network-dependent features clan-pytest-with-core> !! $HOME does not point to a temp directory!! HOME=/build/pytest-75mc4nfk clan-pytest-with-core> ------------------------------ Captured log setup ------------------------------ clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:143 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: /build/src/clan_cli/tests/fixtures_flakes.py:118::substitute 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/pytest-75mc4nfk/test_flake_with_core/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/x4g1qsn1nq0q56zn8h9c7xaiysv7bsf2-clan-core-flake?lastModified=1&narHash=sha256-Ynx5u312tlxJbGJCSevw5zZVxrd02FisWE1my%2B%2BFRSw%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/kdjkigwckgrfz0yg0d9z7kj2xkf084vs-source?lastModified=1&narHash=sha256-Yase/4e4aNN9QvUMqPH9ngbAmlcJCqLmFL0zuURdkuA%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/w2c23ykc12mswlg8hrrjzb5gv9gvkzwq-source?lastModified=1&narHash=sha256-RxWs5ND31KzTG7wvMM%2BPMfUjyNpmIEr999lqNARaM5o%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/lrxvs4l9bqbgjfz7w9bkfg5zqq442jxc-source?lastModified=1&narHash=sha256-4dtXQk/NMePegK/nWp5NSeuZKLATItOq61lpEvmXqGw%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/p17akwn814w226jq2cdkkhcw4psb0ga9-source?lastModified=0&narHash=sha256-tkD1h/1jLJ6qZHjG7/TOZT1qqI1ej3VPPCufHQyv1Uo%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/s154mmk8ahvc71gq8xfkbzlk240yvniv-source?lastModified=1&narHash=sha256-gkig4nPi1CWc4Z50GBsjE4ygSE7hMpl/TwID2an2Cck%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/9m1jsz5b9ggmjij2vkmafnhn26g96jjn-source?lastModified=1&narHash=sha256-brhZ8DmuGtzkCYHJg4HEd602amKm89Y9ytsFZ5uWD1w%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/7sjy8935654h3220n5gbaclf5nfw4nzx-source?lastModified=1&narHash=sha256-WSFCsDSE5ffgD2MqzkM2CYjeFiKhRF/dJUN8uedb6YE%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 'path:/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source?lastModified=0&narHash=sha256-tkD1h/1jLJ6qZHjG7/TOZT1qqI1ej3VPPCufHQyv1Uo%3D' (1970-01-01) clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:143 Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_cli/tests/fixtures_flakes.py:118::substitute clan-pytest-with-core> 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-75mc4nfk clan-pytest-with-core> ----------------------------- Captured stderr call ----------------------------- clan-pytest-with-core> Prefetching flake /build/pytest-75mc4nfk/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/0cecfc668b186543263649fd04d192ca10abe070 clan-pytest-with-core> (cached) $ clan select 'clanInternals.inventoryClass.inventorySerialization.{instances,machines,meta}' clan-pytest-with-core> [localhost] $ clan machines create --flake /build/pytest-75mc4nfk/test_flake_with_core machine1 --tags vm clan-pytest-with-core> Caller: /build/src/clan_cli/tests/test_machines_cli.py:71::test_machine_subcommands clan-pytest-with-core> clan-pytest-with-core> Prefetching flake /build/pytest-75mc4nfk/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/0cecfc668b186543263649fd04d192ca10abe070 clan-pytest-with-core> (cached) $ clan select 'clanInternals.inventoryClass.inventorySerialization.{instances,machines,meta}' clan-pytest-with-core> Prefetching flake /build/pytest-75mc4nfk/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/0cecfc668b186543263649fd04d192ca10abe070 clan-pytest-with-core> Cache miss for clanInternals.templates.machine."new-machine" clan-pytest-with-core> Loading flake cache from file /build/clan-flake-cache/flakes-v2/0cecfc668b186543263649fd04d192ca10abe070 clan-pytest-with-core> (cached) $ clan select clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> chmod \ clan-pytest-with-core> -R u+w \ clan-pytest-with-core> /build/pytest-75mc4nfk/test_flake_with_core/machines/machine1 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> (cached) $ clan select 'clanInternals.inventoryClass.inventorySerialization.{instances,machines,meta}' clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-75mc4nfk/test_flake_with_core \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-75mc4nfk/test_flake_with_core/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 machines/machine1 to git clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-75mc4nfk/test_flake_with_core \ clan-pytest-with-core> diff \ clan-pytest-with-core> --cached --exit-code \ clan-pytest-with-core> -- /build/pytest-75mc4nfk/test_flake_with_core/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-75mc4nfk/test_flake_with_core \ clan-pytest-with-core> commit \ clan-pytest-with-core> -m 'machines: add machine1' \ clan-pytest-with-core> --no-verify /build/pytest-75mc4nfk/test_flake_with_core/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 machines/machine1 to git clan-pytest-with-core> Prefetching flake /build/pytest-75mc4nfk/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> Cache miss for clanInternals.inventoryClass.introspection clan-pytest-with-core> Loading flake cache from file /build/clan-flake-cache/flakes-v2/c07e2fc30689272e1b4245ba15b7e3525f5bec15 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-75mc4nfk/test_flake_with_core \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-75mc4nfk/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-75mc4nfk/test_flake_with_core \ clan-pytest-with-core> diff \ clan-pytest-with-core> --cached --exit-code \ clan-pytest-with-core> -- /build/pytest-75mc4nfk/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-75mc4nfk/test_flake_with_core \ clan-pytest-with-core> commit \ clan-pytest-with-core> -m 'inventory.json: add machine machine1' \ clan-pytest-with-core> --no-verify /build/pytest-75mc4nfk/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> Prefetching flake /build/pytest-75mc4nfk/test_flake_with_core clan-pytest-with-core> warning: you don't have Internet access; disabling some network-dependent features clan-pytest-with-core> Prefetching flake /build/pytest-75mc4nfk/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> Prefetching flake /build/pytest-75mc4nfk/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/450b946c93611d8107a9bcd5e208145c91fde368 clan-pytest-with-core> (cached) $ clan select 'clanInternals.inventoryClass.inventorySerialization.{instances,machines,meta}' clan-pytest-with-core> [localhost] $ clan machines list --flake /build/pytest-75mc4nfk/test_flake_with_core clan-pytest-with-core> Caller: /build/src/clan_cli/tests/test_machines_cli.py:92::test_machine_subcommands clan-pytest-with-core> clan-pytest-with-core> Prefetching flake /build/pytest-75mc4nfk/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/450b946c93611d8107a9bcd5e208145c91fde368 clan-pytest-with-core> (cached) $ clan select 'clanInternals.inventoryClass.inventorySerialization.{instances,machines,meta}' clan-pytest-with-core> ------------------------------ Captured log call ------------------------------- clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:927 Prefetching flake /build/pytest-75mc4nfk/test_flake_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.flake.flake:flake.py:789 Loading flake cache from file /build/clan-flake-cache/flakes-v2/0cecfc668b186543263649fd04d192ca10abe070 clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1179 (cached) $ clan select 'clanInternals.inventoryClass.inventorySerialization.{instances,machines,meta}' clan-pytest-with-core> DEBUG clan_cli.tests.helpers.cli:__init__.py:143 $ clan machines create --flake /build/pytest-75mc4nfk/test_flake_with_core machine1 --tags vm clan-pytest-with-core> Caller: /build/src/clan_cli/tests/test_machines_cli.py:71::test_machine_subcommands clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:927 Prefetching flake /build/pytest-75mc4nfk/test_flake_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.flake.flake:flake.py:789 Loading flake cache from file /build/clan-flake-cache/flakes-v2/0cecfc668b186543263649fd04d192ca10abe070 clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1179 (cached) $ clan select 'clanInternals.inventoryClass.inventorySerialization.{instances,machines,meta}' clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:927 Prefetching flake /build/pytest-75mc4nfk/test_flake_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.flake.flake:flake.py:789 Loading flake cache from file /build/clan-flake-cache/flakes-v2/0cecfc668b186543263649fd04d192ca10abe070 clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1174 Cache miss for clanInternals.templates.machine."new-machine" clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:789 Loading flake cache from file /build/clan-flake-cache/flakes-v2/0cecfc668b186543263649fd04d192ca10abe070 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.cmd:__init__.py:143 chmod \ clan-pytest-with-core> -R u+w \ clan-pytest-with-core> /build/pytest-75mc4nfk/test_flake_with_core/machines/machine1 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:143 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.flake.flake:flake.py:1179 (cached) $ clan select 'clanInternals.inventoryClass.inventorySerialization.{instances,machines,meta}' clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:143 git \ clan-pytest-with-core> -C /build/pytest-75mc4nfk/test_flake_with_core \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-75mc4nfk/test_flake_with_core/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> DEBUG clan_lib.cmd:__init__.py:143 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> DEBUG clan_lib.git:__init__.py:98 Adding machines/machine1 to git clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:143 git \ clan-pytest-with-core> -C /build/pytest-75mc4nfk/test_flake_with_core \ clan-pytest-with-core> diff \ clan-pytest-with-core> --cached --exit-code \ clan-pytest-with-core> -- /build/pytest-75mc4nfk/test_flake_with_core/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> DEBUG clan_lib.cmd:__init__.py:143 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> DEBUG clan_lib.cmd:__init__.py:143 git \ clan-pytest-with-core> -C /build/pytest-75mc4nfk/test_flake_with_core \ clan-pytest-with-core> commit \ clan-pytest-with-core> -m 'machines: add machine1' \ clan-pytest-with-core> --no-verify /build/pytest-75mc4nfk/test_flake_with_core/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> DEBUG clan_lib.cmd:__init__.py:143 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> INFO clan_lib.git:__init__.py:141 Committed machines/machine1 to git clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:927 Prefetching flake /build/pytest-75mc4nfk/test_flake_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.flake.flake:flake.py:1174 Cache miss for clanInternals.inventoryClass.inventorySerialization.{instances,machines,meta} clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1174 Cache miss for clanInternals.inventoryClass.introspection clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:789 Loading flake cache from file /build/clan-flake-cache/flakes-v2/c07e2fc30689272e1b4245ba15b7e3525f5bec15 clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1179 (cached) $ clan select 'clanInternals.inventoryClass.inventorySerialization.{instances,machines,meta}' clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:143 git \ clan-pytest-with-core> -C /build/pytest-75mc4nfk/test_flake_with_core \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-75mc4nfk/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> DEBUG clan_lib.cmd:__init__.py:143 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> DEBUG clan_lib.git:__init__.py:98 Adding inventory.json to git clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:143 git \ clan-pytest-with-core> -C /build/pytest-75mc4nfk/test_flake_with_core \ clan-pytest-with-core> diff \ clan-pytest-with-core> --cached --exit-code \ clan-pytest-with-core> -- /build/pytest-75mc4nfk/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> DEBUG clan_lib.cmd:__init__.py:143 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> DEBUG clan_lib.cmd:__init__.py:143 git \ clan-pytest-with-core> -C /build/pytest-75mc4nfk/test_flake_with_core \ clan-pytest-with-core> commit \ clan-pytest-with-core> -m 'inventory.json: add machine machine1' \ clan-pytest-with-core> --no-verify /build/pytest-75mc4nfk/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> DEBUG clan_lib.cmd:__init__.py:143 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> INFO clan_lib.git:__init__.py:141 Committed inventory.json to git clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:927 Prefetching flake /build/pytest-75mc4nfk/test_flake_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.flake.flake:flake.py:927 Prefetching flake /build/pytest-75mc4nfk/test_flake_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.flake.flake:flake.py:1174 Cache miss for clanInternals.inventoryClass.inventorySerialization.{instances,machines,meta} clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:927 Prefetching flake /build/pytest-75mc4nfk/test_flake_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.flake.flake:flake.py:789 Loading flake cache from file /build/clan-flake-cache/flakes-v2/450b946c93611d8107a9bcd5e208145c91fde368 clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1179 (cached) $ clan select 'clanInternals.inventoryClass.inventorySerialization.{instances,machines,meta}' clan-pytest-with-core> DEBUG clan_cli.tests.helpers.cli:__init__.py:143 $ clan machines list --flake /build/pytest-75mc4nfk/test_flake_with_core clan-pytest-with-core> Caller: /build/src/clan_cli/tests/test_machines_cli.py:92::test_machine_subcommands clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:927 Prefetching flake /build/pytest-75mc4nfk/test_flake_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.flake.flake:flake.py:789 Loading flake cache from file /build/clan-flake-cache/flakes-v2/450b946c93611d8107a9bcd5e208145c91fde368 clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1179 (cached) $ clan select 'clanInternals.inventoryClass.inventorySerialization.{instances,machines,meta}' clan-pytest-with-core> DEBUG clan_cli.tests.helpers.cli:__init__.py:143 $ clan machines delete --flake /build/pytest-75mc4nfk/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> DEBUG clan_lib.flake.flake:flake.py:927 Prefetching flake /build/pytest-75mc4nfk/test_flake_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.flake.flake:flake.py:789 Loading flake cache from file /build/clan-flake-cache/flakes-v2/450b946c93611d8107a9bcd5e208145c91fde368 clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1179 (cached) $ clan select 'clanInternals.inventoryClass.inventorySerialization.{instances,machines,meta}' clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:143 git \ clan-pytest-with-core> -C /build/pytest-75mc4nfk/test_flake_with_core \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-75mc4nfk/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> DEBUG clan_lib.cmd:__init__.py:143 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> DEBUG clan_lib.git:__init__.py:98 Adding inventory.json to git clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:143 git \ clan-pytest-with-core> -C /build/pytest-75mc4nfk/test_flake_with_core \ clan-pytest-with-core> diff \ clan-pytest-with-core> --cached --exit-code \ clan-pytest-with-core> -- /build/pytest-75mc4nfk/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> DEBUG clan_lib.cmd:__init__.py:143 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> DEBUG clan_lib.cmd:__init__.py:143 git \ clan-pytest-with-core> -C /build/pytest-75mc4nfk/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-75mc4nfk/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> DEBUG clan_lib.cmd:__init__.py:143 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> INFO clan_lib.git:__init__.py:141 Committed inventory.json to git clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1174 Cache miss for clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:789 Loading flake cache from file /build/clan-flake-cache/flakes-v2/450b946c93611d8107a9bcd5e208145c91fde368 clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1174 Cache miss for clanInternals.machines.x86_64-linux."machine1".config.clan.core.vars.settings.publicModule clan-pytest-with-core> ________________________ test_get_machine_writeability _________________________ clan-pytest-with-core> [gw7] linux -- Python 3.14.7 /nix/store/3n4qphl9s728sz8frmpqqrv9b1m87g68-python3-3.14.7/bin/python clan-pytest-with-core> clan-pytest-with-core> clan_flake = .factory at 0x7fffe65adfe0> 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_get_machine_writeability(clan_flake: Callable[..., Flake]) -> None: clan-pytest-with-core> flake = clan_flake( clan-pytest-with-core> clan={ clan-pytest-with-core> "inventory": { clan-pytest-with-core> "machines": { clan-pytest-with-core> "jon": { clan-pytest-with-core> "machineClass": "nixos", # Static string is not writable clan-pytest-with-core> "deploy": {}, # Empty dict is writable clan-pytest-with-core> # TODO: Return writability for existing items clan-pytest-with-core> "tags": ["nix1"], # Static list is not partially writable clan-pytest-with-core> }, clan-pytest-with-core> }, clan-pytest-with-core> }, clan-pytest-with-core> }, clan-pytest-with-core> ) clan-pytest-with-core> clan-pytest-with-core> # TODO: Move this into the api clan-pytest-with-core> inventory_store = InventoryStore(flake=flake) clan-pytest-with-core> inventory = inventory_store.read() clan-pytest-with-core> curr_tags: InstanceRoleTagListInput = get_value_by_path( clan-pytest-with-core> inventory, "machines.jon.tags", [] clan-pytest-with-core> ) clan-pytest-with-core> new_tags = ["managed1", "managed2"] clan-pytest-with-core> set_value_by_path(inventory, "machines.jon.tags", [*curr_tags, *new_tags]) clan-pytest-with-core> inventory_store.write(inventory, message="test writeability") clan-pytest-with-core> clan-pytest-with-core> # Check that the tags were updated clan-pytest-with-core> persisted = inventory_store._get_persisted() clan-pytest-with-core> assert get_value_by_path(persisted, "machines.jon.tags", []) == new_tags clan-pytest-with-core> clan-pytest-with-core> attribute_props = get_machine_fields_schema(Machine("jon", flake)) clan-pytest-with-core> clan-pytest-with-core> # {'tags': {'writable': True, 'reason': None}, 'machineClass': {'writable': False, 'reason': None}, 'name': {'writable': False, 'reason': None}, 'description': {'writable': True, 'reason': None}, 'deploy.buildHost': {'writable': True, 'reason': None}, 'icon': {'writable': True, 'reason': None}, 'deploy.targetHost': {'writable': True, 'reason': None}} clan-pytest-with-core> writable_fields = { clan-pytest-with-core> field for field, info in attribute_props.items() if not info["readonly"] clan-pytest-with-core> } clan-pytest-with-core> read_only_fields = { clan-pytest-with-core> field for field, info in attribute_props.items() if info["readonly"] clan-pytest-with-core> } clan-pytest-with-core> clan-pytest-with-core> > assert writable_fields == { clan-pytest-with-core> "tags", clan-pytest-with-core> "deploy.targetHost", clan-pytest-with-core> "deploy.buildHost", clan-pytest-with-core> "deploy.forwardAgent", clan-pytest-with-core> "description", clan-pytest-with-core> "icon", clan-pytest-with-core> "installedAt", clan-pytest-with-core> } clan-pytest-with-core> E AssertionError: assert {'deploy.buil...alledAt', ...} == {'deploy.buil...alledAt', ...} clan-pytest-with-core> E clan-pytest-with-core> E Extra items in the left set: clan-pytest-with-core> E 'nixpkgs' clan-pytest-with-core> E clan-pytest-with-core> E Full diff: clan-pytest-with-core> E { clan-pytest-with-core> E 'deploy.buildHost',... clan-pytest-with-core> E clan-pytest-with-core> E ...Full output truncated (8 lines hidden), use '-vv' to show clan-pytest-with-core> clan-pytest-with-core> clan_lib/machines/actions_test.py:308: AssertionError clan-pytest-with-core> ---------------------------- Captured stderr setup ----------------------------- 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_lib/fixtures/flake_hooks.py:18::substitute_flake_inputs 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/pytest-of-nixbld/pytest-0/popen-gw7/minimal-clan-template0/offline/flake.lock": clan-pytest-with-core> • Added input 'Y2xhbi1jaW9yZS1uZXZlci1kZXBlbmQtb24tbWU': clan-pytest-with-core> 'path:/nix/store/x4g1qsn1nq0q56zn8h9c7xaiysv7bsf2-clan-core-flake?lastModified=1&narHash=sha256-Ynx5u312tlxJbGJCSevw5zZVxrd02FisWE1my%2B%2BFRSw%3D' (1970-01-01) clan-pytest-with-core> • Added input 'Y2xhbi1jaW9yZS1uZXZlci1kZXBlbmQtb24tbWU/data-mesher': clan-pytest-with-core> 'path:/nix/store/kdjkigwckgrfz0yg0d9z7kj2xkf084vs-source?lastModified=1&narHash=sha256-Yase/4e4aNN9QvUMqPH9ngbAmlcJCqLmFL0zuURdkuA%3D' (1970-01-01) clan-pytest-with-core> • Added input 'Y2xhbi1jaW9yZS1uZXZlci1kZXBlbmQtb24tbWU/data-mesher/flake-parts': clan-pytest-with-core> follows 'Y2xhbi1jaW9yZS1uZXZlci1kZXBlbmQtb24tbWU/flake-parts' clan-pytest-with-core> • Added input 'Y2xhbi1jaW9yZS1uZXZlci1kZXBlbmQtb24tbWU/data-mesher/nixpkgs': clan-pytest-with-core> follows 'Y2xhbi1jaW9yZS1uZXZlci1kZXBlbmQtb24tbWU/nixpkgs' clan-pytest-with-core> • Added input 'Y2xhbi1jaW9yZS1uZXZlci1kZXBlbmQtb24tbWU/data-mesher/treefmt-nix': clan-pytest-with-core> follows 'Y2xhbi1jaW9yZS1uZXZlci1kZXBlbmQtb24tbWU/treefmt-nix' clan-pytest-with-core> • Added input 'Y2xhbi1jaW9yZS1uZXZlci1kZXBlbmQtb24tbWU/disko': clan-pytest-with-core> 'path:/nix/store/w2c23ykc12mswlg8hrrjzb5gv9gvkzwq-source?lastModified=1&narHash=sha256-RxWs5ND31KzTG7wvMM%2BPMfUjyNpmIEr999lqNARaM5o%3D' (1970-01-01) clan-pytest-with-core> • Added input 'Y2xhbi1jaW9yZS1uZXZlci1kZXBlbmQtb24tbWU/disko/nixpkgs': clan-pytest-with-core> follows 'Y2xhbi1jaW9yZS1uZXZlci1kZXBlbmQtb24tbWU/nixpkgs' clan-pytest-with-core> • Added input 'Y2xhbi1jaW9yZS1uZXZlci1kZXBlbmQtb24tbWU/flake-parts': clan-pytest-with-core> 'path:/nix/store/lrxvs4l9bqbgjfz7w9bkfg5zqq442jxc-source?lastModified=1&narHash=sha256-4dtXQk/NMePegK/nWp5NSeuZKLATItOq61lpEvmXqGw%3D' (1970-01-01) clan-pytest-with-core> • Added input 'Y2xhbi1jaW9yZS1uZXZlci1kZXBlbmQtb24tbWU/flake-parts/nixpkgs-lib': clan-pytest-with-core> follows 'Y2xhbi1jaW9yZS1uZXZlci1kZXBlbmQtb24tbWU/nixpkgs' clan-pytest-with-core> • Added input 'Y2xhbi1jaW9yZS1uZXZlci1kZXBlbmQtb24tbWU/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 'Y2xhbi1jaW9yZS1uZXZlci1kZXBlbmQtb24tbWU/nix-darwin/nixpkgs': clan-pytest-with-core> follows 'Y2xhbi1jaW9yZS1uZXZlci1kZXBlbmQtb24tbWU/nixpkgs' clan-pytest-with-core> • Added input 'Y2xhbi1jaW9yZS1uZXZlci1kZXBlbmQtb24tbWU/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 'Y2xhbi1jaW9yZS1uZXZlci1kZXBlbmQtb24tbWU/nixpkgs': clan-pytest-with-core> 'path:/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source?lastModified=0&narHash=sha256-tkD1h/1jLJ6qZHjG7/TOZT1qqI1ej3VPPCufHQyv1Uo%3D' (1970-01-01) clan-pytest-with-core> • Added input 'Y2xhbi1jaW9yZS1uZXZlci1kZXBlbmQtb24tbWU/sops-nix': clan-pytest-with-core> 'path:/nix/store/s154mmk8ahvc71gq8xfkbzlk240yvniv-source?lastModified=1&narHash=sha256-gkig4nPi1CWc4Z50GBsjE4ygSE7hMpl/TwID2an2Cck%3D' (1970-01-01) clan-pytest-with-core> • Added input 'Y2xhbi1jaW9yZS1uZXZlci1kZXBlbmQtb24tbWU/sops-nix/nixpkgs': clan-pytest-with-core> follows 'Y2xhbi1jaW9yZS1uZXZlci1kZXBlbmQtb24tbWU/nixpkgs' clan-pytest-with-core> • Added input 'Y2xhbi1jaW9yZS1uZXZlci1kZXBlbmQtb24tbWU/systems': clan-pytest-with-core> 'path:/nix/store/9m1jsz5b9ggmjij2vkmafnhn26g96jjn-source?lastModified=1&narHash=sha256-brhZ8DmuGtzkCYHJg4HEd602amKm89Y9ytsFZ5uWD1w%3D' (1970-01-01) clan-pytest-with-core> • Added input 'Y2xhbi1jaW9yZS1uZXZlci1kZXBlbmQtb24tbWU/treefmt-nix': clan-pytest-with-core> 'path:/nix/store/7sjy8935654h3220n5gbaclf5nfw4nzx-source?lastModified=1&narHash=sha256-WSFCsDSE5ffgD2MqzkM2CYjeFiKhRF/dJUN8uedb6YE%3D' (1970-01-01) clan-pytest-with-core> • Added input 'Y2xhbi1jaW9yZS1uZXZlci1kZXBlbmQtb24tbWU/treefmt-nix/nixpkgs': clan-pytest-with-core> follows 'Y2xhbi1jaW9yZS1uZXZlci1kZXBlbmQtb24tbWU/nixpkgs' clan-pytest-with-core> • Added input 'nixpkgs': clan-pytest-with-core> follows 'Y2xhbi1jaW9yZS1uZXZlci1kZXBlbmQtb24tbWU/nixpkgs' clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: ~/src/clan_lib/fixtures/flake_hooks.py:18::substitute_flake_inputs clan-pytest-with-core> clan-pytest-with-core> ------------------------------ Captured log setup ------------------------------ clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:143 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_lib/fixtures/flake_hooks.py:18::substitute_flake_inputs 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/pytest-of-nixbld/pytest-0/popen-gw7/minimal-clan-template0/offline/flake.lock": clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 • Added input 'Y2xhbi1jaW9yZS1uZXZlci1kZXBlbmQtb24tbWU': clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 'path:/nix/store/x4g1qsn1nq0q56zn8h9c7xaiysv7bsf2-clan-core-flake?lastModified=1&narHash=sha256-Ynx5u312tlxJbGJCSevw5zZVxrd02FisWE1my%2B%2BFRSw%3D' (1970-01-01) clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 • Added input 'Y2xhbi1jaW9yZS1uZXZlci1kZXBlbmQtb24tbWU/data-mesher': clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 'path:/nix/store/kdjkigwckgrfz0yg0d9z7kj2xkf084vs-source?lastModified=1&narHash=sha256-Yase/4e4aNN9QvUMqPH9ngbAmlcJCqLmFL0zuURdkuA%3D' (1970-01-01) clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 • Added input 'Y2xhbi1jaW9yZS1uZXZlci1kZXBlbmQtb24tbWU/data-mesher/flake-parts': clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 follows 'Y2xhbi1jaW9yZS1uZXZlci1kZXBlbmQtb24tbWU/flake-parts' clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 • Added input 'Y2xhbi1jaW9yZS1uZXZlci1kZXBlbmQtb24tbWU/data-mesher/nixpkgs': clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 follows 'Y2xhbi1jaW9yZS1uZXZlci1kZXBlbmQtb24tbWU/nixpkgs' clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 • Added input 'Y2xhbi1jaW9yZS1uZXZlci1kZXBlbmQtb24tbWU/data-mesher/treefmt-nix': clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 follows 'Y2xhbi1jaW9yZS1uZXZlci1kZXBlbmQtb24tbWU/treefmt-nix' clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 • Added input 'Y2xhbi1jaW9yZS1uZXZlci1kZXBlbmQtb24tbWU/disko': clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 'path:/nix/store/w2c23ykc12mswlg8hrrjzb5gv9gvkzwq-source?lastModified=1&narHash=sha256-RxWs5ND31KzTG7wvMM%2BPMfUjyNpmIEr999lqNARaM5o%3D' (1970-01-01) clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 • Added input 'Y2xhbi1jaW9yZS1uZXZlci1kZXBlbmQtb24tbWU/disko/nixpkgs': clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 follows 'Y2xhbi1jaW9yZS1uZXZlci1kZXBlbmQtb24tbWU/nixpkgs' clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 • Added input 'Y2xhbi1jaW9yZS1uZXZlci1kZXBlbmQtb24tbWU/flake-parts': clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 'path:/nix/store/lrxvs4l9bqbgjfz7w9bkfg5zqq442jxc-source?lastModified=1&narHash=sha256-4dtXQk/NMePegK/nWp5NSeuZKLATItOq61lpEvmXqGw%3D' (1970-01-01) clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 • Added input 'Y2xhbi1jaW9yZS1uZXZlci1kZXBlbmQtb24tbWU/flake-parts/nixpkgs-lib': clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 follows 'Y2xhbi1jaW9yZS1uZXZlci1kZXBlbmQtb24tbWU/nixpkgs' clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 • Added input 'Y2xhbi1jaW9yZS1uZXZlci1kZXBlbmQtb24tbWU/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 'Y2xhbi1jaW9yZS1uZXZlci1kZXBlbmQtb24tbWU/nix-darwin/nixpkgs': clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 follows 'Y2xhbi1jaW9yZS1uZXZlci1kZXBlbmQtb24tbWU/nixpkgs' clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 • Added input 'Y2xhbi1jaW9yZS1uZXZlci1kZXBlbmQtb24tbWU/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 'Y2xhbi1jaW9yZS1uZXZlci1kZXBlbmQtb24tbWU/nixpkgs': clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 'path:/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source?lastModified=0&narHash=sha256-tkD1h/1jLJ6qZHjG7/TOZT1qqI1ej3VPPCufHQyv1Uo%3D' (1970-01-01) clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 • Added input 'Y2xhbi1jaW9yZS1uZXZlci1kZXBlbmQtb24tbWU/sops-nix': clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 'path:/nix/store/s154mmk8ahvc71gq8xfkbzlk240yvniv-source?lastModified=1&narHash=sha256-gkig4nPi1CWc4Z50GBsjE4ygSE7hMpl/TwID2an2Cck%3D' (1970-01-01) clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 • Added input 'Y2xhbi1jaW9yZS1uZXZlci1kZXBlbmQtb24tbWU/sops-nix/nixpkgs': clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 follows 'Y2xhbi1jaW9yZS1uZXZlci1kZXBlbmQtb24tbWU/nixpkgs' clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 • Added input 'Y2xhbi1jaW9yZS1uZXZlci1kZXBlbmQtb24tbWU/systems': clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 'path:/nix/store/9m1jsz5b9ggmjij2vkmafnhn26g96jjn-source?lastModified=1&narHash=sha256-brhZ8DmuGtzkCYHJg4HEd602amKm89Y9ytsFZ5uWD1w%3D' (1970-01-01) clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 • Added input 'Y2xhbi1jaW9yZS1uZXZlci1kZXBlbmQtb24tbWU/treefmt-nix': clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 'path:/nix/store/7sjy8935654h3220n5gbaclf5nfw4nzx-source?lastModified=1&narHash=sha256-WSFCsDSE5ffgD2MqzkM2CYjeFiKhRF/dJUN8uedb6YE%3D' (1970-01-01) clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 • Added input 'Y2xhbi1jaW9yZS1uZXZlci1kZXBlbmQtb24tbWU/treefmt-nix/nixpkgs': clan-pytest-with-core> INFO clan_lib.cmd:__init__.py:158 follows 'Y2xhbi1jaW9yZS1uZXZlci1kZXBlbmQtb24tbWU/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 'Y2xhbi1jaW9yZS1uZXZlci1kZXBlbmQtb24tbWU/nixpkgs' clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:143 Command exited with return code 0 clan-pytest-with-core> Caller: ~/src/clan_lib/fixtures/flake_hooks.py:18::substitute_flake_inputs clan-pytest-with-core> ----------------------------- Captured stderr call ----------------------------- clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-of-nixbld/pytest-0/popen-gw7/test_get_machine_writeability0/my-clan \ clan-pytest-with-core> init clan-pytest-with-core> Caller: ~/src/clan_lib/clan/create.py:156::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: ~/src/clan_lib/clan/create.py:156::create_clan clan-pytest-with-core> clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-of-nixbld/pytest-0/popen-gw7/test_get_machine_writeability0/my-clan \ clan-pytest-with-core> add \ clan-pytest-with-core> . clan-pytest-with-core> Caller: ~/src/clan_lib/clan/create.py:157::create_clan clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: ~/src/clan_lib/clan/create.py:157::create_clan clan-pytest-with-core> clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-of-nixbld/pytest-0/popen-gw7/test_get_machine_writeability0/my-clan \ clan-pytest-with-core> config \ clan-pytest-with-core> user.name clan-pytest-with-core> Caller: ~/src/clan_lib/clan/create.py:160::create_clan clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 1 clan-pytest-with-core> Caller: ~/src/clan_lib/clan/create.py:160::create_clan clan-pytest-with-core> clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-of-nixbld/pytest-0/popen-gw7/test_get_machine_writeability0/my-clan \ clan-pytest-with-core> config \ clan-pytest-with-core> user.name \ clan-pytest-with-core> clan-tool clan-pytest-with-core> Caller: ~/src/clan_lib/clan/create.py:165::create_clan clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: ~/src/clan_lib/clan/create.py:165::create_clan clan-pytest-with-core> clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-of-nixbld/pytest-0/popen-gw7/test_get_machine_writeability0/my-clan \ clan-pytest-with-core> config \ clan-pytest-with-core> user.email clan-pytest-with-core> Caller: ~/src/clan_lib/clan/create.py:167::create_clan clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 1 clan-pytest-with-core> Caller: ~/src/clan_lib/clan/create.py:167::create_clan clan-pytest-with-core> clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-of-nixbld/pytest-0/popen-gw7/test_get_machine_writeability0/my-clan \ clan-pytest-with-core> config \ clan-pytest-with-core> user.email \ clan-pytest-with-core> clan@example.com clan-pytest-with-core> Caller: ~/src/clan_lib/clan/create.py:172::create_clan clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: ~/src/clan_lib/clan/create.py:172::create_clan clan-pytest-with-core> clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-of-nixbld/pytest-0/popen-gw7/test_get_machine_writeability0/my-clan \ clan-pytest-with-core> add \ clan-pytest-with-core> . clan-pytest-with-core> Caller: ~/src/clan_lib/clan/create.py:186::create_clan clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: ~/src/clan_lib/clan/create.py:186::create_clan clan-pytest-with-core> clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-of-nixbld/pytest-0/popen-gw7/test_get_machine_writeability0/my-clan \ clan-pytest-with-core> commit \ clan-pytest-with-core> -m 'Initial commit' clan-pytest-with-core> Caller: ~/src/clan_lib/clan/create.py:187::create_clan clan-pytest-with-core> clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: ~/src/clan_lib/clan/create.py:187::create_clan clan-pytest-with-core> clan-pytest-with-core> Prefetching flake /build/pytest-of-nixbld/pytest-0/popen-gw7/test_get_machine_writeability0/my-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.inventoryClass.inventorySerialization.{instances,machines,meta} 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: ~/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: ~/src/clan_lib/nix/__init__.py:91::nix_config clan-pytest-with-core> clan-pytest-with-core> Loading flake cache from file /build/clan-flake-cache/flakes-v2/c034a164aa1321b113259b8b85694bd30a06e4b6 clan-pytest-with-core> Prefetching flake /build/pytest-of-nixbld/pytest-0/popen-gw7/test_get_machine_writeability0/my-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.inventoryClass.inventorySerialization.{instances,machines,meta} clan-pytest-with-core> Cache miss for clanInternals.inventoryClass.introspection clan-pytest-with-core> Loading flake cache from file /build/clan-flake-cache/flakes-v2/ca1ec87ca0dcb5b7cc59a94ffd9f16286258e3b7 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-of-nixbld/pytest-0/popen-gw7/test_get_machine_writeability0/my-clan \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-of-nixbld/pytest-0/popen-gw7/test_get_machine_writeability0/my-clan/inventory.json clan-pytest-with-core> Caller: ~/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: ~/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-of-nixbld/pytest-0/popen-gw7/test_get_machine_writeability0/my-clan \ clan-pytest-with-core> diff \ clan-pytest-with-core> --cached --exit-code \ clan-pytest-with-core> -- /build/pytest-of-nixbld/pytest-0/popen-gw7/test_get_machine_writeability0/my-clan/inventory.json clan-pytest-with-core> Caller: ~/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: ~/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-of-nixbld/pytest-0/popen-gw7/test_get_machine_writeability0/my-clan \ clan-pytest-with-core> commit \ clan-pytest-with-core> -m 'inventory.json: test writeability' \ clan-pytest-with-core> --no-verify /build/pytest-of-nixbld/pytest-0/popen-gw7/test_get_machine_writeability0/my-clan/inventory.json clan-pytest-with-core> Caller: ~/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: ~/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> Prefetching flake /build/pytest-of-nixbld/pytest-0/popen-gw7/test_get_machine_writeability0/my-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.inventoryClass.introspection clan-pytest-with-core> Cache miss for clanInternals.inventoryClass.inventorySerialization.{instances,machines,meta} clan-pytest-with-core> Loading flake cache from file /build/clan-flake-cache/flakes-v2/682ccdd0f180a491851c872c4a25730d80626409 clan-pytest-with-core> (cached) $ clan select 'clanInternals.inventoryClass.inventorySerialization.{instances,machines,meta}' clan-pytest-with-core> ------------------------------ Captured log call ------------------------------- clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:143 git \ clan-pytest-with-core> -C /build/pytest-of-nixbld/pytest-0/popen-gw7/test_get_machine_writeability0/my-clan \ clan-pytest-with-core> init clan-pytest-with-core> Caller: ~/src/clan_lib/clan/create.py:156::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:143 Command exited with return code 0 clan-pytest-with-core> Caller: ~/src/clan_lib/clan/create.py:156::create_clan clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:143 git \ clan-pytest-with-core> -C /build/pytest-of-nixbld/pytest-0/popen-gw7/test_get_machine_writeability0/my-clan \ clan-pytest-with-core> add \ clan-pytest-with-core> . clan-pytest-with-core> Caller: ~/src/clan_lib/clan/create.py:157::create_clan clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:143 Command exited with return code 0 clan-pytest-with-core> Caller: ~/src/clan_lib/clan/create.py:157::create_clan clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:143 git \ clan-pytest-with-core> -C /build/pytest-of-nixbld/pytest-0/popen-gw7/test_get_machine_writeability0/my-clan \ clan-pytest-with-core> config \ clan-pytest-with-core> user.name clan-pytest-with-core> Caller: ~/src/clan_lib/clan/create.py:160::create_clan clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:143 Command exited with return code 1 clan-pytest-with-core> Caller: ~/src/clan_lib/clan/create.py:160::create_clan clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:143 git \ clan-pytest-with-core> -C /build/pytest-of-nixbld/pytest-0/popen-gw7/test_get_machine_writeability0/my-clan \ clan-pytest-with-core> config \ clan-pytest-with-core> user.name \ clan-pytest-with-core> clan-tool clan-pytest-with-core> Caller: ~/src/clan_lib/clan/create.py:165::create_clan clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:143 Command exited with return code 0 clan-pytest-with-core> Caller: ~/src/clan_lib/clan/create.py:165::create_clan clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:143 git \ clan-pytest-with-core> -C /build/pytest-of-nixbld/pytest-0/popen-gw7/test_get_machine_writeability0/my-clan \ clan-pytest-with-core> config \ clan-pytest-with-core> user.email clan-pytest-with-core> Caller: ~/src/clan_lib/clan/create.py:167::create_clan clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:143 Command exited with return code 1 clan-pytest-with-core> Caller: ~/src/clan_lib/clan/create.py:167::create_clan clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:143 git \ clan-pytest-with-core> -C /build/pytest-of-nixbld/pytest-0/popen-gw7/test_get_machine_writeability0/my-clan \ clan-pytest-with-core> config \ clan-pytest-with-core> user.email \ clan-pytest-with-core> clan@example.com clan-pytest-with-core> Caller: ~/src/clan_lib/clan/create.py:172::create_clan clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:143 Command exited with return code 0 clan-pytest-with-core> Caller: ~/src/clan_lib/clan/create.py:172::create_clan clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:143 git \ clan-pytest-with-core> -C /build/pytest-of-nixbld/pytest-0/popen-gw7/test_get_machine_writeability0/my-clan \ clan-pytest-with-core> add \ clan-pytest-with-core> . clan-pytest-with-core> Caller: ~/src/clan_lib/clan/create.py:186::create_clan clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:143 Command exited with return code 0 clan-pytest-with-core> Caller: ~/src/clan_lib/clan/create.py:186::create_clan clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:143 git \ clan-pytest-with-core> -C /build/pytest-of-nixbld/pytest-0/popen-gw7/test_get_machine_writeability0/my-clan \ clan-pytest-with-core> commit \ clan-pytest-with-core> -m 'Initial commit' clan-pytest-with-core> Caller: ~/src/clan_lib/clan/create.py:187::create_clan clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:143 Command exited with return code 0 clan-pytest-with-core> Caller: ~/src/clan_lib/clan/create.py:187::create_clan clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:927 Prefetching flake /build/pytest-of-nixbld/pytest-0/popen-gw7/test_get_machine_writeability0/my-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.inventoryClass.inventorySerialization.{instances,machines,meta} clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:143 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: ~/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:143 Command exited with return code 0 clan-pytest-with-core> Caller: ~/src/clan_lib/nix/__init__.py:91::nix_config clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:789 Loading flake cache from file /build/clan-flake-cache/flakes-v2/c034a164aa1321b113259b8b85694bd30a06e4b6 clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:927 Prefetching flake /build/pytest-of-nixbld/pytest-0/popen-gw7/test_get_machine_writeability0/my-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.inventoryClass.inventorySerialization.{instances,machines,meta} clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1174 Cache miss for clanInternals.inventoryClass.introspection clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:789 Loading flake cache from file /build/clan-flake-cache/flakes-v2/ca1ec87ca0dcb5b7cc59a94ffd9f16286258e3b7 clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1179 (cached) $ clan select 'clanInternals.inventoryClass.inventorySerialization.{instances,machines,meta}' clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:143 git \ clan-pytest-with-core> -C /build/pytest-of-nixbld/pytest-0/popen-gw7/test_get_machine_writeability0/my-clan \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-of-nixbld/pytest-0/popen-gw7/test_get_machine_writeability0/my-clan/inventory.json clan-pytest-with-core> Caller: ~/src/clan_lib/git/__init__.py:89::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:143 Command exited with return code 0 clan-pytest-with-core> Caller: ~/src/clan_lib/git/__init__.py:89::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.git:__init__.py:98 Adding inventory.json to git clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:143 git \ clan-pytest-with-core> -C /build/pytest-of-nixbld/pytest-0/popen-gw7/test_get_machine_writeability0/my-clan \ clan-pytest-with-core> diff \ clan-pytest-with-core> --cached --exit-code \ clan-pytest-with-core> -- /build/pytest-of-nixbld/pytest-0/popen-gw7/test_get_machine_writeability0/my-clan/inventory.json clan-pytest-with-core> Caller: ~/src/clan_lib/git/__init__.py:111::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:143 Command exited with return code 1 clan-pytest-with-core> Caller: ~/src/clan_lib/git/__init__.py:111::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:143 git \ clan-pytest-with-core> -C /build/pytest-of-nixbld/pytest-0/popen-gw7/test_get_machine_writeability0/my-clan \ clan-pytest-with-core> commit \ clan-pytest-with-core> -m 'inventory.json: test writeability' \ clan-pytest-with-core> --no-verify /build/pytest-of-nixbld/pytest-0/popen-gw7/test_get_machine_writeability0/my-clan/inventory.json clan-pytest-with-core> Caller: ~/src/clan_lib/git/__init__.py:131::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:143 Command exited with return code 0 clan-pytest-with-core> Caller: ~/src/clan_lib/git/__init__.py:131::_commit_file_to_git clan-pytest-with-core> clan-pytest-with-core> INFO clan_lib.git:__init__.py:141 Committed inventory.json to git clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:927 Prefetching flake /build/pytest-of-nixbld/pytest-0/popen-gw7/test_get_machine_writeability0/my-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.inventoryClass.introspection clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1174 Cache miss for clanInternals.inventoryClass.inventorySerialization.{instances,machines,meta} clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:789 Loading flake cache from file /build/clan-flake-cache/flakes-v2/682ccdd0f180a491851c872c4a25730d80626409 clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1179 (cached) $ clan select 'clanInternals.inventoryClass.inventorySerialization.{instances,machines,meta}' clan-pytest-with-core> _________________________________ test_backups _________________________________ clan-pytest-with-core> [gw2] linux -- Python 3.14.7 /nix/store/3n4qphl9s728sz8frmpqqrv9b1m87g68-python3-3.14.7/bin/python clan-pytest-with-core> clan-pytest-with-core> self = Flake(identifier='/build/pytest-6r250hbm/test_flake_with_core', hash='sha256-NAve7F8OFpzSD2BF4PbW3YKKncf/4DYLFctNbqdki...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.machines.x86_64-linux."vm1".config.clan.core.backups'] 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-6r250hbm'), 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/g2rmcxihwcdr2k3vc8v7cln3gsxadd9a-source?narHash=sha256-NAve7F8OFpzSD2BF4PbW3YKKncf/4DYLFctNbqdki7A="; 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": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "str", "value": "vm1"}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "backups"}]'"'"''"'"') 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": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "str", "value": "vm1"}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "backups"}]'') 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": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "str", "value": "vm1"}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "backups"}]'') 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": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "str", "value": "vm1"}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "backups"}]'') 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 … from call site clan-pytest-with-core> E at /build/store/nix/store/cba1x9mxnwr8b36cw41bya7g6d5v1p7d-source/select.nix:312:15: clan-pytest-with-core> E 311| else if selector.type == "str" then clan-pytest-with-core> E 312| recurse selectors (idx + 1) (builtins.getAttr selector.value obj) clan-pytest-with-core> E | ^ clan-pytest-with-core> E 313| else if selector.type == "set" then clan-pytest-with-core> E clan-pytest-with-core> E (9 duplicate frames omitted) 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 'getAttr' builtin clan-pytest-with-core> E at /build/store/nix/store/cba1x9mxnwr8b36cw41bya7g6d5v1p7d-source/select.nix:312:44: clan-pytest-with-core> E 311| else if selector.type == "str" then clan-pytest-with-core> E 312| recurse selectors (idx + 1) (builtins.getAttr selector.value obj) clan-pytest-with-core> E | ^ clan-pytest-with-core> E 313| else if selector.type == "set" then clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'seq' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:401:18: clan-pytest-with-core> E 400| options = checked options; clan-pytest-with-core> E 401| config = checked (removeAttrs config [ "_module" ]); clan-pytest-with-core> E | ^ clan-pytest-with-core> E 402| _module = checked (config._module); 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:304:9: clan-pytest-with-core> E 303| checkUnmatched = clan-pytest-with-core> E 304| if config._module.check && config._module.freeformType == null && merged.unmatchedDefns != [ ] then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 305| let clan-pytest-with-core> E clan-pytest-with-core> E … in the right operand of the AND (&&) operator clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:304:72: clan-pytest-with-core> E 303| checkUnmatched = clan-pytest-with-core> E 304| if config._module.check && config._module.freeformType == null && merged.unmatchedDefns != [ ] then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 305| let clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'unmatchedDefns' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:940:7: clan-pytest-with-core> E 939| # Transforms unmatchedDefnsByName into a list of definitions clan-pytest-with-core> E 940| unmatchedDefns = clan-pytest-with-core> E | ^ clan-pytest-with-core> E 941| if configs == [ ] then clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'concatLists' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:946:11: clan-pytest-with-core> E 945| else clan-pytest-with-core> E 946| concatLists ( clan-pytest-with-core> E | ^ clan-pytest-with-core> E 947| mapAttrsToList ( clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:948:21: clan-pytest-with-core> E 947| mapAttrsToList ( clan-pytest-with-core> E 948| name: defs: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 949| map ( clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'map' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:949:15: clan-pytest-with-core> E 948| name: defs: clan-pytest-with-core> E 949| map ( clan-pytest-with-core> E | ^ clan-pytest-with-core> E 950| def: clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:932:22: clan-pytest-with-core> E 931| # Propagate all unmatched definitions from nested option sets clan-pytest-with-core> E 932| mapAttrs (n: v: v.unmatchedDefns) resultsByName clan-pytest-with-core> E | ^ clan-pytest-with-core> E 933| # Plus the definitions for the current prefix that don't have a matching option clan-pytest-with-core> E clan-pytest-with-core> E (10 duplicate frames omitted) clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:932:25: clan-pytest-with-core> E 931| # Propagate all unmatched definitions from nested option sets clan-pytest-with-core> E 932| mapAttrs (n: v: v.unmatchedDefns) resultsByName clan-pytest-with-core> E | ^ clan-pytest-with-core> E 933| # Plus the definitions for the current prefix that don't have a matching option clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:876:15: clan-pytest-with-core> E 875| resultsByName = mapAttrs ( clan-pytest-with-core> E 876| name: decls: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 877| # We're descending into attribute ‘name’. 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:888:9: clan-pytest-with-core> E 887| in clan-pytest-with-core> E 888| if length optionDecls == length decls then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 889| let clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'length' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:888:12: clan-pytest-with-core> E 887| in clan-pytest-with-core> E 888| if length optionDecls == length decls then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 889| let clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'filter' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:882:25: clan-pytest-with-core> E 881| defns' = rawDefinitionsByName.${name} or [ ]; clan-pytest-with-core> E 882| optionDecls = filter ( clan-pytest-with-core> E | ^ clan-pytest-with-core> E 883| m: clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:883:13: clan-pytest-with-core> E 882| optionDecls = filter ( clan-pytest-with-core> E 883| m: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 884| m.options ? _type clan-pytest-with-core> E clan-pytest-with-core> E … in the left operand of the AND (&&) operator clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:885:13: clan-pytest-with-core> E 884| m.options ? _type clan-pytest-with-core> E 885| && (m.options._type == "option" || throwDeclarationTypeError loc m.options._type m._file) clan-pytest-with-core> E | ^ clan-pytest-with-core> E 886| ) decls; clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'options' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:807:15: clan-pytest-with-core> E 806| pos = unsafeGetAttrPos n subtree; clan-pytest-with-core> E 807| options = option; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 808| }) subtree clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:289:73: clan-pytest-with-core> E 288| len = length attrPath; clan-pytest-with-core> E 289| atDepth = n: if n == len then value else { ${elemAt attrPath n} = atDepth (n + 1); }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 290| in clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'atDepth' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:289:17: clan-pytest-with-core> E 288| len = length attrPath; clan-pytest-with-core> E 289| atDepth = n: if n == len then value else { ${elemAt attrPath n} = atDepth (n + 1); }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 290| in clan-pytest-with-core> E clan-pytest-with-core> E … in the right operand of the update (//) operator clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:2047:9: clan-pytest-with-core> E 2046| } clan-pytest-with-core> E 2047| // optionalAttrs (toType != null) { clan-pytest-with-core> E | ^ clan-pytest-with-core> E 2048| type = toType; clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:2047:12: clan-pytest-with-core> E 2046| } clan-pytest-with-core> E 2047| // optionalAttrs (toType != null) { clan-pytest-with-core> E | ^ clan-pytest-with-core> E 2048| type = toType; clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'optionalAttrs' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:1492:25: clan-pytest-with-core> E 1491| */ clan-pytest-with-core> E 1492| optionalAttrs = cond: as: if cond then as else { }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1493| 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:1492:29: clan-pytest-with-core> E 1491| */ clan-pytest-with-core> E 1492| optionalAttrs = cond: as: if cond then as else { }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1493| clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:2036:17: clan-pytest-with-core> E 2035| let clan-pytest-with-core> E 2036| opt = attrByPath to { } options; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 2037| in clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'attrByPath' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:89:24: clan-pytest-with-core> E 88| attrByPath = clan-pytest-with-core> E 89| attrPath: default: set: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 90| let clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:106:5: clan-pytest-with-core> E 105| in clan-pytest-with-core> E 106| attrByPath' 0 set; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 107| clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'attrByPath'' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:93:12: clan-pytest-with-core> E 92| attrByPath' = clan-pytest-with-core> E 93| n: s: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 94| ( clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:102:35: clan-pytest-with-core> E 101| in clan-pytest-with-core> E 102| if s ? ${attr} then attrByPath' (n + 1) s.${attr} else default clan-pytest-with-core> E | ^ clan-pytest-with-core> E 103| ) clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'attrByPath'' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:93:12: clan-pytest-with-core> E 92| attrByPath' = clan-pytest-with-core> E 93| n: s: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 94| ( clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:102:35: clan-pytest-with-core> E 101| in clan-pytest-with-core> E 102| if s ? ${attr} then attrByPath' (n + 1) s.${attr} else default clan-pytest-with-core> E | ^ clan-pytest-with-core> E 103| ) clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'attrByPath'' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:93:12: clan-pytest-with-core> E 92| attrByPath' = clan-pytest-with-core> E 93| n: s: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 94| ( clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:102:35: clan-pytest-with-core> E 101| in clan-pytest-with-core> E 102| if s ? ${attr} then attrByPath' (n + 1) s.${attr} else default clan-pytest-with-core> E | ^ clan-pytest-with-core> E 103| ) clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'attrByPath'' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:93:12: clan-pytest-with-core> E 92| attrByPath' = clan-pytest-with-core> E 93| n: s: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 94| ( clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:102:55: clan-pytest-with-core> E 101| in clan-pytest-with-core> E 102| if s ? ${attr} then attrByPath' (n + 1) s.${attr} else default clan-pytest-with-core> E | ^ clan-pytest-with-core> E 103| ) clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:927:37: clan-pytest-with-core> E 926| clan-pytest-with-core> E 927| matchedOptions = mapAttrs (n: v: v.matchedOptions) resultsByName; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 928| clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'matchedOptions' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:893:13: clan-pytest-with-core> E 892| { clan-pytest-with-core> E 893| matchedOptions = evalOptionValue loc opt defns'; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 894| unmatchedDefns = [ ]; clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:893:30: clan-pytest-with-core> E 892| { clan-pytest-with-core> E 893| matchedOptions = evalOptionValue loc opt defns'; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 894| unmatchedDefns = [ ]; clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'evalOptionValue' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1103:15: clan-pytest-with-core> E 1102| evalOptionValue = clan-pytest-with-core> E 1103| loc: opt: defs: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1104| let clan-pytest-with-core> E clan-pytest-with-core> E … in the left operand of the update (//) operator clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1148:5: clan-pytest-with-core> E 1147| warnDeprecation opt clan-pytest-with-core> E 1148| // { clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1149| value = addErrorContext "while evaluating the option `${showOption loc}':" value; 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1141:9: clan-pytest-with-core> E 1140| warnDeprecation = clan-pytest-with-core> E 1141| if (opt.type.deprecationMessage != null) then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1142| warn "The type `types.${opt.type.name}' of option `${showOption loc}' defined in ${showFiles opt.declarations} is deprecated. ${opt.type.deprecationMessage}" clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:890:19: clan-pytest-with-core> E 889| let clan-pytest-with-core> E 890| opt = fixupOptionType loc (mergeOptionDecls loc decls); clan-pytest-with-core> E | ^ clan-pytest-with-core> E 891| in clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'fixupOptionType' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1473:10: clan-pytest-with-core> E 1472| fixupOptionType = clan-pytest-with-core> E 1473| loc: opt: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1474| if opt.type.getSubModules or null == null then 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1474:5: clan-pytest-with-core> E 1473| loc: opt: clan-pytest-with-core> E 1474| if opt.type.getSubModules or null == null then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1475| opt // { type = opt.type or types.unspecified; } clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'type.getSubModules' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/nixos/modules/services/hardware/bluetooth.nix:72:9: clan-pytest-with-core> E 71| settings = mkOption { clan-pytest-with-core> E 72| type = cfgFmt.type; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 73| default = { }; clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/nixos/modules/services/hardware/bluetooth.nix:26:12: clan-pytest-with-core> E 25| clan-pytest-with-core> E 26| cfgFmt = pkgs.formats.ini { }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 27| clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:727:15: clan-pytest-with-core> E 726| extraArgs = mapAttrs ( clan-pytest-with-core> E 727| name: _: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 728| addErrorContext (context name) ( clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the module argument `pkgs' in "/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/nixos/modules/services/hardware/bluetooth.nix": clan-pytest-with-core> E clan-pytest-with-core> E … noting that argument `pkgs` is not externally provided, so querying `_module.args` instead, requiring `config` clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:731:13: clan-pytest-with-core> E 730| "noting that argument `${name}` is not externally provided, so querying `_module.args` instead, requiring `config`" clan-pytest-with-core> E 731| config._module.args.${name} clan-pytest-with-core> E | ^ clan-pytest-with-core> E 732| ) clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/types.nix:1029:18: clan-pytest-with-core> E 1028| value = mapAttrs ( clan-pytest-with-core> E 1029| n: v: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1030| if lazy then clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'optionalValue.value' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1312:5: clan-pytest-with-core> E 1311| clan-pytest-with-core> E 1312| optionalValue = if isDefined then { value = mergedValue; } else { }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1313| }; 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1312:21: clan-pytest-with-core> E 1311| clan-pytest-with-core> E 1312| optionalValue = if isDefined then { value = mergedValue; } else { }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1313| }; clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'values' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1240:11: clan-pytest-with-core> E 1239| { clan-pytest-with-core> E 1240| values = defsSorted; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1241| inherit (defsFiltered) highestPrio; 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1211:11: clan-pytest-with-core> E 1210| # Avoid sorting if we don't have to. clan-pytest-with-core> E 1211| if any (def: def.value._type or "" == "order") defsFiltered.values then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1212| sortProperties defsFiltered.values clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'any' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1211:14: clan-pytest-with-core> E 1210| # Avoid sorting if we don't have to. clan-pytest-with-core> E 1211| if any (def: def.value._type or "" == "order") defsFiltered.values then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1212| sortProperties defsFiltered.values clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1211:19: clan-pytest-with-core> E 1210| # Avoid sorting if we don't have to. clan-pytest-with-core> E 1211| if any (def: def.value._type or "" == "order") defsFiltered.values then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1212| sortProperties defsFiltered.values clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'value._type' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1422:67: clan-pytest-with-core> E 1421| strip = clan-pytest-with-core> E 1422| def: if def.value._type or "" == "override" then def // { value = def.value.content; } else def; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1423| in clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'value.content' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1566:22: clan-pytest-with-core> E 1565| _type = "override"; clan-pytest-with-core> E 1566| inherit priority content; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1567| }; 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/nixos/modules/misc/nixpkgs.nix:107:15: clan-pytest-with-core> E 106| clan-pytest-with-core> E 107| finalPkgs = if opt.pkgs.isDefined then cfg.pkgs.appendOverlays cfg.overlays else defaultPkgs; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 108| clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'pkgs.isDefined' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1154:21: clan-pytest-with-core> E 1153| definitionsWithLocations = res.defsFinal; clan-pytest-with-core> E 1154| inherit (res) isDefined; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1155| inherit (res.checkedAndMerged) valueMeta; clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'isDefined' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1310:5: clan-pytest-with-core> E 1309| clan-pytest-with-core> E 1310| isDefined = defsFinal != [ ]; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1311| clan-pytest-with-core> E clan-pytest-with-core> E (6 duplicate frames omitted) clan-pytest-with-core> E clan-pytest-with-core> E error: attribute 'system' missing clan-pytest-with-core> E at /build/store/nix/store/y3h139bhv4373m1hab367ma4p5i95i2f-source/modules/clan/module.nix:164:24: clan-pytest-with-core> E 163| (lib.modules.importApply ../../nixosModules/machineModules/overridePkgs.nix { clan-pytest-with-core> E 164| pkgs = nixpkgsMatrix.${config.inventory.machines.${name}.nixpkgs}.system.${system}.pkgs; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 165| }) clan-pytest-with-core> E Did you mean systems? 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> test_flake_with_core = FlakeForTest(path=PosixPath('/build/pytest-6r250hbm/test_flake_with_core')) 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_backups( clan-pytest-with-core> test_flake_with_core: FlakeForTest, clan-pytest-with-core> ) -> None: clan-pytest-with-core> > cli.run( clan-pytest-with-core> [ clan-pytest-with-core> "backups", clan-pytest-with-core> "list", clan-pytest-with-core> "--flake", clan-pytest-with-core> str(test_flake_with_core.path), clan-pytest-with-core> "vm1", clan-pytest-with-core> ], clan-pytest-with-core> ) clan-pytest-with-core> clan-pytest-with-core> /build/src/clan_cli/tests/test_backups.py:11: 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/backups/list.py:17: in list_command clan-pytest-with-core> backups = list_backups(machine=machine, provider=args.provider) clan-pytest-with-core> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ clan-pytest-with-core> /build/src/clan_lib/backups/list.py:50: in list_backups clan-pytest-with-core> backup_metadata = machine.flake.select( 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-6r250hbm/test_flake_with_core', hash='sha256-NAve7F8OFpzSD2BF4PbW3YKKncf/4DYLFctNbqdki...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.machines.x86_64-linux."vm1".config.clan.core.backups'] 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.machines.x86_64-linux."vm1".config.clan.core.backups' clan-pytest-with-core> E Reason: attribute 'system' missing clan-pytest-with-core> E at /build/store/nix/store/y3h139bhv4373m1hab367ma4p5i95i2f-source/modules/clan/module.nix:164:24: clan-pytest-with-core> E 163| (lib.modules.importApply ../../nixosModules/machineModules/overridePkgs.nix { clan-pytest-with-core> E 164| pkgs = nixpkgsMatrix.${config.inventory.machines.${name}.nixpkgs}.system.${system}.pkgs; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 165| }) clan-pytest-with-core> E Did you mean systems?. 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-6r250hbm/test_flake_with_core/flake.nix clan-pytest-with-core> clan_core: /nix/store/x4g1qsn1nq0q56zn8h9c7xaiysv7bsf2-clan-core-flake clan-pytest-with-core> flake: /build/pytest-6r250hbm/test_flake_with_core clan-pytest-with-core> Initialized empty Git repository in /build/pytest-6r250hbm/test_flake_with_core/.git/ clan-pytest-with-core> [main (root-commit) 660684f] Initial commit clan-pytest-with-core> 4 files changed, 254 insertions(+) clan-pytest-with-core> create mode 100644 .clan-flake 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 machines/.gitkeep clan-pytest-with-core> ---------------------------- Captured stderr setup ----------------------------- 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: /build/src/clan_cli/tests/fixtures_flakes.py:118::substitute 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/pytest-6r250hbm/test_flake_with_core/flake.lock": clan-pytest-with-core> • Added input 'clan-core': clan-pytest-with-core> 'path:/nix/store/x4g1qsn1nq0q56zn8h9c7xaiysv7bsf2-clan-core-flake?lastModified=1&narHash=sha256-Ynx5u312tlxJbGJCSevw5zZVxrd02FisWE1my%2B%2BFRSw%3D' (1970-01-01) clan-pytest-with-core> • Added input 'clan-core/data-mesher': clan-pytest-with-core> 'path:/nix/store/kdjkigwckgrfz0yg0d9z7kj2xkf084vs-source?lastModified=1&narHash=sha256-Yase/4e4aNN9QvUMqPH9ngbAmlcJCqLmFL0zuURdkuA%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/w2c23ykc12mswlg8hrrjzb5gv9gvkzwq-source?lastModified=1&narHash=sha256-RxWs5ND31KzTG7wvMM%2BPMfUjyNpmIEr999lqNARaM5o%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/lrxvs4l9bqbgjfz7w9bkfg5zqq442jxc-source?lastModified=1&narHash=sha256-4dtXQk/NMePegK/nWp5NSeuZKLATItOq61lpEvmXqGw%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/p17akwn814w226jq2cdkkhcw4psb0ga9-source?lastModified=0&narHash=sha256-tkD1h/1jLJ6qZHjG7/TOZT1qqI1ej3VPPCufHQyv1Uo%3D' (1970-01-01) clan-pytest-with-core> • Added input 'clan-core/sops-nix': clan-pytest-with-core> 'path:/nix/store/s154mmk8ahvc71gq8xfkbzlk240yvniv-source?lastModified=1&narHash=sha256-gkig4nPi1CWc4Z50GBsjE4ygSE7hMpl/TwID2an2Cck%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/9m1jsz5b9ggmjij2vkmafnhn26g96jjn-source?lastModified=1&narHash=sha256-brhZ8DmuGtzkCYHJg4HEd602amKm89Y9ytsFZ5uWD1w%3D' (1970-01-01) clan-pytest-with-core> • Added input 'clan-core/treefmt-nix': clan-pytest-with-core> 'path:/nix/store/7sjy8935654h3220n5gbaclf5nfw4nzx-source?lastModified=1&narHash=sha256-WSFCsDSE5ffgD2MqzkM2CYjeFiKhRF/dJUN8uedb6YE%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> 'path:/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source?lastModified=0&narHash=sha256-tkD1h/1jLJ6qZHjG7/TOZT1qqI1ej3VPPCufHQyv1Uo%3D' (1970-01-01) clan-pytest-with-core> Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_cli/tests/fixtures_flakes.py:118::substitute clan-pytest-with-core> clan-pytest-with-core> warning: you don't have Internet access; disabling some network-dependent features clan-pytest-with-core> !! $HOME does not point to a temp directory!! HOME=/build/pytest-6r250hbm clan-pytest-with-core> ------------------------------ Captured log setup ------------------------------ clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:143 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: /build/src/clan_cli/tests/fixtures_flakes.py:118::substitute 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/pytest-6r250hbm/test_flake_with_core/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/x4g1qsn1nq0q56zn8h9c7xaiysv7bsf2-clan-core-flake?lastModified=1&narHash=sha256-Ynx5u312tlxJbGJCSevw5zZVxrd02FisWE1my%2B%2BFRSw%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/kdjkigwckgrfz0yg0d9z7kj2xkf084vs-source?lastModified=1&narHash=sha256-Yase/4e4aNN9QvUMqPH9ngbAmlcJCqLmFL0zuURdkuA%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/w2c23ykc12mswlg8hrrjzb5gv9gvkzwq-source?lastModified=1&narHash=sha256-RxWs5ND31KzTG7wvMM%2BPMfUjyNpmIEr999lqNARaM5o%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/lrxvs4l9bqbgjfz7w9bkfg5zqq442jxc-source?lastModified=1&narHash=sha256-4dtXQk/NMePegK/nWp5NSeuZKLATItOq61lpEvmXqGw%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/p17akwn814w226jq2cdkkhcw4psb0ga9-source?lastModified=0&narHash=sha256-tkD1h/1jLJ6qZHjG7/TOZT1qqI1ej3VPPCufHQyv1Uo%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/s154mmk8ahvc71gq8xfkbzlk240yvniv-source?lastModified=1&narHash=sha256-gkig4nPi1CWc4Z50GBsjE4ygSE7hMpl/TwID2an2Cck%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/9m1jsz5b9ggmjij2vkmafnhn26g96jjn-source?lastModified=1&narHash=sha256-brhZ8DmuGtzkCYHJg4HEd602amKm89Y9ytsFZ5uWD1w%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/7sjy8935654h3220n5gbaclf5nfw4nzx-source?lastModified=1&narHash=sha256-WSFCsDSE5ffgD2MqzkM2CYjeFiKhRF/dJUN8uedb6YE%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 'path:/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source?lastModified=0&narHash=sha256-tkD1h/1jLJ6qZHjG7/TOZT1qqI1ej3VPPCufHQyv1Uo%3D' (1970-01-01) clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:143 Command exited with return code 0 clan-pytest-with-core> Caller: /build/src/clan_cli/tests/fixtures_flakes.py:118::substitute clan-pytest-with-core> 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-6r250hbm clan-pytest-with-core> ----------------------------- Captured stderr call ----------------------------- clan-pytest-with-core> [localhost] $ clan backups list --flake /build/pytest-6r250hbm/test_flake_with_core vm1 clan-pytest-with-core> Caller: /build/src/clan_cli/tests/test_backups.py:11::test_backups clan-pytest-with-core> clan-pytest-with-core> Prefetching flake /build/pytest-6r250hbm/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/0cecfc668b186543263649fd04d192ca10abe070 clan-pytest-with-core> Cache miss for clanInternals.machines.x86_64-linux."vm1".config.clan.core.backups clan-pytest-with-core> ------------------------------ Captured log call ------------------------------- clan-pytest-with-core> DEBUG clan_cli.tests.helpers.cli:__init__.py:143 $ clan backups list --flake /build/pytest-6r250hbm/test_flake_with_core vm1 clan-pytest-with-core> Caller: /build/src/clan_cli/tests/test_backups.py:11::test_backups clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:927 Prefetching flake /build/pytest-6r250hbm/test_flake_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.flake.flake:flake.py:789 Loading flake cache from file /build/clan-flake-cache/flakes-v2/0cecfc668b186543263649fd04d192ca10abe070 clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1174 Cache miss for clanInternals.machines.x86_64-linux."vm1".config.clan.core.backups clan-pytest-with-core> __________________________ test_ssh_shell_from_deploy __________________________ clan-pytest-with-core> [gw4] linux -- Python 3.14.7 /nix/store/3n4qphl9s728sz8frmpqqrv9b1m87g68-python3-3.14.7/bin/python clan-pytest-with-core> clan-pytest-with-core> self = Flake(identifier='/build/pytest-f40blzq3/flake', hash='sha256-7dXdEuj2YRwjIrMBQwuWaMZWMHbGOY0GlJgc5Ijb/mU=', 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.machines.x86_64-linux."m1_machine".config.clan.core.networking.targetHost'] 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-f40blzq3'), 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/whbmqb21f5xbkz0pl57sjs28g9gjgl5k-source?narHash=sha256-7dXdEuj2YRwjIrMBQwuWaMZWMHbGOY0GlJgc5Ijb/mU="; 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": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "str", "value": "m1_machine"}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "networking"}, {"type": "str", "value": "targetHost"}]'"'"''"'"') 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": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "str", "value": "m1_machine"}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "networking"}, {"type": "str", "value": "targetHost"}]'') 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": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "str", "value": "m1_machine"}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "networking"}, {"type": "str", "value": "targetHost"}]'') 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": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "str", "value": "m1_machine"}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "networking"}, {"type": "str", "value": "targetHost"}]'') 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 … from call site clan-pytest-with-core> E at /build/store/nix/store/cba1x9mxnwr8b36cw41bya7g6d5v1p7d-source/select.nix:312:15: clan-pytest-with-core> E 311| else if selector.type == "str" then clan-pytest-with-core> E 312| recurse selectors (idx + 1) (builtins.getAttr selector.value obj) clan-pytest-with-core> E | ^ clan-pytest-with-core> E 313| else if selector.type == "set" then clan-pytest-with-core> E clan-pytest-with-core> E (9 duplicate frames omitted) 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 'getAttr' builtin clan-pytest-with-core> E at /build/store/nix/store/cba1x9mxnwr8b36cw41bya7g6d5v1p7d-source/select.nix:312:44: clan-pytest-with-core> E 311| else if selector.type == "str" then clan-pytest-with-core> E 312| recurse selectors (idx + 1) (builtins.getAttr selector.value obj) clan-pytest-with-core> E | ^ clan-pytest-with-core> E 313| else if selector.type == "set" then clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'seq' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:401:18: clan-pytest-with-core> E 400| options = checked options; clan-pytest-with-core> E 401| config = checked (removeAttrs config [ "_module" ]); clan-pytest-with-core> E | ^ clan-pytest-with-core> E 402| _module = checked (config._module); 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:304:9: clan-pytest-with-core> E 303| checkUnmatched = clan-pytest-with-core> E 304| if config._module.check && config._module.freeformType == null && merged.unmatchedDefns != [ ] then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 305| let clan-pytest-with-core> E clan-pytest-with-core> E … in the right operand of the AND (&&) operator clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:304:72: clan-pytest-with-core> E 303| checkUnmatched = clan-pytest-with-core> E 304| if config._module.check && config._module.freeformType == null && merged.unmatchedDefns != [ ] then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 305| let clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'unmatchedDefns' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:940:7: clan-pytest-with-core> E 939| # Transforms unmatchedDefnsByName into a list of definitions clan-pytest-with-core> E 940| unmatchedDefns = clan-pytest-with-core> E | ^ clan-pytest-with-core> E 941| if configs == [ ] then clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'concatLists' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:946:11: clan-pytest-with-core> E 945| else clan-pytest-with-core> E 946| concatLists ( clan-pytest-with-core> E | ^ clan-pytest-with-core> E 947| mapAttrsToList ( clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:948:21: clan-pytest-with-core> E 947| mapAttrsToList ( clan-pytest-with-core> E 948| name: defs: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 949| map ( clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'map' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:949:15: clan-pytest-with-core> E 948| name: defs: clan-pytest-with-core> E 949| map ( clan-pytest-with-core> E | ^ clan-pytest-with-core> E 950| def: clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:932:22: clan-pytest-with-core> E 931| # Propagate all unmatched definitions from nested option sets clan-pytest-with-core> E 932| mapAttrs (n: v: v.unmatchedDefns) resultsByName clan-pytest-with-core> E | ^ clan-pytest-with-core> E 933| # Plus the definitions for the current prefix that don't have a matching option clan-pytest-with-core> E clan-pytest-with-core> E (10 duplicate frames omitted) clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:932:25: clan-pytest-with-core> E 931| # Propagate all unmatched definitions from nested option sets clan-pytest-with-core> E 932| mapAttrs (n: v: v.unmatchedDefns) resultsByName clan-pytest-with-core> E | ^ clan-pytest-with-core> E 933| # Plus the definitions for the current prefix that don't have a matching option clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:876:15: clan-pytest-with-core> E 875| resultsByName = mapAttrs ( clan-pytest-with-core> E 876| name: decls: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 877| # We're descending into attribute ‘name’. 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:888:9: clan-pytest-with-core> E 887| in clan-pytest-with-core> E 888| if length optionDecls == length decls then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 889| let clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'length' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:888:12: clan-pytest-with-core> E 887| in clan-pytest-with-core> E 888| if length optionDecls == length decls then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 889| let clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'filter' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:882:25: clan-pytest-with-core> E 881| defns' = rawDefinitionsByName.${name} or [ ]; clan-pytest-with-core> E 882| optionDecls = filter ( clan-pytest-with-core> E | ^ clan-pytest-with-core> E 883| m: clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:883:13: clan-pytest-with-core> E 882| optionDecls = filter ( clan-pytest-with-core> E 883| m: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 884| m.options ? _type clan-pytest-with-core> E clan-pytest-with-core> E … in the left operand of the AND (&&) operator clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:885:13: clan-pytest-with-core> E 884| m.options ? _type clan-pytest-with-core> E 885| && (m.options._type == "option" || throwDeclarationTypeError loc m.options._type m._file) clan-pytest-with-core> E | ^ clan-pytest-with-core> E 886| ) decls; clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'options' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:807:15: clan-pytest-with-core> E 806| pos = unsafeGetAttrPos n subtree; clan-pytest-with-core> E 807| options = option; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 808| }) subtree clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:289:73: clan-pytest-with-core> E 288| len = length attrPath; clan-pytest-with-core> E 289| atDepth = n: if n == len then value else { ${elemAt attrPath n} = atDepth (n + 1); }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 290| in clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'atDepth' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:289:17: clan-pytest-with-core> E 288| len = length attrPath; clan-pytest-with-core> E 289| atDepth = n: if n == len then value else { ${elemAt attrPath n} = atDepth (n + 1); }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 290| in clan-pytest-with-core> E clan-pytest-with-core> E … in the right operand of the update (//) operator clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:2047:9: clan-pytest-with-core> E 2046| } clan-pytest-with-core> E 2047| // optionalAttrs (toType != null) { clan-pytest-with-core> E | ^ clan-pytest-with-core> E 2048| type = toType; clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:2047:12: clan-pytest-with-core> E 2046| } clan-pytest-with-core> E 2047| // optionalAttrs (toType != null) { clan-pytest-with-core> E | ^ clan-pytest-with-core> E 2048| type = toType; clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'optionalAttrs' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:1492:25: clan-pytest-with-core> E 1491| */ clan-pytest-with-core> E 1492| optionalAttrs = cond: as: if cond then as else { }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1493| 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:1492:29: clan-pytest-with-core> E 1491| */ clan-pytest-with-core> E 1492| optionalAttrs = cond: as: if cond then as else { }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1493| clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:2036:17: clan-pytest-with-core> E 2035| let clan-pytest-with-core> E 2036| opt = attrByPath to { } options; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 2037| in clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'attrByPath' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:89:24: clan-pytest-with-core> E 88| attrByPath = clan-pytest-with-core> E 89| attrPath: default: set: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 90| let clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:106:5: clan-pytest-with-core> E 105| in clan-pytest-with-core> E 106| attrByPath' 0 set; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 107| clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'attrByPath'' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:93:12: clan-pytest-with-core> E 92| attrByPath' = clan-pytest-with-core> E 93| n: s: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 94| ( clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:102:35: clan-pytest-with-core> E 101| in clan-pytest-with-core> E 102| if s ? ${attr} then attrByPath' (n + 1) s.${attr} else default clan-pytest-with-core> E | ^ clan-pytest-with-core> E 103| ) clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'attrByPath'' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:93:12: clan-pytest-with-core> E 92| attrByPath' = clan-pytest-with-core> E 93| n: s: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 94| ( clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:102:35: clan-pytest-with-core> E 101| in clan-pytest-with-core> E 102| if s ? ${attr} then attrByPath' (n + 1) s.${attr} else default clan-pytest-with-core> E | ^ clan-pytest-with-core> E 103| ) clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'attrByPath'' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:93:12: clan-pytest-with-core> E 92| attrByPath' = clan-pytest-with-core> E 93| n: s: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 94| ( clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:102:35: clan-pytest-with-core> E 101| in clan-pytest-with-core> E 102| if s ? ${attr} then attrByPath' (n + 1) s.${attr} else default clan-pytest-with-core> E | ^ clan-pytest-with-core> E 103| ) clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'attrByPath'' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:93:12: clan-pytest-with-core> E 92| attrByPath' = clan-pytest-with-core> E 93| n: s: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 94| ( clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:102:55: clan-pytest-with-core> E 101| in clan-pytest-with-core> E 102| if s ? ${attr} then attrByPath' (n + 1) s.${attr} else default clan-pytest-with-core> E | ^ clan-pytest-with-core> E 103| ) clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:927:37: clan-pytest-with-core> E 926| clan-pytest-with-core> E 927| matchedOptions = mapAttrs (n: v: v.matchedOptions) resultsByName; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 928| clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'matchedOptions' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:893:13: clan-pytest-with-core> E 892| { clan-pytest-with-core> E 893| matchedOptions = evalOptionValue loc opt defns'; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 894| unmatchedDefns = [ ]; clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:893:30: clan-pytest-with-core> E 892| { clan-pytest-with-core> E 893| matchedOptions = evalOptionValue loc opt defns'; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 894| unmatchedDefns = [ ]; clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'evalOptionValue' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1103:15: clan-pytest-with-core> E 1102| evalOptionValue = clan-pytest-with-core> E 1103| loc: opt: defs: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1104| let clan-pytest-with-core> E clan-pytest-with-core> E … in the left operand of the update (//) operator clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1148:5: clan-pytest-with-core> E 1147| warnDeprecation opt clan-pytest-with-core> E 1148| // { clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1149| value = addErrorContext "while evaluating the option `${showOption loc}':" value; 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1141:9: clan-pytest-with-core> E 1140| warnDeprecation = clan-pytest-with-core> E 1141| if (opt.type.deprecationMessage != null) then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1142| warn "The type `types.${opt.type.name}' of option `${showOption loc}' defined in ${showFiles opt.declarations} is deprecated. ${opt.type.deprecationMessage}" clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:890:19: clan-pytest-with-core> E 889| let clan-pytest-with-core> E 890| opt = fixupOptionType loc (mergeOptionDecls loc decls); clan-pytest-with-core> E | ^ clan-pytest-with-core> E 891| in clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'fixupOptionType' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1473:10: clan-pytest-with-core> E 1472| fixupOptionType = clan-pytest-with-core> E 1473| loc: opt: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1474| if opt.type.getSubModules or null == null then 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1474:5: clan-pytest-with-core> E 1473| loc: opt: clan-pytest-with-core> E 1474| if opt.type.getSubModules or null == null then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1475| opt // { type = opt.type or types.unspecified; } clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'type.getSubModules' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/nixos/modules/services/hardware/bluetooth.nix:72:9: clan-pytest-with-core> E 71| settings = mkOption { clan-pytest-with-core> E 72| type = cfgFmt.type; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 73| default = { }; clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/nixos/modules/services/hardware/bluetooth.nix:26:12: clan-pytest-with-core> E 25| clan-pytest-with-core> E 26| cfgFmt = pkgs.formats.ini { }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 27| clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:727:15: clan-pytest-with-core> E 726| extraArgs = mapAttrs ( clan-pytest-with-core> E 727| name: _: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 728| addErrorContext (context name) ( clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the module argument `pkgs' in "/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/nixos/modules/services/hardware/bluetooth.nix": clan-pytest-with-core> E clan-pytest-with-core> E … noting that argument `pkgs` is not externally provided, so querying `_module.args` instead, requiring `config` clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:731:13: clan-pytest-with-core> E 730| "noting that argument `${name}` is not externally provided, so querying `_module.args` instead, requiring `config`" clan-pytest-with-core> E 731| config._module.args.${name} clan-pytest-with-core> E | ^ clan-pytest-with-core> E 732| ) clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/types.nix:1029:18: clan-pytest-with-core> E 1028| value = mapAttrs ( clan-pytest-with-core> E 1029| n: v: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1030| if lazy then clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'optionalValue.value' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1312:5: clan-pytest-with-core> E 1311| clan-pytest-with-core> E 1312| optionalValue = if isDefined then { value = mergedValue; } else { }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1313| }; 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1312:21: clan-pytest-with-core> E 1311| clan-pytest-with-core> E 1312| optionalValue = if isDefined then { value = mergedValue; } else { }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1313| }; clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'values' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1240:11: clan-pytest-with-core> E 1239| { clan-pytest-with-core> E 1240| values = defsSorted; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1241| inherit (defsFiltered) highestPrio; 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1211:11: clan-pytest-with-core> E 1210| # Avoid sorting if we don't have to. clan-pytest-with-core> E 1211| if any (def: def.value._type or "" == "order") defsFiltered.values then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1212| sortProperties defsFiltered.values clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'any' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1211:14: clan-pytest-with-core> E 1210| # Avoid sorting if we don't have to. clan-pytest-with-core> E 1211| if any (def: def.value._type or "" == "order") defsFiltered.values then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1212| sortProperties defsFiltered.values clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1211:19: clan-pytest-with-core> E 1210| # Avoid sorting if we don't have to. clan-pytest-with-core> E 1211| if any (def: def.value._type or "" == "order") defsFiltered.values then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1212| sortProperties defsFiltered.values clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'value._type' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1422:67: clan-pytest-with-core> E 1421| strip = clan-pytest-with-core> E 1422| def: if def.value._type or "" == "override" then def // { value = def.value.content; } else def; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1423| in clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'value.content' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1566:22: clan-pytest-with-core> E 1565| _type = "override"; clan-pytest-with-core> E 1566| inherit priority content; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1567| }; 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/nixos/modules/misc/nixpkgs.nix:107:15: clan-pytest-with-core> E 106| clan-pytest-with-core> E 107| finalPkgs = if opt.pkgs.isDefined then cfg.pkgs.appendOverlays cfg.overlays else defaultPkgs; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 108| clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'pkgs.isDefined' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1154:21: clan-pytest-with-core> E 1153| definitionsWithLocations = res.defsFinal; clan-pytest-with-core> E 1154| inherit (res) isDefined; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1155| inherit (res.checkedAndMerged) valueMeta; clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'isDefined' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1310:5: clan-pytest-with-core> E 1309| clan-pytest-with-core> E 1310| isDefined = defsFinal != [ ]; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1311| clan-pytest-with-core> E clan-pytest-with-core> E (6 duplicate frames omitted) clan-pytest-with-core> E clan-pytest-with-core> E error: attribute 'system' missing clan-pytest-with-core> E at /build/store/nix/store/y3h139bhv4373m1hab367ma4p5i95i2f-source/modules/clan/module.nix:164:24: clan-pytest-with-core> E 163| (lib.modules.importApply ../../nixosModules/machineModules/overridePkgs.nix { clan-pytest-with-core> E 164| pkgs = nixpkgsMatrix.${config.inventory.machines.${name}.nixpkgs}.system.${system}.pkgs; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 165| }) clan-pytest-with-core> E Did you mean systems? 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> hosts = [Remote(address='127.0.0.1', command_prefix='local_test', user='nixbld', port=43455, private_key=PosixPath('/build/src...', verbose_ssh=False, ssh_options={}, socks_port=None, socks_wrapper=None, _control_path_dir=None, _askpass_path=None)] clan-pytest-with-core> flake = 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_ssh_shell_from_deploy( clan-pytest-with-core> hosts: list[Remote], clan-pytest-with-core> flake: ClanFlake, clan-pytest-with-core> ) -> None: clan-pytest-with-core> host = hosts[0] clan-pytest-with-core> clan-pytest-with-core> machine1_config = flake.machines["m1_machine"] = create_test_machine_config() clan-pytest-with-core> machine1_config["clan"]["networking"]["targetHost"] = host.ssh_url() clan-pytest-with-core> flake.refresh() clan-pytest-with-core> clan-pytest-with-core> assert host.private_key clan-pytest-with-core> clan-pytest-with-core> success_txt = flake.path / "success.txt" clan-pytest-with-core> assert not success_txt.exists() clan-pytest-with-core> > cli.run( clan-pytest-with-core> [ clan-pytest-with-core> "ssh", clan-pytest-with-core> "--flake", clan-pytest-with-core> str(flake.path), clan-pytest-with-core> "m1_machine", clan-pytest-with-core> "--host-key-check=none", clan-pytest-with-core> "--ssh-option", clan-pytest-with-core> "IdentityFile", clan-pytest-with-core> str(host.private_key), clan-pytest-with-core> "--remote-command", clan-pytest-with-core> "touch", clan-pytest-with-core> str(success_txt), clan-pytest-with-core> "&&", clan-pytest-with-core> "exit 0", clan-pytest-with-core> ], clan-pytest-with-core> ) clan-pytest-with-core> clan-pytest-with-core> /build/src/clan_cli/ssh/test_deploy_info.py:135: 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/ssh/deploy_info.py:42: in ssh_command clan-pytest-with-core> remote = stack.enter_context(get_best_remote(machine)) clan-pytest-with-core> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ clan-pytest-with-core> /nix/store/3n4qphl9s728sz8frmpqqrv9b1m87g68-python3-3.14.7/lib/python3.14/contextlib.py:530: in enter_context clan-pytest-with-core> result = _enter(cm) clan-pytest-with-core> ^^^^^^^^^^ clan-pytest-with-core> /build/src/clan_lib/network/network.py:305: in __enter__ clan-pytest-with-core> target_host = self.machine.flake.select( 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-f40blzq3/flake', hash='sha256-7dXdEuj2YRwjIrMBQwuWaMZWMHbGOY0GlJgc5Ijb/mU=', 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.machines.x86_64-linux."m1_machine".config.clan.core.networking.targetHost'] 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.machines.x86_64-linux."m1_machine".config.clan.core.networking.targetHost' clan-pytest-with-core> E Reason: attribute 'system' missing clan-pytest-with-core> E at /build/store/nix/store/y3h139bhv4373m1hab367ma4p5i95i2f-source/modules/clan/module.nix:164:24: clan-pytest-with-core> E 163| (lib.modules.importApply ../../nixosModules/machineModules/overridePkgs.nix { clan-pytest-with-core> E 164| pkgs = nixpkgsMatrix.${config.inventory.machines.${name}.nixpkgs}.system.${system}.pkgs; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 165| }) clan-pytest-with-core> E Did you mean systems?. 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 setup ----------------------------- clan-pytest-with-core> getpwnam: nixbld -> /build/sshd-6ebkk3lp/bin/shell clan-pytest-with-core> getpwnam: nixbld -> /build/sshd-6ebkk3lp/bin/shell clan-pytest-with-core> !! $HOME does not point to a temp directory!! HOME=/build/pytest-f40blzq3 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/pytest-f40blzq3 clan-pytest-with-core> ----------------------------- Captured stdout call ----------------------------- clan-pytest-with-core> [main 1b3417a] flake: update by flake generator clan-pytest-with-core> 2 files changed, 25 insertions(+) clan-pytest-with-core> create mode 100644 machines/m1_machine/configuration.json clan-pytest-with-core> create mode 100644 machines/m1_machine/configuration.nix clan-pytest-with-core> ----------------------------- Captured stderr call ----------------------------- clan-pytest-with-core> Prefetching flake /build/pytest-f40blzq3/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/febbcab65441be6ccc547560fd0155faadebbbb7 clan-pytest-with-core> (cached) $ clan select clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> [localhost] $ clan ssh --flake /build/pytest-f40blzq3/flake m1_machine --host-key-check=none --ssh-option IdentityFile /build/src/clan_cli/tests/data/ssh_host_ed25519_key --remote-command touch /build/pytest-f40blzq3/flake/success.txt '&&' 'exit 0' clan-pytest-with-core> Caller: /build/src/clan_cli/ssh/test_deploy_info.py:135::test_ssh_shell_from_deploy clan-pytest-with-core> clan-pytest-with-core> Prefetching flake /build/pytest-f40blzq3/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.inventoryClass.inventorySerialization.{instances,machines,meta} clan-pytest-with-core> Precaching selectors: clan-pytest-with-core> - (not cached) clan.?exports clan-pytest-with-core> Loading flake cache from file /build/clan-flake-cache/flakes-v2/fca25d72c40c75940094cb560f0a7c0d70f2084a clan-pytest-with-core> (cached) $ clan select 'clan.?exports' clan-pytest-with-core> Cache miss for clanInternals.machines.x86_64-linux."m1_machine".config.clan.core.networking.targetHost clan-pytest-with-core> ------------------------------ Captured log call ------------------------------- clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:927 Prefetching flake /build/pytest-f40blzq3/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/febbcab65441be6ccc547560fd0155faadebbbb7 clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1179 (cached) $ clan select clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> DEBUG clan_cli.tests.helpers.cli:__init__.py:143 $ clan ssh --flake /build/pytest-f40blzq3/flake m1_machine --host-key-check=none --ssh-option IdentityFile /build/src/clan_cli/tests/data/ssh_host_ed25519_key --remote-command touch /build/pytest-f40blzq3/flake/success.txt '&&' 'exit 0' clan-pytest-with-core> Caller: /build/src/clan_cli/ssh/test_deploy_info.py:135::test_ssh_shell_from_deploy clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:927 Prefetching flake /build/pytest-f40blzq3/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.inventoryClass.inventorySerialization.{instances,machines,meta} clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1144 Precaching selectors: clan-pytest-with-core> - (not cached) clan.?exports clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:789 Loading flake cache from file /build/clan-flake-cache/flakes-v2/fca25d72c40c75940094cb560f0a7c0d70f2084a clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1179 (cached) $ clan select 'clan.?exports' clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1174 Cache miss for clanInternals.machines.x86_64-linux."m1_machine".config.clan.core.networking.targetHost clan-pytest-with-core> ___________________ test_install_errors_without_target_host ____________________ clan-pytest-with-core> [gw2] linux -- Python 3.14.7 /nix/store/3n4qphl9s728sz8frmpqqrv9b1m87g68-python3-3.14.7/bin/python clan-pytest-with-core> clan-pytest-with-core> monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7fffe634f020> clan-pytest-with-core> flake = 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_install_errors_without_target_host( clan-pytest-with-core> monkeypatch: pytest.MonkeyPatch, clan-pytest-with-core> flake: ClanFlake, clan-pytest-with-core> ) -> None: clan-pytest-with-core> """When no targetHost is configured anywhere, raise ClanError.""" clan-pytest-with-core> config = create_test_machine_config() clan-pytest-with-core> config["clan"]["core"]["networking"]["targetHost"] = None clan-pytest-with-core> flake.machines["myhost"] = config clan-pytest-with-core> flake.refresh() clan-pytest-with-core> monkeypatch.chdir(flake.path) clan-pytest-with-core> clan-pytest-with-core> > with pytest.raises(ClanError, match="No target host for machine"): clan-pytest-with-core> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ clan-pytest-with-core> E AssertionError: Regex pattern did not match. clan-pytest-with-core> E Expected regex: 'No target host for machine' clan-pytest-with-core> E Actual message: 'Error on: $ clan select \'clanInternals.machines.x86_64-linux."myhost".config.clan.core.networking.targetHost\'\n Reason: attribute \'system\' missing\n at /build/store/nix/store/y3h139bhv4373m1hab367ma4p5i95i2f-source/modules/clan/module.nix:164:24:\n 163| (lib.modules.importApply ../../nixosModules/machineModules/overridePkgs.nix {\n 164| pkgs = nixpkgsMatrix.${config.inventory.machines.${name}.nixpkgs}.system.${system}.pkgs;\n | ^\n 165| })\n Did you mean systems?. Use flag \'--debug\' to see full nix trace.' clan-pytest-with-core> clan-pytest-with-core> /build/src/clan_cli/machines/install_test.py:58: AssertionError clan-pytest-with-core> ---------------------------- Captured stderr setup ----------------------------- clan-pytest-with-core> !! $HOME does not point to a temp directory!! HOME=/build/pytest-eciychq0 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/pytest-eciychq0 clan-pytest-with-core> ----------------------------- Captured stdout call ----------------------------- clan-pytest-with-core> [main 9c8e374] flake: update by flake generator clan-pytest-with-core> 2 files changed, 25 insertions(+) clan-pytest-with-core> create mode 100644 machines/myhost/configuration.json clan-pytest-with-core> create mode 100644 machines/myhost/configuration.nix clan-pytest-with-core> ----------------------------- Captured stderr call ----------------------------- clan-pytest-with-core> Prefetching flake /build/pytest-eciychq0/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/febbcab65441be6ccc547560fd0155faadebbbb7 clan-pytest-with-core> (cached) $ clan select clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> [localhost] $ clan machines install --flake /build/pytest-eciychq0/flake myhost --yes clan-pytest-with-core> Caller: /build/src/clan_cli/machines/install_test.py:59::test_install_errors_without_target_host clan-pytest-with-core> clan-pytest-with-core> Prefetching flake /build/pytest-eciychq0/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.inventoryClass.inventorySerialization.{instances,machines,meta} clan-pytest-with-core> Precaching selectors: clan-pytest-with-core> - (not cached) clan.?exports clan-pytest-with-core> Loading flake cache from file /build/clan-flake-cache/flakes-v2/aa891d59eb246ee003e144b403af813382ec328b clan-pytest-with-core> (cached) $ clan select 'clan.?exports' clan-pytest-with-core> Cache miss for clanInternals.machines.x86_64-linux."myhost".config.clan.core.networking.targetHost clan-pytest-with-core> ------------------------------ Captured log call ------------------------------- clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:927 Prefetching flake /build/pytest-eciychq0/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/febbcab65441be6ccc547560fd0155faadebbbb7 clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1179 (cached) $ clan select clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> DEBUG clan_cli.tests.helpers.cli:__init__.py:143 $ clan machines install --flake /build/pytest-eciychq0/flake myhost --yes clan-pytest-with-core> Caller: /build/src/clan_cli/machines/install_test.py:59::test_install_errors_without_target_host clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:927 Prefetching flake /build/pytest-eciychq0/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.inventoryClass.inventorySerialization.{instances,machines,meta} clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1144 Precaching selectors: clan-pytest-with-core> - (not cached) clan.?exports clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:789 Loading flake cache from file /build/clan-flake-cache/flakes-v2/aa891d59eb246ee003e144b403af813382ec328b clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1179 (cached) $ clan select 'clan.?exports' clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1174 Cache miss for clanInternals.machines.x86_64-linux."myhost".config.clan.core.networking.targetHost clan-pytest-with-core> _____________________________ test_machine_delete ______________________________ clan-pytest-with-core> [gw12] linux -- Python 3.14.7 /nix/store/3n4qphl9s728sz8frmpqqrv9b1m87g68-python3-3.14.7/bin/python clan-pytest-with-core> clan-pytest-with-core> self = Flake(identifier='/build/pytest-3s6r_r0q/flake', hash='sha256-cxup/m9yb4iKyoWv5xR8tlsvxM0g1n4YC7cOG+dNHXo=', 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.?secrets.?age.?plugins', 'clanInternals.inventoryClass.relativeDirectory', 'clanInternals.machines.x86...oups', 'clanInternals.machines.x86_64-linux.{my-machine,my-machine2}.config.clan.core.vars.settings.publicModule', ...] 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-3s6r_r0q/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/021cbk1mbbl3xawxlpqvmdhv8qda0mai-source?narHash=sha256-cxup/m9yb4iKyoWv5xR8tlsvxM0g1n4YC7cOG+dNHXo="; 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": "maybe", "value": "secrets"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "plugins"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "inventoryClass"}, {"type": "str", "value": "relativeDirectory"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my-machine"}, {"type": "str", "value": "my-machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "share"}, {"type": "str", "value": "dependencies"}, {"type": "str", "value": "prompts"}, {"type": "str", "value": "validationHash"}]}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my-machine"}, {"type": "str", "value": "my-machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "str", "value": "files"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "secret"}, {"type": "str", "value": "deploy"}, {"type": "str", "value": "owner"}, {"type": "str", "value": "group"}, {"type": "str", "value": "mode"}, {"type": "str", "value": "neededFor"}]}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my-machine"}, {"type": "str", "value": "my-machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "defaultGroups"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my-machine"}, {"type": "str", "value": "my-machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "publicModule"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my-machine"}, {"type": "str", "value": "my-machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "secretModule"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my-machine"}, {"type": "str", "value": "my-machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "secretUploadDirectory"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my-machine"}, {"type": "str", "value": "my-machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "passCommand"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my-machine"}, {"type": "str", "value": "my-machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "secretLocation"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "maybe", "value": "recipients"}]'"'"''"'"') flake) (selectLib.applySelectors (builtins.fromJSON '"'"''"'"'[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my-machine"}, {"type": "str", "value": "my-machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "secretLocation"}]'"'"''"'"') 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": "maybe", "value": "secrets"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "plugins"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "inventoryClass"}, {"type": "str", "value": "relativeDirectory"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my-machine"}, {"type": "str", "value": "my-machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "share"}, {"type": "str", "value": "dependencies"}, {"type": "str", "value": "prompts"}, {"type": "str", "value": "validationHash"}]}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my-machine"}, {"type": "str", "value": "my-machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "str", "value": "files"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "secret"}, {"type": "str", "value": "deploy"}, {"type": "str", "value": "owner"}, {"type": "str", "value": "group"}, {"type": "str", "value": "mode"}, {"type": "str", "value": "neededFor"}]}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my-machine"}, {"type": "str", "value": "my-machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "defaultGroups"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my-machine"}, {"type": "str", "value": "my-machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "publicModule"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my-machine"}, {"type": "str", "value": "my-machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "secretModule"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my-machine"}, {"type": "str", "value": "my-machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "secretUploadDirectory"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my-machine"}, {"type": "str", "value": "my-machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "passCommand"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my-machine"}, {"type": "str", "value": "my-machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "secretLocation"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "maybe", "value": "recipients"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my-machine"}, {"type": "str", "value": "my-machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "secretLocation"}]'') 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": "maybe", "value": "secrets"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "plugins"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "inventoryClass"}, {"type": "str", "value": "relativeDirectory"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my-machine"}, {"type": "str", "value": "my-machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "share"}, {"type": "str", "value": "dependencies"}, {"type": "str", "value": "prompts"}, {"type": "str", "value": "validationHash"}]}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my-machine"}, {"type": "str", "value": "my-machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "generators"}, {"type": "all"}, {"type": "str", "value": "files"}, {"type": "all"}, {"type": "set", "value": [{"type": "str", "value": "secret"}, {"type": "str", "value": "deploy"}, {"type": "str", "value": "owner"}, {"type": "str", "value": "group"}, {"type": "str", "value": "mode"}, {"type": "str", "value": "neededFor"}]}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my-machine"}, {"type": "str", "value": "my-machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "defaultGroups"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my-machine"}, {"type": "str", "value": "my-machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "publicModule"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my-machine"}, {"type": "str", "value": "my-machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "str", "value": "secretModule"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my-machine"}, {"type": "str", "value": "my-machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "sops"}, {"type": "maybe", "value": "secretUploadDirectory"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my-machine"}, {"type": "str", "value": "my-machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "passCommand"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my-machine"}, {"type": "str", "value": "my-machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "password-store"}, {"type": "maybe", "value": "secretLocation"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "vars"}, {"type": "str", "value": "settings"}, {"type": "maybe", "value": "recipients"}]'') flake) (selectLib.applySelectors (builtins.fromJSON ''[{"type": "str", "value": "clanInternals"}, {"type": "str", "value": "machines"}, {"type": "str", "value": "x86_64-linux"}, {"type": "set", "value": [{"type": "str", "value": "my-machine"}, {"type": "str", "value": "my-machine2"}]}, {"type": "str", "value": "config"}, {"type": "str", "value": "clan"}, {"type": "str", "value": "core"}, {"type": "str", "value": "vars"}, {"type": "maybe", "value": "age"}, {"type": "maybe", "value": "secretLocation"}]'') flake) clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating list element at index 2 clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating attribute 'my-machine' clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/cba1x9mxnwr8b36cw41bya7g6d5v1p7d-source/select.nix:325:37: clan-pytest-with-core> E 324| in clan-pytest-with-core> E 325| builtins.mapAttrs (_: v: recurse selectors (idx + 1) v) filteredAttrs clan-pytest-with-core> E | ^ clan-pytest-with-core> E 326| else if selector.type == "maybe" then 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:325:40: clan-pytest-with-core> E 324| in clan-pytest-with-core> E 325| builtins.mapAttrs (_: v: recurse selectors (idx + 1) v) filteredAttrs clan-pytest-with-core> E | ^ clan-pytest-with-core> E 326| else if selector.type == "maybe" then 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 … from call site clan-pytest-with-core> E at /build/store/nix/store/cba1x9mxnwr8b36cw41bya7g6d5v1p7d-source/select.nix:312:15: clan-pytest-with-core> E 311| else if selector.type == "str" then clan-pytest-with-core> E 312| recurse selectors (idx + 1) (builtins.getAttr selector.value obj) clan-pytest-with-core> E | ^ clan-pytest-with-core> E 313| else if selector.type == "set" then 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 'getAttr' builtin clan-pytest-with-core> E at /build/store/nix/store/cba1x9mxnwr8b36cw41bya7g6d5v1p7d-source/select.nix:312:44: clan-pytest-with-core> E 311| else if selector.type == "str" then clan-pytest-with-core> E 312| recurse selectors (idx + 1) (builtins.getAttr selector.value obj) clan-pytest-with-core> E | ^ clan-pytest-with-core> E 313| else if selector.type == "set" then clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'seq' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:401:18: clan-pytest-with-core> E 400| options = checked options; clan-pytest-with-core> E 401| config = checked (removeAttrs config [ "_module" ]); clan-pytest-with-core> E | ^ clan-pytest-with-core> E 402| _module = checked (config._module); 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:304:9: clan-pytest-with-core> E 303| checkUnmatched = clan-pytest-with-core> E 304| if config._module.check && config._module.freeformType == null && merged.unmatchedDefns != [ ] then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 305| let clan-pytest-with-core> E clan-pytest-with-core> E … in the right operand of the AND (&&) operator clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:304:72: clan-pytest-with-core> E 303| checkUnmatched = clan-pytest-with-core> E 304| if config._module.check && config._module.freeformType == null && merged.unmatchedDefns != [ ] then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 305| let clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'unmatchedDefns' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:940:7: clan-pytest-with-core> E 939| # Transforms unmatchedDefnsByName into a list of definitions clan-pytest-with-core> E 940| unmatchedDefns = clan-pytest-with-core> E | ^ clan-pytest-with-core> E 941| if configs == [ ] then clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'concatLists' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:946:11: clan-pytest-with-core> E 945| else clan-pytest-with-core> E 946| concatLists ( clan-pytest-with-core> E | ^ clan-pytest-with-core> E 947| mapAttrsToList ( clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:948:21: clan-pytest-with-core> E 947| mapAttrsToList ( clan-pytest-with-core> E 948| name: defs: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 949| map ( clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'map' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:949:15: clan-pytest-with-core> E 948| name: defs: clan-pytest-with-core> E 949| map ( clan-pytest-with-core> E | ^ clan-pytest-with-core> E 950| def: clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:932:22: clan-pytest-with-core> E 931| # Propagate all unmatched definitions from nested option sets clan-pytest-with-core> E 932| mapAttrs (n: v: v.unmatchedDefns) resultsByName clan-pytest-with-core> E | ^ clan-pytest-with-core> E 933| # Plus the definitions for the current prefix that don't have a matching option clan-pytest-with-core> E clan-pytest-with-core> E (10 duplicate frames omitted) clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:932:25: clan-pytest-with-core> E 931| # Propagate all unmatched definitions from nested option sets clan-pytest-with-core> E 932| mapAttrs (n: v: v.unmatchedDefns) resultsByName clan-pytest-with-core> E | ^ clan-pytest-with-core> E 933| # Plus the definitions for the current prefix that don't have a matching option clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:876:15: clan-pytest-with-core> E 875| resultsByName = mapAttrs ( clan-pytest-with-core> E 876| name: decls: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 877| # We're descending into attribute ‘name’. 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:888:9: clan-pytest-with-core> E 887| in clan-pytest-with-core> E 888| if length optionDecls == length decls then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 889| let clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'length' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:888:12: clan-pytest-with-core> E 887| in clan-pytest-with-core> E 888| if length optionDecls == length decls then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 889| let clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'filter' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:882:25: clan-pytest-with-core> E 881| defns' = rawDefinitionsByName.${name} or [ ]; clan-pytest-with-core> E 882| optionDecls = filter ( clan-pytest-with-core> E | ^ clan-pytest-with-core> E 883| m: clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:883:13: clan-pytest-with-core> E 882| optionDecls = filter ( clan-pytest-with-core> E 883| m: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 884| m.options ? _type clan-pytest-with-core> E clan-pytest-with-core> E … in the left operand of the AND (&&) operator clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:885:13: clan-pytest-with-core> E 884| m.options ? _type clan-pytest-with-core> E 885| && (m.options._type == "option" || throwDeclarationTypeError loc m.options._type m._file) clan-pytest-with-core> E | ^ clan-pytest-with-core> E 886| ) decls; clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'options' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:807:15: clan-pytest-with-core> E 806| pos = unsafeGetAttrPos n subtree; clan-pytest-with-core> E 807| options = option; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 808| }) subtree clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:289:73: clan-pytest-with-core> E 288| len = length attrPath; clan-pytest-with-core> E 289| atDepth = n: if n == len then value else { ${elemAt attrPath n} = atDepth (n + 1); }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 290| in clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'atDepth' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:289:17: clan-pytest-with-core> E 288| len = length attrPath; clan-pytest-with-core> E 289| atDepth = n: if n == len then value else { ${elemAt attrPath n} = atDepth (n + 1); }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 290| in clan-pytest-with-core> E clan-pytest-with-core> E … in the right operand of the update (//) operator clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:2047:9: clan-pytest-with-core> E 2046| } clan-pytest-with-core> E 2047| // optionalAttrs (toType != null) { clan-pytest-with-core> E | ^ clan-pytest-with-core> E 2048| type = toType; clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:2047:12: clan-pytest-with-core> E 2046| } clan-pytest-with-core> E 2047| // optionalAttrs (toType != null) { clan-pytest-with-core> E | ^ clan-pytest-with-core> E 2048| type = toType; clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'optionalAttrs' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:1492:25: clan-pytest-with-core> E 1491| */ clan-pytest-with-core> E 1492| optionalAttrs = cond: as: if cond then as else { }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1493| 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:1492:29: clan-pytest-with-core> E 1491| */ clan-pytest-with-core> E 1492| optionalAttrs = cond: as: if cond then as else { }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1493| clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:2036:17: clan-pytest-with-core> E 2035| let clan-pytest-with-core> E 2036| opt = attrByPath to { } options; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 2037| in clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'attrByPath' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:89:24: clan-pytest-with-core> E 88| attrByPath = clan-pytest-with-core> E 89| attrPath: default: set: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 90| let clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:106:5: clan-pytest-with-core> E 105| in clan-pytest-with-core> E 106| attrByPath' 0 set; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 107| clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'attrByPath'' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:93:12: clan-pytest-with-core> E 92| attrByPath' = clan-pytest-with-core> E 93| n: s: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 94| ( clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:102:35: clan-pytest-with-core> E 101| in clan-pytest-with-core> E 102| if s ? ${attr} then attrByPath' (n + 1) s.${attr} else default clan-pytest-with-core> E | ^ clan-pytest-with-core> E 103| ) clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'attrByPath'' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:93:12: clan-pytest-with-core> E 92| attrByPath' = clan-pytest-with-core> E 93| n: s: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 94| ( clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:102:35: clan-pytest-with-core> E 101| in clan-pytest-with-core> E 102| if s ? ${attr} then attrByPath' (n + 1) s.${attr} else default clan-pytest-with-core> E | ^ clan-pytest-with-core> E 103| ) clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'attrByPath'' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:93:12: clan-pytest-with-core> E 92| attrByPath' = clan-pytest-with-core> E 93| n: s: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 94| ( clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:102:35: clan-pytest-with-core> E 101| in clan-pytest-with-core> E 102| if s ? ${attr} then attrByPath' (n + 1) s.${attr} else default clan-pytest-with-core> E | ^ clan-pytest-with-core> E 103| ) clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'attrByPath'' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:93:12: clan-pytest-with-core> E 92| attrByPath' = clan-pytest-with-core> E 93| n: s: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 94| ( clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/attrsets.nix:102:55: clan-pytest-with-core> E 101| in clan-pytest-with-core> E 102| if s ? ${attr} then attrByPath' (n + 1) s.${attr} else default clan-pytest-with-core> E | ^ clan-pytest-with-core> E 103| ) clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:927:37: clan-pytest-with-core> E 926| clan-pytest-with-core> E 927| matchedOptions = mapAttrs (n: v: v.matchedOptions) resultsByName; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 928| clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'matchedOptions' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:893:13: clan-pytest-with-core> E 892| { clan-pytest-with-core> E 893| matchedOptions = evalOptionValue loc opt defns'; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 894| unmatchedDefns = [ ]; clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:893:30: clan-pytest-with-core> E 892| { clan-pytest-with-core> E 893| matchedOptions = evalOptionValue loc opt defns'; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 894| unmatchedDefns = [ ]; clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'evalOptionValue' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1103:15: clan-pytest-with-core> E 1102| evalOptionValue = clan-pytest-with-core> E 1103| loc: opt: defs: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1104| let clan-pytest-with-core> E clan-pytest-with-core> E … in the left operand of the update (//) operator clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1148:5: clan-pytest-with-core> E 1147| warnDeprecation opt clan-pytest-with-core> E 1148| // { clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1149| value = addErrorContext "while evaluating the option `${showOption loc}':" value; 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1141:9: clan-pytest-with-core> E 1140| warnDeprecation = clan-pytest-with-core> E 1141| if (opt.type.deprecationMessage != null) then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1142| warn "The type `types.${opt.type.name}' of option `${showOption loc}' defined in ${showFiles opt.declarations} is deprecated. ${opt.type.deprecationMessage}" clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:890:19: clan-pytest-with-core> E 889| let clan-pytest-with-core> E 890| opt = fixupOptionType loc (mergeOptionDecls loc decls); clan-pytest-with-core> E | ^ clan-pytest-with-core> E 891| in clan-pytest-with-core> E clan-pytest-with-core> E … while calling 'fixupOptionType' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1473:10: clan-pytest-with-core> E 1472| fixupOptionType = clan-pytest-with-core> E 1473| loc: opt: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1474| if opt.type.getSubModules or null == null then 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1474:5: clan-pytest-with-core> E 1473| loc: opt: clan-pytest-with-core> E 1474| if opt.type.getSubModules or null == null then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1475| opt // { type = opt.type or types.unspecified; } clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'type.getSubModules' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/nixos/modules/services/hardware/bluetooth.nix:72:9: clan-pytest-with-core> E 71| settings = mkOption { clan-pytest-with-core> E 72| type = cfgFmt.type; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 73| default = { }; clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/nixos/modules/services/hardware/bluetooth.nix:26:12: clan-pytest-with-core> E 25| clan-pytest-with-core> E 26| cfgFmt = pkgs.formats.ini { }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 27| clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:727:15: clan-pytest-with-core> E 726| extraArgs = mapAttrs ( clan-pytest-with-core> E 727| name: _: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 728| addErrorContext (context name) ( clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the module argument `pkgs' in "/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/nixos/modules/services/hardware/bluetooth.nix": clan-pytest-with-core> E clan-pytest-with-core> E … noting that argument `pkgs` is not externally provided, so querying `_module.args` instead, requiring `config` clan-pytest-with-core> E clan-pytest-with-core> E … from call site clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:731:13: clan-pytest-with-core> E 730| "noting that argument `${name}` is not externally provided, so querying `_module.args` instead, requiring `config`" clan-pytest-with-core> E 731| config._module.args.${name} clan-pytest-with-core> E | ^ clan-pytest-with-core> E 732| ) clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/types.nix:1029:18: clan-pytest-with-core> E 1028| value = mapAttrs ( clan-pytest-with-core> E 1029| n: v: clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1030| if lazy then clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'optionalValue.value' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1312:5: clan-pytest-with-core> E 1311| clan-pytest-with-core> E 1312| optionalValue = if isDefined then { value = mergedValue; } else { }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1313| }; 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1312:21: clan-pytest-with-core> E 1311| clan-pytest-with-core> E 1312| optionalValue = if isDefined then { value = mergedValue; } else { }; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1313| }; clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'values' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1240:11: clan-pytest-with-core> E 1239| { clan-pytest-with-core> E 1240| values = defsSorted; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1241| inherit (defsFiltered) highestPrio; 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1211:11: clan-pytest-with-core> E 1210| # Avoid sorting if we don't have to. clan-pytest-with-core> E 1211| if any (def: def.value._type or "" == "order") defsFiltered.values then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1212| sortProperties defsFiltered.values clan-pytest-with-core> E clan-pytest-with-core> E … while calling the 'any' builtin clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1211:14: clan-pytest-with-core> E 1210| # Avoid sorting if we don't have to. clan-pytest-with-core> E 1211| if any (def: def.value._type or "" == "order") defsFiltered.values then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1212| sortProperties defsFiltered.values clan-pytest-with-core> E clan-pytest-with-core> E … while calling anonymous lambda clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1211:19: clan-pytest-with-core> E 1210| # Avoid sorting if we don't have to. clan-pytest-with-core> E 1211| if any (def: def.value._type or "" == "order") defsFiltered.values then clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1212| sortProperties defsFiltered.values clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'value._type' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1422:67: clan-pytest-with-core> E 1421| strip = clan-pytest-with-core> E 1422| def: if def.value._type or "" == "override" then def // { value = def.value.content; } else def; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1423| in clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'value.content' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1566:22: clan-pytest-with-core> E 1565| _type = "override"; clan-pytest-with-core> E 1566| inherit priority content; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1567| }; 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/p17akwn814w226jq2cdkkhcw4psb0ga9-source/nixos/modules/misc/nixpkgs.nix:107:15: clan-pytest-with-core> E 106| clan-pytest-with-core> E 107| finalPkgs = if opt.pkgs.isDefined then cfg.pkgs.appendOverlays cfg.overlays else defaultPkgs; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 108| clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'pkgs.isDefined' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1154:21: clan-pytest-with-core> E 1153| definitionsWithLocations = res.defsFinal; clan-pytest-with-core> E 1154| inherit (res) isDefined; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1155| inherit (res.checkedAndMerged) valueMeta; clan-pytest-with-core> E clan-pytest-with-core> E … while evaluating the attribute 'isDefined' clan-pytest-with-core> E at /build/store/nix/store/p17akwn814w226jq2cdkkhcw4psb0ga9-source/lib/modules.nix:1310:5: clan-pytest-with-core> E 1309| clan-pytest-with-core> E 1310| isDefined = defsFinal != [ ]; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 1311| clan-pytest-with-core> E clan-pytest-with-core> E (6 duplicate frames omitted) clan-pytest-with-core> E clan-pytest-with-core> E error: attribute 'system' missing clan-pytest-with-core> E at /build/store/nix/store/y3h139bhv4373m1hab367ma4p5i95i2f-source/modules/clan/module.nix:164:24: clan-pytest-with-core> E 163| (lib.modules.importApply ../../nixosModules/machineModules/overridePkgs.nix { clan-pytest-with-core> E 164| pkgs = nixpkgsMatrix.${config.inventory.machines.${name}.nixpkgs}.system.${system}.pkgs; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 165| }) clan-pytest-with-core> E Did you mean systems? 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 0x7fffe57ddfd0> clan-pytest-with-core> flake_with_sops = clan-pytest-with-core> sops_setup = 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("sticky_flake_select") clan-pytest-with-core> def test_machine_delete( clan-pytest-with-core> monkeypatch: pytest.MonkeyPatch, clan-pytest-with-core> flake_with_sops: fixtures_flakes.ClanFlake, clan-pytest-with-core> sops_setup: SopsSetup, clan-pytest-with-core> ) -> None: clan-pytest-with-core> flake = flake_with_sops clan-pytest-with-core> clan-pytest-with-core> admin_key, machine_key, machine2_key, *_xs = sops_setup.keys clan-pytest-with-core> clan-pytest-with-core> # create a couple machines with their keys clan-pytest-with-core> for name, key in (("my-machine", machine_key), ("my-machine2", machine2_key)): clan-pytest-with-core> cli.run(["machines", "create", f"--flake={flake.path}", name]) clan-pytest-with-core> add_machine_key = [ clan-pytest-with-core> "secrets", clan-pytest-with-core> "machines", clan-pytest-with-core> "add", clan-pytest-with-core> f"--flake={flake.path}", clan-pytest-with-core> name, clan-pytest-with-core> key.pubkey, clan-pytest-with-core> ] clan-pytest-with-core> cli.run(add_machine_key) clan-pytest-with-core> clan-pytest-with-core> # create a secret shared by both machines clan-pytest-with-core> shared_secret_name = "shared_secret" clan-pytest-with-core> with monkeypatch.context(): clan-pytest-with-core> monkeypatch.setenv("SOPS_NIX_SECRET", "secret_value") clan-pytest-with-core> set_shared_secret = [ clan-pytest-with-core> "secrets", clan-pytest-with-core> "set", clan-pytest-with-core> f"--flake={flake.path}", clan-pytest-with-core> "--machine=my-machine", clan-pytest-with-core> "--machine=my-machine2", clan-pytest-with-core> shared_secret_name, clan-pytest-with-core> ] clan-pytest-with-core> cli.run(set_shared_secret) clan-pytest-with-core> clan-pytest-with-core> my_machine_sops_folder = sops_machines_folder(flake.path) / "my-machine" clan-pytest-with-core> assert my_machine_sops_folder.is_dir(), ( clan-pytest-with-core> "A sops folder for `my-machine` should have been created with its public key" clan-pytest-with-core> ) clan-pytest-with-core> clan-pytest-with-core> # define some vars generator for `my-machine`: clan-pytest-with-core> config = flake.machines["my-machine"] = create_test_machine_config() clan-pytest-with-core> my_generator = config["clan"]["core"]["vars"]["generators"]["my_generator"] clan-pytest-with-core> my_generator["files"]["my_value"]["secret"] = False clan-pytest-with-core> my_generator["files"]["my_secret"]["secret"] = True clan-pytest-with-core> my_generator["script"] = ( clan-pytest-with-core> 'echo -n public > "$out"/my_value;' clan-pytest-with-core> 'echo -n secret > "$out"/my_secret;' clan-pytest-with-core> 'echo -n non-default > "$out"/value_with_default' clan-pytest-with-core> ) clan-pytest-with-core> flake.refresh() # saves "my_generator" clan-pytest-with-core> monkeypatch.chdir(flake.path) clan-pytest-with-core> clan-pytest-with-core> > cli.run(["vars", "generate", "--flake", str(flake.path), "my-machine"]) clan-pytest-with-core> clan-pytest-with-core> /build/src/clan_cli/tests/test_machines_cli.py:288: 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/vars/generate.py:33: in generate_command clan-pytest-with-core> run_generators( clan-pytest-with-core> /build/src/clan_lib/vars/generate.py:306: in run_generators clan-pytest-with-core> all_generators = get_generators(machines, full_closure=True) clan-pytest-with-core> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ clan-pytest-with-core> /build/src/clan_lib/vars/generate.py:146: in get_generators clan-pytest-with-core> flake.precache(get_generators_precache_selectors(list(all_machines))) clan-pytest-with-core> /build/src/clan_lib/flake/flake.py:1151: in precache clan-pytest-with-core> self.get_from_nix(not_fetched_selectors) clan-pytest-with-core> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ clan-pytest-with-core> clan-pytest-with-core> self = Flake(identifier='/build/pytest-3s6r_r0q/flake', hash='sha256-cxup/m9yb4iKyoWv5xR8tlsvxM0g1n4YC7cOG+dNHXo=', 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.?secrets.?age.?plugins', 'clanInternals.inventoryClass.relativeDirectory', 'clanInternals.machines.x86...oups', 'clanInternals.machines.x86_64-linux.{my-machine,my-machine2}.config.clan.core.vars.settings.publicModule', ...] 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 while executing:$ clan select 'clanInternals.?secrets.?age.?plugins' clan-pytest-with-core> E $ clan select 'clanInternals.inventoryClass.relativeDirectory' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{my-machine,my-machine2}.config.clan.core.vars.generators.*.{share,dependencies,prompts,validationHash}' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{my-machine,my-machine2}.config.clan.core.vars.generators.*.files.*.{secret,deploy,owner,group,mode,neededFor}' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{my-machine,my-machine2}.config.clan.core.?sops.?defaultGroups' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{my-machine,my-machine2}.config.clan.core.vars.settings.publicModule' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{my-machine,my-machine2}.config.clan.core.vars.settings.secretModule' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{my-machine,my-machine2}.config.clan.core.vars.?sops.?secretUploadDirectory' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{my-machine,my-machine2}.config.clan.core.vars.?password-store.?passCommand' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{my-machine,my-machine2}.config.clan.core.vars.?password-store.?secretLocation' clan-pytest-with-core> E $ clan select 'clanInternals.vars.settings.?recipients' clan-pytest-with-core> E $ clan select 'clanInternals.machines.x86_64-linux.{my-machine,my-machine2}.config.clan.core.vars.?age.?secretLocation' clan-pytest-with-core> E Reason: attribute 'system' missing clan-pytest-with-core> E at /build/store/nix/store/y3h139bhv4373m1hab367ma4p5i95i2f-source/modules/clan/module.nix:164:24: clan-pytest-with-core> E 163| (lib.modules.importApply ../../nixosModules/machineModules/overridePkgs.nix { clan-pytest-with-core> E 164| pkgs = nixpkgsMatrix.${config.inventory.machines.${name}.nixpkgs}.system.${system}.pkgs; clan-pytest-with-core> E | ^ clan-pytest-with-core> E 165| }) clan-pytest-with-core> E Did you mean systems?. 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 setup ----------------------------- clan-pytest-with-core> !! $HOME does not point to a temp directory!! HOME=/build/pytest-3s6r_r0q clan-pytest-with-core> [localhost] $ clan vars keygen --flake /build/pytest-3s6r_r0q/flake --user admin --no-interactive clan-pytest-with-core> Caller: /build/src/clan_cli/tests/age_keys.py:31::init clan-pytest-with-core> clan-pytest-with-core> Prefetching flake /build/pytest-3s6r_r0q/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/febbcab65441be6ccc547560fd0155faadebbbb7 clan-pytest-with-core> (cached) $ clan select clanInternals.inventoryClass.relativeDirectory 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> git \ clan-pytest-with-core> -C /build/pytest-3s6r_r0q/flake \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-3s6r_r0q/flake/sops/users/admin 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/admin to git clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-3s6r_r0q/flake \ clan-pytest-with-core> diff \ clan-pytest-with-core> --cached --exit-code \ clan-pytest-with-core> -- /build/pytest-3s6r_r0q/flake/sops/users/admin 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-3s6r_r0q/flake \ clan-pytest-with-core> commit \ clan-pytest-with-core> -m 'secrets: add user admin' \ clan-pytest-with-core> --no-verify /build/pytest-3s6r_r0q/flake/sops/users/admin 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/admin to git 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/pytest-3s6r_r0q clan-pytest-with-core> DEBUG clan_cli.tests.helpers.cli:__init__.py:143 $ clan vars keygen --flake /build/pytest-3s6r_r0q/flake --user admin --no-interactive clan-pytest-with-core> Caller: /build/src/clan_cli/tests/age_keys.py:31::init clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:927 Prefetching flake /build/pytest-3s6r_r0q/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/febbcab65441be6ccc547560fd0155faadebbbb7 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.cmd:__init__.py:143 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> DEBUG clan_lib.cmd:__init__.py:143 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> DEBUG clan_cli.secrets.sops:sops.py:99 Found age public key from a private key in the environment (SOPS_AGE_KEY): age1dhwqzkah943xzc34tc3dlmfayyevcmdmxzjezdgdy33euxwf59vsp3vk3c clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:143 git \ clan-pytest-with-core> -C /build/pytest-3s6r_r0q/flake \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-3s6r_r0q/flake/sops/users/admin 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> DEBUG clan_lib.cmd:__init__.py:143 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> DEBUG clan_lib.git:__init__.py:98 Adding sops/users/admin to git clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:143 git \ clan-pytest-with-core> -C /build/pytest-3s6r_r0q/flake \ clan-pytest-with-core> diff \ clan-pytest-with-core> --cached --exit-code \ clan-pytest-with-core> -- /build/pytest-3s6r_r0q/flake/sops/users/admin 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> DEBUG clan_lib.cmd:__init__.py:143 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> DEBUG clan_lib.cmd:__init__.py:143 git \ clan-pytest-with-core> -C /build/pytest-3s6r_r0q/flake \ clan-pytest-with-core> commit \ clan-pytest-with-core> -m 'secrets: add user admin' \ clan-pytest-with-core> --no-verify /build/pytest-3s6r_r0q/flake/sops/users/admin 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> DEBUG clan_lib.cmd:__init__.py:143 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> INFO clan_lib.git:__init__.py:141 Committed sops/users/admin to git clan-pytest-with-core> ----------------------------- Captured stdout call ----------------------------- clan-pytest-with-core> [main af2cf8d] flake: update by flake generator clan-pytest-with-core> 2 files changed, 36 insertions(+), 6 deletions(-) clan-pytest-with-core> create mode 100644 machines/my-machine/configuration.json clan-pytest-with-core> ----------------------------- Captured stderr call ----------------------------- clan-pytest-with-core> [localhost] $ clan machines create --flake=/build/pytest-3s6r_r0q/flake my-machine clan-pytest-with-core> Caller: /build/src/clan_cli/tests/test_machines_cli.py:245::test_machine_delete clan-pytest-with-core> clan-pytest-with-core> Prefetching flake /build/pytest-3s6r_r0q/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/d2c0050d97832c3ac5193485b93705d00938c15e clan-pytest-with-core> Cache miss for clanInternals.inventoryClass.inventorySerialization.{instances,machines,meta} clan-pytest-with-core> Loading flake cache from file /build/clan-flake-cache/flakes-v2/d2c0050d97832c3ac5193485b93705d00938c15e clan-pytest-with-core> Prefetching flake /build/pytest-3s6r_r0q/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/d2c0050d97832c3ac5193485b93705d00938c15e clan-pytest-with-core> Cache miss for clanInternals.templates.machine."new-machine" clan-pytest-with-core> Loading flake cache from file /build/clan-flake-cache/flakes-v2/d2c0050d97832c3ac5193485b93705d00938c15e clan-pytest-with-core> chmod \ clan-pytest-with-core> -R u+w \ clan-pytest-with-core> /build/pytest-3s6r_r0q/flake/machines/my-machine 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> (cached) $ clan select 'clanInternals.inventoryClass.inventorySerialization.{instances,machines,meta}' clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-3s6r_r0q/flake \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-3s6r_r0q/flake/machines/my-machine 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 machines/my-machine to git clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-3s6r_r0q/flake \ clan-pytest-with-core> diff \ clan-pytest-with-core> --cached --exit-code \ clan-pytest-with-core> -- /build/pytest-3s6r_r0q/flake/machines/my-machine 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-3s6r_r0q/flake \ clan-pytest-with-core> commit \ clan-pytest-with-core> -m 'machines: add my-machine' \ clan-pytest-with-core> --no-verify /build/pytest-3s6r_r0q/flake/machines/my-machine 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 machines/my-machine to git clan-pytest-with-core> Prefetching flake /build/pytest-3s6r_r0q/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.inventoryClass.inventorySerialization.{instances,machines,meta} clan-pytest-with-core> Cache miss for clanInternals.inventoryClass.introspection clan-pytest-with-core> Loading flake cache from file /build/clan-flake-cache/flakes-v2/87fa3ad5d993f6776ff1731bb4a5394cf37046e5 clan-pytest-with-core> (cached) $ clan select 'clanInternals.inventoryClass.inventorySerialization.{instances,machines,meta}' clan-pytest-with-core> Prefetching flake /build/pytest-3s6r_r0q/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/87fa3ad5d993f6776ff1731bb4a5394cf37046e5 clan-pytest-with-core> (cached) $ clan select 'clanInternals.inventoryClass.inventorySerialization.{instances,machines,meta}' clan-pytest-with-core> [localhost] $ clan secrets machines add --flake=/build/pytest-3s6r_r0q/flake my-machine age14tva0txcrl0zes05x7gkx56qd6wd9q3nwecjac74xxzz4l47r44sv3fz62 clan-pytest-with-core> Caller: /build/src/clan_cli/tests/test_machines_cli.py:254::test_machine_delete clan-pytest-with-core> clan-pytest-with-core> Prefetching flake /build/pytest-3s6r_r0q/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/87fa3ad5d993f6776ff1731bb4a5394cf37046e5 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/87fa3ad5d993f6776ff1731bb4a5394cf37046e5 clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-3s6r_r0q/flake \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-3s6r_r0q/flake/sops/machines/my-machine 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/my-machine to git clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-3s6r_r0q/flake \ clan-pytest-with-core> diff \ clan-pytest-with-core> --cached --exit-code \ clan-pytest-with-core> -- /build/pytest-3s6r_r0q/flake/sops/machines/my-machine 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-3s6r_r0q/flake \ clan-pytest-with-core> commit \ clan-pytest-with-core> -m 'secrets: add machine my-machine' \ clan-pytest-with-core> --no-verify /build/pytest-3s6r_r0q/flake/sops/machines/my-machine 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/my-machine to git clan-pytest-with-core> [localhost] $ clan machines create --flake=/build/pytest-3s6r_r0q/flake my-machine2 clan-pytest-with-core> Caller: /build/src/clan_cli/tests/test_machines_cli.py:245::test_machine_delete clan-pytest-with-core> clan-pytest-with-core> Prefetching flake /build/pytest-3s6r_r0q/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.inventoryClass.inventorySerialization.{instances,machines,meta} clan-pytest-with-core> Prefetching flake /build/pytest-3s6r_r0q/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/b655f30adf6381d63394c5e0e0b5b886031828b4 clan-pytest-with-core> Cache miss for clanInternals.templates.machine."new-machine" clan-pytest-with-core> Loading flake cache from file /build/clan-flake-cache/flakes-v2/b655f30adf6381d63394c5e0e0b5b886031828b4 clan-pytest-with-core> chmod \ clan-pytest-with-core> -R u+w \ clan-pytest-with-core> /build/pytest-3s6r_r0q/flake/machines/my-machine2 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> (cached) $ clan select 'clanInternals.inventoryClass.inventorySerialization.{instances,machines,meta}' clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-3s6r_r0q/flake \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-3s6r_r0q/flake/machines/my-machine2 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 machines/my-machine2 to git clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-3s6r_r0q/flake \ clan-pytest-with-core> diff \ clan-pytest-with-core> --cached --exit-code \ clan-pytest-with-core> -- /build/pytest-3s6r_r0q/flake/machines/my-machine2 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-3s6r_r0q/flake \ clan-pytest-with-core> commit \ clan-pytest-with-core> -m 'machines: add my-machine2' \ clan-pytest-with-core> --no-verify /build/pytest-3s6r_r0q/flake/machines/my-machine2 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 machines/my-machine2 to git clan-pytest-with-core> Prefetching flake /build/pytest-3s6r_r0q/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.inventoryClass.inventorySerialization.{instances,machines,meta} clan-pytest-with-core> Cache miss for clanInternals.inventoryClass.introspection clan-pytest-with-core> Loading flake cache from file /build/clan-flake-cache/flakes-v2/539e0f4175fda181c1d9411f7e05a37a6df62fed clan-pytest-with-core> (cached) $ clan select 'clanInternals.inventoryClass.inventorySerialization.{instances,machines,meta}' clan-pytest-with-core> Prefetching flake /build/pytest-3s6r_r0q/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/539e0f4175fda181c1d9411f7e05a37a6df62fed clan-pytest-with-core> (cached) $ clan select 'clanInternals.inventoryClass.inventorySerialization.{instances,machines,meta}' clan-pytest-with-core> [localhost] $ clan secrets machines add --flake=/build/pytest-3s6r_r0q/flake my-machine2 age1dhuh9xtefhgpr2sjjf7gmp9q2pr37z92rv4wsadxuqdx48989g7qj552qp clan-pytest-with-core> Caller: /build/src/clan_cli/tests/test_machines_cli.py:254::test_machine_delete clan-pytest-with-core> clan-pytest-with-core> Prefetching flake /build/pytest-3s6r_r0q/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/539e0f4175fda181c1d9411f7e05a37a6df62fed clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-3s6r_r0q/flake \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-3s6r_r0q/flake/sops/machines/my-machine2 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/my-machine2 to git clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-3s6r_r0q/flake \ clan-pytest-with-core> diff \ clan-pytest-with-core> --cached --exit-code \ clan-pytest-with-core> -- /build/pytest-3s6r_r0q/flake/sops/machines/my-machine2 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-3s6r_r0q/flake \ clan-pytest-with-core> commit \ clan-pytest-with-core> -m 'secrets: add machine my-machine2' \ clan-pytest-with-core> --no-verify /build/pytest-3s6r_r0q/flake/sops/machines/my-machine2 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/my-machine2 to git clan-pytest-with-core> [localhost] $ clan secrets set --flake=/build/pytest-3s6r_r0q/flake --machine=my-machine --machine=my-machine2 shared_secret clan-pytest-with-core> Caller: /build/src/clan_cli/tests/test_machines_cli.py:268::test_machine_delete clan-pytest-with-core> clan-pytest-with-core> Prefetching flake /build/pytest-3s6r_r0q/flake 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/tmpcgobqgo6 \ clan-pytest-with-core> encrypt \ clan-pytest-with-core> --in-place /dev/shm/tmpxg0b9tnz 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-3s6r_r0q/flake \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-3s6r_r0q/flake/sops/secrets/shared_secret/machines/my-machine 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/shared_secret/machines/my-machine to git clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-3s6r_r0q/flake \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-3s6r_r0q/flake/sops/secrets/shared_secret/machines/my-machine2 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/shared_secret/machines/my-machine2 to git clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-3s6r_r0q/flake \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-3s6r_r0q/flake/sops/secrets/shared_secret/users/admin 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/shared_secret/users/admin to git clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-3s6r_r0q/flake \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-3s6r_r0q/flake/sops/secrets/shared_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/shared_secret/secret to git clan-pytest-with-core> git \ clan-pytest-with-core> -C /build/pytest-3s6r_r0q/flake \ clan-pytest-with-core> diff \ clan-pytest-with-core> --cached --exit-code \ clan-pytest-with-core> -- /build/pytest-3s6r_r0q/flake/sops/secrets/shared_secret/machines/my-machine \ clan-pytest-with-core> /build/pytest-3s6r_r0q/flake/sops/secrets/shared_secret/machines/my-machine2 \ clan-pytest-with-core> /build/pytest-3s6r_r0q/flake/sops/secrets/shared_secret/users/admin \ clan-pytest-with-core> /build/pytest-3s6r_r0q/flake/sops/secrets/shared_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-3s6r_r0q/flake \ clan-pytest-with-core> commit \ clan-pytest-with-core> -m 'secrets: update shared_secret' \ clan-pytest-with-core> --no-verify /build/pytest-3s6r_r0q/flake/sops/secrets/shared_secret/machines/my-machine \ clan-pytest-with-core> /build/pytest-3s6r_r0q/flake/sops/secrets/shared_secret/machines/my-machine2 \ clan-pytest-with-core> /build/pytest-3s6r_r0q/flake/sops/secrets/shared_secret/users/admin \ clan-pytest-with-core> /build/pytest-3s6r_r0q/flake/sops/secrets/shared_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 4 files to git: sops/secrets/shared_secret/machines/my-machine, sops/secrets/shared_secret/machines/my-machine2, sops/secrets/shared_secret/users/admin, sops/secrets/shared_secret/secret clan-pytest-with-core> Prefetching flake /build/pytest-3s6r_r0q/flake clan-pytest-with-core> warning: you don't have Internet access; disabling some network-dependent features clan-pytest-with-core> [localhost] $ clan vars generate --flake /build/pytest-3s6r_r0q/flake my-machine clan-pytest-with-core> Caller: /build/src/clan_cli/tests/test_machines_cli.py:288::test_machine_delete clan-pytest-with-core> clan-pytest-with-core> Prefetching flake /build/pytest-3s6r_r0q/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.cliChecks clan-pytest-with-core> Cache miss for clanInternals.inventoryClass.inventorySerialization.{instances,machines,meta} clan-pytest-with-core> Loading flake cache from file /build/clan-flake-cache/flakes-v2/b49140cc09eee3cd998abbc9eb92b65a1f440ab7 clan-pytest-with-core> (cached) $ clan select 'clanInternals.inventoryClass.inventorySerialization.{instances,machines,meta}' clan-pytest-with-core> Precaching selectors: clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.machines clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.instances clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.meta clan-pytest-with-core> - (not cached) clanInternals.?secrets.?age.?plugins clan-pytest-with-core> - (not cached) clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my-machine,my-machine2}.config.clan.core.vars.generators.*.{share,dependencies,prompts,validationHash} clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my-machine,my-machine2}.config.clan.core.vars.generators.*.files.*.{secret,deploy,owner,group,mode,neededFor} clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my-machine,my-machine2}.config.clan.core.?sops.?defaultGroups clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my-machine,my-machine2}.config.clan.core.vars.settings.publicModule clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my-machine,my-machine2}.config.clan.core.vars.settings.secretModule clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my-machine,my-machine2}.config.clan.core.vars.?sops.?secretUploadDirectory clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my-machine,my-machine2}.config.clan.core.vars.?password-store.?passCommand clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my-machine,my-machine2}.config.clan.core.vars.?password-store.?secretLocation clan-pytest-with-core> - (not cached) clanInternals.vars.settings.?recipients clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my-machine,my-machine2}.config.clan.core.vars.?age.?secretLocation clan-pytest-with-core> ------------------------------ Captured log call ------------------------------- clan-pytest-with-core> DEBUG clan_cli.tests.helpers.cli:__init__.py:143 $ clan machines create --flake=/build/pytest-3s6r_r0q/flake my-machine clan-pytest-with-core> Caller: /build/src/clan_cli/tests/test_machines_cli.py:245::test_machine_delete clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:927 Prefetching flake /build/pytest-3s6r_r0q/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/d2c0050d97832c3ac5193485b93705d00938c15e clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1174 Cache miss for clanInternals.inventoryClass.inventorySerialization.{instances,machines,meta} clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:789 Loading flake cache from file /build/clan-flake-cache/flakes-v2/d2c0050d97832c3ac5193485b93705d00938c15e clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:927 Prefetching flake /build/pytest-3s6r_r0q/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/d2c0050d97832c3ac5193485b93705d00938c15e clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1174 Cache miss for clanInternals.templates.machine."new-machine" clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:789 Loading flake cache from file /build/clan-flake-cache/flakes-v2/d2c0050d97832c3ac5193485b93705d00938c15e clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:143 chmod \ clan-pytest-with-core> -R u+w \ clan-pytest-with-core> /build/pytest-3s6r_r0q/flake/machines/my-machine 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:143 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.flake.flake:flake.py:1179 (cached) $ clan select 'clanInternals.inventoryClass.inventorySerialization.{instances,machines,meta}' clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:143 git \ clan-pytest-with-core> -C /build/pytest-3s6r_r0q/flake \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-3s6r_r0q/flake/machines/my-machine 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> DEBUG clan_lib.cmd:__init__.py:143 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> DEBUG clan_lib.git:__init__.py:98 Adding machines/my-machine to git clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:143 git \ clan-pytest-with-core> -C /build/pytest-3s6r_r0q/flake \ clan-pytest-with-core> diff \ clan-pytest-with-core> --cached --exit-code \ clan-pytest-with-core> -- /build/pytest-3s6r_r0q/flake/machines/my-machine 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> DEBUG clan_lib.cmd:__init__.py:143 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> DEBUG clan_lib.cmd:__init__.py:143 git \ clan-pytest-with-core> -C /build/pytest-3s6r_r0q/flake \ clan-pytest-with-core> commit \ clan-pytest-with-core> -m 'machines: add my-machine' \ clan-pytest-with-core> --no-verify /build/pytest-3s6r_r0q/flake/machines/my-machine 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> DEBUG clan_lib.cmd:__init__.py:143 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> INFO clan_lib.git:__init__.py:141 Committed machines/my-machine to git clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:927 Prefetching flake /build/pytest-3s6r_r0q/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.inventoryClass.inventorySerialization.{instances,machines,meta} clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1174 Cache miss for clanInternals.inventoryClass.introspection clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:789 Loading flake cache from file /build/clan-flake-cache/flakes-v2/87fa3ad5d993f6776ff1731bb4a5394cf37046e5 clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1179 (cached) $ clan select 'clanInternals.inventoryClass.inventorySerialization.{instances,machines,meta}' clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:927 Prefetching flake /build/pytest-3s6r_r0q/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/87fa3ad5d993f6776ff1731bb4a5394cf37046e5 clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1179 (cached) $ clan select 'clanInternals.inventoryClass.inventorySerialization.{instances,machines,meta}' clan-pytest-with-core> DEBUG clan_cli.tests.helpers.cli:__init__.py:143 $ clan secrets machines add --flake=/build/pytest-3s6r_r0q/flake my-machine age14tva0txcrl0zes05x7gkx56qd6wd9q3nwecjac74xxzz4l47r44sv3fz62 clan-pytest-with-core> Caller: /build/src/clan_cli/tests/test_machines_cli.py:254::test_machine_delete clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:927 Prefetching flake /build/pytest-3s6r_r0q/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/87fa3ad5d993f6776ff1731bb4a5394cf37046e5 clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1174 Cache miss for clanInternals.?secrets.?age.?plugins clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:789 Loading flake cache from file /build/clan-flake-cache/flakes-v2/87fa3ad5d993f6776ff1731bb4a5394cf37046e5 clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:143 git \ clan-pytest-with-core> -C /build/pytest-3s6r_r0q/flake \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-3s6r_r0q/flake/sops/machines/my-machine 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> DEBUG clan_lib.cmd:__init__.py:143 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> DEBUG clan_lib.git:__init__.py:98 Adding sops/machines/my-machine to git clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:143 git \ clan-pytest-with-core> -C /build/pytest-3s6r_r0q/flake \ clan-pytest-with-core> diff \ clan-pytest-with-core> --cached --exit-code \ clan-pytest-with-core> -- /build/pytest-3s6r_r0q/flake/sops/machines/my-machine 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> DEBUG clan_lib.cmd:__init__.py:143 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> DEBUG clan_lib.cmd:__init__.py:143 git \ clan-pytest-with-core> -C /build/pytest-3s6r_r0q/flake \ clan-pytest-with-core> commit \ clan-pytest-with-core> -m 'secrets: add machine my-machine' \ clan-pytest-with-core> --no-verify /build/pytest-3s6r_r0q/flake/sops/machines/my-machine 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> DEBUG clan_lib.cmd:__init__.py:143 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> INFO clan_lib.git:__init__.py:141 Committed sops/machines/my-machine to git clan-pytest-with-core> DEBUG clan_cli.tests.helpers.cli:__init__.py:143 $ clan machines create --flake=/build/pytest-3s6r_r0q/flake my-machine2 clan-pytest-with-core> Caller: /build/src/clan_cli/tests/test_machines_cli.py:245::test_machine_delete clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:927 Prefetching flake /build/pytest-3s6r_r0q/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.inventoryClass.inventorySerialization.{instances,machines,meta} clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:927 Prefetching flake /build/pytest-3s6r_r0q/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/b655f30adf6381d63394c5e0e0b5b886031828b4 clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1174 Cache miss for clanInternals.templates.machine."new-machine" clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:789 Loading flake cache from file /build/clan-flake-cache/flakes-v2/b655f30adf6381d63394c5e0e0b5b886031828b4 clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:143 chmod \ clan-pytest-with-core> -R u+w \ clan-pytest-with-core> /build/pytest-3s6r_r0q/flake/machines/my-machine2 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:143 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.flake.flake:flake.py:1179 (cached) $ clan select 'clanInternals.inventoryClass.inventorySerialization.{instances,machines,meta}' clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:143 git \ clan-pytest-with-core> -C /build/pytest-3s6r_r0q/flake \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-3s6r_r0q/flake/machines/my-machine2 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> DEBUG clan_lib.cmd:__init__.py:143 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> DEBUG clan_lib.git:__init__.py:98 Adding machines/my-machine2 to git clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:143 git \ clan-pytest-with-core> -C /build/pytest-3s6r_r0q/flake \ clan-pytest-with-core> diff \ clan-pytest-with-core> --cached --exit-code \ clan-pytest-with-core> -- /build/pytest-3s6r_r0q/flake/machines/my-machine2 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> DEBUG clan_lib.cmd:__init__.py:143 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> DEBUG clan_lib.cmd:__init__.py:143 git \ clan-pytest-with-core> -C /build/pytest-3s6r_r0q/flake \ clan-pytest-with-core> commit \ clan-pytest-with-core> -m 'machines: add my-machine2' \ clan-pytest-with-core> --no-verify /build/pytest-3s6r_r0q/flake/machines/my-machine2 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> DEBUG clan_lib.cmd:__init__.py:143 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> INFO clan_lib.git:__init__.py:141 Committed machines/my-machine2 to git clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:927 Prefetching flake /build/pytest-3s6r_r0q/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.inventoryClass.inventorySerialization.{instances,machines,meta} clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1174 Cache miss for clanInternals.inventoryClass.introspection clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:789 Loading flake cache from file /build/clan-flake-cache/flakes-v2/539e0f4175fda181c1d9411f7e05a37a6df62fed clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1179 (cached) $ clan select 'clanInternals.inventoryClass.inventorySerialization.{instances,machines,meta}' clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:927 Prefetching flake /build/pytest-3s6r_r0q/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/539e0f4175fda181c1d9411f7e05a37a6df62fed clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1179 (cached) $ clan select 'clanInternals.inventoryClass.inventorySerialization.{instances,machines,meta}' clan-pytest-with-core> DEBUG clan_cli.tests.helpers.cli:__init__.py:143 $ clan secrets machines add --flake=/build/pytest-3s6r_r0q/flake my-machine2 age1dhuh9xtefhgpr2sjjf7gmp9q2pr37z92rv4wsadxuqdx48989g7qj552qp clan-pytest-with-core> Caller: /build/src/clan_cli/tests/test_machines_cli.py:254::test_machine_delete clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:927 Prefetching flake /build/pytest-3s6r_r0q/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/539e0f4175fda181c1d9411f7e05a37a6df62fed clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:143 git \ clan-pytest-with-core> -C /build/pytest-3s6r_r0q/flake \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-3s6r_r0q/flake/sops/machines/my-machine2 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> DEBUG clan_lib.cmd:__init__.py:143 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> DEBUG clan_lib.git:__init__.py:98 Adding sops/machines/my-machine2 to git clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:143 git \ clan-pytest-with-core> -C /build/pytest-3s6r_r0q/flake \ clan-pytest-with-core> diff \ clan-pytest-with-core> --cached --exit-code \ clan-pytest-with-core> -- /build/pytest-3s6r_r0q/flake/sops/machines/my-machine2 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> DEBUG clan_lib.cmd:__init__.py:143 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> DEBUG clan_lib.cmd:__init__.py:143 git \ clan-pytest-with-core> -C /build/pytest-3s6r_r0q/flake \ clan-pytest-with-core> commit \ clan-pytest-with-core> -m 'secrets: add machine my-machine2' \ clan-pytest-with-core> --no-verify /build/pytest-3s6r_r0q/flake/sops/machines/my-machine2 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> DEBUG clan_lib.cmd:__init__.py:143 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> INFO clan_lib.git:__init__.py:141 Committed sops/machines/my-machine2 to git clan-pytest-with-core> DEBUG clan_cli.tests.helpers.cli:__init__.py:143 $ clan secrets set --flake=/build/pytest-3s6r_r0q/flake --machine=my-machine --machine=my-machine2 shared_secret clan-pytest-with-core> Caller: /build/src/clan_cli/tests/test_machines_cli.py:268::test_machine_delete clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:927 Prefetching flake /build/pytest-3s6r_r0q/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.cmd:__init__.py:143 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> DEBUG clan_lib.cmd:__init__.py:143 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> DEBUG clan_cli.secrets.sops:sops.py:99 Found age public key from a private key in the environment (SOPS_AGE_KEY): age1dhwqzkah943xzc34tc3dlmfayyevcmdmxzjezdgdy33euxwf59vsp3vk3c clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:143 sops \ clan-pytest-with-core> --config /build/tmpcgobqgo6 \ clan-pytest-with-core> encrypt \ clan-pytest-with-core> --in-place /dev/shm/tmpxg0b9tnz clan-pytest-with-core> Caller: /build/src/clan_cli/secrets/sops.py:320::sops_run clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:143 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> DEBUG clan_lib.cmd:__init__.py:143 git \ clan-pytest-with-core> -C /build/pytest-3s6r_r0q/flake \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-3s6r_r0q/flake/sops/secrets/shared_secret/machines/my-machine 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> DEBUG clan_lib.cmd:__init__.py:143 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> DEBUG clan_lib.git:__init__.py:98 Adding sops/secrets/shared_secret/machines/my-machine to git clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:143 git \ clan-pytest-with-core> -C /build/pytest-3s6r_r0q/flake \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-3s6r_r0q/flake/sops/secrets/shared_secret/machines/my-machine2 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> DEBUG clan_lib.cmd:__init__.py:143 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> DEBUG clan_lib.git:__init__.py:98 Adding sops/secrets/shared_secret/machines/my-machine2 to git clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:143 git \ clan-pytest-with-core> -C /build/pytest-3s6r_r0q/flake \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-3s6r_r0q/flake/sops/secrets/shared_secret/users/admin 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> DEBUG clan_lib.cmd:__init__.py:143 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> DEBUG clan_lib.git:__init__.py:98 Adding sops/secrets/shared_secret/users/admin to git clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:143 git \ clan-pytest-with-core> -C /build/pytest-3s6r_r0q/flake \ clan-pytest-with-core> add \ clan-pytest-with-core> -- /build/pytest-3s6r_r0q/flake/sops/secrets/shared_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> DEBUG clan_lib.cmd:__init__.py:143 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> DEBUG clan_lib.git:__init__.py:98 Adding sops/secrets/shared_secret/secret to git clan-pytest-with-core> DEBUG clan_lib.cmd:__init__.py:143 git \ clan-pytest-with-core> -C /build/pytest-3s6r_r0q/flake \ clan-pytest-with-core> diff \ clan-pytest-with-core> --cached --exit-code \ clan-pytest-with-core> -- /build/pytest-3s6r_r0q/flake/sops/secrets/shared_secret/machines/my-machine \ clan-pytest-with-core> /build/pytest-3s6r_r0q/flake/sops/secrets/shared_secret/machines/my-machine2 \ clan-pytest-with-core> /build/pytest-3s6r_r0q/flake/sops/secrets/shared_secret/users/admin \ clan-pytest-with-core> /build/pytest-3s6r_r0q/flake/sops/secrets/shared_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> DEBUG clan_lib.cmd:__init__.py:143 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> DEBUG clan_lib.cmd:__init__.py:143 git \ clan-pytest-with-core> -C /build/pytest-3s6r_r0q/flake \ clan-pytest-with-core> commit \ clan-pytest-with-core> -m 'secrets: update shared_secret' \ clan-pytest-with-core> --no-verify /build/pytest-3s6r_r0q/flake/sops/secrets/shared_secret/machines/my-machine \ clan-pytest-with-core> /build/pytest-3s6r_r0q/flake/sops/secrets/shared_secret/machines/my-machine2 \ clan-pytest-with-core> /build/pytest-3s6r_r0q/flake/sops/secrets/shared_secret/users/admin \ clan-pytest-with-core> /build/pytest-3s6r_r0q/flake/sops/secrets/shared_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> DEBUG clan_lib.cmd:__init__.py:143 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> INFO clan_lib.git:__init__.py:147 Committed 4 files to git: sops/secrets/shared_secret/machines/my-machine, sops/secrets/shared_secret/machines/my-machine2, sops/secrets/shared_secret/users/admin, sops/secrets/shared_secret/secret clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:927 Prefetching flake /build/pytest-3s6r_r0q/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_cli.tests.helpers.cli:__init__.py:143 $ clan vars generate --flake /build/pytest-3s6r_r0q/flake my-machine clan-pytest-with-core> Caller: /build/src/clan_cli/tests/test_machines_cli.py:288::test_machine_delete clan-pytest-with-core> clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:927 Prefetching flake /build/pytest-3s6r_r0q/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.cliChecks clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1174 Cache miss for clanInternals.inventoryClass.inventorySerialization.{instances,machines,meta} clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:789 Loading flake cache from file /build/clan-flake-cache/flakes-v2/b49140cc09eee3cd998abbc9eb92b65a1f440ab7 clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1179 (cached) $ clan select 'clanInternals.inventoryClass.inventorySerialization.{instances,machines,meta}' clan-pytest-with-core> DEBUG clan_lib.flake.flake:flake.py:1144 Precaching selectors: clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.machines clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.instances clan-pytest-with-core> - (cached) clanInternals.inventoryClass.inventorySerialization.meta clan-pytest-with-core> - (not cached) clanInternals.?secrets.?age.?plugins clan-pytest-with-core> - (not cached) clanInternals.inventoryClass.relativeDirectory clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my-machine,my-machine2}.config.clan.core.vars.generators.*.{share,dependencies,prompts,validationHash} clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my-machine,my-machine2}.config.clan.core.vars.generators.*.files.*.{secret,deploy,owner,group,mode,neededFor} clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my-machine,my-machine2}.config.clan.core.?sops.?defaultGroups clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my-machine,my-machine2}.config.clan.core.vars.settings.publicModule clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my-machine,my-machine2}.config.clan.core.vars.settings.secretModule clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my-machine,my-machine2}.config.clan.core.vars.?sops.?secretUploadDirectory clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my-machine,my-machine2}.config.clan.core.vars.?password-store.?passCommand clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my-machine,my-machine2}.config.clan.core.vars.?password-store.?secretLocation clan-pytest-with-core> - (not cached) clanInternals.vars.settings.?recipients clan-pytest-with-core> - (not cached) clanInternals.machines.x86_64-linux.{my-machine,my-machine2}.config.clan.core.vars.?age.?secretLocation clan-pytest-with-core> ============================= slowest 5 durations ============================== clan-pytest-with-core> 11.01s call clan_lib/services/modules_test.py::test_delete_service_instance clan-pytest-with-core> 10.76s call clan_lib/machines/actions_test.py::test_get_machine_writeability clan-pytest-with-core> 10.56s call clan_lib/vars/migrations/test_migrate_zerotier.py::TestMigrateZerotier::test_legacy clan-pytest-with-core> 10.22s call clan_lib/machines/actions_test.py::test_list_machines_full clan-pytest-with-core> 9.26s call clan_cli/generate_test_vars/test_generate_test_vars.py::test_generate_test_vars clan-pytest-with-core> =========================== short test summary info ============================ clan-pytest-with-core> FAILED clan_lib/flash/test_list.py::test_flash_config - assert 'nixos-system-my_machine' in 'warning: you don\'t have Internet acce... clan-pytest-with-core> FAILED clan_lib/tests/test_create.py::test_clan_create_api - clan_lib.flake.flake.ClanSelectError: Error while executing:$ clan select '... clan-pytest-with-core> FAILED clan_lib/api/directory_settings_test.py::test_vars_generate_age_with_directory_setting - clan_lib.flake.flake.ClanSelectError: Error while executing:$ clan select '... clan-pytest-with-core> FAILED clan_cli/tests/test_vars_shared.py::test_multi_machine_shared_vars - clan_lib.flake.flake.ClanSelectError: Error while executing:$ clan select '... clan-pytest-with-core> FAILED clan_cli/tests/test_vars_shared.py::test_shared_generator_allows_machine_specific_differences - clan_lib.flake.flake.ClanSelectError: Error while executing:$ clan select '... clan-pytest-with-core> FAILED clan_lib/api/directory_settings_test.py::test_vars_generate_with_directory_setting - clan_lib.flake.flake.ClanSelectError: Error while executing:$ clan select '... clan-pytest-with-core> FAILED clan_cli/tests/test_vars_shared.py::test_password_store_set_shared_var_for_multiple_machines - clan_lib.flake.flake.ClanSelectError: Error while executing:$ clan select '... clan-pytest-with-core> FAILED clan_cli/tests/test_vars_shared.py::test_sops_fix_skips_add_for_no_deploy_shared_secret - clan_lib.flake.flake.ClanSelectError: Error while executing:$ clan select '... clan-pytest-with-core> FAILED clan_cli/tests/test_vars_shared.py::test_add_machine_to_existing_shared_secret - clan_lib.flake.flake.ClanSelectError: Error while executing:$ clan select '... clan-pytest-with-core> FAILED clan_cli/tests/test_vars_shared.py::test_shared_vars_regeneration - clan_lib.flake.flake.ClanSelectError: Error while executing:$ clan select '... clan-pytest-with-core> FAILED clan_cli/tests/test_vars_shared.py::test_generate_removes_stale_machine_symlink_when_deploy_becomes_false - clan_lib.flake.flake.ClanSelectError: Error while executing:$ clan select '... clan-pytest-with-core> FAILED clan_cli/tests/test_vars_shared.py::test_export_age_import_sops - clan_lib.flake.flake.ClanSelectError: Error while executing:$ clan select '... clan-pytest-with-core> FAILED clan_cli/tests/test_vars_shared.py::test_cross_machine_shared_dependency - clan_lib.flake.flake.ClanSelectError: Error while executing:$ clan select '... clan-pytest-with-core> FAILED clan_cli/tests/test_vars_shared.py::test_sops_set_shared_var_for_multiple_machines - clan_lib.flake.flake.ClanSelectError: Error while executing:$ clan select '... clan-pytest-with-core> FAILED clan_cli/tests/test_vars_shared.py::test_share_mode_switch_regenerates_secret - clan_lib.flake.flake.ClanSelectError: Error while executing:$ clan select '... clan-pytest-with-core> FAILED clan_cli/tests/test_vars_shared.py::test_sops_fix_removes_machine_from_no_deploy_shared_secret - clan_lib.flake.flake.ClanSelectError: Error while executing:$ clan select '... clan-pytest-with-core> FAILED clan_cli/tests/test_vars_prompts.py::test_prompt_prefill_on_regeneration - pexpect.exceptions.EOF: End Of File (EOF). Exception style platform. clan-pytest-with-core> FAILED clan_cli/tests/test_vars_shared.py::test_import_survives_generate - clan_lib.flake.flake.ClanSelectError: Error while executing:$ clan select '... clan-pytest-with-core> FAILED clan_cli/tests/test_vars_shared.py::test_export_sops_import_age - clan_lib.flake.flake.ClanSelectError: Error while executing:$ clan select '... clan-pytest-with-core> FAILED clan_cli/tests/test_vars_prompts.py::test_persisted_prompt_reused_not_reasked - clan_lib.flake.flake.ClanSelectError: Error while executing:$ clan select '... clan-pytest-with-core> FAILED clan_cli/tests/test_vars_prompts.py::test_api_set_prompts - clan_lib.flake.flake.ClanSelectError: Error while executing:$ clan select '... clan-pytest-with-core> FAILED clan_cli/tests/test_vars_shared.py::test_age_set_shared_var_for_multiple_machines - clan_lib.flake.flake.ClanSelectError: Error while executing:$ clan select '... clan-pytest-with-core> FAILED clan_cli/tests/test_vars_generate.py::test_sops_fix_commits_all_changes - clan_lib.flake.flake.ClanSelectError: Error while executing:$ clan select '... clan-pytest-with-core> FAILED clan_cli/tests/test_vars_generate.py::test_generate_secret_var_sops_with_default_group - clan_lib.flake.flake.ClanSelectError: Error while executing:$ clan select '... clan-pytest-with-core> FAILED clan_cli/tests/test_vars_prompts.py::test_prompt - clan_lib.flake.flake.ClanSelectError: Error while executing:$ clan select '... clan-pytest-with-core> FAILED clan_cli/tests/test_vars_generate.py::test_generate_secret_for_multiple_machines - clan_lib.flake.flake.ClanSelectError: Error while executing:$ clan select '... clan-pytest-with-core> FAILED clan_cli/tests/test_vars_generate.py::test_generate_public_and_secret_vars - clan_lib.flake.flake.ClanSelectError: Error while executing:$ clan select '... clan-pytest-with-core> FAILED clan_cli/tests/test_vars_prompts.py::test_get_generator_prompt_previous_values - clan_lib.flake.flake.ClanSelectError: Error while executing:$ clan select '... clan-pytest-with-core> FAILED clan_cli/tests/test_vars_generate.py::test_sops_fix_skips_add_for_no_deploy_per_machine_secret - clan_lib.flake.flake.ClanSelectError: Error while executing:$ clan select '... clan-pytest-with-core> FAILED clan_cli/tests/test_vars_errors.py::test_non_existing_dependency_raises_error - AssertionError: Regex pattern did not match. clan-pytest-with-core> FAILED clan_cli/tests/test_vars_generate.py::test_binary_secret_roundtrip - clan_lib.flake.flake.ClanSelectError: Error while executing:$ clan select '... clan-pytest-with-core> FAILED clan_cli/tests/test_vars_generate.py::test_flake_level_generators - clan_lib.flake.flake.ClanSelectError: Error on: $ clan select 'clanInternal... clan-pytest-with-core> FAILED clan_cli/tests/test_vars_generate.py::test_generate_shared_secret_sops - clan_lib.flake.flake.ClanSelectError: Error while executing:$ clan select '... clan-pytest-with-core> FAILED clan_cli/tests/test_vars_generate.py::test_stdout_of_generate - clan_lib.flake.flake.ClanSelectError: Error while executing:$ clan select '... clan-pytest-with-core> FAILED clan_cli/tests/test_vars_errors.py::test_shared_generator_conflicting_definition_raises_error - AssertionError: Regex pattern did not match. clan-pytest-with-core> FAILED clan_cli/tests/test_vars_cache.py::test_invalidation - clan_lib.flake.flake.ClanSelectError: Error while executing:$ clan select '... clan-pytest-with-core> FAILED clan_cli/tests/test_vars_cache.py::test_dynamic_invalidation - clan_lib.flake.flake.ClanSelectError: Error on: $ clan select 'clanInternal... clan-pytest-with-core> FAILED clan_cli/tests/test_vars_cache.py::test_generate_secret_var_sops_minimal_select_calls - clan_lib.flake.flake.ClanSelectError: Error while executing:$ clan select '... clan-pytest-with-core> FAILED clan_lib/tests/test_known_selectors.py::test_known_selectors_exist - Failed: Selector 'machine_backups' failed clan-pytest-with-core> FAILED clan_cli/tests/test_vars_errors.py::test_generator_script_missing_output_file - AssertionError: Regex pattern did not match. clan-pytest-with-core> FAILED clan_cli/tests/test_vars_generate.py::test_generate_secret_var_password_store - clan_lib.flake.flake.ClanSelectError: Error while executing:$ clan select '... clan-pytest-with-core> FAILED clan_cli/tests/test_vars_age.py::test_age_incremental_generate_shared_secret - clan_lib.flake.flake.ClanSelectError: Error while executing:$ clan select '... clan-pytest-with-core> FAILED clan_cli/tests/test_vars_errors.py::test_circular_dependency_raises_error - AssertionError: Regex pattern did not match. clan-pytest-with-core> FAILED clan_cli/tests/test_vars_cache.py::test_get_generators_only_decrypts_requested_machines - clan_lib.flake.flake.ClanSelectError: Error while executing:$ clan select '... clan-pytest-with-core> FAILED clan_cli/tests/test_vars_cache.py::test_generate_secret_var_password_store_minimal_select_calls - clan_lib.flake.flake.ClanSelectError: Error while executing:$ clan select '... clan-pytest-with-core> FAILED clan_cli/tests/test_vars_cache.py::test_cache_misses_for_vars_operations - clan_lib.flake.flake.ClanSelectError: Error while executing:$ clan select '... clan-pytest-with-core> FAILED clan_cli/tests/test_vars_errors.py::test_shared_vars_must_never_depend_on_machine_specific_vars - AssertionError: Regex pattern did not match. clan-pytest-with-core> FAILED clan_cli/tests/test_vars_errors.py::test_accessing_path_before_generate_shows_helpful_error - clan_lib.flake.flake.ClanSelectError: Error while executing:$ clan select '... clan-pytest-with-core> FAILED clan_cli/tests/test_vars_age.py::test_generate_secret_var_age - clan_lib.flake.flake.ClanSelectError: Error while executing:$ clan select '... clan-pytest-with-core> FAILED clan_cli/tests/test_vars_errors.py::test_fails_when_files_are_left_from_other_backend - clan_lib.flake.flake.ClanSelectError: Error while executing:$ clan select '... clan-pytest-with-core> FAILED clan_cli/tests/test_install_secret_path.py::test_password_store_upload_directory[custom] - clan_lib.flake.flake.ClanSelectError: Error on: $ clan select 'clanInternal... clan-pytest-with-core> FAILED clan_cli/tests/test_install_secret_path.py::test_sops_install_secret_path[default] - clan_lib.flake.flake.ClanSelectError: Error while executing:$ clan select '... clan-pytest-with-core> FAILED clan_cli/tests/test_vars_age.py::test_generate_secret_var_age_minimal_select_calls - clan_lib.flake.flake.ClanSelectError: Error while executing:$ clan select '... clan-pytest-with-core> FAILED clan_cli/tests/test_install_secret_path.py::test_sops_install_secret_path[custom] - clan_lib.flake.flake.ClanSelectError: Error while executing:$ clan select '... clan-pytest-with-core> FAILED clan_cli/tests/test_install_secret_path.py::test_password_store_upload_directory[default] - clan_lib.flake.flake.ClanSelectError: Error on: $ clan select 'clanInternal... clan-pytest-with-core> FAILED clan_cli/tests/test_machines_cli.py::test_machine_subcommands - clan_lib.flake.flake.ClanSelectError: Error on: $ clan select 'clanInternal... clan-pytest-with-core> FAILED clan_lib/machines/actions_test.py::test_get_machine_writeability - AssertionError: assert {'deploy.buil...alledAt', ...} == {'deploy.buil...al... clan-pytest-with-core> FAILED clan_cli/tests/test_backups.py::test_backups - clan_lib.flake.flake.ClanSelectError: Error on: $ clan select 'clanInternal... clan-pytest-with-core> FAILED clan_cli/ssh/test_deploy_info.py::test_ssh_shell_from_deploy - clan_lib.flake.flake.ClanSelectError: Error on: $ clan select 'clanInternal... clan-pytest-with-core> FAILED clan_cli/machines/install_test.py::test_install_errors_without_target_host - AssertionError: Regex pattern did not match. clan-pytest-with-core> FAILED clan_cli/tests/test_machines_cli.py::test_machine_delete - clan_lib.flake.flake.ClanSelectError: Error while executing:$ clan select '... clan-pytest-with-core> ================== 61 failed, 171 passed, 1 skipped in 27.97s ================== 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: path '/nix/store/bck63582sk5mhi1whs2wawl3j8yrd26k-clan-pytest-with-core' is not valid error: Cannot build '/nix/store/kglpgl03i60sk9rg46gdyacngrk7yw5r-clan-pytest-with-core.drv'. Reason: builder failed with exit code 1. Output paths: /nix/store/bck63582sk5mhi1whs2wawl3j8yrd26k-clan-pytest-with-core