{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://catalog.lintel.tools/schemas/schemastore/rockcraft/latest.json",
  "title": "Rockcraft project",
  "description": "Rockcraft project definition.",
  "x-lintel": {
    "source": "https://raw.githubusercontent.com/canonical/rockcraft/main/schema/rockcraft.json",
    "sourceSha256": "73c9bb7347f5bcb746a9a8dad797147d51321b0feafcfa6ae1cf9cd63bc77355",
    "fileMatch": [
      "rockcraft.yaml"
    ],
    "parsers": [
      "yaml"
    ]
  },
  "type": "object",
  "properties": {
    "name": {
      "description": "The name of the project. This is used when uploading, publishing, or installing.\n\nThe project name must consist only of lower-case ASCII letters (``a``-``z``), numerals\n(``0``-``9``), and hyphens (``-``). It must contain at least one letter, not start or\nend with a hyphen, and not contain two consecutive hyphens. The maximum length is 40\ncharacters.\n",
      "examples": [
        "ubuntu",
        "jupyterlab-desktop",
        "lxd",
        "digikam",
        "kafka",
        "mysql-router-k8s"
      ],
      "maxLength": 40,
      "minLength": 1,
      "title": "Project Name",
      "type": "string"
    },
    "title": {
      "anyOf": [
        {
          "description": "A human-readable title.",
          "examples": [
            "Ubuntu Linux",
            "Jupyter Lab Desktop",
            "LXD",
            "DigiKam",
            "Apache Kafka",
            "MySQL Router K8s charm"
          ],
          "maxLength": 40,
          "minLength": 2,
          "title": "Title",
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Title"
    },
    "version": {
      "anyOf": [
        {
          "description": "The version of the project, enclosed in quotation marks.",
          "examples": [
            "\"0.1\"",
            "\"1.0.0\"",
            "\"v1.0.0\"",
            "\"24.04\""
          ],
          "maxLength": 32,
          "title": "version string",
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Version"
    },
    "summary": {
      "description": "A short, single line description of the rock.",
      "title": "Summary",
      "type": "string"
    },
    "description": {
      "description": "A full description of the rock, potentially including multiple paragraphs.",
      "title": "Description",
      "type": "string"
    },
    "base": {
      "description": "The base system image for the rock.",
      "enum": [
        "bare",
        "ubuntu@20.04",
        "ubuntu@22.04",
        "ubuntu@24.04",
        "ubuntu@25.10",
        "ubuntu@26.04"
      ],
      "title": "Base",
      "type": "string"
    },
    "build-base": {
      "anyOf": [
        {
          "enum": [
            "ubuntu@20.04",
            "ubuntu@22.04",
            "ubuntu@24.04",
            "ubuntu@25.10",
            "devel"
          ],
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "The system used to build the rock.",
      "title": "Build-Base"
    },
    "platforms": {
      "type": "object",
      "description": "Determines which architectures the project builds and runs on.",
      "examples": [
        "{amd64: {build-on: [amd64], build-for: [amd64]}, arm64: {build-on: [amd64, arm64], build-for: [arm64]}}"
      ],
      "additionalProperties": {
        "oneOf": [
          {
            "type": "null"
          },
          {
            "$ref": "#/$defs/Platform"
          }
        ]
      },
      "propertyNames": {
        "description": "The name of this platform. May not contain '/'",
        "examples": [
          "riscv64",
          "my-special-platform"
        ],
        "not": {
          "enum": [
            "*",
            "any"
          ]
        }
      },
      "title": "Platforms",
      "patternProperties": {
        "(amd64|arm64|armhf|i386|ppc64el|riscv64|s390x)": {
          "anyOf": [
            {
              "type": "null"
            },
            {
              "properties": {
                "build-on": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "items": {
                        "type": "string"
                      },
                      "type": "array"
                    }
                  ],
                  "title": "Build-On"
                },
                "build-for": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "items": {
                        "type": "string"
                      },
                      "type": "array"
                    }
                  ],
                  "title": "Build-For"
                }
              },
              "required": [
                "build-on"
              ],
              "type": "object"
            }
          ]
        }
      }
    },
    "contact": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "items": {
            "type": "string"
          },
          "type": "array",
          "uniqueItems": true
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "The author's contact links and email addresses.",
      "examples": [
        "[contact@example.com, https://example.com/contact]"
      ],
      "title": "Contact"
    },
    "issues": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "items": {
            "type": "string"
          },
          "type": "array",
          "uniqueItems": true
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "The links and email addresses for submitting issues, bugs, and feature requests.",
      "examples": [
        "[issues@example.com, https://example.com/issues]"
      ],
      "title": "Issues"
    },
    "source-code": {
      "anyOf": [
        {
          "format": "uri",
          "minLength": 1,
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "The links to the source code of the project.",
      "examples": [
        "[https://github.com/canonical/craft-application]"
      ],
      "title": "Source-Code"
    },
    "license": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "The project's license as an SPDX expression",
      "examples": [
        "GPL-3.0+",
        "Apache-2.0"
      ],
      "title": "License"
    },
    "adopt-info": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Selects a part to inherit metadata from.",
      "examples": [
        "foo-part"
      ],
      "title": "Adopt-Info"
    },
    "parts": {
      "type": "object",
      "description": "The self-contained software pieces needed to create the final artifact.",
      "examples": [
        "{cloud-init:                 {plugin: python,                 source-type: git,                 source: https://git.launchpad.net/cloud-init}}"
      ],
      "title": "Parts",
      "additionalProperties": {
        "$ref": "#/$defs/Part"
      }
    },
    "package-repositories": {
      "anyOf": [
        {
          "items": {
            "type": "object",
            "additionalProperties": true
          },
          "type": "array"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "The package repositories to use for build and stage packages.",
      "examples": [
        "[{type: apt,                components: [main],                suites: [xenial],                key-id: 78E1918602959B9C59103100F1831DDAFC42E99D,                url: http://ppa.launchpad.net/snappy-dev/snapcraft-daily/ubuntu}]"
      ],
      "title": "Package-Repositories"
    },
    "environment": {
      "anyOf": [
        {
          "type": "object",
          "additionalProperties": {
            "type": "string"
          }
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Additional environment variables for the base image's OCI environment.",
      "title": "Environment"
    },
    "run-user": {
      "anyOf": [
        {
          "const": "_daemon_",
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "The default OCI user. If unset, runs as root.",
      "title": "Run-User"
    },
    "services": {
      "anyOf": [
        {
          "type": "object",
          "additionalProperties": {
            "$ref": "#/$defs/Service"
          }
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Services to run in the rock, using Pebble's layer specification syntax.",
      "title": "Services"
    },
    "checks": {
      "anyOf": [
        {
          "type": "object",
          "additionalProperties": {
            "oneOf": [
              {
                "$ref": "#/$defs/HttpCheck"
              },
              {
                "$ref": "#/$defs/TcpCheck"
              },
              {
                "$ref": "#/$defs/ExecCheck"
              }
            ]
          }
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Health checks for this rock.",
      "title": "Checks"
    },
    "entrypoint-service": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "The optional name of the Pebble service to serve as the entrypoint.",
      "examples": [
        "my-service"
      ],
      "title": "Entrypoint-Service"
    },
    "entrypoint-command": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Overrides the rock's default Pebble OCI entrypoint and CMD properties.",
      "examples": [
        "echo [ Hello ]"
      ],
      "title": "Entrypoint-Command"
    }
  },
  "additionalProperties": false,
  "required": [
    "name",
    "summary",
    "description",
    "base",
    "platforms",
    "parts"
  ],
  "$defs": {
    "ExecCheck": {
      "type": "object",
      "description": "Model for a check that executes a command.",
      "properties": {
        "override": {
          "description": "How this check is combined with another same-named check.",
          "enum": [
            "merge",
            "replace"
          ],
          "title": "Override",
          "type": "string"
        },
        "level": {
          "anyOf": [
            {
              "enum": [
                "alive",
                "ready"
              ],
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Check level, used for filtering checks when calling the health endpoint.",
          "title": "Level"
        },
        "period": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "How frequently to run this check.",
          "examples": [
            "10s",
            "30m"
          ],
          "title": "Period"
        },
        "timeout": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The time before the check fails if not completed. Must be less than ``period``.",
          "examples": [
            "5s",
            "2m"
          ],
          "title": "Timeout"
        },
        "threshold": {
          "anyOf": [
            {
              "minimum": 1,
              "type": "integer"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Number of consecutive errors before the check is considered failed.",
          "title": "Threshold"
        },
        "exec": {
          "$ref": "#/$defs/ExecCheckOptions"
        }
      },
      "required": [
        "override",
        "exec"
      ],
      "title": "ExecCheck",
      "additionalProperties": false
    },
    "ExecCheckOptions": {
      "type": "object",
      "description": "Lightweight schema validation for a Pebble exec check.",
      "properties": {
        "command": {
          "description": "The command to execute for this health check.",
          "examples": [
            "/usr/bin/health-check"
          ],
          "title": "Command",
          "type": "string"
        },
        "service-context": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Run the check as the given service's user and group, with that service's working directory and environment variables set.",
          "title": "Service-Context"
        },
        "environment": {
          "anyOf": [
            {
              "type": "object",
              "additionalProperties": {
                "type": "string"
              }
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "A mapping of environment variables with which to run the check.",
          "title": "Environment"
        },
        "user": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The user that will run the check.",
          "title": "User"
        },
        "user-id": {
          "anyOf": [
            {
              "minimum": 0,
              "type": "integer"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The UID of the user that will run the check.",
          "title": "User-Id"
        },
        "group": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The group name for the check process to run as.",
          "title": "Group"
        },
        "group-id": {
          "anyOf": [
            {
              "minimum": 0,
              "type": "integer"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The GID of the group that will run the check.",
          "title": "Group-Id"
        },
        "working-dir": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The working directory in which the command will run.",
          "title": "Working-Dir"
        }
      },
      "required": [
        "command"
      ],
      "title": "ExecCheckOptions",
      "additionalProperties": false
    },
    "FailureExitState": {
      "description": "What to do on a failure exit.",
      "enum": [
        "restart",
        "shutdown",
        "success-shutdown",
        "ignore"
      ],
      "title": "FailureExitState",
      "type": "string"
    },
    "HttpCheck": {
      "type": "object",
      "description": "Model for a check that uses HTTP.",
      "properties": {
        "override": {
          "description": "How this check is combined with another same-named check.",
          "enum": [
            "merge",
            "replace"
          ],
          "title": "Override",
          "type": "string"
        },
        "level": {
          "anyOf": [
            {
              "enum": [
                "alive",
                "ready"
              ],
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Check level, used for filtering checks when calling the health endpoint.",
          "title": "Level"
        },
        "period": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "How frequently to run this check.",
          "examples": [
            "10s",
            "30m"
          ],
          "title": "Period"
        },
        "timeout": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The time before the check fails if not completed. Must be less than ``period``.",
          "examples": [
            "5s",
            "2m"
          ],
          "title": "Timeout"
        },
        "threshold": {
          "anyOf": [
            {
              "minimum": 1,
              "type": "integer"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Number of consecutive errors before the check is considered failed.",
          "title": "Threshold"
        },
        "http": {
          "$ref": "#/$defs/HttpCheckOptions"
        }
      },
      "required": [
        "override",
        "http"
      ],
      "title": "HttpCheck",
      "additionalProperties": false
    },
    "HttpCheckOptions": {
      "type": "object",
      "description": "Lightweight schema validation for a Pebble HTTP check.",
      "properties": {
        "url": {
          "description": "The URL to fetch",
          "examples": [
            "https://example.com/foo",
            "http://localhost/health-check"
          ],
          "format": "uri",
          "minLength": 1,
          "title": "Url",
          "type": "string"
        },
        "headers": {
          "anyOf": [
            {
              "type": "object",
              "additionalProperties": {
                "type": "string"
              }
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Headers to send with the HTTP request.",
          "examples": [
            {
              "X-Health-Check": "true"
            }
          ],
          "title": "Headers"
        }
      },
      "required": [
        "url"
      ],
      "title": "HttpCheckOptions",
      "additionalProperties": false
    },
    "Platform": {
      "type": "object",
      "description": "A single platform entry in the platforms dictionary.\n\nThis model defines how a single value under the ``platforms`` key works for a project.",
      "properties": {
        "build-on": {
          "anyOf": [
            {
              "items": {
                "type": "string"
              },
              "type": "array",
              "uniqueItems": true
            },
            {
              "type": "string"
            }
          ],
          "examples": [
            "amd64",
            [
              "arm64",
              "riscv64"
            ]
          ],
          "minLength": 1,
          "title": "Build-On"
        },
        "build-for": {
          "oneOf": [
            {
              "title": "Build-For",
              "minItems": 1,
              "uniqueItems": true,
              "type": "array",
              "items": {
                "type": "string"
              }
            },
            {
              "title": "Build-For",
              "type": "string"
            }
          ]
        }
      },
      "required": [
        "build-on",
        "build-for"
      ],
      "title": "Platform",
      "additionalProperties": false
    },
    "Service": {
      "type": "object",
      "description": "Lightweight schema validation for a Pebble service.\n\nBased on\n<https://canonical-pebble.readthedocs-hosted.com/en/latest/reference/layer-specification/>",
      "properties": {
        "override": {
          "description": "Whether to replace pre-existing service definitions or merge them.",
          "enum": [
            "merge",
            "replace"
          ],
          "title": "Override",
          "type": "string"
        },
        "command": {
          "description": "The command used to run the service.",
          "examples": [
            "/usr/bin/ls",
            "/usr/bin/somedaemon --db=/db/path [ --port 8080 ]"
          ],
          "title": "Command",
          "type": "string"
        },
        "summary": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "A short summary of the service.",
          "title": "Summary"
        },
        "description": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "A detailed, potentially multi-line, description of the service.",
          "title": "Description"
        },
        "startup": {
          "anyOf": [
            {
              "enum": [
                "enabled",
                "disabled"
              ],
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Whether the service is enabled automatically when the rock starts.",
          "title": "Startup"
        },
        "after": {
          "anyOf": [
            {
              "items": {
                "type": "string"
              },
              "type": "array"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The names of other services that this service should start after.",
          "title": "After"
        },
        "before": {
          "anyOf": [
            {
              "items": {
                "type": "string"
              },
              "type": "array"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The names of other services that this service should start before.",
          "title": "Before"
        },
        "requires": {
          "anyOf": [
            {
              "items": {
                "type": "string"
              },
              "type": "array"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The names of other services that this service requires in order to start.",
          "title": "Requires"
        },
        "environment": {
          "anyOf": [
            {
              "type": "object",
              "additionalProperties": {
                "type": "string"
              }
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Environment variables to set for this process.",
          "title": "Environment"
        },
        "user": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Run the service as this user.",
          "title": "User"
        },
        "user-id": {
          "anyOf": [
            {
              "type": "integer"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Run the service with this user ID.",
          "title": "User-Id"
        },
        "group": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Run the service as this group.",
          "title": "Group"
        },
        "group-id": {
          "anyOf": [
            {
              "type": "integer"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Run the service with this group ID.",
          "title": "Group-Id"
        },
        "working-dir": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Working directory for the service command.",
          "title": "Working-Dir"
        },
        "on-success": {
          "anyOf": [
            {
              "$ref": "#/$defs/SuccessExitState"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "What to do when the service exits with success."
        },
        "on-failure": {
          "anyOf": [
            {
              "$ref": "#/$defs/FailureExitState"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "What to do when the service exits with an error."
        },
        "on-check-failure": {
          "anyOf": [
            {
              "type": "object",
              "additionalProperties": {
                "$ref": "#/$defs/FailureExitState"
              }
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "What to do when a health check fails.",
          "title": "On-Check-Failure"
        },
        "backoff-delay": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Initial backoff delay for the 'restart' exit action.",
          "examples": [
            "500ms",
            "10s"
          ],
          "title": "Backoff-Delay"
        },
        "backoff-factor": {
          "anyOf": [
            {
              "minimum": 1.0,
              "type": "number"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Multiplication factor for backoff delay.",
          "examples": [
            "2.0",
            "1.000001"
          ],
          "title": "Backoff-Factor"
        },
        "backoff-limit": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Maximum backoff delay.",
          "examples": [
            "30s",
            "1m"
          ],
          "title": "Backoff-Limit"
        },
        "kill-delay": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "How long to wait after a SIGTERM and exit pebble uses SIGKILL.",
          "examples": [
            "10s",
            "1m"
          ],
          "title": "Kill-Delay"
        }
      },
      "required": [
        "override",
        "command"
      ],
      "title": "Service",
      "additionalProperties": false
    },
    "SuccessExitState": {
      "description": "What to do on exit success.",
      "enum": [
        "restart",
        "shutdown",
        "failure-shutdown",
        "ignore"
      ],
      "title": "SuccessExitState",
      "type": "string"
    },
    "TcpCheck": {
      "type": "object",
      "description": "Model for a check that uses TCP.",
      "properties": {
        "override": {
          "description": "How this check is combined with another same-named check.",
          "enum": [
            "merge",
            "replace"
          ],
          "title": "Override",
          "type": "string"
        },
        "level": {
          "anyOf": [
            {
              "enum": [
                "alive",
                "ready"
              ],
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Check level, used for filtering checks when calling the health endpoint.",
          "title": "Level"
        },
        "period": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "How frequently to run this check.",
          "examples": [
            "10s",
            "30m"
          ],
          "title": "Period"
        },
        "timeout": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The time before the check fails if not completed. Must be less than ``period``.",
          "examples": [
            "5s",
            "2m"
          ],
          "title": "Timeout"
        },
        "threshold": {
          "anyOf": [
            {
              "minimum": 1,
              "type": "integer"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Number of consecutive errors before the check is considered failed.",
          "title": "Threshold"
        },
        "tcp": {
          "$ref": "#/$defs/TcpCheckOptions"
        }
      },
      "required": [
        "override",
        "tcp"
      ],
      "title": "TcpCheck",
      "additionalProperties": false
    },
    "TcpCheckOptions": {
      "type": "object",
      "description": "Lightweight schema validation for a Pebble TCP check.",
      "properties": {
        "port": {
          "description": "The TCP port to check is open.",
          "maximum": 65535,
          "minimum": 1,
          "title": "Port",
          "type": "integer"
        },
        "host": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The hostname or IP address to check. Defaults to 'localhost'.",
          "examples": [
            "localhost",
            "::1",
            "127.0.0.1"
          ],
          "title": "Host"
        }
      },
      "required": [
        "port"
      ],
      "title": "TcpCheckOptions",
      "additionalProperties": false
    },
    "Part": {
      "description": "The part specification data.",
      "properties": {
        "plugin": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The plugin to build the part with.",
          "examples": [
            "python",
            "dump"
          ],
          "title": "Plugin",
          "enum": [
            "dump",
            "nil",
            "ant",
            "autotools",
            "cargo-use",
            "cmake",
            "dotnet",
            "go",
            "go-use",
            "gradle",
            "jlink",
            "make",
            "maven",
            "maven-use",
            "meson",
            "npm",
            "npm-use",
            "poetry",
            "python",
            "qmake",
            "ruby",
            "rust",
            "scons",
            "uv"
          ]
        },
        "source": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The location of the source files for the part.",
          "examples": [
            ".",
            "https://github.com/canonical/dqlite"
          ],
          "title": "Source"
        },
        "source-checksum": {
          "default": "",
          "description": "The checksum of the downloaded source, to ensure integrity.",
          "examples": [
            "sha256/1451d01ee3a21100340aed867d0b799f46f0b1749680028d38c3f5d0128fb8a7"
          ],
          "title": "Source-Checksum",
          "type": "string"
        },
        "source-channel": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Source-Channel"
        },
        "source-branch": {
          "default": "",
          "description": "The target branch for Git sources.",
          "examples": [
            "main",
            "hotfix/2.10"
          ],
          "title": "Source-Branch",
          "type": "string"
        },
        "source-commit": {
          "default": "",
          "description": "The target commit for Git sources.",
          "examples": [
            "36086af03fc4941a8ac219648ce77401743f3ae0"
          ],
          "title": "Source-Commit",
          "type": "string"
        },
        "source-depth": {
          "default": 0,
          "description": "The commit depth to fetch for Git sources.",
          "examples": [
            "1"
          ],
          "title": "Source-Depth",
          "type": "integer"
        },
        "source-subdir": {
          "default": "",
          "description": "The subdirectory of the unpacked source where the build will occur.",
          "examples": [
            "src",
            "demo_nodes_cpp"
          ],
          "title": "Source-Subdir",
          "type": "string"
        },
        "source-submodules": {
          "anyOf": [
            {
              "items": {
                "type": "string"
              },
              "type": "array"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The registered submodules to fetch from Git sources.",
          "examples": [
            "[third_party/googletest, third_party/jsoncpp]",
            "[libbpf]"
          ],
          "title": "Source-Submodules"
        },
        "source-tag": {
          "default": "",
          "description": "The target tag for Git sources.",
          "examples": [
            "1.0.1"
          ],
          "title": "Source-Tag",
          "type": "string"
        },
        "source-type": {
          "default": "",
          "description": "The format of the part's source.",
          "examples": [
            "git",
            "local"
          ],
          "title": "Source-Type",
          "type": "string"
        },
        "disable-parallel": {
          "default": false,
          "description": "Whether to disable CPU multithreading during the build step.",
          "examples": [
            "true"
          ],
          "title": "Disable-Parallel",
          "type": "boolean"
        },
        "after": {
          "default": [],
          "description": "The parts to process before starting this part's build.",
          "examples": [
            "[build-deps, daemon]"
          ],
          "items": {
            "type": "string"
          },
          "title": "After",
          "type": "array"
        },
        "overlay-packages": {
          "default": [],
          "description": "The packages to install in the part's layer.",
          "examples": [
            "[ed]"
          ],
          "items": {
            "type": "string"
          },
          "title": "Overlay-Packages",
          "type": "array"
        },
        "stage-snaps": {
          "default": [],
          "description": "The snaps to include in the stage environment.",
          "examples": [
            "[go/1.17, chisel/latest/candidate, mir-kiosk-x11]"
          ],
          "items": {
            "type": "string"
          },
          "title": "Stage-Snaps",
          "type": "array"
        },
        "stage-packages": {
          "default": [],
          "description": "The packages or Chisel slices to include in the stage environment.",
          "examples": [
            "[curl, libxml2]"
          ],
          "items": {
            "type": "string"
          },
          "title": "Stage-Packages",
          "type": "array"
        },
        "build-snaps": {
          "default": [],
          "description": "The snaps to install in the build environment.",
          "examples": [
            "[go/latest/stable, node/stable]"
          ],
          "items": {
            "type": "string"
          },
          "title": "Build-Snaps",
          "type": "array"
        },
        "build-packages": {
          "default": [],
          "description": "The packages to install in the build environment.",
          "examples": [
            "[git, libffi-dev, libssl-dev]"
          ],
          "items": {
            "type": "string"
          },
          "title": "Build-Packages",
          "type": "array"
        },
        "build-environment": {
          "default": [],
          "description": "The environment variables to define for the build step, as key-value pairs.",
          "examples": [
            "[{MESSAGE: \"Hello world!\"}, {NAME: \"Craft Parts\"}]"
          ],
          "items": {
            "type": "object",
            "additionalProperties": {
              "type": "string"
            }
          },
          "title": "Build-Environment",
          "type": "array"
        },
        "build-attributes": {
          "default": [],
          "description": "Identifiers that control specific behaviors during the build.",
          "examples": [
            "[enable-usrmerge]",
            "[disable-usrmerge]"
          ],
          "items": {
            "type": "string"
          },
          "title": "Build-Attributes",
          "type": "array"
        },
        "organize": {
          "type": "object",
          "description": "A map of files from the build directory to their destinations in the stage directory.",
          "examples": [
            "{hello.py: bin/hello}"
          ],
          "title": "Organize",
          "additionalProperties": {
            "type": "string"
          }
        },
        "overlay": {
          "description": "The files to copy from the part's layer to the stage directory.",
          "examples": [
            "[bin, usr/bin]",
            "[-etc/cloud/cloud.cfg.d/90_dpkg.cfg]"
          ],
          "items": {
            "type": "string"
          },
          "title": "Overlay",
          "type": "array"
        },
        "stage": {
          "description": "The files to copy from the build directory to the stage directory.",
          "examples": [
            "[usr/bin/*, usr/share]",
            "[-usr, zfsutils-linux]"
          ],
          "items": {
            "description": "relative path",
            "minLength": 1,
            "type": "string"
          },
          "title": "Stage",
          "type": "array"
        },
        "prime": {
          "description": "",
          "examples": [
            "[usr/lib/*/qt6/plugins/tls/*, -usr/share/thumbnailers]"
          ],
          "items": {
            "description": "relative path",
            "minLength": 1,
            "type": "string"
          },
          "title": "Prime",
          "type": "array"
        },
        "override-pull": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The commands to run instead of the default behavior of the pull step.",
          "examples": [
            "|\n  craftctl default\n  rm $CRAFT_PART_SRC/pyproject.toml"
          ],
          "title": "Override-Pull"
        },
        "overlay-script": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The commands to run after the part's overlay packages are installed.",
          "examples": [
            "|\n  rm -f ${CRAFT_OVERLAY}/usr/bin/vi ${CRAFT_OVERLAY}/usr/bin/vim*\n  rm -f ${CRAFT_OVERLAY}/usr/bin/emacs*\n  rm -f ${CRAFT_OVERLAY}/bin/nano"
          ],
          "title": "Overlay-Script"
        },
        "override-overlay": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Shell script to run inside the overlay chroot after mounting.",
          "examples": [
            "echo 'hello from chroot' > /root/test.txt"
          ],
          "title": "Override-Overlay"
        },
        "override-build": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The commands to run instead of the default behavior of the build step.",
          "examples": [
            "|\n  cd cmd/webhook\n  mkdir $CRAFT_PART_INSTALL/ko-app\n  go build -o $CRAFT_PART_INSTALL/ko-app/webhook -a ."
          ],
          "title": "Override-Build"
        },
        "override-stage": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The commands to run instead of the default behavior of the stage step.",
          "examples": [
            "|\n  craftctl default\n  chown -R 499 \"${CRAFT_PART_INSTALL}/entrypoint.sh\""
          ],
          "title": "Override-Stage"
        },
        "override-prime": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The commands to run instead of the default behavior of the prime step.",
          "examples": [
            "|\n  craftctl default\n  mkdir -p $CRAFT_PRIME/var/lib/mysql\n  mkdir -p $CRAFT_PRIME/var/lib/mysqld"
          ],
          "title": "Override-Prime"
        },
        "permissions": {
          "default": [],
          "description": "The ownership and permission settings for a set of files in the part's prime directory.",
          "examples": [
            "[{owner: 2000, group: 2000}, {path: srv/indico/start-indico.sh, mode: \"544\"}, {path: etc/, mode: \"755\"}]"
          ],
          "items": {
            "$ref": "#/$defs/Permissions"
          },
          "title": "Permissions",
          "type": "array"
        }
      },
      "title": "PartSpec",
      "type": "object",
      "allOf": [
        {
          "if": {
            "properties": {
              "plugin": {
                "const": "dump"
              }
            }
          },
          "then": {
            "$comment": "common properties had to be repeated here or they would be considered invalid by the schema validator otherwise",
            "properties": {
              "plugin": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "description": "The plugin to build the part with.",
                "examples": [
                  "python",
                  "dump"
                ],
                "title": "Plugin",
                "enum": [
                  "dump",
                  "nil",
                  "ant",
                  "autotools",
                  "cargo-use",
                  "cmake",
                  "dotnet",
                  "go",
                  "go-use",
                  "gradle",
                  "jlink",
                  "make",
                  "maven",
                  "maven-use",
                  "meson",
                  "npm",
                  "npm-use",
                  "poetry",
                  "python",
                  "qmake",
                  "ruby",
                  "rust",
                  "scons",
                  "uv"
                ]
              },
              "source": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "description": "The location of the source files for the part.",
                "examples": [
                  ".",
                  "https://github.com/canonical/dqlite"
                ],
                "title": "Source"
              },
              "source-checksum": {
                "default": "",
                "description": "The checksum of the downloaded source, to ensure integrity.",
                "examples": [
                  "sha256/1451d01ee3a21100340aed867d0b799f46f0b1749680028d38c3f5d0128fb8a7"
                ],
                "title": "Source-Checksum",
                "type": "string"
              },
              "source-channel": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "title": "Source-Channel"
              },
              "source-branch": {
                "default": "",
                "description": "The target branch for Git sources.",
                "examples": [
                  "main",
                  "hotfix/2.10"
                ],
                "title": "Source-Branch",
                "type": "string"
              },
              "source-commit": {
                "default": "",
                "description": "The target commit for Git sources.",
                "examples": [
                  "36086af03fc4941a8ac219648ce77401743f3ae0"
                ],
                "title": "Source-Commit",
                "type": "string"
              },
              "source-depth": {
                "default": 0,
                "description": "The commit depth to fetch for Git sources.",
                "examples": [
                  "1"
                ],
                "title": "Source-Depth",
                "type": "integer"
              },
              "source-subdir": {
                "default": "",
                "description": "The subdirectory of the unpacked source where the build will occur.",
                "examples": [
                  "src",
                  "demo_nodes_cpp"
                ],
                "title": "Source-Subdir",
                "type": "string"
              },
              "source-submodules": {
                "anyOf": [
                  {
                    "items": {
                      "type": "string"
                    },
                    "type": "array"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "description": "The registered submodules to fetch from Git sources.",
                "examples": [
                  "[third_party/googletest, third_party/jsoncpp]",
                  "[libbpf]"
                ],
                "title": "Source-Submodules"
              },
              "source-tag": {
                "default": "",
                "description": "The target tag for Git sources.",
                "examples": [
                  "1.0.1"
                ],
                "title": "Source-Tag",
                "type": "string"
              },
              "source-type": {
                "default": "",
                "description": "The format of the part's source.",
                "examples": [
                  "git",
                  "local"
                ],
                "title": "Source-Type",
                "type": "string"
              },
              "disable-parallel": {
                "default": false,
                "description": "Whether to disable CPU multithreading during the build step.",
                "examples": [
                  "true"
                ],
                "title": "Disable-Parallel",
                "type": "boolean"
              },
              "after": {
                "default": [],
                "description": "The parts to process before starting this part's build.",
                "examples": [
                  "[build-deps, daemon]"
                ],
                "items": {
                  "type": "string"
                },
                "title": "After",
                "type": "array"
              },
              "overlay-packages": {
                "default": [],
                "description": "The packages to install in the part's layer.",
                "examples": [
                  "[ed]"
                ],
                "items": {
                  "type": "string"
                },
                "title": "Overlay-Packages",
                "type": "array"
              },
              "stage-snaps": {
                "default": [],
                "description": "The snaps to include in the stage environment.",
                "examples": [
                  "[go/1.17, chisel/latest/candidate, mir-kiosk-x11]"
                ],
                "items": {
                  "type": "string"
                },
                "title": "Stage-Snaps",
                "type": "array"
              },
              "stage-packages": {
                "default": [],
                "description": "The packages or Chisel slices to include in the stage environment.",
                "examples": [
                  "[curl, libxml2]"
                ],
                "items": {
                  "type": "string"
                },
                "title": "Stage-Packages",
                "type": "array"
              },
              "build-snaps": {
                "default": [],
                "description": "The snaps to install in the build environment.",
                "examples": [
                  "[go/latest/stable, node/stable]"
                ],
                "items": {
                  "type": "string"
                },
                "title": "Build-Snaps",
                "type": "array"
              },
              "build-packages": {
                "default": [],
                "description": "The packages to install in the build environment.",
                "examples": [
                  "[git, libffi-dev, libssl-dev]"
                ],
                "items": {
                  "type": "string"
                },
                "title": "Build-Packages",
                "type": "array"
              },
              "build-environment": {
                "default": [],
                "description": "The environment variables to define for the build step, as key-value pairs.",
                "examples": [
                  "[{MESSAGE: \"Hello world!\"}, {NAME: \"Craft Parts\"}]"
                ],
                "items": {
                  "type": "object",
                  "additionalProperties": {
                    "type": "string"
                  }
                },
                "title": "Build-Environment",
                "type": "array"
              },
              "build-attributes": {
                "default": [],
                "description": "Identifiers that control specific behaviors during the build.",
                "examples": [
                  "[enable-usrmerge]",
                  "[disable-usrmerge]"
                ],
                "items": {
                  "type": "string"
                },
                "title": "Build-Attributes",
                "type": "array"
              },
              "organize": {
                "type": "object",
                "description": "A map of files from the build directory to their destinations in the stage directory.",
                "examples": [
                  "{hello.py: bin/hello}"
                ],
                "title": "Organize",
                "additionalProperties": {
                  "type": "string"
                }
              },
              "overlay": {
                "description": "The files to copy from the part's layer to the stage directory.",
                "examples": [
                  "[bin, usr/bin]",
                  "[-etc/cloud/cloud.cfg.d/90_dpkg.cfg]"
                ],
                "items": {
                  "type": "string"
                },
                "title": "Overlay",
                "type": "array"
              },
              "stage": {
                "description": "The files to copy from the build directory to the stage directory.",
                "examples": [
                  "[usr/bin/*, usr/share]",
                  "[-usr, zfsutils-linux]"
                ],
                "items": {
                  "description": "relative path",
                  "minLength": 1,
                  "type": "string"
                },
                "title": "Stage",
                "type": "array"
              },
              "prime": {
                "description": "",
                "examples": [
                  "[usr/lib/*/qt6/plugins/tls/*, -usr/share/thumbnailers]"
                ],
                "items": {
                  "description": "relative path",
                  "minLength": 1,
                  "type": "string"
                },
                "title": "Prime",
                "type": "array"
              },
              "override-pull": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "description": "The commands to run instead of the default behavior of the pull step.",
                "examples": [
                  "|\n  craftctl default\n  rm $CRAFT_PART_SRC/pyproject.toml"
                ],
                "title": "Override-Pull"
              },
              "overlay-script": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "description": "The commands to run after the part's overlay packages are installed.",
                "examples": [
                  "|\n  rm -f ${CRAFT_OVERLAY}/usr/bin/vi ${CRAFT_OVERLAY}/usr/bin/vim*\n  rm -f ${CRAFT_OVERLAY}/usr/bin/emacs*\n  rm -f ${CRAFT_OVERLAY}/bin/nano"
                ],
                "title": "Overlay-Script"
              },
              "override-overlay": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "description": "Shell script to run inside the overlay chroot after mounting.",
                "examples": [
                  "echo 'hello from chroot' > /root/test.txt"
                ],
                "title": "Override-Overlay"
              },
              "override-build": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "description": "The commands to run instead of the default behavior of the build step.",
                "examples": [
                  "|\n  cd cmd/webhook\n  mkdir $CRAFT_PART_INSTALL/ko-app\n  go build -o $CRAFT_PART_INSTALL/ko-app/webhook -a ."
                ],
                "title": "Override-Build"
              },
              "override-stage": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "description": "The commands to run instead of the default behavior of the stage step.",
                "examples": [
                  "|\n  craftctl default\n  chown -R 499 \"${CRAFT_PART_INSTALL}/entrypoint.sh\""
                ],
                "title": "Override-Stage"
              },
              "override-prime": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "description": "The commands to run instead of the default behavior of the prime step.",
                "examples": [
                  "|\n  craftctl default\n  mkdir -p $CRAFT_PRIME/var/lib/mysql\n  mkdir -p $CRAFT_PRIME/var/lib/mysqld"
                ],
                "title": "Override-Prime"
              },
              "permissions": {
                "default": [],
                "description": "The ownership and permission settings for a set of files in the part's prime directory.",
                "examples": [
                  "[{owner: 2000, group: 2000}, {path: srv/indico/start-indico.sh, mode: \"544\"}, {path: etc/, mode: \"755\"}]"
                ],
                "items": {
                  "$ref": "#/$defs/Permissions"
                },
                "title": "Permissions",
                "type": "array"
              }
            },
            "additionalProperties": false,
            "type": "object"
          }
        },
        {
          "if": {
            "properties": {
              "plugin": {
                "const": "nil"
              }
            }
          },
          "then": {
            "$comment": "common properties had to be repeated here or they would be considered invalid by the schema validator otherwise",
            "properties": {
              "plugin": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "description": "The plugin to build the part with.",
                "examples": [
                  "python",
                  "dump"
                ],
                "title": "Plugin",
                "enum": [
                  "dump",
                  "nil",
                  "ant",
                  "autotools",
                  "cargo-use",
                  "cmake",
                  "dotnet",
                  "go",
                  "go-use",
                  "gradle",
                  "jlink",
                  "make",
                  "maven",
                  "maven-use",
                  "meson",
                  "npm",
                  "npm-use",
                  "poetry",
                  "python",
                  "qmake",
                  "ruby",
                  "rust",
                  "scons",
                  "uv"
                ]
              },
              "source": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "description": "The location of the source files for the part.",
                "examples": [
                  ".",
                  "https://github.com/canonical/dqlite"
                ],
                "title": "Source"
              },
              "source-checksum": {
                "default": "",
                "description": "The checksum of the downloaded source, to ensure integrity.",
                "examples": [
                  "sha256/1451d01ee3a21100340aed867d0b799f46f0b1749680028d38c3f5d0128fb8a7"
                ],
                "title": "Source-Checksum",
                "type": "string"
              },
              "source-channel": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "title": "Source-Channel"
              },
              "source-branch": {
                "default": "",
                "description": "The target branch for Git sources.",
                "examples": [
                  "main",
                  "hotfix/2.10"
                ],
                "title": "Source-Branch",
                "type": "string"
              },
              "source-commit": {
                "default": "",
                "description": "The target commit for Git sources.",
                "examples": [
                  "36086af03fc4941a8ac219648ce77401743f3ae0"
                ],
                "title": "Source-Commit",
                "type": "string"
              },
              "source-depth": {
                "default": 0,
                "description": "The commit depth to fetch for Git sources.",
                "examples": [
                  "1"
                ],
                "title": "Source-Depth",
                "type": "integer"
              },
              "source-subdir": {
                "default": "",
                "description": "The subdirectory of the unpacked source where the build will occur.",
                "examples": [
                  "src",
                  "demo_nodes_cpp"
                ],
                "title": "Source-Subdir",
                "type": "string"
              },
              "source-submodules": {
                "anyOf": [
                  {
                    "items": {
                      "type": "string"
                    },
                    "type": "array"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "description": "The registered submodules to fetch from Git sources.",
                "examples": [
                  "[third_party/googletest, third_party/jsoncpp]",
                  "[libbpf]"
                ],
                "title": "Source-Submodules"
              },
              "source-tag": {
                "default": "",
                "description": "The target tag for Git sources.",
                "examples": [
                  "1.0.1"
                ],
                "title": "Source-Tag",
                "type": "string"
              },
              "source-type": {
                "default": "",
                "description": "The format of the part's source.",
                "examples": [
                  "git",
                  "local"
                ],
                "title": "Source-Type",
                "type": "string"
              },
              "disable-parallel": {
                "default": false,
                "description": "Whether to disable CPU multithreading during the build step.",
                "examples": [
                  "true"
                ],
                "title": "Disable-Parallel",
                "type": "boolean"
              },
              "after": {
                "default": [],
                "description": "The parts to process before starting this part's build.",
                "examples": [
                  "[build-deps, daemon]"
                ],
                "items": {
                  "type": "string"
                },
                "title": "After",
                "type": "array"
              },
              "overlay-packages": {
                "default": [],
                "description": "The packages to install in the part's layer.",
                "examples": [
                  "[ed]"
                ],
                "items": {
                  "type": "string"
                },
                "title": "Overlay-Packages",
                "type": "array"
              },
              "stage-snaps": {
                "default": [],
                "description": "The snaps to include in the stage environment.",
                "examples": [
                  "[go/1.17, chisel/latest/candidate, mir-kiosk-x11]"
                ],
                "items": {
                  "type": "string"
                },
                "title": "Stage-Snaps",
                "type": "array"
              },
              "stage-packages": {
                "default": [],
                "description": "The packages or Chisel slices to include in the stage environment.",
                "examples": [
                  "[curl, libxml2]"
                ],
                "items": {
                  "type": "string"
                },
                "title": "Stage-Packages",
                "type": "array"
              },
              "build-snaps": {
                "default": [],
                "description": "The snaps to install in the build environment.",
                "examples": [
                  "[go/latest/stable, node/stable]"
                ],
                "items": {
                  "type": "string"
                },
                "title": "Build-Snaps",
                "type": "array"
              },
              "build-packages": {
                "default": [],
                "description": "The packages to install in the build environment.",
                "examples": [
                  "[git, libffi-dev, libssl-dev]"
                ],
                "items": {
                  "type": "string"
                },
                "title": "Build-Packages",
                "type": "array"
              },
              "build-environment": {
                "default": [],
                "description": "The environment variables to define for the build step, as key-value pairs.",
                "examples": [
                  "[{MESSAGE: \"Hello world!\"}, {NAME: \"Craft Parts\"}]"
                ],
                "items": {
                  "type": "object",
                  "additionalProperties": {
                    "type": "string"
                  }
                },
                "title": "Build-Environment",
                "type": "array"
              },
              "build-attributes": {
                "default": [],
                "description": "Identifiers that control specific behaviors during the build.",
                "examples": [
                  "[enable-usrmerge]",
                  "[disable-usrmerge]"
                ],
                "items": {
                  "type": "string"
                },
                "title": "Build-Attributes",
                "type": "array"
              },
              "organize": {
                "type": "object",
                "description": "A map of files from the build directory to their destinations in the stage directory.",
                "examples": [
                  "{hello.py: bin/hello}"
                ],
                "title": "Organize",
                "additionalProperties": {
                  "type": "string"
                }
              },
              "overlay": {
                "description": "The files to copy from the part's layer to the stage directory.",
                "examples": [
                  "[bin, usr/bin]",
                  "[-etc/cloud/cloud.cfg.d/90_dpkg.cfg]"
                ],
                "items": {
                  "type": "string"
                },
                "title": "Overlay",
                "type": "array"
              },
              "stage": {
                "description": "The files to copy from the build directory to the stage directory.",
                "examples": [
                  "[usr/bin/*, usr/share]",
                  "[-usr, zfsutils-linux]"
                ],
                "items": {
                  "description": "relative path",
                  "minLength": 1,
                  "type": "string"
                },
                "title": "Stage",
                "type": "array"
              },
              "prime": {
                "description": "",
                "examples": [
                  "[usr/lib/*/qt6/plugins/tls/*, -usr/share/thumbnailers]"
                ],
                "items": {
                  "description": "relative path",
                  "minLength": 1,
                  "type": "string"
                },
                "title": "Prime",
                "type": "array"
              },
              "override-pull": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "description": "The commands to run instead of the default behavior of the pull step.",
                "examples": [
                  "|\n  craftctl default\n  rm $CRAFT_PART_SRC/pyproject.toml"
                ],
                "title": "Override-Pull"
              },
              "overlay-script": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "description": "The commands to run after the part's overlay packages are installed.",
                "examples": [
                  "|\n  rm -f ${CRAFT_OVERLAY}/usr/bin/vi ${CRAFT_OVERLAY}/usr/bin/vim*\n  rm -f ${CRAFT_OVERLAY}/usr/bin/emacs*\n  rm -f ${CRAFT_OVERLAY}/bin/nano"
                ],
                "title": "Overlay-Script"
              },
              "override-overlay": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "description": "Shell script to run inside the overlay chroot after mounting.",
                "examples": [
                  "echo 'hello from chroot' > /root/test.txt"
                ],
                "title": "Override-Overlay"
              },
              "override-build": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "description": "The commands to run instead of the default behavior of the build step.",
                "examples": [
                  "|\n  cd cmd/webhook\n  mkdir $CRAFT_PART_INSTALL/ko-app\n  go build -o $CRAFT_PART_INSTALL/ko-app/webhook -a ."
                ],
                "title": "Override-Build"
              },
              "override-stage": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "description": "The commands to run instead of the default behavior of the stage step.",
                "examples": [
                  "|\n  craftctl default\n  chown -R 499 \"${CRAFT_PART_INSTALL}/entrypoint.sh\""
                ],
                "title": "Override-Stage"
              },
              "override-prime": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "description": "The commands to run instead of the default behavior of the prime step.",
                "examples": [
                  "|\n  craftctl default\n  mkdir -p $CRAFT_PRIME/var/lib/mysql\n  mkdir -p $CRAFT_PRIME/var/lib/mysqld"
                ],
                "title": "Override-Prime"
              },
              "permissions": {
                "default": [],
                "description": "The ownership and permission settings for a set of files in the part's prime directory.",
                "examples": [
                  "[{owner: 2000, group: 2000}, {path: srv/indico/start-indico.sh, mode: \"544\"}, {path: etc/, mode: \"755\"}]"
                ],
                "items": {
                  "$ref": "#/$defs/Permissions"
                },
                "title": "Permissions",
                "type": "array"
              }
            },
            "additionalProperties": false,
            "type": "object"
          }
        },
        {
          "if": {
            "properties": {
              "plugin": {
                "const": "ant"
              }
            }
          },
          "then": {
            "$comment": "common properties had to be repeated here or they would be considered invalid by the schema validator otherwise",
            "properties": {
              "plugin": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "description": "The plugin to build the part with.",
                "examples": [
                  "python",
                  "dump"
                ],
                "title": "Plugin",
                "enum": [
                  "dump",
                  "nil",
                  "ant",
                  "autotools",
                  "cargo-use",
                  "cmake",
                  "dotnet",
                  "go",
                  "go-use",
                  "gradle",
                  "jlink",
                  "make",
                  "maven",
                  "maven-use",
                  "meson",
                  "npm",
                  "npm-use",
                  "poetry",
                  "python",
                  "qmake",
                  "ruby",
                  "rust",
                  "scons",
                  "uv"
                ]
              },
              "source": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "description": "The location of the source files for the part.",
                "examples": [
                  ".",
                  "https://github.com/canonical/dqlite"
                ],
                "title": "Source"
              },
              "ant-build-targets": {
                "default": [],
                "items": {
                  "type": "string"
                },
                "title": "Ant-Build-Targets",
                "type": "array"
              },
              "ant-build-file": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "title": "Ant-Build-File"
              },
              "ant-properties": {
                "type": "object",
                "default": {},
                "title": "Ant-Properties",
                "additionalProperties": {
                  "type": "string"
                }
              },
              "source-checksum": {
                "default": "",
                "description": "The checksum of the downloaded source, to ensure integrity.",
                "examples": [
                  "sha256/1451d01ee3a21100340aed867d0b799f46f0b1749680028d38c3f5d0128fb8a7"
                ],
                "title": "Source-Checksum",
                "type": "string"
              },
              "source-channel": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "title": "Source-Channel"
              },
              "source-branch": {
                "default": "",
                "description": "The target branch for Git sources.",
                "examples": [
                  "main",
                  "hotfix/2.10"
                ],
                "title": "Source-Branch",
                "type": "string"
              },
              "source-commit": {
                "default": "",
                "description": "The target commit for Git sources.",
                "examples": [
                  "36086af03fc4941a8ac219648ce77401743f3ae0"
                ],
                "title": "Source-Commit",
                "type": "string"
              },
              "source-depth": {
                "default": 0,
                "description": "The commit depth to fetch for Git sources.",
                "examples": [
                  "1"
                ],
                "title": "Source-Depth",
                "type": "integer"
              },
              "source-subdir": {
                "default": "",
                "description": "The subdirectory of the unpacked source where the build will occur.",
                "examples": [
                  "src",
                  "demo_nodes_cpp"
                ],
                "title": "Source-Subdir",
                "type": "string"
              },
              "source-submodules": {
                "anyOf": [
                  {
                    "items": {
                      "type": "string"
                    },
                    "type": "array"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "description": "The registered submodules to fetch from Git sources.",
                "examples": [
                  "[third_party/googletest, third_party/jsoncpp]",
                  "[libbpf]"
                ],
                "title": "Source-Submodules"
              },
              "source-tag": {
                "default": "",
                "description": "The target tag for Git sources.",
                "examples": [
                  "1.0.1"
                ],
                "title": "Source-Tag",
                "type": "string"
              },
              "source-type": {
                "default": "",
                "description": "The format of the part's source.",
                "examples": [
                  "git",
                  "local"
                ],
                "title": "Source-Type",
                "type": "string"
              },
              "disable-parallel": {
                "default": false,
                "description": "Whether to disable CPU multithreading during the build step.",
                "examples": [
                  "true"
                ],
                "title": "Disable-Parallel",
                "type": "boolean"
              },
              "after": {
                "default": [],
                "description": "The parts to process before starting this part's build.",
                "examples": [
                  "[build-deps, daemon]"
                ],
                "items": {
                  "type": "string"
                },
                "title": "After",
                "type": "array"
              },
              "overlay-packages": {
                "default": [],
                "description": "The packages to install in the part's layer.",
                "examples": [
                  "[ed]"
                ],
                "items": {
                  "type": "string"
                },
                "title": "Overlay-Packages",
                "type": "array"
              },
              "stage-snaps": {
                "default": [],
                "description": "The snaps to include in the stage environment.",
                "examples": [
                  "[go/1.17, chisel/latest/candidate, mir-kiosk-x11]"
                ],
                "items": {
                  "type": "string"
                },
                "title": "Stage-Snaps",
                "type": "array"
              },
              "stage-packages": {
                "default": [],
                "description": "The packages or Chisel slices to include in the stage environment.",
                "examples": [
                  "[curl, libxml2]"
                ],
                "items": {
                  "type": "string"
                },
                "title": "Stage-Packages",
                "type": "array"
              },
              "build-snaps": {
                "default": [],
                "description": "The snaps to install in the build environment.",
                "examples": [
                  "[go/latest/stable, node/stable]"
                ],
                "items": {
                  "type": "string"
                },
                "title": "Build-Snaps",
                "type": "array"
              },
              "build-packages": {
                "default": [],
                "description": "The packages to install in the build environment.",
                "examples": [
                  "[git, libffi-dev, libssl-dev]"
                ],
                "items": {
                  "type": "string"
                },
                "title": "Build-Packages",
                "type": "array"
              },
              "build-environment": {
                "default": [],
                "description": "The environment variables to define for the build step, as key-value pairs.",
                "examples": [
                  "[{MESSAGE: \"Hello world!\"}, {NAME: \"Craft Parts\"}]"
                ],
                "items": {
                  "type": "object",
                  "additionalProperties": {
                    "type": "string"
                  }
                },
                "title": "Build-Environment",
                "type": "array"
              },
              "build-attributes": {
                "default": [],
                "description": "Identifiers that control specific behaviors during the build.",
                "examples": [
                  "[enable-usrmerge]",
                  "[disable-usrmerge]"
                ],
                "items": {
                  "type": "string"
                },
                "title": "Build-Attributes",
                "type": "array"
              },
              "organize": {
                "type": "object",
                "description": "A map of files from the build directory to their destinations in the stage directory.",
                "examples": [
                  "{hello.py: bin/hello}"
                ],
                "title": "Organize",
                "additionalProperties": {
                  "type": "string"
                }
              },
              "overlay": {
                "description": "The files to copy from the part's layer to the stage directory.",
                "examples": [
                  "[bin, usr/bin]",
                  "[-etc/cloud/cloud.cfg.d/90_dpkg.cfg]"
                ],
                "items": {
                  "type": "string"
                },
                "title": "Overlay",
                "type": "array"
              },
              "stage": {
                "description": "The files to copy from the build directory to the stage directory.",
                "examples": [
                  "[usr/bin/*, usr/share]",
                  "[-usr, zfsutils-linux]"
                ],
                "items": {
                  "description": "relative path",
                  "minLength": 1,
                  "type": "string"
                },
                "title": "Stage",
                "type": "array"
              },
              "prime": {
                "description": "",
                "examples": [
                  "[usr/lib/*/qt6/plugins/tls/*, -usr/share/thumbnailers]"
                ],
                "items": {
                  "description": "relative path",
                  "minLength": 1,
                  "type": "string"
                },
                "title": "Prime",
                "type": "array"
              },
              "override-pull": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "description": "The commands to run instead of the default behavior of the pull step.",
                "examples": [
                  "|\n  craftctl default\n  rm $CRAFT_PART_SRC/pyproject.toml"
                ],
                "title": "Override-Pull"
              },
              "overlay-script": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "description": "The commands to run after the part's overlay packages are installed.",
                "examples": [
                  "|\n  rm -f ${CRAFT_OVERLAY}/usr/bin/vi ${CRAFT_OVERLAY}/usr/bin/vim*\n  rm -f ${CRAFT_OVERLAY}/usr/bin/emacs*\n  rm -f ${CRAFT_OVERLAY}/bin/nano"
                ],
                "title": "Overlay-Script"
              },
              "override-overlay": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "description": "Shell script to run inside the overlay chroot after mounting.",
                "examples": [
                  "echo 'hello from chroot' > /root/test.txt"
                ],
                "title": "Override-Overlay"
              },
              "override-build": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "description": "The commands to run instead of the default behavior of the build step.",
                "examples": [
                  "|\n  cd cmd/webhook\n  mkdir $CRAFT_PART_INSTALL/ko-app\n  go build -o $CRAFT_PART_INSTALL/ko-app/webhook -a ."
                ],
                "title": "Override-Build"
              },
              "override-stage": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "description": "The commands to run instead of the default behavior of the stage step.",
                "examples": [
                  "|\n  craftctl default\n  chown -R 499 \"${CRAFT_PART_INSTALL}/entrypoint.sh\""
                ],
                "title": "Override-Stage"
              },
              "override-prime": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "description": "The commands to run instead of the default behavior of the prime step.",
                "examples": [
                  "|\n  craftctl default\n  mkdir -p $CRAFT_PRIME/var/lib/mysql\n  mkdir -p $CRAFT_PRIME/var/lib/mysqld"
                ],
                "title": "Override-Prime"
              },
              "permissions": {
                "default": [],
                "description": "The ownership and permission settings for a set of files in the part's prime directory.",
                "examples": [
                  "[{owner: 2000, group: 2000}, {path: srv/indico/start-indico.sh, mode: \"544\"}, {path: etc/, mode: \"755\"}]"
                ],
                "items": {
                  "$ref": "#/$defs/Permissions"
                },
                "title": "Permissions",
                "type": "array"
              }
            },
            "additionalProperties": false,
            "type": "object"
          }
        },
        {
          "if": {
            "properties": {
              "plugin": {
                "const": "autotools"
              }
            }
          },
          "then": {
            "$comment": "common properties had to be repeated here or they would be considered invalid by the schema validator otherwise",
            "properties": {
              "plugin": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "description": "The plugin to build the part with.",
                "examples": [
                  "python",
                  "dump"
                ],
                "title": "Plugin",
                "enum": [
                  "dump",
                  "nil",
                  "ant",
                  "autotools",
                  "cargo-use",
                  "cmake",
                  "dotnet",
                  "go",
                  "go-use",
                  "gradle",
                  "jlink",
                  "make",
                  "maven",
                  "maven-use",
                  "meson",
                  "npm",
                  "npm-use",
                  "poetry",
                  "python",
                  "qmake",
                  "ruby",
                  "rust",
                  "scons",
                  "uv"
                ]
              },
              "source": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "description": "The location of the source files for the part.",
                "examples": [
                  ".",
                  "https://github.com/canonical/dqlite"
                ],
                "title": "Source"
              },
              "autotools-configure-parameters": {
                "default": [],
                "items": {
                  "type": "string"
                },
                "title": "Autotools-Configure-Parameters",
                "type": "array"
              },
              "autotools-bootstrap-parameters": {
                "default": [],
                "items": {
                  "type": "string"
                },
                "title": "Autotools-Bootstrap-Parameters",
                "type": "array"
              },
              "disable-parallel": {
                "default": false,
                "description": "Whether to disable CPU multithreading during the build step.",
                "examples": [
                  "true"
                ],
                "title": "Disable-Parallel",
                "type": "boolean"
              },
              "source-checksum": {
                "default": "",
                "description": "The checksum of the downloaded source, to ensure integrity.",
                "examples": [
                  "sha256/1451d01ee3a21100340aed867d0b799f46f0b1749680028d38c3f5d0128fb8a7"
                ],
                "title": "Source-Checksum",
                "type": "string"
              },
              "source-channel": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "title": "Source-Channel"
              },
              "source-branch": {
                "default": "",
                "description": "The target branch for Git sources.",
                "examples": [
                  "main",
                  "hotfix/2.10"
                ],
                "title": "Source-Branch",
                "type": "string"
              },
              "source-commit": {
                "default": "",
                "description": "The target commit for Git sources.",
                "examples": [
                  "36086af03fc4941a8ac219648ce77401743f3ae0"
                ],
                "title": "Source-Commit",
                "type": "string"
              },
              "source-depth": {
                "default": 0,
                "description": "The commit depth to fetch for Git sources.",
                "examples": [
                  "1"
                ],
                "title": "Source-Depth",
                "type": "integer"
              },
              "source-subdir": {
                "default": "",
                "description": "The subdirectory of the unpacked source where the build will occur.",
                "examples": [
                  "src",
                  "demo_nodes_cpp"
                ],
                "title": "Source-Subdir",
                "type": "string"
              },
              "source-submodules": {
                "anyOf": [
                  {
                    "items": {
                      "type": "string"
                    },
                    "type": "array"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "description": "The registered submodules to fetch from Git sources.",
                "examples": [
                  "[third_party/googletest, third_party/jsoncpp]",
                  "[libbpf]"
                ],
                "title": "Source-Submodules"
              },
              "source-tag": {
                "default": "",
                "description": "The target tag for Git sources.",
                "examples": [
                  "1.0.1"
                ],
                "title": "Source-Tag",
                "type": "string"
              },
              "source-type": {
                "default": "",
                "description": "The format of the part's source.",
                "examples": [
                  "git",
                  "local"
                ],
                "title": "Source-Type",
                "type": "string"
              },
              "after": {
                "default": [],
                "description": "The parts to process before starting this part's build.",
                "examples": [
                  "[build-deps, daemon]"
                ],
                "items": {
                  "type": "string"
                },
                "title": "After",
                "type": "array"
              },
              "overlay-packages": {
                "default": [],
                "description": "The packages to install in the part's layer.",
                "examples": [
                  "[ed]"
                ],
                "items": {
                  "type": "string"
                },
                "title": "Overlay-Packages",
                "type": "array"
              },
              "stage-snaps": {
                "default": [],
                "description": "The snaps to include in the stage environment.",
                "examples": [
                  "[go/1.17, chisel/latest/candidate, mir-kiosk-x11]"
                ],
                "items": {
                  "type": "string"
                },
                "title": "Stage-Snaps",
                "type": "array"
              },
              "stage-packages": {
                "default": [],
                "description": "The packages or Chisel slices to include in the stage environment.",
                "examples": [
                  "[curl, libxml2]"
                ],
                "items": {
                  "type": "string"
                },
                "title": "Stage-Packages",
                "type": "array"
              },
              "build-snaps": {
                "default": [],
                "description": "The snaps to install in the build environment.",
                "examples": [
                  "[go/latest/stable, node/stable]"
                ],
                "items": {
                  "type": "string"
                },
                "title": "Build-Snaps",
                "type": "array"
              },
              "build-packages": {
                "default": [],
                "description": "The packages to install in the build environment.",
                "examples": [
                  "[git, libffi-dev, libssl-dev]"
                ],
                "items": {
                  "type": "string"
                },
                "title": "Build-Packages",
                "type": "array"
              },
              "build-environment": {
                "default": [],
                "description": "The environment variables to define for the build step, as key-value pairs.",
                "examples": [
                  "[{MESSAGE: \"Hello world!\"}, {NAME: \"Craft Parts\"}]"
                ],
                "items": {
                  "type": "object",
                  "additionalProperties": {
                    "type": "string"
                  }
                },
                "title": "Build-Environment",
                "type": "array"
              },
              "build-attributes": {
                "default": [],
                "description": "Identifiers that control specific behaviors during the build.",
                "examples": [
                  "[enable-usrmerge]",
                  "[disable-usrmerge]"
                ],
                "items": {
                  "type": "string"
                },
                "title": "Build-Attributes",
                "type": "array"
              },
              "organize": {
                "type": "object",
                "description": "A map of files from the build directory to their destinations in the stage directory.",
                "examples": [
                  "{hello.py: bin/hello}"
                ],
                "title": "Organize",
                "additionalProperties": {
                  "type": "string"
                }
              },
              "overlay": {
                "description": "The files to copy from the part's layer to the stage directory.",
                "examples": [
                  "[bin, usr/bin]",
                  "[-etc/cloud/cloud.cfg.d/90_dpkg.cfg]"
                ],
                "items": {
                  "type": "string"
                },
                "title": "Overlay",
                "type": "array"
              },
              "stage": {
                "description": "The files to copy from the build directory to the stage directory.",
                "examples": [
                  "[usr/bin/*, usr/share]",
                  "[-usr, zfsutils-linux]"
                ],
                "items": {
                  "description": "relative path",
                  "minLength": 1,
                  "type": "string"
                },
                "title": "Stage",
                "type": "array"
              },
              "prime": {
                "description": "",
                "examples": [
                  "[usr/lib/*/qt6/plugins/tls/*, -usr/share/thumbnailers]"
                ],
                "items": {
                  "description": "relative path",
                  "minLength": 1,
                  "type": "string"
                },
                "title": "Prime",
                "type": "array"
              },
              "override-pull": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "description": "The commands to run instead of the default behavior of the pull step.",
                "examples": [
                  "|\n  craftctl default\n  rm $CRAFT_PART_SRC/pyproject.toml"
                ],
                "title": "Override-Pull"
              },
              "overlay-script": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "description": "The commands to run after the part's overlay packages are installed.",
                "examples": [
                  "|\n  rm -f ${CRAFT_OVERLAY}/usr/bin/vi ${CRAFT_OVERLAY}/usr/bin/vim*\n  rm -f ${CRAFT_OVERLAY}/usr/bin/emacs*\n  rm -f ${CRAFT_OVERLAY}/bin/nano"
                ],
                "title": "Overlay-Script"
              },
              "override-overlay": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "description": "Shell script to run inside the overlay chroot after mounting.",
                "examples": [
                  "echo 'hello from chroot' > /root/test.txt"
                ],
                "title": "Override-Overlay"
              },
              "override-build": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "description": "The commands to run instead of the default behavior of the build step.",
                "examples": [
                  "|\n  cd cmd/webhook\n  mkdir $CRAFT_PART_INSTALL/ko-app\n  go build -o $CRAFT_PART_INSTALL/ko-app/webhook -a ."
                ],
                "title": "Override-Build"
              },
              "override-stage": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "description": "The commands to run instead of the default behavior of the stage step.",
                "examples": [
                  "|\n  craftctl default\n  chown -R 499 \"${CRAFT_PART_INSTALL}/entrypoint.sh\""
                ],
                "title": "Override-Stage"
              },
              "override-prime": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "description": "The commands to run instead of the default behavior of the prime step.",
                "examples": [
                  "|\n  craftctl default\n  mkdir -p $CRAFT_PRIME/var/lib/mysql\n  mkdir -p $CRAFT_PRIME/var/lib/mysqld"
                ],
                "title": "Override-Prime"
              },
              "permissions": {
                "default": [],
                "description": "The ownership and permission settings for a set of files in the part's prime directory.",
                "examples": [
                  "[{owner: 2000, group: 2000}, {path: srv/indico/start-indico.sh, mode: \"544\"}, {path: etc/, mode: \"755\"}]"
                ],
                "items": {
                  "$ref": "#/$defs/Permissions"
                },
                "title": "Permissions",
                "type": "array"
              }
            },
            "additionalProperties": false,
            "type": "object"
          }
        },
        {
          "if": {
            "properties": {
              "plugin": {
                "const": "cargo-use"
              }
            }
          },
          "then": {
            "$comment": "common properties had to be repeated here or they would be considered invalid by the schema validator otherwise",
            "properties": {
              "plugin": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "description": "The plugin to build the part with.",
                "examples": [
                  "python",
                  "dump"
                ],
                "title": "Plugin",
                "enum": [
                  "dump",
                  "nil",
                  "ant",
                  "autotools",
                  "cargo-use",
                  "cmake",
                  "dotnet",
                  "go",
                  "go-use",
                  "gradle",
                  "jlink",
                  "make",
                  "maven",
                  "maven-use",
                  "meson",
                  "npm",
                  "npm-use",
                  "poetry",
                  "python",
                  "qmake",
                  "ruby",
                  "rust",
                  "scons",
                  "uv"
                ]
              },
              "source": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "description": "The location of the source files for the part.",
                "examples": [
                  ".",
                  "https://github.com/canonical/dqlite"
                ],
                "title": "Source"
              },
              "source-checksum": {
                "default": "",
                "description": "The checksum of the downloaded source, to ensure integrity.",
                "examples": [
                  "sha256/1451d01ee3a21100340aed867d0b799f46f0b1749680028d38c3f5d0128fb8a7"
                ],
                "title": "Source-Checksum",
                "type": "string"
              },
              "source-channel": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "title": "Source-Channel"
              },
              "source-branch": {
                "default": "",
                "description": "The target branch for Git sources.",
                "examples": [
                  "main",
                  "hotfix/2.10"
                ],
                "title": "Source-Branch",
                "type": "string"
              },
              "source-commit": {
                "default": "",
                "description": "The target commit for Git sources.",
                "examples": [
                  "36086af03fc4941a8ac219648ce77401743f3ae0"
                ],
                "title": "Source-Commit",
                "type": "string"
              },
              "source-depth": {
                "default": 0,
                "description": "The commit depth to fetch for Git sources.",
                "examples": [
                  "1"
                ],
                "title": "Source-Depth",
                "type": "integer"
              },
              "source-subdir": {
                "default": "",
                "description": "The subdirectory of the unpacked source where the build will occur.",
                "examples": [
                  "src",
                  "demo_nodes_cpp"
                ],
                "title": "Source-Subdir",
                "type": "string"
              },
              "source-submodules": {
                "anyOf": [
                  {
                    "items": {
                      "type": "string"
                    },
                    "type": "array"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "description": "The registered submodules to fetch from Git sources.",
                "examples": [
                  "[third_party/googletest, third_party/jsoncpp]",
                  "[libbpf]"
                ],
                "title": "Source-Submodules"
              },
              "source-tag": {
                "default": "",
                "description": "The target tag for Git sources.",
                "examples": [
                  "1.0.1"
                ],
                "title": "Source-Tag",
                "type": "string"
              },
              "source-type": {
                "default": "",
                "description": "The format of the part's source.",
                "examples": [
                  "git",
                  "local"
                ],
                "title": "Source-Type",
                "type": "string"
              },
              "disable-parallel": {
                "default": false,
                "description": "Whether to disable CPU multithreading during the build step.",
                "examples": [
                  "true"
                ],
                "title": "Disable-Parallel",
                "type": "boolean"
              },
              "after": {
                "default": [],
                "description": "The parts to process before starting this part's build.",
                "examples": [
                  "[build-deps, daemon]"
                ],
                "items": {
                  "type": "string"
                },
                "title": "After",
                "type": "array"
              },
              "overlay-packages": {
                "default": [],
                "description": "The packages to install in the part's layer.",
                "examples": [
                  "[ed]"
                ],
                "items": {
                  "type": "string"
                },
                "title": "Overlay-Packages",
                "type": "array"
              },
              "stage-snaps": {
                "default": [],
                "description": "The snaps to include in the stage environment.",
                "examples": [
                  "[go/1.17, chisel/latest/candidate, mir-kiosk-x11]"
                ],
                "items": {
                  "type": "string"
                },
                "title": "Stage-Snaps",
                "type": "array"
              },
              "stage-packages": {
                "default": [],
                "description": "The packages or Chisel slices to include in the stage environment.",
                "examples": [
                  "[curl, libxml2]"
                ],
                "items": {
                  "type": "string"
                },
                "title": "Stage-Packages",
                "type": "array"
              },
              "build-snaps": {
                "default": [],
                "description": "The snaps to install in the build environment.",
                "examples": [
                  "[go/latest/stable, node/stable]"
                ],
                "items": {
                  "type": "string"
                },
                "title": "Build-Snaps",
                "type": "array"
              },
              "build-packages": {
                "default": [],
                "description": "The packages to install in the build environment.",
                "examples": [
                  "[git, libffi-dev, libssl-dev]"
                ],
                "items": {
                  "type": "string"
                },
                "title": "Build-Packages",
                "type": "array"
              },
              "build-environment": {
                "default": [],
                "description": "The environment variables to define for the build step, as key-value pairs.",
                "examples": [
                  "[{MESSAGE: \"Hello world!\"}, {NAME: \"Craft Parts\"}]"
                ],
                "items": {
                  "type": "object",
                  "additionalProperties": {
                    "type": "string"
                  }
                },
                "title": "Build-Environment",
                "type": "array"
              },
              "build-attributes": {
                "default": [],
                "description": "Identifiers that control specific behaviors during the build.",
                "examples": [
                  "[enable-usrmerge]",
                  "[disable-usrmerge]"
                ],
                "items": {
                  "type": "string"
                },
                "title": "Build-Attributes",
                "type": "array"
              },
              "organize": {
                "type": "object",
                "description": "A map of files from the build directory to their destinations in the stage directory.",
                "examples": [
                  "{hello.py: bin/hello}"
                ],
                "title": "Organize",
                "additionalProperties": {
                  "type": "string"
                }
              },
              "overlay": {
                "description": "The files to copy from the part's layer to the stage directory.",
                "examples": [
                  "[bin, usr/bin]",
                  "[-etc/cloud/cloud.cfg.d/90_dpkg.cfg]"
                ],
                "items": {
                  "type": "string"
                },
                "title": "Overlay",
                "type": "array"
              },
              "stage": {
                "description": "The files to copy from the build directory to the stage directory.",
                "examples": [
                  "[usr/bin/*, usr/share]",
                  "[-usr, zfsutils-linux]"
                ],
                "items": {
                  "description": "relative path",
                  "minLength": 1,
                  "type": "string"
                },
                "title": "Stage",
                "type": "array"
              },
              "prime": {
                "description": "",
                "examples": [
                  "[usr/lib/*/qt6/plugins/tls/*, -usr/share/thumbnailers]"
                ],
                "items": {
                  "description": "relative path",
                  "minLength": 1,
                  "type": "string"
                },
                "title": "Prime",
                "type": "array"
              },
              "override-pull": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "description": "The commands to run instead of the default behavior of the pull step.",
                "examples": [
                  "|\n  craftctl default\n  rm $CRAFT_PART_SRC/pyproject.toml"
                ],
                "title": "Override-Pull"
              },
              "overlay-script": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "description": "The commands to run after the part's overlay packages are installed.",
                "examples": [
                  "|\n  rm -f ${CRAFT_OVERLAY}/usr/bin/vi ${CRAFT_OVERLAY}/usr/bin/vim*\n  rm -f ${CRAFT_OVERLAY}/usr/bin/emacs*\n  rm -f ${CRAFT_OVERLAY}/bin/nano"
                ],
                "title": "Overlay-Script"
              },
              "override-overlay": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "description": "Shell script to run inside the overlay chroot after mounting.",
                "examples": [
                  "echo 'hello from chroot' > /root/test.txt"
                ],
                "title": "Override-Overlay"
              },
              "override-build": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "description": "The commands to run instead of the default behavior of the build step.",
                "examples": [
                  "|\n  cd cmd/webhook\n  mkdir $CRAFT_PART_INSTALL/ko-app\n  go build -o $CRAFT_PART_INSTALL/ko-app/webhook -a ."
                ],
                "title": "Override-Build"
              },
              "override-stage": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "description": "The commands to run instead of the default behavior of the stage step.",
                "examples": [
                  "|\n  craftctl default\n  chown -R 499 \"${CRAFT_PART_INSTALL}/entrypoint.sh\""
                ],
                "title": "Override-Stage"
              },
              "override-prime": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "description": "The commands to run instead of the default behavior of the prime step.",
                "examples": [
                  "|\n  craftctl default\n  mkdir -p $CRAFT_PRIME/var/lib/mysql\n  mkdir -p $CRAFT_PRIME/var/lib/mysqld"
                ],
                "title": "Override-Prime"
              },
              "permissions": {
                "default": [],
                "description": "The ownership and permission settings for a set of files in the part's prime directory.",
                "examples": [
                  "[{owner: 2000, group: 2000}, {path: srv/indico/start-indico.sh, mode: \"544\"}, {path: etc/, mode: \"755\"}]"
                ],
                "items": {
                  "$ref": "#/$defs/Permissions"
                },
                "title": "Permissions",
                "type": "array"
              }
            },
            "additionalProperties": false,
            "type": "object"
          }
        },
        {
          "if": {
            "properties": {
              "plugin": {
                "const": "cmake"
              }
            }
          },
          "then": {
            "$comment": "common properties had to be repeated here or they would be considered invalid by the schema validator otherwise",
            "properties": {
              "plugin": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "description": "The plugin to build the part with.",
                "examples": [
                  "python",
                  "dump"
                ],
                "title": "Plugin",
                "enum": [
                  "dump",
                  "nil",
                  "ant",
                  "autotools",
                  "cargo-use",
                  "cmake",
                  "dotnet",
                  "go",
                  "go-use",
                  "gradle",
                  "jlink",
                  "make",
                  "maven",
                  "maven-use",
                  "meson",
                  "npm",
                  "npm-use",
                  "poetry",
                  "python",
                  "qmake",
                  "ruby",
                  "rust",
                  "scons",
                  "uv"
                ]
              },
              "source": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "description": "The location of the source files for the part.",
                "examples": [
                  ".",
                  "https://github.com/canonical/dqlite"
                ],
                "title": "Source"
              },
              "cmake-parameters": {
                "default": [],
                "items": {
                  "type": "string"
                },
                "title": "Cmake-Parameters",
                "type": "array"
              },
              "cmake-generator": {
                "default": "Unix Makefiles",
                "title": "Cmake-Generator",
                "type": "string"
              },
              "source-checksum": {
                "default": "",
                "description": "The checksum of the downloaded source, to ensure integrity.",
                "examples": [
                  "sha256/1451d01ee3a21100340aed867d0b799f46f0b1749680028d38c3f5d0128fb8a7"
                ],
                "title": "Source-Checksum",
                "type": "string"
              },
              "source-channel": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "title": "Source-Channel"
              },
              "source-branch": {
                "default": "",
                "description": "The target branch for Git sources.",
                "examples": [
                  "main",
                  "hotfix/2.10"
                ],
                "title": "Source-Branch",
                "type": "string"
              },
              "source-commit": {
                "default": "",
                "description": "The target commit for Git sources.",
                "examples": [
                  "36086af03fc4941a8ac219648ce77401743f3ae0"
                ],
                "title": "Source-Commit",
                "type": "string"
              },
              "source-depth": {
                "default": 0,
                "description": "The commit depth to fetch for Git sources.",
                "examples": [
                  "1"
                ],
                "title": "Source-Depth",
                "type": "integer"
              },
              "source-subdir": {
                "default": "",
                "description": "The subdirectory of the unpacked source where the build will occur.",
                "examples": [
                  "src",
                  "demo_nodes_cpp"
                ],
                "title": "Source-Subdir",
                "type": "string"
              },
              "source-submodules": {
                "anyOf": [
                  {
                    "items": {
                      "type": "string"
                    },
                    "type": "array"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "description": "The registered submodules to fetch from Git sources.",
                "examples": [
                  "[third_party/googletest, third_party/jsoncpp]",
                  "[libbpf]"
                ],
                "title": "Source-Submodules"
              },
              "source-tag": {
                "default": "",
                "description": "The target tag for Git sources.",
                "examples": [
                  "1.0.1"
                ],
                "title": "Source-Tag",
                "type": "string"
              },
              "source-type": {
                "default": "",
                "description": "The format of the part's source.",
                "examples": [
                  "git",
                  "local"
                ],
                "title": "Source-Type",
                "type": "string"
              },
              "disable-parallel": {
                "default": false,
                "description": "Whether to disable CPU multithreading during the build step.",
                "examples": [
                  "true"
                ],
                "title": "Disable-Parallel",
                "type": "boolean"
              },
              "after": {
                "default": [],
                "description": "The parts to process before starting this part's build.",
                "examples": [
                  "[build-deps, daemon]"
                ],
                "items": {
                  "type": "string"
                },
                "title": "After",
                "type": "array"
              },
              "overlay-packages": {
                "default": [],
                "description": "The packages to install in the part's layer.",
                "examples": [
                  "[ed]"
                ],
                "items": {
                  "type": "string"
                },
                "title": "Overlay-Packages",
                "type": "array"
              },
              "stage-snaps": {
                "default": [],
                "description": "The snaps to include in the stage environment.",
                "examples": [
                  "[go/1.17, chisel/latest/candidate, mir-kiosk-x11]"
                ],
                "items": {
                  "type": "string"
                },
                "title": "Stage-Snaps",
                "type": "array"
              },
              "stage-packages": {
                "default": [],
                "description": "The packages or Chisel slices to include in the stage environment.",
                "examples": [
                  "[curl, libxml2]"
                ],
                "items": {
                  "type": "string"
                },
                "title": "Stage-Packages",
                "type": "array"
              },
              "build-snaps": {
                "default": [],
                "description": "The snaps to install in the build environment.",
                "examples": [
                  "[go/latest/stable, node/stable]"
                ],
                "items": {
                  "type": "string"
                },
                "title": "Build-Snaps",
                "type": "array"
              },
              "build-packages": {
                "default": [],
                "description": "The packages to install in the build environment.",
                "examples": [
                  "[git, libffi-dev, libssl-dev]"
                ],
                "items": {
                  "type": "string"
                },
                "title": "Build-Packages",
                "type": "array"
              },
              "build-environment": {
                "default": [],
                "description": "The environment variables to define for the build step, as key-value pairs.",
                "examples": [
                  "[{MESSAGE: \"Hello world!\"}, {NAME: \"Craft Parts\"}]"
                ],
                "items": {
                  "type": "object",
                  "additionalProperties": {
                    "type": "string"
                  }
                },
                "title": "Build-Environment",
                "type": "array"
              },
              "build-attributes": {
                "default": [],
                "description": "Identifiers that control specific behaviors during the build.",
                "examples": [
                  "[enable-usrmerge]",
                  "[disable-usrmerge]"
                ],
                "items": {
                  "type": "string"
                },
                "title": "Build-Attributes",
                "type": "array"
              },
              "organize": {
                "type": "object",
                "description": "A map of files from the build directory to their destinations in the stage directory.",
                "examples": [
                  "{hello.py: bin/hello}"
                ],
                "title": "Organize",
                "additionalProperties": {
                  "type": "string"
                }
              },
              "overlay": {
                "description": "The files to copy from the part's layer to the stage directory.",
                "examples": [
                  "[bin, usr/bin]",
                  "[-etc/cloud/cloud.cfg.d/90_dpkg.cfg]"
                ],
                "items": {
                  "type": "string"
                },
                "title": "Overlay",
                "type": "array"
              },
              "stage": {
                "description": "The files to copy from the build directory to the stage directory.",
                "examples": [
                  "[usr/bin/*, usr/share]",
                  "[-usr, zfsutils-linux]"
                ],
                "items": {
                  "description": "relative path",
                  "minLength": 1,
                  "type": "string"
                },
                "title": "Stage",
                "type": "array"
              },
              "prime": {
                "description": "",
                "examples": [
                  "[usr/lib/*/qt6/plugins/tls/*, -usr/share/thumbnailers]"
                ],
                "items": {
                  "description": "relative path",
                  "minLength": 1,
                  "type": "string"
                },
                "title": "Prime",
                "type": "array"
              },
              "override-pull": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "description": "The commands to run instead of the default behavior of the pull step.",
                "examples": [
                  "|\n  craftctl default\n  rm $CRAFT_PART_SRC/pyproject.toml"
                ],
                "title": "Override-Pull"
              },
              "overlay-script": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "description": "The commands to run after the part's overlay packages are installed.",
                "examples": [
                  "|\n  rm -f ${CRAFT_OVERLAY}/usr/bin/vi ${CRAFT_OVERLAY}/usr/bin/vim*\n  rm -f ${CRAFT_OVERLAY}/usr/bin/emacs*\n  rm -f ${CRAFT_OVERLAY}/bin/nano"
                ],
                "title": "Overlay-Script"
              },
              "override-overlay": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "description": "Shell script to run inside the overlay chroot after mounting.",
                "examples": [
                  "echo 'hello from chroot' > /root/test.txt"
                ],
                "title": "Override-Overlay"
              },
              "override-build": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "description": "The commands to run instead of the default behavior of the build step.",
                "examples": [
                  "|\n  cd cmd/webhook\n  mkdir $CRAFT_PART_INSTALL/ko-app\n  go build -o $CRAFT_PART_INSTALL/ko-app/webhook -a ."
                ],
                "title": "Override-Build"
              },
              "override-stage": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "description": "The commands to run instead of the default behavior of the stage step.",
                "examples": [
                  "|\n  craftctl default\n  chown -R 499 \"${CRAFT_PART_INSTALL}/entrypoint.sh\""
                ],
                "title": "Override-Stage"
              },
              "override-prime": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "description": "The commands to run instead of the default behavior of the prime step.",
                "examples": [
                  "|\n  craftctl default\n  mkdir -p $CRAFT_PRIME/var/lib/mysql\n  mkdir -p $CRAFT_PRIME/var/lib/mysqld"
                ],
                "title": "Override-Prime"
              },
              "permissions": {
                "default": [],
                "description": "The ownership and permission settings for a set of files in the part's prime directory.",
                "examples": [
                  "[{owner: 2000, group: 2000}, {path: srv/indico/start-indico.sh, mode: \"544\"}, {path: etc/, mode: \"755\"}]"
                ],
                "items": {
                  "$ref": "#/$defs/Permissions"
                },
                "title": "Permissions",
                "type": "array"
              }
            },
            "additionalProperties": false,
            "type": "object"
          }
        },
        {
          "if": {
            "properties": {
              "plugin": {
                "const": "dotnet"
              }
            }
          },
          "then": {
            "$comment": "common properties had to be repeated here or they would be considered invalid by the schema validator otherwise",
            "properties": {
              "plugin": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "description": "The plugin to build the part with.",
                "examples": [
                  "python",
                  "dump"
                ],
                "title": "Plugin",
                "enum": [
                  "dump",
                  "nil",
                  "ant",
                  "autotools",
                  "cargo-use",
                  "cmake",
                  "dotnet",
                  "go",
                  "go-use",
                  "gradle",
                  "jlink",
                  "make",
                  "maven",
                  "maven-use",
                  "meson",
                  "npm",
                  "npm-use",
                  "poetry",
                  "python",
                  "qmake",
                  "ruby",
                  "rust",
                  "scons",
                  "uv"
                ]
              },
              "source": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "description": "The location of the source files for the part.",
                "examples": [
                  ".",
                  "https://github.com/canonical/dqlite"
                ],
                "title": "Source"
              },
              "dotnet-build-configuration": {
                "default": "Release",
                "title": "Dotnet-Build-Configuration",
                "type": "string"
              },
              "dotnet-self-contained-runtime-identifier": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "title": "Dotnet-Self-Contained-Runtime-Identifier"
              },
              "source-checksum": {
                "default": "",
                "description": "The checksum of the downloaded source, to ensure integrity.",
                "examples": [
                  "sha256/1451d01ee3a21100340aed867d0b799f46f0b1749680028d38c3f5d0128fb8a7"
                ],
                "title": "Source-Checksum",
                "type": "string"
              },
              "source-channel": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "title": "Source-Channel"
              },
              "source-branch": {
                "default": "",
                "description": "The target branch for Git sources.",
                "examples": [
                  "main",
                  "hotfix/2.10"
                ],
                "title": "Source-Branch",
                "type": "string"
              },
              "source-commit": {
                "default": "",
                "description": "The target commit for Git sources.",
                "examples": [
                  "36086af03fc4941a8ac219648ce77401743f3ae0"
                ],
                "title": "Source-Commit",
                "type": "string"
              },
              "source-depth": {
                "default": 0,
                "description": "The commit depth to fetch for Git sources.",
                "examples": [
                  "1"
                ],
                "title": "Source-Depth",
                "type": "integer"
              },
              "source-subdir": {
                "default": "",
                "description": "The subdirectory of the unpacked source where the build will occur.",
                "examples": [
                  "src",
                  "demo_nodes_cpp"
                ],
                "title": "Source-Subdir",
                "type": "string"
              },
              "source-submodules": {
                "anyOf": [
                  {
                    "items": {
                      "type": "string"
                    },
                    "type": "array"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "description": "The registered submodules to fetch from Git sources.",
                "examples": [
                  "[third_party/googletest, third_party/jsoncpp]",
                  "[libbpf]"
                ],
                "title": "Source-Submodules"
              },
              "source-tag": {
                "default": "",
                "description": "The target tag for Git sources.",
                "examples": [
                  "1.0.1"
                ],
                "title": "Source-Tag",
                "type": "string"
              },
              "source-type": {
                "default": "",
                "description": "The format of the part's source.",
                "examples": [
                  "git",
                  "local"
                ],
                "title": "Source-Type",
                "type": "string"
              },
              "disable-parallel": {
                "default": false,
                "description": "Whether to disable CPU multithreading during the build step.",
                "examples": [
                  "true"
                ],
                "title": "Disable-Parallel",
                "type": "boolean"
              },
              "after": {
                "default": [],
                "description": "The parts to process before starting this part's build.",
                "examples": [
                  "[build-deps, daemon]"
                ],
                "items": {
                  "type": "string"
                },
                "title": "After",
                "type": "array"
              },
              "overlay-packages": {
                "default": [],
                "description": "The packages to install in the part's layer.",
                "examples": [
                  "[ed]"
                ],
                "items": {
                  "type": "string"
                },
                "title": "Overlay-Packages",
                "type": "array"
              },
              "stage-snaps": {
                "default": [],
                "description": "The snaps to include in the stage environment.",
                "examples": [
                  "[go/1.17, chisel/latest/candidate, mir-kiosk-x11]"
                ],
                "items": {
                  "type": "string"
                },
                "title": "Stage-Snaps",
                "type": "array"
              },
              "stage-packages": {
                "default": [],
                "description": "The packages or Chisel slices to include in the stage environment.",
                "examples": [
                  "[curl, libxml2]"
                ],
                "items": {
                  "type": "string"
                },
                "title": "Stage-Packages",
                "type": "array"
              },
              "build-snaps": {
                "default": [],
                "description": "The snaps to install in the build environment.",
                "examples": [
                  "[go/latest/stable, node/stable]"
                ],
                "items": {
                  "type": "string"
                },
                "title": "Build-Snaps",
                "type": "array"
              },
              "build-packages": {
                "default": [],
                "description": "The packages to install in the build environment.",
                "examples": [
                  "[git, libffi-dev, libssl-dev]"
                ],
                "items": {
                  "type": "string"
                },
                "title": "Build-Packages",
                "type": "array"
              },
              "build-environment": {
                "default": [],
                "description": "The environment variables to define for the build step, as key-value pairs.",
                "examples": [
                  "[{MESSAGE: \"Hello world!\"}, {NAME: \"Craft Parts\"}]"
                ],
                "items": {
                  "type": "object",
                  "additionalProperties": {
                    "type": "string"
                  }
                },
                "title": "Build-Environment",
                "type": "array"
              },
              "build-attributes": {
                "default": [],
                "description": "Identifiers that control specific behaviors during the build.",
                "examples": [
                  "[enable-usrmerge]",
                  "[disable-usrmerge]"
                ],
                "items": {
                  "type": "string"
                },
                "title": "Build-Attributes",
                "type": "array"
              },
              "organize": {
                "type": "object",
                "description": "A map of files from the build directory to their destinations in the stage directory.",
                "examples": [
                  "{hello.py: bin/hello}"
                ],
                "title": "Organize",
                "additionalProperties": {
                  "type": "string"
                }
              },
              "overlay": {
                "description": "The files to copy from the part's layer to the stage directory.",
                "examples": [
                  "[bin, usr/bin]",
                  "[-etc/cloud/cloud.cfg.d/90_dpkg.cfg]"
                ],
                "items": {
                  "type": "string"
                },
                "title": "Overlay",
                "type": "array"
              },
              "stage": {
                "description": "The files to copy from the build directory to the stage directory.",
                "examples": [
                  "[usr/bin/*, usr/share]",
                  "[-usr, zfsutils-linux]"
                ],
                "items": {
                  "description": "relative path",
                  "minLength": 1,
                  "type": "string"
                },
                "title": "Stage",
                "type": "array"
              },
              "prime": {
                "description": "",
                "examples": [
                  "[usr/lib/*/qt6/plugins/tls/*, -usr/share/thumbnailers]"
                ],
                "items": {
                  "description": "relative path",
                  "minLength": 1,
                  "type": "string"
                },
                "title": "Prime",
                "type": "array"
              },
              "override-pull": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "description": "The commands to run instead of the default behavior of the pull step.",
                "examples": [
                  "|\n  craftctl default\n  rm $CRAFT_PART_SRC/pyproject.toml"
                ],
                "title": "Override-Pull"
              },
              "overlay-script": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "description": "The commands to run after the part's overlay packages are installed.",
                "examples": [
                  "|\n  rm -f ${CRAFT_OVERLAY}/usr/bin/vi ${CRAFT_OVERLAY}/usr/bin/vim*\n  rm -f ${CRAFT_OVERLAY}/usr/bin/emacs*\n  rm -f ${CRAFT_OVERLAY}/bin/nano"
                ],
                "title": "Overlay-Script"
              },
              "override-overlay": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "description": "Shell script to run inside the overlay chroot after mounting.",
                "examples": [
                  "echo 'hello from chroot' > /root/test.txt"
                ],
                "title": "Override-Overlay"
              },
              "override-build": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "description": "The commands to run instead of the default behavior of the build step.",
                "examples": [
                  "|\n  cd cmd/webhook\n  mkdir $CRAFT_PART_INSTALL/ko-app\n  go build -o $CRAFT_PART_INSTALL/ko-app/webhook -a ."
                ],
                "title": "Override-Build"
              },
              "override-stage": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "description": "The commands to run instead of the default behavior of the stage step.",
                "examples": [
                  "|\n  craftctl default\n  chown -R 499 \"${CRAFT_PART_INSTALL}/entrypoint.sh\""
                ],
                "title": "Override-Stage"
              },
              "override-prime": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "description": "The commands to run instead of the default behavior of the prime step.",
                "examples": [
                  "|\n  craftctl default\n  mkdir -p $CRAFT_PRIME/var/lib/mysql\n  mkdir -p $CRAFT_PRIME/var/lib/mysqld"
                ],
                "title": "Override-Prime"
              },
              "permissions": {
                "default": [],
                "description": "The ownership and permission settings for a set of files in the part's prime directory.",
                "examples": [
                  "[{owner: 2000, group: 2000}, {path: srv/indico/start-indico.sh, mode: \"544\"}, {path: etc/, mode: \"755\"}]"
                ],
                "items": {
                  "$ref": "#/$defs/Permissions"
                },
                "title": "Permissions",
                "type": "array"
              }
            },
            "additionalProperties": false,
            "type": "object"
          }
        },
        {
          "if": {
            "properties": {
              "plugin": {
                "const": "go"
              }
            }
          },
          "then": {
            "$comment": "common properties had to be repeated here or they would be considered invalid by the schema validator otherwise",
            "properties": {
              "plugin": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "description": "The plugin to build the part with.",
                "examples": [
                  "python",
                  "dump"
                ],
                "title": "Plugin",
                "enum": [
                  "dump",
                  "nil",
                  "ant",
                  "autotools",
                  "cargo-use",
                  "cmake",
                  "dotnet",
                  "go",
                  "go-use",
                  "gradle",
                  "jlink",
                  "make",
                  "maven",
                  "maven-use",
                  "meson",
                  "npm",
                  "npm-use",
                  "poetry",
                  "python",
                  "qmake",
                  "ruby",
                  "rust",
                  "scons",
                  "uv"
                ]
              },
              "source": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "description": "The location of the source files for the part.",
                "examples": [
                  ".",
                  "https://github.com/canonical/dqlite"
                ],
                "title": "Source"
              },
              "go-buildtags": {
                "default": [],
                "items": {
                  "type": "string"
                },
                "title": "Go-Buildtags",
                "type": "array"
              },
              "go-generate": {
                "default": [],
                "items": {
                  "type": "string"
                },
                "title": "Go-Generate",
                "type": "array"
              },
              "source-checksum": {
                "default": "",
                "description": "The checksum of the downloaded source, to ensure integrity.",
                "examples": [
                  "sha256/1451d01ee3a21100340aed867d0b799f46f0b1749680028d38c3f5d0128fb8a7"
                ],
                "title": "Source-Checksum",
                "type": "string"
              },
              "source-channel": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "title": "Source-Channel"
              },
              "source-branch": {
                "default": "",
                "description": "The target branch for Git sources.",
                "examples": [
                  "main",
                  "hotfix/2.10"
                ],
                "title": "Source-Branch",
                "type": "string"
              },
              "source-commit": {
                "default": "",
                "description": "The target commit for Git sources.",
                "examples": [
                  "36086af03fc4941a8ac219648ce77401743f3ae0"
                ],
                "title": "Source-Commit",
                "type": "string"
              },
              "source-depth": {
                "default": 0,
                "description": "The commit depth to fetch for Git sources.",
                "examples": [
                  "1"
                ],
                "title": "Source-Depth",
                "type": "integer"
              },
              "source-subdir": {
                "default": "",
                "description": "The subdirectory of the unpacked source where the build will occur.",
                "examples": [
                  "src",
                  "demo_nodes_cpp"
                ],
                "title": "Source-Subdir",
                "type": "string"
              },
              "source-submodules": {
                "anyOf": [
                  {
                    "items": {
                      "type": "string"
                    },
                    "type": "array"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "description": "The registered submodules to fetch from Git sources.",
                "examples": [
                  "[third_party/googletest, third_party/jsoncpp]",
                  "[libbpf]"
                ],
                "title": "Source-Submodules"
              },
              "source-tag": {
                "default": "",
                "description": "The target tag for Git sources.",
                "examples": [
                  "1.0.1"
                ],
                "title": "Source-Tag",
                "type": "string"
              },
              "source-type": {
                "default": "",
                "description": "The format of the part's source.",
                "examples": [
                  "git",
                  "local"
                ],
                "title": "Source-Type",
                "type": "string"
              },
              "disable-parallel": {
                "default": false,
                "description": "Whether to disable CPU multithreading during the build step.",
                "examples": [
                  "true"
                ],
                "title": "Disable-Parallel",
                "type": "boolean"
              },
              "after": {
                "default": [],
                "description": "The parts to process before starting this part's build.",
                "examples": [
                  "[build-deps, daemon]"
                ],
                "items": {
                  "type": "string"
                },
                "title": "After",
                "type": "array"
              },
              "overlay-packages": {
                "default": [],
                "description": "The packages to install in the part's layer.",
                "examples": [
                  "[ed]"
                ],
                "items": {
                  "type": "string"
                },
                "title": "Overlay-Packages",
                "type": "array"
              },
              "stage-snaps": {
                "default": [],
                "description": "The snaps to include in the stage environment.",
                "examples": [
                  "[go/1.17, chisel/latest/candidate, mir-kiosk-x11]"
                ],
                "items": {
                  "type": "string"
                },
                "title": "Stage-Snaps",
                "type": "array"
              },
              "stage-packages": {
                "default": [],
                "description": "The packages or Chisel slices to include in the stage environment.",
                "examples": [
                  "[curl, libxml2]"
                ],
                "items": {
                  "type": "string"
                },
                "title": "Stage-Packages",
                "type": "array"
              },
              "build-snaps": {
                "default": [],
                "description": "The snaps to install in the build environment.",
                "examples": [
                  "[go/latest/stable, node/stable]"
                ],
                "items": {
                  "type": "string"
                },
                "title": "Build-Snaps",
                "type": "array"
              },
              "build-packages": {
                "default": [],
                "description": "The packages to install in the build environment.",
                "examples": [
                  "[git, libffi-dev, libssl-dev]"
                ],
                "items": {
                  "type": "string"
                },
                "title": "Build-Packages",
                "type": "array"
              },
              "build-environment": {
                "default": [],
                "description": "The environment variables to define for the build step, as key-value pairs.",
                "examples": [
                  "[{MESSAGE: \"Hello world!\"}, {NAME: \"Craft Parts\"}]"
                ],
                "items": {
                  "type": "object",
                  "additionalProperties": {
                    "type": "string"
                  }
                },
                "title": "Build-Environment",
                "type": "array"
              },
              "build-attributes": {
                "default": [],
                "description": "Identifiers that control specific behaviors during the build.",
                "examples": [
                  "[enable-usrmerge]",
                  "[disable-usrmerge]"
                ],
                "items": {
                  "type": "string"
                },
                "title": "Build-Attributes",
                "type": "array"
              },
              "organize": {
                "type": "object",
                "description": "A map of files from the build directory to their destinations in the stage directory.",
                "examples": [
                  "{hello.py: bin/hello}"
                ],
                "title": "Organize",
                "additionalProperties": {
                  "type": "string"
                }
              },
              "overlay": {
                "description": "The files to copy from the part's layer to the stage directory.",
                "examples": [
                  "[bin, usr/bin]",
                  "[-etc/cloud/cloud.cfg.d/90_dpkg.cfg]"
                ],
                "items": {
                  "type": "string"
                },
                "title": "Overlay",
                "type": "array"
              },
              "stage": {
                "description": "The files to copy from the build directory to the stage directory.",
                "examples": [
                  "[usr/bin/*, usr/share]",
                  "[-usr, zfsutils-linux]"
                ],
                "items": {
                  "description": "relative path",
                  "minLength": 1,
                  "type": "string"
                },
                "title": "Stage",
                "type": "array"
              },
              "prime": {
                "description": "",
                "examples": [
                  "[usr/lib/*/qt6/plugins/tls/*, -usr/share/thumbnailers]"
                ],
                "items": {
                  "description": "relative path",
                  "minLength": 1,
                  "type": "string"
                },
                "title": "Prime",
                "type": "array"
              },
              "override-pull": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "description": "The commands to run instead of the default behavior of the pull step.",
                "examples": [
                  "|\n  craftctl default\n  rm $CRAFT_PART_SRC/pyproject.toml"
                ],
                "title": "Override-Pull"
              },
              "overlay-script": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "description": "The commands to run after the part's overlay packages are installed.",
                "examples": [
                  "|\n  rm -f ${CRAFT_OVERLAY}/usr/bin/vi ${CRAFT_OVERLAY}/usr/bin/vim*\n  rm -f ${CRAFT_OVERLAY}/usr/bin/emacs*\n  rm -f ${CRAFT_OVERLAY}/bin/nano"
                ],
                "title": "Overlay-Script"
              },
              "override-overlay": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "description": "Shell script to run inside the overlay chroot after mounting.",
                "examples": [
                  "echo 'hello from chroot' > /root/test.txt"
                ],
                "title": "Override-Overlay"
              },
              "override-build": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "description": "The commands to run instead of the default behavior of the build step.",
                "examples": [
                  "|\n  cd cmd/webhook\n  mkdir $CRAFT_PART_INSTALL/ko-app\n  go build -o $CRAFT_PART_INSTALL/ko-app/webhook -a ."
                ],
                "title": "Override-Build"
              },
              "override-stage": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "description": "The commands to run instead of the default behavior of the stage step.",
                "examples": [
                  "|\n  craftctl default\n  chown -R 499 \"${CRAFT_PART_INSTALL}/entrypoint.sh\""
                ],
                "title": "Override-Stage"
              },
              "override-prime": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "description": "The commands to run instead of the default behavior of the prime step.",
                "examples": [
                  "|\n  craftctl default\n  mkdir -p $CRAFT_PRIME/var/lib/mysql\n  mkdir -p $CRAFT_PRIME/var/lib/mysqld"
                ],
                "title": "Override-Prime"
              },
              "permissions": {
                "default": [],
                "description": "The ownership and permission settings for a set of files in the part's prime directory.",
                "examples": [
                  "[{owner: 2000, group: 2000}, {path: srv/indico/start-indico.sh, mode: \"544\"}, {path: etc/, mode: \"755\"}]"
                ],
                "items": {
                  "$ref": "#/$defs/Permissions"
                },
                "title": "Permissions",
                "type": "array"
              }
            },
            "additionalProperties": false,
            "type": "object"
          }
        },
        {
          "if": {
            "properties": {
              "plugin": {
                "const": "go-use"
              }
            }
          },
          "then": {
            "$comment": "common properties had to be repeated here or they would be considered invalid by the schema validator otherwise",
            "properties": {
              "plugin": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "description": "The plugin to build the part with.",
                "examples": [
                  "python",
                  "dump"
                ],
                "title": "Plugin",
                "enum": [
                  "dump",
                  "nil",
                  "ant",
                  "autotools",
                  "cargo-use",
                  "cmake",
                  "dotnet",
                  "go",
                  "go-use",
                  "gradle",
                  "jlink",
                  "make",
                  "maven",
                  "maven-use",
                  "meson",
                  "npm",
                  "npm-use",
                  "poetry",
                  "python",
                  "qmake",
                  "ruby",
                  "rust",
                  "scons",
                  "uv"
                ]
              },
              "source": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "description": "The location of the source files for the part.",
                "examples": [
                  ".",
                  "https://github.com/canonical/dqlite"
                ],
                "title": "Source"
              },
              "source-checksum": {
                "default": "",
                "description": "The checksum of the downloaded source, to ensure integrity.",
                "examples": [
                  "sha256/1451d01ee3a21100340aed867d0b799f46f0b1749680028d38c3f5d0128fb8a7"
                ],
                "title": "Source-Checksum",
                "type": "string"
              },
              "source-channel": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "title": "Source-Channel"
              },
              "source-branch": {
                "default": "",
                "description": "The target branch for Git sources.",
                "examples": [
                  "main",
                  "hotfix/2.10"
                ],
                "title": "Source-Branch",
                "type": "string"
              },
              "source-commit": {
                "default": "",
                "description": "The target commit for Git sources.",
                "examples": [
                  "36086af03fc4941a8ac219648ce77401743f3ae0"
                ],
                "title": "Source-Commit",
                "type": "string"
              },
              "source-depth": {
                "default": 0,
                "description": "The commit depth to fetch for Git sources.",
                "examples": [
                  "1"
                ],
                "title": "Source-Depth",
                "type": "integer"
              },
              "source-subdir": {
                "default": "",
                "description": "The subdirectory of the unpacked source where the build will occur.",
                "examples": [
                  "src",
                  "demo_nodes_cpp"
                ],
                "title": "Source-Subdir",
                "type": "string"
              },
              "source-submodules": {
                "anyOf": [
                  {
                    "items": {
                      "type": "string"
                    },
                    "type": "array"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "description": "The registered submodules to fetch from Git sources.",
                "examples": [
                  "[third_party/googletest, third_party/jsoncpp]",
                  "[libbpf]"
                ],
                "title": "Source-Submodules"
              },
              "source-tag": {
                "default": "",
                "description": "The target tag for Git sources.",
                "examples": [
                  "1.0.1"
                ],
                "title": "Source-Tag",
                "type": "string"
              },
              "source-type": {
                "default": "",
                "description": "The format of the part's source.",
                "examples": [
                  "git",
                  "local"
                ],
                "title": "Source-Type",
                "type": "string"
              },
              "disable-parallel": {
                "default": false,
                "description": "Whether to disable CPU multithreading during the build step.",
                "examples": [
                  "true"
                ],
                "title": "Disable-Parallel",
                "type": "boolean"
              },
              "after": {
                "default": [],
                "description": "The parts to process before starting this part's build.",
                "examples": [
                  "[build-deps, daemon]"
                ],
                "items": {
                  "type": "string"
                },
                "title": "After",
                "type": "array"
              },
              "overlay-packages": {
                "default": [],
                "description": "The packages to install in the part's layer.",
                "examples": [
                  "[ed]"
                ],
                "items": {
                  "type": "string"
                },
                "title": "Overlay-Packages",
                "type": "array"
              },
              "stage-snaps": {
                "default": [],
                "description": "The snaps to include in the stage environment.",
                "examples": [
                  "[go/1.17, chisel/latest/candidate, mir-kiosk-x11]"
                ],
                "items": {
                  "type": "string"
                },
                "title": "Stage-Snaps",
                "type": "array"
              },
              "stage-packages": {
                "default": [],
                "description": "The packages or Chisel slices to include in the stage environment.",
                "examples": [
                  "[curl, libxml2]"
                ],
                "items": {
                  "type": "string"
                },
                "title": "Stage-Packages",
                "type": "array"
              },
              "build-snaps": {
                "default": [],
                "description": "The snaps to install in the build environment.",
                "examples": [
                  "[go/latest/stable, node/stable]"
                ],
                "items": {
                  "type": "string"
                },
                "title": "Build-Snaps",
                "type": "array"
              },
              "build-packages": {
                "default": [],
                "description": "The packages to install in the build environment.",
                "examples": [
                  "[git, libffi-dev, libssl-dev]"
                ],
                "items": {
                  "type": "string"
                },
                "title": "Build-Packages",
                "type": "array"
              },
              "build-environment": {
                "default": [],
                "description": "The environment variables to define for the build step, as key-value pairs.",
                "examples": [
                  "[{MESSAGE: \"Hello world!\"}, {NAME: \"Craft Parts\"}]"
                ],
                "items": {
                  "type": "object",
                  "additionalProperties": {
                    "type": "string"
                  }
                },
                "title": "Build-Environment",
                "type": "array"
              },
              "build-attributes": {
                "default": [],
                "description": "Identifiers that control specific behaviors during the build.",
                "examples": [
                  "[enable-usrmerge]",
                  "[disable-usrmerge]"
                ],
                "items": {
                  "type": "string"
                },
                "title": "Build-Attributes",
                "type": "array"
              },
              "organize": {
                "type": "object",
                "description": "A map of files from the build directory to their destinations in the stage directory.",
                "examples": [
                  "{hello.py: bin/hello}"
                ],
                "title": "Organize",
                "additionalProperties": {
                  "type": "string"
                }
              },
              "overlay": {
                "description": "The files to copy from the part's layer to the stage directory.",
                "examples": [
                  "[bin, usr/bin]",
                  "[-etc/cloud/cloud.cfg.d/90_dpkg.cfg]"
                ],
                "items": {
                  "type": "string"
                },
                "title": "Overlay",
                "type": "array"
              },
              "stage": {
                "description": "The files to copy from the build directory to the stage directory.",
                "examples": [
                  "[usr/bin/*, usr/share]",
                  "[-usr, zfsutils-linux]"
                ],
                "items": {
                  "description": "relative path",
                  "minLength": 1,
                  "type": "string"
                },
                "title": "Stage",
                "type": "array"
              },
              "prime": {
                "description": "",
                "examples": [
                  "[usr/lib/*/qt6/plugins/tls/*, -usr/share/thumbnailers]"
                ],
                "items": {
                  "description": "relative path",
                  "minLength": 1,
                  "type": "string"
                },
                "title": "Prime",
                "type": "array"
              },
              "override-pull": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "description": "The commands to run instead of the default behavior of the pull step.",
                "examples": [
                  "|\n  craftctl default\n  rm $CRAFT_PART_SRC/pyproject.toml"
                ],
                "title": "Override-Pull"
              },
              "overlay-script": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "description": "The commands to run after the part's overlay packages are installed.",
                "examples": [
                  "|\n  rm -f ${CRAFT_OVERLAY}/usr/bin/vi ${CRAFT_OVERLAY}/usr/bin/vim*\n  rm -f ${CRAFT_OVERLAY}/usr/bin/emacs*\n  rm -f ${CRAFT_OVERLAY}/bin/nano"
                ],
                "title": "Overlay-Script"
              },
              "override-overlay": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "description": "Shell script to run inside the overlay chroot after mounting.",
                "examples": [
                  "echo 'hello from chroot' > /root/test.txt"
                ],
                "title": "Override-Overlay"
              },
              "override-build": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "description": "The commands to run instead of the default behavior of the build step.",
                "examples": [
                  "|\n  cd cmd/webhook\n  mkdir $CRAFT_PART_INSTALL/ko-app\n  go build -o $CRAFT_PART_INSTALL/ko-app/webhook -a ."
                ],
                "title": "Override-Build"
              },
              "override-stage": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "description": "The commands to run instead of the default behavior of the stage step.",
                "examples": [
                  "|\n  craftctl default\n  chown -R 499 \"${CRAFT_PART_INSTALL}/entrypoint.sh\""
                ],
                "title": "Override-Stage"
              },
              "override-prime": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "description": "The commands to run instead of the default behavior of the prime step.",
                "examples": [
                  "|\n  craftctl default\n  mkdir -p $CRAFT_PRIME/var/lib/mysql\n  mkdir -p $CRAFT_PRIME/var/lib/mysqld"
                ],
                "title": "Override-Prime"
              },
              "permissions": {
                "default": [],
                "description": "The ownership and permission settings for a set of files in the part's prime directory.",
                "examples": [
                  "[{owner: 2000, group: 2000}, {path: srv/indico/start-indico.sh, mode: \"544\"}, {path: etc/, mode: \"755\"}]"
                ],
                "items": {
                  "$ref": "#/$defs/Permissions"
                },
                "title": "Permissions",
                "type": "array"
              }
            },
            "additionalProperties": false,
            "type": "object"
          }
        },
        {
          "if": {
            "properties": {
              "plugin": {
                "const": "gradle"
              }
            }
          },
          "then": {
            "$comment": "common properties had to be repeated here or they would be considered invalid by the schema validator otherwise",
            "properties": {
              "plugin": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "description": "The plugin to build the part with.",
                "examples": [
                  "python",
                  "dump"
                ],
                "title": "Plugin",
                "enum": [
                  "dump",
                  "nil",
                  "ant",
                  "autotools",
                  "cargo-use",
                  "cmake",
                  "dotnet",
                  "go",
                  "go-use",
                  "gradle",
                  "jlink",
                  "make",
                  "maven",
                  "maven-use",
                  "meson",
                  "npm",
                  "npm-use",
                  "poetry",
                  "python",
                  "qmake",
                  "ruby",
                  "rust",
                  "scons",
                  "uv"
                ]
              },
              "source": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "description": "The location of the source files for the part.",
                "examples": [
                  ".",
                  "https://github.com/canonical/dqlite"
                ],
                "title": "Source"
              },
              "gradle-init-script": {
                "default": "",
                "title": "Gradle-Init-Script",
                "type": "string"
              },
              "gradle-parameters": {
                "default": [],
                "items": {
                  "type": "string"
                },
                "title": "Gradle-Parameters",
                "type": "array"
              },
              "gradle-task": {
                "default": "build",
                "title": "Gradle-Task",
                "type": "string"
              },
              "gradle-use-daemon": {
                "default": false,
                "title": "Gradle-Use-Daemon",
                "type": "boolean"
              },
              "source-checksum": {
                "default": "",
                "description": "The checksum of the downloaded source, to ensure integrity.",
                "examples": [
                  "sha256/1451d01ee3a21100340aed867d0b799f46f0b1749680028d38c3f5d0128fb8a7"
                ],
                "title": "Source-Checksum",
                "type": "string"
              },
              "source-channel": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "title": "Source-Channel"
              },
              "source-branch": {
                "default": "",
                "description": "The target branch for Git sources.",
                "examples": [
                  "main",
                  "hotfix/2.10"
                ],
                "title": "Source-Branch",
                "type": "string"
              },
              "source-commit": {
                "default": "",
                "description": "The target commit for Git sources.",
                "examples": [
                  "36086af03fc4941a8ac219648ce77401743f3ae0"
                ],
                "title": "Source-Commit",
                "type": "string"
              },
              "source-depth": {
                "default": 0,
                "description": "The commit depth to fetch for Git sources.",
                "examples": [
                  "1"
                ],
                "title": "Source-Depth",
                "type": "integer"
              },
              "source-subdir": {
                "default": "",
                "description": "The subdirectory of the unpacked source where the build will occur.",
                "examples": [
                  "src",
                  "demo_nodes_cpp"
                ],
                "title": "Source-Subdir",
                "type": "string"
              },
              "source-submodules": {
                "anyOf": [
                  {
                    "items": {
                      "type": "string"
                    },
                    "type": "array"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "description": "The registered submodules to fetch from Git sources.",
                "examples": [
                  "[third_party/googletest, third_party/jsoncpp]",
                  "[libbpf]"
                ],
                "title": "Source-Submodules"
              },
              "source-tag": {
                "default": "",
                "description": "The target tag for Git sources.",
                "examples": [
                  "1.0.1"
                ],
                "title": "Source-Tag",
                "type": "string"
              },
              "source-type": {
                "default": "",
                "description": "The format of the part's source.",
                "examples": [
                  "git",
                  "local"
                ],
                "title": "Source-Type",
                "type": "string"
              },
              "disable-parallel": {
                "default": false,
                "description": "Whether to disable CPU multithreading during the build step.",
                "examples": [
                  "true"
                ],
                "title": "Disable-Parallel",
                "type": "boolean"
              },
              "after": {
                "default": [],
                "description": "The parts to process before starting this part's build.",
                "examples": [
                  "[build-deps, daemon]"
                ],
                "items": {
                  "type": "string"
                },
                "title": "After",
                "type": "array"
              },
              "overlay-packages": {
                "default": [],
                "description": "The packages to install in the part's layer.",
                "examples": [
                  "[ed]"
                ],
                "items": {
                  "type": "string"
                },
                "title": "Overlay-Packages",
                "type": "array"
              },
              "stage-snaps": {
                "default": [],
                "description": "The snaps to include in the stage environment.",
                "examples": [
                  "[go/1.17, chisel/latest/candidate, mir-kiosk-x11]"
                ],
                "items": {
                  "type": "string"
                },
                "title": "Stage-Snaps",
                "type": "array"
              },
              "stage-packages": {
                "default": [],
                "description": "The packages or Chisel slices to include in the stage environment.",
                "examples": [
                  "[curl, libxml2]"
                ],
                "items": {
                  "type": "string"
                },
                "title": "Stage-Packages",
                "type": "array"
              },
              "build-snaps": {
                "default": [],
                "description": "The snaps to install in the build environment.",
                "examples": [
                  "[go/latest/stable, node/stable]"
                ],
                "items": {
                  "type": "string"
                },
                "title": "Build-Snaps",
                "type": "array"
              },
              "build-packages": {
                "default": [],
                "description": "The packages to install in the build environment.",
                "examples": [
                  "[git, libffi-dev, libssl-dev]"
                ],
                "items": {
                  "type": "string"
                },
                "title": "Build-Packages",
                "type": "array"
              },
              "build-environment": {
                "default": [],
                "description": "The environment variables to define for the build step, as key-value pairs.",
                "examples": [
                  "[{MESSAGE: \"Hello world!\"}, {NAME: \"Craft Parts\"}]"
                ],
                "items": {
                  "type": "object",
                  "additionalProperties": {
                    "type": "string"
                  }
                },
                "title": "Build-Environment",
                "type": "array"
              },
              "build-attributes": {
                "default": [],
                "description": "Identifiers that control specific behaviors during the build.",
                "examples": [
                  "[enable-usrmerge]",
                  "[disable-usrmerge]"
                ],
                "items": {
                  "type": "string"
                },
                "title": "Build-Attributes",
                "type": "array"
              },
              "organize": {
                "type": "object",
                "description": "A map of files from the build directory to their destinations in the stage directory.",
                "examples": [
                  "{hello.py: bin/hello}"
                ],
                "title": "Organize",
                "additionalProperties": {
                  "type": "string"
                }
              },
              "overlay": {
                "description": "The files to copy from the part's layer to the stage directory.",
                "examples": [
                  "[bin, usr/bin]",
                  "[-etc/cloud/cloud.cfg.d/90_dpkg.cfg]"
                ],
                "items": {
                  "type": "string"
                },
                "title": "Overlay",
                "type": "array"
              },
              "stage": {
                "description": "The files to copy from the build directory to the stage directory.",
                "examples": [
                  "[usr/bin/*, usr/share]",
                  "[-usr, zfsutils-linux]"
                ],
                "items": {
                  "description": "relative path",
                  "minLength": 1,
                  "type": "string"
                },
                "title": "Stage",
                "type": "array"
              },
              "prime": {
                "description": "",
                "examples": [
                  "[usr/lib/*/qt6/plugins/tls/*, -usr/share/thumbnailers]"
                ],
                "items": {
                  "description": "relative path",
                  "minLength": 1,
                  "type": "string"
                },
                "title": "Prime",
                "type": "array"
              },
              "override-pull": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "description": "The commands to run instead of the default behavior of the pull step.",
                "examples": [
                  "|\n  craftctl default\n  rm $CRAFT_PART_SRC/pyproject.toml"
                ],
                "title": "Override-Pull"
              },
              "overlay-script": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "description": "The commands to run after the part's overlay packages are installed.",
                "examples": [
                  "|\n  rm -f ${CRAFT_OVERLAY}/usr/bin/vi ${CRAFT_OVERLAY}/usr/bin/vim*\n  rm -f ${CRAFT_OVERLAY}/usr/bin/emacs*\n  rm -f ${CRAFT_OVERLAY}/bin/nano"
                ],
                "title": "Overlay-Script"
              },
              "override-overlay": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "description": "Shell script to run inside the overlay chroot after mounting.",
                "examples": [
                  "echo 'hello from chroot' > /root/test.txt"
                ],
                "title": "Override-Overlay"
              },
              "override-build": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "description": "The commands to run instead of the default behavior of the build step.",
                "examples": [
                  "|\n  cd cmd/webhook\n  mkdir $CRAFT_PART_INSTALL/ko-app\n  go build -o $CRAFT_PART_INSTALL/ko-app/webhook -a ."
                ],
                "title": "Override-Build"
              },
              "override-stage": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "description": "The commands to run instead of the default behavior of the stage step.",
                "examples": [
                  "|\n  craftctl default\n  chown -R 499 \"${CRAFT_PART_INSTALL}/entrypoint.sh\""
                ],
                "title": "Override-Stage"
              },
              "override-prime": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "description": "The commands to run instead of the default behavior of the prime step.",
                "examples": [
                  "|\n  craftctl default\n  mkdir -p $CRAFT_PRIME/var/lib/mysql\n  mkdir -p $CRAFT_PRIME/var/lib/mysqld"
                ],
                "title": "Override-Prime"
              },
              "permissions": {
                "default": [],
                "description": "The ownership and permission settings for a set of files in the part's prime directory.",
                "examples": [
                  "[{owner: 2000, group: 2000}, {path: srv/indico/start-indico.sh, mode: \"544\"}, {path: etc/, mode: \"755\"}]"
                ],
                "items": {
                  "$ref": "#/$defs/Permissions"
                },
                "title": "Permissions",
                "type": "array"
              }
            },
            "additionalProperties": false,
            "type": "object"
          }
        },
        {
          "if": {
            "properties": {
              "plugin": {
                "const": "jlink"
              }
            }
          },
          "then": {
            "$comment": "common properties had to be repeated here or they would be considered invalid by the schema validator otherwise",
            "properties": {
              "plugin": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "description": "The plugin to build the part with.",
                "examples": [
                  "python",
                  "dump"
                ],
                "title": "Plugin",
                "enum": [
                  "dump",
                  "nil",
                  "ant",
                  "autotools",
                  "cargo-use",
                  "cmake",
                  "dotnet",
                  "go",
                  "go-use",
                  "gradle",
                  "jlink",
                  "make",
                  "maven",
                  "maven-use",
                  "meson",
                  "npm",
                  "npm-use",
                  "poetry",
                  "python",
                  "qmake",
                  "ruby",
                  "rust",
                  "scons",
                  "uv"
                ]
              },
              "source": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "description": "The location of the source files for the part.",
                "examples": [
                  ".",
                  "https://github.com/canonical/dqlite"
                ],
                "title": "Source"
              },
              "jlink-jars": {
                "default": [],
                "items": {
                  "type": "string"
                },
                "title": "Jlink-Jars",
                "type": "array"
              },
              "jlink-extra-modules": {
                "default": [],
                "items": {
                  "type": "string"
                },
                "title": "Jlink-Extra-Modules",
                "type": "array"
              },
              "jlink-modules": {
                "default": [],
                "items": {
                  "type": "string"
                },
                "title": "Jlink-Modules",
                "type": "array"
              },
              "jlink-multi-release": {
                "anyOf": [
                  {
                    "type": "integer"
                  },
                  {
                    "type": "string"
                  }
                ],
                "default": "base",
                "title": "Jlink-Multi-Release"
              },
              "source-checksum": {
                "default": "",
                "description": "The checksum of the downloaded source, to ensure integrity.",
                "examples": [
                  "sha256/1451d01ee3a21100340aed867d0b799f46f0b1749680028d38c3f5d0128fb8a7"
                ],
                "title": "Source-Checksum",
                "type": "string"
              },
              "source-channel": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "title": "Source-Channel"
              },
              "source-branch": {
                "default": "",
                "description": "The target branch for Git sources.",
                "examples": [
                  "main",
                  "hotfix/2.10"
                ],
                "title": "Source-Branch",
                "type": "string"
              },
              "source-commit": {
                "default": "",
                "description": "The target commit for Git sources.",
                "examples": [
                  "36086af03fc4941a8ac219648ce77401743f3ae0"
                ],
                "title": "Source-Commit",
                "type": "string"
              },
              "source-depth": {
                "default": 0,
                "description": "The commit depth to fetch for Git sources.",
                "examples": [
                  "1"
                ],
                "title": "Source-Depth",
                "type": "integer"
              },
              "source-subdir": {
                "default": "",
                "description": "The subdirectory of the unpacked source where the build will occur.",
                "examples": [
                  "src",
                  "demo_nodes_cpp"
                ],
                "title": "Source-Subdir",
                "type": "string"
              },
              "source-submodules": {
                "anyOf": [
                  {
                    "items": {
                      "type": "string"
                    },
                    "type": "array"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "description": "The registered submodules to fetch from Git sources.",
                "examples": [
                  "[third_party/googletest, third_party/jsoncpp]",
                  "[libbpf]"
                ],
                "title": "Source-Submodules"
              },
              "source-tag": {
                "default": "",
                "description": "The target tag for Git sources.",
                "examples": [
                  "1.0.1"
                ],
                "title": "Source-Tag",
                "type": "string"
              },
              "source-type": {
                "default": "",
                "description": "The format of the part's source.",
                "examples": [
                  "git",
                  "local"
                ],
                "title": "Source-Type",
                "type": "string"
              },
              "disable-parallel": {
                "default": false,
                "description": "Whether to disable CPU multithreading during the build step.",
                "examples": [
                  "true"
                ],
                "title": "Disable-Parallel",
                "type": "boolean"
              },
              "after": {
                "default": [],
                "description": "The parts to process before starting this part's build.",
                "examples": [
                  "[build-deps, daemon]"
                ],
                "items": {
                  "type": "string"
                },
                "title": "After",
                "type": "array"
              },
              "overlay-packages": {
                "default": [],
                "description": "The packages to install in the part's layer.",
                "examples": [
                  "[ed]"
                ],
                "items": {
                  "type": "string"
                },
                "title": "Overlay-Packages",
                "type": "array"
              },
              "stage-snaps": {
                "default": [],
                "description": "The snaps to include in the stage environment.",
                "examples": [
                  "[go/1.17, chisel/latest/candidate, mir-kiosk-x11]"
                ],
                "items": {
                  "type": "string"
                },
                "title": "Stage-Snaps",
                "type": "array"
              },
              "stage-packages": {
                "default": [],
                "description": "The packages or Chisel slices to include in the stage environment.",
                "examples": [
                  "[curl, libxml2]"
                ],
                "items": {
                  "type": "string"
                },
                "title": "Stage-Packages",
                "type": "array"
              },
              "build-snaps": {
                "default": [],
                "description": "The snaps to install in the build environment.",
                "examples": [
                  "[go/latest/stable, node/stable]"
                ],
                "items": {
                  "type": "string"
                },
                "title": "Build-Snaps",
                "type": "array"
              },
              "build-packages": {
                "default": [],
                "description": "The packages to install in the build environment.",
                "examples": [
                  "[git, libffi-dev, libssl-dev]"
                ],
                "items": {
                  "type": "string"
                },
                "title": "Build-Packages",
                "type": "array"
              },
              "build-environment": {
                "default": [],
                "description": "The environment variables to define for the build step, as key-value pairs.",
                "examples": [
                  "[{MESSAGE: \"Hello world!\"}, {NAME: \"Craft Parts\"}]"
                ],
                "items": {
                  "type": "object",
                  "additionalProperties": {
                    "type": "string"
                  }
                },
                "title": "Build-Environment",
                "type": "array"
              },
              "build-attributes": {
                "default": [],
                "description": "Identifiers that control specific behaviors during the build.",
                "examples": [
                  "[enable-usrmerge]",
                  "[disable-usrmerge]"
                ],
                "items": {
                  "type": "string"
                },
                "title": "Build-Attributes",
                "type": "array"
              },
              "organize": {
                "type": "object",
                "description": "A map of files from the build directory to their destinations in the stage directory.",
                "examples": [
                  "{hello.py: bin/hello}"
                ],
                "title": "Organize",
                "additionalProperties": {
                  "type": "string"
                }
              },
              "overlay": {
                "description": "The files to copy from the part's layer to the stage directory.",
                "examples": [
                  "[bin, usr/bin]",
                  "[-etc/cloud/cloud.cfg.d/90_dpkg.cfg]"
                ],
                "items": {
                  "type": "string"
                },
                "title": "Overlay",
                "type": "array"
              },
              "stage": {
                "description": "The files to copy from the build directory to the stage directory.",
                "examples": [
                  "[usr/bin/*, usr/share]",
                  "[-usr, zfsutils-linux]"
                ],
                "items": {
                  "description": "relative path",
                  "minLength": 1,
                  "type": "string"
                },
                "title": "Stage",
                "type": "array"
              },
              "prime": {
                "description": "",
                "examples": [
                  "[usr/lib/*/qt6/plugins/tls/*, -usr/share/thumbnailers]"
                ],
                "items": {
                  "description": "relative path",
                  "minLength": 1,
                  "type": "string"
                },
                "title": "Prime",
                "type": "array"
              },
              "override-pull": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "description": "The commands to run instead of the default behavior of the pull step.",
                "examples": [
                  "|\n  craftctl default\n  rm $CRAFT_PART_SRC/pyproject.toml"
                ],
                "title": "Override-Pull"
              },
              "overlay-script": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "description": "The commands to run after the part's overlay packages are installed.",
                "examples": [
                  "|\n  rm -f ${CRAFT_OVERLAY}/usr/bin/vi ${CRAFT_OVERLAY}/usr/bin/vim*\n  rm -f ${CRAFT_OVERLAY}/usr/bin/emacs*\n  rm -f ${CRAFT_OVERLAY}/bin/nano"
                ],
                "title": "Overlay-Script"
              },
              "override-overlay": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "description": "Shell script to run inside the overlay chroot after mounting.",
                "examples": [
                  "echo 'hello from chroot' > /root/test.txt"
                ],
                "title": "Override-Overlay"
              },
              "override-build": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "description": "The commands to run instead of the default behavior of the build step.",
                "examples": [
                  "|\n  cd cmd/webhook\n  mkdir $CRAFT_PART_INSTALL/ko-app\n  go build -o $CRAFT_PART_INSTALL/ko-app/webhook -a ."
                ],
                "title": "Override-Build"
              },
              "override-stage": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "description": "The commands to run instead of the default behavior of the stage step.",
                "examples": [
                  "|\n  craftctl default\n  chown -R 499 \"${CRAFT_PART_INSTALL}/entrypoint.sh\""
                ],
                "title": "Override-Stage"
              },
              "override-prime": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "description": "The commands to run instead of the default behavior of the prime step.",
                "examples": [
                  "|\n  craftctl default\n  mkdir -p $CRAFT_PRIME/var/lib/mysql\n  mkdir -p $CRAFT_PRIME/var/lib/mysqld"
                ],
                "title": "Override-Prime"
              },
              "permissions": {
                "default": [],
                "description": "The ownership and permission settings for a set of files in the part's prime directory.",
                "examples": [
                  "[{owner: 2000, group: 2000}, {path: srv/indico/start-indico.sh, mode: \"544\"}, {path: etc/, mode: \"755\"}]"
                ],
                "items": {
                  "$ref": "#/$defs/Permissions"
                },
                "title": "Permissions",
                "type": "array"
              }
            },
            "additionalProperties": false,
            "type": "object"
          }
        },
        {
          "if": {
            "properties": {
              "plugin": {
                "const": "make"
              }
            }
          },
          "then": {
            "$comment": "common properties had to be repeated here or they would be considered invalid by the schema validator otherwise",
            "properties": {
              "plugin": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "description": "The plugin to build the part with.",
                "examples": [
                  "python",
                  "dump"
                ],
                "title": "Plugin",
                "enum": [
                  "dump",
                  "nil",
                  "ant",
                  "autotools",
                  "cargo-use",
                  "cmake",
                  "dotnet",
                  "go",
                  "go-use",
                  "gradle",
                  "jlink",
                  "make",
                  "maven",
                  "maven-use",
                  "meson",
                  "npm",
                  "npm-use",
                  "poetry",
                  "python",
                  "qmake",
                  "ruby",
                  "rust",
                  "scons",
                  "uv"
                ]
              },
              "source": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "description": "The location of the source files for the part.",
                "examples": [
                  ".",
                  "https://github.com/canonical/dqlite"
                ],
                "title": "Source"
              },
              "make-parameters": {
                "default": [],
                "items": {
                  "type": "string"
                },
                "title": "Make-Parameters",
                "type": "array"
              },
              "source-checksum": {
                "default": "",
                "description": "The checksum of the downloaded source, to ensure integrity.",
                "examples": [
                  "sha256/1451d01ee3a21100340aed867d0b799f46f0b1749680028d38c3f5d0128fb8a7"
                ],
                "title": "Source-Checksum",
                "type": "string"
              },
              "source-channel": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "title": "Source-Channel"
              },
              "source-branch": {
                "default": "",
                "description": "The target branch for Git sources.",
                "examples": [
                  "main",
                  "hotfix/2.10"
                ],
                "title": "Source-Branch",
                "type": "string"
              },
              "source-commit": {
                "default": "",
                "description": "The target commit for Git sources.",
                "examples": [
                  "36086af03fc4941a8ac219648ce77401743f3ae0"
                ],
                "title": "Source-Commit",
                "type": "string"
              },
              "source-depth": {
                "default": 0,
                "description": "The commit depth to fetch for Git sources.",
                "examples": [
                  "1"
                ],
                "title": "Source-Depth",
                "type": "integer"
              },
              "source-subdir": {
                "default": "",
                "description": "The subdirectory of the unpacked source where the build will occur.",
                "examples": [
                  "src",
                  "demo_nodes_cpp"
                ],
                "title": "Source-Subdir",
                "type": "string"
              },
              "source-submodules": {
                "anyOf": [
                  {
                    "items": {
                      "type": "string"
                    },
                    "type": "array"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "description": "The registered submodules to fetch from Git sources.",
                "examples": [
                  "[third_party/googletest, third_party/jsoncpp]",
                  "[libbpf]"
                ],
                "title": "Source-Submodules"
              },
              "source-tag": {
                "default": "",
                "description": "The target tag for Git sources.",
                "examples": [
                  "1.0.1"
                ],
                "title": "Source-Tag",
                "type": "string"
              },
              "source-type": {
                "default": "",
                "description": "The format of the part's source.",
                "examples": [
                  "git",
                  "local"
                ],
                "title": "Source-Type",
                "type": "string"
              },
              "disable-parallel": {
                "default": false,
                "description": "Whether to disable CPU multithreading during the build step.",
                "examples": [
                  "true"
                ],
                "title": "Disable-Parallel",
                "type": "boolean"
              },
              "after": {
                "default": [],
                "description": "The parts to process before starting this part's build.",
                "examples": [
                  "[build-deps, daemon]"
                ],
                "items": {
                  "type": "string"
                },
                "title": "After",
                "type": "array"
              },
              "overlay-packages": {
                "default": [],
                "description": "The packages to install in the part's layer.",
                "examples": [
                  "[ed]"
                ],
                "items": {
                  "type": "string"
                },
                "title": "Overlay-Packages",
                "type": "array"
              },
              "stage-snaps": {
                "default": [],
                "description": "The snaps to include in the stage environment.",
                "examples": [
                  "[go/1.17, chisel/latest/candidate, mir-kiosk-x11]"
                ],
                "items": {
                  "type": "string"
                },
                "title": "Stage-Snaps",
                "type": "array"
              },
              "stage-packages": {
                "default": [],
                "description": "The packages or Chisel slices to include in the stage environment.",
                "examples": [
                  "[curl, libxml2]"
                ],
                "items": {
                  "type": "string"
                },
                "title": "Stage-Packages",
                "type": "array"
              },
              "build-snaps": {
                "default": [],
                "description": "The snaps to install in the build environment.",
                "examples": [
                  "[go/latest/stable, node/stable]"
                ],
                "items": {
                  "type": "string"
                },
                "title": "Build-Snaps",
                "type": "array"
              },
              "build-packages": {
                "default": [],
                "description": "The packages to install in the build environment.",
                "examples": [
                  "[git, libffi-dev, libssl-dev]"
                ],
                "items": {
                  "type": "string"
                },
                "title": "Build-Packages",
                "type": "array"
              },
              "build-environment": {
                "default": [],
                "description": "The environment variables to define for the build step, as key-value pairs.",
                "examples": [
                  "[{MESSAGE: \"Hello world!\"}, {NAME: \"Craft Parts\"}]"
                ],
                "items": {
                  "type": "object",
                  "additionalProperties": {
                    "type": "string"
                  }
                },
                "title": "Build-Environment",
                "type": "array"
              },
              "build-attributes": {
                "default": [],
                "description": "Identifiers that control specific behaviors during the build.",
                "examples": [
                  "[enable-usrmerge]",
                  "[disable-usrmerge]"
                ],
                "items": {
                  "type": "string"
                },
                "title": "Build-Attributes",
                "type": "array"
              },
              "organize": {
                "type": "object",
                "description": "A map of files from the build directory to their destinations in the stage directory.",
                "examples": [
                  "{hello.py: bin/hello}"
                ],
                "title": "Organize",
                "additionalProperties": {
                  "type": "string"
                }
              },
              "overlay": {
                "description": "The files to copy from the part's layer to the stage directory.",
                "examples": [
                  "[bin, usr/bin]",
                  "[-etc/cloud/cloud.cfg.d/90_dpkg.cfg]"
                ],
                "items": {
                  "type": "string"
                },
                "title": "Overlay",
                "type": "array"
              },
              "stage": {
                "description": "The files to copy from the build directory to the stage directory.",
                "examples": [
                  "[usr/bin/*, usr/share]",
                  "[-usr, zfsutils-linux]"
                ],
                "items": {
                  "description": "relative path",
                  "minLength": 1,
                  "type": "string"
                },
                "title": "Stage",
                "type": "array"
              },
              "prime": {
                "description": "",
                "examples": [
                  "[usr/lib/*/qt6/plugins/tls/*, -usr/share/thumbnailers]"
                ],
                "items": {
                  "description": "relative path",
                  "minLength": 1,
                  "type": "string"
                },
                "title": "Prime",
                "type": "array"
              },
              "override-pull": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "description": "The commands to run instead of the default behavior of the pull step.",
                "examples": [
                  "|\n  craftctl default\n  rm $CRAFT_PART_SRC/pyproject.toml"
                ],
                "title": "Override-Pull"
              },
              "overlay-script": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "description": "The commands to run after the part's overlay packages are installed.",
                "examples": [
                  "|\n  rm -f ${CRAFT_OVERLAY}/usr/bin/vi ${CRAFT_OVERLAY}/usr/bin/vim*\n  rm -f ${CRAFT_OVERLAY}/usr/bin/emacs*\n  rm -f ${CRAFT_OVERLAY}/bin/nano"
                ],
                "title": "Overlay-Script"
              },
              "override-overlay": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "description": "Shell script to run inside the overlay chroot after mounting.",
                "examples": [
                  "echo 'hello from chroot' > /root/test.txt"
                ],
                "title": "Override-Overlay"
              },
              "override-build": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "description": "The commands to run instead of the default behavior of the build step.",
                "examples": [
                  "|\n  cd cmd/webhook\n  mkdir $CRAFT_PART_INSTALL/ko-app\n  go build -o $CRAFT_PART_INSTALL/ko-app/webhook -a ."
                ],
                "title": "Override-Build"
              },
              "override-stage": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "description": "The commands to run instead of the default behavior of the stage step.",
                "examples": [
                  "|\n  craftctl default\n  chown -R 499 \"${CRAFT_PART_INSTALL}/entrypoint.sh\""
                ],
                "title": "Override-Stage"
              },
              "override-prime": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "description": "The commands to run instead of the default behavior of the prime step.",
                "examples": [
                  "|\n  craftctl default\n  mkdir -p $CRAFT_PRIME/var/lib/mysql\n  mkdir -p $CRAFT_PRIME/var/lib/mysqld"
                ],
                "title": "Override-Prime"
              },
              "permissions": {
                "default": [],
                "description": "The ownership and permission settings for a set of files in the part's prime directory.",
                "examples": [
                  "[{owner: 2000, group: 2000}, {path: srv/indico/start-indico.sh, mode: \"544\"}, {path: etc/, mode: \"755\"}]"
                ],
                "items": {
                  "$ref": "#/$defs/Permissions"
                },
                "title": "Permissions",
                "type": "array"
              }
            },
            "additionalProperties": false,
            "type": "object"
          }
        },
        {
          "if": {
            "properties": {
              "plugin": {
                "const": "maven"
              }
            }
          },
          "then": {
            "$comment": "common properties had to be repeated here or they would be considered invalid by the schema validator otherwise",
            "properties": {
              "plugin": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "description": "The plugin to build the part with.",
                "examples": [
                  "python",
                  "dump"
                ],
                "title": "Plugin",
                "enum": [
                  "dump",
                  "nil",
                  "ant",
                  "autotools",
                  "cargo-use",
                  "cmake",
                  "dotnet",
                  "go",
                  "go-use",
                  "gradle",
                  "jlink",
                  "make",
                  "maven",
                  "maven-use",
                  "meson",
                  "npm",
                  "npm-use",
                  "poetry",
                  "python",
                  "qmake",
                  "ruby",
                  "rust",
                  "scons",
                  "uv"
                ]
              },
              "source": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "description": "The location of the source files for the part.",
                "examples": [
                  ".",
                  "https://github.com/canonical/dqlite"
                ],
                "title": "Source"
              },
              "maven-parameters": {
                "default": [],
                "items": {
                  "type": "string"
                },
                "title": "Maven-Parameters",
                "type": "array"
              },
              "maven-use-wrapper": {
                "default": false,
                "title": "Maven-Use-Wrapper",
                "type": "boolean"
              },
              "source-checksum": {
                "default": "",
                "description": "The checksum of the downloaded source, to ensure integrity.",
                "examples": [
                  "sha256/1451d01ee3a21100340aed867d0b799f46f0b1749680028d38c3f5d0128fb8a7"
                ],
                "title": "Source-Checksum",
                "type": "string"
              },
              "source-channel": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "title": "Source-Channel"
              },
              "source-branch": {
                "default": "",
                "description": "The target branch for Git sources.",
                "examples": [
                  "main",
                  "hotfix/2.10"
                ],
                "title": "Source-Branch",
                "type": "string"
              },
              "source-commit": {
                "default": "",
                "description": "The target commit for Git sources.",
                "examples": [
                  "36086af03fc4941a8ac219648ce77401743f3ae0"
                ],
                "title": "Source-Commit",
                "type": "string"
              },
              "source-depth": {
                "default": 0,
                "description": "The commit depth to fetch for Git sources.",
                "examples": [
                  "1"
                ],
                "title": "Source-Depth",
                "type": "integer"
              },
              "source-subdir": {
                "default": "",
                "description": "The subdirectory of the unpacked source where the build will occur.",
                "examples": [
                  "src",
                  "demo_nodes_cpp"
                ],
                "title": "Source-Subdir",
                "type": "string"
              },
              "source-submodules": {
                "anyOf": [
                  {
                    "items": {
                      "type": "string"
                    },
                    "type": "array"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "description": "The registered submodules to fetch from Git sources.",
                "examples": [
                  "[third_party/googletest, third_party/jsoncpp]",
                  "[libbpf]"
                ],
                "title": "Source-Submodules"
              },
              "source-tag": {
                "default": "",
                "description": "The target tag for Git sources.",
                "examples": [
                  "1.0.1"
                ],
                "title": "Source-Tag",
                "type": "string"
              },
              "source-type": {
                "default": "",
                "description": "The format of the part's source.",
                "examples": [
                  "git",
                  "local"
                ],
                "title": "Source-Type",
                "type": "string"
              },
              "disable-parallel": {
                "default": false,
                "description": "Whether to disable CPU multithreading during the build step.",
                "examples": [
                  "true"
                ],
                "title": "Disable-Parallel",
                "type": "boolean"
              },
              "after": {
                "default": [],
                "description": "The parts to process before starting this part's build.",
                "examples": [
                  "[build-deps, daemon]"
                ],
                "items": {
                  "type": "string"
                },
                "title": "After",
                "type": "array"
              },
              "overlay-packages": {
                "default": [],
                "description": "The packages to install in the part's layer.",
                "examples": [
                  "[ed]"
                ],
                "items": {
                  "type": "string"
                },
                "title": "Overlay-Packages",
                "type": "array"
              },
              "stage-snaps": {
                "default": [],
                "description": "The snaps to include in the stage environment.",
                "examples": [
                  "[go/1.17, chisel/latest/candidate, mir-kiosk-x11]"
                ],
                "items": {
                  "type": "string"
                },
                "title": "Stage-Snaps",
                "type": "array"
              },
              "stage-packages": {
                "default": [],
                "description": "The packages or Chisel slices to include in the stage environment.",
                "examples": [
                  "[curl, libxml2]"
                ],
                "items": {
                  "type": "string"
                },
                "title": "Stage-Packages",
                "type": "array"
              },
              "build-snaps": {
                "default": [],
                "description": "The snaps to install in the build environment.",
                "examples": [
                  "[go/latest/stable, node/stable]"
                ],
                "items": {
                  "type": "string"
                },
                "title": "Build-Snaps",
                "type": "array"
              },
              "build-packages": {
                "default": [],
                "description": "The packages to install in the build environment.",
                "examples": [
                  "[git, libffi-dev, libssl-dev]"
                ],
                "items": {
                  "type": "string"
                },
                "title": "Build-Packages",
                "type": "array"
              },
              "build-environment": {
                "default": [],
                "description": "The environment variables to define for the build step, as key-value pairs.",
                "examples": [
                  "[{MESSAGE: \"Hello world!\"}, {NAME: \"Craft Parts\"}]"
                ],
                "items": {
                  "type": "object",
                  "additionalProperties": {
                    "type": "string"
                  }
                },
                "title": "Build-Environment",
                "type": "array"
              },
              "build-attributes": {
                "default": [],
                "description": "Identifiers that control specific behaviors during the build.",
                "examples": [
                  "[enable-usrmerge]",
                  "[disable-usrmerge]"
                ],
                "items": {
                  "type": "string"
                },
                "title": "Build-Attributes",
                "type": "array"
              },
              "organize": {
                "type": "object",
                "description": "A map of files from the build directory to their destinations in the stage directory.",
                "examples": [
                  "{hello.py: bin/hello}"
                ],
                "title": "Organize",
                "additionalProperties": {
                  "type": "string"
                }
              },
              "overlay": {
                "description": "The files to copy from the part's layer to the stage directory.",
                "examples": [
                  "[bin, usr/bin]",
                  "[-etc/cloud/cloud.cfg.d/90_dpkg.cfg]"
                ],
                "items": {
                  "type": "string"
                },
                "title": "Overlay",
                "type": "array"
              },
              "stage": {
                "description": "The files to copy from the build directory to the stage directory.",
                "examples": [
                  "[usr/bin/*, usr/share]",
                  "[-usr, zfsutils-linux]"
                ],
                "items": {
                  "description": "relative path",
                  "minLength": 1,
                  "type": "string"
                },
                "title": "Stage",
                "type": "array"
              },
              "prime": {
                "description": "",
                "examples": [
                  "[usr/lib/*/qt6/plugins/tls/*, -usr/share/thumbnailers]"
                ],
                "items": {
                  "description": "relative path",
                  "minLength": 1,
                  "type": "string"
                },
                "title": "Prime",
                "type": "array"
              },
              "override-pull": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "description": "The commands to run instead of the default behavior of the pull step.",
                "examples": [
                  "|\n  craftctl default\n  rm $CRAFT_PART_SRC/pyproject.toml"
                ],
                "title": "Override-Pull"
              },
              "overlay-script": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "description": "The commands to run after the part's overlay packages are installed.",
                "examples": [
                  "|\n  rm -f ${CRAFT_OVERLAY}/usr/bin/vi ${CRAFT_OVERLAY}/usr/bin/vim*\n  rm -f ${CRAFT_OVERLAY}/usr/bin/emacs*\n  rm -f ${CRAFT_OVERLAY}/bin/nano"
                ],
                "title": "Overlay-Script"
              },
              "override-overlay": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "description": "Shell script to run inside the overlay chroot after mounting.",
                "examples": [
                  "echo 'hello from chroot' > /root/test.txt"
                ],
                "title": "Override-Overlay"
              },
              "override-build": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "description": "The commands to run instead of the default behavior of the build step.",
                "examples": [
                  "|\n  cd cmd/webhook\n  mkdir $CRAFT_PART_INSTALL/ko-app\n  go build -o $CRAFT_PART_INSTALL/ko-app/webhook -a ."
                ],
                "title": "Override-Build"
              },
              "override-stage": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "description": "The commands to run instead of the default behavior of the stage step.",
                "examples": [
                  "|\n  craftctl default\n  chown -R 499 \"${CRAFT_PART_INSTALL}/entrypoint.sh\""
                ],
                "title": "Override-Stage"
              },
              "override-prime": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "description": "The commands to run instead of the default behavior of the prime step.",
                "examples": [
                  "|\n  craftctl default\n  mkdir -p $CRAFT_PRIME/var/lib/mysql\n  mkdir -p $CRAFT_PRIME/var/lib/mysqld"
                ],
                "title": "Override-Prime"
              },
              "permissions": {
                "default": [],
                "description": "The ownership and permission settings for a set of files in the part's prime directory.",
                "examples": [
                  "[{owner: 2000, group: 2000}, {path: srv/indico/start-indico.sh, mode: \"544\"}, {path: etc/, mode: \"755\"}]"
                ],
                "items": {
                  "$ref": "#/$defs/Permissions"
                },
                "title": "Permissions",
                "type": "array"
              }
            },
            "additionalProperties": false,
            "type": "object"
          }
        },
        {
          "if": {
            "properties": {
              "plugin": {
                "const": "maven-use"
              }
            }
          },
          "then": {
            "$comment": "common properties had to be repeated here or they would be considered invalid by the schema validator otherwise",
            "properties": {
              "plugin": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "description": "The plugin to build the part with.",
                "examples": [
                  "python",
                  "dump"
                ],
                "title": "Plugin",
                "enum": [
                  "dump",
                  "nil",
                  "ant",
                  "autotools",
                  "cargo-use",
                  "cmake",
                  "dotnet",
                  "go",
                  "go-use",
                  "gradle",
                  "jlink",
                  "make",
                  "maven",
                  "maven-use",
                  "meson",
                  "npm",
                  "npm-use",
                  "poetry",
                  "python",
                  "qmake",
                  "ruby",
                  "rust",
                  "scons",
                  "uv"
                ]
              },
              "source": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "description": "The location of the source files for the part.",
                "examples": [
                  ".",
                  "https://github.com/canonical/dqlite"
                ],
                "title": "Source"
              },
              "maven-use-parameters": {
                "default": [],
                "items": {
                  "type": "string"
                },
                "title": "Maven-Use-Parameters",
                "type": "array"
              },
              "source-checksum": {
                "default": "",
                "description": "The checksum of the downloaded source, to ensure integrity.",
                "examples": [
                  "sha256/1451d01ee3a21100340aed867d0b799f46f0b1749680028d38c3f5d0128fb8a7"
                ],
                "title": "Source-Checksum",
                "type": "string"
              },
              "source-channel": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "title": "Source-Channel"
              },
              "source-branch": {
                "default": "",
                "description": "The target branch for Git sources.",
                "examples": [
                  "main",
                  "hotfix/2.10"
                ],
                "title": "Source-Branch",
                "type": "string"
              },
              "source-commit": {
                "default": "",
                "description": "The target commit for Git sources.",
                "examples": [
                  "36086af03fc4941a8ac219648ce77401743f3ae0"
                ],
                "title": "Source-Commit",
                "type": "string"
              },
              "source-depth": {
                "default": 0,
                "description": "The commit depth to fetch for Git sources.",
                "examples": [
                  "1"
                ],
                "title": "Source-Depth",
                "type": "integer"
              },
              "source-subdir": {
                "default": "",
                "description": "The subdirectory of the unpacked source where the build will occur.",
                "examples": [
                  "src",
                  "demo_nodes_cpp"
                ],
                "title": "Source-Subdir",
                "type": "string"
              },
              "source-submodules": {
                "anyOf": [
                  {
                    "items": {
                      "type": "string"
                    },
                    "type": "array"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "description": "The registered submodules to fetch from Git sources.",
                "examples": [
                  "[third_party/googletest, third_party/jsoncpp]",
                  "[libbpf]"
                ],
                "title": "Source-Submodules"
              },
              "source-tag": {
                "default": "",
                "description": "The target tag for Git sources.",
                "examples": [
                  "1.0.1"
                ],
                "title": "Source-Tag",
                "type": "string"
              },
              "source-type": {
                "default": "",
                "description": "The format of the part's source.",
                "examples": [
                  "git",
                  "local"
                ],
                "title": "Source-Type",
                "type": "string"
              },
              "disable-parallel": {
                "default": false,
                "description": "Whether to disable CPU multithreading during the build step.",
                "examples": [
                  "true"
                ],
                "title": "Disable-Parallel",
                "type": "boolean"
              },
              "after": {
                "default": [],
                "description": "The parts to process before starting this part's build.",
                "examples": [
                  "[build-deps, daemon]"
                ],
                "items": {
                  "type": "string"
                },
                "title": "After",
                "type": "array"
              },
              "overlay-packages": {
                "default": [],
                "description": "The packages to install in the part's layer.",
                "examples": [
                  "[ed]"
                ],
                "items": {
                  "type": "string"
                },
                "title": "Overlay-Packages",
                "type": "array"
              },
              "stage-snaps": {
                "default": [],
                "description": "The snaps to include in the stage environment.",
                "examples": [
                  "[go/1.17, chisel/latest/candidate, mir-kiosk-x11]"
                ],
                "items": {
                  "type": "string"
                },
                "title": "Stage-Snaps",
                "type": "array"
              },
              "stage-packages": {
                "default": [],
                "description": "The packages or Chisel slices to include in the stage environment.",
                "examples": [
                  "[curl, libxml2]"
                ],
                "items": {
                  "type": "string"
                },
                "title": "Stage-Packages",
                "type": "array"
              },
              "build-snaps": {
                "default": [],
                "description": "The snaps to install in the build environment.",
                "examples": [
                  "[go/latest/stable, node/stable]"
                ],
                "items": {
                  "type": "string"
                },
                "title": "Build-Snaps",
                "type": "array"
              },
              "build-packages": {
                "default": [],
                "description": "The packages to install in the build environment.",
                "examples": [
                  "[git, libffi-dev, libssl-dev]"
                ],
                "items": {
                  "type": "string"
                },
                "title": "Build-Packages",
                "type": "array"
              },
              "build-environment": {
                "default": [],
                "description": "The environment variables to define for the build step, as key-value pairs.",
                "examples": [
                  "[{MESSAGE: \"Hello world!\"}, {NAME: \"Craft Parts\"}]"
                ],
                "items": {
                  "type": "object",
                  "additionalProperties": {
                    "type": "string"
                  }
                },
                "title": "Build-Environment",
                "type": "array"
              },
              "build-attributes": {
                "default": [],
                "description": "Identifiers that control specific behaviors during the build.",
                "examples": [
                  "[enable-usrmerge]",
                  "[disable-usrmerge]"
                ],
                "items": {
                  "type": "string"
                },
                "title": "Build-Attributes",
                "type": "array"
              },
              "organize": {
                "type": "object",
                "description": "A map of files from the build directory to their destinations in the stage directory.",
                "examples": [
                  "{hello.py: bin/hello}"
                ],
                "title": "Organize",
                "additionalProperties": {
                  "type": "string"
                }
              },
              "overlay": {
                "description": "The files to copy from the part's layer to the stage directory.",
                "examples": [
                  "[bin, usr/bin]",
                  "[-etc/cloud/cloud.cfg.d/90_dpkg.cfg]"
                ],
                "items": {
                  "type": "string"
                },
                "title": "Overlay",
                "type": "array"
              },
              "stage": {
                "description": "The files to copy from the build directory to the stage directory.",
                "examples": [
                  "[usr/bin/*, usr/share]",
                  "[-usr, zfsutils-linux]"
                ],
                "items": {
                  "description": "relative path",
                  "minLength": 1,
                  "type": "string"
                },
                "title": "Stage",
                "type": "array"
              },
              "prime": {
                "description": "",
                "examples": [
                  "[usr/lib/*/qt6/plugins/tls/*, -usr/share/thumbnailers]"
                ],
                "items": {
                  "description": "relative path",
                  "minLength": 1,
                  "type": "string"
                },
                "title": "Prime",
                "type": "array"
              },
              "override-pull": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "description": "The commands to run instead of the default behavior of the pull step.",
                "examples": [
                  "|\n  craftctl default\n  rm $CRAFT_PART_SRC/pyproject.toml"
                ],
                "title": "Override-Pull"
              },
              "overlay-script": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "description": "The commands to run after the part's overlay packages are installed.",
                "examples": [
                  "|\n  rm -f ${CRAFT_OVERLAY}/usr/bin/vi ${CRAFT_OVERLAY}/usr/bin/vim*\n  rm -f ${CRAFT_OVERLAY}/usr/bin/emacs*\n  rm -f ${CRAFT_OVERLAY}/bin/nano"
                ],
                "title": "Overlay-Script"
              },
              "override-overlay": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "description": "Shell script to run inside the overlay chroot after mounting.",
                "examples": [
                  "echo 'hello from chroot' > /root/test.txt"
                ],
                "title": "Override-Overlay"
              },
              "override-build": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "description": "The commands to run instead of the default behavior of the build step.",
                "examples": [
                  "|\n  cd cmd/webhook\n  mkdir $CRAFT_PART_INSTALL/ko-app\n  go build -o $CRAFT_PART_INSTALL/ko-app/webhook -a ."
                ],
                "title": "Override-Build"
              },
              "override-stage": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "description": "The commands to run instead of the default behavior of the stage step.",
                "examples": [
                  "|\n  craftctl default\n  chown -R 499 \"${CRAFT_PART_INSTALL}/entrypoint.sh\""
                ],
                "title": "Override-Stage"
              },
              "override-prime": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "description": "The commands to run instead of the default behavior of the prime step.",
                "examples": [
                  "|\n  craftctl default\n  mkdir -p $CRAFT_PRIME/var/lib/mysql\n  mkdir -p $CRAFT_PRIME/var/lib/mysqld"
                ],
                "title": "Override-Prime"
              },
              "permissions": {
                "default": [],
                "description": "The ownership and permission settings for a set of files in the part's prime directory.",
                "examples": [
                  "[{owner: 2000, group: 2000}, {path: srv/indico/start-indico.sh, mode: \"544\"}, {path: etc/, mode: \"755\"}]"
                ],
                "items": {
                  "$ref": "#/$defs/Permissions"
                },
                "title": "Permissions",
                "type": "array"
              }
            },
            "additionalProperties": false,
            "type": "object"
          }
        },
        {
          "if": {
            "properties": {
              "plugin": {
                "const": "meson"
              }
            }
          },
          "then": {
            "$comment": "common properties had to be repeated here or they would be considered invalid by the schema validator otherwise",
            "properties": {
              "plugin": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "description": "The plugin to build the part with.",
                "examples": [
                  "python",
                  "dump"
                ],
                "title": "Plugin",
                "enum": [
                  "dump",
                  "nil",
                  "ant",
                  "autotools",
                  "cargo-use",
                  "cmake",
                  "dotnet",
                  "go",
                  "go-use",
                  "gradle",
                  "jlink",
                  "make",
                  "maven",
                  "maven-use",
                  "meson",
                  "npm",
                  "npm-use",
                  "poetry",
                  "python",
                  "qmake",
                  "ruby",
                  "rust",
                  "scons",
                  "uv"
                ]
              },
              "source": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "description": "The location of the source files for the part.",
                "examples": [
                  ".",
                  "https://github.com/canonical/dqlite"
                ],
                "title": "Source"
              },
              "meson-parameters": {
                "default": [],
                "items": {
                  "type": "string"
                },
                "title": "Meson-Parameters",
                "type": "array"
              },
              "source-checksum": {
                "default": "",
                "description": "The checksum of the downloaded source, to ensure integrity.",
                "examples": [
                  "sha256/1451d01ee3a21100340aed867d0b799f46f0b1749680028d38c3f5d0128fb8a7"
                ],
                "title": "Source-Checksum",
                "type": "string"
              },
              "source-channel": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "title": "Source-Channel"
              },
              "source-branch": {
                "default": "",
                "description": "The target branch for Git sources.",
                "examples": [
                  "main",
                  "hotfix/2.10"
                ],
                "title": "Source-Branch",
                "type": "string"
              },
              "source-commit": {
                "default": "",
                "description": "The target commit for Git sources.",
                "examples": [
                  "36086af03fc4941a8ac219648ce77401743f3ae0"
                ],
                "title": "Source-Commit",
                "type": "string"
              },
              "source-depth": {
                "default": 0,
                "description": "The commit depth to fetch for Git sources.",
                "examples": [
                  "1"
                ],
                "title": "Source-Depth",
                "type": "integer"
              },
              "source-subdir": {
                "default": "",
                "description": "The subdirectory of the unpacked source where the build will occur.",
                "examples": [
                  "src",
                  "demo_nodes_cpp"
                ],
                "title": "Source-Subdir",
                "type": "string"
              },
              "source-submodules": {
                "anyOf": [
                  {
                    "items": {
                      "type": "string"
                    },
                    "type": "array"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "description": "The registered submodules to fetch from Git sources.",
                "examples": [
                  "[third_party/googletest, third_party/jsoncpp]",
                  "[libbpf]"
                ],
                "title": "Source-Submodules"
              },
              "source-tag": {
                "default": "",
                "description": "The target tag for Git sources.",
                "examples": [
                  "1.0.1"
                ],
                "title": "Source-Tag",
                "type": "string"
              },
              "source-type": {
                "default": "",
                "description": "The format of the part's source.",
                "examples": [
                  "git",
                  "local"
                ],
                "title": "Source-Type",
                "type": "string"
              },
              "disable-parallel": {
                "default": false,
                "description": "Whether to disable CPU multithreading during the build step.",
                "examples": [
                  "true"
                ],
                "title": "Disable-Parallel",
                "type": "boolean"
              },
              "after": {
                "default": [],
                "description": "The parts to process before starting this part's build.",
                "examples": [
                  "[build-deps, daemon]"
                ],
                "items": {
                  "type": "string"
                },
                "title": "After",
                "type": "array"
              },
              "overlay-packages": {
                "default": [],
                "description": "The packages to install in the part's layer.",
                "examples": [
                  "[ed]"
                ],
                "items": {
                  "type": "string"
                },
                "title": "Overlay-Packages",
                "type": "array"
              },
              "stage-snaps": {
                "default": [],
                "description": "The snaps to include in the stage environment.",
                "examples": [
                  "[go/1.17, chisel/latest/candidate, mir-kiosk-x11]"
                ],
                "items": {
                  "type": "string"
                },
                "title": "Stage-Snaps",
                "type": "array"
              },
              "stage-packages": {
                "default": [],
                "description": "The packages or Chisel slices to include in the stage environment.",
                "examples": [
                  "[curl, libxml2]"
                ],
                "items": {
                  "type": "string"
                },
                "title": "Stage-Packages",
                "type": "array"
              },
              "build-snaps": {
                "default": [],
                "description": "The snaps to install in the build environment.",
                "examples": [
                  "[go/latest/stable, node/stable]"
                ],
                "items": {
                  "type": "string"
                },
                "title": "Build-Snaps",
                "type": "array"
              },
              "build-packages": {
                "default": [],
                "description": "The packages to install in the build environment.",
                "examples": [
                  "[git, libffi-dev, libssl-dev]"
                ],
                "items": {
                  "type": "string"
                },
                "title": "Build-Packages",
                "type": "array"
              },
              "build-environment": {
                "default": [],
                "description": "The environment variables to define for the build step, as key-value pairs.",
                "examples": [
                  "[{MESSAGE: \"Hello world!\"}, {NAME: \"Craft Parts\"}]"
                ],
                "items": {
                  "type": "object",
                  "additionalProperties": {
                    "type": "string"
                  }
                },
                "title": "Build-Environment",
                "type": "array"
              },
              "build-attributes": {
                "default": [],
                "description": "Identifiers that control specific behaviors during the build.",
                "examples": [
                  "[enable-usrmerge]",
                  "[disable-usrmerge]"
                ],
                "items": {
                  "type": "string"
                },
                "title": "Build-Attributes",
                "type": "array"
              },
              "organize": {
                "type": "object",
                "description": "A map of files from the build directory to their destinations in the stage directory.",
                "examples": [
                  "{hello.py: bin/hello}"
                ],
                "title": "Organize",
                "additionalProperties": {
                  "type": "string"
                }
              },
              "overlay": {
                "description": "The files to copy from the part's layer to the stage directory.",
                "examples": [
                  "[bin, usr/bin]",
                  "[-etc/cloud/cloud.cfg.d/90_dpkg.cfg]"
                ],
                "items": {
                  "type": "string"
                },
                "title": "Overlay",
                "type": "array"
              },
              "stage": {
                "description": "The files to copy from the build directory to the stage directory.",
                "examples": [
                  "[usr/bin/*, usr/share]",
                  "[-usr, zfsutils-linux]"
                ],
                "items": {
                  "description": "relative path",
                  "minLength": 1,
                  "type": "string"
                },
                "title": "Stage",
                "type": "array"
              },
              "prime": {
                "description": "",
                "examples": [
                  "[usr/lib/*/qt6/plugins/tls/*, -usr/share/thumbnailers]"
                ],
                "items": {
                  "description": "relative path",
                  "minLength": 1,
                  "type": "string"
                },
                "title": "Prime",
                "type": "array"
              },
              "override-pull": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "description": "The commands to run instead of the default behavior of the pull step.",
                "examples": [
                  "|\n  craftctl default\n  rm $CRAFT_PART_SRC/pyproject.toml"
                ],
                "title": "Override-Pull"
              },
              "overlay-script": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "description": "The commands to run after the part's overlay packages are installed.",
                "examples": [
                  "|\n  rm -f ${CRAFT_OVERLAY}/usr/bin/vi ${CRAFT_OVERLAY}/usr/bin/vim*\n  rm -f ${CRAFT_OVERLAY}/usr/bin/emacs*\n  rm -f ${CRAFT_OVERLAY}/bin/nano"
                ],
                "title": "Overlay-Script"
              },
              "override-overlay": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "description": "Shell script to run inside the overlay chroot after mounting.",
                "examples": [
                  "echo 'hello from chroot' > /root/test.txt"
                ],
                "title": "Override-Overlay"
              },
              "override-build": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "description": "The commands to run instead of the default behavior of the build step.",
                "examples": [
                  "|\n  cd cmd/webhook\n  mkdir $CRAFT_PART_INSTALL/ko-app\n  go build -o $CRAFT_PART_INSTALL/ko-app/webhook -a ."
                ],
                "title": "Override-Build"
              },
              "override-stage": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "description": "The commands to run instead of the default behavior of the stage step.",
                "examples": [
                  "|\n  craftctl default\n  chown -R 499 \"${CRAFT_PART_INSTALL}/entrypoint.sh\""
                ],
                "title": "Override-Stage"
              },
              "override-prime": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "description": "The commands to run instead of the default behavior of the prime step.",
                "examples": [
                  "|\n  craftctl default\n  mkdir -p $CRAFT_PRIME/var/lib/mysql\n  mkdir -p $CRAFT_PRIME/var/lib/mysqld"
                ],
                "title": "Override-Prime"
              },
              "permissions": {
                "default": [],
                "description": "The ownership and permission settings for a set of files in the part's prime directory.",
                "examples": [
                  "[{owner: 2000, group: 2000}, {path: srv/indico/start-indico.sh, mode: \"544\"}, {path: etc/, mode: \"755\"}]"
                ],
                "items": {
                  "$ref": "#/$defs/Permissions"
                },
                "title": "Permissions",
                "type": "array"
              }
            },
            "additionalProperties": false,
            "type": "object"
          }
        },
        {
          "if": {
            "properties": {
              "plugin": {
                "const": "npm"
              }
            }
          },
          "then": {
            "$comment": "common properties had to be repeated here or they would be considered invalid by the schema validator otherwise",
            "properties": {
              "plugin": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "description": "The plugin to build the part with.",
                "examples": [
                  "python",
                  "dump"
                ],
                "title": "Plugin",
                "enum": [
                  "dump",
                  "nil",
                  "ant",
                  "autotools",
                  "cargo-use",
                  "cmake",
                  "dotnet",
                  "go",
                  "go-use",
                  "gradle",
                  "jlink",
                  "make",
                  "maven",
                  "maven-use",
                  "meson",
                  "npm",
                  "npm-use",
                  "poetry",
                  "python",
                  "qmake",
                  "ruby",
                  "rust",
                  "scons",
                  "uv"
                ]
              },
              "source": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "description": "The location of the source files for the part.",
                "examples": [
                  ".",
                  "https://github.com/canonical/dqlite"
                ],
                "title": "Source"
              },
              "npm-include-node": {
                "default": false,
                "title": "Npm-Include-Node",
                "type": "boolean"
              },
              "npm-node-version": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "title": "Npm-Node-Version"
              },
              "build-attributes": {
                "default": [],
                "description": "Identifiers that control specific behaviors during the build.",
                "examples": [
                  "[enable-usrmerge]",
                  "[disable-usrmerge]"
                ],
                "items": {
                  "type": "string"
                },
                "title": "Build-Attributes",
                "type": "array"
              },
              "source-checksum": {
                "default": "",
                "description": "The checksum of the downloaded source, to ensure integrity.",
                "examples": [
                  "sha256/1451d01ee3a21100340aed867d0b799f46f0b1749680028d38c3f5d0128fb8a7"
                ],
                "title": "Source-Checksum",
                "type": "string"
              },
              "source-channel": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "title": "Source-Channel"
              },
              "source-branch": {
                "default": "",
                "description": "The target branch for Git sources.",
                "examples": [
                  "main",
                  "hotfix/2.10"
                ],
                "title": "Source-Branch",
                "type": "string"
              },
              "source-commit": {
                "default": "",
                "description": "The target commit for Git sources.",
                "examples": [
                  "36086af03fc4941a8ac219648ce77401743f3ae0"
                ],
                "title": "Source-Commit",
                "type": "string"
              },
              "source-depth": {
                "default": 0,
                "description": "The commit depth to fetch for Git sources.",
                "examples": [
                  "1"
                ],
                "title": "Source-Depth",
                "type": "integer"
              },
              "source-subdir": {
                "default": "",
                "description": "The subdirectory of the unpacked source where the build will occur.",
                "examples": [
                  "src",
                  "demo_nodes_cpp"
                ],
                "title": "Source-Subdir",
                "type": "string"
              },
              "source-submodules": {
                "anyOf": [
                  {
                    "items": {
                      "type": "string"
                    },
                    "type": "array"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "description": "The registered submodules to fetch from Git sources.",
                "examples": [
                  "[third_party/googletest, third_party/jsoncpp]",
                  "[libbpf]"
                ],
                "title": "Source-Submodules"
              },
              "source-tag": {
                "default": "",
                "description": "The target tag for Git sources.",
                "examples": [
                  "1.0.1"
                ],
                "title": "Source-Tag",
                "type": "string"
              },
              "source-type": {
                "default": "",
                "description": "The format of the part's source.",
                "examples": [
                  "git",
                  "local"
                ],
                "title": "Source-Type",
                "type": "string"
              },
              "disable-parallel": {
                "default": false,
                "description": "Whether to disable CPU multithreading during the build step.",
                "examples": [
                  "true"
                ],
                "title": "Disable-Parallel",
                "type": "boolean"
              },
              "after": {
                "default": [],
                "description": "The parts to process before starting this part's build.",
                "examples": [
                  "[build-deps, daemon]"
                ],
                "items": {
                  "type": "string"
                },
                "title": "After",
                "type": "array"
              },
              "overlay-packages": {
                "default": [],
                "description": "The packages to install in the part's layer.",
                "examples": [
                  "[ed]"
                ],
                "items": {
                  "type": "string"
                },
                "title": "Overlay-Packages",
                "type": "array"
              },
              "stage-snaps": {
                "default": [],
                "description": "The snaps to include in the stage environment.",
                "examples": [
                  "[go/1.17, chisel/latest/candidate, mir-kiosk-x11]"
                ],
                "items": {
                  "type": "string"
                },
                "title": "Stage-Snaps",
                "type": "array"
              },
              "stage-packages": {
                "default": [],
                "description": "The packages or Chisel slices to include in the stage environment.",
                "examples": [
                  "[curl, libxml2]"
                ],
                "items": {
                  "type": "string"
                },
                "title": "Stage-Packages",
                "type": "array"
              },
              "build-snaps": {
                "default": [],
                "description": "The snaps to install in the build environment.",
                "examples": [
                  "[go/latest/stable, node/stable]"
                ],
                "items": {
                  "type": "string"
                },
                "title": "Build-Snaps",
                "type": "array"
              },
              "build-packages": {
                "default": [],
                "description": "The packages to install in the build environment.",
                "examples": [
                  "[git, libffi-dev, libssl-dev]"
                ],
                "items": {
                  "type": "string"
                },
                "title": "Build-Packages",
                "type": "array"
              },
              "build-environment": {
                "default": [],
                "description": "The environment variables to define for the build step, as key-value pairs.",
                "examples": [
                  "[{MESSAGE: \"Hello world!\"}, {NAME: \"Craft Parts\"}]"
                ],
                "items": {
                  "type": "object",
                  "additionalProperties": {
                    "type": "string"
                  }
                },
                "title": "Build-Environment",
                "type": "array"
              },
              "organize": {
                "type": "object",
                "description": "A map of files from the build directory to their destinations in the stage directory.",
                "examples": [
                  "{hello.py: bin/hello}"
                ],
                "title": "Organize",
                "additionalProperties": {
                  "type": "string"
                }
              },
              "overlay": {
                "description": "The files to copy from the part's layer to the stage directory.",
                "examples": [
                  "[bin, usr/bin]",
                  "[-etc/cloud/cloud.cfg.d/90_dpkg.cfg]"
                ],
                "items": {
                  "type": "string"
                },
                "title": "Overlay",
                "type": "array"
              },
              "stage": {
                "description": "The files to copy from the build directory to the stage directory.",
                "examples": [
                  "[usr/bin/*, usr/share]",
                  "[-usr, zfsutils-linux]"
                ],
                "items": {
                  "description": "relative path",
                  "minLength": 1,
                  "type": "string"
                },
                "title": "Stage",
                "type": "array"
              },
              "prime": {
                "description": "",
                "examples": [
                  "[usr/lib/*/qt6/plugins/tls/*, -usr/share/thumbnailers]"
                ],
                "items": {
                  "description": "relative path",
                  "minLength": 1,
                  "type": "string"
                },
                "title": "Prime",
                "type": "array"
              },
              "override-pull": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "description": "The commands to run instead of the default behavior of the pull step.",
                "examples": [
                  "|\n  craftctl default\n  rm $CRAFT_PART_SRC/pyproject.toml"
                ],
                "title": "Override-Pull"
              },
              "overlay-script": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "description": "The commands to run after the part's overlay packages are installed.",
                "examples": [
                  "|\n  rm -f ${CRAFT_OVERLAY}/usr/bin/vi ${CRAFT_OVERLAY}/usr/bin/vim*\n  rm -f ${CRAFT_OVERLAY}/usr/bin/emacs*\n  rm -f ${CRAFT_OVERLAY}/bin/nano"
                ],
                "title": "Overlay-Script"
              },
              "override-overlay": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "description": "Shell script to run inside the overlay chroot after mounting.",
                "examples": [
                  "echo 'hello from chroot' > /root/test.txt"
                ],
                "title": "Override-Overlay"
              },
              "override-build": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "description": "The commands to run instead of the default behavior of the build step.",
                "examples": [
                  "|\n  cd cmd/webhook\n  mkdir $CRAFT_PART_INSTALL/ko-app\n  go build -o $CRAFT_PART_INSTALL/ko-app/webhook -a ."
                ],
                "title": "Override-Build"
              },
              "override-stage": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "description": "The commands to run instead of the default behavior of the stage step.",
                "examples": [
                  "|\n  craftctl default\n  chown -R 499 \"${CRAFT_PART_INSTALL}/entrypoint.sh\""
                ],
                "title": "Override-Stage"
              },
              "override-prime": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "description": "The commands to run instead of the default behavior of the prime step.",
                "examples": [
                  "|\n  craftctl default\n  mkdir -p $CRAFT_PRIME/var/lib/mysql\n  mkdir -p $CRAFT_PRIME/var/lib/mysqld"
                ],
                "title": "Override-Prime"
              },
              "permissions": {
                "default": [],
                "description": "The ownership and permission settings for a set of files in the part's prime directory.",
                "examples": [
                  "[{owner: 2000, group: 2000}, {path: srv/indico/start-indico.sh, mode: \"544\"}, {path: etc/, mode: \"755\"}]"
                ],
                "items": {
                  "$ref": "#/$defs/Permissions"
                },
                "title": "Permissions",
                "type": "array"
              }
            },
            "additionalProperties": false,
            "type": "object"
          }
        },
        {
          "if": {
            "properties": {
              "plugin": {
                "const": "npm-use"
              }
            }
          },
          "then": {
            "$comment": "common properties had to be repeated here or they would be considered invalid by the schema validator otherwise",
            "properties": {
              "plugin": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "description": "The plugin to build the part with.",
                "examples": [
                  "python",
                  "dump"
                ],
                "title": "Plugin",
                "enum": [
                  "dump",
                  "nil",
                  "ant",
                  "autotools",
                  "cargo-use",
                  "cmake",
                  "dotnet",
                  "go",
                  "go-use",
                  "gradle",
                  "jlink",
                  "make",
                  "maven",
                  "maven-use",
                  "meson",
                  "npm",
                  "npm-use",
                  "poetry",
                  "python",
                  "qmake",
                  "ruby",
                  "rust",
                  "scons",
                  "uv"
                ]
              },
              "source": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "description": "The location of the source files for the part.",
                "examples": [
                  ".",
                  "https://github.com/canonical/dqlite"
                ],
                "title": "Source"
              },
              "npm-include-node": {
                "default": false,
                "title": "Npm-Include-Node",
                "type": "boolean"
              },
              "npm-node-version": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "title": "Npm-Node-Version"
              },
              "build-attributes": {
                "default": [],
                "description": "Identifiers that control specific behaviors during the build.",
                "examples": [
                  "[enable-usrmerge]",
                  "[disable-usrmerge]"
                ],
                "items": {
                  "type": "string"
                },
                "title": "Build-Attributes",
                "type": "array"
              },
              "source-checksum": {
                "default": "",
                "description": "The checksum of the downloaded source, to ensure integrity.",
                "examples": [
                  "sha256/1451d01ee3a21100340aed867d0b799f46f0b1749680028d38c3f5d0128fb8a7"
                ],
                "title": "Source-Checksum",
                "type": "string"
              },
              "source-channel": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "title": "Source-Channel"
              },
              "source-branch": {
                "default": "",
                "description": "The target branch for Git sources.",
                "examples": [
                  "main",
                  "hotfix/2.10"
                ],
                "title": "Source-Branch",
                "type": "string"
              },
              "source-commit": {
                "default": "",
                "description": "The target commit for Git sources.",
                "examples": [
                  "36086af03fc4941a8ac219648ce77401743f3ae0"
                ],
                "title": "Source-Commit",
                "type": "string"
              },
              "source-depth": {
                "default": 0,
                "description": "The commit depth to fetch for Git sources.",
                "examples": [
                  "1"
                ],
                "title": "Source-Depth",
                "type": "integer"
              },
              "source-subdir": {
                "default": "",
                "description": "The subdirectory of the unpacked source where the build will occur.",
                "examples": [
                  "src",
                  "demo_nodes_cpp"
                ],
                "title": "Source-Subdir",
                "type": "string"
              },
              "source-submodules": {
                "anyOf": [
                  {
                    "items": {
                      "type": "string"
                    },
                    "type": "array"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "description": "The registered submodules to fetch from Git sources.",
                "examples": [
                  "[third_party/googletest, third_party/jsoncpp]",
                  "[libbpf]"
                ],
                "title": "Source-Submodules"
              },
              "source-tag": {
                "default": "",
                "description": "The target tag for Git sources.",
                "examples": [
                  "1.0.1"
                ],
                "title": "Source-Tag",
                "type": "string"
              },
              "source-type": {
                "default": "",
                "description": "The format of the part's source.",
                "examples": [
                  "git",
                  "local"
                ],
                "title": "Source-Type",
                "type": "string"
              },
              "disable-parallel": {
                "default": false,
                "description": "Whether to disable CPU multithreading during the build step.",
                "examples": [
                  "true"
                ],
                "title": "Disable-Parallel",
                "type": "boolean"
              },
              "after": {
                "default": [],
                "description": "The parts to process before starting this part's build.",
                "examples": [
                  "[build-deps, daemon]"
                ],
                "items": {
                  "type": "string"
                },
                "title": "After",
                "type": "array"
              },
              "overlay-packages": {
                "default": [],
                "description": "The packages to install in the part's layer.",
                "examples": [
                  "[ed]"
                ],
                "items": {
                  "type": "string"
                },
                "title": "Overlay-Packages",
                "type": "array"
              },
              "stage-snaps": {
                "default": [],
                "description": "The snaps to include in the stage environment.",
                "examples": [
                  "[go/1.17, chisel/latest/candidate, mir-kiosk-x11]"
                ],
                "items": {
                  "type": "string"
                },
                "title": "Stage-Snaps",
                "type": "array"
              },
              "stage-packages": {
                "default": [],
                "description": "The packages or Chisel slices to include in the stage environment.",
                "examples": [
                  "[curl, libxml2]"
                ],
                "items": {
                  "type": "string"
                },
                "title": "Stage-Packages",
                "type": "array"
              },
              "build-snaps": {
                "default": [],
                "description": "The snaps to install in the build environment.",
                "examples": [
                  "[go/latest/stable, node/stable]"
                ],
                "items": {
                  "type": "string"
                },
                "title": "Build-Snaps",
                "type": "array"
              },
              "build-packages": {
                "default": [],
                "description": "The packages to install in the build environment.",
                "examples": [
                  "[git, libffi-dev, libssl-dev]"
                ],
                "items": {
                  "type": "string"
                },
                "title": "Build-Packages",
                "type": "array"
              },
              "build-environment": {
                "default": [],
                "description": "The environment variables to define for the build step, as key-value pairs.",
                "examples": [
                  "[{MESSAGE: \"Hello world!\"}, {NAME: \"Craft Parts\"}]"
                ],
                "items": {
                  "type": "object",
                  "additionalProperties": {
                    "type": "string"
                  }
                },
                "title": "Build-Environment",
                "type": "array"
              },
              "organize": {
                "type": "object",
                "description": "A map of files from the build directory to their destinations in the stage directory.",
                "examples": [
                  "{hello.py: bin/hello}"
                ],
                "title": "Organize",
                "additionalProperties": {
                  "type": "string"
                }
              },
              "overlay": {
                "description": "The files to copy from the part's layer to the stage directory.",
                "examples": [
                  "[bin, usr/bin]",
                  "[-etc/cloud/cloud.cfg.d/90_dpkg.cfg]"
                ],
                "items": {
                  "type": "string"
                },
                "title": "Overlay",
                "type": "array"
              },
              "stage": {
                "description": "The files to copy from the build directory to the stage directory.",
                "examples": [
                  "[usr/bin/*, usr/share]",
                  "[-usr, zfsutils-linux]"
                ],
                "items": {
                  "description": "relative path",
                  "minLength": 1,
                  "type": "string"
                },
                "title": "Stage",
                "type": "array"
              },
              "prime": {
                "description": "",
                "examples": [
                  "[usr/lib/*/qt6/plugins/tls/*, -usr/share/thumbnailers]"
                ],
                "items": {
                  "description": "relative path",
                  "minLength": 1,
                  "type": "string"
                },
                "title": "Prime",
                "type": "array"
              },
              "override-pull": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "description": "The commands to run instead of the default behavior of the pull step.",
                "examples": [
                  "|\n  craftctl default\n  rm $CRAFT_PART_SRC/pyproject.toml"
                ],
                "title": "Override-Pull"
              },
              "overlay-script": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "description": "The commands to run after the part's overlay packages are installed.",
                "examples": [
                  "|\n  rm -f ${CRAFT_OVERLAY}/usr/bin/vi ${CRAFT_OVERLAY}/usr/bin/vim*\n  rm -f ${CRAFT_OVERLAY}/usr/bin/emacs*\n  rm -f ${CRAFT_OVERLAY}/bin/nano"
                ],
                "title": "Overlay-Script"
              },
              "override-overlay": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "description": "Shell script to run inside the overlay chroot after mounting.",
                "examples": [
                  "echo 'hello from chroot' > /root/test.txt"
                ],
                "title": "Override-Overlay"
              },
              "override-build": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "description": "The commands to run instead of the default behavior of the build step.",
                "examples": [
                  "|\n  cd cmd/webhook\n  mkdir $CRAFT_PART_INSTALL/ko-app\n  go build -o $CRAFT_PART_INSTALL/ko-app/webhook -a ."
                ],
                "title": "Override-Build"
              },
              "override-stage": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "description": "The commands to run instead of the default behavior of the stage step.",
                "examples": [
                  "|\n  craftctl default\n  chown -R 499 \"${CRAFT_PART_INSTALL}/entrypoint.sh\""
                ],
                "title": "Override-Stage"
              },
              "override-prime": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "description": "The commands to run instead of the default behavior of the prime step.",
                "examples": [
                  "|\n  craftctl default\n  mkdir -p $CRAFT_PRIME/var/lib/mysql\n  mkdir -p $CRAFT_PRIME/var/lib/mysqld"
                ],
                "title": "Override-Prime"
              },
              "permissions": {
                "default": [],
                "description": "The ownership and permission settings for a set of files in the part's prime directory.",
                "examples": [
                  "[{owner: 2000, group: 2000}, {path: srv/indico/start-indico.sh, mode: \"544\"}, {path: etc/, mode: \"755\"}]"
                ],
                "items": {
                  "$ref": "#/$defs/Permissions"
                },
                "title": "Permissions",
                "type": "array"
              }
            },
            "additionalProperties": false,
            "type": "object"
          }
        },
        {
          "if": {
            "properties": {
              "plugin": {
                "const": "poetry"
              }
            }
          },
          "then": {
            "$comment": "common properties had to be repeated here or they would be considered invalid by the schema validator otherwise",
            "properties": {
              "plugin": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "description": "The plugin to build the part with.",
                "examples": [
                  "python",
                  "dump"
                ],
                "title": "Plugin",
                "enum": [
                  "dump",
                  "nil",
                  "ant",
                  "autotools",
                  "cargo-use",
                  "cmake",
                  "dotnet",
                  "go",
                  "go-use",
                  "gradle",
                  "jlink",
                  "make",
                  "maven",
                  "maven-use",
                  "meson",
                  "npm",
                  "npm-use",
                  "poetry",
                  "python",
                  "qmake",
                  "ruby",
                  "rust",
                  "scons",
                  "uv"
                ]
              },
              "source": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "description": "The location of the source files for the part.",
                "examples": [
                  ".",
                  "https://github.com/canonical/dqlite"
                ],
                "title": "Source"
              },
              "poetry-with": {
                "description": "dependency groups to include. By default, only the main dependencies are included.",
                "items": {
                  "type": "string"
                },
                "title": "Dependency groups to include",
                "type": "array",
                "uniqueItems": true
              },
              "poetry-export-extra-args": {
                "description": "extra arguments to pass to poetry export when creating requirements.txt.",
                "items": {
                  "type": "string"
                },
                "title": "Extra arguments for poetry export",
                "type": "array"
              },
              "poetry-pip-extra-args": {
                "description": "extra arguments to pass to pip install installing dependencies.",
                "items": {
                  "type": "string"
                },
                "title": "Extra arguments for pip install",
                "type": "array"
              },
              "source-checksum": {
                "default": "",
                "description": "The checksum of the downloaded source, to ensure integrity.",
                "examples": [
                  "sha256/1451d01ee3a21100340aed867d0b799f46f0b1749680028d38c3f5d0128fb8a7"
                ],
                "title": "Source-Checksum",
                "type": "string"
              },
              "source-channel": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "title": "Source-Channel"
              },
              "source-branch": {
                "default": "",
                "description": "The target branch for Git sources.",
                "examples": [
                  "main",
                  "hotfix/2.10"
                ],
                "title": "Source-Branch",
                "type": "string"
              },
              "source-commit": {
                "default": "",
                "description": "The target commit for Git sources.",
                "examples": [
                  "36086af03fc4941a8ac219648ce77401743f3ae0"
                ],
                "title": "Source-Commit",
                "type": "string"
              },
              "source-depth": {
                "default": 0,
                "description": "The commit depth to fetch for Git sources.",
                "examples": [
                  "1"
                ],
                "title": "Source-Depth",
                "type": "integer"
              },
              "source-subdir": {
                "default": "",
                "description": "The subdirectory of the unpacked source where the build will occur.",
                "examples": [
                  "src",
                  "demo_nodes_cpp"
                ],
                "title": "Source-Subdir",
                "type": "string"
              },
              "source-submodules": {
                "anyOf": [
                  {
                    "items": {
                      "type": "string"
                    },
                    "type": "array"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "description": "The registered submodules to fetch from Git sources.",
                "examples": [
                  "[third_party/googletest, third_party/jsoncpp]",
                  "[libbpf]"
                ],
                "title": "Source-Submodules"
              },
              "source-tag": {
                "default": "",
                "description": "The target tag for Git sources.",
                "examples": [
                  "1.0.1"
                ],
                "title": "Source-Tag",
                "type": "string"
              },
              "source-type": {
                "default": "",
                "description": "The format of the part's source.",
                "examples": [
                  "git",
                  "local"
                ],
                "title": "Source-Type",
                "type": "string"
              },
              "disable-parallel": {
                "default": false,
                "description": "Whether to disable CPU multithreading during the build step.",
                "examples": [
                  "true"
                ],
                "title": "Disable-Parallel",
                "type": "boolean"
              },
              "after": {
                "default": [],
                "description": "The parts to process before starting this part's build.",
                "examples": [
                  "[build-deps, daemon]"
                ],
                "items": {
                  "type": "string"
                },
                "title": "After",
                "type": "array"
              },
              "overlay-packages": {
                "default": [],
                "description": "The packages to install in the part's layer.",
                "examples": [
                  "[ed]"
                ],
                "items": {
                  "type": "string"
                },
                "title": "Overlay-Packages",
                "type": "array"
              },
              "stage-snaps": {
                "default": [],
                "description": "The snaps to include in the stage environment.",
                "examples": [
                  "[go/1.17, chisel/latest/candidate, mir-kiosk-x11]"
                ],
                "items": {
                  "type": "string"
                },
                "title": "Stage-Snaps",
                "type": "array"
              },
              "stage-packages": {
                "default": [],
                "description": "The packages or Chisel slices to include in the stage environment.",
                "examples": [
                  "[curl, libxml2]"
                ],
                "items": {
                  "type": "string"
                },
                "title": "Stage-Packages",
                "type": "array"
              },
              "build-snaps": {
                "default": [],
                "description": "The snaps to install in the build environment.",
                "examples": [
                  "[go/latest/stable, node/stable]"
                ],
                "items": {
                  "type": "string"
                },
                "title": "Build-Snaps",
                "type": "array"
              },
              "build-packages": {
                "default": [],
                "description": "The packages to install in the build environment.",
                "examples": [
                  "[git, libffi-dev, libssl-dev]"
                ],
                "items": {
                  "type": "string"
                },
                "title": "Build-Packages",
                "type": "array"
              },
              "build-environment": {
                "default": [],
                "description": "The environment variables to define for the build step, as key-value pairs.",
                "examples": [
                  "[{MESSAGE: \"Hello world!\"}, {NAME: \"Craft Parts\"}]"
                ],
                "items": {
                  "type": "object",
                  "additionalProperties": {
                    "type": "string"
                  }
                },
                "title": "Build-Environment",
                "type": "array"
              },
              "build-attributes": {
                "default": [],
                "description": "Identifiers that control specific behaviors during the build.",
                "examples": [
                  "[enable-usrmerge]",
                  "[disable-usrmerge]"
                ],
                "items": {
                  "type": "string"
                },
                "title": "Build-Attributes",
                "type": "array"
              },
              "organize": {
                "type": "object",
                "description": "A map of files from the build directory to their destinations in the stage directory.",
                "examples": [
                  "{hello.py: bin/hello}"
                ],
                "title": "Organize",
                "additionalProperties": {
                  "type": "string"
                }
              },
              "overlay": {
                "description": "The files to copy from the part's layer to the stage directory.",
                "examples": [
                  "[bin, usr/bin]",
                  "[-etc/cloud/cloud.cfg.d/90_dpkg.cfg]"
                ],
                "items": {
                  "type": "string"
                },
                "title": "Overlay",
                "type": "array"
              },
              "stage": {
                "description": "The files to copy from the build directory to the stage directory.",
                "examples": [
                  "[usr/bin/*, usr/share]",
                  "[-usr, zfsutils-linux]"
                ],
                "items": {
                  "description": "relative path",
                  "minLength": 1,
                  "type": "string"
                },
                "title": "Stage",
                "type": "array"
              },
              "prime": {
                "description": "",
                "examples": [
                  "[usr/lib/*/qt6/plugins/tls/*, -usr/share/thumbnailers]"
                ],
                "items": {
                  "description": "relative path",
                  "minLength": 1,
                  "type": "string"
                },
                "title": "Prime",
                "type": "array"
              },
              "override-pull": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "description": "The commands to run instead of the default behavior of the pull step.",
                "examples": [
                  "|\n  craftctl default\n  rm $CRAFT_PART_SRC/pyproject.toml"
                ],
                "title": "Override-Pull"
              },
              "overlay-script": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "description": "The commands to run after the part's overlay packages are installed.",
                "examples": [
                  "|\n  rm -f ${CRAFT_OVERLAY}/usr/bin/vi ${CRAFT_OVERLAY}/usr/bin/vim*\n  rm -f ${CRAFT_OVERLAY}/usr/bin/emacs*\n  rm -f ${CRAFT_OVERLAY}/bin/nano"
                ],
                "title": "Overlay-Script"
              },
              "override-overlay": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "description": "Shell script to run inside the overlay chroot after mounting.",
                "examples": [
                  "echo 'hello from chroot' > /root/test.txt"
                ],
                "title": "Override-Overlay"
              },
              "override-build": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "description": "The commands to run instead of the default behavior of the build step.",
                "examples": [
                  "|\n  cd cmd/webhook\n  mkdir $CRAFT_PART_INSTALL/ko-app\n  go build -o $CRAFT_PART_INSTALL/ko-app/webhook -a ."
                ],
                "title": "Override-Build"
              },
              "override-stage": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "description": "The commands to run instead of the default behavior of the stage step.",
                "examples": [
                  "|\n  craftctl default\n  chown -R 499 \"${CRAFT_PART_INSTALL}/entrypoint.sh\""
                ],
                "title": "Override-Stage"
              },
              "override-prime": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "description": "The commands to run instead of the default behavior of the prime step.",
                "examples": [
                  "|\n  craftctl default\n  mkdir -p $CRAFT_PRIME/var/lib/mysql\n  mkdir -p $CRAFT_PRIME/var/lib/mysqld"
                ],
                "title": "Override-Prime"
              },
              "permissions": {
                "default": [],
                "description": "The ownership and permission settings for a set of files in the part's prime directory.",
                "examples": [
                  "[{owner: 2000, group: 2000}, {path: srv/indico/start-indico.sh, mode: \"544\"}, {path: etc/, mode: \"755\"}]"
                ],
                "items": {
                  "$ref": "#/$defs/Permissions"
                },
                "title": "Permissions",
                "type": "array"
              }
            },
            "additionalProperties": false,
            "type": "object"
          }
        },
        {
          "if": {
            "properties": {
              "plugin": {
                "const": "python"
              }
            }
          },
          "then": {
            "$comment": "common properties had to be repeated here or they would be considered invalid by the schema validator otherwise",
            "properties": {
              "plugin": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "description": "The plugin to build the part with.",
                "examples": [
                  "python",
                  "dump"
                ],
                "title": "Plugin",
                "enum": [
                  "dump",
                  "nil",
                  "ant",
                  "autotools",
                  "cargo-use",
                  "cmake",
                  "dotnet",
                  "go",
                  "go-use",
                  "gradle",
                  "jlink",
                  "make",
                  "maven",
                  "maven-use",
                  "meson",
                  "npm",
                  "npm-use",
                  "poetry",
                  "python",
                  "qmake",
                  "ruby",
                  "rust",
                  "scons",
                  "uv"
                ]
              },
              "source": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "description": "The location of the source files for the part.",
                "examples": [
                  ".",
                  "https://github.com/canonical/dqlite"
                ],
                "title": "Source"
              },
              "python-requirements": {
                "default": [],
                "items": {
                  "type": "string"
                },
                "title": "Python-Requirements",
                "type": "array"
              },
              "python-constraints": {
                "default": [],
                "items": {
                  "type": "string"
                },
                "title": "Python-Constraints",
                "type": "array"
              },
              "python-packages": {
                "default": [
                  "pip",
                  "setuptools",
                  "wheel"
                ],
                "items": {
                  "type": "string"
                },
                "title": "Python-Packages",
                "type": "array"
              },
              "source-checksum": {
                "default": "",
                "description": "The checksum of the downloaded source, to ensure integrity.",
                "examples": [
                  "sha256/1451d01ee3a21100340aed867d0b799f46f0b1749680028d38c3f5d0128fb8a7"
                ],
                "title": "Source-Checksum",
                "type": "string"
              },
              "source-channel": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "title": "Source-Channel"
              },
              "source-branch": {
                "default": "",
                "description": "The target branch for Git sources.",
                "examples": [
                  "main",
                  "hotfix/2.10"
                ],
                "title": "Source-Branch",
                "type": "string"
              },
              "source-commit": {
                "default": "",
                "description": "The target commit for Git sources.",
                "examples": [
                  "36086af03fc4941a8ac219648ce77401743f3ae0"
                ],
                "title": "Source-Commit",
                "type": "string"
              },
              "source-depth": {
                "default": 0,
                "description": "The commit depth to fetch for Git sources.",
                "examples": [
                  "1"
                ],
                "title": "Source-Depth",
                "type": "integer"
              },
              "source-subdir": {
                "default": "",
                "description": "The subdirectory of the unpacked source where the build will occur.",
                "examples": [
                  "src",
                  "demo_nodes_cpp"
                ],
                "title": "Source-Subdir",
                "type": "string"
              },
              "source-submodules": {
                "anyOf": [
                  {
                    "items": {
                      "type": "string"
                    },
                    "type": "array"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "description": "The registered submodules to fetch from Git sources.",
                "examples": [
                  "[third_party/googletest, third_party/jsoncpp]",
                  "[libbpf]"
                ],
                "title": "Source-Submodules"
              },
              "source-tag": {
                "default": "",
                "description": "The target tag for Git sources.",
                "examples": [
                  "1.0.1"
                ],
                "title": "Source-Tag",
                "type": "string"
              },
              "source-type": {
                "default": "",
                "description": "The format of the part's source.",
                "examples": [
                  "git",
                  "local"
                ],
                "title": "Source-Type",
                "type": "string"
              },
              "disable-parallel": {
                "default": false,
                "description": "Whether to disable CPU multithreading during the build step.",
                "examples": [
                  "true"
                ],
                "title": "Disable-Parallel",
                "type": "boolean"
              },
              "after": {
                "default": [],
                "description": "The parts to process before starting this part's build.",
                "examples": [
                  "[build-deps, daemon]"
                ],
                "items": {
                  "type": "string"
                },
                "title": "After",
                "type": "array"
              },
              "overlay-packages": {
                "default": [],
                "description": "The packages to install in the part's layer.",
                "examples": [
                  "[ed]"
                ],
                "items": {
                  "type": "string"
                },
                "title": "Overlay-Packages",
                "type": "array"
              },
              "stage-snaps": {
                "default": [],
                "description": "The snaps to include in the stage environment.",
                "examples": [
                  "[go/1.17, chisel/latest/candidate, mir-kiosk-x11]"
                ],
                "items": {
                  "type": "string"
                },
                "title": "Stage-Snaps",
                "type": "array"
              },
              "stage-packages": {
                "default": [],
                "description": "The packages or Chisel slices to include in the stage environment.",
                "examples": [
                  "[curl, libxml2]"
                ],
                "items": {
                  "type": "string"
                },
                "title": "Stage-Packages",
                "type": "array"
              },
              "build-snaps": {
                "default": [],
                "description": "The snaps to install in the build environment.",
                "examples": [
                  "[go/latest/stable, node/stable]"
                ],
                "items": {
                  "type": "string"
                },
                "title": "Build-Snaps",
                "type": "array"
              },
              "build-packages": {
                "default": [],
                "description": "The packages to install in the build environment.",
                "examples": [
                  "[git, libffi-dev, libssl-dev]"
                ],
                "items": {
                  "type": "string"
                },
                "title": "Build-Packages",
                "type": "array"
              },
              "build-environment": {
                "default": [],
                "description": "The environment variables to define for the build step, as key-value pairs.",
                "examples": [
                  "[{MESSAGE: \"Hello world!\"}, {NAME: \"Craft Parts\"}]"
                ],
                "items": {
                  "type": "object",
                  "additionalProperties": {
                    "type": "string"
                  }
                },
                "title": "Build-Environment",
                "type": "array"
              },
              "build-attributes": {
                "default": [],
                "description": "Identifiers that control specific behaviors during the build.",
                "examples": [
                  "[enable-usrmerge]",
                  "[disable-usrmerge]"
                ],
                "items": {
                  "type": "string"
                },
                "title": "Build-Attributes",
                "type": "array"
              },
              "organize": {
                "type": "object",
                "description": "A map of files from the build directory to their destinations in the stage directory.",
                "examples": [
                  "{hello.py: bin/hello}"
                ],
                "title": "Organize",
                "additionalProperties": {
                  "type": "string"
                }
              },
              "overlay": {
                "description": "The files to copy from the part's layer to the stage directory.",
                "examples": [
                  "[bin, usr/bin]",
                  "[-etc/cloud/cloud.cfg.d/90_dpkg.cfg]"
                ],
                "items": {
                  "type": "string"
                },
                "title": "Overlay",
                "type": "array"
              },
              "stage": {
                "description": "The files to copy from the build directory to the stage directory.",
                "examples": [
                  "[usr/bin/*, usr/share]",
                  "[-usr, zfsutils-linux]"
                ],
                "items": {
                  "description": "relative path",
                  "minLength": 1,
                  "type": "string"
                },
                "title": "Stage",
                "type": "array"
              },
              "prime": {
                "description": "",
                "examples": [
                  "[usr/lib/*/qt6/plugins/tls/*, -usr/share/thumbnailers]"
                ],
                "items": {
                  "description": "relative path",
                  "minLength": 1,
                  "type": "string"
                },
                "title": "Prime",
                "type": "array"
              },
              "override-pull": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "description": "The commands to run instead of the default behavior of the pull step.",
                "examples": [
                  "|\n  craftctl default\n  rm $CRAFT_PART_SRC/pyproject.toml"
                ],
                "title": "Override-Pull"
              },
              "overlay-script": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "description": "The commands to run after the part's overlay packages are installed.",
                "examples": [
                  "|\n  rm -f ${CRAFT_OVERLAY}/usr/bin/vi ${CRAFT_OVERLAY}/usr/bin/vim*\n  rm -f ${CRAFT_OVERLAY}/usr/bin/emacs*\n  rm -f ${CRAFT_OVERLAY}/bin/nano"
                ],
                "title": "Overlay-Script"
              },
              "override-overlay": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "description": "Shell script to run inside the overlay chroot after mounting.",
                "examples": [
                  "echo 'hello from chroot' > /root/test.txt"
                ],
                "title": "Override-Overlay"
              },
              "override-build": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "description": "The commands to run instead of the default behavior of the build step.",
                "examples": [
                  "|\n  cd cmd/webhook\n  mkdir $CRAFT_PART_INSTALL/ko-app\n  go build -o $CRAFT_PART_INSTALL/ko-app/webhook -a ."
                ],
                "title": "Override-Build"
              },
              "override-stage": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "description": "The commands to run instead of the default behavior of the stage step.",
                "examples": [
                  "|\n  craftctl default\n  chown -R 499 \"${CRAFT_PART_INSTALL}/entrypoint.sh\""
                ],
                "title": "Override-Stage"
              },
              "override-prime": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "description": "The commands to run instead of the default behavior of the prime step.",
                "examples": [
                  "|\n  craftctl default\n  mkdir -p $CRAFT_PRIME/var/lib/mysql\n  mkdir -p $CRAFT_PRIME/var/lib/mysqld"
                ],
                "title": "Override-Prime"
              },
              "permissions": {
                "default": [],
                "description": "The ownership and permission settings for a set of files in the part's prime directory.",
                "examples": [
                  "[{owner: 2000, group: 2000}, {path: srv/indico/start-indico.sh, mode: \"544\"}, {path: etc/, mode: \"755\"}]"
                ],
                "items": {
                  "$ref": "#/$defs/Permissions"
                },
                "title": "Permissions",
                "type": "array"
              }
            },
            "additionalProperties": false,
            "type": "object"
          }
        },
        {
          "if": {
            "properties": {
              "plugin": {
                "const": "qmake"
              }
            }
          },
          "then": {
            "$comment": "common properties had to be repeated here or they would be considered invalid by the schema validator otherwise",
            "properties": {
              "plugin": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "description": "The plugin to build the part with.",
                "examples": [
                  "python",
                  "dump"
                ],
                "title": "Plugin",
                "enum": [
                  "dump",
                  "nil",
                  "ant",
                  "autotools",
                  "cargo-use",
                  "cmake",
                  "dotnet",
                  "go",
                  "go-use",
                  "gradle",
                  "jlink",
                  "make",
                  "maven",
                  "maven-use",
                  "meson",
                  "npm",
                  "npm-use",
                  "poetry",
                  "python",
                  "qmake",
                  "ruby",
                  "rust",
                  "scons",
                  "uv"
                ]
              },
              "source": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "description": "The location of the source files for the part.",
                "examples": [
                  ".",
                  "https://github.com/canonical/dqlite"
                ],
                "title": "Source"
              },
              "qmake-parameters": {
                "default": [],
                "items": {
                  "type": "string"
                },
                "title": "Qmake-Parameters",
                "type": "array"
              },
              "qmake-project-file": {
                "default": "",
                "title": "Qmake-Project-File",
                "type": "string"
              },
              "qmake-major-version": {
                "default": 5,
                "title": "Qmake-Major-Version",
                "type": "integer"
              },
              "source-checksum": {
                "default": "",
                "description": "The checksum of the downloaded source, to ensure integrity.",
                "examples": [
                  "sha256/1451d01ee3a21100340aed867d0b799f46f0b1749680028d38c3f5d0128fb8a7"
                ],
                "title": "Source-Checksum",
                "type": "string"
              },
              "source-channel": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "title": "Source-Channel"
              },
              "source-branch": {
                "default": "",
                "description": "The target branch for Git sources.",
                "examples": [
                  "main",
                  "hotfix/2.10"
                ],
                "title": "Source-Branch",
                "type": "string"
              },
              "source-commit": {
                "default": "",
                "description": "The target commit for Git sources.",
                "examples": [
                  "36086af03fc4941a8ac219648ce77401743f3ae0"
                ],
                "title": "Source-Commit",
                "type": "string"
              },
              "source-depth": {
                "default": 0,
                "description": "The commit depth to fetch for Git sources.",
                "examples": [
                  "1"
                ],
                "title": "Source-Depth",
                "type": "integer"
              },
              "source-subdir": {
                "default": "",
                "description": "The subdirectory of the unpacked source where the build will occur.",
                "examples": [
                  "src",
                  "demo_nodes_cpp"
                ],
                "title": "Source-Subdir",
                "type": "string"
              },
              "source-submodules": {
                "anyOf": [
                  {
                    "items": {
                      "type": "string"
                    },
                    "type": "array"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "description": "The registered submodules to fetch from Git sources.",
                "examples": [
                  "[third_party/googletest, third_party/jsoncpp]",
                  "[libbpf]"
                ],
                "title": "Source-Submodules"
              },
              "source-tag": {
                "default": "",
                "description": "The target tag for Git sources.",
                "examples": [
                  "1.0.1"
                ],
                "title": "Source-Tag",
                "type": "string"
              },
              "source-type": {
                "default": "",
                "description": "The format of the part's source.",
                "examples": [
                  "git",
                  "local"
                ],
                "title": "Source-Type",
                "type": "string"
              },
              "disable-parallel": {
                "default": false,
                "description": "Whether to disable CPU multithreading during the build step.",
                "examples": [
                  "true"
                ],
                "title": "Disable-Parallel",
                "type": "boolean"
              },
              "after": {
                "default": [],
                "description": "The parts to process before starting this part's build.",
                "examples": [
                  "[build-deps, daemon]"
                ],
                "items": {
                  "type": "string"
                },
                "title": "After",
                "type": "array"
              },
              "overlay-packages": {
                "default": [],
                "description": "The packages to install in the part's layer.",
                "examples": [
                  "[ed]"
                ],
                "items": {
                  "type": "string"
                },
                "title": "Overlay-Packages",
                "type": "array"
              },
              "stage-snaps": {
                "default": [],
                "description": "The snaps to include in the stage environment.",
                "examples": [
                  "[go/1.17, chisel/latest/candidate, mir-kiosk-x11]"
                ],
                "items": {
                  "type": "string"
                },
                "title": "Stage-Snaps",
                "type": "array"
              },
              "stage-packages": {
                "default": [],
                "description": "The packages or Chisel slices to include in the stage environment.",
                "examples": [
                  "[curl, libxml2]"
                ],
                "items": {
                  "type": "string"
                },
                "title": "Stage-Packages",
                "type": "array"
              },
              "build-snaps": {
                "default": [],
                "description": "The snaps to install in the build environment.",
                "examples": [
                  "[go/latest/stable, node/stable]"
                ],
                "items": {
                  "type": "string"
                },
                "title": "Build-Snaps",
                "type": "array"
              },
              "build-packages": {
                "default": [],
                "description": "The packages to install in the build environment.",
                "examples": [
                  "[git, libffi-dev, libssl-dev]"
                ],
                "items": {
                  "type": "string"
                },
                "title": "Build-Packages",
                "type": "array"
              },
              "build-environment": {
                "default": [],
                "description": "The environment variables to define for the build step, as key-value pairs.",
                "examples": [
                  "[{MESSAGE: \"Hello world!\"}, {NAME: \"Craft Parts\"}]"
                ],
                "items": {
                  "type": "object",
                  "additionalProperties": {
                    "type": "string"
                  }
                },
                "title": "Build-Environment",
                "type": "array"
              },
              "build-attributes": {
                "default": [],
                "description": "Identifiers that control specific behaviors during the build.",
                "examples": [
                  "[enable-usrmerge]",
                  "[disable-usrmerge]"
                ],
                "items": {
                  "type": "string"
                },
                "title": "Build-Attributes",
                "type": "array"
              },
              "organize": {
                "type": "object",
                "description": "A map of files from the build directory to their destinations in the stage directory.",
                "examples": [
                  "{hello.py: bin/hello}"
                ],
                "title": "Organize",
                "additionalProperties": {
                  "type": "string"
                }
              },
              "overlay": {
                "description": "The files to copy from the part's layer to the stage directory.",
                "examples": [
                  "[bin, usr/bin]",
                  "[-etc/cloud/cloud.cfg.d/90_dpkg.cfg]"
                ],
                "items": {
                  "type": "string"
                },
                "title": "Overlay",
                "type": "array"
              },
              "stage": {
                "description": "The files to copy from the build directory to the stage directory.",
                "examples": [
                  "[usr/bin/*, usr/share]",
                  "[-usr, zfsutils-linux]"
                ],
                "items": {
                  "description": "relative path",
                  "minLength": 1,
                  "type": "string"
                },
                "title": "Stage",
                "type": "array"
              },
              "prime": {
                "description": "",
                "examples": [
                  "[usr/lib/*/qt6/plugins/tls/*, -usr/share/thumbnailers]"
                ],
                "items": {
                  "description": "relative path",
                  "minLength": 1,
                  "type": "string"
                },
                "title": "Prime",
                "type": "array"
              },
              "override-pull": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "description": "The commands to run instead of the default behavior of the pull step.",
                "examples": [
                  "|\n  craftctl default\n  rm $CRAFT_PART_SRC/pyproject.toml"
                ],
                "title": "Override-Pull"
              },
              "overlay-script": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "description": "The commands to run after the part's overlay packages are installed.",
                "examples": [
                  "|\n  rm -f ${CRAFT_OVERLAY}/usr/bin/vi ${CRAFT_OVERLAY}/usr/bin/vim*\n  rm -f ${CRAFT_OVERLAY}/usr/bin/emacs*\n  rm -f ${CRAFT_OVERLAY}/bin/nano"
                ],
                "title": "Overlay-Script"
              },
              "override-overlay": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "description": "Shell script to run inside the overlay chroot after mounting.",
                "examples": [
                  "echo 'hello from chroot' > /root/test.txt"
                ],
                "title": "Override-Overlay"
              },
              "override-build": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "description": "The commands to run instead of the default behavior of the build step.",
                "examples": [
                  "|\n  cd cmd/webhook\n  mkdir $CRAFT_PART_INSTALL/ko-app\n  go build -o $CRAFT_PART_INSTALL/ko-app/webhook -a ."
                ],
                "title": "Override-Build"
              },
              "override-stage": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "description": "The commands to run instead of the default behavior of the stage step.",
                "examples": [
                  "|\n  craftctl default\n  chown -R 499 \"${CRAFT_PART_INSTALL}/entrypoint.sh\""
                ],
                "title": "Override-Stage"
              },
              "override-prime": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "description": "The commands to run instead of the default behavior of the prime step.",
                "examples": [
                  "|\n  craftctl default\n  mkdir -p $CRAFT_PRIME/var/lib/mysql\n  mkdir -p $CRAFT_PRIME/var/lib/mysqld"
                ],
                "title": "Override-Prime"
              },
              "permissions": {
                "default": [],
                "description": "The ownership and permission settings for a set of files in the part's prime directory.",
                "examples": [
                  "[{owner: 2000, group: 2000}, {path: srv/indico/start-indico.sh, mode: \"544\"}, {path: etc/, mode: \"755\"}]"
                ],
                "items": {
                  "$ref": "#/$defs/Permissions"
                },
                "title": "Permissions",
                "type": "array"
              }
            },
            "additionalProperties": false,
            "type": "object"
          }
        },
        {
          "if": {
            "properties": {
              "plugin": {
                "const": "ruby"
              }
            }
          },
          "then": {
            "$comment": "common properties had to be repeated here or they would be considered invalid by the schema validator otherwise",
            "properties": {
              "plugin": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "description": "The plugin to build the part with.",
                "examples": [
                  "python",
                  "dump"
                ],
                "title": "Plugin",
                "enum": [
                  "dump",
                  "nil",
                  "ant",
                  "autotools",
                  "cargo-use",
                  "cmake",
                  "dotnet",
                  "go",
                  "go-use",
                  "gradle",
                  "jlink",
                  "make",
                  "maven",
                  "maven-use",
                  "meson",
                  "npm",
                  "npm-use",
                  "poetry",
                  "python",
                  "qmake",
                  "ruby",
                  "rust",
                  "scons",
                  "uv"
                ]
              },
              "source": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "description": "The location of the source files for the part.",
                "examples": [
                  ".",
                  "https://github.com/canonical/dqlite"
                ],
                "title": "Source"
              },
              "ruby-gems": {
                "default": [],
                "items": {
                  "type": "string"
                },
                "title": "Ruby-Gems",
                "type": "array"
              },
              "ruby-use-bundler": {
                "default": false,
                "title": "Ruby-Use-Bundler",
                "type": "boolean"
              },
              "ruby-flavor": {
                "anyOf": [
                  {
                    "$ref": "#/$defs/RubyFlavor"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null
              },
              "ruby-version": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "title": "Ruby-Version"
              },
              "ruby-use-jemalloc": {
                "default": false,
                "title": "Ruby-Use-Jemalloc",
                "type": "boolean"
              },
              "ruby-shared": {
                "default": false,
                "title": "Ruby-Shared",
                "type": "boolean"
              },
              "ruby-configure-options": {
                "default": [],
                "items": {
                  "type": "string"
                },
                "title": "Ruby-Configure-Options",
                "type": "array"
              },
              "source-checksum": {
                "default": "",
                "description": "The checksum of the downloaded source, to ensure integrity.",
                "examples": [
                  "sha256/1451d01ee3a21100340aed867d0b799f46f0b1749680028d38c3f5d0128fb8a7"
                ],
                "title": "Source-Checksum",
                "type": "string"
              },
              "source-channel": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "title": "Source-Channel"
              },
              "source-branch": {
                "default": "",
                "description": "The target branch for Git sources.",
                "examples": [
                  "main",
                  "hotfix/2.10"
                ],
                "title": "Source-Branch",
                "type": "string"
              },
              "source-commit": {
                "default": "",
                "description": "The target commit for Git sources.",
                "examples": [
                  "36086af03fc4941a8ac219648ce77401743f3ae0"
                ],
                "title": "Source-Commit",
                "type": "string"
              },
              "source-depth": {
                "default": 0,
                "description": "The commit depth to fetch for Git sources.",
                "examples": [
                  "1"
                ],
                "title": "Source-Depth",
                "type": "integer"
              },
              "source-subdir": {
                "default": "",
                "description": "The subdirectory of the unpacked source where the build will occur.",
                "examples": [
                  "src",
                  "demo_nodes_cpp"
                ],
                "title": "Source-Subdir",
                "type": "string"
              },
              "source-submodules": {
                "anyOf": [
                  {
                    "items": {
                      "type": "string"
                    },
                    "type": "array"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "description": "The registered submodules to fetch from Git sources.",
                "examples": [
                  "[third_party/googletest, third_party/jsoncpp]",
                  "[libbpf]"
                ],
                "title": "Source-Submodules"
              },
              "source-tag": {
                "default": "",
                "description": "The target tag for Git sources.",
                "examples": [
                  "1.0.1"
                ],
                "title": "Source-Tag",
                "type": "string"
              },
              "source-type": {
                "default": "",
                "description": "The format of the part's source.",
                "examples": [
                  "git",
                  "local"
                ],
                "title": "Source-Type",
                "type": "string"
              },
              "disable-parallel": {
                "default": false,
                "description": "Whether to disable CPU multithreading during the build step.",
                "examples": [
                  "true"
                ],
                "title": "Disable-Parallel",
                "type": "boolean"
              },
              "after": {
                "default": [],
                "description": "The parts to process before starting this part's build.",
                "examples": [
                  "[build-deps, daemon]"
                ],
                "items": {
                  "type": "string"
                },
                "title": "After",
                "type": "array"
              },
              "overlay-packages": {
                "default": [],
                "description": "The packages to install in the part's layer.",
                "examples": [
                  "[ed]"
                ],
                "items": {
                  "type": "string"
                },
                "title": "Overlay-Packages",
                "type": "array"
              },
              "stage-snaps": {
                "default": [],
                "description": "The snaps to include in the stage environment.",
                "examples": [
                  "[go/1.17, chisel/latest/candidate, mir-kiosk-x11]"
                ],
                "items": {
                  "type": "string"
                },
                "title": "Stage-Snaps",
                "type": "array"
              },
              "stage-packages": {
                "default": [],
                "description": "The packages or Chisel slices to include in the stage environment.",
                "examples": [
                  "[curl, libxml2]"
                ],
                "items": {
                  "type": "string"
                },
                "title": "Stage-Packages",
                "type": "array"
              },
              "build-snaps": {
                "default": [],
                "description": "The snaps to install in the build environment.",
                "examples": [
                  "[go/latest/stable, node/stable]"
                ],
                "items": {
                  "type": "string"
                },
                "title": "Build-Snaps",
                "type": "array"
              },
              "build-packages": {
                "default": [],
                "description": "The packages to install in the build environment.",
                "examples": [
                  "[git, libffi-dev, libssl-dev]"
                ],
                "items": {
                  "type": "string"
                },
                "title": "Build-Packages",
                "type": "array"
              },
              "build-environment": {
                "default": [],
                "description": "The environment variables to define for the build step, as key-value pairs.",
                "examples": [
                  "[{MESSAGE: \"Hello world!\"}, {NAME: \"Craft Parts\"}]"
                ],
                "items": {
                  "type": "object",
                  "additionalProperties": {
                    "type": "string"
                  }
                },
                "title": "Build-Environment",
                "type": "array"
              },
              "build-attributes": {
                "default": [],
                "description": "Identifiers that control specific behaviors during the build.",
                "examples": [
                  "[enable-usrmerge]",
                  "[disable-usrmerge]"
                ],
                "items": {
                  "type": "string"
                },
                "title": "Build-Attributes",
                "type": "array"
              },
              "organize": {
                "type": "object",
                "description": "A map of files from the build directory to their destinations in the stage directory.",
                "examples": [
                  "{hello.py: bin/hello}"
                ],
                "title": "Organize",
                "additionalProperties": {
                  "type": "string"
                }
              },
              "overlay": {
                "description": "The files to copy from the part's layer to the stage directory.",
                "examples": [
                  "[bin, usr/bin]",
                  "[-etc/cloud/cloud.cfg.d/90_dpkg.cfg]"
                ],
                "items": {
                  "type": "string"
                },
                "title": "Overlay",
                "type": "array"
              },
              "stage": {
                "description": "The files to copy from the build directory to the stage directory.",
                "examples": [
                  "[usr/bin/*, usr/share]",
                  "[-usr, zfsutils-linux]"
                ],
                "items": {
                  "description": "relative path",
                  "minLength": 1,
                  "type": "string"
                },
                "title": "Stage",
                "type": "array"
              },
              "prime": {
                "description": "",
                "examples": [
                  "[usr/lib/*/qt6/plugins/tls/*, -usr/share/thumbnailers]"
                ],
                "items": {
                  "description": "relative path",
                  "minLength": 1,
                  "type": "string"
                },
                "title": "Prime",
                "type": "array"
              },
              "override-pull": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "description": "The commands to run instead of the default behavior of the pull step.",
                "examples": [
                  "|\n  craftctl default\n  rm $CRAFT_PART_SRC/pyproject.toml"
                ],
                "title": "Override-Pull"
              },
              "overlay-script": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "description": "The commands to run after the part's overlay packages are installed.",
                "examples": [
                  "|\n  rm -f ${CRAFT_OVERLAY}/usr/bin/vi ${CRAFT_OVERLAY}/usr/bin/vim*\n  rm -f ${CRAFT_OVERLAY}/usr/bin/emacs*\n  rm -f ${CRAFT_OVERLAY}/bin/nano"
                ],
                "title": "Overlay-Script"
              },
              "override-overlay": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "description": "Shell script to run inside the overlay chroot after mounting.",
                "examples": [
                  "echo 'hello from chroot' > /root/test.txt"
                ],
                "title": "Override-Overlay"
              },
              "override-build": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "description": "The commands to run instead of the default behavior of the build step.",
                "examples": [
                  "|\n  cd cmd/webhook\n  mkdir $CRAFT_PART_INSTALL/ko-app\n  go build -o $CRAFT_PART_INSTALL/ko-app/webhook -a ."
                ],
                "title": "Override-Build"
              },
              "override-stage": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "description": "The commands to run instead of the default behavior of the stage step.",
                "examples": [
                  "|\n  craftctl default\n  chown -R 499 \"${CRAFT_PART_INSTALL}/entrypoint.sh\""
                ],
                "title": "Override-Stage"
              },
              "override-prime": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "description": "The commands to run instead of the default behavior of the prime step.",
                "examples": [
                  "|\n  craftctl default\n  mkdir -p $CRAFT_PRIME/var/lib/mysql\n  mkdir -p $CRAFT_PRIME/var/lib/mysqld"
                ],
                "title": "Override-Prime"
              },
              "permissions": {
                "default": [],
                "description": "The ownership and permission settings for a set of files in the part's prime directory.",
                "examples": [
                  "[{owner: 2000, group: 2000}, {path: srv/indico/start-indico.sh, mode: \"544\"}, {path: etc/, mode: \"755\"}]"
                ],
                "items": {
                  "$ref": "#/$defs/Permissions"
                },
                "title": "Permissions",
                "type": "array"
              }
            },
            "additionalProperties": false,
            "type": "object"
          }
        },
        {
          "if": {
            "properties": {
              "plugin": {
                "const": "rust"
              }
            }
          },
          "then": {
            "$comment": "common properties had to be repeated here or they would be considered invalid by the schema validator otherwise",
            "properties": {
              "plugin": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "description": "The plugin to build the part with.",
                "examples": [
                  "python",
                  "dump"
                ],
                "title": "Plugin",
                "enum": [
                  "dump",
                  "nil",
                  "ant",
                  "autotools",
                  "cargo-use",
                  "cmake",
                  "dotnet",
                  "go",
                  "go-use",
                  "gradle",
                  "jlink",
                  "make",
                  "maven",
                  "maven-use",
                  "meson",
                  "npm",
                  "npm-use",
                  "poetry",
                  "python",
                  "qmake",
                  "ruby",
                  "rust",
                  "scons",
                  "uv"
                ]
              },
              "source": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "description": "The location of the source files for the part.",
                "examples": [
                  ".",
                  "https://github.com/canonical/dqlite"
                ],
                "title": "Source"
              },
              "rust-features": {
                "default": [],
                "items": {
                  "type": "string"
                },
                "title": "Rust-Features",
                "type": "array"
              },
              "rust-path": {
                "default": [
                  "."
                ],
                "items": {
                  "type": "string"
                },
                "title": "Rust-Path",
                "type": "array"
              },
              "rust-channel": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "title": "Rust-Channel"
              },
              "rust-use-global-lto": {
                "default": false,
                "title": "Rust-Use-Global-Lto",
                "type": "boolean"
              },
              "rust-no-default-features": {
                "default": false,
                "title": "Rust-No-Default-Features",
                "type": "boolean"
              },
              "rust-ignore-toolchain-file": {
                "default": false,
                "title": "Rust-Ignore-Toolchain-File",
                "type": "boolean"
              },
              "rust-cargo-parameters": {
                "default": [],
                "items": {
                  "type": "string"
                },
                "title": "Rust-Cargo-Parameters",
                "type": "array"
              },
              "rust-inherit-ldflags": {
                "default": false,
                "title": "Rust-Inherit-Ldflags",
                "type": "boolean"
              },
              "after": {
                "default": [],
                "description": "The parts to process before starting this part's build.",
                "examples": [
                  "[build-deps, daemon]"
                ],
                "items": {
                  "type": "string"
                },
                "title": "After",
                "type": "array"
              },
              "source-checksum": {
                "default": "",
                "description": "The checksum of the downloaded source, to ensure integrity.",
                "examples": [
                  "sha256/1451d01ee3a21100340aed867d0b799f46f0b1749680028d38c3f5d0128fb8a7"
                ],
                "title": "Source-Checksum",
                "type": "string"
              },
              "source-channel": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "title": "Source-Channel"
              },
              "source-branch": {
                "default": "",
                "description": "The target branch for Git sources.",
                "examples": [
                  "main",
                  "hotfix/2.10"
                ],
                "title": "Source-Branch",
                "type": "string"
              },
              "source-commit": {
                "default": "",
                "description": "The target commit for Git sources.",
                "examples": [
                  "36086af03fc4941a8ac219648ce77401743f3ae0"
                ],
                "title": "Source-Commit",
                "type": "string"
              },
              "source-depth": {
                "default": 0,
                "description": "The commit depth to fetch for Git sources.",
                "examples": [
                  "1"
                ],
                "title": "Source-Depth",
                "type": "integer"
              },
              "source-subdir": {
                "default": "",
                "description": "The subdirectory of the unpacked source where the build will occur.",
                "examples": [
                  "src",
                  "demo_nodes_cpp"
                ],
                "title": "Source-Subdir",
                "type": "string"
              },
              "source-submodules": {
                "anyOf": [
                  {
                    "items": {
                      "type": "string"
                    },
                    "type": "array"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "description": "The registered submodules to fetch from Git sources.",
                "examples": [
                  "[third_party/googletest, third_party/jsoncpp]",
                  "[libbpf]"
                ],
                "title": "Source-Submodules"
              },
              "source-tag": {
                "default": "",
                "description": "The target tag for Git sources.",
                "examples": [
                  "1.0.1"
                ],
                "title": "Source-Tag",
                "type": "string"
              },
              "source-type": {
                "default": "",
                "description": "The format of the part's source.",
                "examples": [
                  "git",
                  "local"
                ],
                "title": "Source-Type",
                "type": "string"
              },
              "disable-parallel": {
                "default": false,
                "description": "Whether to disable CPU multithreading during the build step.",
                "examples": [
                  "true"
                ],
                "title": "Disable-Parallel",
                "type": "boolean"
              },
              "overlay-packages": {
                "default": [],
                "description": "The packages to install in the part's layer.",
                "examples": [
                  "[ed]"
                ],
                "items": {
                  "type": "string"
                },
                "title": "Overlay-Packages",
                "type": "array"
              },
              "stage-snaps": {
                "default": [],
                "description": "The snaps to include in the stage environment.",
                "examples": [
                  "[go/1.17, chisel/latest/candidate, mir-kiosk-x11]"
                ],
                "items": {
                  "type": "string"
                },
                "title": "Stage-Snaps",
                "type": "array"
              },
              "stage-packages": {
                "default": [],
                "description": "The packages or Chisel slices to include in the stage environment.",
                "examples": [
                  "[curl, libxml2]"
                ],
                "items": {
                  "type": "string"
                },
                "title": "Stage-Packages",
                "type": "array"
              },
              "build-snaps": {
                "default": [],
                "description": "The snaps to install in the build environment.",
                "examples": [
                  "[go/latest/stable, node/stable]"
                ],
                "items": {
                  "type": "string"
                },
                "title": "Build-Snaps",
                "type": "array"
              },
              "build-packages": {
                "default": [],
                "description": "The packages to install in the build environment.",
                "examples": [
                  "[git, libffi-dev, libssl-dev]"
                ],
                "items": {
                  "type": "string"
                },
                "title": "Build-Packages",
                "type": "array"
              },
              "build-environment": {
                "default": [],
                "description": "The environment variables to define for the build step, as key-value pairs.",
                "examples": [
                  "[{MESSAGE: \"Hello world!\"}, {NAME: \"Craft Parts\"}]"
                ],
                "items": {
                  "type": "object",
                  "additionalProperties": {
                    "type": "string"
                  }
                },
                "title": "Build-Environment",
                "type": "array"
              },
              "build-attributes": {
                "default": [],
                "description": "Identifiers that control specific behaviors during the build.",
                "examples": [
                  "[enable-usrmerge]",
                  "[disable-usrmerge]"
                ],
                "items": {
                  "type": "string"
                },
                "title": "Build-Attributes",
                "type": "array"
              },
              "organize": {
                "type": "object",
                "description": "A map of files from the build directory to their destinations in the stage directory.",
                "examples": [
                  "{hello.py: bin/hello}"
                ],
                "title": "Organize",
                "additionalProperties": {
                  "type": "string"
                }
              },
              "overlay": {
                "description": "The files to copy from the part's layer to the stage directory.",
                "examples": [
                  "[bin, usr/bin]",
                  "[-etc/cloud/cloud.cfg.d/90_dpkg.cfg]"
                ],
                "items": {
                  "type": "string"
                },
                "title": "Overlay",
                "type": "array"
              },
              "stage": {
                "description": "The files to copy from the build directory to the stage directory.",
                "examples": [
                  "[usr/bin/*, usr/share]",
                  "[-usr, zfsutils-linux]"
                ],
                "items": {
                  "description": "relative path",
                  "minLength": 1,
                  "type": "string"
                },
                "title": "Stage",
                "type": "array"
              },
              "prime": {
                "description": "",
                "examples": [
                  "[usr/lib/*/qt6/plugins/tls/*, -usr/share/thumbnailers]"
                ],
                "items": {
                  "description": "relative path",
                  "minLength": 1,
                  "type": "string"
                },
                "title": "Prime",
                "type": "array"
              },
              "override-pull": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "description": "The commands to run instead of the default behavior of the pull step.",
                "examples": [
                  "|\n  craftctl default\n  rm $CRAFT_PART_SRC/pyproject.toml"
                ],
                "title": "Override-Pull"
              },
              "overlay-script": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "description": "The commands to run after the part's overlay packages are installed.",
                "examples": [
                  "|\n  rm -f ${CRAFT_OVERLAY}/usr/bin/vi ${CRAFT_OVERLAY}/usr/bin/vim*\n  rm -f ${CRAFT_OVERLAY}/usr/bin/emacs*\n  rm -f ${CRAFT_OVERLAY}/bin/nano"
                ],
                "title": "Overlay-Script"
              },
              "override-overlay": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "description": "Shell script to run inside the overlay chroot after mounting.",
                "examples": [
                  "echo 'hello from chroot' > /root/test.txt"
                ],
                "title": "Override-Overlay"
              },
              "override-build": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "description": "The commands to run instead of the default behavior of the build step.",
                "examples": [
                  "|\n  cd cmd/webhook\n  mkdir $CRAFT_PART_INSTALL/ko-app\n  go build -o $CRAFT_PART_INSTALL/ko-app/webhook -a ."
                ],
                "title": "Override-Build"
              },
              "override-stage": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "description": "The commands to run instead of the default behavior of the stage step.",
                "examples": [
                  "|\n  craftctl default\n  chown -R 499 \"${CRAFT_PART_INSTALL}/entrypoint.sh\""
                ],
                "title": "Override-Stage"
              },
              "override-prime": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "description": "The commands to run instead of the default behavior of the prime step.",
                "examples": [
                  "|\n  craftctl default\n  mkdir -p $CRAFT_PRIME/var/lib/mysql\n  mkdir -p $CRAFT_PRIME/var/lib/mysqld"
                ],
                "title": "Override-Prime"
              },
              "permissions": {
                "default": [],
                "description": "The ownership and permission settings for a set of files in the part's prime directory.",
                "examples": [
                  "[{owner: 2000, group: 2000}, {path: srv/indico/start-indico.sh, mode: \"544\"}, {path: etc/, mode: \"755\"}]"
                ],
                "items": {
                  "$ref": "#/$defs/Permissions"
                },
                "title": "Permissions",
                "type": "array"
              }
            },
            "additionalProperties": false,
            "type": "object"
          }
        },
        {
          "if": {
            "properties": {
              "plugin": {
                "const": "scons"
              }
            }
          },
          "then": {
            "$comment": "common properties had to be repeated here or they would be considered invalid by the schema validator otherwise",
            "properties": {
              "plugin": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "description": "The plugin to build the part with.",
                "examples": [
                  "python",
                  "dump"
                ],
                "title": "Plugin",
                "enum": [
                  "dump",
                  "nil",
                  "ant",
                  "autotools",
                  "cargo-use",
                  "cmake",
                  "dotnet",
                  "go",
                  "go-use",
                  "gradle",
                  "jlink",
                  "make",
                  "maven",
                  "maven-use",
                  "meson",
                  "npm",
                  "npm-use",
                  "poetry",
                  "python",
                  "qmake",
                  "ruby",
                  "rust",
                  "scons",
                  "uv"
                ]
              },
              "source": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "description": "The location of the source files for the part.",
                "examples": [
                  ".",
                  "https://github.com/canonical/dqlite"
                ],
                "title": "Source"
              },
              "scons-parameters": {
                "default": [],
                "items": {
                  "type": "string"
                },
                "title": "Scons-Parameters",
                "type": "array"
              },
              "source-checksum": {
                "default": "",
                "description": "The checksum of the downloaded source, to ensure integrity.",
                "examples": [
                  "sha256/1451d01ee3a21100340aed867d0b799f46f0b1749680028d38c3f5d0128fb8a7"
                ],
                "title": "Source-Checksum",
                "type": "string"
              },
              "source-channel": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "title": "Source-Channel"
              },
              "source-branch": {
                "default": "",
                "description": "The target branch for Git sources.",
                "examples": [
                  "main",
                  "hotfix/2.10"
                ],
                "title": "Source-Branch",
                "type": "string"
              },
              "source-commit": {
                "default": "",
                "description": "The target commit for Git sources.",
                "examples": [
                  "36086af03fc4941a8ac219648ce77401743f3ae0"
                ],
                "title": "Source-Commit",
                "type": "string"
              },
              "source-depth": {
                "default": 0,
                "description": "The commit depth to fetch for Git sources.",
                "examples": [
                  "1"
                ],
                "title": "Source-Depth",
                "type": "integer"
              },
              "source-subdir": {
                "default": "",
                "description": "The subdirectory of the unpacked source where the build will occur.",
                "examples": [
                  "src",
                  "demo_nodes_cpp"
                ],
                "title": "Source-Subdir",
                "type": "string"
              },
              "source-submodules": {
                "anyOf": [
                  {
                    "items": {
                      "type": "string"
                    },
                    "type": "array"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "description": "The registered submodules to fetch from Git sources.",
                "examples": [
                  "[third_party/googletest, third_party/jsoncpp]",
                  "[libbpf]"
                ],
                "title": "Source-Submodules"
              },
              "source-tag": {
                "default": "",
                "description": "The target tag for Git sources.",
                "examples": [
                  "1.0.1"
                ],
                "title": "Source-Tag",
                "type": "string"
              },
              "source-type": {
                "default": "",
                "description": "The format of the part's source.",
                "examples": [
                  "git",
                  "local"
                ],
                "title": "Source-Type",
                "type": "string"
              },
              "disable-parallel": {
                "default": false,
                "description": "Whether to disable CPU multithreading during the build step.",
                "examples": [
                  "true"
                ],
                "title": "Disable-Parallel",
                "type": "boolean"
              },
              "after": {
                "default": [],
                "description": "The parts to process before starting this part's build.",
                "examples": [
                  "[build-deps, daemon]"
                ],
                "items": {
                  "type": "string"
                },
                "title": "After",
                "type": "array"
              },
              "overlay-packages": {
                "default": [],
                "description": "The packages to install in the part's layer.",
                "examples": [
                  "[ed]"
                ],
                "items": {
                  "type": "string"
                },
                "title": "Overlay-Packages",
                "type": "array"
              },
              "stage-snaps": {
                "default": [],
                "description": "The snaps to include in the stage environment.",
                "examples": [
                  "[go/1.17, chisel/latest/candidate, mir-kiosk-x11]"
                ],
                "items": {
                  "type": "string"
                },
                "title": "Stage-Snaps",
                "type": "array"
              },
              "stage-packages": {
                "default": [],
                "description": "The packages or Chisel slices to include in the stage environment.",
                "examples": [
                  "[curl, libxml2]"
                ],
                "items": {
                  "type": "string"
                },
                "title": "Stage-Packages",
                "type": "array"
              },
              "build-snaps": {
                "default": [],
                "description": "The snaps to install in the build environment.",
                "examples": [
                  "[go/latest/stable, node/stable]"
                ],
                "items": {
                  "type": "string"
                },
                "title": "Build-Snaps",
                "type": "array"
              },
              "build-packages": {
                "default": [],
                "description": "The packages to install in the build environment.",
                "examples": [
                  "[git, libffi-dev, libssl-dev]"
                ],
                "items": {
                  "type": "string"
                },
                "title": "Build-Packages",
                "type": "array"
              },
              "build-environment": {
                "default": [],
                "description": "The environment variables to define for the build step, as key-value pairs.",
                "examples": [
                  "[{MESSAGE: \"Hello world!\"}, {NAME: \"Craft Parts\"}]"
                ],
                "items": {
                  "type": "object",
                  "additionalProperties": {
                    "type": "string"
                  }
                },
                "title": "Build-Environment",
                "type": "array"
              },
              "build-attributes": {
                "default": [],
                "description": "Identifiers that control specific behaviors during the build.",
                "examples": [
                  "[enable-usrmerge]",
                  "[disable-usrmerge]"
                ],
                "items": {
                  "type": "string"
                },
                "title": "Build-Attributes",
                "type": "array"
              },
              "organize": {
                "type": "object",
                "description": "A map of files from the build directory to their destinations in the stage directory.",
                "examples": [
                  "{hello.py: bin/hello}"
                ],
                "title": "Organize",
                "additionalProperties": {
                  "type": "string"
                }
              },
              "overlay": {
                "description": "The files to copy from the part's layer to the stage directory.",
                "examples": [
                  "[bin, usr/bin]",
                  "[-etc/cloud/cloud.cfg.d/90_dpkg.cfg]"
                ],
                "items": {
                  "type": "string"
                },
                "title": "Overlay",
                "type": "array"
              },
              "stage": {
                "description": "The files to copy from the build directory to the stage directory.",
                "examples": [
                  "[usr/bin/*, usr/share]",
                  "[-usr, zfsutils-linux]"
                ],
                "items": {
                  "description": "relative path",
                  "minLength": 1,
                  "type": "string"
                },
                "title": "Stage",
                "type": "array"
              },
              "prime": {
                "description": "",
                "examples": [
                  "[usr/lib/*/qt6/plugins/tls/*, -usr/share/thumbnailers]"
                ],
                "items": {
                  "description": "relative path",
                  "minLength": 1,
                  "type": "string"
                },
                "title": "Prime",
                "type": "array"
              },
              "override-pull": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "description": "The commands to run instead of the default behavior of the pull step.",
                "examples": [
                  "|\n  craftctl default\n  rm $CRAFT_PART_SRC/pyproject.toml"
                ],
                "title": "Override-Pull"
              },
              "overlay-script": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "description": "The commands to run after the part's overlay packages are installed.",
                "examples": [
                  "|\n  rm -f ${CRAFT_OVERLAY}/usr/bin/vi ${CRAFT_OVERLAY}/usr/bin/vim*\n  rm -f ${CRAFT_OVERLAY}/usr/bin/emacs*\n  rm -f ${CRAFT_OVERLAY}/bin/nano"
                ],
                "title": "Overlay-Script"
              },
              "override-overlay": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "description": "Shell script to run inside the overlay chroot after mounting.",
                "examples": [
                  "echo 'hello from chroot' > /root/test.txt"
                ],
                "title": "Override-Overlay"
              },
              "override-build": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "description": "The commands to run instead of the default behavior of the build step.",
                "examples": [
                  "|\n  cd cmd/webhook\n  mkdir $CRAFT_PART_INSTALL/ko-app\n  go build -o $CRAFT_PART_INSTALL/ko-app/webhook -a ."
                ],
                "title": "Override-Build"
              },
              "override-stage": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "description": "The commands to run instead of the default behavior of the stage step.",
                "examples": [
                  "|\n  craftctl default\n  chown -R 499 \"${CRAFT_PART_INSTALL}/entrypoint.sh\""
                ],
                "title": "Override-Stage"
              },
              "override-prime": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "description": "The commands to run instead of the default behavior of the prime step.",
                "examples": [
                  "|\n  craftctl default\n  mkdir -p $CRAFT_PRIME/var/lib/mysql\n  mkdir -p $CRAFT_PRIME/var/lib/mysqld"
                ],
                "title": "Override-Prime"
              },
              "permissions": {
                "default": [],
                "description": "The ownership and permission settings for a set of files in the part's prime directory.",
                "examples": [
                  "[{owner: 2000, group: 2000}, {path: srv/indico/start-indico.sh, mode: \"544\"}, {path: etc/, mode: \"755\"}]"
                ],
                "items": {
                  "$ref": "#/$defs/Permissions"
                },
                "title": "Permissions",
                "type": "array"
              }
            },
            "additionalProperties": false,
            "type": "object"
          }
        },
        {
          "if": {
            "properties": {
              "plugin": {
                "const": "uv"
              }
            }
          },
          "then": {
            "$comment": "common properties had to be repeated here or they would be considered invalid by the schema validator otherwise",
            "properties": {
              "plugin": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "description": "The plugin to build the part with.",
                "examples": [
                  "python",
                  "dump"
                ],
                "title": "Plugin",
                "enum": [
                  "dump",
                  "nil",
                  "ant",
                  "autotools",
                  "cargo-use",
                  "cmake",
                  "dotnet",
                  "go",
                  "go-use",
                  "gradle",
                  "jlink",
                  "make",
                  "maven",
                  "maven-use",
                  "meson",
                  "npm",
                  "npm-use",
                  "poetry",
                  "python",
                  "qmake",
                  "ruby",
                  "rust",
                  "scons",
                  "uv"
                ]
              },
              "source": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "description": "The location of the source files for the part.",
                "examples": [
                  ".",
                  "https://github.com/canonical/dqlite"
                ],
                "title": "Source"
              },
              "uv-extras": {
                "description": "Optional extra dependencies to include when installing.",
                "items": {
                  "type": "string"
                },
                "title": "Optional extra dependencies",
                "type": "array",
                "uniqueItems": true
              },
              "uv-groups": {
                "description": "Optional dependency groups to include when installing.",
                "items": {
                  "type": "string"
                },
                "title": "Optional dependency groups",
                "type": "array",
                "uniqueItems": true
              },
              "source-checksum": {
                "default": "",
                "description": "The checksum of the downloaded source, to ensure integrity.",
                "examples": [
                  "sha256/1451d01ee3a21100340aed867d0b799f46f0b1749680028d38c3f5d0128fb8a7"
                ],
                "title": "Source-Checksum",
                "type": "string"
              },
              "source-channel": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "title": "Source-Channel"
              },
              "source-branch": {
                "default": "",
                "description": "The target branch for Git sources.",
                "examples": [
                  "main",
                  "hotfix/2.10"
                ],
                "title": "Source-Branch",
                "type": "string"
              },
              "source-commit": {
                "default": "",
                "description": "The target commit for Git sources.",
                "examples": [
                  "36086af03fc4941a8ac219648ce77401743f3ae0"
                ],
                "title": "Source-Commit",
                "type": "string"
              },
              "source-depth": {
                "default": 0,
                "description": "The commit depth to fetch for Git sources.",
                "examples": [
                  "1"
                ],
                "title": "Source-Depth",
                "type": "integer"
              },
              "source-subdir": {
                "default": "",
                "description": "The subdirectory of the unpacked source where the build will occur.",
                "examples": [
                  "src",
                  "demo_nodes_cpp"
                ],
                "title": "Source-Subdir",
                "type": "string"
              },
              "source-submodules": {
                "anyOf": [
                  {
                    "items": {
                      "type": "string"
                    },
                    "type": "array"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "description": "The registered submodules to fetch from Git sources.",
                "examples": [
                  "[third_party/googletest, third_party/jsoncpp]",
                  "[libbpf]"
                ],
                "title": "Source-Submodules"
              },
              "source-tag": {
                "default": "",
                "description": "The target tag for Git sources.",
                "examples": [
                  "1.0.1"
                ],
                "title": "Source-Tag",
                "type": "string"
              },
              "source-type": {
                "default": "",
                "description": "The format of the part's source.",
                "examples": [
                  "git",
                  "local"
                ],
                "title": "Source-Type",
                "type": "string"
              },
              "disable-parallel": {
                "default": false,
                "description": "Whether to disable CPU multithreading during the build step.",
                "examples": [
                  "true"
                ],
                "title": "Disable-Parallel",
                "type": "boolean"
              },
              "after": {
                "default": [],
                "description": "The parts to process before starting this part's build.",
                "examples": [
                  "[build-deps, daemon]"
                ],
                "items": {
                  "type": "string"
                },
                "title": "After",
                "type": "array"
              },
              "overlay-packages": {
                "default": [],
                "description": "The packages to install in the part's layer.",
                "examples": [
                  "[ed]"
                ],
                "items": {
                  "type": "string"
                },
                "title": "Overlay-Packages",
                "type": "array"
              },
              "stage-snaps": {
                "default": [],
                "description": "The snaps to include in the stage environment.",
                "examples": [
                  "[go/1.17, chisel/latest/candidate, mir-kiosk-x11]"
                ],
                "items": {
                  "type": "string"
                },
                "title": "Stage-Snaps",
                "type": "array"
              },
              "stage-packages": {
                "default": [],
                "description": "The packages or Chisel slices to include in the stage environment.",
                "examples": [
                  "[curl, libxml2]"
                ],
                "items": {
                  "type": "string"
                },
                "title": "Stage-Packages",
                "type": "array"
              },
              "build-snaps": {
                "default": [],
                "description": "The snaps to install in the build environment.",
                "examples": [
                  "[go/latest/stable, node/stable]"
                ],
                "items": {
                  "type": "string"
                },
                "title": "Build-Snaps",
                "type": "array"
              },
              "build-packages": {
                "default": [],
                "description": "The packages to install in the build environment.",
                "examples": [
                  "[git, libffi-dev, libssl-dev]"
                ],
                "items": {
                  "type": "string"
                },
                "title": "Build-Packages",
                "type": "array"
              },
              "build-environment": {
                "default": [],
                "description": "The environment variables to define for the build step, as key-value pairs.",
                "examples": [
                  "[{MESSAGE: \"Hello world!\"}, {NAME: \"Craft Parts\"}]"
                ],
                "items": {
                  "type": "object",
                  "additionalProperties": {
                    "type": "string"
                  }
                },
                "title": "Build-Environment",
                "type": "array"
              },
              "build-attributes": {
                "default": [],
                "description": "Identifiers that control specific behaviors during the build.",
                "examples": [
                  "[enable-usrmerge]",
                  "[disable-usrmerge]"
                ],
                "items": {
                  "type": "string"
                },
                "title": "Build-Attributes",
                "type": "array"
              },
              "organize": {
                "type": "object",
                "description": "A map of files from the build directory to their destinations in the stage directory.",
                "examples": [
                  "{hello.py: bin/hello}"
                ],
                "title": "Organize",
                "additionalProperties": {
                  "type": "string"
                }
              },
              "overlay": {
                "description": "The files to copy from the part's layer to the stage directory.",
                "examples": [
                  "[bin, usr/bin]",
                  "[-etc/cloud/cloud.cfg.d/90_dpkg.cfg]"
                ],
                "items": {
                  "type": "string"
                },
                "title": "Overlay",
                "type": "array"
              },
              "stage": {
                "description": "The files to copy from the build directory to the stage directory.",
                "examples": [
                  "[usr/bin/*, usr/share]",
                  "[-usr, zfsutils-linux]"
                ],
                "items": {
                  "description": "relative path",
                  "minLength": 1,
                  "type": "string"
                },
                "title": "Stage",
                "type": "array"
              },
              "prime": {
                "description": "",
                "examples": [
                  "[usr/lib/*/qt6/plugins/tls/*, -usr/share/thumbnailers]"
                ],
                "items": {
                  "description": "relative path",
                  "minLength": 1,
                  "type": "string"
                },
                "title": "Prime",
                "type": "array"
              },
              "override-pull": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "description": "The commands to run instead of the default behavior of the pull step.",
                "examples": [
                  "|\n  craftctl default\n  rm $CRAFT_PART_SRC/pyproject.toml"
                ],
                "title": "Override-Pull"
              },
              "overlay-script": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "description": "The commands to run after the part's overlay packages are installed.",
                "examples": [
                  "|\n  rm -f ${CRAFT_OVERLAY}/usr/bin/vi ${CRAFT_OVERLAY}/usr/bin/vim*\n  rm -f ${CRAFT_OVERLAY}/usr/bin/emacs*\n  rm -f ${CRAFT_OVERLAY}/bin/nano"
                ],
                "title": "Overlay-Script"
              },
              "override-overlay": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "description": "Shell script to run inside the overlay chroot after mounting.",
                "examples": [
                  "echo 'hello from chroot' > /root/test.txt"
                ],
                "title": "Override-Overlay"
              },
              "override-build": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "description": "The commands to run instead of the default behavior of the build step.",
                "examples": [
                  "|\n  cd cmd/webhook\n  mkdir $CRAFT_PART_INSTALL/ko-app\n  go build -o $CRAFT_PART_INSTALL/ko-app/webhook -a ."
                ],
                "title": "Override-Build"
              },
              "override-stage": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "description": "The commands to run instead of the default behavior of the stage step.",
                "examples": [
                  "|\n  craftctl default\n  chown -R 499 \"${CRAFT_PART_INSTALL}/entrypoint.sh\""
                ],
                "title": "Override-Stage"
              },
              "override-prime": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "description": "The commands to run instead of the default behavior of the prime step.",
                "examples": [
                  "|\n  craftctl default\n  mkdir -p $CRAFT_PRIME/var/lib/mysql\n  mkdir -p $CRAFT_PRIME/var/lib/mysqld"
                ],
                "title": "Override-Prime"
              },
              "permissions": {
                "default": [],
                "description": "The ownership and permission settings for a set of files in the part's prime directory.",
                "examples": [
                  "[{owner: 2000, group: 2000}, {path: srv/indico/start-indico.sh, mode: \"544\"}, {path: etc/, mode: \"755\"}]"
                ],
                "items": {
                  "$ref": "#/$defs/Permissions"
                },
                "title": "Permissions",
                "type": "array"
              }
            },
            "additionalProperties": false,
            "type": "object"
          }
        }
      ]
    },
    "Permissions": {
      "description": "Description of the ownership and permission settings for a set of files.\n\nA ``Permissions`` object specifies that a given pattern-like ``path`` should\nbe owned by ``owner`` with a given ``group``, and have the read/write/execute\nbits defined by ``mode``.\n\nNotes\n-----\n- ``path`` is optional and defaults to \"everything\";\n- ``owner`` and ``group`` are optional if both are omitted - that is, if\n  one of the pair is specified then both must be;\n- ``mode`` is a string containing an integer in base 8. For example, \"755\",\n  \"0755\" and \"0o755\" are all accepted and are the equivalent of calling\n  ``chmod 755 ...``.",
      "properties": {
        "path": {
          "default": "*",
          "description": "The file path, relative to the prime directory, being assigned permissions.",
          "title": "Path",
          "type": "string"
        },
        "owner": {
          "anyOf": [
            {
              "type": "integer"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The numeric user ID (UID) of the desired owner on the host system.",
          "title": "Owner"
        },
        "group": {
          "anyOf": [
            {
              "type": "integer"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The numeric group (GID) of the desired owner group on the host system.",
          "title": "Group"
        },
        "mode": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The numeric representation of the file's read, write, and execute permissions.",
          "title": "Mode"
        }
      },
      "title": "Permissions",
      "type": "object"
    },
    "RubyFlavor": {
      "description": "All Ruby implementations supported by ruby-install.",
      "enum": [
        "ruby",
        "jruby",
        "truffleruby",
        "mruby"
      ],
      "title": "RubyFlavor",
      "type": "string"
    }
  }
}
