{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://catalog.lintel.tools/schemas/schemastore/moon-yml/latest.json",
  "description": "Configures information and tasks for a project. Docs: <https://moonrepo.dev/docs/config/project>",
  "x-lintel": {
    "source": "https://raw.githubusercontent.com/moonrepo/moon/master/website/static/schemas/project.json",
    "sourceSha256": "4d8d55790e87a1c14f9132309cf3381b548364de06dd3acc1245e14c22d02684",
    "fileMatch": [
      "moon.yml"
    ],
    "parsers": [
      "yaml"
    ]
  },
  "type": "object",
  "properties": {
    "$schema": {
      "title": "$schema",
      "default": "https://moonrepo.dev/schemas/project.json",
      "type": "string"
    },
    "dependsOn": {
      "title": "dependsOn",
      "description": "Other projects that this project depends on.",
      "type": "array",
      "items": {
        "$ref": "#/$defs/ProjectDependsOn"
      }
    },
    "docker": {
      "title": "docker",
      "description": "Configures Docker integration for this project.",
      "allOf": [
        {
          "$ref": "#/$defs/ProjectDockerConfig"
        }
      ]
    },
    "env": {
      "title": "env",
      "description": "A mapping of environment variables that will be set for all tasks within the project.",
      "type": "object",
      "propertyNames": {
        "type": "string"
      },
      "additionalProperties": {
        "type": "string"
      }
    },
    "fileGroups": {
      "title": "fileGroups",
      "description": "A mapping of group IDs to a list of file paths, globs, and environment variables, that can be referenced from tasks.",
      "type": "object",
      "propertyNames": {
        "$ref": "#/$defs/Id"
      },
      "additionalProperties": {
        "type": "array",
        "items": {
          "$ref": "#/$defs/Input"
        }
      }
    },
    "id": {
      "title": "id",
      "description": "Overrides the ID within the project graph, as defined in the workspace projects setting.",
      "anyOf": [
        {
          "$ref": "#/$defs/Id"
        },
        {
          "type": "null"
        }
      ],
      "markdownDescription": "Overrides the ID within the project graph, as defined in the workspace `projects` setting."
    },
    "language": {
      "title": "language",
      "description": "The primary programming language of the project.",
      "default": "unknown",
      "allOf": [
        {
          "$ref": "#/$defs/LanguageType"
        }
      ]
    },
    "layer": {
      "title": "layer",
      "description": "The layer within the project stack, for categorizing.",
      "default": "unknown",
      "allOf": [
        {
          "$ref": "#/$defs/LayerType"
        }
      ]
    },
    "owners": {
      "title": "owners",
      "description": "Defines ownership of source code within the current project, by mapping file paths and globs to owners. An owner is either a user, team, or group.",
      "allOf": [
        {
          "$ref": "#/$defs/OwnersConfig"
        }
      ]
    },
    "platform": {
      "title": "platform",
      "description": "The default platform for all tasks within the project, if their platform is unknown.",
      "default": "unknown",
      "deprecated": true,
      "anyOf": [
        {
          "$ref": "#/$defs/PlatformType"
        },
        {
          "type": "null"
        }
      ]
    },
    "project": {
      "title": "project",
      "description": "Expanded information about the project.",
      "anyOf": [
        {
          "$ref": "#/$defs/ProjectMetadataConfig"
        },
        {
          "type": "null"
        }
      ]
    },
    "stack": {
      "title": "stack",
      "description": "The technology stack of the project, for categorizing.",
      "default": "unknown",
      "allOf": [
        {
          "$ref": "#/$defs/StackType"
        }
      ]
    },
    "tags": {
      "title": "tags",
      "description": "A list of tags that this project belongs to, for categorizing, boundary enforcement, and task inheritance.",
      "type": "array",
      "items": {
        "$ref": "#/$defs/Id"
      }
    },
    "tasks": {
      "title": "tasks",
      "description": "A mapping of tasks by ID to parameters required for running the task.",
      "type": "object",
      "propertyNames": {
        "$ref": "#/$defs/Id"
      },
      "additionalProperties": {
        "$ref": "#/$defs/TaskConfig"
      }
    },
    "toolchain": {
      "title": "toolchain",
      "description": "Overrides top-level toolchain settings, scoped to this project.",
      "allOf": [
        {
          "$ref": "#/$defs/ProjectToolchainConfig"
        }
      ],
      "markdownDescription": "Overrides top-level toolchain settings, scoped to this project."
    },
    "type": {
      "title": "type",
      "description": "The layer within the project stack, for categorizing.",
      "default": "unknown",
      "allOf": [
        {
          "$ref": "#/$defs/LayerType"
        }
      ]
    },
    "workspace": {
      "title": "workspace",
      "description": "Overrides top-level workspace settings, scoped to this project.",
      "allOf": [
        {
          "$ref": "#/$defs/ProjectWorkspaceConfig"
        }
      ],
      "markdownDescription": "Overrides top-level workspace settings, scoped to this project."
    }
  },
  "$defs": {
    "DependencyScope": {
      "description": "The scope and or relationship of the dependency.",
      "type": "string",
      "enum": [
        "build",
        "development",
        "peer",
        "production",
        "root"
      ]
    },
    "DependencySource": {
      "description": "The source where the dependency comes from. Either explicitly defined in configuration, or implicitly derived from source files.",
      "type": "string",
      "enum": [
        "explicit",
        "implicit"
      ]
    },
    "FileGroupInput": {
      "description": "A file group input.",
      "type": "object",
      "properties": {
        "as": {
          "title": "as",
          "description": "Format to resolve the file group into.",
          "default": "static",
          "allOf": [
            {
              "$ref": "#/$defs/FileGroupInputFormat"
            }
          ]
        },
        "format": {
          "title": "format",
          "description": "Format to resolve the file group into.",
          "default": "static",
          "allOf": [
            {
              "$ref": "#/$defs/FileGroupInputFormat"
            }
          ]
        },
        "group": {
          "title": "group",
          "description": "The file group identifier.",
          "allOf": [
            {
              "$ref": "#/$defs/Id"
            }
          ]
        }
      },
      "additionalProperties": false
    },
    "FileGroupInputFormat": {
      "description": "Available formats to resolve the file group into.",
      "type": "string",
      "enum": [
        "static",
        "dirs",
        "envs",
        "files",
        "globs",
        "root"
      ]
    },
    "FileInput": {
      "description": "A file path input.",
      "type": "object",
      "properties": {
        "content": {
          "title": "content",
          "description": "Regex pattern to match the file's contents against when determining affected status.",
          "anyOf": [
            {
              "type": "string",
              "format": "regex"
            },
            {
              "type": "null"
            }
          ]
        },
        "file": {
          "title": "file",
          "description": "The literal file path.",
          "type": "string"
        },
        "optional": {
          "title": "optional",
          "description": "Mark the file as optional instead of logging a warning when hashing a task.",
          "anyOf": [
            {
              "type": "boolean"
            },
            {
              "type": "null"
            }
          ]
        }
      },
      "additionalProperties": false
    },
    "FileOutput": {
      "description": "A file path output.",
      "type": "object",
      "properties": {
        "file": {
          "title": "file",
          "description": "The literal file path.",
          "type": "string"
        },
        "optional": {
          "title": "optional",
          "description": "Mark the file as optional instead of failing with an error after running a task and the output doesn't exist.",
          "anyOf": [
            {
              "type": "boolean"
            },
            {
              "type": "null"
            }
          ]
        }
      },
      "additionalProperties": false
    },
    "GlobInput": {
      "description": "A glob pattern input.",
      "type": "object",
      "properties": {
        "cache": {
          "title": "cache",
          "description": "Cache the glob walking result for increased performance.",
          "default": true,
          "type": "boolean"
        },
        "glob": {
          "title": "glob",
          "description": "The glob pattern.",
          "type": "string"
        }
      },
      "additionalProperties": false
    },
    "GlobOutput": {
      "description": "A glob pattern output.",
      "type": "object",
      "properties": {
        "glob": {
          "title": "glob",
          "description": "The glob pattern.",
          "type": "string"
        },
        "optional": {
          "title": "optional",
          "description": "Mark the file as optional instead of failing with an error after running a task and the output doesn't exist.",
          "anyOf": [
            {
              "type": "boolean"
            },
            {
              "type": "null"
            }
          ]
        }
      },
      "additionalProperties": false
    },
    "Id": {
      "type": "string"
    },
    "Input": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "$ref": "#/$defs/FileInput"
        },
        {
          "$ref": "#/$defs/FileGroupInput"
        },
        {
          "$ref": "#/$defs/GlobInput"
        },
        {
          "$ref": "#/$defs/ProjectInput"
        }
      ]
    },
    "LanguageType": {
      "description": "Supported programming languages that each project can be written in.",
      "anyOf": [
        {
          "title": "Bash",
          "const": "bash"
        },
        {
          "title": "Batch",
          "const": "batch"
        },
        {
          "title": "Go",
          "const": "go"
        },
        {
          "title": "JavaScript",
          "const": "javascript"
        },
        {
          "title": "Php",
          "const": "php"
        },
        {
          "title": "Python",
          "const": "python"
        },
        {
          "title": "Ruby",
          "const": "ruby"
        },
        {
          "title": "Rust",
          "const": "rust"
        },
        {
          "title": "TypeScript",
          "const": "typescript"
        },
        {
          "title": "Unknown",
          "description": "Not explicitly set or detected.",
          "const": "unknown"
        },
        {
          "title": "Other",
          "description": "An unsupported language.",
          "type": "string"
        }
      ]
    },
    "LayerType": {
      "description": "The layer within the project stack, for categorizing.",
      "type": "string",
      "enum": [
        "application",
        "automation",
        "configuration",
        "library",
        "scaffolding",
        "tool",
        "unknown"
      ]
    },
    "Output": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "$ref": "#/$defs/FileOutput"
        },
        {
          "$ref": "#/$defs/GlobOutput"
        }
      ]
    },
    "OwnersConfig": {
      "description": "Defines ownership of source code within the current project, by mapping file paths and globs to owners. An owner is either a user, team, or group.",
      "type": "object",
      "properties": {
        "customGroups": {
          "title": "customGroups",
          "description": "Bitbucket only. A mapping of custom groups (prefixed with @@@), to a list of user and normal groups.",
          "type": "object",
          "markdownDescription": "Bitbucket only. A mapping of custom groups (prefixed with `@@@`), to a list of user and normal groups.",
          "propertyNames": {
            "type": "string"
          },
          "additionalProperties": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        },
        "defaultOwner": {
          "title": "defaultOwner",
          "description": "The default owner for paths.",
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "markdownDescription": "The default owner for `paths`."
        },
        "optional": {
          "title": "optional",
          "description": "GitLab only. Marks the code owners section as optional.",
          "type": "boolean"
        },
        "paths": {
          "title": "paths",
          "description": "A mapping of file paths and file globs to owners. When a list, the defaultOwner is the owner, and each item is a path. When an object, the key is a path, and the value is a list of owners.",
          "allOf": [
            {
              "$ref": "#/$defs/OwnersPaths"
            }
          ],
          "markdownDescription": "A mapping of file paths and file globs to owners. When a list, the `defaultOwner` is the owner, and each item is a path. When an object, the key is a path, and the value is a list of owners."
        },
        "requiredApprovals": {
          "title": "requiredApprovals",
          "description": "Bitbucket and GitLab only. The number of approvals required for the request to be satisfied. For Bitbucket, utilizes the Check() condition. For GitLab, marks the code owners section as required.",
          "anyOf": [
            {
              "type": "number"
            },
            {
              "type": "null"
            }
          ],
          "markdownDescription": "Bitbucket and GitLab only. The number of approvals required for the request to be satisfied. For Bitbucket, utilizes the `Check()` condition. For GitLab, marks the code owners section as required."
        }
      },
      "additionalProperties": false
    },
    "OwnersPaths": {
      "description": "A mapping of file paths and file globs to owners.",
      "anyOf": [
        {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        {
          "type": "object",
          "propertyNames": {
            "type": "string"
          },
          "additionalProperties": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        }
      ]
    },
    "PlatformType": {
      "description": "Platforms that each programming language can belong to.",
      "type": "string",
      "enum": [
        "bun",
        "deno",
        "node",
        "python",
        "rust",
        "system",
        "unknown"
      ]
    },
    "PluginLocator": {
      "description": "Strategies and protocols for locating plugins.",
      "type": "string"
    },
    "ProjectDependencyConfig": {
      "description": "Expanded information about a project dependency.",
      "type": "object",
      "properties": {
        "id": {
          "title": "id",
          "description": "ID of the depended on project.",
          "allOf": [
            {
              "$ref": "#/$defs/Id"
            }
          ]
        },
        "scope": {
          "title": "scope",
          "description": "Scope of the dependency relationship.",
          "default": "production",
          "allOf": [
            {
              "$ref": "#/$defs/DependencyScope"
            }
          ]
        },
        "source": {
          "title": "source",
          "description": "Source of where the dependency came from.",
          "default": "explicit",
          "allOf": [
            {
              "$ref": "#/$defs/DependencySource"
            }
          ]
        },
        "via": {
          "title": "via",
          "description": "Metadata about the source.",
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ]
        }
      },
      "additionalProperties": false
    },
    "ProjectDependsOn": {
      "description": "Expanded information about a project dependency.",
      "anyOf": [
        {
          "$ref": "#/$defs/Id"
        },
        {
          "$ref": "#/$defs/ProjectDependencyConfig"
        }
      ]
    },
    "ProjectDockerConfig": {
      "description": "Configures our Docker integration.",
      "type": "object",
      "properties": {
        "file": {
          "title": "file",
          "description": "Configures aspects of the Dockerfile generation process.",
          "allOf": [
            {
              "$ref": "#/$defs/ProjectDockerFileConfig"
            }
          ],
          "markdownDescription": "Configures aspects of the `Dockerfile` generation process."
        },
        "scaffold": {
          "title": "scaffold",
          "description": "Configures aspects of the Docker scaffolding process.",
          "allOf": [
            {
              "$ref": "#/$defs/ProjectDockerScaffoldConfig"
            }
          ]
        }
      },
      "additionalProperties": false
    },
    "ProjectDockerFileConfig": {
      "description": "Configures Dockerfile generation.",
      "type": "object",
      "properties": {
        "buildTask": {
          "title": "buildTask",
          "description": "A task within the current project for building the project.",
          "anyOf": [
            {
              "$ref": "#/$defs/Id"
            },
            {
              "type": "null"
            }
          ]
        },
        "image": {
          "title": "image",
          "description": "The base Docker image.",
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ]
        },
        "startTask": {
          "title": "startTask",
          "description": "A task within the current project for starting the project.",
          "anyOf": [
            {
              "$ref": "#/$defs/Id"
            },
            {
              "type": "null"
            }
          ]
        }
      },
      "markdownDescription": "Configures `Dockerfile` generation.",
      "additionalProperties": false
    },
    "ProjectDockerScaffoldConfig": {
      "description": "Configures aspects of the Docker scaffolding process.",
      "type": "object",
      "properties": {
        "include": {
          "title": "include",
          "description": "List of glob patterns, relative from the project root, to include (or exclude) in the sources skeleton.",
          "type": "array",
          "items": {
            "type": "string"
          }
        }
      },
      "additionalProperties": false
    },
    "ProjectInput": {
      "description": "An external project input.",
      "type": "object",
      "properties": {
        "fileGroup": {
          "title": "fileGroup",
          "description": "A file group identifier within the project in which to determine affected status.",
          "anyOf": [
            {
              "$ref": "#/$defs/Id"
            },
            {
              "type": "null"
            }
          ]
        },
        "filter": {
          "title": "filter",
          "description": "A list of globs, relative from the project's root, in which to determine affected status.",
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "group": {
          "title": "group",
          "description": "A file group identifier within the project in which to determine affected status.",
          "anyOf": [
            {
              "$ref": "#/$defs/Id"
            },
            {
              "type": "null"
            }
          ]
        },
        "project": {
          "title": "project",
          "description": "The external project identifier.",
          "type": "string"
        }
      },
      "additionalProperties": false
    },
    "ProjectMetadataConfig": {
      "description": "Expanded information about the project.",
      "type": "object",
      "properties": {
        "channel": {
          "title": "channel",
          "description": "The Slack, Discord, etc, channel to discuss the project. Must start with a #.",
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "markdownDescription": "The Slack, Discord, etc, channel to discuss the project. Must start with a `#`."
        },
        "description": {
          "title": "description",
          "description": "A description on what the project does, and why it exists.",
          "type": "string"
        },
        "maintainers": {
          "title": "maintainers",
          "description": "The individual maintainers of the project. The format is unspecified.",
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "metadata": {
          "title": "metadata",
          "description": "Custom metadata fields.",
          "type": "object",
          "propertyNames": {
            "type": "string"
          },
          "additionalProperties": {
            "type": [
              "boolean",
              "object",
              "array",
              "number",
              "string",
              "integer"
            ]
          }
        },
        "name": {
          "title": "name",
          "description": "A human-readable name of the project.",
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "markdownDescription": "A human-readable name of the project."
        },
        "owner": {
          "title": "owner",
          "description": "The owner of the project. Can be an individual, team, or organization. The format is unspecified.",
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ]
        }
      },
      "additionalProperties": false
    },
    "ProjectToolchainCommonToolConfig": {
      "description": "Overrides top-level toolchain settings.",
      "type": "object",
      "properties": {
        "version": {
          "title": "version",
          "description": "Version of the tool this project will use.",
          "anyOf": [
            {
              "$ref": "#/$defs/UnresolvedVersionSpec"
            },
            {
              "type": "null"
            }
          ]
        }
      },
      "markdownDescription": "Overrides top-level toolchain settings.",
      "additionalProperties": false
    },
    "ProjectToolchainConfig": {
      "description": "Overrides top-level toolchain settings, scoped to this project.",
      "type": "object",
      "properties": {
        "bun": {
          "title": "bun",
          "description": "Overrides bun settings.",
          "anyOf": [
            {
              "$ref": "#/$defs/ProjectToolchainCommonToolConfig"
            },
            {
              "type": "null"
            }
          ],
          "markdownDescription": "Overrides `bun` settings."
        },
        "default": {
          "title": "default",
          "description": "The default toolchain(s) for all tasks within the project, if their toolchain is unknown.",
          "anyOf": [
            {
              "anyOf": [
                {
                  "$ref": "#/$defs/Id"
                },
                {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Id"
                  }
                }
              ]
            },
            {
              "type": "null"
            }
          ]
        },
        "defaults": {
          "title": "defaults",
          "description": "The default toolchain(s) for all tasks within the project, if their toolchain is unknown.",
          "anyOf": [
            {
              "anyOf": [
                {
                  "$ref": "#/$defs/Id"
                },
                {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Id"
                  }
                }
              ]
            },
            {
              "type": "null"
            }
          ]
        },
        "deno": {
          "title": "deno",
          "description": "Overrides deno settings.",
          "anyOf": [
            {
              "$ref": "#/$defs/ProjectToolchainCommonToolConfig"
            },
            {
              "type": "null"
            }
          ],
          "markdownDescription": "Overrides `deno` settings."
        },
        "node": {
          "title": "node",
          "description": "Overrides node settings.",
          "anyOf": [
            {
              "$ref": "#/$defs/ProjectToolchainCommonToolConfig"
            },
            {
              "type": "null"
            }
          ],
          "markdownDescription": "Overrides `node` settings."
        },
        "plugins": {
          "title": "plugins",
          "description": "Overrides toolchains by their ID.",
          "type": "object",
          "propertyNames": {
            "$ref": "#/$defs/Id"
          },
          "additionalProperties": {
            "$ref": "#/$defs/ProjectToolchainEntry"
          }
        },
        "python": {
          "title": "python",
          "description": "Overrides python settings.",
          "anyOf": [
            {
              "$ref": "#/$defs/ProjectToolchainCommonToolConfig"
            },
            {
              "type": "null"
            }
          ],
          "markdownDescription": "Overrides `python` settings."
        },
        "rust": {
          "title": "rust",
          "description": "Overrides rust settings.",
          "anyOf": [
            {
              "$ref": "#/$defs/ProjectToolchainCommonToolConfig"
            },
            {
              "type": "null"
            }
          ],
          "markdownDescription": "Overrides `rust` settings."
        }
      },
      "markdownDescription": "Overrides top-level toolchain settings, scoped to this project.",
      "additionalProperties": false
    },
    "ProjectToolchainEntry": {
      "anyOf": [
        {
          "type": "null"
        },
        {
          "type": "boolean"
        },
        {
          "$ref": "#/$defs/ToolchainPluginConfig"
        }
      ]
    },
    "ProjectWorkspaceConfig": {
      "description": "Overrides top-level workspace settings, scoped to this project.",
      "type": "object",
      "properties": {
        "inheritedTasks": {
          "title": "inheritedTasks",
          "description": "Controls how tasks are inherited.",
          "allOf": [
            {
              "$ref": "#/$defs/ProjectWorkspaceInheritedTasksConfig"
            }
          ]
        }
      },
      "markdownDescription": "Overrides top-level workspace settings, scoped to this project.",
      "additionalProperties": false
    },
    "ProjectWorkspaceInheritedTasksConfig": {
      "description": "Controls how tasks are inherited.",
      "type": "object",
      "properties": {
        "exclude": {
          "title": "exclude",
          "description": "Excludes inheriting tasks by ID.",
          "type": "array",
          "items": {
            "$ref": "#/$defs/Id"
          }
        },
        "include": {
          "title": "include",
          "description": "Only inherits tasks by ID, and ignores the rest. When not defined, inherits all matching tasks. When an empty list, inherits no tasks.",
          "anyOf": [
            {
              "type": "array",
              "items": {
                "$ref": "#/$defs/Id"
              }
            },
            {
              "type": "null"
            }
          ]
        },
        "rename": {
          "title": "rename",
          "description": "Renames inherited tasks to a new ID.",
          "type": "object",
          "propertyNames": {
            "$ref": "#/$defs/Id"
          },
          "additionalProperties": {
            "$ref": "#/$defs/Id"
          }
        }
      },
      "additionalProperties": false
    },
    "StackType": {
      "description": "The technology stack of the project, for categorizing.",
      "type": "string",
      "enum": [
        "backend",
        "frontend",
        "infrastructure",
        "systems",
        "unknown"
      ]
    },
    "TaskArgs": {
      "description": "Configures a command to execute, and its arguments.",
      "anyOf": [
        {
          "type": "null"
        },
        {
          "type": "string"
        },
        {
          "type": "array",
          "items": {
            "type": "string"
          }
        }
      ]
    },
    "TaskConfig": {
      "description": "Configures a task to be ran within the action pipeline.",
      "type": "object",
      "properties": {
        "args": {
          "title": "args",
          "description": "Arguments to pass to the command when it's ran. Can be defined as a string, or a list of individual arguments.",
          "allOf": [
            {
              "$ref": "#/$defs/TaskArgs"
            }
          ]
        },
        "command": {
          "title": "command",
          "description": "The command or command line to execute when the task is ran. Supports the command name, with or without arguments. Can be defined as a string, or a list of individual arguments.",
          "allOf": [
            {
              "$ref": "#/$defs/TaskArgs"
            }
          ]
        },
        "deps": {
          "title": "deps",
          "description": "Other tasks that this task depends on, and must run to completion before this task is ran. Can depend on sibling tasks, or tasks in other projects, using targets.",
          "anyOf": [
            {
              "type": "array",
              "items": {
                "$ref": "#/$defs/TaskDependency"
              }
            },
            {
              "type": "null"
            }
          ]
        },
        "description": {
          "title": "description",
          "description": "A human-readable description about the task.",
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ]
        },
        "env": {
          "title": "env",
          "description": "A mapping of environment variables that will be set when the task is ran.",
          "anyOf": [
            {
              "type": "object",
              "propertyNames": {
                "type": "string"
              },
              "additionalProperties": {
                "type": "string"
              }
            },
            {
              "type": "null"
            }
          ]
        },
        "extends": {
          "title": "extends",
          "description": "Extends settings from a sibling task by ID.",
          "anyOf": [
            {
              "$ref": "#/$defs/Id"
            },
            {
              "type": "null"
            }
          ]
        },
        "inputs": {
          "title": "inputs",
          "description": "Inputs and sources that will mark the task as affected when comparing against touched files. When not provided, all files within the project are considered an input. When an empty list, no files are considered. Otherwise, an explicit list of inputs are considered.",
          "anyOf": [
            {
              "type": "array",
              "items": {
                "$ref": "#/$defs/Input"
              }
            },
            {
              "type": "null"
            }
          ]
        },
        "local": {
          "title": "local",
          "description": "Marks the task as local only. Local tasks do not run in CI, do not have options.cache enabled, and are marked as options.persistent.",
          "deprecated": true,
          "anyOf": [
            {
              "type": "boolean"
            },
            {
              "type": "null"
            }
          ],
          "markdownDescription": "Marks the task as local only. Local tasks do not run in CI, do not have `options.cache` enabled, and are marked as `options.persistent`."
        },
        "options": {
          "title": "options",
          "description": "Options to control task inheritance and execution.",
          "allOf": [
            {
              "$ref": "#/$defs/TaskOptionsConfig"
            }
          ]
        },
        "outputs": {
          "title": "outputs",
          "description": "Outputs that will be created when the task has successfully ran. When cache is enabled, the outputs will be persisted for subsequent runs.",
          "anyOf": [
            {
              "type": "array",
              "items": {
                "$ref": "#/$defs/Output"
              }
            },
            {
              "type": "null"
            }
          ],
          "markdownDescription": "Outputs that will be created when the task has successfully ran. When `cache` is enabled, the outputs will be persisted for subsequent runs."
        },
        "platform": {
          "title": "platform",
          "description": "The platform in which the task will be ran in. The platform determines available binaries, lookup paths, and more. When not provided, will be automatically detected.",
          "default": "unknown",
          "allOf": [
            {
              "$ref": "#/$defs/PlatformType"
            }
          ]
        },
        "preset": {
          "title": "preset",
          "description": "The preset to apply for the task. Will inherit default options.",
          "anyOf": [
            {
              "$ref": "#/$defs/TaskPreset"
            },
            {
              "type": "null"
            }
          ]
        },
        "script": {
          "title": "script",
          "description": "A script to run within a shell. A script is anything from a single command, to multiple commands (&&, etc), or shell specific syntax. Does not support arguments, merging, or inheritance.",
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ]
        },
        "toolchain": {
          "title": "toolchain",
          "description": "List of additional toolchain(s) in which the task will be ran in. The toolchain determines available binaries, lookup paths, and more. This list will be merged with detected toolchains.",
          "anyOf": [
            {
              "$ref": "#/$defs/Id"
            },
            {
              "type": "array",
              "items": {
                "$ref": "#/$defs/Id"
              }
            }
          ]
        },
        "toolchains": {
          "title": "toolchains",
          "description": "List of additional toolchain(s) in which the task will be ran in. The toolchain determines available binaries, lookup paths, and more. This list will be merged with detected toolchains.",
          "anyOf": [
            {
              "$ref": "#/$defs/Id"
            },
            {
              "type": "array",
              "items": {
                "$ref": "#/$defs/Id"
              }
            }
          ]
        },
        "type": {
          "title": "type",
          "description": "The type of task, primarily used for categorical reasons. When not provided, will be automatically determined.",
          "default": "test",
          "anyOf": [
            {
              "$ref": "#/$defs/TaskType"
            },
            {
              "type": "null"
            }
          ]
        }
      },
      "additionalProperties": false
    },
    "TaskDependency": {
      "description": "Configures another task that a task depends on.",
      "anyOf": [
        {
          "type": "string"
        },
        {
          "$ref": "#/$defs/TaskDependencyConfig"
        }
      ]
    },
    "TaskDependencyConfig": {
      "description": "Expanded information about a task dependency.",
      "type": "object",
      "properties": {
        "args": {
          "title": "args",
          "description": "Additional arguments to pass to this dependency when it's ran.",
          "allOf": [
            {
              "$ref": "#/$defs/TaskArgs"
            }
          ]
        },
        "env": {
          "title": "env",
          "description": "A mapping of environment variables specific to this dependency.",
          "type": "object",
          "propertyNames": {
            "type": "string"
          },
          "additionalProperties": {
            "type": "string"
          }
        },
        "optional": {
          "title": "optional",
          "description": "Marks the dependency is optional when being inherited from the top-level.",
          "anyOf": [
            {
              "type": "boolean"
            },
            {
              "type": "null"
            }
          ],
          "markdownDescription": "Marks the dependency is optional when being inherited from the top-level."
        },
        "target": {
          "title": "target",
          "description": "The target of the depended on task.",
          "type": "string"
        }
      },
      "additionalProperties": false
    },
    "TaskMergeStrategy": {
      "description": "The strategy in which to merge a specific task option.",
      "type": "string",
      "enum": [
        "append",
        "prepend",
        "preserve",
        "replace"
      ]
    },
    "TaskOperatingSystem": {
      "description": "The operating system in which to only run this task on.",
      "type": "string",
      "enum": [
        "linux",
        "macos",
        "windows"
      ]
    },
    "TaskOptionEnvFile": {
      "anyOf": [
        {
          "type": "boolean"
        },
        {
          "type": "string"
        },
        {
          "type": "array",
          "items": {
            "type": "string"
          }
        }
      ]
    },
    "TaskOptionsConfig": {
      "description": "Options to control task inheritance and execution.",
      "type": "object",
      "properties": {
        "affectedFiles": {
          "title": "affectedFiles",
          "description": "The pattern in which affected files will be passed to the task.",
          "anyOf": [
            {
              "anyOf": [
                {
                  "type": "boolean"
                },
                {
                  "type": "string",
                  "enum": [
                    "args",
                    "env"
                  ]
                }
              ]
            },
            {
              "type": "null"
            }
          ]
        },
        "affectedPassInputs": {
          "title": "affectedPassInputs",
          "description": "When affected and no files are matching, pass the task inputs as arguments to the command, instead of ..",
          "anyOf": [
            {
              "type": "boolean"
            },
            {
              "type": "null"
            }
          ],
          "markdownDescription": "When affected and no files are matching, pass the task inputs as arguments to the command, instead of `.`."
        },
        "allowFailure": {
          "title": "allowFailure",
          "description": "Allows the task to fail without failing the entire pipeline.",
          "anyOf": [
            {
              "type": "boolean"
            },
            {
              "type": "null"
            }
          ]
        },
        "cache": {
          "title": "cache",
          "description": "Caches the outputs of the task. Defaults to true if outputs are configured for the task.",
          "anyOf": [
            {
              "anyOf": [
                {
                  "type": "boolean"
                },
                {
                  "type": "string",
                  "enum": [
                    "local",
                    "remote"
                  ]
                }
              ]
            },
            {
              "type": "null"
            }
          ],
          "markdownDescription": "Caches the `outputs` of the task. Defaults to `true` if outputs are configured for the task."
        },
        "cacheKey": {
          "title": "cacheKey",
          "description": "A custom key to include in the cache hashing process. Can be used to invalidate local and remote caches.",
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ]
        },
        "cacheLifetime": {
          "title": "cacheLifetime",
          "description": "Lifetime to cache the task itself, in the format of \"1h\", \"30m\", etc. If not defined, caches live forever, or until inputs change.",
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ]
        },
        "envFile": {
          "title": "envFile",
          "description": "Loads and sets environment variables from the .env file when running the task.",
          "anyOf": [
            {
              "$ref": "#/$defs/TaskOptionEnvFile"
            },
            {
              "type": "null"
            }
          ],
          "markdownDescription": "Loads and sets environment variables from the `.env` file when running the task."
        },
        "inferInputs": {
          "title": "inferInputs",
          "description": "Automatically infer inputs from file groups or environment variables that were utilized within command, script, args, and env.",
          "anyOf": [
            {
              "type": "boolean"
            },
            {
              "type": "null"
            }
          ],
          "markdownDescription": "Automatically infer inputs from file groups or environment variables that were utilized within `command`, `script`, `args`, and `env`."
        },
        "interactive": {
          "title": "interactive",
          "description": "Marks the task as interactive, so that it will run in isolation, and have direct access to stdin.",
          "anyOf": [
            {
              "type": "boolean"
            },
            {
              "type": "null"
            }
          ]
        },
        "internal": {
          "title": "internal",
          "description": "Marks the task as internal, which disables it from begin ran from the command line, but can be depended on.",
          "anyOf": [
            {
              "type": "boolean"
            },
            {
              "type": "null"
            }
          ]
        },
        "merge": {
          "title": "merge",
          "description": "The default strategy to use when merging args, deps, env, inputs, or outputs with an inherited task. Can be overridden with the other field-specific merge options.",
          "default": "append",
          "anyOf": [
            {
              "$ref": "#/$defs/TaskMergeStrategy"
            },
            {
              "type": "null"
            }
          ],
          "markdownDescription": "The default strategy to use when merging `args`, `deps`, `env`, `inputs`, or `outputs` with an inherited task. Can be overridden with the other field-specific merge options."
        },
        "mergeArgs": {
          "title": "mergeArgs",
          "description": "The strategy to use when merging args with an inherited task.",
          "default": "append",
          "anyOf": [
            {
              "$ref": "#/$defs/TaskMergeStrategy"
            },
            {
              "type": "null"
            }
          ],
          "markdownDescription": "The strategy to use when merging `args` with an inherited task."
        },
        "mergeDeps": {
          "title": "mergeDeps",
          "description": "The strategy to use when merging deps with an inherited task.",
          "default": "append",
          "anyOf": [
            {
              "$ref": "#/$defs/TaskMergeStrategy"
            },
            {
              "type": "null"
            }
          ],
          "markdownDescription": "The strategy to use when merging `deps` with an inherited task."
        },
        "mergeEnv": {
          "title": "mergeEnv",
          "description": "The strategy to use when merging env with an inherited task.",
          "default": "append",
          "anyOf": [
            {
              "$ref": "#/$defs/TaskMergeStrategy"
            },
            {
              "type": "null"
            }
          ],
          "markdownDescription": "The strategy to use when merging `env` with an inherited task."
        },
        "mergeInputs": {
          "title": "mergeInputs",
          "description": "The strategy to use when merging inputs with an inherited task.",
          "default": "append",
          "anyOf": [
            {
              "$ref": "#/$defs/TaskMergeStrategy"
            },
            {
              "type": "null"
            }
          ],
          "markdownDescription": "The strategy to use when merging `inputs` with an inherited task."
        },
        "mergeOutputs": {
          "title": "mergeOutputs",
          "description": "The strategy to use when merging outputs with an inherited task.",
          "default": "append",
          "anyOf": [
            {
              "$ref": "#/$defs/TaskMergeStrategy"
            },
            {
              "type": "null"
            }
          ],
          "markdownDescription": "The strategy to use when merging `outputs` with an inherited task."
        },
        "mutex": {
          "title": "mutex",
          "description": "Creates an exclusive lock on a virtual resource, preventing other tasks using the same resource from running concurrently.",
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ]
        },
        "os": {
          "title": "os",
          "description": "The operating system in which to only run this task on.",
          "anyOf": [
            {
              "anyOf": [
                {
                  "$ref": "#/$defs/TaskOperatingSystem"
                },
                {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/TaskOperatingSystem"
                  }
                }
              ]
            },
            {
              "type": "null"
            }
          ]
        },
        "outputStyle": {
          "title": "outputStyle",
          "description": "The style in which task output will be printed to the console.",
          "default": "buffer",
          "anyOf": [
            {
              "$ref": "#/$defs/TaskOutputStyle"
            },
            {
              "type": "null"
            }
          ]
        },
        "persistent": {
          "title": "persistent",
          "description": "Marks the task as persistent (continuously running). This is ideal for watchers, servers, or never-ending processes.",
          "anyOf": [
            {
              "type": "boolean"
            },
            {
              "type": "null"
            }
          ],
          "markdownDescription": "Marks the task as persistent (continuously running). This is ideal for watchers, servers, or never-ending processes."
        },
        "priority": {
          "title": "priority",
          "description": "Marks the task with a certain priority, which determines the order in which it is ran within the pipeline.",
          "default": "normal",
          "anyOf": [
            {
              "$ref": "#/$defs/TaskPriority"
            },
            {
              "type": "null"
            }
          ]
        },
        "retryCount": {
          "title": "retryCount",
          "description": "The number of times a failing task will be retried to succeed.",
          "anyOf": [
            {
              "type": "number"
            },
            {
              "type": "null"
            }
          ]
        },
        "runDepsInParallel": {
          "title": "runDepsInParallel",
          "description": "Runs direct task dependencies (via deps) in sequential order. This does not apply to indirect or transient dependencies.",
          "anyOf": [
            {
              "type": "boolean"
            },
            {
              "type": "null"
            }
          ],
          "markdownDescription": "Runs direct task dependencies (via `deps`) in sequential order. This _does not_ apply to indirect or transient dependencies."
        },
        "runFromWorkspaceRoot": {
          "title": "runFromWorkspaceRoot",
          "description": "Runs the task from the workspace root, instead of the project root.",
          "anyOf": [
            {
              "type": "boolean"
            },
            {
              "type": "null"
            }
          ]
        },
        "runInCI": {
          "title": "runInCI",
          "description": "Whether to run the task in CI or not, when executing moon ci or moon run.",
          "anyOf": [
            {
              "anyOf": [
                {
                  "type": "boolean"
                },
                {
                  "type": "string",
                  "enum": [
                    "always",
                    "affected",
                    "only",
                    "skip"
                  ]
                }
              ]
            },
            {
              "type": "null"
            }
          ],
          "markdownDescription": "Whether to run the task in CI or not, when executing `moon ci` or `moon run`."
        },
        "shell": {
          "title": "shell",
          "description": "Runs the task within a shell. When not defined, runs the task directly while relying on PATH resolution.",
          "anyOf": [
            {
              "type": "boolean"
            },
            {
              "type": "null"
            }
          ],
          "markdownDescription": "Runs the task within a shell. When not defined, runs the task directly while relying on `PATH` resolution."
        },
        "timeout": {
          "title": "timeout",
          "description": "The maximum time in seconds that a task can run before being cancelled.",
          "anyOf": [
            {
              "type": "number"
            },
            {
              "type": "null"
            }
          ]
        },
        "unixShell": {
          "title": "unixShell",
          "description": "The shell to run the task in when on a Unix-based machine.",
          "default": "bash",
          "anyOf": [
            {
              "$ref": "#/$defs/TaskUnixShell"
            },
            {
              "type": "null"
            }
          ],
          "markdownDescription": "The shell to run the task in when on a Unix-based machine."
        },
        "windowsShell": {
          "title": "windowsShell",
          "description": "The shell to run the task in when on a Windows machine.",
          "default": "pwsh",
          "anyOf": [
            {
              "$ref": "#/$defs/TaskWindowsShell"
            },
            {
              "type": "null"
            }
          ]
        }
      },
      "additionalProperties": false
    },
    "TaskOutputStyle": {
      "description": "The style in which task output will be printed to the console.",
      "type": "string",
      "enum": [
        "buffer",
        "buffer-only-failure",
        "hash",
        "none",
        "stream"
      ]
    },
    "TaskPreset": {
      "description": "Preset options to inherit.",
      "type": "string",
      "enum": [
        "server",
        "watcher"
      ]
    },
    "TaskPriority": {
      "description": "The priority levels a task can be bucketed into.",
      "type": "string",
      "enum": [
        "critical",
        "high",
        "normal",
        "low"
      ]
    },
    "TaskType": {
      "description": "The type of task.",
      "type": "string",
      "enum": [
        "build",
        "run",
        "test"
      ]
    },
    "TaskUnixShell": {
      "description": "A list of available shells on Unix.",
      "type": "string",
      "enum": [
        "bash",
        "elvish",
        "fish",
        "ion",
        "murex",
        "nu",
        "pwsh",
        "xonsh",
        "zsh"
      ]
    },
    "TaskWindowsShell": {
      "description": "A list of available shells on Windows.",
      "type": "string",
      "enum": [
        "bash",
        "elvish",
        "fish",
        "murex",
        "nu",
        "pwsh",
        "xonsh"
      ]
    },
    "ToolchainPluginConfig": {
      "description": "Configures an individual toolchain.",
      "type": "object",
      "properties": {
        "config": {
          "title": "config",
          "description": "Arbitrary configuration that'll be passed to the WASM plugin.",
          "type": "object",
          "propertyNames": {
            "type": "string"
          },
          "additionalProperties": {
            "type": [
              "boolean",
              "object",
              "array",
              "number",
              "string",
              "integer"
            ]
          }
        },
        "disabled": {
          "title": "disabled",
          "type": "boolean"
        },
        "plugin": {
          "title": "plugin",
          "description": "Location of the WASM plugin to use.",
          "anyOf": [
            {
              "$ref": "#/$defs/PluginLocator"
            },
            {
              "type": "null"
            }
          ]
        },
        "version": {
          "title": "version",
          "description": "The version of the toolchain to download and install.",
          "anyOf": [
            {
              "$ref": "#/$defs/UnresolvedVersionSpec"
            },
            {
              "type": "null"
            }
          ]
        },
        "versionFromPrototools": {
          "title": "versionFromPrototools",
          "description": "Inherit the version from the root .prototools. When true, matches using the same ID, otherwise a string can be provided for a custom ID.",
          "allOf": [
            {
              "$ref": "#/$defs/ToolchainPluginVersionFrom"
            }
          ],
          "markdownDescription": "Inherit the version from the root `.prototools`. When true, matches using the same ID, otherwise a string can be provided for a custom ID."
        }
      },
      "additionalProperties": false
    },
    "ToolchainPluginVersionFrom": {
      "description": "Strategy in which to inherit a version from .prototools.",
      "anyOf": [
        {
          "type": "boolean"
        },
        {
          "type": "string"
        }
      ],
      "markdownDescription": "Strategy in which to inherit a version from `.prototools`."
    },
    "UnresolvedVersionSpec": {
      "description": "Represents an unresolved version or alias that must be resolved to a fully-qualified version.",
      "type": "string",
      "markdownDescription": "Represents an unresolved version or alias that must be resolved to a fully-qualified version."
    }
  },
  "additionalProperties": false
}
