about summary refs log tree commit diff
path: root/lib/tests/modules.sh
AgeCommit message (Collapse)AuthorFilesLines
2024-04-04types.attrTagWith: removeRobert Hensing1-1/+1
Keep it simple for now.
2024-04-04lib.types.attrTag: Custom error when passing bare typeRobert Hensing1-0/+1
2024-04-04lib.types.attrTag: Remove tags from descriptionRobert Hensing1-6/+6
You can find them in the sub-options now.
2024-02-11lib.types.attrTag: initRobert Hensing1-0/+11
2024-02-10Merge pull request #284512 from hercules-ci/lib-types-unique-mergeSilvan Mosberger1-0/+10
lib.types.unique: Check inner type deeply
2024-02-02lib.modules.doRename: Add condition parameterRobert Hensing1-0/+3
This is to support single-to-multi service migrations, so that the `to` (e.g. `foos.""`) isn't defined unconditionally. See test cases.
2024-01-30feat: add test for nonEmptyListOf submoduleDanila Danko1-0/+1
2024-01-28lib.types.unique: Check inner type deeplyRobert Hensing1-0/+10
This doesn't change uniq. Why not? - In NixOS it seems that uniq is only used with simple types that are fully checked by t.check. - It exists for much longer and is used more widely. - I believe we should deprecate it, because unique was already better. - unique can be a proving ground.
2023-12-19lib: `modules.sh` should check JSON output for predictabilityRebecca Turner1-14/+14
Currently, the `lib/tests/modules.sh` test checks the output of `nix-instantiate --eval` without `--json`, which outputs an unspecified human-readable format. This patch modifies `modules.sh` to use the `--json` output instead, to be robust against future changes to `nix-instantiate` output.
2023-12-10Merge pull request #272709 from hercules-ci/module-system-test-pr-131205Maximilian Bosch1-0/+8
lib/modules: Test optionless module errors from #131205
2023-12-09lib/modules: Clarify test assertionsRobert Hensing1-0/+3
2023-12-09lib/modules: Test optionless module errors from #131205Robert Hensing1-0/+5
2023-12-08lib.types.boolByOr: initSilvan Mosberger1-0/+6
This type is necessary to have correct merging behavior for `allowUnfreePredicate` and `allowInsecurePredicate` Co-authored-by: Robert Hensing <roberth@users.noreply.github.com>
2023-10-10lib/tests: add test for pkgsText parameter and package set selection of ↵Anselm Schüler1-0/+2
mkPackageOption
2023-10-06lib/tests: add more tests for mkPackageOptionAnselm Schüler1-0/+6
2023-09-28lib.gvariant: make the tests really worklinsui1-0/+3
2023-09-17Merge pull request #249243 from lf-/jade/declarationsWithLocationsRobert Hensing1-1/+19
nixos/modules: Add declarationPositions
2023-09-08nixos/modules: Add declarationPositionsJade Lovelace1-1/+19
What it does: line and column level *declaration* position information: $ nix repl . nix-repl> :p nixosConfigurations.micro.options.environment.systemPackages.declarationPositions [ { column = 7; file = "/nix/store/24aj3k7fgqv3ly7qkbf98qvphasrw9nb-source/nixos/modules/config/system-path.nix"; line = 63; } ] Use cases: - ctags over NixOS options, as will be presented at NixCon 2023 ;) - improving the documentation pages to go to the exact line of the declarations. Related work: - https://github.com/NixOS/nixpkgs/pull/65024 This one does it for all *definitions* rather than declarations, and it was not followed through with due to performance worries. - https://github.com/NixOS/nixpkgs/pull/208173 The basis for this change. This change is just a rebase of that one. I split it out to add the capability before adding users of it, in order to simplify review. However, the ctags script in there is a sample user of this feature. Benchmarks: conducted by evaluating my own reasonably complex NixOS configuration with the command: `hyperfine -S none -w 1 -- "nix eval .#nixosConfigurations.snowflake.config.system.build.toplevel.outPath"` ``` Benchmark 1: nix eval .#nixosConfigurations.snowflake.config.system.build.toplevel.outPath Time (mean ± σ): 8.971 s ± 0.254 s [User: 5.872 s, System: 1.388 s] Range (min … max): 8.574 s … 9.327 s 10 runs Benchmark 1: nix eval .#nixosConfigurations.snowflake.config.system.build.toplevel.outPath Time (mean ± σ): 8.766 s ± 0.160 s [User: 5.873 s, System: 1.346 s] Range (min … max): 8.496 s … 9.033 s 10 runs ``` Summary of results: it seems to be in the noise, this does not cause any visible regression in times.
2023-08-18lib/modules: Report a better error when option tree has bare typeRobert Hensing1-3/+3
Improves on 0d472a62012364d064f0b75f1da491242c6ae9c6 - https://github.com/NixOS/nixpkgs/pull/242339 We actually do have the file name. Thanks Shawn8901 for the [feedback]! feedback: https://github.com/NixOS/nixpkgs/pull/242339#issuecomment-1683107055
2023-08-14lib/modules: Report a good error when option tree has bare typeRobert Hensing1-0/+5
Note that this removes the possibility of declaring an option named `_type`.
2023-08-02Merge pull request #243139 from hercules-ci/modules-test-default-argumentRobert Hensing1-0/+22
lib/tests/modules: Test that _module.args works when a default argume…
2023-07-27Merge pull request #245271 from sternenseemann/module-system-merge-no-typeRobert Hensing1-0/+3
lib/modules: handle typeless options in mergeModules
2023-07-26lib/modules: handle typeless options in mergeModulessternenseemann1-0/+3
mkOption does not require a `type` argument and does not set the resulting attribute if it is not given. Consequently, we need to be prepared to merge options that have no type information.
2023-07-19Merge pull request #244044 from tweag/lib-readmeRobert Hensing1-1/+7
Create a Readme in `lib`
2023-07-18lib/tests: Unify documentation of individual testable filesSilvan Mosberger1-1/+7
2023-07-12lib/tests/modules: Test that _module.args works when a default argument is setRobert Hensing1-0/+22
2023-07-11lib.mergeModules: Add context to error messageRobert Hensing1-1/+1
2023-07-05lib/tests: invalidate hashesNaïm Favier1-3/+3
Having the current bash hash present in the nixpkgs tree makes Nix detect bash as a runtime dependency of nixpkgs, which in turns messes up `fetchFromGitHub` due to https://github.com/NixOS/nix/issues/6660
2023-06-27lib/tests/modules.sh: Test types.pathInStoreRobert Hensing1-0/+10
Add missing test cases. I think the .links case should be rejected even though it's technically a path in the store.
2023-06-16lib.modules: Add mergeAttrDefinitionsWithPrioRobert Hensing1-0/+2
This will let us make assertions involving _module.args.pkgs, which is not an option but a value attribute, and therefore doesn't have its own highestPrio to inspect. The new function gives us that info.
2023-06-01lib/tests: Fix when run with Nix 2.3Silvan Mosberger1-1/+1
2023-05-20lib/tests: add mkPackageOption testsNaïm Favier1-0/+5
2023-05-06lib.modules: configurationClass -> classRobert Hensing1-1/+1
This simplifies the documentation. `configuration` is implied by `_type`.
2023-05-06lib.modules: in evalModules return move _module.class -> configurationClassRobert Hensing1-0/+1
2023-05-06lib/tests/modules.sh: Add submodule + class testsRobert Hensing1-1/+8
2023-05-06lib/modules: Only interpret class declaration in non-shorthand modeRobert Hensing1-0/+2
This is to avoid stealing keys from submodules. `class` might be common enough that reinterpreting existing `class` attributes in configurations as a declaration leads to fairly widespread problems.
2023-05-06lib/modules: Explain that a configuration can't be loaded as a moduleRobert Hensing1-1/+1
2023-05-06lib/modules: Improve error when a configuration is importedRobert Hensing1-0/+1
This is appears to be a fairly common mistake for beginners who want to build larger things from the system configurations, such as NixOps networks, etc. Further explanation seems appropriate.
2023-05-06lib/modules: Check against importing things with a _typeRobert Hensing1-0/+4
2023-05-06lib/modules: Add class concept to check importsRobert Hensing1-0/+5
This improves the error message when an incompatible module is imported.
2023-05-06lib/tests/modules.sh: Unload implicit modulesRobert Hensing1-0/+1
I had some trouble understanding this. Let's try to keep new tests a bit more stateless and explicit.
2023-03-22lib/modules: better error for invalid option declarationsNaïm Favier1-1/+1
Make `byName` aware of whether it's processing options or config to give slightly more accurate error messages.
2023-03-01lib/modules: Allow an "anonymous" module with key in disabledModulesRobert Hensing1-0/+12
This makes the following work disabledModules = [ foo.nixosModules.bar ]; even if `bar` is not a path, but rather a module such as { key = "/path/to/foo#nixosModules.bar"; config = ...; } By supporting this, the user will often be able to use the same syntax for both importing and disabling a module. This is becoming more relevant because flakes promote the use of attributes to reference modules. Not all of these modules in flake attributes will be identifiable, but with the help of a framework such as flake-parts, these attributes can be guaranteed to be identifiable (by outPath + attribute path).
2022-12-17lib: fix typosfigsoda1-1/+1
2022-12-02lib/modules: Add context to the "option does not exist" errorRobert Hensing1-0/+3
Add trace items that provide context for a failed definition that can not be caught within the Nix language. This also adds a test for the `tryEval` behavior of `showDefs`.
2022-11-03lib/tests/modules: Test doRenameRobert Hensing1-0/+7
2022-10-23lib/strings: Update docs and restructured code to improve readability of ↵Jacob Abel1-1/+1
toInt and toIntBase10.
2022-10-23lib/strings: Refactor toInt into toInt and toIntBase10Jacob Abel1-1/+1
2022-10-23lib/strings: Update toInt to handle intermixed ws and zeros. Added testsJacob Abel1-1/+1
2022-10-07lib/types: always use `<function body>` instead of `[function body]` to ↵Maximilian Bosch1-2/+2
indicate a function inside an option structure The motivation is to have a single identifier for that. Useful for the next commit where I'll try to escape option-parts correctly (options can be any kind of strings, but unless these are Nix identifiers, they must be quoted). Since `<function body>` (or `<name>`/`*`) are special identifiers in error messages and the manual, we need a unique way to mark an option part as function call because these are not to be quoted.