Add POC for using nickel as a configuration lang

The `check.ncl` file contains the commands what we could use directly from snakemake to validate the configs and generate the json/yaml for ecg
This commit is contained in:
Quentin Guilloteau 2024-07-11 16:05:08 +02:00
parent 30a82efc70
commit 46b7d349c3
4 changed files with 78 additions and 0 deletions

59
artifact_contract.ncl Normal file
View File

@ -0,0 +1,59 @@
let
conf = {
ARCHIVE_FORMATS = [ "zip", "tar" ],
PACKAGE_MANAGERS = [ "dpkg", "conda", "pip"]
}
in
{
PackageManager = std.contract.from_predicate (
fun value => std.array.any (fun x => x == value) conf.PACKAGE_MANAGERS
),
ArchiveType = std.contract.from_predicate (
fun value => std.array.any (fun x => x == value) conf.ARCHIVE_FORMATS
),
GitPackage = {
name
| doc "Name of the package for future identification"
| String,
location
| doc "Path where cloned in the container"
| String
},
MiscPackage = {
name
| doc "Name of the package for future identification"
| String,
url
| doc "URL of the package. Will be used to compute the hash"
| String,
type
| doc "Type of the archive (zip, tar, ...)"
| ArchiveType,
},
Artifact = {
artefact_url
| doc "URL where to download the artifact"
| String,
type
| doc "Type of the archive (zip, tar, ...)"
| ArchiveType,
doi
| doc "DOI of the artifact"
| String,
image_name
| doc "Name to give the image when building"
| String,
location
| doc "Path to the dockerfile in the artifact"
| String,
package_managers
| doc "Package Managers used in the container"
| Array PackageManager,
git_packages
| doc "Git repositories cloned in the container"
| Array GitPackage,
misc_packages
| doc "Misc. packages downloaded from the container"
| Array MiscPackage,
}
}

View File

@ -0,0 +1,14 @@
{
artefact_url = "https://example.com/artifact.zip",
type = "zip",
doi = "...",
image_name = "image:version",
location = "path/to/docker/folder",
package_managers = [ "dpkg" ],
git_packages = [
{ name = "pkg1", location = "path/to/git/repo"}
],
misc_packages = [
{ name = "mpkg1", url = "https://", type = "zip" }
],
}

4
check.ncl Normal file
View File

@ -0,0 +1,4 @@
let { Artifact, .. } = import "artifact_contract.ncl" in
(
(import "artifacts_nickel/example.ncl") | Artifact
)

View File

@ -15,6 +15,7 @@
devShells = {
default = pkgs.mkShell {
packages = with pkgs; [
nickel
(python3.withPackages (ps: with ps; [
requests
pyyaml