{ "$schema": "http://json-schema.org/draft-07/schema#", "$id": "https://www.codifycli.com/codify-schema.json", "title": "JSON schema for Codify configuration files", "type": "array", "items": { "oneOf": [ { "type": "object", "properties": { "type": { "description": "All project configs are of the type project", "type": "string", "const": "project" }, "version": { "description": "Semver version. Codify will throw an error if this is not satisfied", "type": "string", "pattern": "^([0-9]+)\\.([0-9]+)\\.([0-9]+)(?:-([0-9A-Za-z-]+(?:\\.[0-9A-Za-z-]+)*))?(?:\\+[0-9A-Za-z-]+)?$" }, "plugins": { "type": "object", "patternProperties": { ".*": { "type": "string" } } }, "description": { "description": "An optional description of the codify project", "type": "string" } }, "required": ["type"], "additionalProperties": false }, { "type": "object", "properties": { "email": { "type": "string", "description": "The global email to set for git" }, "username": { "type": "string", "description": "The global username to set for git" }, "name": { "description": "Optional name. Useful for specifying multiple resources of the same type", "type": "string", "pattern": "^[\\w-]+$" }, "dependsOn": { "type": "array", "items": { "type": "string" }, "uniqueItems": true }, "type": { "const": "git", "type": "string" } }, "additionalProperties": false, "required": [ "type" ], "description": "Resource type: \"git\" | Resource Schema" }, { "type": "object", "properties": { "name": { "description": "Optional name. Useful for specifying multiple resources of the same type", "type": "string", "pattern": "^[\\w-]+$" }, "dependsOn": { "type": "array", "items": { "type": "string" }, "uniqueItems": true }, "type": { "const": "xcode-tools", "type": "string" } }, "required": [ "type" ], "description": "Resource type: \"xcode-tools\" | Resource Schema" }, { "type": "object", "properties": { "path": { "type": "string", "description": "The path to append. This parameter cannot be used at the same time as paths" }, "paths": { "type": "array", "description": "Multiple paths to append. This parameter cannot be used at the same time as path", "items": { "type": "string" } }, "prepend": { "type": "boolean", "description": "Whether or not to prepend to the path." }, "name": { "description": "Optional name. Useful for specifying multiple resources of the same type", "type": "string", "pattern": "^[\\w-]+$" }, "dependsOn": { "type": "array", "items": { "type": "string" }, "uniqueItems": true }, "type": { "const": "path", "type": "string" } }, "additionalProperties": false, "required": [ "type" ], "description": "Resource type: \"path\" | Resource Schema" }, { "type": "object", "properties": { "alias": { "type": "string", "pattern": "^[^ \t\n/\\$`=|&;()<>'\"]*$", "description": "The path to append. This parameter cannot be used at the same time as paths" }, "value": { "type": "string", "description": "The alias value" }, "name": { "description": "Optional name. Useful for specifying multiple resources of the same type", "type": "string", "pattern": "^[\\w-]+$" }, "dependsOn": { "type": "array", "items": { "type": "string" }, "uniqueItems": true }, "type": { "const": "alias", "type": "string" } }, "required": [ "alias", "type" ], "additionalProperties": false, "description": "Resource type: \"alias\" | Resource Schema" }, { "type": "object", "properties": { "formulae": { "type": "array", "items": { "type": "string" } }, "casks": { "type": "array", "items": { "type": "string" } }, "taps": { "type": "array", "items": { "type": "string" } }, "directory": { "type": "string" }, "name": { "description": "Optional name. Useful for specifying multiple resources of the same type", "type": "string", "pattern": "^[\\w-]+$" }, "dependsOn": { "type": "array", "items": { "type": "string" }, "uniqueItems": true }, "type": { "const": "homebrew", "type": "string" } }, "additionalProperties": false, "required": [ "type" ], "description": "Resource type: \"homebrew\" | Resource Schema" }, { "type": "object", "properties": { "pythonVersions": { "type": "array", "items": { "type": "string" } }, "global": { "type": "string" }, "name": { "description": "Optional name. Useful for specifying multiple resources of the same type", "type": "string", "pattern": "^[\\w-]+$" }, "dependsOn": { "type": "array", "items": { "type": "string" }, "uniqueItems": true }, "type": { "const": "pyenv", "type": "string" } }, "additionalProperties": false, "required": [ "type" ], "description": "Resource type: \"pyenv\" | Resource Schema" }, { "type": "object", "properties": { "name": { "description": "Optional name. Useful for specifying multiple resources of the same type", "type": "string", "pattern": "^[\\w-]+$" }, "dependsOn": { "type": "array", "items": { "type": "string" }, "uniqueItems": true }, "type": { "const": "git-lfs", "type": "string" } }, "additionalProperties": false, "required": [ "type" ], "description": "Resource type: \"git-lfs\" | Resource Schema" }, { "type": "object", "properties": { "name": { "description": "Optional name. Useful for specifying multiple resources of the same type", "type": "string", "pattern": "^[\\w-]+$" }, "dependsOn": { "type": "array", "items": { "type": "string" }, "uniqueItems": true }, "type": { "const": "aws-cli", "type": "string" } }, "additionalProperties": false, "required": [ "type" ], "description": "Resource type: \"aws-cli\" | Resource Schema" }, { "type": "object", "properties": { "profile": { "type": "string", "description": "The aws profile that is being configured", "default": "default" }, "awsAccessKeyId": { "type": "string", "description": "The access key id from AWS" }, "awsSecretAccessKey": { "type": "string", "description": "The access key secret from AWS" }, "csvCredentials": { "type": "string", "description": "An AWS credentials file with access credentials" }, "region": { "type": "string", "description": "The region from AWS" }, "output": { "type": "string", "description": "The output format secret from AWS" }, "metadataServiceTimeout": { "type": "string", "description": "The metadata service timeout" }, "metadataServiceNumAttempts": { "type": "string", "description": "The metadata service num attempts" }, "name": { "description": "Optional name. Useful for specifying multiple resources of the same type", "type": "string", "pattern": "^[\\w-]+$" }, "dependsOn": { "type": "array", "items": { "type": "string" }, "uniqueItems": true }, "type": { "const": "aws-profile", "type": "string" } }, "oneOf": [ { "required": [ "awsAccessKeyId", "awsSecretAccessKey", "region" ] }, { "required": [ "csvCredentials", "region" ] } ], "additionalProperties": false, "required": [ "type" ], "description": "Resource type: \"aws-profile\" | Resource Schema" }, { "type": "object", "properties": { "directory": { "type": "string" }, "version": { "type": "string" }, "name": { "description": "Optional name. Useful for specifying multiple resources of the same type", "type": "string", "pattern": "^[\\w-]+$" }, "dependsOn": { "type": "array", "items": { "type": "string" }, "uniqueItems": true }, "type": { "const": "terraform", "type": "string" } }, "additionalProperties": false, "required": [ "type" ], "description": "Resource type: \"terraform\" | Resource Schema" }, { "type": "object", "properties": { "nodeVersions": { "type": "array", "items": { "type": "string" } }, "global": { "type": "string" }, "name": { "description": "Optional name. Useful for specifying multiple resources of the same type", "type": "string", "pattern": "^[\\w-]+$" }, "dependsOn": { "type": "array", "items": { "type": "string" }, "uniqueItems": true }, "type": { "const": "nvm", "type": "string" } }, "additionalProperties": false, "required": [ "type" ], "description": "Resource type: \"nvm\" | Resource Schema" }, { "type": "object", "properties": { "add": { "type": "array", "items": { "type": "string" } }, "global": { "type": "string" }, "name": { "description": "Optional name. Useful for specifying multiple resources of the same type", "type": "string", "pattern": "^[\\w-]+$" }, "dependsOn": { "type": "array", "items": { "type": "string" }, "uniqueItems": true }, "type": { "const": "jenv", "type": "string" } }, "additionalProperties": false, "required": [ "type" ], "description": "Resource type: \"jenv\" | Resource Schema" }, { "type": "object", "properties": { "name": { "description": "Optional name. Useful for specifying multiple resources of the same type", "type": "string", "pattern": "^[\\w-]+$" }, "dependsOn": { "type": "array", "items": { "type": "string" }, "uniqueItems": true }, "type": { "const": "pgcli", "type": "string" } }, "additionalProperties": false, "required": [ "type" ], "description": "Resource type: \"pgcli\" | Resource Schema" }, { "type": "object", "properties": { "directory": { "type": "string", "description": "The installation of VSCode. This value defaults to the Applications folder", "default": "/Applications" }, "name": { "description": "Optional name. Useful for specifying multiple resources of the same type", "type": "string", "pattern": "^[\\w-]+$" }, "dependsOn": { "type": "array", "items": { "type": "string" }, "uniqueItems": true }, "type": { "const": "vscode", "type": "string" } }, "additionalProperties": false, "required": [ "type" ], "description": "Resource type: \"vscode\" | Resource Schema" }, { "type": "object", "properties": { "repository": { "type": "string", "description": "Remote repository to clone repo from." }, "parentDirectory": { "type": "string", "description": "Parent directory to clone into. The folder name will use default git semantics which extracts the last part of the clone url. Only one of parentDirectory or directory can be specified" }, "directory": { "type": "string", "description": "Directory to clone contents into. This value is directly passed into git clone. This differs from parent directory in that the last part of the path will be the folder name of the repo" }, "autoVerifySSH": { "type": "boolean", "description": "Automatically verifies the ssh connection for ssh git clones. Defaults to true." }, "name": { "description": "Optional name. Useful for specifying multiple resources of the same type", "type": "string", "pattern": "^[\\w-]+$" }, "dependsOn": { "type": "array", "items": { "type": "string" }, "uniqueItems": true }, "type": { "const": "git-clone", "type": "string" } }, "additionalProperties": false, "oneOf": [ { "required": [ "repository", "directory" ] }, { "required": [ "repository", "parentDirectory" ] } ], "required": [ "type" ], "description": "Resource type: \"git-clone\" | Resource Schema" }, { "type": "object", "properties": { "version": { "type": "string", "description": "Android studios version. Visit: https://developer.android.com/studio/releases for version info" }, "directory": {}, "name": { "description": "Optional name. Useful for specifying multiple resources of the same type", "type": "string", "pattern": "^[\\w-]+$" }, "dependsOn": { "type": "array", "items": { "type": "string" }, "uniqueItems": true }, "type": { "const": "android-studio", "type": "string" } }, "additionalProperties": false, "required": [ "type" ], "description": "Resource type: \"android-studio\" | Resource Schema" }, { "type": "object", "properties": { "plugins": { "type": "array", "description": "Asdf plugins to install. See: https://github.com/asdf-community for a full list", "items": { "type": "string" } }, "name": { "description": "Optional name. Useful for specifying multiple resources of the same type", "type": "string", "pattern": "^[\\w-]+$" }, "dependsOn": { "type": "array", "items": { "type": "string" }, "uniqueItems": true }, "type": { "const": "asdf", "type": "string" } }, "additionalProperties": false, "required": [ "type" ], "description": "Resource type: \"asdf\" | Resource Schema" }, { "type": "object", "properties": { "plugin": { "type": "string", "description": "Asdf plugin name" }, "versions": { "type": "array", "description": "A list of versions to install", "items": { "type": "string" } }, "gitUrl": { "type": "string", "description": "The gitUrl of the plugin" }, "name": { "description": "Optional name. Useful for specifying multiple resources of the same type", "type": "string", "pattern": "^[\\w-]+$" }, "dependsOn": { "type": "array", "items": { "type": "string" }, "uniqueItems": true }, "type": { "const": "asdf-plugin", "type": "string" } }, "required": [ "plugin", "type" ], "additionalProperties": false, "description": "Resource type: \"asdf-plugin\" | Resource Schema" }, { "type": "object", "properties": { "plugin": { "type": "string", "description": "Asdf plugin name" }, "version": { "type": "string", "description": "A version to install" }, "name": { "description": "Optional name. Useful for specifying multiple resources of the same type", "type": "string", "pattern": "^[\\w-]+$" }, "dependsOn": { "type": "array", "items": { "type": "string" }, "uniqueItems": true }, "type": { "const": "asdf-global", "type": "string" } }, "required": [ "plugin", "version", "type" ], "additionalProperties": false, "description": "Resource type: \"asdf-global\" | Resource Schema" }, { "type": "object", "properties": { "plugin": { "type": "string", "description": "Asdf plugin name" }, "version": { "type": "string", "description": "A version to install" }, "directory": { "type": "string", "description": "A local install of the version. Provide the location to install the version. For the current directory use '.'" }, "directories": { "type": "array", "description": "An array of install locations for the specified version. For the current directory use '.", "items": { "type": "string" } }, "name": { "description": "Optional name. Useful for specifying multiple resources of the same type", "type": "string", "pattern": "^[\\w-]+$" }, "dependsOn": { "type": "array", "items": { "type": "string" }, "uniqueItems": true }, "type": { "const": "asdf-local", "type": "string" } }, "required": [ "plugin", "version", "type" ], "additionalProperties": false, "description": "Resource type: \"asdf-local\" | Resource Schema" }, { "type": "object", "properties": { "plugin": { "type": "string", "description": "Asdf plugin name" }, "versions": { "type": "array", "description": "A list of versions to install", "items": { "type": "string" } }, "directory": { "type": "string", "description": "The directory to run the install command" }, "name": { "description": "Optional name. Useful for specifying multiple resources of the same type", "type": "string", "pattern": "^[\\w-]+$" }, "dependsOn": { "type": "array", "items": { "type": "string" }, "uniqueItems": true }, "type": { "const": "asdf-install", "type": "string" } }, "oneOf": [ { "required": [ "plugin", "versions" ] }, { "required": [ "directory" ] } ], "additionalProperties": false, "required": [ "type" ], "description": "Resource type: \"asdf-install\" | Resource Schema" }, { "type": "object", "properties": { "keyType": { "type": "string", "description": "The type of key to create (the encryption algorithm used). This corresponds to the -t flag of ssh-keygen. This value defaults to ed25519.", "enum": [ "ecdsa", "ecdsa-sk", "ed25519", "ed25519-sk", "rsa" ] }, "comment": { "type": "string", "description": "Comment to add to the ssh key. Changing this value will not re-create the ssh key" }, "fileName": { "type": "string", "description": "Specifies the filename of the key file. This corresponds to the -f flag of ssh-keygen" }, "bits": { "type": "number", "description": "Specifies the number of bits in the key to create. This corresponds to the -b flag of ssh-keygen." }, "passphrase": { "type": "string", "description": "The passphrase to use. This parameter is required. To set an empty password set the value to the empty string: \"\"" }, "folder": { "type": "string", "description": "The folder to generate the ssh key in. Defaults to `$HOME/.ssh`" }, "name": { "description": "Optional name. Useful for specifying multiple resources of the same type", "type": "string", "pattern": "^[\\w-]+$" }, "dependsOn": { "type": "array", "items": { "type": "string" }, "uniqueItems": true }, "type": { "const": "ssh-key", "type": "string" } }, "required": [ "passphrase", "type" ], "additionalProperties": false, "description": "Resource type: \"ssh-key\" | Resource Schema" }, { "type": "object", "properties": { "hosts": { "description": "The host blocks inside of the ~/.ssh/config file. See http://man.openbsd.org/OpenBSD-current/man5/ssh_config.5 ", "type": "array", "items": { "type": "object", "description": "The individual host blocks inside of the ~/.ssh/config file", "properties": { "Host": { "type": "string", "description": "The host is usually the hostname argument given on the command line. Can accept ! and *" }, "Match": { "type": "string", "description": "Restricts the following declarations (up to the next Host or Match keyword) to be used only when the conditions following the Match keyword are satisfied" }, "AddKeysToAgent": { "type": "boolean", "description": "Specifies whether keys should be automatically added to a running ssh-agent(1)" }, "User": { "type": "string", "description": "Specifies the user to log in as. This can be useful when a different user name is used on different machines" }, "UseKeychain": { "type": "boolean", "description": "A UseKeychain option was introduced in macOS Sierra allowing users to specify whether they would like for the passphrase to be stored in the keychain" }, "IgnoreUnknown": { "type": "string", "description": "Specifies a pattern-list of unknown options to be ignored if they are encountered in configuration parsing" }, "Port": { "type": "number", "description": "Specifies the port number to connect on the remote host. The default is 22." }, "IdentityFile": { "type": "string", "description": "Specifies a file from which the user's ECDSA, authenticator-hosted ECDSA, Ed25519, authenticator-hosted Ed25519 or RSA authentication identity is read" }, "LogLevel": { "type": "string", "description": "Gives the verbosity level that is used when logging messages from ssh(1)." }, "Compression": { "type": "boolean", "description": "Specifies whether to use compression. The argument must be yes or no (the default)." }, "PreferredAuthentications": { "type": "string", "description": "Specifies the order in which the client should try authentication methods." }, "PasswordAuthentication": { "type": "boolean", "description": "Specifies whether to use password authentication." } }, "oneOf": [ { "required": [ "Host" ] }, { "required": [ "Match" ] } ] } }, "name": { "description": "Optional name. Useful for specifying multiple resources of the same type", "type": "string", "pattern": "^[\\w-]+$" }, "dependsOn": { "type": "array", "items": { "type": "string" }, "uniqueItems": true }, "type": { "const": "ssh-config", "type": "string" } }, "required": [ "hosts", "type" ], "additionalProperties": false, "description": "Resource type: \"ssh-config\" | Resource Schema" }, { "type": "object", "properties": { "path": { "type": "string", "description": "The path to the ssh key to add" }, "appleUseKeychain": { "type": "boolean", "description": "Corresponds to the --apple-use-keychain parameter. Controls whether the key should be loaded into the apple keychain. Only keys with a passphrase can be loaded" }, "name": { "description": "Optional name. Useful for specifying multiple resources of the same type", "type": "string", "pattern": "^[\\w-]+$" }, "dependsOn": { "type": "array", "items": { "type": "string" }, "uniqueItems": true }, "type": { "const": "ssh-add", "type": "string" } }, "required": [ "path", "type" ], "additionalProperties": false, "description": "Resource type: \"ssh-add\" | Resource Schema" } ] } }