{
  "description": "Render or push Jenkins job definitions from YAML/JSON. Only the test and update commands are covered; server credentials, delete commands and plugin-info export are left out.",
  "name": "jenkins-jobs",
  "subcommands": [
    {
      "name": "test",
      "description": "Expand job definitions and print or write the resulting Jenkins XML without contacting the server.",
      "options": [
        {
          "names": [
            "--recursive",
            "-r"
          ],
          "description": "Search recursively"
        },
        {
          "names": [
            "--exclude",
            "-x"
          ],
          "description": "Exclude paths",
          "args": {
            "name": "exclude",
            "isOptional": false,
            "isVariadic": true
          },
          "isRepeatable": true
        },
        {
          "names": [
            "-o"
          ],
          "description": "Write XML files here instead of standard output.",
          "args": {
            "name": "output_dir",
            "description": "Write XML files here instead of standard output.",
            "isOptional": false,
            "template": "folders"
          }
        },
        {
          "names": [
            "--config-xml"
          ],
          "description": "config.xml layout"
        }
      ],
      "args": [
        {
          "name": "path",
          "description": "YAML/JSON file or directory; several paths can be joined with a colon.",
          "isOptional": true,
          "template": "filepaths"
        },
        {
          "name": "names",
          "description": "Limit the run to these jobs; empty means all.",
          "isOptional": true,
          "isVariadic": true
        }
      ]
    },
    {
      "name": "update",
      "description": "Push job definitions to the Jenkins server configured in jenkins_jobs.ini. Updating changes jobs on the server.",
      "options": [
        {
          "names": [
            "--recursive",
            "-r"
          ],
          "description": "Search recursively"
        },
        {
          "names": [
            "--exclude",
            "-x"
          ],
          "description": "Exclude paths",
          "args": {
            "name": "exclude",
            "isOptional": false,
            "isVariadic": true
          },
          "isRepeatable": true
        },
        {
          "names": [
            "--delete-old"
          ],
          "description": "Removes jobs from Jenkins that are no longer defined.",
          "isDangerous": true
        },
        {
          "names": [
            "--workers"
          ],
          "description": "0 autodetects; 1 uses a single worker.",
          "args": {
            "name": "workers",
            "description": "0 autodetects; 1 uses a single worker.",
            "isOptional": false
          }
        },
        {
          "names": [
            "--existing-only"
          ],
          "description": "Existing jobs only"
        },
        {
          "names": [
            "--enabled-only"
          ],
          "description": "Enabled jobs only"
        },
        {
          "names": [
            "--jobs-only",
            "-j"
          ],
          "description": "Jobs only"
        },
        {
          "names": [
            "--views-only",
            "-v"
          ],
          "description": "Views only"
        }
      ],
      "args": [
        {
          "name": "path",
          "isOptional": true,
          "template": "filepaths"
        },
        {
          "name": "names",
          "description": "Limit the run to these jobs; empty means all.",
          "isOptional": true,
          "isVariadic": true
        }
      ]
    }
  ]
}
