{"$schema":"http://json-schema.org/draft-07/schema#","$id":"https://gitlab.com/.gitlab-ci.yml","title":"Gitlab CI configuration","type":"object","properties":{"$schema":{"type":"string","format":"uri"},"image":{"$ref":"#/definitions/image"},"services":{"$ref":"#/definitions/services"},"before_script":{"$ref":"#/definitions/before_script"},"after_script":{"$ref":"#/definitions/after_script"},"variables":{"$ref":"#/definitions/variables"},"cache":{"$ref":"#/definitions/cache"},"default":{"type":"object","properties":{"after_script":{"$ref":"#/definitions/after_script"},"artifacts":{"$ref":"#/definitions/artifacts"},"before_script":{"$ref":"#/definitions/before_script"},"cache":{"$ref":"#/definitions/cache"},"image":{"$ref":"#/definitions/image"},"interruptible":{"$ref":"#/definitions/interruptible"},"retry":{"$ref":"#/definitions/retry"},"secrets":{"$ref":"#/definitions/secrets"},"services":{"$ref":"#/definitions/services"},"tags":{"$ref":"#/definitions/tags"},"timeout":{"$ref":"#/definitions/timeout"}}},"stages":{"type":"array","default":["build","test","deploy"],"items":{"type":"string"},"uniqueItems":true,"minItems":1},"include":{"oneOf":[{"$ref":"#/definitions/include_item"},{"type":"array","items":{"$ref":"#/definitions/include_item"}}]},"pages":{"$ref":"#/definitions/job"},"workflow":{"type":"object","properties":{"rules":{"type":"array","items":{"type":"object","properties":{"if":{"type":"string"},"when":{"type":"string","enum":["always","never"]}},"additionalProperties":false}}}}},"patternProperties":{"^[.]":{"anyOf":[{"$ref":"#/definitions/job_template"},{}]}},"additionalProperties":{"$ref":"#/definitions/job"},"definitions":{"artifacts":{"type":"object","additionalProperties":false,"properties":{"paths":{"type":"array","items":{"type":"string"},"minLength":1},"exclude":{"type":"array","items":{"type":"string"},"minLength":1},"expose_as":{"type":"string"},"name":{"type":"string"},"untracked":{"type":"boolean","default":false},"when":{"default":"on_success","oneOf":[{"enum":["on_success"]},{"enum":["on_failure"]},{"enum":["always"]}]},"expire_in":{"type":"string","default":"30 days"},"reports":{"type":"object","additionalProperties":false,"properties":{"junit":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"},"minLength":1}]},"cobertura":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"},"minLength":1}]},"codequality":{"$ref":"#/definitions/string_file_list"},"dotenv":{"$ref":"#/definitions/string_file_list"},"lsif":{"$ref":"#/definitions/string_file_list"},"sast":{"$ref":"#/definitions/string_file_list"},"dependency_scanning":{"$ref":"#/definitions/string_file_list"},"container_scanning":{"$ref":"#/definitions/string_file_list"},"dast":{"$ref":"#/definitions/string_file_list"},"license_management":{"$ref":"#/definitions/string_file_list"},"license_scanning":{"$ref":"#/definitions/string_file_list"},"performance":{"$ref":"#/definitions/string_file_list"},"requirements":{"$ref":"#/definitions/string_file_list"},"secret_detection":{"$ref":"#/definitions/string_file_list"},"metrics":{"$ref":"#/definitions/string_file_list"},"terraform":{"$ref":"#/definitions/string_file_list"}}}}},"string_file_list":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"include_item":{"oneOf":[{"type":"string","format":"uri-reference","pattern":"^(https?://|/).+\\.ya?ml$"},{"type":"object","additionalProperties":false,"properties":{"local":{"type":"string","format":"uri-reference","pattern":"\\.ya?ml$"}},"required":["local"]},{"type":"object","additionalProperties":false,"properties":{"project":{"type":"string","pattern":"\\S/\\S"},"ref":{"type":"string"},"file":{"oneOf":[{"type":"string","pattern":"\\.ya?ml$"},{"type":"array","items":{"type":"string","pattern":"\\.ya?ml$"}}]}},"required":["project","file"]},{"type":"object","additionalProperties":false,"properties":{"template":{"type":"string","format":"uri-reference","pattern":"\\.ya?ml$"}},"required":["template"]},{"type":"object","additionalProperties":false,"properties":{"remote":{"type":"string","format":"uri-reference","pattern":"^https?://.+\\.ya?ml$"}},"required":["remote"]}]},"image":{"oneOf":[{"type":"string","minLength":1},{"type":"object","additionalProperties":false,"properties":{"name":{"type":"string","minLength":1},"entrypoint":{"type":"array","minItems":1}},"required":["name"]}]},"services":{"type":"array","items":{"oneOf":[{"type":"string","minLength":1},{"type":"object","additionalProperties":false,"properties":{"name":{"type":"string","minLength":1},"entrypoint":{"type":"array","minItems":1,"items":{"type":"string"}},"command":{"type":"array","minItems":1,"items":{"type":"string"}},"alias":{"type":"string","minLength":1}},"required":["name"]}]}},"secrets":{"type":"object","items":{}},"before_script":{"type":"array","items":{"anyOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]}},"after_script":{"type":"array","items":{"anyOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]}},"rules":{"type":"array","items":{"type":"object","additionalProperties":false,"properties":{"if":{"type":"string"},"changes":{"type":"array","items":{"type":"string"}},"exists":{"type":"array","items":{"type":"string"}},"variables":{"$ref":"#/definitions/variables"},"when":{"$ref":"#/definitions/when"},"start_in":{"$ref":"#/definitions/start_in"},"allow_failure":{"type":"boolean","default":false}}}},"variables":{"type":"object","additionalProperties":{"type":["string","integer"]}},"timeout":{"type":"string","minLength":1},"start_in":{"type":"string","minLength":1},"when":{"default":"on_success","oneOf":[{"enum":["on_success"]},{"enum":["on_failure"]},{"enum":["always"]},{"enum":["manual"]},{"enum":["delayed"]},{"enum":["never"]}]},"cache":{"type":"object","additionalProperties":false,"properties":{"paths":{"type":"array","items":{"type":"string"}},"key":{"oneOf":[{"type":"string"},{"type":"object","properties":{"files":{"type":"array","items":{"type":"string"},"minItems":1,"maxItems":2}}}]},"untracked":{"type":"boolean","default":false},"policy":{"type":"string","default":"pull-push","oneOf":[{"enum":["pull"]},{"enum":["push"]},{"enum":["pull-push"]}]}}},"filter_refs":{"type":"array","items":{"anyOf":[{"oneOf":[{"enum":["branches"]},{"enum":["tags"]},{"enum":["api"]},{"enum":["external"]},{"enum":["pipelines"]},{"enum":["pushes"]},{"enum":["schedules"]},{"enum":["triggers"]},{"enum":["web"]}]},{"type":"string"}]}},"filter":{"oneOf":[{"$ref":"#/definitions/filter_refs"},{"type":"object","additionalProperties":false,"properties":{"refs":{"$ref":"#/definitions/filter_refs"},"kubernetes":{"enum":["active"]},"variables":{"type":"array","items":{"type":"string"}},"changes":{"type":"array","items":{"type":"string"}}}}]},"retry":{"oneOf":[{"$ref":"#/definitions/retry_max"},{"type":"object","additionalProperties":false,"properties":{"max":{"$ref":"#/definitions/retry_max"},"when":{"oneOf":[{"$ref":"#/definitions/retry_errors"},{"type":"array","items":{"$ref":"#/definitions/retry_errors"}}]}}}]},"retry_max":{"type":"integer","default":0,"minimum":0,"maximum":2},"retry_errors":{"oneOf":[{"enum":["always"]},{"enum":["unknown_failure"]},{"enum":["script_failure"]},{"enum":["api_failure"]},{"enum":["stuck_or_timeout_failure"]},{"enum":["runner_system_failure"]},{"enum":["missing_dependency_failure"]},{"enum":["runner_unsupported"]}]},"interruptible":{"type":"boolean","default":false},"job":{"allOf":[{"$ref":"#/definitions/job_template"},{"anyOf":[{"required":["script"]},{"required":["extends"]},{"required":["trigger"]}]}]},"job_template":{"type":"object","additionalProperties":false,"properties":{"image":{"$ref":"#/definitions/image"},"services":{"$ref":"#/definitions/services"},"before_script":{"$ref":"#/definitions/before_script"},"after_script":{"$ref":"#/definitions/after_script"},"rules":{"$ref":"#/definitions/rules"},"variables":{"$ref":"#/definitions/variables"},"cache":{"$ref":"#/definitions/cache"},"secrets":{"type":"object","additionalProperties":{"type":"object","properties":{"vault":{"type":"string"}}}},"script":{"oneOf":[{"type":"string","minLength":1},{"type":"array","items":{"anyOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"minItems":1}]},"stage":{"type":"string","default":"test"},"only":{"$ref":"#/definitions/filter"},"extends":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"},"minItems":1}]},"needs":{"type":"array","items":{"oneOf":[{"type":"string"},{"type":"object","additionalProperties":false,"properties":{"job":{"type":"string"},"artifacts":{"type":"boolean"}},"required":["job"]}]}},"except":{"$ref":"#/definitions/filter"},"tags":{"$ref":"#/definitions/tags"},"allow_failure":{"type":"boolean","default":false},"timeout":{"$ref":"#/definitions/timeout"},"when":{"$ref":"#/definitions/when"},"start_in":{"$ref":"#/definitions/start_in"},"dependencies":{"type":"array","items":{"type":"string"}},"artifacts":{"$ref":"#/definitions/artifacts"},"environment":{"type":"object","additionalProperties":false,"properties":{"name":{"type":"string","minLength":1},"url":{"type":"string","format":"uri","pattern":"^(https?://.+|\\$[A-Za-z]+)"},"on_stop":{"type":"string"},"action":{"enum":["start","prepare","stop"]},"auto_stop_in":{"type":"string"},"kubernetes":{"type":"object","properties":{"namespace":{"type":"string","minLength":1}}}},"required":["name"]},"release":{"type":"object","additionalProperties":false,"properties":{"tag_name":{"type":"string","minLength":1},"description":{"type":"string","minLength":1},"name":{"type":"string"},"ref":{"type":"string"},"milestones":{"type":"array","items":{"type":"string"}},"released_at":{"type":"string","format":"date-time","pattern":"^(?:[1-9]\\d{3}-(?:(?:0[1-9]|1[0-2])-(?:0[1-9]|1\\d|2[0-8])|(?:0[13-9]|1[0-2])-(?:29|30)|(?:0[13578]|1[02])-31)|(?:[1-9]\\d(?:0[48]|[2468][048]|[13579][26])|(?:[2468][048]|[13579][26])00)-02-29)T(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:Z|[+-][01]\\d:[0-5]\\d)$"}},"required":["tag_name","description"]},"coverage":{"type":"string","format":"regex","pattern":"^/.+/$"},"retry":{"$ref":"#/definitions/retry"},"parallel":{"oneOf":[{"type":"integer","default":0,"minimum":2,"maximum":50},{"type":"object","properties":{"matrix":{"type":"array","items":{"type":"object","additionalProperties":{"type":["string","number","array"]}},"maxItems":50}},"additionalProperties":false,"required":["matrix"]}]},"interruptible":{"$ref":"#/definitions/interruptible"},"resource_group":{"type":"string"},"trigger":{"oneOf":[{"type":"object","additionalProperties":false,"properties":{"project":{"type":"string","pattern":"\\S/\\S"},"branch":{"type":"string"},"strategy":{"type":"string","enum":["depend"]}},"required":["project"],"dependencies":{"branch":["project"]}},{"type":"object","additionalProperties":false,"properties":{"include":{"oneOf":[{"type":"string","format":"uri-reference","pattern":"\\.ya?ml$"},{"type":"array","maxItems":3,"items":{"oneOf":[{"type":"object","additionalProperties":false,"properties":{"local":{"type":"string","format":"uri-reference","pattern":"\\.ya?ml$"}}},{"type":"object","additionalProperties":false,"properties":{"template":{"type":"string","format":"uri-reference","pattern":"\\.ya?ml$"}}},{"type":"object","additionalProperties":false,"properties":{"artifact":{"type":"string","format":"uri-reference","pattern":"\\.ya?ml$"},"job":{"type":"string"}},"required":["artifact","job"]}]}}]},"strategy":{"type":"string","enum":["depend"]}}},{"type":"string","pattern":"\\S/\\S"}]}},"oneOf":[{"properties":{"when":{"enum":["delayed"]}},"required":["when","start_in"]},{"properties":{"when":{"not":{"enum":["delayed"]}}}}]},"tags":{"type":"array","items":{"type":"string"}}}}