fact-models Developer Guide
Nix Setup
To develop within event-data-model,
and to use the fact-models tool
we recommend using a development shell defined in flake.nix.
This guarantees applications are
pinned to the same version as other developers and the CI.
For instructions on installing nix, see
the nsBuild setup instructions.
For information on nix usage, see the nsBuild usage guide.
Versioning
Versioning of fact-models and other packages in this repository follow
semantic versioning (MAJOR.MINOR.PATCH),
where you increment:
MAJOR version when you make incompatible API changes,
MINOR version when you add functionality in a backwards compatible manner
PATCH version when you make backwards compatible bug fixes
In particular, adding new facts or models typically only requires a MINOR update, while changing the shape of existing facts or models should trigger a MAJOR update. Bug fixes to the library functions should only trigger a PATCH update.
Tests
An important part of this repository are the integration tests that ensure that application logic is correct and that data can be marshalled to/from applications as appropriate.
This page documents checks done in this repo and where they are found.
| Description | Notes | Implemented |
|---|---|---|
Serialization of facts and models in Haskell, Dhall, and JSON |
See
The
See Each model needs to call the test functions in a test module. |
Yes, though see note. |
Eventlines values produced by upstream processes can be marshalled to/from Haskell applications |
No |
Notable Indirections
This sections tries to document where and why the structure of certain parts of the repository may not be straightfoward.
-
Tests for models are not automatically created in the
fact-modelslibrary. Model creators should create aTestmodule for their model, and add those tests to the mainTestmodule. -
This repo uses
ormolufor Haskell formatting. Other repos such asasclepiasusebrittany, but as of 2022-04-22brittanyyields errors likely due to incompatability with template haskell. -
The
build-fragmentsapplication (seeflake.nixin project root) creates a dhall file than be used to check the integrity of eachFact.dhall(orModel.dhall) file. This is checked by thecheck-fragments.shcheck (seeflake.nix) withdhall freeze $1 --check --all. This also serves to check that the fragments are up-to-date assuming that the fragments are only created bybuild-fragmentsand not edited otherwise.