Created
January 3, 2023 09:08
-
-
Save Thomas-Smyth/c5f70c51a50c7ab3f76769ef1213b276 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"type": "object", | |
"properties": { | |
"apiVersion": { | |
"type": "string", | |
"const": "v1" | |
}, | |
"arguments": { | |
"type": "object", | |
"description": "A set of arguments that can be referenced in a template using '${args.argumentName}'.", | |
"properties": {}, | |
"additionalProperties": true | |
}, | |
"spec": { | |
"$ref": "#/$defs/V1TemplateNodeSchema" | |
} | |
}, | |
"required": [ | |
"apiVersion", | |
"spec" | |
], | |
"additionalProperties": false, | |
"$defs": { | |
"V1TemplateWorkflowSchema": { | |
"type": "object", | |
"description": "The specification for the workflow node.", | |
"properties": { | |
"type": { | |
"type": "string", | |
"examples": [ | |
"sequential" | |
], | |
"description": "The type of workflow. If set to `sequential`, nodes in the workflow will run in order. If set to `parallel`, nodes will run simultaneously.", | |
"enum": [ | |
"sequential", | |
"parallel" | |
] | |
}, | |
"steps": { | |
"type": "array", | |
"description": "An array of nodes belonging to the workflow.", | |
"items": { | |
"$ref": "#/$defs/V1TemplateNodeSchema" | |
} | |
} | |
}, | |
"required": [ | |
"type", | |
"steps" | |
], | |
"additionalProperties": false | |
}, | |
"V1TemplateNodeSchema": { | |
"description": "A node representing an action to be performed as part of the template.", | |
"oneOf": [ | |
{ | |
"type": "object", | |
"description": "Workflow node", | |
"properties": { | |
"ref": { | |
"type": "string", | |
"description": "An identifier that can used to reference the output of this node later in the template." | |
}, | |
"kind": { | |
"type": "string", | |
"examples": [ | |
"Workflow" | |
], | |
"description": "The kind of node.", | |
"const": "Workflow" | |
}, | |
"spec": { | |
"description": "The specification for the Workflow node.", | |
"$ref": "#/$defs/V1TemplateWorkflowSchema" | |
} | |
}, | |
"required": [ | |
"kind", | |
"spec" | |
], | |
"additionalProperties": false | |
}, | |
{ | |
"type": "object", | |
"description": "BuildService node", | |
"properties": { | |
"ref": { | |
"type": "string", | |
"description": "An identifier that can used to reference the output of this node later in the template." | |
}, | |
"kind": { | |
"type": "string", | |
"examples": [ | |
"BuildService" | |
], | |
"description": "The kind of node.", | |
"const": "BuildService" | |
}, | |
"spec": { | |
"type": "object", | |
"description": "The specification for the BuildService node.", | |
"properties": { | |
"name": { | |
"description": "The name of the service.", | |
"oneOf": [ | |
{ | |
"type": "string", | |
"examples": [ | |
"Example Service" | |
], | |
"description": "The name of the service.", | |
"minLength": 3, | |
"maxLength": 39, | |
"pattern": "^[a-zA-Z]((-|\\s)?[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*)?$" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{args\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*)}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{resources\\.((services|jobs|addons|secretGroups|pipelines)\\.([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{refs\\.(([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
} | |
] | |
}, | |
"description": { | |
"description": "A description of the service.", | |
"oneOf": [ | |
{ | |
"type": "string", | |
"examples": [ | |
"A service description" | |
], | |
"description": "A description of the service.", | |
"default": "", | |
"maxLength": 200, | |
"pattern": "^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{args\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*)}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{resources\\.((services|jobs|addons|secretGroups|pipelines)\\.([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{refs\\.(([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
} | |
] | |
}, | |
"tags": { | |
"type": "array", | |
"description": "An array of previously defined tags to help identify and group the resource.", | |
"items": { | |
"type": "string", | |
"examples": [ | |
"my-tag" | |
], | |
"minLength": 3, | |
"maxLength": 39, | |
"pattern": "^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$" | |
} | |
}, | |
"billing": { | |
"type": "object", | |
"properties": { | |
"deploymentPlan": { | |
"description": "The ID of the deployment plan to use.", | |
"oneOf": [ | |
{ | |
"type": "string", | |
"examples": [ | |
"nf-compute-20" | |
], | |
"description": "The ID of the deployment plan to use.", | |
"pattern": "^[A-Za-z0-9-]+$" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{args\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*)}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{resources\\.((services|jobs|addons|secretGroups|pipelines)\\.([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{refs\\.(([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
} | |
] | |
} | |
}, | |
"required": [ | |
"deploymentPlan" | |
], | |
"additionalProperties": false | |
}, | |
"vcsData": { | |
"type": "object", | |
"properties": { | |
"projectUrl": { | |
"description": "URL of the Git repo to build.", | |
"oneOf": [ | |
{ | |
"type": "string", | |
"examples": [ | |
"https://github.com/northflank/gatsby-with-northflank" | |
], | |
"description": "URL of the Git repo to build.", | |
"pattern": "^(https:\\/\\/)?((www(\\.[a-zA-Z0-9\\-]{2,})+\\.)?[a-zA-Z0-9\\-]{2,})(\\.([a-zA-Z0-9\\-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{args\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*)}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{resources\\.((services|jobs|addons|secretGroups|pipelines)\\.([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{refs\\.(([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
} | |
] | |
}, | |
"projectType": { | |
"description": "The VCS provider to use.", | |
"oneOf": [ | |
{ | |
"type": "string", | |
"examples": [ | |
"github" | |
], | |
"description": "The VCS provider to use.", | |
"enum": [ | |
"bitbucket", | |
"gitlab", | |
"github", | |
"self-hosted" | |
] | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{args\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*)}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{resources\\.((services|jobs|addons|secretGroups|pipelines)\\.([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{refs\\.(([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
} | |
] | |
}, | |
"selfHostedVcsId": { | |
"oneOf": [ | |
{ | |
"oneOf": [ | |
{ | |
"type": "string", | |
"pattern": "^[A-Za-z0-9-]+\\/[A-Za-z0-9-]+$" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{args\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*)}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{resources\\.((services|jobs|addons|secretGroups|pipelines)\\.([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{refs\\.(([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
} | |
] | |
} | |
] | |
}, | |
"accountLogin": { | |
"description": "By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.", | |
"oneOf": [ | |
{ | |
"type": "string", | |
"examples": [ | |
"github-user" | |
], | |
"description": "By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name." | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{args\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*)}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{resources\\.((services|jobs|addons|secretGroups|pipelines)\\.([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{refs\\.(([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
} | |
] | |
} | |
}, | |
"required": [ | |
"projectUrl", | |
"projectType" | |
], | |
"additionalProperties": false | |
}, | |
"buildSettings": { | |
"type": "object", | |
"properties": { | |
"dockerfile": { | |
"type": "object", | |
"properties": { | |
"buildEngine": { | |
"description": "Build engine to use. Defaults to recommended build engine `kaniko`", | |
"oneOf": [ | |
{ | |
"type": "string", | |
"examples": [ | |
"kaniko" | |
], | |
"description": "Build engine to use. Defaults to recommended build engine `kaniko`", | |
"default": "kaniko", | |
"enum": [ | |
"kaniko", | |
"buildkit" | |
] | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{args\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*)}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{resources\\.((services|jobs|addons|secretGroups|pipelines)\\.([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{refs\\.(([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
} | |
] | |
}, | |
"dockerFilePath": { | |
"description": "The file path of the Dockerfile.", | |
"oneOf": [ | |
{ | |
"type": "string", | |
"examples": [ | |
"/Dockerfile" | |
], | |
"description": "The file path of the Dockerfile.", | |
"pattern": "^\\/([a-zA-Z0-9-._]+\\/)*[a-zA-Z0-9-._]+$" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{args\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*)}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{resources\\.((services|jobs|addons|secretGroups|pipelines)\\.([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{refs\\.(([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
} | |
] | |
}, | |
"dockerWorkDir": { | |
"description": "The working directory of the Dockerfile.", | |
"oneOf": [ | |
{ | |
"type": "string", | |
"examples": [ | |
"/" | |
], | |
"description": "The working directory of the Dockerfile.", | |
"pattern": "^\\/([a-zA-Z0-9-._]+\\/)*[a-zA-Z0-9-._]*$" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{args\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*)}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{resources\\.((services|jobs|addons|secretGroups|pipelines)\\.([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{refs\\.(([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
} | |
] | |
}, | |
"useCache": { | |
"description": "Should intermediate image layers be cached?", | |
"oneOf": [ | |
{ | |
"type": "boolean", | |
"examples": [ | |
false | |
], | |
"description": "Should intermediate image layers be cached?", | |
"default": false | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{args\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*)}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{resources\\.((services|jobs|addons|secretGroups|pipelines)\\.([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{refs\\.(([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
} | |
] | |
} | |
}, | |
"required": [ | |
"dockerFilePath", | |
"dockerWorkDir" | |
], | |
"additionalProperties": false | |
}, | |
"buildpack": { | |
"type": "object", | |
"properties": { | |
"builder": { | |
"description": "Buildpack stack to use. Defaults to recommended stack `HEROKU_22_CLASSIC`.", | |
"oneOf": [ | |
{ | |
"type": "string", | |
"examples": [ | |
"HEROKU_22_CLASSIC" | |
], | |
"description": "Buildpack stack to use. Defaults to recommended stack `HEROKU_22_CLASSIC`.", | |
"default": "HEROKU_22_CLASSIC", | |
"enum": [ | |
"HEROKU_22", | |
"HEROKU_22_CLASSIC", | |
"HEROKU_20", | |
"HEROKU_18", | |
"GOOGLE_V1", | |
"CNB_ALPINE", | |
"CNB_BIONIC", | |
"PAKETO_TINY", | |
"PAKETO_BASE", | |
"PAKETO_FULL" | |
] | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{args\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*)}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{resources\\.((services|jobs|addons|secretGroups|pipelines)\\.([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{refs\\.(([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
} | |
] | |
}, | |
"buildpackLocators": { | |
"type": "array", | |
"description": "Array of custom Buildpacks to use.", | |
"default": [], | |
"items": { | |
"description": "Url or registry identifier of custom Buildpack.", | |
"oneOf": [ | |
{ | |
"type": "string", | |
"examples": [ | |
"https://buildpack-registry.heroku.com/cnb/mars/create-react-app" | |
], | |
"description": "Url or registry identifier of custom Buildpack." | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{args\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*)}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{resources\\.((services|jobs|addons|secretGroups|pipelines)\\.([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{refs\\.(([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
} | |
] | |
} | |
}, | |
"buildContext": { | |
"description": "The working directory to build in.", | |
"oneOf": [ | |
{ | |
"type": "string", | |
"examples": [ | |
"/" | |
], | |
"description": "The working directory to build in.", | |
"default": "/", | |
"pattern": "^\\/([a-zA-Z0-9-._]+\\/)*[a-zA-Z0-9-._]*$" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{args\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*)}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{resources\\.((services|jobs|addons|secretGroups|pipelines)\\.([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{refs\\.(([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
} | |
] | |
}, | |
"useCache": { | |
"description": "Should build dependencies be cached?", | |
"oneOf": [ | |
{ | |
"type": "boolean", | |
"examples": [ | |
false | |
], | |
"description": "Should build dependencies be cached?", | |
"default": false | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{args\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*)}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{resources\\.((services|jobs|addons|secretGroups|pipelines)\\.([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{refs\\.(([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
} | |
] | |
} | |
}, | |
"additionalProperties": false | |
} | |
}, | |
"additionalProperties": false | |
}, | |
"buildConfiguration": { | |
"type": "object", | |
"properties": { | |
"prRestrictions": { | |
"type": "array", | |
"description": "An array of pull request build rules. Only supported for build services. Each commit belonging to a pull request on a branch that matches one of the provided build rules will be built automatically.", | |
"items": { | |
"type": "string", | |
"examples": [ | |
"feature/*" | |
], | |
"description": "A pull request build rule. Can contain `*` as a wildcard to match multiple branch names. For example, `feature/*` will build all commits from pull requests from branches that start with `feature/`.", | |
"pattern": "^[^?:@$~ [\\]{}]*$" | |
} | |
}, | |
"branchRestrictions": { | |
"type": "array", | |
"description": "An array of branch build rules. Only supported for build services. Each commit belonging to a branch that matches one of the provided build rules will be built automatically.", | |
"items": { | |
"type": "string", | |
"examples": [ | |
"feature/*" | |
], | |
"description": "A branch build rule. Can contain `*` as a wildcard to match multiple branch names. For example, `feature/*` will build all commits from branches that start with `feature/`.", | |
"pattern": "^[^?:@$~ [\\]{}]*$" | |
} | |
}, | |
"pathIgnoreRules": { | |
"type": "array", | |
"description": "An array of path ignore rules. A commit will only be built if a file has been changed that does not match any of the ignore rules. Path ignore rules follow `.gitignore` syntax.", | |
"maxItems": 200, | |
"items": { | |
"type": "string", | |
"examples": [ | |
"README.md" | |
], | |
"description": "A path ignore rule, following `.gitignore` syntax. For example, `*.md` will ignore all files ending with `.md`.", | |
"maxLength": 260 | |
} | |
}, | |
"isAllowList": { | |
"type": "boolean", | |
"examples": [ | |
false | |
], | |
"description": "If `true`, the functionality of `pathIgnoreRules` will be inverted. A commit will only be built if a file has been changed that matches one or more of the rules in `pathIgnoreRules`." | |
}, | |
"ciIgnoreFlagsEnabled": { | |
"type": "boolean", | |
"description": "If `true`, enables commit ignore flags. If a commit message contains one or more of the flags in `ciIgnoreFlags`, that commit will not be built." | |
}, | |
"ciIgnoreFlags": { | |
"type": "array", | |
"examples": [ | |
[ | |
"[skip ci]", | |
"[ci skip]", | |
"[no ci]", | |
"[skip nf]", | |
"[nf skip]", | |
"[northflank skip]", | |
"[skip northflank]" | |
] | |
], | |
"description": "An array of commit ignore flags. If a commit message contains one or more of these flags, that commit will not be built. Defaults to `[\"[skip ci]\", \"[ci skip]\", \"[no ci]\", \"[skip nf]\", \"[nf skip]\", \"[northflank skip]\", \"[skip northflank]\"]`", | |
"maxItems": 200, | |
"items": { | |
"type": "string", | |
"examples": [ | |
"[skip ci]" | |
], | |
"description": "A commit ignore flag.", | |
"maxLength": 72 | |
} | |
}, | |
"dockerfileTarget": { | |
"type": "string", | |
"description": "If your Dockerfile contains multiple build stages, you can specify the target stage by entering its name here." | |
}, | |
"includeGitFolder": { | |
"type": "boolean", | |
"description": "Include .git folder inside the build context" | |
}, | |
"fullGitClone": { | |
"type": "boolean", | |
"description": "Include the entire git history as part of the .git folder. Only relevant if \"includeGitFolder\" is set." | |
} | |
}, | |
"additionalProperties": false | |
}, | |
"buildArguments": { | |
"type": "object", | |
"examples": [ | |
{ | |
"ARGUMENT_1": "abcdef", | |
"ARGUMENT_2": "12345" | |
} | |
], | |
"description": "An object containing the build arguments to set for the service", | |
"default": {}, | |
"properties": { | |
"/^[a-zA-Z0-9_./-]*$/": { | |
"type": "string", | |
"properties": {}, | |
"required": [], | |
"additionalProperties": false | |
} | |
}, | |
"additionalProperties": false, | |
"patternProperties": { | |
"^[a-zA-Z0-9_./-]*$": { | |
"type": "string", | |
"properties": {}, | |
"required": [], | |
"additionalProperties": false | |
} | |
} | |
}, | |
"buildFiles": { | |
"type": "object", | |
"examples": [ | |
{ | |
"/dir/fileName": { | |
"data": "VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=", | |
"encoding": "utf-8" | |
} | |
} | |
], | |
"description": "Secret files as JSON object, encrypted at rest. File path must be absolute", | |
"properties": { | |
"/^\\/([a-zA-Z0-9-._]+\\/)*[a-zA-Z0-9-._]+$/": { | |
"type": "object", | |
"properties": { | |
"data": { | |
"type": "string", | |
"description": "base64 encoded file data" | |
}, | |
"encoding": { | |
"type": "string", | |
"description": "Original encoding of the file" | |
} | |
}, | |
"required": [ | |
"data" | |
], | |
"additionalProperties": false | |
} | |
}, | |
"additionalProperties": false, | |
"patternProperties": { | |
"^\\/([a-zA-Z0-9-._]+\\/)*[a-zA-Z0-9-._]+$": { | |
"type": "object", | |
"properties": { | |
"data": { | |
"type": "string", | |
"description": "base64 encoded file data" | |
}, | |
"encoding": { | |
"type": "string", | |
"description": "Original encoding of the file" | |
} | |
}, | |
"required": [ | |
"data" | |
], | |
"additionalProperties": false | |
} | |
} | |
} | |
}, | |
"required": [ | |
"name", | |
"billing", | |
"vcsData", | |
"buildSettings" | |
], | |
"additionalProperties": false | |
} | |
}, | |
"required": [ | |
"kind", | |
"spec" | |
], | |
"additionalProperties": false | |
}, | |
{ | |
"type": "object", | |
"description": "CombinedService node", | |
"properties": { | |
"ref": { | |
"type": "string", | |
"description": "An identifier that can used to reference the output of this node later in the template." | |
}, | |
"kind": { | |
"type": "string", | |
"examples": [ | |
"CombinedService" | |
], | |
"description": "The kind of node.", | |
"const": "CombinedService" | |
}, | |
"spec": { | |
"type": "object", | |
"description": "The specification for the CombinedService node.", | |
"properties": { | |
"name": { | |
"description": "The name of the service.", | |
"oneOf": [ | |
{ | |
"type": "string", | |
"examples": [ | |
"Example Service" | |
], | |
"description": "The name of the service.", | |
"minLength": 3, | |
"maxLength": 39, | |
"pattern": "^[a-zA-Z]((-|\\s)?[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*)?$" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{args\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*)}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{resources\\.((services|jobs|addons|secretGroups|pipelines)\\.([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{refs\\.(([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
} | |
] | |
}, | |
"description": { | |
"description": "A description of the service.", | |
"oneOf": [ | |
{ | |
"type": "string", | |
"examples": [ | |
"A service description" | |
], | |
"description": "A description of the service.", | |
"default": "", | |
"maxLength": 200, | |
"pattern": "^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{args\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*)}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{resources\\.((services|jobs|addons|secretGroups|pipelines)\\.([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{refs\\.(([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
} | |
] | |
}, | |
"tags": { | |
"type": "array", | |
"description": "An array of previously defined tags to help identify and group the resource.", | |
"items": { | |
"type": "string", | |
"examples": [ | |
"my-tag" | |
], | |
"minLength": 3, | |
"maxLength": 39, | |
"pattern": "^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$" | |
} | |
}, | |
"billing": { | |
"type": "object", | |
"properties": { | |
"deploymentPlan": { | |
"description": "The ID of the deployment plan to use.", | |
"oneOf": [ | |
{ | |
"type": "string", | |
"examples": [ | |
"nf-compute-20" | |
], | |
"description": "The ID of the deployment plan to use.", | |
"pattern": "^[A-Za-z0-9-]+$" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{args\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*)}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{resources\\.((services|jobs|addons|secretGroups|pipelines)\\.([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{refs\\.(([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
} | |
] | |
} | |
}, | |
"required": [ | |
"deploymentPlan" | |
], | |
"additionalProperties": false | |
}, | |
"deployment": { | |
"type": "object", | |
"properties": { | |
"instances": { | |
"description": "The number of instances to run the service on.", | |
"oneOf": [ | |
{ | |
"type": "integer", | |
"examples": [ | |
1 | |
], | |
"description": "The number of instances to run the service on.", | |
"minimum": 0 | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{args\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*)}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{resources\\.((services|jobs|addons|secretGroups|pipelines)\\.([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{refs\\.(([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
} | |
] | |
}, | |
"buildpack": { | |
"type": "object", | |
"properties": { | |
"configType": { | |
"type": "string", | |
"examples": [ | |
"default" | |
], | |
"enum": [ | |
"default", | |
"customProcess", | |
"customCommand", | |
"customEntrypointCustomCommand", | |
"originalEntrypointCustomCommand" | |
] | |
}, | |
"customProcess": { | |
"type": [ | |
"string", | |
"null" | |
] | |
}, | |
"customEntrypoint": { | |
"type": [ | |
"string", | |
"null" | |
] | |
}, | |
"customCommand": { | |
"type": [ | |
"string", | |
"null" | |
] | |
} | |
}, | |
"required": [ | |
"configType" | |
], | |
"additionalProperties": false | |
}, | |
"docker": { | |
"type": "object", | |
"properties": { | |
"configType": { | |
"type": "string", | |
"enum": [ | |
"default", | |
"customEntrypoint", | |
"customCommand", | |
"customEntrypointCustomCommand" | |
] | |
}, | |
"customEntrypoint": { | |
"type": [ | |
"string", | |
"null" | |
] | |
}, | |
"customCommand": { | |
"type": [ | |
"string", | |
"null" | |
] | |
} | |
}, | |
"required": [ | |
"configType" | |
], | |
"additionalProperties": false | |
}, | |
"storage": { | |
"type": "object", | |
"properties": { | |
"ephemeralStorage": { | |
"type": "object", | |
"properties": { | |
"storageSize": { | |
"type": "integer", | |
"examples": [ | |
1024 | |
], | |
"description": "Ephemeral storage per container in MB", | |
"enum": [ | |
1024, | |
2048, | |
5120, | |
10240, | |
20480 | |
], | |
"minimum": 1024, | |
"maximum": 20480 | |
} | |
}, | |
"additionalProperties": false | |
} | |
}, | |
"additionalProperties": false | |
}, | |
"strategy": { | |
"type": "object", | |
"properties": { | |
"type": { | |
"type": "string", | |
"description": "Configures the instance roll out strategy of your service. Currently only available via feature flag.", | |
"enum": [ | |
"recreate", | |
"rollout-steady", | |
"rollout-balanced", | |
"rollout-fast" | |
] | |
} | |
}, | |
"additionalProperties": false | |
} | |
}, | |
"required": [ | |
"instances" | |
], | |
"additionalProperties": false | |
}, | |
"ports": { | |
"type": "array", | |
"default": [], | |
"items": { | |
"type": "object", | |
"properties": { | |
"name": { | |
"type": "string", | |
"examples": [ | |
"port-1" | |
], | |
"description": "The name used to identify the port.", | |
"pattern": "^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$", | |
"minLength": 3, | |
"maxLength": 8 | |
}, | |
"internalPort": { | |
"type": "integer", | |
"examples": [ | |
8080 | |
], | |
"description": "The port number.", | |
"minimum": 1, | |
"maximum": 65535 | |
}, | |
"public": { | |
"type": "boolean", | |
"examples": [ | |
true | |
], | |
"description": "If true, the port will be exposed publicly.", | |
"default": false | |
}, | |
"security": { | |
"type": "object", | |
"default": { | |
"credentials": [], | |
"policies": [] | |
}, | |
"properties": { | |
"credentials": { | |
"type": "array", | |
"description": "An array of credentials to access the service.", | |
"default": [], | |
"items": { | |
"type": "object", | |
"properties": { | |
"username": { | |
"type": "string", | |
"examples": [ | |
"admin" | |
], | |
"description": "The username to access the service", | |
"minLength": 3, | |
"maxLength": 39, | |
"pattern": "^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$" | |
}, | |
"password": { | |
"type": "string", | |
"examples": [ | |
"password123" | |
], | |
"description": "The password to access the service with this username." | |
}, | |
"type": { | |
"type": "string", | |
"examples": [ | |
"basic-auth" | |
], | |
"description": "The type of authentication used", | |
"const": "basic-auth" | |
} | |
}, | |
"required": [ | |
"username", | |
"password", | |
"type" | |
], | |
"additionalProperties": false | |
} | |
}, | |
"policies": { | |
"type": "array", | |
"description": "An array of IP address policies.", | |
"default": [], | |
"items": { | |
"type": "object", | |
"properties": { | |
"addresses": { | |
"type": "array", | |
"description": "An array of IP addresses used for this rule", | |
"items": { | |
"type": "string", | |
"examples": [ | |
"127.0.0.1" | |
], | |
"description": "An IP address used by this rule", | |
"format": "ipv4" | |
} | |
}, | |
"action": { | |
"type": "string", | |
"examples": [ | |
"DENY" | |
], | |
"description": "The action for this rule.", | |
"enum": [ | |
"ALLOW", | |
"DENY" | |
] | |
} | |
}, | |
"required": [ | |
"addresses", | |
"action" | |
], | |
"additionalProperties": false | |
} | |
} | |
}, | |
"additionalProperties": false | |
}, | |
"domains": { | |
"type": "array", | |
"description": "An array of domains to redirect to this port. Each domain must first be verified and registered to your account.", | |
"default": [], | |
"items": { | |
"type": "string", | |
"examples": [ | |
"app.example.com" | |
], | |
"description": "A domain to redirect to this port." | |
} | |
}, | |
"disableNfDomain": { | |
"type": "boolean", | |
"description": "Disable routing on the default code.run domain for public HTTP ports with custom domains.", | |
"default": false | |
}, | |
"protocol": { | |
"type": "string", | |
"examples": [ | |
"HTTP" | |
], | |
"description": "The protocol to use for the port." | |
} | |
}, | |
"required": [ | |
"name", | |
"internalPort", | |
"protocol" | |
], | |
"additionalProperties": false | |
} | |
}, | |
"vcsData": { | |
"type": "object", | |
"properties": { | |
"projectUrl": { | |
"description": "URL of the Git repo to build.", | |
"oneOf": [ | |
{ | |
"type": "string", | |
"examples": [ | |
"https://github.com/northflank/gatsby-with-northflank" | |
], | |
"description": "URL of the Git repo to build.", | |
"pattern": "^(https:\\/\\/)?((www(\\.[a-zA-Z0-9\\-]{2,})+\\.)?[a-zA-Z0-9\\-]{2,})(\\.([a-zA-Z0-9\\-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{args\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*)}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{resources\\.((services|jobs|addons|secretGroups|pipelines)\\.([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{refs\\.(([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
} | |
] | |
}, | |
"projectType": { | |
"description": "The VCS provider to use.", | |
"oneOf": [ | |
{ | |
"type": "string", | |
"examples": [ | |
"github" | |
], | |
"description": "The VCS provider to use.", | |
"enum": [ | |
"bitbucket", | |
"gitlab", | |
"github", | |
"self-hosted" | |
] | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{args\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*)}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{resources\\.((services|jobs|addons|secretGroups|pipelines)\\.([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{refs\\.(([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
} | |
] | |
}, | |
"selfHostedVcsId": { | |
"oneOf": [ | |
{ | |
"oneOf": [ | |
{ | |
"type": "string", | |
"pattern": "^[A-Za-z0-9-]+\\/[A-Za-z0-9-]+$" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{args\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*)}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{resources\\.((services|jobs|addons|secretGroups|pipelines)\\.([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{refs\\.(([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
} | |
] | |
} | |
] | |
}, | |
"accountLogin": { | |
"description": "By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.", | |
"oneOf": [ | |
{ | |
"type": "string", | |
"examples": [ | |
"github-user" | |
], | |
"description": "By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name." | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{args\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*)}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{resources\\.((services|jobs|addons|secretGroups|pipelines)\\.([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{refs\\.(([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
} | |
] | |
}, | |
"projectBranch": { | |
"description": "The name of the branch to use.", | |
"oneOf": [ | |
{ | |
"type": "string", | |
"examples": [ | |
"master" | |
], | |
"description": "The name of the branch to use." | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{args\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*)}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{resources\\.((services|jobs|addons|secretGroups|pipelines)\\.([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{refs\\.(([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
} | |
] | |
} | |
}, | |
"required": [ | |
"projectUrl", | |
"projectType", | |
"projectBranch" | |
], | |
"additionalProperties": false | |
}, | |
"buildSettings": { | |
"type": "object", | |
"properties": { | |
"dockerfile": { | |
"type": "object", | |
"properties": { | |
"buildEngine": { | |
"description": "Build engine to use. Defaults to recommended build engine `kaniko`", | |
"oneOf": [ | |
{ | |
"type": "string", | |
"examples": [ | |
"kaniko" | |
], | |
"description": "Build engine to use. Defaults to recommended build engine `kaniko`", | |
"default": "kaniko", | |
"enum": [ | |
"kaniko", | |
"buildkit" | |
] | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{args\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*)}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{resources\\.((services|jobs|addons|secretGroups|pipelines)\\.([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{refs\\.(([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
} | |
] | |
}, | |
"dockerFilePath": { | |
"description": "The file path of the Dockerfile.", | |
"oneOf": [ | |
{ | |
"type": "string", | |
"examples": [ | |
"/Dockerfile" | |
], | |
"description": "The file path of the Dockerfile.", | |
"pattern": "^\\/([a-zA-Z0-9-._]+\\/)*[a-zA-Z0-9-._]+$" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{args\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*)}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{resources\\.((services|jobs|addons|secretGroups|pipelines)\\.([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{refs\\.(([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
} | |
] | |
}, | |
"dockerWorkDir": { | |
"description": "The working directory of the Dockerfile.", | |
"oneOf": [ | |
{ | |
"type": "string", | |
"examples": [ | |
"/" | |
], | |
"description": "The working directory of the Dockerfile.", | |
"pattern": "^\\/([a-zA-Z0-9-._]+\\/)*[a-zA-Z0-9-._]*$" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{args\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*)}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{resources\\.((services|jobs|addons|secretGroups|pipelines)\\.([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{refs\\.(([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
} | |
] | |
}, | |
"useCache": { | |
"description": "Should intermediate image layers be cached?", | |
"oneOf": [ | |
{ | |
"type": "boolean", | |
"examples": [ | |
false | |
], | |
"description": "Should intermediate image layers be cached?", | |
"default": false | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{args\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*)}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{resources\\.((services|jobs|addons|secretGroups|pipelines)\\.([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{refs\\.(([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
} | |
] | |
} | |
}, | |
"required": [ | |
"dockerFilePath", | |
"dockerWorkDir" | |
], | |
"additionalProperties": false | |
}, | |
"buildpack": { | |
"type": "object", | |
"properties": { | |
"builder": { | |
"description": "Buildpack stack to use. Defaults to recommended stack `HEROKU_22_CLASSIC`.", | |
"oneOf": [ | |
{ | |
"type": "string", | |
"examples": [ | |
"HEROKU_22_CLASSIC" | |
], | |
"description": "Buildpack stack to use. Defaults to recommended stack `HEROKU_22_CLASSIC`.", | |
"default": "HEROKU_22_CLASSIC", | |
"enum": [ | |
"HEROKU_22", | |
"HEROKU_22_CLASSIC", | |
"HEROKU_20", | |
"HEROKU_18", | |
"GOOGLE_V1", | |
"CNB_ALPINE", | |
"CNB_BIONIC", | |
"PAKETO_TINY", | |
"PAKETO_BASE", | |
"PAKETO_FULL" | |
] | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{args\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*)}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{resources\\.((services|jobs|addons|secretGroups|pipelines)\\.([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{refs\\.(([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
} | |
] | |
}, | |
"buildpackLocators": { | |
"type": "array", | |
"description": "Array of custom Buildpacks to use.", | |
"default": [], | |
"items": { | |
"description": "Url or registry identifier of custom Buildpack.", | |
"oneOf": [ | |
{ | |
"type": "string", | |
"examples": [ | |
"https://buildpack-registry.heroku.com/cnb/mars/create-react-app" | |
], | |
"description": "Url or registry identifier of custom Buildpack." | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{args\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*)}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{resources\\.((services|jobs|addons|secretGroups|pipelines)\\.([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{refs\\.(([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
} | |
] | |
} | |
}, | |
"buildContext": { | |
"description": "The working directory to build in.", | |
"oneOf": [ | |
{ | |
"type": "string", | |
"examples": [ | |
"/" | |
], | |
"description": "The working directory to build in.", | |
"default": "/", | |
"pattern": "^\\/([a-zA-Z0-9-._]+\\/)*[a-zA-Z0-9-._]*$" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{args\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*)}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{resources\\.((services|jobs|addons|secretGroups|pipelines)\\.([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{refs\\.(([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
} | |
] | |
}, | |
"useCache": { | |
"description": "Should build dependencies be cached?", | |
"oneOf": [ | |
{ | |
"type": "boolean", | |
"examples": [ | |
false | |
], | |
"description": "Should build dependencies be cached?", | |
"default": false | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{args\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*)}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{resources\\.((services|jobs|addons|secretGroups|pipelines)\\.([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{refs\\.(([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
} | |
] | |
} | |
}, | |
"additionalProperties": false | |
} | |
}, | |
"additionalProperties": false | |
}, | |
"buildConfiguration": { | |
"type": "object", | |
"default": { | |
"pathIgnoreRules": [], | |
"isAllowList": false, | |
"ciIgnoreFlagsEnabled": false | |
}, | |
"properties": { | |
"pathIgnoreRules": { | |
"type": "array", | |
"description": "An array of path ignore rules. A commit will only be built if a file has been changed that does not match any of the ignore rules. Path ignore rules follow `.gitignore` syntax.", | |
"maxItems": 200, | |
"items": { | |
"type": "string", | |
"examples": [ | |
"README.md" | |
], | |
"description": "A path ignore rule, following `.gitignore` syntax. For example, `*.md` will ignore all files ending with `.md`.", | |
"maxLength": 260 | |
} | |
}, | |
"isAllowList": { | |
"type": "boolean", | |
"examples": [ | |
false | |
], | |
"description": "If `true`, the functionality of `pathIgnoreRules` will be inverted. A commit will only be built if a file has been changed that matches one or more of the rules in `pathIgnoreRules`." | |
}, | |
"ciIgnoreFlagsEnabled": { | |
"type": "boolean", | |
"description": "If `true`, enables commit ignore flags. If a commit message contains one or more of the flags in `ciIgnoreFlags`, that commit will not be built." | |
}, | |
"ciIgnoreFlags": { | |
"type": "array", | |
"examples": [ | |
[ | |
"[skip ci]", | |
"[ci skip]", | |
"[no ci]", | |
"[skip nf]", | |
"[nf skip]", | |
"[northflank skip]", | |
"[skip northflank]" | |
] | |
], | |
"description": "An array of commit ignore flags. If a commit message contains one or more of these flags, that commit will not be built. Defaults to `[\"[skip ci]\", \"[ci skip]\", \"[no ci]\", \"[skip nf]\", \"[nf skip]\", \"[northflank skip]\", \"[skip northflank]\"]`", | |
"maxItems": 200, | |
"items": { | |
"type": "string", | |
"examples": [ | |
"[skip ci]" | |
], | |
"description": "A commit ignore flag.", | |
"maxLength": 72 | |
} | |
}, | |
"dockerfileTarget": { | |
"type": "string", | |
"description": "If your Dockerfile contains multiple build stages, you can specify the target stage by entering its name here." | |
}, | |
"includeGitFolder": { | |
"type": "boolean", | |
"description": "Include .git folder inside the build context" | |
}, | |
"fullGitClone": { | |
"type": "boolean", | |
"description": "Include the entire git history as part of the .git folder. Only relevant if \"includeGitFolder\" is set." | |
} | |
}, | |
"additionalProperties": false | |
}, | |
"runtimeEnvironment": { | |
"type": "object", | |
"examples": [ | |
{ | |
"VARIABLE_1": "abcdef", | |
"VARIABLE_2": "12345" | |
} | |
], | |
"description": "An object containing the runtime environment to set for the service. Keys may only contain letters, numbers, hyphens, forward slashes and dots.", | |
"default": {}, | |
"properties": { | |
"/^[a-zA-Z0-9_./-]*$/": { | |
"type": "string", | |
"properties": {}, | |
"required": [], | |
"additionalProperties": false | |
} | |
}, | |
"additionalProperties": false, | |
"patternProperties": { | |
"^[a-zA-Z0-9_./-]*$": { | |
"type": "string", | |
"properties": {}, | |
"required": [], | |
"additionalProperties": false | |
} | |
} | |
}, | |
"runtimeFiles": { | |
"type": "object", | |
"examples": [ | |
{ | |
"/dir/fileName": { | |
"data": "VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=", | |
"encoding": "utf-8" | |
} | |
} | |
], | |
"description": "Secret files as JSON object, encrypted at rest. File path must be absolute", | |
"properties": { | |
"/^\\/([a-zA-Z0-9-._]+\\/)*[a-zA-Z0-9-._]+$/": { | |
"type": "object", | |
"properties": { | |
"data": { | |
"type": "string", | |
"description": "base64 encoded file data" | |
}, | |
"encoding": { | |
"type": "string", | |
"description": "Original encoding of the file" | |
} | |
}, | |
"required": [ | |
"data" | |
], | |
"additionalProperties": false | |
} | |
}, | |
"additionalProperties": false, | |
"patternProperties": { | |
"^\\/([a-zA-Z0-9-._]+\\/)*[a-zA-Z0-9-._]+$": { | |
"type": "object", | |
"properties": { | |
"data": { | |
"type": "string", | |
"description": "base64 encoded file data" | |
}, | |
"encoding": { | |
"type": "string", | |
"description": "Original encoding of the file" | |
} | |
}, | |
"required": [ | |
"data" | |
], | |
"additionalProperties": false | |
} | |
} | |
}, | |
"buildArguments": { | |
"type": "object", | |
"examples": [ | |
{ | |
"ARGUMENT_1": "abcdef", | |
"ARGUMENT_2": "12345" | |
} | |
], | |
"description": "An object containing the build arguments to set for the service. Keys may only contain letters, numbers, hyphens, forward slashes and dots.", | |
"default": {}, | |
"properties": { | |
"/^[a-zA-Z0-9_./-]*$/": { | |
"type": "string", | |
"properties": {}, | |
"required": [], | |
"additionalProperties": false | |
} | |
}, | |
"additionalProperties": false, | |
"patternProperties": { | |
"^[a-zA-Z0-9_./-]*$": { | |
"type": "string", | |
"properties": {}, | |
"required": [], | |
"additionalProperties": false | |
} | |
} | |
}, | |
"buildFiles": { | |
"type": "object", | |
"examples": [ | |
{ | |
"/dir/fileName": { | |
"data": "VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=", | |
"encoding": "utf-8" | |
} | |
} | |
], | |
"description": "Secret files as JSON object, encrypted at rest. File path must be absolute", | |
"properties": { | |
"/^\\/([a-zA-Z0-9-._]+\\/)*[a-zA-Z0-9-._]+$/": { | |
"type": "object", | |
"properties": { | |
"data": { | |
"type": "string", | |
"description": "base64 encoded file data" | |
}, | |
"encoding": { | |
"type": "string", | |
"description": "Original encoding of the file" | |
} | |
}, | |
"required": [ | |
"data" | |
], | |
"additionalProperties": false | |
} | |
}, | |
"additionalProperties": false, | |
"patternProperties": { | |
"^\\/([a-zA-Z0-9-._]+\\/)*[a-zA-Z0-9-._]+$": { | |
"type": "object", | |
"properties": { | |
"data": { | |
"type": "string", | |
"description": "base64 encoded file data" | |
}, | |
"encoding": { | |
"type": "string", | |
"description": "Original encoding of the file" | |
} | |
}, | |
"required": [ | |
"data" | |
], | |
"additionalProperties": false | |
} | |
} | |
}, | |
"healthChecks": { | |
"type": "array", | |
"description": "An array of health checks.", | |
"items": { | |
"type": "object", | |
"description": "A health check object.", | |
"properties": { | |
"protocol": { | |
"type": "string", | |
"examples": [ | |
"HTTP" | |
], | |
"description": "The protocol to access the health check with.", | |
"enum": [ | |
"HTTP", | |
"CMD", | |
"TCP" | |
] | |
}, | |
"type": { | |
"type": "string", | |
"examples": [ | |
"readinessProbe" | |
], | |
"description": "The type of health check.", | |
"enum": [ | |
"livenessProbe", | |
"readinessProbe", | |
"startupProbe" | |
] | |
}, | |
"path": { | |
"not": {} | |
}, | |
"cmd": { | |
"not": {} | |
}, | |
"port": { | |
"not": {} | |
}, | |
"initialDelaySeconds": { | |
"type": "integer", | |
"examples": [ | |
10 | |
], | |
"description": "Initial delay, in seconds, before the health check is first run.", | |
"minimum": 1, | |
"maximum": 180 | |
}, | |
"periodSeconds": { | |
"type": "integer", | |
"examples": [ | |
60 | |
], | |
"description": "The time between each check, in seconds.", | |
"minimum": 10, | |
"maximum": 600 | |
}, | |
"timeoutSeconds": { | |
"type": "integer", | |
"examples": [ | |
1 | |
], | |
"description": "The time to wait for a response before marking the health check as a failure.", | |
"minimum": 1, | |
"maximum": 60 | |
}, | |
"failureThreshold": { | |
"type": "integer", | |
"examples": [ | |
3 | |
], | |
"description": "The maximum number of allowed failures.", | |
"minimum": 1, | |
"maximum": 255 | |
}, | |
"successThreshold": { | |
"not": {} | |
} | |
}, | |
"required": [ | |
"protocol", | |
"type", | |
"initialDelaySeconds", | |
"periodSeconds", | |
"timeoutSeconds", | |
"failureThreshold" | |
], | |
"additionalProperties": false | |
} | |
} | |
}, | |
"required": [ | |
"name", | |
"billing", | |
"deployment", | |
"vcsData", | |
"buildSettings" | |
], | |
"additionalProperties": false | |
} | |
}, | |
"required": [ | |
"kind", | |
"spec" | |
], | |
"additionalProperties": false | |
}, | |
{ | |
"type": "object", | |
"description": "DeploymentService node", | |
"properties": { | |
"ref": { | |
"type": "string", | |
"description": "An identifier that can used to reference the output of this node later in the template." | |
}, | |
"kind": { | |
"type": "string", | |
"examples": [ | |
"DeploymentService" | |
], | |
"description": "The kind of node.", | |
"const": "DeploymentService" | |
}, | |
"spec": { | |
"type": "object", | |
"description": "The specification for the DeploymentService node.", | |
"properties": { | |
"name": { | |
"description": "The name of the service.", | |
"oneOf": [ | |
{ | |
"type": "string", | |
"examples": [ | |
"Example Service" | |
], | |
"description": "The name of the service.", | |
"minLength": 3, | |
"maxLength": 39, | |
"pattern": "^[a-zA-Z]((-|\\s)?[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*)?$" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{args\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*)}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{resources\\.((services|jobs|addons|secretGroups|pipelines)\\.([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{refs\\.(([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
} | |
] | |
}, | |
"description": { | |
"description": "A description of the service.", | |
"oneOf": [ | |
{ | |
"type": "string", | |
"examples": [ | |
"A service description" | |
], | |
"description": "A description of the service.", | |
"default": "", | |
"maxLength": 200, | |
"pattern": "^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{args\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*)}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{resources\\.((services|jobs|addons|secretGroups|pipelines)\\.([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{refs\\.(([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
} | |
] | |
}, | |
"tags": { | |
"type": "array", | |
"description": "An array of previously defined tags to help identify and group the resource.", | |
"items": { | |
"type": "string", | |
"examples": [ | |
"my-tag" | |
], | |
"minLength": 3, | |
"maxLength": 39, | |
"pattern": "^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$" | |
} | |
}, | |
"billing": { | |
"type": "object", | |
"properties": { | |
"deploymentPlan": { | |
"description": "The ID of the deployment plan to use.", | |
"oneOf": [ | |
{ | |
"type": "string", | |
"examples": [ | |
"nf-compute-20" | |
], | |
"description": "The ID of the deployment plan to use.", | |
"pattern": "^[A-Za-z0-9-]+$" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{args\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*)}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{resources\\.((services|jobs|addons|secretGroups|pipelines)\\.([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{refs\\.(([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
} | |
] | |
} | |
}, | |
"required": [ | |
"deploymentPlan" | |
], | |
"additionalProperties": false | |
}, | |
"deployment": { | |
"type": "object", | |
"properties": { | |
"instances": { | |
"description": "The number of instances to run the service on.", | |
"oneOf": [ | |
{ | |
"type": "integer", | |
"examples": [ | |
1 | |
], | |
"description": "The number of instances to run the service on.", | |
"minimum": 0 | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{args\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*)}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{resources\\.((services|jobs|addons|secretGroups|pipelines)\\.([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{refs\\.(([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
} | |
] | |
}, | |
"buildpack": { | |
"type": "object", | |
"properties": { | |
"configType": { | |
"type": "string", | |
"examples": [ | |
"default" | |
], | |
"enum": [ | |
"default", | |
"customProcess", | |
"customCommand", | |
"customEntrypointCustomCommand", | |
"originalEntrypointCustomCommand" | |
] | |
}, | |
"customProcess": { | |
"type": [ | |
"string", | |
"null" | |
] | |
}, | |
"customEntrypoint": { | |
"type": [ | |
"string", | |
"null" | |
] | |
}, | |
"customCommand": { | |
"type": [ | |
"string", | |
"null" | |
] | |
} | |
}, | |
"required": [ | |
"configType" | |
], | |
"additionalProperties": false | |
}, | |
"docker": { | |
"type": "object", | |
"properties": { | |
"configType": { | |
"type": "string", | |
"enum": [ | |
"default", | |
"customEntrypoint", | |
"customCommand", | |
"customEntrypointCustomCommand" | |
] | |
}, | |
"customEntrypoint": { | |
"type": [ | |
"string", | |
"null" | |
] | |
}, | |
"customCommand": { | |
"type": [ | |
"string", | |
"null" | |
] | |
} | |
}, | |
"required": [ | |
"configType" | |
], | |
"additionalProperties": false | |
}, | |
"storage": { | |
"type": "object", | |
"properties": { | |
"ephemeralStorage": { | |
"type": "object", | |
"properties": { | |
"storageSize": { | |
"type": "integer", | |
"examples": [ | |
1024 | |
], | |
"description": "Ephemeral storage per container in MB", | |
"enum": [ | |
1024, | |
2048, | |
5120, | |
10240, | |
20480 | |
], | |
"minimum": 1024, | |
"maximum": 20480 | |
} | |
}, | |
"additionalProperties": false | |
} | |
}, | |
"additionalProperties": false | |
}, | |
"strategy": { | |
"type": "object", | |
"properties": { | |
"type": { | |
"type": "string", | |
"description": "Configures the instance roll out strategy of your service. Currently only available via feature flag.", | |
"enum": [ | |
"recreate", | |
"rollout-steady", | |
"rollout-balanced", | |
"rollout-fast" | |
] | |
} | |
}, | |
"additionalProperties": false | |
}, | |
"internal": { | |
"type": "object", | |
"properties": { | |
"id": { | |
"description": "ID of the build service to deploy", | |
"oneOf": [ | |
{ | |
"type": "string", | |
"examples": [ | |
"example-build-service" | |
], | |
"description": "ID of the build service to deploy", | |
"pattern": "^[A-Za-z0-9-]+$" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{args\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*)}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{resources\\.((services|jobs|addons|secretGroups|pipelines)\\.([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{refs\\.(([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
} | |
] | |
}, | |
"branch": { | |
"description": "Branch to deploy", | |
"oneOf": [ | |
{ | |
"type": "string", | |
"examples": [ | |
"master" | |
], | |
"description": "Branch to deploy" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{args\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*)}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{resources\\.((services|jobs|addons|secretGroups|pipelines)\\.([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{refs\\.(([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
} | |
] | |
}, | |
"buildSHA": { | |
"description": "Commit SHA to deploy, or 'latest' to deploy the most recent commit", | |
"oneOf": [ | |
{ | |
"examples": [ | |
"latest" | |
], | |
"description": "Commit SHA to deploy, or 'latest' to deploy the most recent commit", | |
"oneOf": [ | |
{ | |
"type": "string" | |
}, | |
{ | |
"type": "string", | |
"const": "latest" | |
} | |
] | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{args\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*)}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{resources\\.((services|jobs|addons|secretGroups|pipelines)\\.([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{refs\\.(([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
} | |
] | |
}, | |
"buildId": { | |
"description": "ID of the build that should be deployed", | |
"oneOf": [ | |
{ | |
"type": "string", | |
"examples": [ | |
"premium-guide-6393" | |
], | |
"description": "ID of the build that should be deployed" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{args\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*)}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{resources\\.((services|jobs|addons|secretGroups|pipelines)\\.([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{refs\\.(([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
} | |
] | |
} | |
}, | |
"additionalProperties": false | |
}, | |
"external": { | |
"type": "object", | |
"properties": { | |
"imagePath": { | |
"description": "Image to be deployed. When not deploying from Dockerhub the URL must be specified.", | |
"oneOf": [ | |
{ | |
"type": "string", | |
"examples": [ | |
"nginx:latest" | |
], | |
"description": "Image to be deployed. When not deploying from Dockerhub the URL must be specified.", | |
"pattern": "^(?:(?:https?:\\/\\/)?([a-zA-Z0-9\\-]+\\.[a-zA-Z0-9\\.\\-]+)(\\/v1)?)?(?:\\/)?([a-zA-Z/-9\\.\\-_]+)(?:\\:([a-zA-Z/-9\\.\\-_\\:]+)|\\@([a-zA-Z/-9\\.\\-_\\:]+))$" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{args\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*)}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{resources\\.((services|jobs|addons|secretGroups|pipelines)\\.([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{refs\\.(([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
} | |
] | |
}, | |
"credentials": { | |
"description": "ID of the saved credentials to use to access this external image.", | |
"oneOf": [ | |
{ | |
"type": "string", | |
"examples": [ | |
"example-credentials" | |
], | |
"description": "ID of the saved credentials to use to access this external image.", | |
"pattern": "^[A-Za-z0-9-]+$" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{args\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*)}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{resources\\.((services|jobs|addons|secretGroups|pipelines)\\.([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{refs\\.(([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
} | |
] | |
} | |
}, | |
"required": [ | |
"imagePath" | |
], | |
"additionalProperties": false | |
}, | |
"releaseFlowControlled": { | |
"type": "boolean", | |
"description": "When enabled the deployment source will only be set on creation. All changes to the deployment source must be done via a release flow or manually." | |
} | |
}, | |
"required": [ | |
"instances" | |
], | |
"additionalProperties": false | |
}, | |
"ports": { | |
"type": "array", | |
"default": [], | |
"items": { | |
"type": "object", | |
"properties": { | |
"name": { | |
"type": "string", | |
"examples": [ | |
"port-1" | |
], | |
"description": "The name used to identify the port.", | |
"pattern": "^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$", | |
"minLength": 3, | |
"maxLength": 8 | |
}, | |
"internalPort": { | |
"type": "integer", | |
"examples": [ | |
8080 | |
], | |
"description": "The port number.", | |
"minimum": 1, | |
"maximum": 65535 | |
}, | |
"public": { | |
"type": "boolean", | |
"examples": [ | |
true | |
], | |
"description": "If true, the port will be exposed publicly.", | |
"default": false | |
}, | |
"security": { | |
"type": "object", | |
"default": { | |
"credentials": [], | |
"policies": [] | |
}, | |
"properties": { | |
"credentials": { | |
"type": "array", | |
"description": "An array of credentials to access the service.", | |
"default": [], | |
"items": { | |
"type": "object", | |
"properties": { | |
"username": { | |
"type": "string", | |
"examples": [ | |
"admin" | |
], | |
"description": "The username to access the service", | |
"minLength": 3, | |
"maxLength": 39, | |
"pattern": "^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$" | |
}, | |
"password": { | |
"type": "string", | |
"examples": [ | |
"password123" | |
], | |
"description": "The password to access the service with this username." | |
}, | |
"type": { | |
"type": "string", | |
"examples": [ | |
"basic-auth" | |
], | |
"description": "The type of authentication used", | |
"const": "basic-auth" | |
} | |
}, | |
"required": [ | |
"username", | |
"password", | |
"type" | |
], | |
"additionalProperties": false | |
} | |
}, | |
"policies": { | |
"type": "array", | |
"description": "An array of IP address policies.", | |
"default": [], | |
"items": { | |
"type": "object", | |
"properties": { | |
"addresses": { | |
"type": "array", | |
"description": "An array of IP addresses used for this rule", | |
"items": { | |
"type": "string", | |
"examples": [ | |
"127.0.0.1" | |
], | |
"description": "An IP address used by this rule", | |
"format": "ipv4" | |
} | |
}, | |
"action": { | |
"type": "string", | |
"examples": [ | |
"DENY" | |
], | |
"description": "The action for this rule.", | |
"enum": [ | |
"ALLOW", | |
"DENY" | |
] | |
} | |
}, | |
"required": [ | |
"addresses", | |
"action" | |
], | |
"additionalProperties": false | |
} | |
} | |
}, | |
"additionalProperties": false | |
}, | |
"domains": { | |
"type": "array", | |
"description": "An array of domains to redirect to this port. Each domain must first be verified and registered to your account.", | |
"default": [], | |
"items": { | |
"type": "string", | |
"examples": [ | |
"app.example.com" | |
], | |
"description": "A domain to redirect to this port." | |
} | |
}, | |
"disableNfDomain": { | |
"type": "boolean", | |
"description": "Disable routing on the default code.run domain for public HTTP ports with custom domains.", | |
"default": false | |
}, | |
"protocol": { | |
"type": "string", | |
"examples": [ | |
"HTTP" | |
], | |
"description": "The protocol to use for the port." | |
} | |
}, | |
"required": [ | |
"name", | |
"internalPort", | |
"protocol" | |
], | |
"additionalProperties": false | |
} | |
}, | |
"runtimeEnvironment": { | |
"type": "object", | |
"examples": [ | |
{ | |
"VARIABLE_1": "abcdef", | |
"VARIABLE_2": "12345" | |
} | |
], | |
"description": "An object containing the runtime environment to set for the service", | |
"default": {}, | |
"properties": { | |
"/^[a-zA-Z0-9_./-]*$/": { | |
"type": "string", | |
"properties": {}, | |
"required": [], | |
"additionalProperties": false | |
} | |
}, | |
"additionalProperties": false, | |
"patternProperties": { | |
"^[a-zA-Z0-9_./-]*$": { | |
"type": "string", | |
"properties": {}, | |
"required": [], | |
"additionalProperties": false | |
} | |
} | |
}, | |
"runtimeFiles": { | |
"type": "object", | |
"examples": [ | |
{ | |
"/dir/fileName": { | |
"data": "VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=", | |
"encoding": "utf-8" | |
} | |
} | |
], | |
"description": "Secret files as JSON object, encrypted at rest. File path must be absolute", | |
"properties": { | |
"/^\\/([a-zA-Z0-9-._]+\\/)*[a-zA-Z0-9-._]+$/": { | |
"type": "object", | |
"properties": { | |
"data": { | |
"type": "string", | |
"description": "base64 encoded file data" | |
}, | |
"encoding": { | |
"type": "string", | |
"description": "Original encoding of the file" | |
} | |
}, | |
"required": [ | |
"data" | |
], | |
"additionalProperties": false | |
} | |
}, | |
"additionalProperties": false, | |
"patternProperties": { | |
"^\\/([a-zA-Z0-9-._]+\\/)*[a-zA-Z0-9-._]+$": { | |
"type": "object", | |
"properties": { | |
"data": { | |
"type": "string", | |
"description": "base64 encoded file data" | |
}, | |
"encoding": { | |
"type": "string", | |
"description": "Original encoding of the file" | |
} | |
}, | |
"required": [ | |
"data" | |
], | |
"additionalProperties": false | |
} | |
} | |
}, | |
"healthChecks": { | |
"type": "array", | |
"description": "An array of health checks.", | |
"items": { | |
"type": "object", | |
"description": "A health check object.", | |
"properties": { | |
"protocol": { | |
"type": "string", | |
"examples": [ | |
"HTTP" | |
], | |
"description": "The protocol to access the health check with.", | |
"enum": [ | |
"HTTP", | |
"CMD", | |
"TCP" | |
] | |
}, | |
"type": { | |
"type": "string", | |
"examples": [ | |
"readinessProbe" | |
], | |
"description": "The type of health check.", | |
"enum": [ | |
"livenessProbe", | |
"readinessProbe", | |
"startupProbe" | |
] | |
}, | |
"path": { | |
"not": {} | |
}, | |
"cmd": { | |
"not": {} | |
}, | |
"port": { | |
"not": {} | |
}, | |
"initialDelaySeconds": { | |
"type": "integer", | |
"examples": [ | |
10 | |
], | |
"description": "Initial delay, in seconds, before the health check is first run.", | |
"minimum": 1, | |
"maximum": 180 | |
}, | |
"periodSeconds": { | |
"type": "integer", | |
"examples": [ | |
60 | |
], | |
"description": "The time between each check, in seconds.", | |
"minimum": 10, | |
"maximum": 600 | |
}, | |
"timeoutSeconds": { | |
"type": "integer", | |
"examples": [ | |
1 | |
], | |
"description": "The time to wait for a response before marking the health check as a failure.", | |
"minimum": 1, | |
"maximum": 60 | |
}, | |
"failureThreshold": { | |
"type": "integer", | |
"examples": [ | |
3 | |
], | |
"description": "The maximum number of allowed failures.", | |
"minimum": 1, | |
"maximum": 255 | |
}, | |
"successThreshold": { | |
"not": {} | |
} | |
}, | |
"required": [ | |
"protocol", | |
"type", | |
"initialDelaySeconds", | |
"periodSeconds", | |
"timeoutSeconds", | |
"failureThreshold" | |
], | |
"additionalProperties": false | |
} | |
} | |
}, | |
"required": [ | |
"name", | |
"billing", | |
"deployment" | |
], | |
"additionalProperties": false | |
} | |
}, | |
"required": [ | |
"kind", | |
"spec" | |
], | |
"additionalProperties": false | |
}, | |
{ | |
"type": "object", | |
"description": "CronJob node", | |
"properties": { | |
"ref": { | |
"type": "string", | |
"description": "An identifier that can used to reference the output of this node later in the template." | |
}, | |
"kind": { | |
"type": "string", | |
"examples": [ | |
"CronJob" | |
], | |
"description": "The kind of node.", | |
"const": "CronJob" | |
}, | |
"spec": { | |
"type": "object", | |
"description": "The specification for the CronJob node.", | |
"properties": { | |
"name": { | |
"description": "The name of the job.", | |
"oneOf": [ | |
{ | |
"type": "string", | |
"examples": [ | |
"Example Job" | |
], | |
"description": "The name of the job.", | |
"minLength": 3, | |
"maxLength": 39, | |
"pattern": "^[a-zA-Z]((-|\\s)?[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*)?$" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{args\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*)}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{resources\\.((services|jobs|addons|secretGroups|pipelines)\\.([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{refs\\.(([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
} | |
] | |
}, | |
"description": { | |
"description": "A description of the job.", | |
"oneOf": [ | |
{ | |
"type": "string", | |
"examples": [ | |
"A job description" | |
], | |
"description": "A description of the job.", | |
"default": "", | |
"maxLength": 200, | |
"pattern": "^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{args\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*)}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{resources\\.((services|jobs|addons|secretGroups|pipelines)\\.([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{refs\\.(([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
} | |
] | |
}, | |
"tags": { | |
"type": "array", | |
"description": "An array of previously defined tags to help identify and group the resource.", | |
"items": { | |
"type": "string", | |
"examples": [ | |
"my-tag" | |
], | |
"minLength": 3, | |
"maxLength": 39, | |
"pattern": "^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$" | |
} | |
}, | |
"billing": { | |
"type": "object", | |
"properties": { | |
"deploymentPlan": { | |
"description": "The ID of the deployment plan to use.", | |
"oneOf": [ | |
{ | |
"type": "string", | |
"examples": [ | |
"nf-compute-20" | |
], | |
"description": "The ID of the deployment plan to use.", | |
"pattern": "^[A-Za-z0-9-]+$" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{args\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*)}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{resources\\.((services|jobs|addons|secretGroups|pipelines)\\.([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{refs\\.(([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
} | |
] | |
} | |
}, | |
"required": [ | |
"deploymentPlan" | |
], | |
"additionalProperties": false | |
}, | |
"backoffLimit": { | |
"type": "integer", | |
"examples": [ | |
0 | |
], | |
"description": "The number of attempts to rerun a job before it is marked as failed.", | |
"minimum": 0 | |
}, | |
"runOnSourceChange": { | |
"type": "string", | |
"examples": [ | |
"never" | |
], | |
"description": "Configure when the job should be run if the source image changes.", | |
"default": "never", | |
"enum": [ | |
"never", | |
"cd-promote", | |
"always" | |
] | |
}, | |
"activeDeadlineSeconds": { | |
"type": "integer", | |
"examples": [ | |
600 | |
], | |
"description": "The maximum amount of time, in seconds, for a job to run before it is marked as failed." | |
}, | |
"deployment": { | |
"type": "object", | |
"default": {}, | |
"properties": { | |
"buildpack": { | |
"type": "object", | |
"properties": { | |
"configType": { | |
"type": "string", | |
"examples": [ | |
"default" | |
], | |
"enum": [ | |
"default", | |
"customProcess", | |
"customCommand", | |
"customEntrypointCustomCommand", | |
"originalEntrypointCustomCommand" | |
] | |
}, | |
"customProcess": { | |
"type": [ | |
"string", | |
"null" | |
] | |
}, | |
"customEntrypoint": { | |
"type": [ | |
"string", | |
"null" | |
] | |
}, | |
"customCommand": { | |
"type": [ | |
"string", | |
"null" | |
] | |
} | |
}, | |
"required": [ | |
"configType" | |
], | |
"additionalProperties": false | |
}, | |
"docker": { | |
"type": "object", | |
"properties": { | |
"configType": { | |
"type": "string", | |
"enum": [ | |
"default", | |
"customEntrypoint", | |
"customCommand", | |
"customEntrypointCustomCommand" | |
] | |
}, | |
"customEntrypoint": { | |
"type": [ | |
"string", | |
"null" | |
] | |
}, | |
"customCommand": { | |
"type": [ | |
"string", | |
"null" | |
] | |
} | |
}, | |
"required": [ | |
"configType" | |
], | |
"additionalProperties": false | |
}, | |
"storage": { | |
"type": "object", | |
"properties": { | |
"ephemeralStorage": { | |
"type": "object", | |
"properties": { | |
"storageSize": { | |
"type": "integer", | |
"examples": [ | |
1024 | |
], | |
"description": "Ephemeral storage per container in MB", | |
"enum": [ | |
1024, | |
2048, | |
5120, | |
10240, | |
20480 | |
], | |
"minimum": 1024, | |
"maximum": 20480 | |
} | |
}, | |
"additionalProperties": false | |
} | |
}, | |
"additionalProperties": false | |
}, | |
"vcs": { | |
"type": "object", | |
"properties": { | |
"projectUrl": { | |
"description": "URL of the Git repo to build.", | |
"oneOf": [ | |
{ | |
"type": "string", | |
"examples": [ | |
"https://github.com/northflank/gatsby-with-northflank" | |
], | |
"description": "URL of the Git repo to build.", | |
"pattern": "^(https:\\/\\/)?((www(\\.[a-zA-Z0-9\\-]{2,})+\\.)?[a-zA-Z0-9\\-]{2,})(\\.([a-zA-Z0-9\\-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{args\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*)}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{resources\\.((services|jobs|addons|secretGroups|pipelines)\\.([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{refs\\.(([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
} | |
] | |
}, | |
"projectType": { | |
"description": "The VCS provider to use.", | |
"oneOf": [ | |
{ | |
"type": "string", | |
"examples": [ | |
"github" | |
], | |
"description": "The VCS provider to use.", | |
"enum": [ | |
"bitbucket", | |
"gitlab", | |
"github", | |
"self-hosted" | |
] | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{args\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*)}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{resources\\.((services|jobs|addons|secretGroups|pipelines)\\.([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{refs\\.(([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
} | |
] | |
}, | |
"selfHostedVcsId": { | |
"oneOf": [ | |
{ | |
"oneOf": [ | |
{ | |
"type": "string", | |
"pattern": "^[A-Za-z0-9-]+\\/[A-Za-z0-9-]+$" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{args\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*)}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{resources\\.((services|jobs|addons|secretGroups|pipelines)\\.([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{refs\\.(([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
} | |
] | |
} | |
] | |
}, | |
"accountLogin": { | |
"description": "By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.", | |
"oneOf": [ | |
{ | |
"type": "string", | |
"examples": [ | |
"github-user" | |
], | |
"description": "By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name." | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{args\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*)}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{resources\\.((services|jobs|addons|secretGroups|pipelines)\\.([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{refs\\.(([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
} | |
] | |
}, | |
"projectBranch": { | |
"description": "The name of the branch to use.", | |
"oneOf": [ | |
{ | |
"type": "string", | |
"examples": [ | |
"master" | |
], | |
"description": "The name of the branch to use." | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{args\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*)}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{resources\\.((services|jobs|addons|secretGroups|pipelines)\\.([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{refs\\.(([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
} | |
] | |
} | |
}, | |
"required": [ | |
"projectUrl", | |
"projectType", | |
"projectBranch" | |
], | |
"additionalProperties": false | |
}, | |
"external": { | |
"type": "object", | |
"properties": { | |
"imagePath": { | |
"description": "Image to be deployed. When not deploying from Dockerhub the URL must be specified.", | |
"oneOf": [ | |
{ | |
"type": "string", | |
"examples": [ | |
"nginx:latest" | |
], | |
"description": "Image to be deployed. When not deploying from Dockerhub the URL must be specified.", | |
"pattern": "^(?:(?:https?:\\/\\/)?([a-zA-Z0-9\\-]+\\.[a-zA-Z0-9\\.\\-]+)(\\/v1)?)?(?:\\/)?([a-zA-Z/-9\\.\\-_]+)(?:\\:([a-zA-Z/-9\\.\\-_\\:]+)|\\@([a-zA-Z/-9\\.\\-_\\:]+))$" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{args\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*)}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{resources\\.((services|jobs|addons|secretGroups|pipelines)\\.([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{refs\\.(([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
} | |
] | |
}, | |
"credentials": { | |
"description": "ID of the saved credentials to use to access this external image.", | |
"oneOf": [ | |
{ | |
"type": "string", | |
"examples": [ | |
"example-credentials" | |
], | |
"description": "ID of the saved credentials to use to access this external image.", | |
"pattern": "^[A-Za-z0-9-]+$" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{args\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*)}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{resources\\.((services|jobs|addons|secretGroups|pipelines)\\.([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{refs\\.(([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
} | |
] | |
} | |
}, | |
"required": [ | |
"imagePath" | |
], | |
"additionalProperties": false | |
}, | |
"internal": { | |
"type": "object", | |
"properties": { | |
"id": { | |
"description": "ID of the build service to deploy", | |
"oneOf": [ | |
{ | |
"type": "string", | |
"examples": [ | |
"example-build-service" | |
], | |
"description": "ID of the build service to deploy", | |
"pattern": "^[A-Za-z0-9-]+$" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{args\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*)}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{resources\\.((services|jobs|addons|secretGroups|pipelines)\\.([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{refs\\.(([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
} | |
] | |
}, | |
"branch": { | |
"description": "Branch to deploy", | |
"oneOf": [ | |
{ | |
"type": "string", | |
"examples": [ | |
"master" | |
], | |
"description": "Branch to deploy" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{args\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*)}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{resources\\.((services|jobs|addons|secretGroups|pipelines)\\.([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{refs\\.(([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
} | |
] | |
}, | |
"buildSHA": { | |
"description": "Commit SHA to deploy, or 'latest' to deploy the most recent commit", | |
"oneOf": [ | |
{ | |
"examples": [ | |
"latest" | |
], | |
"description": "Commit SHA to deploy, or 'latest' to deploy the most recent commit", | |
"oneOf": [ | |
{ | |
"type": "string" | |
}, | |
{ | |
"type": "string", | |
"const": "latest" | |
} | |
] | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{args\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*)}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{resources\\.((services|jobs|addons|secretGroups|pipelines)\\.([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{refs\\.(([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
} | |
] | |
}, | |
"buildId": { | |
"description": "ID of the build that should be deployed", | |
"oneOf": [ | |
{ | |
"type": "string", | |
"examples": [ | |
"premium-guide-6393" | |
], | |
"description": "ID of the build that should be deployed" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{args\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*)}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{resources\\.((services|jobs|addons|secretGroups|pipelines)\\.([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{refs\\.(([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
} | |
] | |
} | |
}, | |
"additionalProperties": false | |
}, | |
"releaseFlowControlled": { | |
"type": "boolean", | |
"description": "When enabled the deployment source will only be set on creation. All changes to the deployment source must be done via a release flow or manually." | |
} | |
}, | |
"additionalProperties": false | |
}, | |
"buildConfiguration": { | |
"type": "object", | |
"default": { | |
"pathIgnoreRules": [], | |
"isAllowList": false, | |
"ciIgnoreFlagsEnabled": false | |
}, | |
"properties": { | |
"pathIgnoreRules": { | |
"type": "array", | |
"description": "An array of path ignore rules. A commit will only be built if a file has been changed that does not match any of the ignore rules. Path ignore rules follow `.gitignore` syntax.", | |
"maxItems": 200, | |
"items": { | |
"type": "string", | |
"examples": [ | |
"README.md" | |
], | |
"description": "A path ignore rule, following `.gitignore` syntax. For example, `*.md` will ignore all files ending with `.md`.", | |
"maxLength": 260 | |
} | |
}, | |
"isAllowList": { | |
"type": "boolean", | |
"examples": [ | |
false | |
], | |
"description": "If `true`, the functionality of `pathIgnoreRules` will be inverted. A commit will only be built if a file has been changed that matches one or more of the rules in `pathIgnoreRules`." | |
}, | |
"ciIgnoreFlagsEnabled": { | |
"type": "boolean", | |
"description": "If `true`, enables commit ignore flags. If a commit message contains one or more of the flags in `ciIgnoreFlags`, that commit will not be built." | |
}, | |
"ciIgnoreFlags": { | |
"type": "array", | |
"examples": [ | |
[ | |
"[skip ci]", | |
"[ci skip]", | |
"[no ci]", | |
"[skip nf]", | |
"[nf skip]", | |
"[northflank skip]", | |
"[skip northflank]" | |
] | |
], | |
"description": "An array of commit ignore flags. If a commit message contains one or more of these flags, that commit will not be built. Defaults to `[\"[skip ci]\", \"[ci skip]\", \"[no ci]\", \"[skip nf]\", \"[nf skip]\", \"[northflank skip]\", \"[skip northflank]\"]`", | |
"maxItems": 200, | |
"items": { | |
"type": "string", | |
"examples": [ | |
"[skip ci]" | |
], | |
"description": "A commit ignore flag.", | |
"maxLength": 72 | |
} | |
}, | |
"dockerfileTarget": { | |
"type": "string", | |
"description": "If your Dockerfile contains multiple build stages, you can specify the target stage by entering its name here." | |
}, | |
"includeGitFolder": { | |
"type": "boolean", | |
"description": "Include .git folder inside the build context" | |
}, | |
"fullGitClone": { | |
"type": "boolean", | |
"description": "Include the entire git history as part of the .git folder. Only relevant if \"includeGitFolder\" is set." | |
} | |
}, | |
"additionalProperties": false | |
}, | |
"buildSettings": { | |
"type": "object", | |
"properties": { | |
"dockerfile": { | |
"type": "object", | |
"properties": { | |
"buildEngine": { | |
"description": "Build engine to use. Defaults to recommended build engine `kaniko`", | |
"oneOf": [ | |
{ | |
"type": "string", | |
"examples": [ | |
"kaniko" | |
], | |
"description": "Build engine to use. Defaults to recommended build engine `kaniko`", | |
"default": "kaniko", | |
"enum": [ | |
"kaniko", | |
"buildkit" | |
] | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{args\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*)}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{resources\\.((services|jobs|addons|secretGroups|pipelines)\\.([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{refs\\.(([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
} | |
] | |
}, | |
"dockerFilePath": { | |
"description": "The file path of the Dockerfile.", | |
"oneOf": [ | |
{ | |
"type": "string", | |
"examples": [ | |
"/Dockerfile" | |
], | |
"description": "The file path of the Dockerfile.", | |
"pattern": "^\\/([a-zA-Z0-9-._]+\\/)*[a-zA-Z0-9-._]+$" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{args\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*)}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{resources\\.((services|jobs|addons|secretGroups|pipelines)\\.([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{refs\\.(([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
} | |
] | |
}, | |
"dockerWorkDir": { | |
"description": "The working directory of the Dockerfile.", | |
"oneOf": [ | |
{ | |
"type": "string", | |
"examples": [ | |
"/" | |
], | |
"description": "The working directory of the Dockerfile.", | |
"pattern": "^\\/([a-zA-Z0-9-._]+\\/)*[a-zA-Z0-9-._]*$" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{args\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*)}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{resources\\.((services|jobs|addons|secretGroups|pipelines)\\.([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{refs\\.(([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
} | |
] | |
}, | |
"useCache": { | |
"description": "Should intermediate image layers be cached?", | |
"oneOf": [ | |
{ | |
"type": "boolean", | |
"examples": [ | |
false | |
], | |
"description": "Should intermediate image layers be cached?", | |
"default": false | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{args\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*)}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{resources\\.((services|jobs|addons|secretGroups|pipelines)\\.([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{refs\\.(([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
} | |
] | |
} | |
}, | |
"required": [ | |
"dockerFilePath", | |
"dockerWorkDir" | |
], | |
"additionalProperties": false | |
}, | |
"buildpack": { | |
"type": "object", | |
"properties": { | |
"builder": { | |
"description": "Buildpack stack to use. Defaults to recommended stack `HEROKU_22_CLASSIC`.", | |
"oneOf": [ | |
{ | |
"type": "string", | |
"examples": [ | |
"HEROKU_22_CLASSIC" | |
], | |
"description": "Buildpack stack to use. Defaults to recommended stack `HEROKU_22_CLASSIC`.", | |
"default": "HEROKU_22_CLASSIC", | |
"enum": [ | |
"HEROKU_22", | |
"HEROKU_22_CLASSIC", | |
"HEROKU_20", | |
"HEROKU_18", | |
"GOOGLE_V1", | |
"CNB_ALPINE", | |
"CNB_BIONIC", | |
"PAKETO_TINY", | |
"PAKETO_BASE", | |
"PAKETO_FULL" | |
] | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{args\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*)}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{resources\\.((services|jobs|addons|secretGroups|pipelines)\\.([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{refs\\.(([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
} | |
] | |
}, | |
"buildpackLocators": { | |
"type": "array", | |
"description": "Array of custom Buildpacks to use.", | |
"default": [], | |
"items": { | |
"description": "Url or registry identifier of custom Buildpack.", | |
"oneOf": [ | |
{ | |
"type": "string", | |
"examples": [ | |
"https://buildpack-registry.heroku.com/cnb/mars/create-react-app" | |
], | |
"description": "Url or registry identifier of custom Buildpack." | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{args\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*)}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{resources\\.((services|jobs|addons|secretGroups|pipelines)\\.([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{refs\\.(([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
} | |
] | |
} | |
}, | |
"buildContext": { | |
"description": "The working directory to build in.", | |
"oneOf": [ | |
{ | |
"type": "string", | |
"examples": [ | |
"/" | |
], | |
"description": "The working directory to build in.", | |
"default": "/", | |
"pattern": "^\\/([a-zA-Z0-9-._]+\\/)*[a-zA-Z0-9-._]*$" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{args\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*)}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{resources\\.((services|jobs|addons|secretGroups|pipelines)\\.([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{refs\\.(([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
} | |
] | |
}, | |
"useCache": { | |
"description": "Should build dependencies be cached?", | |
"oneOf": [ | |
{ | |
"type": "boolean", | |
"examples": [ | |
false | |
], | |
"description": "Should build dependencies be cached?", | |
"default": false | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{args\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*)}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{resources\\.((services|jobs|addons|secretGroups|pipelines)\\.([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{refs\\.(([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
} | |
] | |
} | |
}, | |
"additionalProperties": false | |
} | |
}, | |
"additionalProperties": false | |
}, | |
"runtimeEnvironment": { | |
"type": "object", | |
"examples": [ | |
{ | |
"variable1": "abcdef", | |
"variable2": "12345" | |
} | |
], | |
"description": "An object containing the runtime environment to set for the job. Keys may only contain letters, numbers, hyphens, forward slashes and dots.", | |
"default": {}, | |
"properties": { | |
"/^[a-zA-Z0-9_./-]*$/": { | |
"type": "string", | |
"properties": {}, | |
"required": [], | |
"additionalProperties": false | |
} | |
}, | |
"additionalProperties": false, | |
"patternProperties": { | |
"^[a-zA-Z0-9_./-]*$": { | |
"type": "string", | |
"properties": {}, | |
"required": [], | |
"additionalProperties": false | |
} | |
} | |
}, | |
"runtimeFiles": { | |
"type": "object", | |
"examples": [ | |
{ | |
"/dir/fileName": { | |
"data": "VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=", | |
"encoding": "utf-8" | |
} | |
} | |
], | |
"description": "Secret files as JSON object, encrypted at rest. File path must be absolute", | |
"properties": { | |
"/^\\/([a-zA-Z0-9-._]+\\/)*[a-zA-Z0-9-._]+$/": { | |
"type": "object", | |
"properties": { | |
"data": { | |
"type": "string", | |
"description": "base64 encoded file data" | |
}, | |
"encoding": { | |
"type": "string", | |
"description": "Original encoding of the file" | |
} | |
}, | |
"required": [ | |
"data" | |
], | |
"additionalProperties": false | |
} | |
}, | |
"additionalProperties": false, | |
"patternProperties": { | |
"^\\/([a-zA-Z0-9-._]+\\/)*[a-zA-Z0-9-._]+$": { | |
"type": "object", | |
"properties": { | |
"data": { | |
"type": "string", | |
"description": "base64 encoded file data" | |
}, | |
"encoding": { | |
"type": "string", | |
"description": "Original encoding of the file" | |
} | |
}, | |
"required": [ | |
"data" | |
], | |
"additionalProperties": false | |
} | |
} | |
}, | |
"buildArguments": { | |
"type": "object", | |
"examples": [ | |
{ | |
"variable1": "abcdef", | |
"variable2": "12345" | |
} | |
], | |
"description": "An object containing the build arguments to set for the job. Keys may only contain letters, numbers, hyphens, forward slashes and dots.", | |
"default": {}, | |
"properties": { | |
"/^[a-zA-Z0-9_./-]*$/": { | |
"type": "string", | |
"properties": {}, | |
"required": [], | |
"additionalProperties": false | |
} | |
}, | |
"additionalProperties": false, | |
"patternProperties": { | |
"^[a-zA-Z0-9_./-]*$": { | |
"type": "string", | |
"properties": {}, | |
"required": [], | |
"additionalProperties": false | |
} | |
} | |
}, | |
"buildFiles": { | |
"type": "object", | |
"examples": [ | |
{ | |
"/dir/fileName": { | |
"data": "VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=", | |
"encoding": "utf-8" | |
} | |
} | |
], | |
"description": "Secret files as JSON object, encrypted at rest. File path must be absolute", | |
"properties": { | |
"/^\\/([a-zA-Z0-9-._]+\\/)*[a-zA-Z0-9-._]+$/": { | |
"type": "object", | |
"properties": { | |
"data": { | |
"type": "string", | |
"description": "base64 encoded file data" | |
}, | |
"encoding": { | |
"type": "string", | |
"description": "Original encoding of the file" | |
} | |
}, | |
"required": [ | |
"data" | |
], | |
"additionalProperties": false | |
} | |
}, | |
"additionalProperties": false, | |
"patternProperties": { | |
"^\\/([a-zA-Z0-9-._]+\\/)*[a-zA-Z0-9-._]+$": { | |
"type": "object", | |
"properties": { | |
"data": { | |
"type": "string", | |
"description": "base64 encoded file data" | |
}, | |
"encoding": { | |
"type": "string", | |
"description": "Original encoding of the file" | |
} | |
}, | |
"required": [ | |
"data" | |
], | |
"additionalProperties": false | |
} | |
} | |
}, | |
"healthChecks": { | |
"type": "array", | |
"description": "An array of health checks.", | |
"items": { | |
"type": "object", | |
"description": "A health check object.", | |
"properties": { | |
"protocol": { | |
"type": "string", | |
"examples": [ | |
"HTTP" | |
], | |
"description": "The protocol to access the health check with.", | |
"enum": [ | |
"HTTP", | |
"CMD", | |
"TCP" | |
] | |
}, | |
"type": { | |
"type": "string", | |
"examples": [ | |
"readinessProbe" | |
], | |
"description": "The type of health check.", | |
"enum": [ | |
"livenessProbe", | |
"readinessProbe", | |
"startupProbe" | |
] | |
}, | |
"path": { | |
"not": {} | |
}, | |
"cmd": { | |
"not": {} | |
}, | |
"port": { | |
"not": {} | |
}, | |
"initialDelaySeconds": { | |
"type": "integer", | |
"examples": [ | |
10 | |
], | |
"description": "Initial delay, in seconds, before the health check is first run.", | |
"minimum": 1, | |
"maximum": 180 | |
}, | |
"periodSeconds": { | |
"type": "integer", | |
"examples": [ | |
60 | |
], | |
"description": "The time between each check, in seconds.", | |
"minimum": 10, | |
"maximum": 600 | |
}, | |
"timeoutSeconds": { | |
"type": "integer", | |
"examples": [ | |
1 | |
], | |
"description": "The time to wait for a response before marking the health check as a failure.", | |
"minimum": 1, | |
"maximum": 60 | |
}, | |
"failureThreshold": { | |
"type": "integer", | |
"examples": [ | |
3 | |
], | |
"description": "The maximum number of allowed failures.", | |
"minimum": 1, | |
"maximum": 255 | |
}, | |
"successThreshold": { | |
"not": {} | |
} | |
}, | |
"required": [ | |
"protocol", | |
"type", | |
"initialDelaySeconds", | |
"periodSeconds", | |
"timeoutSeconds", | |
"failureThreshold" | |
], | |
"additionalProperties": false | |
} | |
}, | |
"schedule": { | |
"type": "string", | |
"examples": [ | |
"30 8 * * *" | |
], | |
"description": "The cron timer scheduling when to run the job." | |
}, | |
"concurrencyPolicy": { | |
"type": "string", | |
"examples": [ | |
"forbid" | |
], | |
"description": "Whether this job should run when another instance of the job is already running. `allow` will enable multiple instances of this job to run. `forbid` will keep the current instance of the job running and stop a new instance from being run. `replace` will terminate any currently running instance of the job and start a new one.", | |
"enum": [ | |
"allow", | |
"forbid", | |
"replace" | |
] | |
} | |
}, | |
"required": [ | |
"name", | |
"billing", | |
"backoffLimit", | |
"schedule", | |
"concurrencyPolicy" | |
], | |
"additionalProperties": false | |
} | |
}, | |
"required": [ | |
"kind", | |
"spec" | |
], | |
"additionalProperties": false | |
}, | |
{ | |
"type": "object", | |
"description": "ManualJob node", | |
"properties": { | |
"ref": { | |
"type": "string", | |
"description": "An identifier that can used to reference the output of this node later in the template." | |
}, | |
"kind": { | |
"type": "string", | |
"examples": [ | |
"ManualJob" | |
], | |
"description": "The kind of node.", | |
"const": "ManualJob" | |
}, | |
"spec": { | |
"type": "object", | |
"description": "The specification for the ManualJob node.", | |
"properties": { | |
"name": { | |
"description": "The name of the job.", | |
"oneOf": [ | |
{ | |
"type": "string", | |
"examples": [ | |
"Example Job" | |
], | |
"description": "The name of the job.", | |
"minLength": 3, | |
"maxLength": 39, | |
"pattern": "^[a-zA-Z]((-|\\s)?[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*)?$" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{args\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*)}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{resources\\.((services|jobs|addons|secretGroups|pipelines)\\.([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{refs\\.(([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
} | |
] | |
}, | |
"description": { | |
"description": "A description of the job.", | |
"oneOf": [ | |
{ | |
"type": "string", | |
"examples": [ | |
"A job description" | |
], | |
"description": "A description of the job.", | |
"default": "", | |
"maxLength": 200, | |
"pattern": "^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{args\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*)}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{resources\\.((services|jobs|addons|secretGroups|pipelines)\\.([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{refs\\.(([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
} | |
] | |
}, | |
"tags": { | |
"type": "array", | |
"description": "An array of previously defined tags to help identify and group the resource.", | |
"items": { | |
"type": "string", | |
"examples": [ | |
"my-tag" | |
], | |
"minLength": 3, | |
"maxLength": 39, | |
"pattern": "^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$" | |
} | |
}, | |
"billing": { | |
"type": "object", | |
"properties": { | |
"deploymentPlan": { | |
"description": "The ID of the deployment plan to use.", | |
"oneOf": [ | |
{ | |
"type": "string", | |
"examples": [ | |
"nf-compute-20" | |
], | |
"description": "The ID of the deployment plan to use.", | |
"pattern": "^[A-Za-z0-9-]+$" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{args\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*)}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{resources\\.((services|jobs|addons|secretGroups|pipelines)\\.([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{refs\\.(([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
} | |
] | |
} | |
}, | |
"required": [ | |
"deploymentPlan" | |
], | |
"additionalProperties": false | |
}, | |
"backoffLimit": { | |
"type": "integer", | |
"examples": [ | |
0 | |
], | |
"description": "The number of attempts to rerun a job before it is marked as failed.", | |
"minimum": 0 | |
}, | |
"runOnSourceChange": { | |
"type": "string", | |
"examples": [ | |
"never" | |
], | |
"description": "Configure when the job should be run if the source image changes.", | |
"default": "never", | |
"enum": [ | |
"never", | |
"cd-promote", | |
"always" | |
] | |
}, | |
"activeDeadlineSeconds": { | |
"type": "integer", | |
"examples": [ | |
600 | |
], | |
"description": "The maximum amount of time, in seconds, for a job to run before it is marked as failed." | |
}, | |
"deployment": { | |
"type": "object", | |
"default": {}, | |
"properties": { | |
"buildpack": { | |
"type": "object", | |
"properties": { | |
"configType": { | |
"type": "string", | |
"examples": [ | |
"default" | |
], | |
"enum": [ | |
"default", | |
"customProcess", | |
"customCommand", | |
"customEntrypointCustomCommand", | |
"originalEntrypointCustomCommand" | |
] | |
}, | |
"customProcess": { | |
"type": [ | |
"string", | |
"null" | |
] | |
}, | |
"customEntrypoint": { | |
"type": [ | |
"string", | |
"null" | |
] | |
}, | |
"customCommand": { | |
"type": [ | |
"string", | |
"null" | |
] | |
} | |
}, | |
"required": [ | |
"configType" | |
], | |
"additionalProperties": false | |
}, | |
"docker": { | |
"type": "object", | |
"properties": { | |
"configType": { | |
"type": "string", | |
"enum": [ | |
"default", | |
"customEntrypoint", | |
"customCommand", | |
"customEntrypointCustomCommand" | |
] | |
}, | |
"customEntrypoint": { | |
"type": [ | |
"string", | |
"null" | |
] | |
}, | |
"customCommand": { | |
"type": [ | |
"string", | |
"null" | |
] | |
} | |
}, | |
"required": [ | |
"configType" | |
], | |
"additionalProperties": false | |
}, | |
"storage": { | |
"type": "object", | |
"properties": { | |
"ephemeralStorage": { | |
"type": "object", | |
"properties": { | |
"storageSize": { | |
"type": "integer", | |
"examples": [ | |
1024 | |
], | |
"description": "Ephemeral storage per container in MB", | |
"enum": [ | |
1024, | |
2048, | |
5120, | |
10240, | |
20480 | |
], | |
"minimum": 1024, | |
"maximum": 20480 | |
} | |
}, | |
"additionalProperties": false | |
} | |
}, | |
"additionalProperties": false | |
}, | |
"vcs": { | |
"type": "object", | |
"properties": { | |
"projectUrl": { | |
"description": "URL of the Git repo to build.", | |
"oneOf": [ | |
{ | |
"type": "string", | |
"examples": [ | |
"https://github.com/northflank/gatsby-with-northflank" | |
], | |
"description": "URL of the Git repo to build.", | |
"pattern": "^(https:\\/\\/)?((www(\\.[a-zA-Z0-9\\-]{2,})+\\.)?[a-zA-Z0-9\\-]{2,})(\\.([a-zA-Z0-9\\-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{args\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*)}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{resources\\.((services|jobs|addons|secretGroups|pipelines)\\.([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{refs\\.(([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
} | |
] | |
}, | |
"projectType": { | |
"description": "The VCS provider to use.", | |
"oneOf": [ | |
{ | |
"type": "string", | |
"examples": [ | |
"github" | |
], | |
"description": "The VCS provider to use.", | |
"enum": [ | |
"bitbucket", | |
"gitlab", | |
"github", | |
"self-hosted" | |
] | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{args\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*)}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{resources\\.((services|jobs|addons|secretGroups|pipelines)\\.([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{refs\\.(([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
} | |
] | |
}, | |
"selfHostedVcsId": { | |
"oneOf": [ | |
{ | |
"oneOf": [ | |
{ | |
"type": "string", | |
"pattern": "^[A-Za-z0-9-]+\\/[A-Za-z0-9-]+$" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{args\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*)}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{resources\\.((services|jobs|addons|secretGroups|pipelines)\\.([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{refs\\.(([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
} | |
] | |
} | |
] | |
}, | |
"accountLogin": { | |
"description": "By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.", | |
"oneOf": [ | |
{ | |
"type": "string", | |
"examples": [ | |
"github-user" | |
], | |
"description": "By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name." | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{args\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*)}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{resources\\.((services|jobs|addons|secretGroups|pipelines)\\.([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{refs\\.(([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
} | |
] | |
}, | |
"projectBranch": { | |
"description": "The name of the branch to use.", | |
"oneOf": [ | |
{ | |
"type": "string", | |
"examples": [ | |
"master" | |
], | |
"description": "The name of the branch to use." | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{args\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*)}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{resources\\.((services|jobs|addons|secretGroups|pipelines)\\.([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{refs\\.(([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
} | |
] | |
} | |
}, | |
"required": [ | |
"projectUrl", | |
"projectType", | |
"projectBranch" | |
], | |
"additionalProperties": false | |
}, | |
"external": { | |
"type": "object", | |
"properties": { | |
"imagePath": { | |
"description": "Image to be deployed. When not deploying from Dockerhub the URL must be specified.", | |
"oneOf": [ | |
{ | |
"type": "string", | |
"examples": [ | |
"nginx:latest" | |
], | |
"description": "Image to be deployed. When not deploying from Dockerhub the URL must be specified.", | |
"pattern": "^(?:(?:https?:\\/\\/)?([a-zA-Z0-9\\-]+\\.[a-zA-Z0-9\\.\\-]+)(\\/v1)?)?(?:\\/)?([a-zA-Z/-9\\.\\-_]+)(?:\\:([a-zA-Z/-9\\.\\-_\\:]+)|\\@([a-zA-Z/-9\\.\\-_\\:]+))$" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{args\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*)}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{resources\\.((services|jobs|addons|secretGroups|pipelines)\\.([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{refs\\.(([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
} | |
] | |
}, | |
"credentials": { | |
"description": "ID of the saved credentials to use to access this external image.", | |
"oneOf": [ | |
{ | |
"type": "string", | |
"examples": [ | |
"example-credentials" | |
], | |
"description": "ID of the saved credentials to use to access this external image.", | |
"pattern": "^[A-Za-z0-9-]+$" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{args\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*)}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{resources\\.((services|jobs|addons|secretGroups|pipelines)\\.([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{refs\\.(([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
} | |
] | |
} | |
}, | |
"required": [ | |
"imagePath" | |
], | |
"additionalProperties": false | |
}, | |
"internal": { | |
"type": "object", | |
"properties": { | |
"id": { | |
"description": "ID of the build service to deploy", | |
"oneOf": [ | |
{ | |
"type": "string", | |
"examples": [ | |
"example-build-service" | |
], | |
"description": "ID of the build service to deploy", | |
"pattern": "^[A-Za-z0-9-]+$" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{args\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*)}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{resources\\.((services|jobs|addons|secretGroups|pipelines)\\.([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{refs\\.(([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
} | |
] | |
}, | |
"branch": { | |
"description": "Branch to deploy", | |
"oneOf": [ | |
{ | |
"type": "string", | |
"examples": [ | |
"master" | |
], | |
"description": "Branch to deploy" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{args\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*)}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{resources\\.((services|jobs|addons|secretGroups|pipelines)\\.([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{refs\\.(([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
} | |
] | |
}, | |
"buildSHA": { | |
"description": "Commit SHA to deploy, or 'latest' to deploy the most recent commit", | |
"oneOf": [ | |
{ | |
"examples": [ | |
"latest" | |
], | |
"description": "Commit SHA to deploy, or 'latest' to deploy the most recent commit", | |
"oneOf": [ | |
{ | |
"type": "string" | |
}, | |
{ | |
"type": "string", | |
"const": "latest" | |
} | |
] | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{args\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*)}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{resources\\.((services|jobs|addons|secretGroups|pipelines)\\.([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{refs\\.(([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
} | |
] | |
}, | |
"buildId": { | |
"description": "ID of the build that should be deployed", | |
"oneOf": [ | |
{ | |
"type": "string", | |
"examples": [ | |
"premium-guide-6393" | |
], | |
"description": "ID of the build that should be deployed" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{args\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*)}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{resources\\.((services|jobs|addons|secretGroups|pipelines)\\.([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{refs\\.(([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
} | |
] | |
} | |
}, | |
"additionalProperties": false | |
}, | |
"releaseFlowControlled": { | |
"type": "boolean", | |
"description": "When enabled the deployment source will only be set on creation. All changes to the deployment source must be done via a release flow or manually." | |
} | |
}, | |
"additionalProperties": false | |
}, | |
"buildConfiguration": { | |
"type": "object", | |
"default": { | |
"pathIgnoreRules": [], | |
"isAllowList": false, | |
"ciIgnoreFlagsEnabled": false | |
}, | |
"properties": { | |
"pathIgnoreRules": { | |
"type": "array", | |
"description": "An array of path ignore rules. A commit will only be built if a file has been changed that does not match any of the ignore rules. Path ignore rules follow `.gitignore` syntax.", | |
"maxItems": 200, | |
"items": { | |
"type": "string", | |
"examples": [ | |
"README.md" | |
], | |
"description": "A path ignore rule, following `.gitignore` syntax. For example, `*.md` will ignore all files ending with `.md`.", | |
"maxLength": 260 | |
} | |
}, | |
"isAllowList": { | |
"type": "boolean", | |
"examples": [ | |
false | |
], | |
"description": "If `true`, the functionality of `pathIgnoreRules` will be inverted. A commit will only be built if a file has been changed that matches one or more of the rules in `pathIgnoreRules`." | |
}, | |
"ciIgnoreFlagsEnabled": { | |
"type": "boolean", | |
"description": "If `true`, enables commit ignore flags. If a commit message contains one or more of the flags in `ciIgnoreFlags`, that commit will not be built." | |
}, | |
"ciIgnoreFlags": { | |
"type": "array", | |
"examples": [ | |
[ | |
"[skip ci]", | |
"[ci skip]", | |
"[no ci]", | |
"[skip nf]", | |
"[nf skip]", | |
"[northflank skip]", | |
"[skip northflank]" | |
] | |
], | |
"description": "An array of commit ignore flags. If a commit message contains one or more of these flags, that commit will not be built. Defaults to `[\"[skip ci]\", \"[ci skip]\", \"[no ci]\", \"[skip nf]\", \"[nf skip]\", \"[northflank skip]\", \"[skip northflank]\"]`", | |
"maxItems": 200, | |
"items": { | |
"type": "string", | |
"examples": [ | |
"[skip ci]" | |
], | |
"description": "A commit ignore flag.", | |
"maxLength": 72 | |
} | |
}, | |
"dockerfileTarget": { | |
"type": "string", | |
"description": "If your Dockerfile contains multiple build stages, you can specify the target stage by entering its name here." | |
}, | |
"includeGitFolder": { | |
"type": "boolean", | |
"description": "Include .git folder inside the build context" | |
}, | |
"fullGitClone": { | |
"type": "boolean", | |
"description": "Include the entire git history as part of the .git folder. Only relevant if \"includeGitFolder\" is set." | |
} | |
}, | |
"additionalProperties": false | |
}, | |
"buildSettings": { | |
"type": "object", | |
"properties": { | |
"dockerfile": { | |
"type": "object", | |
"properties": { | |
"buildEngine": { | |
"description": "Build engine to use. Defaults to recommended build engine `kaniko`", | |
"oneOf": [ | |
{ | |
"type": "string", | |
"examples": [ | |
"kaniko" | |
], | |
"description": "Build engine to use. Defaults to recommended build engine `kaniko`", | |
"default": "kaniko", | |
"enum": [ | |
"kaniko", | |
"buildkit" | |
] | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{args\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*)}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{resources\\.((services|jobs|addons|secretGroups|pipelines)\\.([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{refs\\.(([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
} | |
] | |
}, | |
"dockerFilePath": { | |
"description": "The file path of the Dockerfile.", | |
"oneOf": [ | |
{ | |
"type": "string", | |
"examples": [ | |
"/Dockerfile" | |
], | |
"description": "The file path of the Dockerfile.", | |
"pattern": "^\\/([a-zA-Z0-9-._]+\\/)*[a-zA-Z0-9-._]+$" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{args\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*)}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{resources\\.((services|jobs|addons|secretGroups|pipelines)\\.([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{refs\\.(([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
} | |
] | |
}, | |
"dockerWorkDir": { | |
"description": "The working directory of the Dockerfile.", | |
"oneOf": [ | |
{ | |
"type": "string", | |
"examples": [ | |
"/" | |
], | |
"description": "The working directory of the Dockerfile.", | |
"pattern": "^\\/([a-zA-Z0-9-._]+\\/)*[a-zA-Z0-9-._]*$" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{args\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*)}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{resources\\.((services|jobs|addons|secretGroups|pipelines)\\.([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{refs\\.(([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
} | |
] | |
}, | |
"useCache": { | |
"description": "Should intermediate image layers be cached?", | |
"oneOf": [ | |
{ | |
"type": "boolean", | |
"examples": [ | |
false | |
], | |
"description": "Should intermediate image layers be cached?", | |
"default": false | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{args\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*)}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{resources\\.((services|jobs|addons|secretGroups|pipelines)\\.([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{refs\\.(([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
} | |
] | |
} | |
}, | |
"required": [ | |
"dockerFilePath", | |
"dockerWorkDir" | |
], | |
"additionalProperties": false | |
}, | |
"buildpack": { | |
"type": "object", | |
"properties": { | |
"builder": { | |
"description": "Buildpack stack to use. Defaults to recommended stack `HEROKU_22_CLASSIC`.", | |
"oneOf": [ | |
{ | |
"type": "string", | |
"examples": [ | |
"HEROKU_22_CLASSIC" | |
], | |
"description": "Buildpack stack to use. Defaults to recommended stack `HEROKU_22_CLASSIC`.", | |
"default": "HEROKU_22_CLASSIC", | |
"enum": [ | |
"HEROKU_22", | |
"HEROKU_22_CLASSIC", | |
"HEROKU_20", | |
"HEROKU_18", | |
"GOOGLE_V1", | |
"CNB_ALPINE", | |
"CNB_BIONIC", | |
"PAKETO_TINY", | |
"PAKETO_BASE", | |
"PAKETO_FULL" | |
] | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{args\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*)}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{resources\\.((services|jobs|addons|secretGroups|pipelines)\\.([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{refs\\.(([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
} | |
] | |
}, | |
"buildpackLocators": { | |
"type": "array", | |
"description": "Array of custom Buildpacks to use.", | |
"default": [], | |
"items": { | |
"description": "Url or registry identifier of custom Buildpack.", | |
"oneOf": [ | |
{ | |
"type": "string", | |
"examples": [ | |
"https://buildpack-registry.heroku.com/cnb/mars/create-react-app" | |
], | |
"description": "Url or registry identifier of custom Buildpack." | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{args\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*)}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{resources\\.((services|jobs|addons|secretGroups|pipelines)\\.([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{refs\\.(([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
} | |
] | |
} | |
}, | |
"buildContext": { | |
"description": "The working directory to build in.", | |
"oneOf": [ | |
{ | |
"type": "string", | |
"examples": [ | |
"/" | |
], | |
"description": "The working directory to build in.", | |
"default": "/", | |
"pattern": "^\\/([a-zA-Z0-9-._]+\\/)*[a-zA-Z0-9-._]*$" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{args\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*)}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{resources\\.((services|jobs|addons|secretGroups|pipelines)\\.([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{refs\\.(([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
} | |
] | |
}, | |
"useCache": { | |
"description": "Should build dependencies be cached?", | |
"oneOf": [ | |
{ | |
"type": "boolean", | |
"examples": [ | |
false | |
], | |
"description": "Should build dependencies be cached?", | |
"default": false | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{args\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*)}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{resources\\.((services|jobs|addons|secretGroups|pipelines)\\.([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{refs\\.(([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
} | |
] | |
} | |
}, | |
"additionalProperties": false | |
} | |
}, | |
"additionalProperties": false | |
}, | |
"runtimeEnvironment": { | |
"type": "object", | |
"examples": [ | |
{ | |
"variable1": "abcdef", | |
"variable2": "12345" | |
} | |
], | |
"description": "An object containing the runtime environment to set for the job. Keys may only contain letters, numbers, hyphens, forward slashes and dots.", | |
"default": {}, | |
"properties": { | |
"/^[a-zA-Z0-9_./-]*$/": { | |
"type": "string", | |
"properties": {}, | |
"required": [], | |
"additionalProperties": false | |
} | |
}, | |
"additionalProperties": false, | |
"patternProperties": { | |
"^[a-zA-Z0-9_./-]*$": { | |
"type": "string", | |
"properties": {}, | |
"required": [], | |
"additionalProperties": false | |
} | |
} | |
}, | |
"runtimeFiles": { | |
"type": "object", | |
"examples": [ | |
{ | |
"/dir/fileName": { | |
"data": "VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=", | |
"encoding": "utf-8" | |
} | |
} | |
], | |
"description": "Secret files as JSON object, encrypted at rest. File path must be absolute", | |
"properties": { | |
"/^\\/([a-zA-Z0-9-._]+\\/)*[a-zA-Z0-9-._]+$/": { | |
"type": "object", | |
"properties": { | |
"data": { | |
"type": "string", | |
"description": "base64 encoded file data" | |
}, | |
"encoding": { | |
"type": "string", | |
"description": "Original encoding of the file" | |
} | |
}, | |
"required": [ | |
"data" | |
], | |
"additionalProperties": false | |
} | |
}, | |
"additionalProperties": false, | |
"patternProperties": { | |
"^\\/([a-zA-Z0-9-._]+\\/)*[a-zA-Z0-9-._]+$": { | |
"type": "object", | |
"properties": { | |
"data": { | |
"type": "string", | |
"description": "base64 encoded file data" | |
}, | |
"encoding": { | |
"type": "string", | |
"description": "Original encoding of the file" | |
} | |
}, | |
"required": [ | |
"data" | |
], | |
"additionalProperties": false | |
} | |
} | |
}, | |
"buildArguments": { | |
"type": "object", | |
"examples": [ | |
{ | |
"variable1": "abcdef", | |
"variable2": "12345" | |
} | |
], | |
"description": "An object containing the build arguments to set for the job. Keys may only contain letters, numbers, hyphens, forward slashes and dots.", | |
"default": {}, | |
"properties": { | |
"/^[a-zA-Z0-9_./-]*$/": { | |
"type": "string", | |
"properties": {}, | |
"required": [], | |
"additionalProperties": false | |
} | |
}, | |
"additionalProperties": false, | |
"patternProperties": { | |
"^[a-zA-Z0-9_./-]*$": { | |
"type": "string", | |
"properties": {}, | |
"required": [], | |
"additionalProperties": false | |
} | |
} | |
}, | |
"buildFiles": { | |
"type": "object", | |
"examples": [ | |
{ | |
"/dir/fileName": { | |
"data": "VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=", | |
"encoding": "utf-8" | |
} | |
} | |
], | |
"description": "Secret files as JSON object, encrypted at rest. File path must be absolute", | |
"properties": { | |
"/^\\/([a-zA-Z0-9-._]+\\/)*[a-zA-Z0-9-._]+$/": { | |
"type": "object", | |
"properties": { | |
"data": { | |
"type": "string", | |
"description": "base64 encoded file data" | |
}, | |
"encoding": { | |
"type": "string", | |
"description": "Original encoding of the file" | |
} | |
}, | |
"required": [ | |
"data" | |
], | |
"additionalProperties": false | |
} | |
}, | |
"additionalProperties": false, | |
"patternProperties": { | |
"^\\/([a-zA-Z0-9-._]+\\/)*[a-zA-Z0-9-._]+$": { | |
"type": "object", | |
"properties": { | |
"data": { | |
"type": "string", | |
"description": "base64 encoded file data" | |
}, | |
"encoding": { | |
"type": "string", | |
"description": "Original encoding of the file" | |
} | |
}, | |
"required": [ | |
"data" | |
], | |
"additionalProperties": false | |
} | |
} | |
}, | |
"healthChecks": { | |
"type": "array", | |
"description": "An array of health checks.", | |
"items": { | |
"type": "object", | |
"description": "A health check object.", | |
"properties": { | |
"protocol": { | |
"type": "string", | |
"examples": [ | |
"HTTP" | |
], | |
"description": "The protocol to access the health check with.", | |
"enum": [ | |
"HTTP", | |
"CMD", | |
"TCP" | |
] | |
}, | |
"type": { | |
"type": "string", | |
"examples": [ | |
"readinessProbe" | |
], | |
"description": "The type of health check.", | |
"enum": [ | |
"livenessProbe", | |
"readinessProbe", | |
"startupProbe" | |
] | |
}, | |
"path": { | |
"not": {} | |
}, | |
"cmd": { | |
"not": {} | |
}, | |
"port": { | |
"not": {} | |
}, | |
"initialDelaySeconds": { | |
"type": "integer", | |
"examples": [ | |
10 | |
], | |
"description": "Initial delay, in seconds, before the health check is first run.", | |
"minimum": 1, | |
"maximum": 180 | |
}, | |
"periodSeconds": { | |
"type": "integer", | |
"examples": [ | |
60 | |
], | |
"description": "The time between each check, in seconds.", | |
"minimum": 10, | |
"maximum": 600 | |
}, | |
"timeoutSeconds": { | |
"type": "integer", | |
"examples": [ | |
1 | |
], | |
"description": "The time to wait for a response before marking the health check as a failure.", | |
"minimum": 1, | |
"maximum": 60 | |
}, | |
"failureThreshold": { | |
"type": "integer", | |
"examples": [ | |
3 | |
], | |
"description": "The maximum number of allowed failures.", | |
"minimum": 1, | |
"maximum": 255 | |
}, | |
"successThreshold": { | |
"not": {} | |
} | |
}, | |
"required": [ | |
"protocol", | |
"type", | |
"initialDelaySeconds", | |
"periodSeconds", | |
"timeoutSeconds", | |
"failureThreshold" | |
], | |
"additionalProperties": false | |
} | |
} | |
}, | |
"required": [ | |
"name", | |
"billing", | |
"backoffLimit" | |
], | |
"additionalProperties": false | |
} | |
}, | |
"required": [ | |
"kind", | |
"spec" | |
], | |
"additionalProperties": false | |
}, | |
{ | |
"type": "object", | |
"description": "Addon node", | |
"properties": { | |
"ref": { | |
"type": "string", | |
"description": "An identifier that can used to reference the output of this node later in the template." | |
}, | |
"kind": { | |
"type": "string", | |
"examples": [ | |
"Addon" | |
], | |
"description": "The kind of node.", | |
"const": "Addon" | |
}, | |
"spec": { | |
"type": "object", | |
"description": "The specification for the Addon node.", | |
"properties": { | |
"name": { | |
"description": "The name of the addon.", | |
"oneOf": [ | |
{ | |
"type": "string", | |
"examples": [ | |
"Example Addon" | |
], | |
"description": "The name of the addon.", | |
"minLength": 3, | |
"maxLength": 39, | |
"pattern": "^[a-zA-Z]((-|\\s)?[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*)?$" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{args\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*)}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{resources\\.((services|jobs|addons|secretGroups|pipelines)\\.([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{refs\\.(([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
} | |
] | |
}, | |
"description": { | |
"description": "A description of the addon.", | |
"oneOf": [ | |
{ | |
"type": "string", | |
"examples": [ | |
"An addon description" | |
], | |
"description": "A description of the addon.", | |
"default": "", | |
"maxLength": 200, | |
"pattern": "^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{args\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*)}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{resources\\.((services|jobs|addons|secretGroups|pipelines)\\.([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{refs\\.(([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
} | |
] | |
}, | |
"tags": { | |
"type": "array", | |
"description": "An array of previously defined tags to help identify and group the resource.", | |
"items": { | |
"type": "string", | |
"examples": [ | |
"my-tag" | |
], | |
"minLength": 3, | |
"maxLength": 39, | |
"pattern": "^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$" | |
} | |
}, | |
"type": { | |
"type": "string", | |
"examples": [ | |
"postgres" | |
], | |
"description": "The identifier for the type of addon. Addon types can be found at the Get Addon Types endpoint." | |
}, | |
"version": { | |
"type": "string", | |
"examples": [ | |
"latest" | |
], | |
"description": "The version of the addon type to use. If set to `latest`, the addon will be created with the most recent addon version. If set to a major version appended with `-latest`, e.g. `14-latest`, the addon will be created with the most recent minor version belonging to that major version. `latest` and `-latest` will only be applied on addon creation." | |
}, | |
"billing": { | |
"type": "object", | |
"properties": { | |
"deploymentPlan": { | |
"description": "The ID of the deployment plan to use.", | |
"oneOf": [ | |
{ | |
"type": "string", | |
"examples": [ | |
"nf-compute-20" | |
], | |
"description": "The ID of the deployment plan to use.", | |
"pattern": "^[A-Za-z0-9-]+$" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{args\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*)}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{resources\\.((services|jobs|addons|secretGroups|pipelines)\\.([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{refs\\.(([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
} | |
] | |
}, | |
"storageClass": { | |
"type": "string", | |
"examples": [ | |
"ssd" | |
], | |
"description": "The type of storage. Only configurable if the relevant feature flag is enabled for you account", | |
"default": "ssd", | |
"enum": [ | |
"ssd", | |
"hdd" | |
] | |
}, | |
"storage": { | |
"type": "number", | |
"examples": [ | |
4096 | |
], | |
"description": "The size of the addon storage, in megabytes.", | |
"minimum": 4096 | |
}, | |
"replicas": { | |
"description": "The number of addon replicas to run.", | |
"oneOf": [ | |
{ | |
"type": "integer", | |
"examples": [ | |
1 | |
], | |
"description": "The number of addon replicas to run.", | |
"minimum": 1 | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{args\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*)}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{resources\\.((services|jobs|addons|secretGroups|pipelines)\\.([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{refs\\.(([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
} | |
] | |
} | |
}, | |
"required": [ | |
"deploymentPlan", | |
"storage", | |
"replicas" | |
], | |
"additionalProperties": false | |
}, | |
"source": { | |
"type": "object", | |
"description": "Optional object containing data about an existing addon to fork. If provided, the addon will be created from that existing addon backup.", | |
"properties": { | |
"addonId": { | |
"description": "ID of the addon to fork.", | |
"oneOf": [ | |
{ | |
"type": "string", | |
"examples": [ | |
"existing-addon" | |
], | |
"description": "ID of the addon to fork.", | |
"pattern": "^[A-Za-z0-9-]+$" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{args\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*)}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{resources\\.((services|jobs|addons|secretGroups|pipelines)\\.([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{refs\\.(([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
} | |
] | |
}, | |
"backupId": { | |
"description": "ID of a backup belonging to that addon to use for the fork.", | |
"oneOf": [ | |
{ | |
"type": "string", | |
"examples": [ | |
"existing-backup" | |
], | |
"description": "ID of a backup belonging to that addon to use for the fork.", | |
"pattern": "^[A-Za-z0-9-]+$" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{args\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*)}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{resources\\.((services|jobs|addons|secretGroups|pipelines)\\.([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{refs\\.(([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
} | |
] | |
} | |
}, | |
"required": [ | |
"addonId", | |
"backupId" | |
], | |
"additionalProperties": false | |
}, | |
"tlsEnabled": { | |
"type": "boolean", | |
"description": "Enables access to the addon via TLS (if supported by the addon type).", | |
"default": false | |
}, | |
"externalAccessEnabled": { | |
"type": "boolean", | |
"description": "Enables external access to the addon via TLS (if supported by the addon type).", | |
"default": false | |
}, | |
"ipPolicies": { | |
"type": "array", | |
"description": "An array of IP address policies.", | |
"default": [], | |
"items": { | |
"type": "object", | |
"properties": { | |
"addresses": { | |
"type": "array", | |
"description": "An array of IP addresses used for this rule", | |
"items": { | |
"type": "string", | |
"examples": [ | |
"127.0.0.1" | |
], | |
"description": "An IP address used by this rule", | |
"format": "ipv4" | |
} | |
}, | |
"action": { | |
"type": "string", | |
"examples": [ | |
"DENY" | |
], | |
"description": "The action for this rule.", | |
"enum": [ | |
"ALLOW", | |
"DENY" | |
] | |
} | |
}, | |
"required": [ | |
"addresses", | |
"action" | |
], | |
"additionalProperties": false | |
} | |
}, | |
"pitrEnabled": { | |
"type": "boolean", | |
"description": "Enables point-in-time recovery (PITR) for the addon (if supported by the addon type).", | |
"default": false | |
}, | |
"typeSpecificSettings": { | |
"type": "object", | |
"properties": { | |
"postgresHAEnabled": { | |
"type": "boolean", | |
"description": "Postgres only: enable high-availability mode." | |
} | |
}, | |
"additionalProperties": false | |
} | |
}, | |
"required": [ | |
"name", | |
"type", | |
"version", | |
"billing" | |
], | |
"additionalProperties": false | |
} | |
}, | |
"required": [ | |
"kind", | |
"spec" | |
], | |
"additionalProperties": false | |
}, | |
{ | |
"type": "object", | |
"description": "AddonBackup node", | |
"properties": { | |
"ref": { | |
"type": "string", | |
"description": "An identifier that can used to reference the output of this node later in the template." | |
}, | |
"kind": { | |
"type": "string", | |
"examples": [ | |
"AddonBackup" | |
], | |
"description": "The kind of node.", | |
"const": "AddonBackup" | |
}, | |
"spec": { | |
"type": "object", | |
"description": "The specification for the AddonBackup node.", | |
"properties": { | |
"addonId": { | |
"description": "The ID of the addon to backup.", | |
"oneOf": [ | |
{ | |
"type": "string", | |
"description": "The ID of the addon to backup.", | |
"pattern": "^[A-Za-z0-9-]+$" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{args\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*)}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{resources\\.((services|jobs|addons|secretGroups|pipelines)\\.([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{refs\\.(([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
} | |
] | |
}, | |
"backupType": { | |
"type": "string", | |
"examples": [ | |
"snapshot" | |
], | |
"description": "The type of backup to perform. Defaults to `snapshot`.", | |
"default": "snapshot", | |
"enum": [ | |
"dump", | |
"snapshot" | |
] | |
} | |
}, | |
"required": [ | |
"addonId" | |
], | |
"additionalProperties": false | |
}, | |
"condition": { | |
"type": "string", | |
"const": "success" | |
} | |
}, | |
"required": [ | |
"kind", | |
"spec" | |
], | |
"additionalProperties": false | |
}, | |
{ | |
"type": "object", | |
"description": "SecretGroup node", | |
"properties": { | |
"ref": { | |
"type": "string", | |
"description": "An identifier that can used to reference the output of this node later in the template." | |
}, | |
"kind": { | |
"type": "string", | |
"examples": [ | |
"SecretGroup" | |
], | |
"description": "The kind of node.", | |
"const": "SecretGroup" | |
}, | |
"spec": { | |
"type": "object", | |
"description": "The specification for the SecretGroup node.", | |
"properties": { | |
"name": { | |
"description": "The name of the secret.", | |
"oneOf": [ | |
{ | |
"type": "string", | |
"examples": [ | |
"Example Secret" | |
], | |
"description": "The name of the secret.", | |
"minLength": 3, | |
"maxLength": 39, | |
"pattern": "^[a-zA-Z]((-|\\s)?[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*)?$" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{args\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*)}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{resources\\.((services|jobs|addons|secretGroups|pipelines)\\.([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{refs\\.(([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
} | |
] | |
}, | |
"description": { | |
"description": "A description of the secret.", | |
"oneOf": [ | |
{ | |
"type": "string", | |
"examples": [ | |
"A description" | |
], | |
"description": "A description of the secret.", | |
"default": "", | |
"maxLength": 200, | |
"pattern": "^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{args\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*)}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{resources\\.((services|jobs|addons|secretGroups|pipelines)\\.([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{refs\\.(([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
} | |
] | |
}, | |
"tags": { | |
"type": "array", | |
"description": "An array of previously defined tags to help identify and group the resource.", | |
"items": { | |
"type": "string", | |
"examples": [ | |
"my-tag" | |
], | |
"minLength": 3, | |
"maxLength": 39, | |
"pattern": "^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$" | |
} | |
}, | |
"secretType": { | |
"type": "string", | |
"examples": [ | |
"environment" | |
], | |
"description": "The type of the created secret", | |
"enum": [ | |
"environment-arguments", | |
"environment", | |
"arguments" | |
] | |
}, | |
"priority": { | |
"type": "integer", | |
"examples": [ | |
10 | |
], | |
"description": "The priority with which different secrets will be merged.", | |
"minimum": 0, | |
"maximum": 100 | |
}, | |
"restrictions": { | |
"type": "object", | |
"description": "Restriction settings of the secret", | |
"default": { | |
"special": "deep" | |
}, | |
"properties": { | |
"restricted": { | |
"type": "boolean", | |
"examples": [ | |
true | |
], | |
"description": "Is the secret restricted", | |
"default": false | |
}, | |
"nfObjects": { | |
"type": "array", | |
"description": "List of Northflank services & jobs the secret is restricted to", | |
"default": [], | |
"uniqueItems": true, | |
"items": { | |
"type": "object", | |
"properties": { | |
"id": { | |
"description": "ID of the entity the secret is restricted to.", | |
"oneOf": [ | |
{ | |
"type": "string", | |
"examples": [ | |
"example-service" | |
], | |
"description": "ID of the entity the secret is restricted to.", | |
"pattern": "^[A-Za-z0-9-]+$" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{args\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*)}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{resources\\.((services|jobs|addons|secretGroups|pipelines)\\.([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{refs\\.(([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
} | |
] | |
}, | |
"type": { | |
"type": "string", | |
"examples": [ | |
"service" | |
], | |
"description": "Type of the entity the secret is restricted to.", | |
"enum": [ | |
"service", | |
"job" | |
] | |
} | |
}, | |
"required": [ | |
"id", | |
"type" | |
], | |
"additionalProperties": false | |
} | |
} | |
}, | |
"additionalProperties": false | |
}, | |
"addonDependencies": { | |
"type": "array", | |
"description": "An array of addons to link to this secret group.", | |
"items": { | |
"type": "object", | |
"description": "An object containing data about the addon to link.", | |
"properties": { | |
"addonId": { | |
"description": "The id of the addon to link.", | |
"oneOf": [ | |
{ | |
"type": "string", | |
"examples": [ | |
"example-addon" | |
], | |
"description": "The id of the addon to link.", | |
"pattern": "^[A-Za-z0-9-]+$" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{args\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*)}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{resources\\.((services|jobs|addons|secretGroups|pipelines)\\.([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{refs\\.(([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
} | |
] | |
}, | |
"keys": { | |
"type": "array", | |
"description": "An array of objects containing details about the keys to link to this secret group.", | |
"default": [], | |
"uniqueItems": true, | |
"items": { | |
"type": "object", | |
"description": "Details about the key to link to this secret group.", | |
"properties": { | |
"keyName": { | |
"type": "string", | |
"examples": [ | |
"USERNAME" | |
], | |
"description": "The name of the key to link.", | |
"pattern": "[a-zA-Z]+" | |
}, | |
"aliases": { | |
"type": "array", | |
"description": "An array of aliases for the key.", | |
"default": [], | |
"uniqueItems": true, | |
"items": { | |
"type": "string", | |
"examples": [ | |
"MONGO_USERNAME" | |
], | |
"description": "The name of the alias. Keys may only contain letters, numbers, hyphens, forward slashes and dots.", | |
"pattern": "^[a-zA-Z0-9_./-]*$" | |
} | |
} | |
}, | |
"required": [ | |
"keyName" | |
], | |
"additionalProperties": false | |
} | |
} | |
}, | |
"required": [ | |
"addonId", | |
"keys" | |
], | |
"additionalProperties": false | |
} | |
}, | |
"secrets": { | |
"type": "object", | |
"properties": { | |
"variables": { | |
"type": "object", | |
"examples": [ | |
{ | |
"NODE_ENV": "production", | |
"MONGO_DB": "some_connection_string" | |
} | |
], | |
"description": "Secret variables as JSON object, encrypted at rest. Keys may only contain letters, numbers, hyphens, forward slashes and dots.", | |
"properties": { | |
"/^[a-zA-Z0-9_./-]*$/": { | |
"type": "string", | |
"properties": {}, | |
"required": [], | |
"additionalProperties": false | |
} | |
}, | |
"additionalProperties": false, | |
"patternProperties": { | |
"^[a-zA-Z0-9_./-]*$": { | |
"type": "string", | |
"properties": {}, | |
"required": [], | |
"additionalProperties": false | |
} | |
} | |
}, | |
"files": { | |
"type": "object", | |
"examples": [ | |
{ | |
"/dir/fileName": { | |
"data": "VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=", | |
"encoding": "utf-8" | |
} | |
} | |
], | |
"description": "Secret files as JSON object, encrypted at rest. File path must be absolute", | |
"properties": { | |
"/^\\/([a-zA-Z0-9-._]+\\/)*[a-zA-Z0-9-._]+$/": { | |
"type": "object", | |
"properties": { | |
"data": { | |
"type": "string", | |
"description": "base64 encoded file data" | |
}, | |
"encoding": { | |
"type": "string", | |
"description": "Original encoding of the file" | |
} | |
}, | |
"required": [ | |
"data" | |
], | |
"additionalProperties": false | |
} | |
}, | |
"additionalProperties": false, | |
"patternProperties": { | |
"^\\/([a-zA-Z0-9-._]+\\/)*[a-zA-Z0-9-._]+$": { | |
"type": "object", | |
"properties": { | |
"data": { | |
"type": "string", | |
"description": "base64 encoded file data" | |
}, | |
"encoding": { | |
"type": "string", | |
"description": "Original encoding of the file" | |
} | |
}, | |
"required": [ | |
"data" | |
], | |
"additionalProperties": false | |
} | |
} | |
} | |
}, | |
"additionalProperties": false | |
} | |
}, | |
"required": [ | |
"name", | |
"secretType", | |
"priority" | |
], | |
"additionalProperties": false | |
} | |
}, | |
"required": [ | |
"kind", | |
"spec" | |
], | |
"additionalProperties": false | |
}, | |
{ | |
"type": "object", | |
"description": "Pipeline node", | |
"properties": { | |
"ref": { | |
"type": "string", | |
"description": "An identifier that can used to reference the output of this node later in the template." | |
}, | |
"kind": { | |
"type": "string", | |
"examples": [ | |
"Pipeline" | |
], | |
"description": "The kind of node.", | |
"const": "Pipeline" | |
}, | |
"spec": { | |
"type": "object", | |
"description": "The specification for the Pipeline node.", | |
"properties": { | |
"name": { | |
"description": "The name of the pipeline.", | |
"oneOf": [ | |
{ | |
"type": "string", | |
"examples": [ | |
"example-pipeline" | |
], | |
"description": "The name of the pipeline.", | |
"minLength": 3, | |
"maxLength": 39, | |
"pattern": "^[a-zA-Z]((-|\\s)?[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*)?$" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{args\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*)}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{resources\\.((services|jobs|addons|secretGroups|pipelines)\\.([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{refs\\.(([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
} | |
] | |
}, | |
"description": { | |
"description": "A description of the pipeline.", | |
"oneOf": [ | |
{ | |
"type": "string", | |
"description": "A description of the pipeline.", | |
"default": "", | |
"maxLength": 200, | |
"pattern": "^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{args\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*)}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{resources\\.((services|jobs|addons|secretGroups|pipelines)\\.([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{refs\\.(([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
} | |
] | |
}, | |
"nfObjects": { | |
"type": "array", | |
"description": "A list of services, jobs and addons to include in the pipeline.", | |
"items": { | |
"type": "object", | |
"properties": { | |
"id": { | |
"description": "The ID of the service, job or addon to include in the pipeline.", | |
"oneOf": [ | |
{ | |
"type": "string", | |
"examples": [ | |
"example-service" | |
], | |
"description": "The ID of the service, job or addon to include in the pipeline.", | |
"pattern": "^[A-Za-z0-9-]+$" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{args\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*)}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{resources\\.((services|jobs|addons|secretGroups|pipelines)\\.([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{refs\\.(([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
} | |
] | |
}, | |
"type": { | |
"type": "string", | |
"examples": [ | |
"service" | |
], | |
"description": "The type of the resource to include in the pipeline.", | |
"enum": [ | |
"service", | |
"job", | |
"addon" | |
] | |
}, | |
"stage": { | |
"type": "string", | |
"examples": [ | |
"Production" | |
], | |
"description": "The stage in the pipeline to include the resource.", | |
"enum": [ | |
"Development", | |
"Staging", | |
"Production" | |
] | |
} | |
}, | |
"required": [ | |
"id", | |
"type", | |
"stage" | |
], | |
"additionalProperties": false | |
} | |
} | |
}, | |
"required": [ | |
"name" | |
], | |
"additionalProperties": false | |
} | |
}, | |
"required": [ | |
"kind", | |
"spec" | |
], | |
"additionalProperties": false | |
}, | |
{ | |
"type": "object", | |
"description": "Volume node", | |
"properties": { | |
"ref": { | |
"type": "string", | |
"description": "An identifier that can used to reference the output of this node later in the template." | |
}, | |
"kind": { | |
"type": "string", | |
"examples": [ | |
"Volume" | |
], | |
"description": "The kind of node.", | |
"const": "Volume" | |
}, | |
"spec": { | |
"type": "object", | |
"description": "The specification for the Volume node.", | |
"properties": { | |
"name": { | |
"description": "The name of the volume.", | |
"oneOf": [ | |
{ | |
"type": "string", | |
"examples": [ | |
"Example Volume" | |
], | |
"description": "The name of the volume.", | |
"minLength": 3, | |
"maxLength": 39, | |
"pattern": "^[a-zA-Z]((-|\\s)?[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*)?$" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{args\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*)}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{resources\\.((services|jobs|addons|secretGroups|pipelines)\\.([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{refs\\.(([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
} | |
] | |
}, | |
"tags": { | |
"type": "array", | |
"description": "An array of previously defined tags to help identify and group the resource.", | |
"items": { | |
"type": "string", | |
"examples": [ | |
"my-tag" | |
], | |
"minLength": 3, | |
"maxLength": 39, | |
"pattern": "^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$" | |
} | |
}, | |
"mounts": { | |
"type": "array", | |
"description": "Array of mounts, containerMountPaths must be unique", | |
"uniqueItems": true, | |
"items": { | |
"type": "object", | |
"properties": { | |
"volumeMountPath": { | |
"type": "string", | |
"examples": [ | |
"" | |
], | |
"description": "Optionally specify the path inside this volume that should be mounted", | |
"default": "", | |
"pattern": "^((?!\\/)).+$" | |
}, | |
"containerMountPath": { | |
"type": "string", | |
"examples": [ | |
"/container" | |
], | |
"description": "Specify the path into which the volume should be mounted", | |
"pattern": "^((?!:).)*$" | |
} | |
}, | |
"required": [ | |
"containerMountPath" | |
], | |
"additionalProperties": false | |
} | |
}, | |
"spec": { | |
"type": "object", | |
"description": "Information about the desired size and type of the volume. Storage class is only configurable with the relevant feature flag enabled for your account.", | |
"properties": { | |
"storageClassName": { | |
"type": "string", | |
"examples": [ | |
"ssd" | |
], | |
"description": "The type of the storage.", | |
"default": "ssd", | |
"enum": [ | |
"ssd", | |
"hdd" | |
] | |
}, | |
"storageSize": { | |
"oneOf": [ | |
{ | |
"type": "integer", | |
"examples": [ | |
4096 | |
], | |
"description": "Storage size of the SSD.", | |
"enum": [ | |
5120, | |
10240, | |
20480, | |
40960 | |
], | |
"minimum": 4096, | |
"maximum": 204800 | |
}, | |
{ | |
"type": "integer", | |
"examples": [ | |
40960 | |
], | |
"description": "Storage size of the HDD.", | |
"const": 40960, | |
"minimum": 40960, | |
"maximum": 204800 | |
}, | |
{ | |
"type": "integer", | |
"enum": [ | |
5120, | |
10240, | |
20480, | |
40960 | |
], | |
"minimum": 4096, | |
"maximum": 204800 | |
} | |
] | |
} | |
}, | |
"required": [ | |
"storageSize" | |
], | |
"additionalProperties": false | |
}, | |
"owningObject": { | |
"type": "object", | |
"description": "The object to attach this volume to.", | |
"properties": { | |
"id": { | |
"description": "The id of object to attach this volume to.", | |
"oneOf": [ | |
{ | |
"type": "string", | |
"examples": [ | |
"example-service" | |
], | |
"description": "The id of object to attach this volume to.", | |
"pattern": "^[A-Za-z0-9-]+$" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{args\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*)}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{resources\\.((services|jobs|addons|secretGroups|pipelines)\\.([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{refs\\.(([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
} | |
] | |
}, | |
"type": { | |
"type": "string", | |
"examples": [ | |
"service" | |
], | |
"description": "The type of the object to attach this volume to.", | |
"const": "service" | |
} | |
}, | |
"required": [ | |
"id", | |
"type" | |
], | |
"additionalProperties": false | |
} | |
}, | |
"required": [ | |
"name", | |
"mounts", | |
"spec" | |
], | |
"additionalProperties": false | |
} | |
}, | |
"required": [ | |
"kind", | |
"spec" | |
], | |
"additionalProperties": false | |
}, | |
{ | |
"type": "object", | |
"description": "Build node", | |
"properties": { | |
"ref": { | |
"type": "string", | |
"description": "An identifier that can used to reference the output of this node later in the template." | |
}, | |
"kind": { | |
"type": "string", | |
"examples": [ | |
"Build" | |
], | |
"description": "The kind of node.", | |
"const": "Build" | |
}, | |
"spec": { | |
"type": "object", | |
"description": "The specification for the Build node.", | |
"properties": { | |
"id": { | |
"description": "The id of object to build.", | |
"oneOf": [ | |
{ | |
"type": "string", | |
"examples": [ | |
"example-service" | |
], | |
"description": "The id of object to build.", | |
"pattern": "^[A-Za-z0-9-]+$" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{args\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*)}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{resources\\.((services|jobs|addons|secretGroups|pipelines)\\.([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{refs\\.(([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
} | |
] | |
}, | |
"type": { | |
"type": "string", | |
"examples": [ | |
"service" | |
], | |
"description": "The type of the object to build.", | |
"enum": [ | |
"service", | |
"job" | |
] | |
}, | |
"sha": { | |
"description": "Commit sha to build. If not provided, builds the most recent relevant commit.", | |
"oneOf": [ | |
{ | |
"type": "string", | |
"examples": [ | |
"262ed9817b3cad5142fbceabe0c9e371e390d616" | |
], | |
"description": "Commit sha to build. If not provided, builds the most recent relevant commit." | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{args\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*)}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{resources\\.((services|jobs|addons|secretGroups|pipelines)\\.([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{refs\\.(([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
} | |
] | |
}, | |
"branch": { | |
"description": "Branch to build from. If `sha` is not provided, the latest commit of this branch will be built. Only supported by build services. Build services require either `branch` or `pullRequestId` field, but cannot be provided with both.", | |
"oneOf": [ | |
{ | |
"type": "string", | |
"description": "Branch to build from. If `sha` is not provided, the latest commit of this branch will be built. Only supported by build services. Build services require either `branch` or `pullRequestId` field, but cannot be provided with both." | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{args\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*)}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{resources\\.((services|jobs|addons|secretGroups|pipelines)\\.([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{refs\\.(([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
} | |
] | |
}, | |
"pullRequestId": { | |
"description": "ID of a pull request to build from. If `sha` is not provided, the latest commit of this pull request will be built. Only supported by build services. Build services require either `branch` or `pullRequestId` field, but cannot be provided with both.", | |
"oneOf": [ | |
{ | |
"type": "integer", | |
"description": "ID of a pull request to build from. If `sha` is not provided, the latest commit of this pull request will be built. Only supported by build services. Build services require either `branch` or `pullRequestId` field, but cannot be provided with both." | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{args\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*)}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{resources\\.((services|jobs|addons|secretGroups|pipelines)\\.([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{refs\\.(([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
} | |
] | |
} | |
}, | |
"required": [ | |
"id", | |
"type" | |
], | |
"additionalProperties": false | |
}, | |
"condition": { | |
"type": "string", | |
"const": "success" | |
} | |
}, | |
"required": [ | |
"kind", | |
"spec" | |
], | |
"additionalProperties": false | |
}, | |
{ | |
"type": "object", | |
"description": "JobRun node", | |
"properties": { | |
"ref": { | |
"type": "string", | |
"description": "An identifier that can used to reference the output of this node later in the template." | |
}, | |
"kind": { | |
"type": "string", | |
"examples": [ | |
"JobRun" | |
], | |
"description": "The kind of node.", | |
"const": "JobRun" | |
}, | |
"spec": { | |
"type": "object", | |
"description": "The specification for the JobRun node.", | |
"properties": { | |
"runtimeEnvironment": { | |
"type": "object", | |
"examples": [ | |
{ | |
"VARIABLE_1": "abcdef", | |
"VARIABLE_2": "12345" | |
} | |
], | |
"description": "An object containing the environment variables overrides to use when running the job. Keys may only contain letters, numbers, hyphens, forward slashes and dots.", | |
"properties": { | |
"/^[a-zA-Z0-9_./-]*$/": { | |
"type": "string", | |
"properties": {}, | |
"required": [], | |
"additionalProperties": false | |
} | |
}, | |
"additionalProperties": false, | |
"patternProperties": { | |
"^[a-zA-Z0-9_./-]*$": { | |
"type": "string", | |
"properties": {}, | |
"required": [], | |
"additionalProperties": false | |
} | |
} | |
}, | |
"billing": { | |
"type": "object", | |
"properties": { | |
"deploymentPlan": { | |
"description": "The ID of the deployment plan override to use.", | |
"oneOf": [ | |
{ | |
"type": "string", | |
"examples": [ | |
"nf-compute-20" | |
], | |
"description": "The ID of the deployment plan override to use.", | |
"pattern": "^[A-Za-z0-9-]+$" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{args\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*)}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{resources\\.((services|jobs|addons|secretGroups|pipelines)\\.([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{refs\\.(([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
} | |
] | |
} | |
}, | |
"additionalProperties": false | |
}, | |
"deployment": { | |
"type": "object", | |
"description": "Details about the job run deployment overrides.", | |
"properties": { | |
"internal": { | |
"type": "object", | |
"properties": { | |
"id": { | |
"description": "ID of the build service to deploy", | |
"oneOf": [ | |
{ | |
"type": "string", | |
"examples": [ | |
"example-build-service" | |
], | |
"description": "ID of the build service to deploy", | |
"pattern": "^[A-Za-z0-9-]+$" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{args\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*)}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{resources\\.((services|jobs|addons|secretGroups|pipelines)\\.([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{refs\\.(([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
} | |
] | |
}, | |
"branch": { | |
"description": "Branch to deploy", | |
"oneOf": [ | |
{ | |
"type": "string", | |
"examples": [ | |
"master" | |
], | |
"description": "Branch to deploy" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{args\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*)}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{resources\\.((services|jobs|addons|secretGroups|pipelines)\\.([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{refs\\.(([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
} | |
] | |
}, | |
"buildSHA": { | |
"description": "Commit SHA to deploy, or 'latest' to deploy the most recent commit", | |
"oneOf": [ | |
{ | |
"examples": [ | |
"latest" | |
], | |
"description": "Commit SHA to deploy, or 'latest' to deploy the most recent commit", | |
"oneOf": [ | |
{ | |
"type": "string" | |
}, | |
{ | |
"type": "string", | |
"const": "latest" | |
} | |
] | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{args\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*)}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{resources\\.((services|jobs|addons|secretGroups|pipelines)\\.([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{refs\\.(([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
} | |
] | |
}, | |
"buildId": { | |
"description": "ID of the build that should be deployed", | |
"oneOf": [ | |
{ | |
"type": "string", | |
"examples": [ | |
"premium-guide-6393" | |
], | |
"description": "ID of the build that should be deployed" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{args\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*)}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{resources\\.((services|jobs|addons|secretGroups|pipelines)\\.([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{refs\\.(([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
} | |
] | |
} | |
}, | |
"additionalProperties": false | |
}, | |
"external": { | |
"type": "object", | |
"properties": { | |
"imagePath": { | |
"description": "Image to be deployed. When not deploying from Dockerhub the URL must be specified.", | |
"oneOf": [ | |
{ | |
"type": "string", | |
"examples": [ | |
"nginx:latest" | |
], | |
"description": "Image to be deployed. When not deploying from Dockerhub the URL must be specified.", | |
"pattern": "^(?:(?:https?:\\/\\/)?([a-zA-Z0-9\\-]+\\.[a-zA-Z0-9\\.\\-]+)(\\/v1)?)?(?:\\/)?([a-zA-Z/-9\\.\\-_]+)(?:\\:([a-zA-Z/-9\\.\\-_\\:]+)|\\@([a-zA-Z/-9\\.\\-_\\:]+))$" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{args\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*)}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{resources\\.((services|jobs|addons|secretGroups|pipelines)\\.([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{refs\\.(([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
} | |
] | |
}, | |
"credentials": { | |
"description": "ID of the saved credentials to use to access this external image.", | |
"oneOf": [ | |
{ | |
"type": "string", | |
"examples": [ | |
"example-credentials" | |
], | |
"description": "ID of the saved credentials to use to access this external image.", | |
"pattern": "^[A-Za-z0-9-]+$" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{args\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*)}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{resources\\.((services|jobs|addons|secretGroups|pipelines)\\.([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{refs\\.(([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
} | |
] | |
} | |
}, | |
"required": [ | |
"imagePath" | |
], | |
"additionalProperties": false | |
}, | |
"docker": { | |
"type": "object", | |
"properties": { | |
"configType": { | |
"type": "string", | |
"enum": [ | |
"default", | |
"customEntrypoint", | |
"customCommand", | |
"customEntrypointCustomCommand" | |
] | |
}, | |
"customEntrypoint": { | |
"type": [ | |
"string", | |
"null" | |
] | |
}, | |
"customCommand": { | |
"type": [ | |
"string", | |
"null" | |
] | |
} | |
}, | |
"required": [ | |
"configType" | |
], | |
"additionalProperties": false | |
}, | |
"buildpack": { | |
"type": "object", | |
"properties": { | |
"configType": { | |
"type": "string", | |
"examples": [ | |
"default" | |
], | |
"enum": [ | |
"default", | |
"customProcess", | |
"customCommand", | |
"customEntrypointCustomCommand", | |
"originalEntrypointCustomCommand" | |
] | |
}, | |
"customProcess": { | |
"type": [ | |
"string", | |
"null" | |
] | |
}, | |
"customEntrypoint": { | |
"type": [ | |
"string", | |
"null" | |
] | |
}, | |
"customCommand": { | |
"type": [ | |
"string", | |
"null" | |
] | |
} | |
}, | |
"required": [ | |
"configType" | |
], | |
"additionalProperties": false | |
}, | |
"storage": { | |
"type": "object", | |
"properties": { | |
"ephemeralStorage": { | |
"type": "object", | |
"properties": { | |
"storageSize": { | |
"type": "integer", | |
"examples": [ | |
1024 | |
], | |
"description": "Ephemeral storage per container in MB", | |
"enum": [ | |
1024, | |
2048, | |
5120, | |
10240, | |
20480 | |
], | |
"minimum": 1024, | |
"maximum": 20480 | |
} | |
}, | |
"additionalProperties": false | |
} | |
}, | |
"additionalProperties": false | |
} | |
}, | |
"additionalProperties": false | |
}, | |
"jobId": { | |
"description": "The ID of the job to run.", | |
"oneOf": [ | |
{ | |
"type": "string", | |
"examples": [ | |
"example-job" | |
], | |
"description": "The ID of the job to run.", | |
"pattern": "^[A-Za-z0-9-]+$" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{args\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*)}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{resources\\.((services|jobs|addons|secretGroups|pipelines)\\.([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{refs\\.(([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
} | |
] | |
} | |
}, | |
"required": [ | |
"jobId" | |
], | |
"additionalProperties": false | |
}, | |
"condition": { | |
"type": "string", | |
"const": "success" | |
} | |
}, | |
"required": [ | |
"kind", | |
"spec" | |
], | |
"additionalProperties": false | |
}, | |
{ | |
"type": "object", | |
"description": "Action node", | |
"properties": { | |
"ref": { | |
"type": "string", | |
"description": "An identifier that can used to reference the output of this node later in the template." | |
}, | |
"kind": { | |
"type": "string", | |
"examples": [ | |
"Action" | |
], | |
"description": "The kind of node.", | |
"const": "Action" | |
}, | |
"spec": { | |
"description": "The specification for the Action node.", | |
"oneOf": [ | |
{ | |
"type": "object", | |
"description": "Addon action", | |
"properties": { | |
"kind": { | |
"type": "string", | |
"examples": [ | |
"Addon" | |
], | |
"description": "The kind of action.", | |
"const": "Addon" | |
}, | |
"spec": { | |
"type": "object", | |
"properties": { | |
"type": { | |
"type": "string", | |
"const": "restart" | |
}, | |
"data": { | |
"oneOf": [ | |
{ | |
"type": "object", | |
"properties": { | |
"addonId": { | |
"description": "The id of the addon to restart.", | |
"oneOf": [ | |
{ | |
"type": "string", | |
"examples": [ | |
"example-addon" | |
], | |
"description": "The id of the addon to restart.", | |
"pattern": "^[A-Za-z0-9-]+$" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{args\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*)}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{resources\\.((services|jobs|addons|secretGroups|pipelines)\\.([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{refs\\.(([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
} | |
] | |
} | |
}, | |
"required": [ | |
"addonId" | |
], | |
"additionalProperties": false | |
} | |
] | |
}, | |
"condition": { | |
"oneOf": [ | |
{ | |
"type": "string", | |
"const": "running" | |
} | |
] | |
} | |
}, | |
"required": [ | |
"type" | |
], | |
"additionalProperties": false | |
} | |
}, | |
"required": [ | |
"kind", | |
"spec" | |
], | |
"additionalProperties": false | |
}, | |
{ | |
"type": "object", | |
"description": "AddonBackup action", | |
"properties": { | |
"kind": { | |
"type": "string", | |
"examples": [ | |
"AddonBackup" | |
], | |
"description": "The kind of action.", | |
"const": "AddonBackup" | |
}, | |
"spec": { | |
"type": "object", | |
"properties": { | |
"type": { | |
"type": "string", | |
"const": "restore" | |
}, | |
"data": { | |
"oneOf": [ | |
{ | |
"type": "object", | |
"properties": { | |
"addonId": { | |
"description": "The id of the addon to restore a backup to.", | |
"oneOf": [ | |
{ | |
"type": "string", | |
"examples": [ | |
"example-addon" | |
], | |
"description": "The id of the addon to restore a backup to.", | |
"pattern": "^[A-Za-z0-9-]+$" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{args\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*)}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{resources\\.((services|jobs|addons|secretGroups|pipelines)\\.([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{refs\\.(([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
} | |
] | |
}, | |
"backupId": { | |
"description": "The id of the backup to restore.", | |
"oneOf": [ | |
{ | |
"type": "string", | |
"examples": [ | |
"example-backup" | |
], | |
"description": "The id of the backup to restore.", | |
"pattern": "^[A-Za-z0-9-]+$" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{args\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*)}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{resources\\.((services|jobs|addons|secretGroups|pipelines)\\.([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{refs\\.(([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
} | |
] | |
} | |
}, | |
"required": [ | |
"addonId", | |
"backupId" | |
], | |
"additionalProperties": false | |
} | |
] | |
}, | |
"condition": { | |
"oneOf": [ | |
{ | |
"type": "string", | |
"const": "success" | |
} | |
] | |
} | |
}, | |
"required": [ | |
"type" | |
], | |
"additionalProperties": false | |
} | |
}, | |
"required": [ | |
"kind", | |
"spec" | |
], | |
"additionalProperties": false | |
}, | |
{ | |
"type": "object", | |
"description": "Job action", | |
"properties": { | |
"kind": { | |
"type": "string", | |
"examples": [ | |
"Job" | |
], | |
"description": "The kind of action.", | |
"const": "Job" | |
}, | |
"spec": { | |
"type": "object", | |
"properties": { | |
"type": { | |
"type": "string", | |
"const": "execute" | |
}, | |
"data": { | |
"oneOf": [ | |
{ | |
"type": "object", | |
"properties": { | |
"jobId": { | |
"description": "The id of the job to run the command in.", | |
"oneOf": [ | |
{ | |
"type": "string", | |
"examples": [ | |
"example-job" | |
], | |
"description": "The id of the job to run the command in.", | |
"pattern": "^[A-Za-z0-9-]+$" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{args\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*)}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{resources\\.((services|jobs|addons|secretGroups|pipelines)\\.([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{refs\\.(([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
} | |
] | |
}, | |
"command": { | |
"type": "string" | |
}, | |
"shell": { | |
"type": "string" | |
}, | |
"user": { | |
"type": "string" | |
}, | |
"group": { | |
"type": "string" | |
} | |
}, | |
"required": [ | |
"jobId", | |
"command" | |
], | |
"additionalProperties": false | |
} | |
] | |
}, | |
"condition": { | |
"oneOf": [] | |
} | |
}, | |
"required": [ | |
"type" | |
], | |
"additionalProperties": false | |
} | |
}, | |
"required": [ | |
"kind", | |
"spec" | |
], | |
"additionalProperties": false | |
}, | |
{ | |
"type": "object", | |
"description": "Service action", | |
"properties": { | |
"kind": { | |
"type": "string", | |
"examples": [ | |
"Service" | |
], | |
"description": "The kind of action.", | |
"const": "Service" | |
}, | |
"spec": { | |
"type": "object", | |
"properties": { | |
"type": { | |
"type": "string", | |
"enum": [ | |
"restart", | |
"execute" | |
] | |
}, | |
"data": { | |
"oneOf": [ | |
{ | |
"type": "object", | |
"properties": { | |
"serviceId": { | |
"description": "The id of the service to restart.", | |
"oneOf": [ | |
{ | |
"type": "string", | |
"examples": [ | |
"example-service" | |
], | |
"description": "The id of the service to restart.", | |
"pattern": "^[A-Za-z0-9-]+$" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{args\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*)}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{resources\\.((services|jobs|addons|secretGroups|pipelines)\\.([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{refs\\.(([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
} | |
] | |
} | |
}, | |
"required": [ | |
"serviceId" | |
], | |
"additionalProperties": false | |
}, | |
{ | |
"type": "object", | |
"properties": { | |
"serviceId": { | |
"description": "The id of the service to run the command in.", | |
"oneOf": [ | |
{ | |
"type": "string", | |
"examples": [ | |
"example-service" | |
], | |
"description": "The id of the service to run the command in.", | |
"pattern": "^[A-Za-z0-9-]+$" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{args\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*)}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{resources\\.((services|jobs|addons|secretGroups|pipelines)\\.([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{refs\\.(([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
} | |
] | |
}, | |
"command": { | |
"type": "string" | |
}, | |
"shell": { | |
"type": "string" | |
}, | |
"user": { | |
"type": "string" | |
}, | |
"group": { | |
"type": "string" | |
} | |
}, | |
"required": [ | |
"serviceId", | |
"command" | |
], | |
"additionalProperties": false | |
} | |
] | |
}, | |
"condition": { | |
"oneOf": [ | |
{ | |
"type": "string", | |
"const": "running" | |
} | |
] | |
} | |
}, | |
"required": [ | |
"type" | |
], | |
"additionalProperties": false | |
} | |
}, | |
"required": [ | |
"kind", | |
"spec" | |
], | |
"additionalProperties": false | |
}, | |
{ | |
"type": "object", | |
"description": "VCS action", | |
"properties": { | |
"kind": { | |
"type": "string", | |
"examples": [ | |
"VCS" | |
], | |
"description": "The kind of action.", | |
"const": "VCS" | |
}, | |
"spec": { | |
"type": "object", | |
"properties": { | |
"type": { | |
"type": "string", | |
"const": "createRepoFromSource" | |
}, | |
"data": { | |
"oneOf": [ | |
{ | |
"type": "object", | |
"properties": { | |
"sourceData": { | |
"type": "object", | |
"properties": { | |
"publicRepo": { | |
"type": "boolean" | |
}, | |
"vcsService": { | |
"type": "string" | |
}, | |
"oauthProvider": { | |
"type": "string" | |
}, | |
"repoUrl": { | |
"type": "string" | |
}, | |
"accountLogin": { | |
"type": "string" | |
}, | |
"selfHostedVcsId": { | |
"type": "string" | |
} | |
}, | |
"required": [ | |
"repoUrl" | |
], | |
"additionalProperties": false | |
}, | |
"targetData": { | |
"type": "object", | |
"properties": { | |
"name": { | |
"type": "string" | |
}, | |
"description": { | |
"type": "string" | |
}, | |
"privateRepo": { | |
"type": "boolean", | |
"default": false | |
}, | |
"context": { | |
"type": "string" | |
}, | |
"folder": { | |
"type": "string" | |
}, | |
"accountLogin": { | |
"type": "string" | |
}, | |
"oauthProvider": { | |
"type": "string" | |
}, | |
"vcsService": { | |
"type": "string" | |
}, | |
"selfHostedVcsId": { | |
"type": "string" | |
} | |
}, | |
"required": [ | |
"name", | |
"privateRepo" | |
], | |
"additionalProperties": false | |
} | |
}, | |
"required": [ | |
"sourceData", | |
"targetData" | |
], | |
"additionalProperties": false | |
} | |
] | |
} | |
}, | |
"required": [ | |
"type" | |
], | |
"additionalProperties": false | |
} | |
}, | |
"required": [ | |
"kind", | |
"spec" | |
], | |
"additionalProperties": false | |
} | |
] | |
} | |
}, | |
"required": [ | |
"kind", | |
"spec" | |
], | |
"additionalProperties": false | |
}, | |
{ | |
"type": "object", | |
"description": "Condition node", | |
"properties": { | |
"ref": { | |
"type": "string", | |
"description": "An identifier that can used to reference the output of this node later in the template." | |
}, | |
"kind": { | |
"type": "string", | |
"examples": [ | |
"Condition" | |
], | |
"description": "The kind of node.", | |
"const": "Condition" | |
}, | |
"spec": { | |
"description": "The specification for the Condition node.", | |
"oneOf": [ | |
{ | |
"type": "object", | |
"description": "Addon condition", | |
"properties": { | |
"kind": { | |
"type": "string", | |
"examples": [ | |
"Addon" | |
], | |
"description": "The kind of condition.", | |
"const": "Addon" | |
}, | |
"spec": { | |
"type": "object", | |
"properties": { | |
"type": { | |
"type": "string", | |
"const": "running" | |
}, | |
"data": { | |
"oneOf": [ | |
{ | |
"type": "object", | |
"properties": { | |
"addonId": { | |
"description": "The id of the addon to monitor.", | |
"oneOf": [ | |
{ | |
"type": "string", | |
"examples": [ | |
"example-addon" | |
], | |
"description": "The id of the addon to monitor.", | |
"pattern": "^[A-Za-z0-9-]+$" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{args\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*)}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{resources\\.((services|jobs|addons|secretGroups|pipelines)\\.([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{refs\\.(([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
} | |
] | |
} | |
}, | |
"required": [ | |
"addonId" | |
], | |
"additionalProperties": false | |
} | |
] | |
} | |
}, | |
"required": [ | |
"type" | |
], | |
"additionalProperties": false | |
} | |
}, | |
"required": [ | |
"kind", | |
"spec" | |
], | |
"additionalProperties": false | |
}, | |
{ | |
"type": "object", | |
"description": "AddonBackup condition", | |
"properties": { | |
"kind": { | |
"type": "string", | |
"examples": [ | |
"AddonBackup" | |
], | |
"description": "The kind of condition.", | |
"const": "AddonBackup" | |
}, | |
"spec": { | |
"type": "object", | |
"properties": { | |
"type": { | |
"type": "string", | |
"const": "success" | |
}, | |
"data": { | |
"oneOf": [ | |
{ | |
"type": "object", | |
"properties": { | |
"addonId": { | |
"description": "The id of the addon to monitor.", | |
"oneOf": [ | |
{ | |
"type": "string", | |
"examples": [ | |
"example-addon" | |
], | |
"description": "The id of the addon to monitor.", | |
"pattern": "^[A-Za-z0-9-]+$" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{args\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*)}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{resources\\.((services|jobs|addons|secretGroups|pipelines)\\.([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{refs\\.(([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
} | |
] | |
}, | |
"backupId": { | |
"description": "The id of the backup to monitor.", | |
"oneOf": [ | |
{ | |
"type": "string", | |
"examples": [ | |
"example-backup" | |
], | |
"description": "The id of the backup to monitor.", | |
"pattern": "^[A-Za-z0-9-]+$" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{args\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*)}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{resources\\.((services|jobs|addons|secretGroups|pipelines)\\.([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{refs\\.(([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
} | |
] | |
} | |
}, | |
"required": [ | |
"addonId", | |
"backupId" | |
], | |
"additionalProperties": false | |
} | |
] | |
} | |
}, | |
"required": [ | |
"type" | |
], | |
"additionalProperties": false | |
} | |
}, | |
"required": [ | |
"kind", | |
"spec" | |
], | |
"additionalProperties": false | |
}, | |
{ | |
"type": "object", | |
"description": "Build condition", | |
"properties": { | |
"kind": { | |
"type": "string", | |
"examples": [ | |
"Build" | |
], | |
"description": "The kind of condition.", | |
"const": "Build" | |
}, | |
"spec": { | |
"type": "object", | |
"properties": { | |
"type": { | |
"type": "string", | |
"const": "success" | |
}, | |
"data": { | |
"oneOf": [ | |
{ | |
"type": "object", | |
"properties": { | |
"buildId": { | |
"description": "The id of the build to monitor.", | |
"oneOf": [ | |
{ | |
"type": "string", | |
"examples": [ | |
"joyous-view-6290" | |
], | |
"description": "The id of the build to monitor.", | |
"pattern": "^[A-Za-z0-9-]+$" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{args\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*)}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{resources\\.((services|jobs|addons|secretGroups|pipelines)\\.([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{refs\\.(([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
} | |
] | |
} | |
}, | |
"required": [ | |
"buildId" | |
], | |
"additionalProperties": false | |
} | |
] | |
} | |
}, | |
"required": [ | |
"type" | |
], | |
"additionalProperties": false | |
} | |
}, | |
"required": [ | |
"kind", | |
"spec" | |
], | |
"additionalProperties": false | |
}, | |
{ | |
"type": "object", | |
"description": "JobRun condition", | |
"properties": { | |
"kind": { | |
"type": "string", | |
"examples": [ | |
"JobRun" | |
], | |
"description": "The kind of condition.", | |
"const": "JobRun" | |
}, | |
"spec": { | |
"type": "object", | |
"properties": { | |
"type": { | |
"type": "string", | |
"const": "success" | |
}, | |
"data": { | |
"oneOf": [ | |
{ | |
"type": "object", | |
"properties": { | |
"jobId": { | |
"description": "The id of the job to monitor.", | |
"oneOf": [ | |
{ | |
"type": "string", | |
"examples": [ | |
"example-job" | |
], | |
"description": "The id of the job to monitor.", | |
"pattern": "^[A-Za-z0-9-]+$" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{args\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*)}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{resources\\.((services|jobs|addons|secretGroups|pipelines)\\.([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{refs\\.(([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
} | |
] | |
}, | |
"runId": { | |
"description": "The id of the job run to monitor.", | |
"oneOf": [ | |
{ | |
"type": "string", | |
"examples": [ | |
"d34582a4-35bd-4c71-8e7c-e36999b88723" | |
], | |
"description": "The id of the job run to monitor." | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{args\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*)}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{resources\\.((services|jobs|addons|secretGroups|pipelines)\\.([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{refs\\.(([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
} | |
] | |
} | |
}, | |
"required": [ | |
"jobId", | |
"runId" | |
], | |
"additionalProperties": false | |
} | |
] | |
} | |
}, | |
"required": [ | |
"type" | |
], | |
"additionalProperties": false | |
} | |
}, | |
"required": [ | |
"kind", | |
"spec" | |
], | |
"additionalProperties": false | |
}, | |
{ | |
"type": "object", | |
"description": "Service condition", | |
"properties": { | |
"kind": { | |
"type": "string", | |
"examples": [ | |
"Service" | |
], | |
"description": "The kind of condition.", | |
"const": "Service" | |
}, | |
"spec": { | |
"type": "object", | |
"properties": { | |
"type": { | |
"type": "string", | |
"const": "running" | |
}, | |
"data": { | |
"oneOf": [ | |
{ | |
"type": "object", | |
"properties": { | |
"serviceId": { | |
"description": "The id of the service to monitor.", | |
"oneOf": [ | |
{ | |
"type": "string", | |
"examples": [ | |
"example-service" | |
], | |
"description": "The id of the service to monitor.", | |
"pattern": "^[A-Za-z0-9-]+$" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{args\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*)}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{resources\\.((services|jobs|addons|secretGroups|pipelines)\\.([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{refs\\.(([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
} | |
] | |
} | |
}, | |
"required": [ | |
"serviceId" | |
], | |
"additionalProperties": false | |
} | |
] | |
} | |
}, | |
"required": [ | |
"type" | |
], | |
"additionalProperties": false | |
} | |
}, | |
"required": [ | |
"kind", | |
"spec" | |
], | |
"additionalProperties": false | |
}, | |
{ | |
"type": "object", | |
"description": "VCS condition", | |
"properties": { | |
"kind": { | |
"type": "string", | |
"examples": [ | |
"VCS" | |
], | |
"description": "The kind of condition.", | |
"const": "VCS" | |
}, | |
"spec": { | |
"type": "object", | |
"properties": { | |
"type": { | |
"type": "string", | |
"const": "createRepoFromSourceSuccess" | |
}, | |
"data": { | |
"oneOf": [ | |
{ | |
"type": "object", | |
"properties": { | |
"trackerId": { | |
"description": "The tracker id outputted from the 'createRepoFromSource' action to monitor.", | |
"oneOf": [ | |
{ | |
"type": "objectId", | |
"examples": [ | |
"507f1f77bcf86cd799439011" | |
], | |
"description": "The tracker id outputted from the 'createRepoFromSource' action to monitor." | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{args\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*)}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{resources\\.((services|jobs|addons|secretGroups|pipelines)\\.([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
}, | |
{ | |
"type": "string", | |
"pattern": "\\$\\{refs\\.(([A-Za-z0-9=_-]+)\\.([A-Za-z0-9=_-]+(\\.([A-Za-z0-9=_-]+))*))}" | |
} | |
] | |
} | |
}, | |
"required": [ | |
"trackerId" | |
], | |
"additionalProperties": false | |
} | |
] | |
} | |
}, | |
"required": [ | |
"type" | |
], | |
"additionalProperties": false | |
} | |
}, | |
"required": [ | |
"kind", | |
"spec" | |
], | |
"additionalProperties": false | |
} | |
] | |
} | |
}, | |
"required": [ | |
"kind", | |
"spec" | |
], | |
"additionalProperties": false | |
} | |
] | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment