Buildtest Schemas¶
Schema Naming Convention¶
All schema files use the file extension .schema.json to distinguish itself
as a json schema definition from an ordinary json file. All sub-schemas
must be versioned, with the exception of global.schema.json
.
Schema Examples¶
The schema examples are great way to help write your buildspecs and help you understand the edge cases that can lead to an invalid buildspec. The schema examples are used in buildtest regression test for validating the schemas. We expose the examples through buildtest client so its accessible for everyone.
In order to view an example you can run:
buildtest schema -n <schema> --example
If you want to validate the schema examples you can run:
buildtest schema -n <schema> --validate
You may combine --examples
and --validate
option if you want to view
and validate schema examples.
Schema - definitions.schema.json¶
$ buildtest schema -n definitions.schema.json --json
{
"$id": "definitions.schema.json",
"$schema": "http://json-schema.org/draft-07/schema#",
"title": "JSON Schema Definitions File. ",
"description": "This file is used for declaring definitions that are referenced from other schemas",
"definitions": {
"list_of_strings": {
"type": "array",
"uniqueItems": true,
"minItems": 1,
"items": {
"type": "string"
}
},
"string_or_list": {
"oneOf": [
{
"type": "string"
},
{
"$ref": "#/definitions/list_of_strings"
}
]
},
"list_of_ints": {
"type": "array",
"uniqueItems": true,
"minItems": 1,
"items": {
"type": "integer"
}
},
"int_or_list": {
"oneOf": [
{
"type": "integer"
},
{
"$ref": "#/definitions/list_of_ints"
}
]
},
"env": {
"type": "object",
"description": "One or more key value pairs for an environment (key=value)",
"minItems": 1,
"items": {
"type": "object",
"minItems": 1,
"propertyNames": {
"pattern": "^[A-Za-z_][A-Za-z0-9_]*$"
}
}
},
"description": {
"type": "string",
"description": "The ``description`` field is used to document what the test is doing",
"maxLength": 80
},
"tags": {
"description": "Classify tests using a tag name, this can be used for categorizing test and building tests using ``--tags`` option",
"$ref": "#/definitions/string_or_list"
},
"skip": {
"type": "boolean",
"description": "The ``skip`` is a boolean field that can be used to skip tests during builds. By default buildtest will build and run all tests in your buildspec file, if ``skip: True`` is set it will skip the buildspec."
},
"executor": {
"type": "string",
"description": "Select one of the executor name defined in your configuration file (``config.yml``). Every buildspec must have an executor which is responsible for running job. "
},
"sbatch": {
"type": "array",
"description": "This field is used for specifying #SBATCH options in test script. buildtest will insert #SBATCH in front of each value",
"items": {
"type": "string"
}
},
"bsub": {
"type": "array",
"description": "This field is used for specifying #BSUB options in test script. buildtest will insert #BSUB in front of each value",
"items": {
"type": "string"
}
},
"run_only": {
"type": "object",
"description": "A set of conditions to specify when running tests. All conditions must pass in order to process test.",
"additionalProperties": false,
"properties": {
"scheduler": {
"type": "string",
"description": "Test will run only if scheduler is available. We assume binaries are available in $PATH",
"enum": [
"lsf",
"slurm"
]
},
"user": {
"type": "string",
"description": "Test will run only if current user matches this field, otherwise test will be skipped"
},
"platform": {
"type": "string",
"description": "This test will run if target system is Linux or Darwin. We check target system using ``platform.system()`` and match with input field",
"enum": [
"Linux",
"Darwin"
]
},
"linux_distro": {
"type": "array",
"description": "Specify a list of Linux Distros to check when processing test. If target system matches one of input field, test will be processed.",
"uniqueItems": true,
"minItems": 1,
"items": {
"type": "string",
"enum": [
"darwin",
"ubuntu",
"debian",
"rhel",
"centos",
"fedora",
"sles",
"opensuse",
"amazon",
"arch"
]
}
}
}
},
"batch": {
"type": "object",
"description": "The ``batch`` field is used to specify scheduler agnostic directives that are translated to #SBATCH or #BSUB based on your scheduler. This is an experimental feature that supports a subset of scheduler parameters.",
"additionalProperties": false,
"properties": {
"account": {
"type": "string",
"description": "Specify Account to charge job"
},
"begintime": {
"type": "string",
"description": "Specify begin time when job will start allocation"
},
"cpucount": {
"type": "string",
"description": "Specify number of CPU to allocate"
},
"email-address": {
"type": "string",
"description": "Email Address to notify on Job State Changes"
},
"exclusive": {
"type": "boolean",
"description": "Specify if job needs to run in exclusive mode"
},
"memory": {
"type": "string",
"description": "Specify Memory Size for Job"
},
"network": {
"type": "string",
"description": "Specify network resource requirement for job"
},
"nodecount": {
"type": "string",
"description": "Specify number of Nodes to allocate"
},
"qos": {
"type": "string",
"description": "Specify Quality of Service (QOS)"
},
"queue": {
"type": "string",
"description": "Specify Job Queue"
},
"tasks-per-core": {
"type": "string",
"description": "Request number of tasks to be invoked on each core. "
},
"tasks-per-node": {
"type": "string",
"description": "Request number of tasks to be invoked on each node. "
},
"tasks-per-socket": {
"type": "string",
"description": "Request the maximum tasks to be invoked on each socket. "
},
"timelimit": {
"type": "string",
"description": "Specify Job timelimit"
}
}
},
"status": {
"type": "object",
"description": "The status section describes how buildtest detects PASS/FAIL on test. By default returncode 0 is a PASS and anything else is a FAIL, however buildtest can support other types of PASS/FAIL conditions.",
"additionalProperties": false,
"properties": {
"slurm_job_state": {
"type": "string",
"enum": [
"COMPLETED",
"FAILED",
"OUT_OF_MEMORY",
"TIMEOUT"
],
"description": "This field can be used for checking Slurm Job State, if there is a match buildtest will report as ``PASS`` "
},
"returncode": {
"description": "Specify a list of returncodes to match with script's exit code. buildtest will PASS test if script's exit code is found in list of returncodes. You must specify unique numbers as list and a minimum of 1 item in array",
"$ref": "#/definitions/int_or_list"
},
"regex": {
"type": "object",
"description": "Perform regular expression search using ``re.search`` python module on stdout/stderr stream for reporting if test ``PASS``. ",
"properties": {
"stream": {
"type": "string",
"enum": [
"stdout",
"stderr"
],
"description": "The stream field can be stdout or stderr. buildtest will read the output or error stream after completion of test and check if regex matches in stream"
},
"exp": {
"type": "string",
"description": "Specify a regular expression to run with input stream specified by ``stream`` field. buildtest uses re.search when performing regex"
}
},
"required": [
"stream",
"exp"
]
}
}
}
}
}
Schema - global.schema.json¶
$ buildtest schema -n global.schema.json --json
{
"$id": "global.schema.json",
"$schema": "http://json-schema.org/draft-07/schema#",
"title": "global schema",
"description": "buildtest global schema is validated for all buildspecs. The global schema defines top-level structure of buildspec and defintions that are inherited for sub-schemas",
"type": "object",
"required": [
"version",
"buildspecs"
],
"additionalProperties": false,
"properties": {
"version": {
"type": "string",
"description": "The semver version of the schema to use (x.x)."
},
"maintainers": {
"type": "array",
"description": "One or more maintainers or aliases",
"minItems": 1,
"items": {
"type": "string"
}
},
"buildspecs": {
"type": "object",
"description": "This section is used to define one or more tests (buildspecs). Each test must be unique name",
"propertyNames": {
"pattern": "^[A-Za-z_][A-Za-z0-9_]*$",
"maxLength": 32
}
}
}
}
Schema Examples - global.schema.json¶
$ buildtest schema -n global.schema.json --example
File: /Users/siddiq90/Documents/buildtest/buildtest/schemas/examples/global.schema.json/valid/examples.yml
________________________________________________________________________________
version: "1.0"
buildspecs:
# testing all caps
ABCDEFGHIJKLMNOPQRSTUVWXYZ:
type: script
run: "hostname"
# testing all lowercase letters
abcdefghijklmnopqrstuvwxyz:
type: script
run: "hostname"
# testing '_' in beginning followed by all numbers
_0123456789:
type: script
run: "hostname"
# testing '_' in combination with caps, lowercase and numbers
_ABCDEFabcdef0123456789:
type: script
run: "hostname"
# testing '_' at end of word
abcdefghijklmnopqrstuvwxyz_:
type: script
run: "hostname"
File: /Users/siddiq90/Documents/buildtest/buildtest/schemas/examples/global.schema.json/invalid/maintainers_type_mismatch.yml
________________________________________________________________________________
version: "1.0"
# wrong type for maintainers key, expects a string
maintainers: 1
buildspecs:
hostname:
type: script
run: "hostname"
File: /Users/siddiq90/Documents/buildtest/buildtest/schemas/examples/global.schema.json/invalid/invalid_pattern.yml
________________________________________________________________________________
version: "1.0"
buildspecs:
# invalid pattern for test. Must be matching regex "^[A-Za-z_.][A-Za-z0-9_]*$" when declaring a dict
(badname:
type: script
run: "ping login 1"
File: /Users/siddiq90/Documents/buildtest/buildtest/schemas/examples/global.schema.json/invalid/missing-version.yml
________________________________________________________________________________
buildspecs:
# Shell would be accepted to indicate a single line shell command (or similar)
login_node_check:
type: script
run: "ping login 1"
Schema - script-v1.0.schema.json¶
$ buildtest schema -n script-v1.0.schema.json --json
{
"$id": "script-v1.0.schema.json",
"$schema": "http://json-schema.org/draft-07/schema#",
"title": "script schema version 1.0",
"description": "The script schema is of ``type: script`` in sub-schema which is used for running shell scripts",
"type": "object",
"required": [
"type",
"run",
"executor"
],
"additionalProperties": false,
"properties": {
"type": {
"type": "string",
"pattern": "^script$",
"description": "Select schema type to use when validating buildspec. This must be of set to 'script'"
},
"description": {
"$ref": "definitions.schema.json#/definitions/description"
},
"sbatch": {
"$ref": "definitions.schema.json#/definitions/sbatch"
},
"bsub": {
"$ref": "definitions.schema.json#/definitions/bsub"
},
"batch": {
"$ref": "definitions.schema.json#/definitions/batch"
},
"env": {
"$ref": "definitions.schema.json#/definitions/env"
},
"vars": {
"$ref": "definitions.schema.json#/definitions/env"
},
"executor": {
"$ref": "definitions.schema.json#/definitions/executor"
},
"run_only": {
"$ref": "definitions.schema.json#/definitions/run_only"
},
"shell": {
"type": "string",
"description": "Specify a shell launcher to use when running jobs. This sets the shebang line in your test script. The ``shell`` key can be used with ``run`` section to describe content of script and how its executed",
"pattern": "^(/bin/bash|/bin/sh|sh|bash|python).*"
},
"shebang": {
"type": "string",
"description": "Specify a custom shebang line. If not specified buildtest will automatically add it in the test script."
},
"run": {
"type": "string",
"description": "A script to run using the default shell."
},
"status": {
"$ref": "definitions.schema.json#/definitions/status"
},
"skip": {
"$ref": "definitions.schema.json#/definitions/skip"
},
"tags": {
"$ref": "definitions.schema.json#/definitions/tags"
}
}
}
Schema Examples - script-v1.0.schema.json¶
$ buildtest schema -n script-v1.0.schema.json --example
File: /Users/siddiq90/Documents/buildtest/buildtest/schemas/examples/script-v1.0.schema.json/valid/examples.yml
________________________________________________________________________________
version: "1.0"
buildspecs:
multiline_run:
executor: local.bash
type: script
description: multiline run command
run: |
echo "1"
echo "2"
single_command_run:
executor: local.bash
type: script
description: single command as a string for run command
run: "hostname"
declare_env:
executor: local.bash
type: script
description: declaring environment variables
env:
FOO: BAR
X: 1
run: |
echo $FOO
echo $X
declare_vars:
executor: local.bash
type: script
description: declaring variables
vars:
First: Bob
Last: Bill
run: |
echo "First:" $First
echo "Last:" $Last
declare_shell_sh:
executor: local.sh
type: script
description: declare shell name to sh
shell: sh
run: hostname
declare_shell_bash:
executor: local.bash
type: script
description: declare shell name to bash
shell: bash
run: hostname
declare_shell_python:
executor: local.python
type: script
description: declare shell name to python
shell: python
run: |
print("Hello World")
declare_shell_bin_bash:
executor: local.bash
type: script
description: declare shell name to /bin/bash
shell: "/bin/bash -e"
run: hostname
declare_shell_name_bin_sh:
executor: local.sh
type: script
description: declare shell name to /bin/sh
shell: "/bin/sh -e"
run: hostname
declare_shell_opts:
executor: local.sh
type: script
description: declare shell name to sh
shell: "sh -e"
run: hostname
declare_shebang:
executor: local.bash
type: script
description: declare shell name to sh
shebang: "#!/usr/bin/env bash"
run: hostname
status_returncode_list:
executor: local.bash
type: script
description: The returncode can be a list of integers
run: exit 0
status:
returncode: [0]
status_returncode_int:
executor: local.bash
type: script
description: The returncode can be an integer to match with single returncode
run: exit 0
status:
returncode: 0
status_regex:
executor: local.bash
type: script
description: This test pass with a regular expression status check
run: hostname
status:
regex:
stream: stdout
exp: "^$"
status_regex_returncode:
executor: local.bash
type: script
description: This test fails because returncode and regex specified
run: hostname
status:
returncode: [0]
regex:
stream: stdout
exp: "^hello"
sbatch_example:
type: script
executor: local.bash
description: This test pass sbatch options in test.
sbatch:
- "-t 10:00:00"
- "-p normal"
- "-N 1"
- "-n 8"
run: hostname
bsub_example:
type: script
executor: local.bash
description: This test pass bsub options in test.
bsub:
- "-W 00:30"
- "-N 1"
run: hostname
skip_example:
type: script
executor: local.bash
description: this test is skip
skip: true
run: hostname
tag_str_example:
type: script
executor: local.bash
description: tags can be defined as string
tags: network
run: hostname
tag_list_example:
type: script
executor: local.bash
description: This is a tag example using list
sbatch:
- "-t 10:00:00"
- "-p normal"
- "-N 1"
- "-n 8"
tags: ["slurm"]
run: hostname
run_only_example:
type: script
executor: local.bash
description: run_only example that runs with user1 on Linux system (rhel, centos) with LSF
run_only:
user: user1
scheduler: lsf
platform: Linux
linux_distro:
- rhel
- centos
run: |
uname -av
lsinfo
File: /Users/siddiq90/Documents/buildtest/buildtest/schemas/examples/script-v1.0.schema.json/invalid/examples.yml
________________________________________________________________________________
version: "1.0"
buildspecs:
invalid_test_name_&!@#$%:
type: script
executor: local.bash
description: "invalid test name"
invalid_bash:
type: script
executor: local.bash
shell: "bash-missing-run"
missing_run_key:
type: script
executor: local.bash
description: invalid key name roon, missing run key
roon: |
systemctl is-active slurmd
systemctl is-enabled slurmd | grep enabled
invalid_env_type:
type: script
executor: local.bash
description: env key should be a dictionary
env:
- FOO=BAR
run: echo $FOO
invalid_vars_type:
type: script
executor: local.bash
description: var key should be a dictionary
vars:
- FOO=BAR
run: echo $FOO
invalid_description:
type: script
executor: local.bash
description:
- "Multi Line description"
- "is not accepted"
invalid_regex_stream:
type: script
executor: local.bash
description: This test fails because of invalid regex stream
run: hostname
status:
regex:
stream: file
exp: "world$"
missing_regex_exp:
type: script
executor: local.bash
description: This test fails because of missing key 'exp' in regex
run: hostname
status:
regex:
stream: stdout
invalid_returncode_type:
type: script
executor: local.bash
description: This test fails because of invalid return code type
run: hostname
status:
returncode: ["1"]
empty_returncode_list:
type: script
executor: local.bash
description: An empty returncode list will cause an error
run: hostname
status:
returncode: []
non_int_returncodes:
type: script
executor: local.bash
description: The returncode must be an int and not a number
run: exit 1
status:
returncode: 1.01
non_int_returncodes_list:
type: script
executor: local.bash
description: The returncode must be a list of integers and no numbers
run: exit 1
status:
returncode: [1, 2.230]
invalid_shell_usr_bin_bash:
type: script
executor: local.bash
description: invalid shell name, since we only support 'sh', 'bash', 'python' '/bin/bash' /bin/sh
shell: /usr/bin/bash
run: hostname
invalid_shell_type:
type: script
executor: local.bash
description: invalid shell type must be a string
shell: ["/bin/bash"]
run: hostname
invalid_type_shell_shebang:
type: script
executor: local.bash
description: invalid type for shell shebang, must be a string
shebang: ["#!/bin/bash"]
run: hostname
invalid_skip_value:
type: script
executor: local.bash
description: invalid value for skip, must be boolean
skip: 1
run: hostname
empty_tags:
type: script
executor: local.bash
description: tag list can't be empty, requires one item.
tags: []
run: hostname
non_unique_tags:
type: script
executor: local.bash
description: tag names must be unique
tags: ["network", "network"]
run: hostname
invalid_tags_value:
type: script
executor: local.bash
description: invalid tag value must be all string items
tags: ["network", 400 ]
run: hostname
additionalProperties_test:
type: script
executor: local.bash
description: additional properties are not allowed so any invalid key/value pair will result in error
FOO: BAR
run: hostname
additionalProperties_status:
type: script
executor: slurm.debug
description: test additional properties in status object. This is not allowed
sbatch: [ "-n 2", "-q normal", "-t 10"]
run: hostname
status:
slurm_job_state: "COMPLETED"
FOO: BAR
invalid_slurm_job_state:
type: script
executor: slurm.debug
description: invalid value for slurm_job_state, should raise error with enum values.
sbatch:
- "-n 2"
- "-q normal"
- "-t 10"
run: hostname
status:
slurm_job_state: "FINISH"
duplicate_linux_distro:
type: script
executor: local.bash
description: Duplicate items in linux_distro is not allowed
run_only:
linux_distro:
- rhel
- rhel
run: uname -av
empty_list_linux_distro:
type: script
executor: local.bash
description: Empty List in linux_distro is not allowed. Requires atleast 1 item
run_only:
linux_distro: []
run: uname -av
additionalProperties_run_only:
type: script
executor: local.bash
description: additional Properties not allowed in run_only field. Invalid field python
run_only:
user: root
python: 3.5
run: hostname
Schema - compiler-v1.0.schema.json¶
$ buildtest schema -n compiler-v1.0.schema.json --json
{
"$id": "compiler-v1.0.schema.json",
"$schema": "http://json-schema.org/draft-07/schema#",
"title": "compiler schema version 1.0",
"description": "The compiler schema is of ``type: compiler`` in sub-schema which is used for compiling and running programs",
"type": "object",
"required": [
"type",
"build",
"executor"
],
"additionalProperties": false,
"properties": {
"type": {
"type": "string",
"pattern": "^compiler$",
"description": "Select schema type to use when validating buildspec. This must be of set to ``compiler``"
},
"description": {
"$ref": "definitions.schema.json#/definitions/description"
},
"module": {
"type": "array",
"items": {
"type": "string"
},
"description": "A list of modules to load into test script"
},
"executor": {
"$ref": "definitions.schema.json#/definitions/executor"
},
"sbatch": {
"$ref": "definitions.schema.json#/definitions/sbatch"
},
"bsub": {
"$ref": "definitions.schema.json#/definitions/bsub"
},
"batch": {
"$ref": "definitions.schema.json#/definitions/batch"
},
"env": {
"$ref": "definitions.schema.json#/definitions/env"
},
"vars": {
"$ref": "definitions.schema.json#/definitions/env"
},
"run_only": {
"$ref": "definitions.schema.json#/definitions/run_only"
},
"status": {
"$ref": "definitions.schema.json#/definitions/status"
},
"skip": {
"$ref": "definitions.schema.json#/definitions/skip"
},
"tags": {
"$ref": "definitions.schema.json#/definitions/tags"
},
"pre_build": {
"type": "string",
"description": "Run commands before building program"
},
"post_build": {
"type": "string",
"description": "Run commands after building program"
},
"build": {
"type": "object",
"description": "The ``build`` section is used for compiling a single program, this section specifies fields for setting C, C++, Fortran compiler and flags including CPP flags and linker flags",
"properties": {
"name": {
"type": "string",
"enum": [
"gnu",
"intel",
"pgi",
"cray"
],
"description": "Select the compiler class to use, buildtest will set cc, cxx, and fc compiler wrapper based on compiler name"
},
"cc": {
"type": "string",
"description": "Set C compiler. Use this field to override buildtest selection for **cc**"
},
"fc": {
"type": "string",
"description": "Set Fortran compiler. Use this field to override buildtest selection for **fc**"
},
"cxx": {
"type": "string",
"description": "Set C++ compiler. Use this field to override buildtest selection for **cxx**"
},
"source": {
"type": "string",
"description": "Specify a source file for compilation, the file can be relative path to buildspec or an absolute path"
},
"cflags": {
"type": "string",
"description": "Set C compiler flags (**cflags**)"
},
"cxxflags": {
"type": "string",
"description": "Set C++ compiler flags (**cxxflags**)"
},
"fflags": {
"type": "string",
"description": "Set Fortran compiler flags (**fflags**)"
},
"cppflags": {
"type": "string",
"description": "Set Pre Processor Flags (**cppflags**)"
},
"ldflags": {
"type": "string",
"description": "Set linker flags (**ldflags**)"
}
},
"required": [
"source",
"name"
],
"additionalProperties": false
},
"pre_run": {
"type": "string",
"description": "Run commands before running program"
},
"post_run": {
"type": "string",
"description": "Run commands after running program"
},
"run": {
"type": "object",
"description": "The ``run`` section is used for specifying launch configuration of executable",
"properties": {
"launcher": {
"type": "string",
"description": "The ``launcher`` field is inserted before the executable. This can be used when running programs with ``mpirun``, ``mpiexec``, ``srun``, etc... You may specify launcher options with this field"
},
"args": {
"type": "string",
"description": "The ``args`` field is used to specify arguments to executable."
}
},
"additionalProperties": false
}
}
}
Schema Examples - compiler-v1.0.schema.json¶
$ buildtest schema -n compiler-v1.0.schema.json --example
File: /Users/siddiq90/Documents/buildtest/buildtest/schemas/examples/compiler-v1.0.schema.json/valid/examples.yml
________________________________________________________________________________
version: "1.0"
buildspecs:
gnu_example:
executor: local.bash
type: compiler
description: "gnu example with modules, and cflags example"
module:
- "module purge && module load gcc/4.0"
- "module purge && module load gcc/6.0"
build:
name: gnu
source: src/hello.c
cflags: "-O1"
intel_example:
executor: local.bash
type: compiler
description: "intel example using cflags"
module:
- "module purge && module load intel/17"
- "module purge && module load intel/18"
build:
name: intel
source: src/hello.c
cflags: "-O1"
pgi_example:
executor: local.bash
type: compiler
description: "pgi example using cxxflags, ldflags key"
module:
- "module purge && module load pgi"
build:
source: src/hello.cpp
name: pgi
cxxflags: "-O1"
ldflags: "-lm"
cray_example:
executor: local.bash
type: compiler
description: "cray example using fflags and cppflags"
sbatch: ["-C knl", "-q normal", "-t 01:00"]
build:
name: cray
source: src/hello.f90
fflags: "-O1"
cppflags: "-DFOO"
cc_example:
type: compiler
description: Example by using cc to set C compiler
executor: local.bash
build:
source: "src/hello.c"
name: gnu
cc: gcc
fc_example:
type: compiler
description: Example by using fc to set Fortran compiler
executor: local.bash
build:
source: "src/hello.f90"
name: gnu
fc: gfortran
cxx_example:
type: compiler
description: Example by using cxx to set C++ compiler
executor: local.bash
build:
source: "src/hello.cpp"
name: gnu
cxx: g++
sbatch_example:
type: compiler
description: sbatch example to configure #SBATCH options
executor: local.bash
sbatch:
- "-t 10"
- "-n 2"
build:
source: "src/hello.cpp"
name: gnu
cxx: g++
status:
slurm_job_state: "COMPLETED"
bsub_example:
type: compiler
description: bsub example to configure #BSUB options
executor: local.bash
bsub:
- "-W 00:30"
- "-N 2"
build:
source: "src/hello.cpp"
name: gnu
cxx: g++
batch_example:
type: compiler
description: example using batch field
executor: local.bash
batch:
"timelimit": "30"
"nodecount": "2"
"queue": "batch"
"account": "biology"
build:
source: "src/hello.cpp"
name: gnu
cxx: g++
batch_bsub_example:
type: compiler
description: example using batch with bsub key
executor: local.bash
batch:
"timelimit": "30"
"nodecount": "2"
"queue": "batch"
"account": "biology"
bsub: ["-n 4"]
build:
source: "src/hello.cpp"
name: gnu
cxx: g++
batch_sbatch_example:
type: compiler
description: example using batch with sbatch key
executor: local.bash
batch:
"timelimit": "30"
"nodecount": "2"
"queue": "batch"
"account": "biology"
sbatch: ["--ntasks=4"]
build:
source: "src/hello.cpp"
name: gnu
cxx: g++
args_example:
type: compiler
description: Launcher example
executor: local.bash
build:
source: "src/hello.cpp"
name: gnu
run:
args: "1 2 4"
mpi_launcher_example:
type: compiler
description: Launcher example
executor: local.bash
build:
source: "src/hello.cpp"
name: gnu
cxx: mpicxx
cxxflags: "-O3"
run:
launcher: mpirun -np 2
pre_post_build_run_sections:
type: compiler
description: Run commands pre and post build and run section
executor: local.bash
pre_build: echo "pre-build section"
build:
source: "src/hello.cpp"
name: gnu
cxx: mpicxx
cxxflags: "-O3"
post_build: echo "post-build section"
pre_run: echo "pre-run section"
run:
launcher: mpirun -np 2
post_run: echo "post-run section"
File: /Users/siddiq90/Documents/buildtest/buildtest/schemas/examples/compiler-v1.0.schema.json/invalid/examples.yml
________________________________________________________________________________
version: "1.0"
buildspecs:
missing_type:
executor: local.bash
description: "type key is missing, this is a required field"
module:
- "module purge && module load intel/17"
- "module purge && module load intel/18"
build:
source: src/hello.c
name: intel
cflags: "-O1"
missing_build:
executor: local.bash
type: compiler
description: "build key is missing, this is a required field"
module:
- "module purge && module load intel/17"
- "module purge && module load intel/18"
invalid_type_value:
executor: local.bash
type: script
description: "invalid value for type field must be 'compiler' "
module:
- "module purge && module load gcc/4.0"
- "module purge && module load gcc/6.0"
build:
source: src/hello.c
name: gnu
cflags: "-O1"
invalid_description_value:
executor: local.bash
type: compiler
description: 1
module:
- "module purge && module load gcc/4.0"
- "module purge && module load gcc/6.0"
build:
source: src/hello.c
name: gnu
cflags: "-O1"
invalid_type_module:
executor: local.bash
type: compiler
description: "type for 'module' key, expecting type 'array' but received 'string' "
module: "module purge && module load gcc/4.0"
build:
source: src/hello.c
name: gnu
cflags: "-O1"
module_mismatch_array_items:
executor: local.bash
type: compiler
description: "The module is an array of string items, this test as a mix of numbers and string"
module:
- 1
- "module purge && module load intel"
build:
source: src/hello.c
name: intel
cflags: "-O1"
missing_source_in_compiler:
executor: local.bash
type: compiler
description: "missing source key in compiler object"
module:
- "module purge && module load gcc/4.0"
build:
name: gnu
cflags: "-O1"
missing_name_in_build:
executor: local.bash
type: compiler
description: "missing name key in build object"
module:
- "module purge && module load gcc/4.0"
build:
source: src/hello.c
name_type_mismatch:
executor: local.bash
type: compiler
description: "compiler 'name' expects a string but received a list"
module:
- "module purge && module load gcc/4.0"
build:
source: src/hello.c
name: ["gnu", "intel"]
cflags: "-O1"
ldflags: "-lm"
additionalProperties_build:
executor: local.bash
type: compiler
description: "test additionalProperties in build object. Schema does not allow for additional keys"
module:
- "module purge && module load gcc/4.0"
build:
source: src/hello.c
foo: bar
name: gnu
cflags: "-O1"
ldflags: "-lm"
additionalProperties_main:
executor: local.bash
type: compiler
description: "test additionalProperties in main schema"
foo: bar
module:
- "module purge && module load gcc/4.0"
build:
source: src/hello.c
name: gnu
cflags: "-O1"
ldflags: "-lm"
additionalProperties_batch:
executor: local.bash
type: compiler
description: "test additionalProperties in batch field"
module:
- "module purge && module load gcc/4.0"
batch:
"nodecount": "2"
"EXPORT": "ALL"
build:
source: src/hello.c
name: gnu
cflags: "-O1"
ldflags: "-lm"
type_mismatch_args:
executor: local.bash
type: compiler
description: "type mismatch on args key"
module:
- "module purge && module load gcc/4.0"
build:
source: src/hello.c
name: gnu
cflags: "-O1"
ldflags: "-lm"
run:
args: 1