docs(lib): init readme with folder and testing conventions
This commit is contained in:
72
lib/README.md
Normal file
72
lib/README.md
Normal file
@@ -0,0 +1,72 @@
|
|||||||
|
# ClanLib
|
||||||
|
|
||||||
|
This folder is supposed to contain clan specific nix functions.
|
||||||
|
|
||||||
|
Such as:
|
||||||
|
|
||||||
|
- build-clan function
|
||||||
|
- select
|
||||||
|
- build-inventory function
|
||||||
|
- json-schema-converter
|
||||||
|
|
||||||
|
## Structure
|
||||||
|
|
||||||
|
Similar to `nixpkgs/lib` this produces a recursive attribute set in a fixed-point.
|
||||||
|
Functions within lib can depend on each other to create new abstractions.
|
||||||
|
|
||||||
|
### Conventions
|
||||||
|
|
||||||
|
Note: This is not consistently enforced yet.
|
||||||
|
If you start a new feature, or refactoring/touching existing ones, please help us to move towards the below illustrated.
|
||||||
|
|
||||||
|
A single feature-set/module may be organized like this:
|
||||||
|
|
||||||
|
```nix
|
||||||
|
# ↓ The final clanLib
|
||||||
|
{lib, clanLib, ...}:
|
||||||
|
# ↓ portion to add to clanLib
|
||||||
|
{
|
||||||
|
inventory.resolveTags = tags: inventory.machines; # implementation
|
||||||
|
inventory.buildMachines = x: clanLib.inventory.resolveTags x; # implementation
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
Every bigger feature should live in a subfolder with the feature name.
|
||||||
|
It should contain two files:
|
||||||
|
|
||||||
|
- `impl.nix`
|
||||||
|
- `test.nix`
|
||||||
|
- Everything else may be adopted as needed.
|
||||||
|
|
||||||
|
```
|
||||||
|
Example filetree
|
||||||
|
```
|
||||||
|
```sh
|
||||||
|
.
|
||||||
|
├── default.nix
|
||||||
|
├── feature_foo
|
||||||
|
│ ├── impl.nix
|
||||||
|
│ └── test.nix
|
||||||
|
└── feature_bar
|
||||||
|
├── impl.nix
|
||||||
|
├── complex-subfeature
|
||||||
|
│ ├── impl.nix
|
||||||
|
│ └── test.nix
|
||||||
|
├── testless-subfeature # <- We immediately see that this feature is not tested on itself.
|
||||||
|
│ └── impl.nix
|
||||||
|
└── test.nix
|
||||||
|
```
|
||||||
|
|
||||||
|
```nix
|
||||||
|
# default.nix
|
||||||
|
{lib, clanLib, ...}:
|
||||||
|
{
|
||||||
|
inventory.resolveTags = import ./resolveTags { inherit lib clanLib; };
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
## Testing
|
||||||
|
|
||||||
|
For testing we use [nix-unit](https://github.com/nix-community/nix-unit)
|
||||||
|
|
||||||
|
TODO: define a helper that automatically hooks up `tests` in `flake.legacyPackages` and a corresponding buildable `checks` attribute
|
||||||
Reference in New Issue
Block a user