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:
parent
30a82efc70
commit
46b7d349c3
59
artifact_contract.ncl
Normal file
59
artifact_contract.ncl
Normal 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,
|
||||
}
|
||||
}
|
14
artifacts_nickel/example.ncl
Normal file
14
artifacts_nickel/example.ncl
Normal 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
4
check.ncl
Normal file
@ -0,0 +1,4 @@
|
||||
let { Artifact, .. } = import "artifact_contract.ncl" in
|
||||
(
|
||||
(import "artifacts_nickel/example.ncl") | Artifact
|
||||
)
|
Loading…
Reference in New Issue
Block a user