-
Notifications
You must be signed in to change notification settings - Fork 281
Add task.json schema file #146
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,334 @@ | ||
| { | ||
| "$schema": "http://json-schema.org/draft-04/schema", | ||
| "id": "https://aka.ms/vsts-tasks.schema.json", | ||
| "title": "VSTS Tasks schema", | ||
| "type": "object", | ||
| "additionalProperties": false, | ||
| "properties": { | ||
| "id": { | ||
| "type": "string", | ||
| "description": "A unique guid for this task", | ||
| "pattern": "^[A-Fa-f0-9]{8}-[A-Fa-f0-9]{4}-[A-Fa-f0-9]{4}-[A-Fa-f0-9]{4}-[A-Fa-f0-9]{12}$" | ||
| }, | ||
| "name": { | ||
| "type": "string", | ||
| "description": "Name with no spaces", | ||
| "pattern": "^[A-Za-z0-9\\-]+$" | ||
| }, | ||
| "friendlyName": { | ||
| "type": "string", | ||
| "description": "Descriptive name (spaces allowed)" | ||
| }, | ||
| "description": { | ||
| "type": "string", | ||
| "description": "Detailed description of what your task does" | ||
| }, | ||
| "helpMarkDown": { | ||
| "type": "string" | ||
| }, | ||
| "author": { | ||
| "type": "string" | ||
| }, | ||
| "visibility": { | ||
| "type": "array", | ||
| "items": { | ||
| "type": "string", | ||
| "enum": [ | ||
| "Build", | ||
| "Release", | ||
| "Preview" | ||
| ] | ||
| } | ||
| }, | ||
| "runsOn": { | ||
| "type": "array", | ||
| "items": { | ||
| "type": "string", | ||
| "enum": [ | ||
| "Agent", | ||
| "MachineGroup", | ||
| "Server" | ||
| ] | ||
| } | ||
| }, | ||
| "category": { | ||
| "type": "string", | ||
| "description": "Where the task appears in VSTS", | ||
| "enum": [ | ||
| "Build", | ||
| "Utility", | ||
| "Test", | ||
| "Package", | ||
| "Deploy" | ||
| ] | ||
| }, | ||
| "groups": { | ||
| "type": "array", | ||
| "description": "Describes groups that task properties may be logically grouped by in the UI.", | ||
| "items": { | ||
| "type": "object", | ||
| "additionalProperties": false, | ||
| "required": [ | ||
| "name", | ||
| "displayName" | ||
| ], | ||
| "properties": { | ||
| "name": { | ||
| "type": "string" | ||
| }, | ||
| "displayName": { | ||
| "type": "string" | ||
| }, | ||
| "isExpanded": { | ||
| "type": "boolean" | ||
| }, | ||
| "tags": { | ||
| "type": "array", | ||
| "items": { | ||
| "type": "string", | ||
| "enum": [ | ||
| "Preview" | ||
| ] | ||
| } | ||
| } | ||
| } | ||
| } | ||
| }, | ||
| "demands": { | ||
| "type": "array", | ||
| "description": "Allows you to define a list of demands that a build agent requires to run this build task.", | ||
| "items": { | ||
| "type": "string" | ||
| } | ||
| }, | ||
| "minimumAgentVersion": { | ||
| "type": "string", | ||
| "pattern": "^\\d+\\.\\d+(\\.\\d+)?$" | ||
| }, | ||
| "version": { | ||
| "type": "object", | ||
| "additionalProperties": false, | ||
| "description": "Always update this when you release your task, so that the agents utilise the latest code.", | ||
| "required": [ | ||
| "Major", | ||
| "Minor", | ||
| "Patch" | ||
| ], | ||
| "properties": { | ||
| "Major": { | ||
| "type": "number" | ||
| }, | ||
| "Minor": { | ||
| "type": "number" | ||
| }, | ||
| "Patch": { | ||
| "type": "number" | ||
| } | ||
| } | ||
| }, | ||
| "instanceNameFormat": { | ||
| "type": "string", | ||
| "description": "This is how the task will be displayed within the build step list - you can use variable values by using $(variablename)" | ||
| }, | ||
| "inputs": { | ||
| "type": "array", | ||
| "items": { | ||
| "type": "object", | ||
| "additionalProperties": false, | ||
| "required": [ | ||
| "name", | ||
| "label", | ||
| "type" | ||
| ], | ||
| "properties": { | ||
| "name": { | ||
| "type": "string", | ||
| "description": "The variable name to use to store the user-supplied value", | ||
| "pattern": "^[A-Za-z][A-Za-z0-9]*$" | ||
| }, | ||
| "label": { | ||
| "type": "string", | ||
| "description": "The text displayed to the user for the input label" | ||
| }, | ||
| "type": { | ||
| "type": "string", | ||
| "description": "The type that dictates the control rendered to the user.", | ||
| "anyOf": [ | ||
| { | ||
| "enum": [ | ||
| "boolean", | ||
| "filePath", | ||
| "multiLine", | ||
| "pickList", | ||
| "radio", | ||
| "string" | ||
| ] | ||
| }, | ||
| { | ||
| "pattern": "^connectedService\\:.+$" | ||
| } | ||
| ] | ||
| }, | ||
| "defaultValue": { | ||
| "type": [ | ||
| "string", | ||
| "boolean" | ||
| ], | ||
| "description": "The default value to apply to this input." | ||
| }, | ||
| "required": { | ||
| "type": "boolean", | ||
| "description": "Whether the input is a required field (default is false).", | ||
| "default": false | ||
| }, | ||
| "helpMarkDown": { | ||
| "type": "string", | ||
| "description": "Help to be displayed when hovering over the help icon for the input. To display URLs use the format [Text To Display](http://Url)" | ||
| }, | ||
| "groupName": { | ||
| "type": "string", | ||
| "description": "Setting this to the name of a group defined in 'groups' will place the input into that group." | ||
| }, | ||
| "visibleRule": { | ||
| "type": "string", | ||
| "description": "Allow's you to define a rule which dictates when the input will be visible to a user, for example \"variableName = value\"" | ||
| }, | ||
| "properties": { | ||
| "type": "object", | ||
| "properties": { | ||
| "EditableOptions": { | ||
| "type": "string", | ||
| "enum": [ | ||
| "True", | ||
| "False" | ||
| ] | ||
| } | ||
| } | ||
| }, | ||
| "options": { | ||
| "type": "object", | ||
| "additionalProperties": true | ||
| } | ||
| } | ||
| } | ||
| }, | ||
| "dataSourceBindings": { | ||
| "type": "array", | ||
| "items": { | ||
| "type": "object", | ||
| "additionalProperties": false, | ||
| "properties": { | ||
| "target": { | ||
| "type": "string" | ||
| }, | ||
| "endpointId": { | ||
| "type": "string" | ||
| }, | ||
| "dataSourceName": { | ||
| "type": "string" | ||
| }, | ||
| "parameters": { | ||
| "type": "object" | ||
| }, | ||
| "resultTemplate": { | ||
| "type": "string" | ||
| } | ||
| } | ||
| } | ||
| }, | ||
| "sourceDefinitions": { | ||
| "type": "array", | ||
| "items": { | ||
| "type": "object", | ||
| "additionalProperties": false, | ||
| "properties": { | ||
| "target": { | ||
| "type": "string" | ||
| }, | ||
| "endpoint": { | ||
| "type": "string" | ||
| }, | ||
| "selector": { | ||
| "type": "string" | ||
| }, | ||
| "keySelector": { | ||
| "type": "string" | ||
| }, | ||
| "authKey": { | ||
| "type": "string" | ||
| } | ||
| } | ||
| } | ||
| }, | ||
| "execution": { | ||
| "type": "object", | ||
| "additionalProperties": false, | ||
| "description": "Execution options for this task", | ||
| "properties": { | ||
| "Node": { | ||
| "$ref": "#/definitions/executionObject" | ||
| }, | ||
| "Bash": { | ||
| "$ref": "#/definitions/executionObject" | ||
| }, | ||
| "AzurePowerShell": { | ||
| "$ref": "#/definitions/executionObject" | ||
| }, | ||
| "PowerShell": { | ||
| "$ref": "#/definitions/executionObject" | ||
| }, | ||
| "PowerShell3": { | ||
| "$ref": "#/definitions/executionObject" | ||
| }, | ||
| "PowerShellExe": { | ||
| "$ref": "#/definitions/executionObject" | ||
| }, | ||
| "Process": { | ||
| "$ref": "#/definitions/executionObject" | ||
| }, | ||
| "RM:ManualIntervention": { | ||
| "$ref": "#/definitions/executionObject" | ||
| } | ||
| } | ||
| }, | ||
| "messages": { | ||
| "type": "object" | ||
| }, | ||
| "$schema": { | ||
| "type": "string" | ||
| } | ||
| }, | ||
| "definitions": { | ||
| "executionObject": { | ||
| "type": "object", | ||
| "additionalProperties": true, | ||
| "properties": { | ||
| "target": { | ||
| "type": "string", | ||
| "description": "The target file to be executed. You can use variables here in brackets e.g. $(currentDirectory)\filename.ps1" | ||
| }, | ||
| "argumentFormat": { | ||
|
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. @bryanmacfarlane Is there a description for argumentFormat? I've searched but have not found what argument format is suppose to do. For most examples is just an empty string. Fox example: Can I pass arguments here?
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. It is from legacy handlers and it should not be used. |
||
| "type": "string" | ||
| }, | ||
| "workingDirectory": { | ||
| "type": "string", | ||
| "description": "The directory to execute the task from e.g. $(currentDirectory)" | ||
| }, | ||
| "modifyEnvironment": { | ||
| "type": [ | ||
| "boolean", | ||
| "string" | ||
| ] | ||
| }, | ||
| "platforms": { | ||
| "type": "array", | ||
| "items": { | ||
| "enum": [ | ||
| "windows" | ||
| ] | ||
| } | ||
| } | ||
| } | ||
| } | ||
| } | ||
| } | ||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Bash isn't an execution handler.
Not required in this merge, but I'm inclined to remove the ones that we really don't advertise for custom tasks (i.e. leave Node and PowerShell3 only). I might delete the other execution handlers from the schema after the merge and add them back as needed (hopefully not needed).
Also not all of the execution objects properties are the same for all handlers. I can track down those details after the merge.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks, @ericsciple. I developed this JSON schema to validate all the tasks in the vsts-tasks repo. So if you see values that aren't supposed to be there, there is probably some task in that repo that uses that value, just FYI.