{
  "definitions": {
    "action-root": {
      "description": "Action file",
      "mapping": {
        "properties": {
          "name": "string",
          "description": "string",
          "inputs": "inputs",
          "runs": "runs",
          "outputs": "outputs"
        },
        "loose-key-type": "non-empty-string",
        "loose-value-type": "any"
      }
    },
    "inputs": {
      "one-of": ["null", "inputs-mapping"]
    },
    "inputs-mapping": {
      "mapping": {
        "loose-key-type": "non-empty-string",
        "loose-value-type": "input"
      }
    },
    "input": {
      "one-of": ["null", "input-mapping"]
    },
    "input-mapping": {
      "mapping": {
        "properties": {
          "default": "input-default-context"
        },
        "loose-key-type": "non-empty-string",
        "loose-value-type": "any"
      }
    },
    "outputs": {
      "mapping": {
        "loose-key-type": "non-empty-string",
        "loose-value-type": "output-definition"
      }
    },
    "output-definition": {
      "mapping": {
        "properties": {
          "description": "string",
          "value": "output-value"
        }
      }
    },
    "runs": {
      "one-of": ["container-runs", "node-runs", "plugin-runs", "composite-runs"]
    },
    "container-runs": {
      "mapping": {
        "properties": {
          "using": "non-empty-string",
          "image": "non-empty-string",
          "entrypoint": "non-empty-string",
          "args": "container-runs-args",
          "env": "container-runs-env",
          "pre-entrypoint": "non-empty-string",
          "pre-if": "non-empty-string",
          "post-entrypoint": "non-empty-string",
          "post-if": "non-empty-string"
        }
      }
    },
    "container-runs-args": {
      "sequence": {
        "item-type": "container-runs-context"
      }
    },
    "container-runs-env": {
      "context": ["inputs"],
      "mapping": {
        "loose-key-type": "non-empty-string",
        "loose-value-type": "string"
      }
    },
    "node-runs": {
      "mapping": {
        "properties": {
          "using": "non-empty-string",
          "main": "non-empty-string",
          "pre": "non-empty-string",
          "pre-if": "non-empty-string",
          "post": "non-empty-string",
          "post-if": "non-empty-string"
        }
      }
    },
    "plugin-runs": {
      "mapping": {
        "properties": {
          "plugin": "non-empty-string"
        }
      }
    },
    "composite-runs": {
      "mapping": {
        "properties": {
          "using": "non-empty-string",
          "steps": "composite-steps"
        }
      }
    },
    "composite-steps": {
      "sequence": {
        "item-type": "composite-step"
      }
    },
    "composite-step": {
      "one-of": ["run-step", "uses-step"]
    },
    "run-step": {
      "mapping": {
        "properties": {
          "name": "string-steps-context",
          "id": "non-empty-string",
          "if": "step-if",
          "run": {
            "type": "string-steps-context",
            "required": true
          },
          "env": "step-env",
          "continue-on-error": "boolean-steps-context",
          "working-directory": "string-steps-context",
          "shell": {
            "type": "string-steps-context",
            "required": true
          }
        }
      }
    },
    "uses-step": {
      "mapping": {
        "properties": {
          "name": "string-steps-context",
          "id": "non-empty-string",
          "if": "step-if",
          "uses": {
            "type": "non-empty-string",
            "required": true
          },
          "continue-on-error": "boolean-steps-context",
          "with": "step-with",
          "env": "step-env"
        }
      }
    },
    "container-runs-context": {
      "context": ["inputs"],
      "string": {}
    },
    "output-value": {
      "context": [
        "forge",
        "forgejo",
        "github",
        "strategy",
        "matrix",
        "steps",
        "inputs",
        "job",
        "runner",
        "env"
      ],
      "string": {}
    },
    "input-default-context": {
      "context": [
        "forge",
        "forgejo",
        "github",
        "inputs",
        "env",
        "strategy",
        "matrix",
        "job",
        "runner",
        "vars",
        "hashFiles(1,255)"
      ],
      "string": {}
    },
    "non-empty-string": {
      "string": {
        "require-non-empty": true
      }
    },
    "string-steps-context": {
      "context": [
        "forge",
        "forgejo",
        "github",
        "inputs",
        "strategy",
        "matrix",
        "steps",
        "job",
        "runner",
        "vars",
        "env",
        "hashFiles(1,255)"
      ],
      "string": {}
    },
    "boolean-steps-context": {
      "context": [
        "forge",
        "forgejo",
        "github",
        "inputs",
        "strategy",
        "matrix",
        "steps",
        "job",
        "runner",
        "vars",
        "env",
        "hashFiles(1,255)"
      ],
      "boolean": {}
    },
    "step-env": {
      "context": [
        "forge",
        "forgejo",
        "github",
        "inputs",
        "strategy",
        "matrix",
        "steps",
        "job",
        "runner",
        "vars",
        "env",
        "hashFiles(1,255)"
      ],
      "mapping": {
        "loose-key-type": "non-empty-string",
        "loose-value-type": "string"
      }
    },
    "step-if": {
      "context": [
        "forge",
        "forgejo",
        "github",
        "inputs",
        "strategy",
        "matrix",
        "steps",
        "job",
        "runner",
        "vars",
        "env",
        "always(0,0)",
        "failure(0,0)",
        "cancelled(0,0)",
        "success(0,0)",
        "hashFiles(1,255)"
      ],
      "string": {}
    },
    "step-with": {
      "context": [
        "forge",
        "forgejo",
        "github",
        "inputs",
        "strategy",
        "matrix",
        "steps",
        "job",
        "runner",
        "vars",
        "env",
        "hashFiles(1,255)"
      ],
      "mapping": {
        "loose-key-type": "non-empty-string",
        "loose-value-type": "string"
      }
    }
  }
}
