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-models
library. Model creators should create aTest
module for their model, and add those tests to the mainTest
module. -
This repo uses
ormolu
for Haskell formatting. Other repos such asasclepias
usebrittany
, but as of 2022-04-22brittany
yields errors likely due to incompatability with template haskell. -
The
build-fragments
application (seeflake.nix
in 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.sh
check (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-fragments
and not edited otherwise.