{# You can obviously ignore the below when editing this template #} # DO NOT EDIT THIS FILE. It is generated from a template. Changes should be # proposed against the template and updated files generated using the # 'generate-schemas.py' tool --- openapi: '3.0.0' info: title: Patchwork API description: > Patchwork is a web-based patch tracking system designed to facilitate the contribution and management of contributions to an open-source project. contact: email: patchwork@lists.ozlabs.org license: name: GPL v2 License url: https://www.gnu.org/licenses/gpl-2.0.html version: '{{ version_str }}' paths: /api/{{ version_url}}: get: description: List API resources. operationId: api_list parameters: [] responses: '200': description: '' content: application/json: schema: $ref: '#/components/schemas/Index' tags: - api /api/{{ version_url}}bundles/: get: description: List bundles. operationId: bundles_list parameters: - $ref: '#/components/parameters/Page' - $ref: '#/components/parameters/PageSize' - $ref: '#/components/parameters/Order' - $ref: '#/components/parameters/Search' - in: query name: project description: An ID or linkname of a project to filter bundles by. schema: title: '' type: string - in: query name: owner description: An ID or username of a user to filter bundles by. schema: title: '' type: string - in: query name: public description: Show only public (`true`) or private (`false`) bundles. schema: title: '' type: string enum: - 'true' - 'false' responses: '200': description: '' headers: Link: $ref: '#/components/headers/Link' content: application/json: schema: type: array items: $ref: '#/components/schemas/Bundle' tags: - bundles {% if version >= (1, 2) %} post: description: Create a bundle. operationId: bundles_create # security: # - basicAuth: [] # - apiKeyAuth: [] requestBody: $ref: '#/components/requestBodies/Bundle' responses: '201': description: '' content: application/json: schema: $ref: '#/components/schemas/Bundle' '400': description: Invalid Request content: application/json: schema: $ref: '#/components/schemas/ErrorBundleCreateUpdate' '403': description: Forbidden content: application/json: schema: $ref: '#/components/schemas/Error' tags: - bundles {% endif %} /api/{{ version_url }}bundles/{id}/: parameters: - in: path name: id required: true description: A unique integer value identifying this bundle. schema: title: ID type: integer get: description: Show a bundle. operationId: bundles_read responses: '200': description: '' content: application/json: schema: $ref: '#/components/schemas/Bundle' '404': description: Not found content: application/json: schema: $ref: '#/components/schemas/Error' tags: - bundles {% if version >= (1, 2) %} patch: description: Update a bundle (partial). operationId: bundles_partial_update # security: # - basicAuth: [] # - apiKeyAuth: [] requestBody: $ref: '#/components/requestBodies/Bundle' responses: '200': description: '' content: application/json: schema: $ref: '#/components/schemas/Bundle' '400': description: Bad request content: application/json: schema: $ref: '#/components/schemas/ErrorBundleCreateUpdate' '403': description: Forbidden content: application/json: schema: $ref: '#/components/schemas/Error' '404': description: Not found content: application/json: schema: $ref: '#/components/schemas/Error' tags: - bundles put: description: Update a bundle. operationId: bundles_update # security: # - basicAuth: [] # - apiKeyAuth: [] requestBody: $ref: '#/components/requestBodies/Bundle' responses: '200': description: '' content: application/json: schema: $ref: '#/components/schemas/Bundle' '400': description: Bad request content: application/json: schema: $ref: '#/components/schemas/ErrorBundleCreateUpdate' '403': description: Forbidden content: application/json: schema: $ref: '#/components/schemas/Error' '404': description: Not found content: application/json: schema: $ref: '#/components/schemas/Error' tags: - bundles {% endif %} /api/{{ version_url }}covers/: get: description: List cover letters. operationId: covers_list parameters: - $ref: '#/components/parameters/Page' - $ref: '#/components/parameters/PageSize' - $ref: '#/components/parameters/Order' - $ref: '#/components/parameters/Search' - $ref: '#/components/parameters/BeforeFilter' - $ref: '#/components/parameters/SinceFilter' - in: query name: project description: > An ID or linkname of a project to filter cover letters by. schema: title: '' type: string - in: query name: series description: An ID of a series to filter cover letters by. schema: title: '' type: string - in: query name: submitter description: > An ID or email address of a person to filter cover letters by. schema: title: '' type: string {% if version >= (1, 2) %} - in: query name: msgid description: > The cover message-id as a case-sensitive string, without leading or trailing angle brackets, to filter by. schema: title: '' type: string {% endif %} responses: '200': description: '' headers: Link: $ref: '#/components/headers/Link' content: application/json: schema: type: array items: $ref: '#/components/schemas/CoverLetterList' tags: - covers /api/{{ version_url }}covers/{id}/: parameters: - in: path name: id description: A unique integer value identifying this cover letter. required: true schema: title: ID type: integer get: description: Show a cover letter. operationId: covers_read responses: '200': description: '' content: application/json: schema: $ref: '#/components/schemas/CoverLetterDetail' '404': description: Not found content: application/json: schema: $ref: '#/components/schemas/Error' tags: - covers /api/{{ version_url }}covers/{id}/comments/: parameters: - in: path name: id description: > A unique integer value identifying the parent cover letter. required: true schema: title: ID type: integer get: description: List comments operationId: cover_comments_list parameters: - $ref: '#/components/parameters/Page' - $ref: '#/components/parameters/PageSize' - $ref: '#/components/parameters/Order' - $ref: '#/components/parameters/Search' responses: '200': description: '' headers: Link: $ref: '#/components/headers/Link' content: application/json: schema: type: array items: $ref: '#/components/schemas/Comment' '404': description: Not found content: application/json: schema: $ref: '#/components/schemas/Error' tags: - comments /api/{{ version_url }}events/: get: description: List events. operationId: events_list parameters: - $ref: '#/components/parameters/Page' - $ref: '#/components/parameters/PageSize' {% if version >= (1, 2) %} - $ref: '#/components/parameters/Order' {% endif %} - $ref: '#/components/parameters/Search' - $ref: '#/components/parameters/BeforeFilter' - $ref: '#/components/parameters/SinceFilter' - in: query name: project description: An ID or linkname of a project to filter events by. schema: title: '' type: string - in: query name: category description: An event category to filter events by. schema: title: '' type: string enum: - cover-created - patch-created - patch-completed - patch-state-changed {% if version >= (1, 2) %} - patch-relation-changed {% endif %} - patch-delegated - check-created - series-created - series-completed - in: query name: series description: An ID of a series to filter events by. schema: title: '' type: integer - in: query name: patch description: An ID of a patch to filter events by. schema: title: '' type: integer - in: query name: cover description: An ID of a cover letter to filter events by. schema: title: '' type: integer responses: '200': description: '' headers: Link: $ref: '#/components/headers/Link' content: application/json: schema: type: array items: anyOf: - $ref: '#/components/schemas/EventCoverCreated' - $ref: '#/components/schemas/EventPatchCreated' - $ref: '#/components/schemas/EventPatchCompleted' - $ref: '#/components/schemas/EventPatchStateChanged' {% if version >= (1, 2) %} - $ref: '#/components/schemas/EventPatchRelationChanged' {% endif %} - $ref: '#/components/schemas/EventPatchDelegated' - $ref: '#/components/schemas/EventCheckCreated' - $ref: '#/components/schemas/EventSeriesCreated' - $ref: '#/components/schemas/EventSeriesCompleted' discriminator: propertyName: category mapping: cover-created: '#/components/schemas/EventCoverCreated' patch-created: '#/components/schemas/EventPatchCreated' patch-completed: > '#/components/schemas/EventPatchCompleted' patch-state-changed: > '#/components/schemas/EventPatchStateChanged' {% if version >= (1, 2) %} patch-relation-changed: > '#/components/schemas/EventPatchRelationChanged' {% endif %} patch-delegated: > '#/components/schemas/EventPatchDelegated' check-created: '#/components/schemas/EventCheckCreated' series-created: '#/components/schemas/EventSeriesCreated' series-completed: > '#/components/schemas/EventSeriesCompleted' tags: - events /api/{{ version_url }}patches/: get: description: List patches. operationId: patches_list parameters: - $ref: '#/components/parameters/Page' - $ref: '#/components/parameters/PageSize' - $ref: '#/components/parameters/Order' - $ref: '#/components/parameters/Search' - $ref: '#/components/parameters/BeforeFilter' - $ref: '#/components/parameters/SinceFilter' - in: query name: project description: An ID or linkname of a project to filter patches by. schema: title: '' type: string - in: query name: series description: An ID of a series to filter patches by. schema: title: '' type: integer - in: query name: submitter description: > An ID or email address of a person to filter patches by. schema: title: '' type: string - in: query name: delegate description: An ID or username of a user to filter patches by. schema: title: '' type: string - in: query name: state description: A slug representation of a state to filter patches by. schema: title: '' type: string - in: query name: archived description: > Show only archived (`true`) or non-archived (`false`) patches. schema: title: '' type: string enum: - 'true' - 'false' {% if version >= (1, 2) %} - in: query name: hash description: > The patch hash as a case-insensitive hexadecimal string, to filter by. schema: title: '' type: string - in: query name: msgid description: > The patch message-id as a case-sensitive string, without leading or trailing angle brackets, to filter by. schema: title: '' type: string {% endif %} responses: '200': description: '' headers: Link: $ref: '#/components/headers/Link' content: application/json: schema: type: array items: $ref: '#/components/schemas/PatchList' tags: - patches /api/{{ version_url }}patches/{id}/: parameters: - in: path name: id description: A unique integer value identifying this patch. required: true schema: title: ID type: integer get: description: Show a patch. operationId: patches_read responses: '200': description: '' content: application/json: schema: $ref: '#/components/schemas/PatchDetail' '404': description: Not found content: application/json: schema: $ref: '#/components/schemas/Error' tags: - patches patch: description: Update a patch (partial). operationId: patches_partial_update # security: # - basicAuth: [] # - apiKeyAuth: [] requestBody: $ref: '#/components/requestBodies/Patch' responses: '200': description: '' content: application/json: schema: $ref: '#/components/schemas/PatchDetail' '400': description: Invalid Request content: application/json: schema: $ref: '#/components/schemas/ErrorPatchUpdate' '403': description: Forbidden content: application/json: schema: $ref: '#/components/schemas/Error' '404': description: Not found content: application/json: schema: $ref: '#/components/schemas/Error' {% if version >= (1, 2) %} '409': description: Conflict content: application/json: schema: $ref: '#/components/schemas/Error' {% endif %} tags: - patches put: description: Update a patch. operationId: patches_update # security: # - basicAuth: [] # - apiKeyAuth: [] requestBody: $ref: '#/components/requestBodies/Patch' responses: '200': description: '' content: application/json: schema: $ref: '#/components/schemas/PatchDetail' '400': description: Invalid Request content: application/json: schema: $ref: '#/components/schemas/ErrorPatchUpdate' '403': description: Forbidden content: application/json: schema: $ref: '#/components/schemas/Error' '404': description: Not found content: application/json: schema: $ref: '#/components/schemas/Error' {% if version >= (1, 2) %} '409': description: Conflict content: application/json: schema: $ref: '#/components/schemas/Error' {% endif %} tags: - patches /api/{{ version_url }}patches/{id}/comments/: parameters: - in: path name: id description: A unique integer value identifying the parent patch. required: true schema: title: ID type: integer get: description: List comments operationId: patch_comments_list parameters: - $ref: '#/components/parameters/Page' - $ref: '#/components/parameters/PageSize' - $ref: '#/components/parameters/Order' - $ref: '#/components/parameters/Search' responses: '200': description: '' headers: Link: $ref: '#/components/headers/Link' content: application/json: schema: type: array items: $ref: '#/components/schemas/Comment' '404': description: Not found content: application/json: schema: $ref: '#/components/schemas/Error' tags: - comments /api/{{ version_url }}patches/{patch_id}/checks/: parameters: - in: path name: patch_id description: A unique integer value identifying the parent patch. required: true schema: title: Patch ID type: integer get: description: List checks. operationId: checks_list parameters: - $ref: '#/components/parameters/Page' - $ref: '#/components/parameters/PageSize' - $ref: '#/components/parameters/Order' - $ref: '#/components/parameters/Search' - $ref: '#/components/parameters/BeforeFilter' - $ref: '#/components/parameters/SinceFilter' - in: query name: user description: An ID or username of a user to filter checks by. schema: title: '' type: string - in: query name: state description: A check state to filter checks by. schema: title: '' type: string enum: - pending - success - warning - fail - in: query name: context description: A check context to filter checks by. schema: title: '' type: string responses: '200': description: '' headers: Link: $ref: '#/components/headers/Link' content: application/json: schema: type: array items: $ref: '#/components/schemas/Check' '404': description: Not found content: application/json: schema: $ref: '#/components/schemas/Error' tags: - checks post: description: Create a check. operationId: checks_create # security: # - basicAuth: [] # - apiKeyAuth: [] requestBody: $ref: '#/components/requestBodies/Check' responses: '201': description: '' content: application/json: schema: $ref: '#/components/schemas/Check' '400': description: Invalid Request content: application/json: schema: $ref: '#/components/schemas/ErrorCheckCreate' '403': description: Forbidden content: application/json: schema: $ref: '#/components/schemas/Error' '404': description: Not found content: application/json: schema: $ref: '#/components/schemas/Error' tags: - checks /api/{{ version_url }}patches/{patch_id}/checks/{check_id}/: parameters: - in: path name: patch_id description: A unique integer value identifying the parent patch. required: true schema: title: Patch ID type: integer - in: path name: check_id description: A unique integer value identifying this check. required: true schema: title: Check ID type: integer get: description: Show a check. operationId: checks_read responses: '200': description: '' content: application/json: schema: $ref: '#/components/schemas/Check' '404': description: Not found content: application/json: schema: $ref: '#/components/schemas/Error' tags: - checks /api/{{ version_url }}people/: get: description: List people. operationId: people_list # security: # - basicAuth: [] # - apiKeyAuth: [] parameters: - $ref: '#/components/parameters/Page' - $ref: '#/components/parameters/PageSize' - $ref: '#/components/parameters/Order' - $ref: '#/components/parameters/Search' responses: '200': description: '' headers: Link: $ref: '#/components/headers/Link' content: application/json: schema: type: array items: $ref: '#/components/schemas/Person' '403': description: Forbidden content: application/json: schema: $ref: '#/components/schemas/Error' tags: - people /api/{{ version_url }}people/{id}/: parameters: - in: path name: id description: A unique integer value identifying this person. required: true schema: title: ID type: integer get: description: Show a person. operationId: people_read # security: # - basicAuth: [] # - apiKeyAuth: [] responses: '200': description: '' content: application/json: schema: $ref: '#/components/schemas/Person' '403': description: Forbidden content: application/json: schema: $ref: '#/components/schemas/Error' '404': description: Not found content: application/json: schema: $ref: '#/components/schemas/Error' tags: - people /api/{{ version_url }}projects/: get: description: List projects. operationId: projects_list parameters: - $ref: '#/components/parameters/Page' - $ref: '#/components/parameters/PageSize' - $ref: '#/components/parameters/Order' - $ref: '#/components/parameters/Search' responses: '200': description: '' headers: Link: $ref: '#/components/headers/Link' content: application/json: schema: type: array items: $ref: '#/components/schemas/Project' tags: - projects /api/{{ version_url }}projects/{id}/: parameters: - in: path name: id description: A unique integer value identifying this project. required: true schema: title: ID # TODO: Add regex? type: string get: description: Show a project. operationId: projects_read responses: '200': description: '' content: application/json: schema: $ref: '#/components/schemas/Project' '404': description: Not found content: application/json: schema: $ref: '#/components/schemas/Error' tags: - projects patch: description: Update a project (partial). operationId: projects_partial_update # security: # - basicAuth: [] # - apiKeyAuth: [] requestBody: $ref: '#/components/requestBodies/Project' responses: '200': description: '' content: application/json: schema: $ref: '#/components/schemas/Project' '400': description: Bad request content: application/json: schema: $ref: '#/components/schemas/ErrorProjectUpdate' '403': description: Forbidden content: application/json: schema: $ref: '#/components/schemas/Error' '404': description: Not found content: application/json: schema: $ref: '#/components/schemas/Error' tags: - projects put: description: Update a project. operationId: projects_update # security: # - basicAuth: [] # - apiKeyAuth: [] requestBody: $ref: '#/components/requestBodies/Project' responses: '200': description: '' content: application/json: schema: $ref: '#/components/schemas/Project' '400': description: Bad request content: application/json: schema: $ref: '#/components/schemas/ErrorProjectUpdate' '403': description: Forbidden content: application/json: schema: $ref: '#/components/schemas/Error' '404': description: Not found content: application/json: schema: $ref: '#/components/schemas/Error' tags: - projects /api/{{ version_url }}series/: get: description: List series. operationId: series_list parameters: - $ref: '#/components/parameters/Page' - $ref: '#/components/parameters/PageSize' - $ref: '#/components/parameters/Order' - $ref: '#/components/parameters/Search' - $ref: '#/components/parameters/BeforeFilter' - $ref: '#/components/parameters/SinceFilter' - in: query name: submitter description: An ID or email address of a person to filter series by. schema: title: '' type: string - in: query name: project description: An ID or linkname of a project to filter series by. schema: title: '' type: string responses: '200': description: '' headers: Link: $ref: '#/components/headers/Link' content: application/json: schema: type: array items: $ref: '#/components/schemas/Series' tags: - series /api/{{ version_url }}series/{id}/: parameters: - in: path name: id description: A unique integer value identifying this series. required: true schema: title: ID type: integer get: description: Show a series. operationId: series_read responses: '200': description: '' content: application/json: schema: $ref: '#/components/schemas/Series' '404': description: Not found content: application/json: schema: $ref: '#/components/schemas/Error' tags: - series /api/{{ version_url }}users/: get: description: List users. operationId: users_list # security: # - basicAuth: [] # - apiKeyAuth: [] parameters: - $ref: '#/components/parameters/Page' - $ref: '#/components/parameters/PageSize' - $ref: '#/components/parameters/Order' - $ref: '#/components/parameters/Search' responses: '200': description: '' headers: Link: $ref: '#/components/headers/Link' content: application/json: schema: type: array items: $ref: '#/components/schemas/User' '403': description: Forbidden content: application/json: schema: $ref: '#/components/schemas/Error' tags: - users /api/{{ version_url }}users/{id}/: parameters: - in: path name: id description: A unique integer value identifying this user. required: true schema: title: ID type: integer get: description: Show a user. operationId: users_read # security: # - basicAuth: [] # - apiKeyAuth: [] responses: '200': description: '' content: application/json: schema: {% if version >= (1, 2) %} $ref: '#/components/schemas/UserDetail' {% else %} $ref: '#/components/schemas/User' {% endif %} '403': description: Forbidden content: application/json: schema: $ref: '#/components/schemas/Error' '404': description: Not found content: application/json: schema: $ref: '#/components/schemas/Error' tags: - users patch: description: Update a user (partial). operationId: users_partial_update # security: # - basicAuth: [] # - apiKeyAuth: [] requestBody: $ref: '#/components/requestBodies/User' responses: '200': description: '' content: application/json: schema: {% if version >= (1, 2) %} $ref: '#/components/schemas/UserDetail' {% else %} $ref: '#/components/schemas/User' {% endif %} '400': description: Bad request content: application/json: schema: $ref: '#/components/schemas/ErrorUserUpdate' '403': description: Forbidden content: application/json: schema: $ref: '#/components/schemas/Error' '404': description: Not found content: application/json: schema: $ref: '#/components/schemas/Error' tags: - users put: description: Update a user. operationId: users_update # security: # - basicAuth: [] # - apiKeyAuth: [] requestBody: $ref: '#/components/requestBodies/User' responses: '200': description: '' content: application/json: schema: {% if version >= (1, 2) %} $ref: '#/components/schemas/UserDetail' {% else %} $ref: '#/components/schemas/User' {% endif %} '400': description: Bad request content: application/json: schema: $ref: '#/components/schemas/ErrorUserUpdate' '403': description: Forbidden content: application/json: schema: $ref: '#/components/schemas/Error' '404': description: Not found content: application/json: schema: $ref: '#/components/schemas/Error' tags: - users components: securitySchemes: basicAuth: type: http scheme: basic apiKeyAuth: type: http scheme: bearer parameters: Page: in: query name: page description: A page number within the paginated result set. schema: title: Page type: integer PageSize: in: query name: per_page description: Number of results to return per page. schema: title: Page size type: integer Order: in: query name: order description: Which field to use when ordering the results. schema: title: Ordering type: string Search: in: query name: q description: A search term. schema: title: Search type: string BeforeFilter: in: query name: before description: Latest date-time to retrieve results for. schema: title: '' type: string SinceFilter: in: query name: since description: Earliest date-time to retrieve results for. schema: title: '' type: string headers: Link: description: > Links to related resources, in the format defined by [RFC 5988](https://tools.ietf.org/html/rfc5988#section-5). This will include a link with relation type `next` to the next page, if there is a next page. schema: type: string requestBodies: {% if version >= (1, 2) %} Bundle: required: true content: application/json: schema: $ref: '#/components/schemas/BundleCreateUpdate' multipart/form-data: schema: $ref: '#/components/schemas/BundleCreateUpdate' application/x-www-form-urlencoded: schema: $ref: '#/components/schemas/BundleCreateUpdate' {% endif %} Check: required: true content: application/json: schema: $ref: '#/components/schemas/CheckCreate' multipart/form-data: schema: $ref: '#/components/schemas/CheckCreate' application/x-www-form-urlencoded: schema: $ref: '#/components/schemas/CheckCreate' Patch: required: true content: application/json: schema: $ref: '#/components/schemas/PatchUpdate' multipart/form-data: schema: $ref: '#/components/schemas/PatchUpdate' application/x-www-form-urlencoded: schema: $ref: '#/components/schemas/PatchUpdate' Project: required: true content: application/json: schema: $ref: '#/components/schemas/Project' multipart/form-data: schema: $ref: '#/components/schemas/Project' application/x-www-form-urlencoded: schema: $ref: '#/components/schemas/Project' User: required: true content: application/json: schema: {% if version >= (1, 2) %} $ref: '#/components/schemas/UserDetail' {% else %} $ref: '#/components/schemas/User' {% endif %} multipart/form-data: schema: {% if version >= (1, 2) %} $ref: '#/components/schemas/UserDetail' {% else %} $ref: '#/components/schemas/User' {% endif %} application/x-www-form-urlencoded: schema: {% if version >= (1, 2) %} $ref: '#/components/schemas/UserDetail' {% else %} $ref: '#/components/schemas/User' {% endif %} schemas: Index: type: object properties: bundles: title: Bundles URL type: string format: uri readOnly: true covers: title: Covers URL type: string format: uri readOnly: true events: title: Events URL type: string format: uri readOnly: true patches: title: Patches URL type: string format: uri readOnly: true people: title: People URL type: string format: uri readOnly: true projects: title: Projects URL type: string format: uri readOnly: true users: title: Users URL type: string format: uri readOnly: true series: title: Series URL type: string format: uri readOnly: true Bundle: required: - name type: object properties: id: title: ID type: integer readOnly: true url: title: URL type: string format: uri readOnly: true {% if version >= (1, 1) %} web_url: title: Web URL type: string format: uri readOnly: true {% endif %} project: $ref: '#/components/schemas/ProjectEmbedded' name: title: Name type: string minLength: 1 maxLength: 50 owner: type: object title: Owner readOnly: true nullable: false allOf: - $ref: '#/components/schemas/UserEmbedded' patches: title: Patches type: array items: $ref: '#/components/schemas/PatchEmbedded' {% if version < (1, 2) %} readOnly: true {% endif %} uniqueItems: true public: title: Public type: boolean mbox: title: Mbox type: string format: uri readOnly: true {% if version >= (1, 2) %} BundleCreateUpdate: type: object required: - name properties: name: title: Name type: string minLength: 1 maxLength: 50 patches: title: Patches type: array items: type: integer uniqueItems: true public: title: Public type: boolean {% endif %} Check: type: object properties: id: title: ID type: integer readOnly: true url: title: Url type: string format: uri readOnly: true user: $ref: '#/components/schemas/UserEmbedded' date: title: Date type: string format: iso8601 readOnly: true state: title: State description: The state of the check. type: string enum: - pending - success - warning - fail target_url: title: Target URL description: > The target URL to associate with this check. This should be specific to the patch. type: string format: uri maxLength: 200 nullable: true context: title: Context description: > A label to discern check from checks of other testing systems. type: string pattern: ^[-a-zA-Z0-9_]+$ minLength: 1 maxLength: 255 description: title: Description description: A brief description of the check. type: string nullable: true CheckCreate: type: object required: - state properties: state: title: State description: The state of the check. type: string enum: - pending - success - warning - fail target_url: title: Target URL description: The target URL to associate with this check. This should be specific to the patch. type: string format: uri maxLength: 200 nullable: true context: title: Context description: > A label to discern check from checks of other testing systems. type: string pattern: ^[-a-zA-Z0-9_]+$ minLength: 1 maxLength: 255 description: title: Description description: A brief description of the check. type: string nullable: true Comment: type: object properties: id: title: ID type: integer readOnly: true {% if version >= (1, 1) %} web_url: title: Web URL type: string format: uri readOnly: true {% endif %} msgid: title: Message ID type: string readOnly: true minLength: 1 maxLength: 255 {% if version >= (1, 2) %} list_archive_url: title: List archive URL type: string readOnly: true nullable: true {% endif %} date: title: Date type: string format: iso8601 readOnly: true subject: title: Subject type: string readOnly: true submitter: type: object title: Submitter allOf: - $ref: '#/components/schemas/PersonEmbedded' content: title: Content type: string readOnly: true minLength: 1 headers: title: Headers anyOf: - type: object additionalProperties: type: array items: type: string - type: object additionalProperties: type: string readOnly: true CoverLetterList: type: object properties: id: title: ID type: integer readOnly: true url: title: URL type: string format: uri readOnly: true {% if version >= (1, 1) %} web_url: title: Web URL type: string format: uri readOnly: true {% endif %} project: $ref: '#/components/schemas/ProjectEmbedded' msgid: title: Message ID type: string readOnly: true minLength: 1 maxLength: 255 {% if version >= (1, 2) %} list_archive_url: title: List archive URL type: string readOnly: true nullable: true {% endif %} date: title: Date type: string format: iso8601 readOnly: true name: title: Name type: string readOnly: true minLength: 1 maxLength: 255 submitter: type: object title: Submitter readOnly: true allOf: - $ref: '#/components/schemas/PersonEmbedded' {% if version >= (1, 1) %} mbox: title: Mbox type: string format: uri readOnly: true {% endif %} series: type: array items: $ref: '#/components/schemas/SeriesEmbedded' readOnly: true {% if version >= (1, 1) %} comments: title: Comments type: string format: uri readOnly: true {% endif %} CoverLetterDetail: allOf: - $ref: '#/components/schemas/CoverLetterList' - properties: headers: title: Headers anyOf: - type: object additionalProperties: type: array items: type: string - type: object additionalProperties: type: string readOnly: true content: title: Content type: string readOnly: true minLength: 1 EventBase: type: object properties: id: title: ID type: integer readOnly: true category: title: Category description: The category of the event. type: string readOnly: true project: $ref: '#/components/schemas/ProjectEmbedded' date: title: Date description: The time this event was created. type: string format: iso8601 readOnly: true {% if version >= (1, 2) %} actor: type: object title: Actor description: The user that caused/created this event. readOnly: true nullable: true allOf: - $ref: '#/components/schemas/UserEmbedded' {% endif %} payload: type: object EventCoverCreated: allOf: - $ref: '#/components/schemas/EventBase' - type: object properties: category: enum: - cover-created payload: properties: cover: $ref: '#/components/schemas/CoverLetterEmbedded' EventPatchCreated: allOf: - $ref: '#/components/schemas/EventBase' - type: object properties: category: enum: - patch-created payload: properties: patch: $ref: '#/components/schemas/PatchEmbedded' EventPatchCompleted: allOf: - $ref: '#/components/schemas/EventBase' - type: object properties: category: enum: - patch-completed payload: properties: patch: $ref: '#/components/schemas/PatchEmbedded' series: $ref: '#/components/schemas/SeriesEmbedded' EventPatchStateChanged: allOf: - $ref: '#/components/schemas/EventBase' - type: object properties: category: enum: - patch-state-changed payload: properties: patch: $ref: '#/components/schemas/PatchEmbedded' previous_state: title: Previous state type: string current_state: title: Current state type: string {% if version >= (1, 1) %} EventPatchRelationChanged: allOf: - $ref: '#/components/schemas/EventBase' - type: object properties: category: enum: - patch-relation-changed payload: properties: patch: $ref: '#/components/schemas/PatchEmbedded' previous_relation: title: Previous relation type: string current_relation: title: Current relation type: string {% endif %} EventPatchDelegated: allOf: - $ref: '#/components/schemas/EventBase' - type: object properties: category: enum: - patch-delegated payload: properties: patch: $ref: '#/components/schemas/PatchEmbedded' previous_delegate: $ref: '#/components/schemas/UserEmbedded' current_delegate: $ref: '#/components/schemas/UserEmbedded' EventCheckCreated: allOf: - $ref: '#/components/schemas/EventBase' - type: object properties: category: enum: - check-created payload: properties: patch: $ref: '#/components/schemas/PatchEmbedded' check: $ref: '#/components/schemas/CheckEmbedded' EventSeriesCreated: allOf: - $ref: '#/components/schemas/EventBase' - type: object properties: category: enum: - series-created payload: properties: series: $ref: '#/components/schemas/SeriesEmbedded' EventSeriesCompleted: allOf: - $ref: '#/components/schemas/EventBase' - type: object properties: category: enum: - series-completed payload: properties: series: $ref: '#/components/schemas/SeriesEmbedded' PatchList: required: - state - delegate type: object properties: id: title: ID type: integer readOnly: true url: title: URL type: string format: uri readOnly: true {% if version >= (1, 1) %} web_url: title: Web URL type: string format: uri readOnly: true {% endif %} project: $ref: '#/components/schemas/ProjectEmbedded' msgid: title: Message ID type: string readOnly: true minLength: 1 maxLength: 255 {% if version >= (1, 2) %} list_archive_url: title: List archive URL type: string readOnly: true nullable: true {% endif %} date: title: Date type: string format: iso8601 readOnly: true name: title: Name type: string readOnly: true minLength: 1 maxLength: 255 commit_ref: title: Commit ref type: string maxLength: 255 nullable: true pull_url: title: Pull URL type: string format: uri maxLength: 255 nullable: true state: title: State type: string archived: title: Archived type: boolean hash: title: Hash type: string readOnly: true minLength: 1 submitter: type: object title: Submitter readOnly: true allOf: - $ref: '#/components/schemas/PersonEmbedded' delegate: type: object title: Delegate nullable: true readOnly: true allOf: - $ref: '#/components/schemas/UserEmbedded' mbox: title: Mbox type: string format: uri readOnly: true series: type: array items: $ref: '#/components/schemas/SeriesEmbedded' readOnly: true {% if version >= (1, 1) %} comments: title: Comments type: string format: uri readOnly: true {% endif %} check: title: Check type: string readOnly: true enum: - pending - success - warning - fail checks: title: Checks type: string format: uri readOnly: true tags: title: Tags type: object additionalProperties: type: string readOnly: true {% if version >= (1, 2) %} related: title: Relations type: array items: type: string {% endif %} PatchDetail: allOf: - $ref: '#/components/schemas/PatchList' - properties: headers: title: Headers anyOf: - type: object additionalProperties: type: array items: type: string - type: object additionalProperties: type: string readOnly: true content: title: Content type: string readOnly: true minLength: 1 diff: title: Diff type: string readOnly: true minLength: 1 prefixes: title: Prefixes type: array items: type: string readOnly: true PatchUpdate: type: object properties: commit_ref: title: Commit ref type: string maxLength: 255 nullable: true pull_url: title: Pull URL type: string format: uri maxLength: 255 nullable: true state: title: State type: string archived: title: Archived type: boolean delegate: title: Delegate type: integer nullable: true {% if version >= (1, 2) %} related: title: Relations type: array items: type: string {% endif %} Person: type: object properties: id: title: ID type: integer readOnly: true url: title: URL type: string format: uri readOnly: true name: title: Name type: string readOnly: true minLength: 1 maxLength: 255 email: title: Email type: string format: email readOnly: true minLength: 1 maxLength: 255 user: type: object title: User nullable: true readOnly: true allOf: - $ref: '#/components/schemas/UserEmbedded' Project: type: object properties: id: title: ID type: integer readOnly: true url: title: URL type: string format: uri readOnly: true name: title: Name type: string readOnly: true minLength: 1 maxLength: 255 link_name: title: Link name type: string readOnly: true minLength: 1 maxLength: 255 list_id: title: List ID type: string readOnly: true minLength: 1 maxLength: 255 list_email: title: List email type: string format: email readOnly: true minLength: 1 maxLength: 200 web_url: title: Web URL type: string format: uri maxLength: 2000 scm_url: title: SCM URL type: string format: uri maxLength: 2000 webscm_url: title: Web SCM URL type: string format: uri maxLength: 2000 maintainers: type: array items: $ref: '#/components/schemas/UserEmbedded' readOnly: true uniqueItems: true {% if version >= (1, 1) %} subject_match: title: Subject match description: > Regex to match the subject against if only part of emails sent to the list belongs to this project. Will be used with IGNORECASE and MULTILINE flags. If rules for more projects match the first one returned from DB is chosen; empty field serves as a default for every email which has no other match. type: string readOnly: true maxLength: 64 {% endif %} {% if version >= (1, 2) %} list_archive_url: title: List archive URL type: string format: uri maxLength: 2000 nullable: true list_archive_url_format: title: List archive URL format type: string format: uri maxLength: 2000 nullable: true description: > URL format for the list archive's Message-ID redirector. {} will be replaced by the Message-ID. commit_url_format: title: Web SCM URL format for a particular commit type: string {% endif %} Series: type: object properties: id: title: ID type: integer readOnly: true url: title: URL type: string format: uri readOnly: true {% if version >= (1, 1) %} web_url: title: Web URL type: string format: uri readOnly: true {% endif %} project: $ref: '#/components/schemas/ProjectEmbedded' name: title: Name description: > An optional name to associate with the series, e.g. "John's PCI series". type: string maxLength: 255 nullable: true date: title: Date type: string format: iso8601 readOnly: true submitter: type: object title: Submitter readOnly: true allOf: - $ref: '#/components/schemas/PersonEmbedded' version: title: Version description: > Version of series as indicated by the subject prefix(es). type: integer total: title: Total description: > Number of patches in series as indicated by the subject prefix(es). type: integer readOnly: true received_total: title: Received total type: integer readOnly: true received_all: title: Received all type: boolean readOnly: true mbox: title: Mbox type: string format: uri readOnly: true cover_letter: $ref: '#/components/schemas/CoverLetterEmbedded' patches: title: Patches type: array items: $ref: '#/components/schemas/PatchEmbedded' readOnly: true uniqueItems: true User: type: object properties: id: title: ID type: integer readOnly: true url: title: URL type: string format: uri readOnly: true username: title: Username type: string readOnly: true minLength: 1 maxLength: 150 first_name: title: First name type: string maxLength: 30 last_name: title: Last name type: string maxLength: 150 email: title: Email address type: string format: email readOnly: true minLength: 1 {% if version >= (1, 2) %} UserDetail: type: object allOf: - $ref: '#/components/schemas/User' - type: object properties: settings: type: object properties: send_email: title: Send email description: > Whether Patchwork should send email on your behalf. Only present and configurable for your account. type: boolean items_per_page: title: Items per page description: > Number of items to display per page (web UI). Only present and configurable for your account. type: integer show_ids: title: Show IDs description: Show click-to-copy IDs in the list view (web UI). Only present and configurable for your account. type: boolean {% endif %} CheckEmbedded: type: object properties: id: title: ID type: integer readOnly: true url: title: Url type: string format: uri readOnly: true date: title: Date type: string format: iso8601 readOnly: true state: title: State description: The state of the check. type: string readOnly: true enum: - pending - success - warning - fail target_url: title: Target url description: > The target URL to associate with this check. This should be specific to the patch. type: string format: uri maxLength: 200 nullable: true readOnly: true context: title: Context description: > A label to discern check from checks of other testing systems. type: string pattern: ^[-a-zA-Z0-9_]+$ maxLength: 255 minLength: 1 readOnly: true CoverLetterEmbedded: type: object properties: id: title: ID type: integer readOnly: true url: title: URL type: string format: uri readOnly: true {% if version >= (1, 1) %} web_url: title: Web URL type: string format: uri readOnly: true {% endif %} msgid: title: Message ID type: string readOnly: true minLength: 1 {% if version >= (1, 2) %} list_archive_url: title: List archive URL type: string readOnly: true nullable: true {% endif %} date: title: Date type: string format: iso8601 readOnly: true name: title: Name type: string readOnly: true minLength: 1 mbox: title: Mbox type: string format: uri readOnly: true PatchEmbedded: type: object properties: id: title: ID type: integer readOnly: true url: title: URL type: string format: uri readOnly: true {% if version >= (1, 1) %} web_url: title: Web URL type: string format: uri readOnly: true {% endif %} msgid: title: Message ID type: string readOnly: true minLength: 1 {% if version >= (1, 2) %} list_archive_url: title: List archive URL type: string readOnly: true nullable: true {% endif %} date: title: Date type: string format: iso8601 readOnly: true name: title: Name type: string readOnly: true minLength: 1 mbox: title: Mbox type: string format: uri readOnly: true PersonEmbedded: type: object properties: id: title: ID type: integer readOnly: true url: title: URL type: string format: uri readOnly: true name: title: Name type: string readOnly: true minLength: 1 email: title: Email type: string format: email readOnly: true minLength: 1 ProjectEmbedded: type: object properties: id: title: ID type: integer readOnly: true url: title: URL type: string format: uri readOnly: true name: title: Name type: string readOnly: true minLength: 1 link_name: title: Link name type: string readOnly: true maxLength: 255 minLength: 1 list_id: title: List ID type: string readOnly: true maxLength: 255 minLength: 1 list_email: title: List email type: string format: email readOnly: true maxLength: 200 minLength: 1 web_url: title: Web URL type: string format: uri readOnly: true maxLength: 2000 scm_url: title: SCM URL type: string format: uri readOnly: true maxLength: 2000 webscm_url: title: WebSCM URL type: string format: uri readOnly: true maxLength: 2000 {% if version >= (1, 2) %} list_archive_url: title: List archive URL type: string format: uri maxLength: 2000 nullable: true list_archive_url_format: title: List archive URL format type: string format: uri maxLength: 2000 nullable: true description: > URL format for the list archive's Message-ID redirector. {} will be replaced by the Message-ID. commit_url_format: title: Web SCM URL format for a particular commit type: string readOnly: true {% endif %} SeriesEmbedded: type: object properties: id: title: ID type: integer readOnly: true url: title: URL type: string format: uri readOnly: true {% if version >= (1, 1) %} web_url: title: Web URL type: string format: uri readOnly: true {% endif %} name: title: Name description: > An optional name to associate with the series, e.g. "John's PCI series". type: string readOnly: true maxLength: 255 nullable: true date: title: Date type: string format: iso8601 readOnly: true version: title: Version description: > Version of series as indicated by the subject prefix(es). type: integer readOnly: true mbox: title: Mbox type: string format: uri readOnly: true UserEmbedded: type: object nullable: true properties: id: title: ID type: integer readOnly: true url: title: URL type: string format: uri readOnly: true username: title: Username type: string readOnly: true minLength: 1 maxLength: 150 first_name: title: First name type: string maxLength: 30 readOnly: true last_name: title: Last name type: string maxLength: 150 readOnly: true email: title: Email address type: string format: email readOnly: true minLength: 1 Error: type: object properties: detail: title: Detail type: string readOnly: true {% if version >= (1, 2) %} ErrorBundleCreateUpdate: type: object properties: name: title: Name type: array items: type: string readOnly: true patches: title: Patches type: array items: type: string readOnly: true public: title: Public type: array items: type: string {% endif %} ErrorCheckCreate: type: object properties: state: title: State type: array items: type: string readOnly: true target_url: title: Target URL type: array items: type: string readOnly: true context: title: Context type: array items: type: string readOnly: true description: title: Description type: array items: type: string readOnly: true ErrorPatchUpdate: type: object properties: state: title: State type: array items: type: string readOnly: true delegate: title: Delegate type: array items: type: string readOnly: true commit_ref: title: Commit ref type: array items: type: string readOnly: true archived: title: Archived type: array items: type: string readOnly: true ErrorProjectUpdate: type: object properties: web_url: title: Web URL type: string format: uri readOnly: true scm_url: title: SCM URL type: string format: uri readOnly: true webscm_url: title: Web SCM URL type: string format: uri readOnly: true ErrorUserUpdate: type: object properties: first_name: title: First name type: string readOnly: true last_name: title: First name type: string readOnly: true