diff --git a/README.md b/README.md
index 953f6c916e..d700366c81 100644
--- a/README.md
+++ b/README.md
@@ -323,9 +323,9 @@ Supported documentation includes the current version plus the previous five vers
If you are using a version of the documentation that is no longer supported, which means that the version number is not listed in the site dropdown list, you can still access that documentation in the following ways:
-- By entering your version number in the branch selection list for this repo
+- By entering your version number and selecting it from the branch selection list for this repo
- By directly accessing the Github URL for your version. For example, https://github.com/docker/docker.github.io/tree/v1.9 for `v1.9`
-- By running a container of the specific [tag for your documentation version](https://cloud.docker.com/u/docs/repository/docker/docs/docker.github.io/general#read-these-docs-offline){: target="_blank"}
+- By running a container of the specific [tag for your documentation version](https://cloud.docker.com/u/docs/repository/docker/docs/docker.github.io/general#read-these-docs-offline)
in Docker Hub. For example, run the following to access `v1.9`:
```bash
diff --git a/datacenter/ucp/3.0/guides/admin/install/plan-installation.md b/datacenter/ucp/3.0/guides/admin/install/plan-installation.md
index 04ea8b586c..98e56c29df 100644
--- a/datacenter/ucp/3.0/guides/admin/install/plan-installation.md
+++ b/datacenter/ucp/3.0/guides/admin/install/plan-installation.md
@@ -40,6 +40,10 @@ Docker UCP requires each node on the cluster to have a static IP address.
Before installing UCP, ensure your network and nodes are configured to support
this.
+## Avoid IP range conflicts
+
+The `service-cluster-ip-range` Kubernetes API Server flag is currently set to `10.96.0.0/16` and cannot be changed.
+
## Time synchronization
In distributed systems like Docker UCP, time synchronization is critical
diff --git a/docker-for-mac/multi-arch.md b/docker-for-mac/multi-arch.md
index 423996f994..bb248844e3 100644
--- a/docker-for-mac/multi-arch.md
+++ b/docker-for-mac/multi-arch.md
@@ -6,29 +6,51 @@ redirect_from:
title: Leverage multi-CPU architecture support
notoc: true
---
+Docker images can support multiple architectures, which means that a single
+image may contain variants for different architectures, and sometimes for different
+operating systems, such as Windows.
-Docker Desktop for Mac provides `binfmt_misc` multi architecture support, so you can run
-containers for different Linux architectures, such as `arm`, `mips`, `ppc64le`,
-and even `s390x`.
+When running an image with multi-architecture support, `docker` will
+automatically select an image variant which matches your OS and architecture.
+
+Most of the official images on Docker Hub provide a [variety of architectures](https://github.com/docker-library/official-images#architectures-other-than-amd64).
+For example, the `busybox` image supports `amd64`, `arm32v5`, `arm32v6`,
+`arm32v7`, `arm64v8`, `i386`, `ppc64le`, and `s390x`. When running this image
+on an `x86_64` / `amd64` machine, the `x86_64` variant will be pulled and run,
+which can be seen from the output of the `uname -a` command that's run inside
+the container:
+
+```bash
+$ docker run busybox uname -a
+
+Linux 82ef1a0c07a2 4.9.125-linuxkit #1 SMP Fri Sep 7 08:20:28 UTC 2018 x86_64 GNU/Linux
+```
+
+**Docker Desktop for Mac** provides `binfmt_misc` multi-architecture support,
+which means you can run containers for different Linux architectures
+such as `arm`, `mips`, `ppc64le`, and even `s390x`.
This does not require any special configuration in the container itself as it uses
-qemu-static from the Docker for
-Mac VM.
+qemu-static from the **Docker for
+Mac VM**. Because of this, you can run an ARM container, like the `arm32v7` or `ppc64le`
+variants of the busybox image:
-You can run an ARM container, like the
-balena arm builds:
-
-```
-$ docker run balenalib/armv7hf-debian uname -a
-
-Linux 3d3ffca44f6e 4.9.125-linuxkit #1 SMP Fri Sep 7 08:20:28 UTC 2018 armv7l GNU/Linux
-
-$ docker run justincormack/ppc64le-debian uname -a
-
-Linux edd13885f316 4.1.12 #1 SMP Tue Jan 12 10:51:00 UTC 2016 ppc64le GNU/Linux
+### arm32v7 variant
+```bash
+$ docker run arm32v7/busybox uname -a
+Linux 9e3873123d09 4.9.125-linuxkit #1 SMP Fri Sep 7 08:20:28 UTC 2018 armv7l GNU/Linux
```
-Multi architecture support makes it easy to build
-multi architecture Docker images or experiment with ARM images and binaries
-from your Mac.
+### ppc64le variant
+```bash
+$ docker run ppc64le/busybox uname -a
+
+Linux 57a073cc4f10 4.9.125-linuxkit #1 SMP Fri Sep 7 08:20:28 UTC 2018 ppc64le GNU/Linux
+```
+
+Notice that this time, the `uname -a` output shows `armv7l` and
+`ppc64le` respectively.
+
+Multi-architecture support makes it easy to build multi-architecture Docker images or experiment with ARM images and binaries from your Mac.
+
diff --git a/ee/ucp/admin/configure/ucp-configuration-file.md b/ee/ucp/admin/configure/ucp-configuration-file.md
index 2af248e983..78ce30c8a5 100644
--- a/ee/ucp/admin/configure/ucp-configuration-file.md
+++ b/ee/ucp/admin/configure/ucp-configuration-file.md
@@ -112,6 +112,8 @@ Configures audit logging options for UCP components.
Specifies scheduling options and the default orchestrator for new nodes.
+> **Note**: If you run the `kubectl` command, such as `kubectl describe nodes`, to view scheduling rules on Kubernetes nodes, it does not reflect what is configured in UCP Admin settings. UCP uses taints to control container scheduling on nodes and is unrelated to kubectl's `Unschedulable` boolean flag.
+
| Parameter | Required | Description |
|:------------------------------|:---------|:-------------------------------------------------------------------------------------------------------------------------------------------|
| `enable_admin_ucp_scheduling` | no | Set to `true` to allow admins to schedule on containers on manager nodes. The default is `false`. |
@@ -181,7 +183,7 @@ components. Assigning these values overrides the settings in a container's
| `metrics_retention_time` | no | Adjusts the metrics retention time. |
| `metrics_scrape_interval` | no | Sets the interval for how frequently managers gather metrics from nodes in the cluster. |
| `metrics_disk_usage_interval` | no | Sets the interval for how frequently storage metrics are gathered. This operation can be expensive when large volumes are present. |
-| `rethinkdb_cache_size` | no | Sets the size of the cache used by UCP's RethinkDB servers. The default is 512MB, but leaving this field empty or specifying `auto` instructs RethinkDB to determine a cache size automatically. |
+| `rethinkdb_cache_size` | no | Sets the size of the cache used by UCP's RethinkDB servers. The default is 1GB, but leaving this field empty or specifying `auto` instructs RethinkDB to determine a cache size automatically. |
| `cloud_provider` | no | Set the cloud provider for the kubernetes cluster. |
| `pod_cidr` | yes | Sets the subnet pool from which the IP for the Pod should be allocated from the CNI ipam plugin. Default is `192.168.0.0/16`. |
| `calico_mtu` | no | Set the MTU (maximum transmission unit) size for the Calico plugin. |
diff --git a/ee/ucp/admin/configure/use-nfs-volumes.md b/ee/ucp/admin/configure/use-nfs-volumes.md
index b4d9fadb49..821a94c827 100644
--- a/ee/ucp/admin/configure/use-nfs-volumes.md
+++ b/ee/ucp/admin/configure/use-nfs-volumes.md
@@ -8,9 +8,9 @@ Docker UCP supports Network File System (NFS) persistent volumes for
Kubernetes. To enable this feature on a UCP cluster, you need to set up
an NFS storage volume provisioner.
-> Kubernetes storage drivers
+> ### Kubernetes storage drivers
>
-> Currently, NFS is the only Kubernetes storage driver that UCP supports.
+>NFS is one of the Kubernetes storage drivers that UCP supports. See [Kubernetes Volume Drivers](https://success.docker.com/article/compatibility-matrix#kubernetesvolumedrivers) in the Compatibility Matrix for the full list.
{: important}
## Enable NFS volume provisioning
diff --git a/ee/ucp/admin/install/plan-installation.md b/ee/ucp/admin/install/plan-installation.md
index 6a3f3195d8..95cb1db9ec 100644
--- a/ee/ucp/admin/install/plan-installation.md
+++ b/ee/ucp/admin/install/plan-installation.md
@@ -42,6 +42,8 @@ this.
## Avoid IP range conflicts
+The `service-cluster-ip-range` Kubernetes API Server flag is currently set to `10.96.0.0/16` and cannot be changed.
+
Swarm uses a default address pool of `10.0.0.0/16` for its overlay networks. If this conflicts with your current network implementation, please use a custom IP address pool. To specify a custom IP address pool, use the `--default-address-pool` command line option during [Swarm initialization](../../../../engine/swarm/swarm-mode.md).
> **Note**: Currently, the UCP installation process does not support this flag. To deploy with a custom IP pool, Swarm must first be installed using this flag and UCP must be installed on top of it.
diff --git a/ee/ucp/authorization/group-resources.md b/ee/ucp/authorization/group-resources.md
index ff43863a9a..67f3fdbad4 100644
--- a/ee/ucp/authorization/group-resources.md
+++ b/ee/ucp/authorization/group-resources.md
@@ -40,7 +40,14 @@ can be nested inside one another, to create hierarchies.
You can nest collections inside one another. If a user is granted permissions
for one collection, they'll have permissions for its child collections,
-pretty much like a directory structure..
+pretty much like a directory structure. As of UCP `3.1`, the ability to create a nested
+collection of more than 2 layers deep within the root `/Swarm/` collection has been deprecated.
+
+The following image provides two examples of nested collections with the recommended maximum
+of two nesting layers. The first example illustrates an environment-oriented collection, and the second
+example illustrates an application-oriented collection.
+
+{: .with-border}
For a child collection, or for a user who belongs to more than one team, the
system concatenates permissions from multiple roles into an "effective role" for
diff --git a/ee/ucp/images/nested-collection.png b/ee/ucp/images/nested-collection.png
new file mode 100644
index 0000000000..6da2677646
Binary files /dev/null and b/ee/ucp/images/nested-collection.png differ
diff --git a/ee/ucp/kubernetes/configure-aws-storage.md b/ee/ucp/kubernetes/configure-aws-storage.md
index 0a5f4b7d88..179edc536c 100644
--- a/ee/ucp/kubernetes/configure-aws-storage.md
+++ b/ee/ucp/kubernetes/configure-aws-storage.md
@@ -32,8 +32,8 @@ Instances must have the following [AWS Identity and Access Management](https://d
### Infrastructure Configuration
- Apply the roles and policies to Kubernetes masters and workers as indicated in the above chart.
-- EC2 instances must be set to the private DNS hostname of the instance (will typically end in `.internal`)
-- EC2 instances must also be labeled with the key `KubernetesCluster` with a matching value across all nodes.
+- Set the hostname of the EC2 instances to the private DNS hostname of the instance. See [DNS Hostnames](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-dns.html#vpc-dns-hostnames) and [To change the system hostname without a public DNS name](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/set-hostname.html#set-hostname-system) for more details.
+- Label the EC2 instances with the key `KubernetesCluster` and assign the same value across all nodes, for example, `UCPKubenertesCluster`.
### Cluster Configuration
diff --git a/ee/ucp/release-notes.md b/ee/ucp/release-notes.md
index 7e7c15c0e9..1f23ab557f 100644
--- a/ee/ucp/release-notes.md
+++ b/ee/ucp/release-notes.md
@@ -192,7 +192,9 @@ There are several backward-incompatible changes in the Kubernetes API that may a
The following features are deprecated in UCP 3.1.
* Collections
- * User-created nested collections more than 2 layers deep within the root `/Swarm/` collection are deprecated and will be removed in future versions of the product. In the future, we recommend that at most only two levels of collections be created within UCP under the shared Cluster collection designated as `/Swarm/`. For example, if a production collection is created as a collection under the cluster collection `/Swarm/` as `/Swarm/production/` then at most one level of nestedness should be created, as in `/Swarm/production/app/`.
+ * The ability to create a nested collection of more than 2 layers deep within the root `/Swarm/` collection is now deprecated and will not be included in future versions of the product. However, current nested collections with more than 2 layers are still retained.
+
+ * Docker recommends a maximum of two layers when creating collections within UCP under the shared cluster collection designated as `/Swarm/`. For example, if a production collection called `/Swarm/production` is created under the shared cluster collection, `/Swarm/`, then only one level of nesting should be created: `/Swarm/production/app/`. See [Nested Collections](/ee/ucp/authorization/group-resources/#nested-collections) for more details.
* Kubernetes
* **PersistentVolumeLabel** admission controller is deprecated in Kubernetes 1.11. This functionality will be migrated to [Cloud Controller Manager](https://kubernetes.io/docs/tasks/administer-cluster/running-cloud-controller/](https://kubernetes.io/docs/tasks/administer-cluster/running-cloud-controller/)
diff --git a/reference/dtr/2.6/api/dtr-swagger-2.6.json b/reference/dtr/2.6/api/dtr-swagger-2.6.json
new file mode 100644
index 0000000000..0958f472c0
--- /dev/null
+++ b/reference/dtr/2.6/api/dtr-swagger-2.6.json
@@ -0,0 +1,9957 @@
+{
+ "swagger": "2.0",
+ "info": {
+ "title": "Docker Trusted Registry",
+ "version": "2.6.0-tp9"
+ },
+ "paths": {
+ "/api/v0/accounts/language": {
+ "get": {
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "accounts"
+ ],
+ "summary": "Get the chosen language",
+ "operationId": "GetLanguage",
+ "responses": {
+ "200": {
+ "description": "OK",
+ "schema": {
+ "$ref": "#/definitions/responses.Language"
+ }
+ },
+ "401": {
+ "description": "NOT_AUTHENTICATED: The client is not authenticated."
+ },
+ "405": {
+ "description": "NOT_ALLOWED: Method Not Allowed"
+ },
+ "406": {
+ "description": "NOT_ACCEPTABLE: Not Acceptable"
+ },
+ "415": {
+ "description": "UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type"
+ },
+ "default": {
+ "description": "OK",
+ "schema": {
+ "$ref": "#/definitions/responses.Language"
+ }
+ }
+ }
+ }
+ },
+ "/api/v0/accounts/{namespace}": {
+ "delete": {
+ "description": "\n\t*Authorization:* Client must be authenticated as a system admin.\n\t\t",
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "accounts"
+ ],
+ "summary": "Removes a user or organization along with all repositories",
+ "operationId": "DeleteNamespace",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "namespace/owner of repository",
+ "name": "namespace",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "401": {
+ "description": "NOT_AUTHENTICATED: The client is not authenticated."
+ },
+ "403": {
+ "description": "NOT_AUTHORIZED: The client is not authorized."
+ },
+ "404": {
+ "description": "NO_SUCH_ACCOUNT: An account with the given name does not exist."
+ },
+ "405": {
+ "description": "NOT_ALLOWED: Method Not Allowed"
+ },
+ "406": {
+ "description": "NOT_ACCEPTABLE: Not Acceptable"
+ },
+ "415": {
+ "description": "UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type"
+ }
+ }
+ }
+ },
+ "/api/v0/accounts/{namespace}/repositories": {
+ "delete": {
+ "description": "\n\t*Authorization:* Client must be authenticated as a system admin, organization admin or user in question\n\t\t",
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "accounts"
+ ],
+ "summary": "Removes all of a user or organization's repositories",
+ "operationId": "DeleteNamespaceRepositories",
+ "deprecated": true,
+ "parameters": [
+ {
+ "type": "string",
+ "description": "namespace/owner of repository",
+ "name": "namespace",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "401": {
+ "description": "NOT_AUTHENTICATED: The client is not authenticated."
+ },
+ "403": {
+ "description": "NOT_AUTHORIZED: The client is not authorized."
+ },
+ "404": {
+ "description": "NO_SUCH_ACCOUNT: An account with the given name does not exist."
+ },
+ "405": {
+ "description": "NOT_ALLOWED: Method Not Allowed"
+ },
+ "406": {
+ "description": "NOT_ACCEPTABLE: Not Acceptable"
+ },
+ "415": {
+ "description": "UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type"
+ }
+ }
+ }
+ },
+ "/api/v0/accounts/{namespace}/webhooks": {
+ "get": {
+ "description": "\n*Authorization:* Client must be authenticated as a user who has \"admin\" level access to the repository.\n\t\t",
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "accounts"
+ ],
+ "summary": "List the webhook subscriptions for a namespace",
+ "operationId": "ListNamespaceWebhooks",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "namespace/owner of repository",
+ "name": "namespace",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK",
+ "schema": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/responses.Webhook"
+ }
+ }
+ },
+ "401": {
+ "description": "NOT_AUTHENTICATED: The client is not authenticated."
+ },
+ "403": {
+ "description": "NOT_AUTHORIZED: The client is not authorized."
+ },
+ "404": {
+ "description": "NO_SUCH_ACCOUNT: An account with the given name does not exist."
+ },
+ "405": {
+ "description": "NOT_ALLOWED: Method Not Allowed"
+ },
+ "406": {
+ "description": "NOT_ACCEPTABLE: Not Acceptable"
+ },
+ "415": {
+ "description": "UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type"
+ },
+ "default": {
+ "description": "OK",
+ "schema": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/responses.Webhook"
+ }
+ }
+ }
+ }
+ }
+ },
+ "/api/v0/accounts/{orgname}/teams/{teamname}/repositoryAccess": {
+ "get": {
+ "description": "\n*Authorization:* Client must be authenticated as a user who owns the organization the team is in or be a member of that team.\n\t\t",
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "accounts"
+ ],
+ "summary": "List repository access grants for a team",
+ "operationId": "ListTeamRepoAccess",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "organization account name",
+ "name": "orgname",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "team name",
+ "name": "teamname",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "The ID of the first record on the page",
+ "name": "pageStart",
+ "in": "query"
+ },
+ {
+ "type": "integer",
+ "default": 10,
+ "description": "Maximum number of results to return",
+ "name": "pageSize",
+ "in": "query"
+ },
+ {
+ "type": "boolean",
+ "default": false,
+ "description": "Whether to include the resource count in the response header",
+ "name": "count",
+ "in": "query"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK",
+ "schema": {
+ "$ref": "#/definitions/responses.ListTeamRepoAccess"
+ }
+ },
+ "400": {
+ "description": "the team does not belong to the organization"
+ },
+ "401": {
+ "description": "NOT_AUTHENTICATED: The client is not authenticated."
+ },
+ "403": {
+ "description": "NOT_AUTHORIZED: The client is not authorized."
+ },
+ "404": {
+ "description": "NO_SUCH_TEAM: A team with the given name does not exist in the organization."
+ },
+ "405": {
+ "description": "NOT_ALLOWED: Method Not Allowed"
+ },
+ "406": {
+ "description": "NOT_ACCEPTABLE: Not Acceptable"
+ },
+ "415": {
+ "description": "UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type"
+ },
+ "default": {
+ "description": "OK",
+ "schema": {
+ "$ref": "#/definitions/responses.ListTeamRepoAccess"
+ }
+ }
+ }
+ }
+ },
+ "/api/v0/accounts/{username}/repositoryAccess/{namespace}/{reponame}": {
+ "get": {
+ "description": "\n\t*Authorization:* Client must be authenticated either as the user in question or be a system admin.\n\t\t",
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "accounts"
+ ],
+ "summary": "Check a user's access to a repository",
+ "operationId": "GetUserRepoAccess",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "user account name",
+ "name": "username",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "namespace/owner of repository",
+ "name": "namespace",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of repository",
+ "name": "reponame",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK",
+ "schema": {
+ "$ref": "#/definitions/responses.RepoUserAccess"
+ }
+ },
+ "401": {
+ "description": "NOT_AUTHENTICATED: The client is not authenticated."
+ },
+ "403": {
+ "description": "NOT_AUTHORIZED: The client is not authorized."
+ },
+ "404": {
+ "description": "NO_SUCH_REPOSITORY: A repository with the given name does not exist."
+ },
+ "405": {
+ "description": "NOT_ALLOWED: Method Not Allowed"
+ },
+ "406": {
+ "description": "NOT_ACCEPTABLE: Not Acceptable"
+ },
+ "415": {
+ "description": "UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type"
+ },
+ "default": {
+ "description": "OK",
+ "schema": {
+ "$ref": "#/definitions/responses.RepoUserAccess"
+ }
+ }
+ }
+ }
+ },
+ "/api/v0/accounts/{username}/settings": {
+ "get": {
+ "description": "\n*Authorization:* Client must be authenticated either as the user in question or be a system admin.\n\t\t",
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "accounts"
+ ],
+ "summary": "Check a user's settings",
+ "operationId": "GetUserSettings",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "user account name",
+ "name": "username",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK",
+ "schema": {
+ "$ref": "#/definitions/responses.UserSettings"
+ }
+ },
+ "401": {
+ "description": "NOT_AUTHENTICATED: The client is not authenticated."
+ },
+ "403": {
+ "description": "NOT_AUTHORIZED: The client is not authorized."
+ },
+ "404": {
+ "description": "NO_SUCH_USER: A user with the given name does not exist."
+ },
+ "405": {
+ "description": "NOT_ALLOWED: Method Not Allowed"
+ },
+ "406": {
+ "description": "NOT_ACCEPTABLE: Not Acceptable"
+ },
+ "415": {
+ "description": "UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type"
+ },
+ "default": {
+ "description": "OK",
+ "schema": {
+ "$ref": "#/definitions/responses.UserSettings"
+ }
+ }
+ }
+ },
+ "patch": {
+ "description": "\n*Authorization:* Client must be authenticated either as the user in question or be a system admin.\n\t\t",
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "accounts"
+ ],
+ "summary": "Update a user's settings",
+ "operationId": "UpdateUserSettings",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "user account name",
+ "name": "username",
+ "in": "path",
+ "required": true
+ },
+ {
+ "name": "body",
+ "in": "body",
+ "required": true,
+ "schema": {
+ "$ref": "#/definitions/forms.UserSettings"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Successfully updated user settings."
+ },
+ "400": {
+ "description": "INVALID_USER_SETTINGS: The submitted user settings change request contains invalid values."
+ },
+ "401": {
+ "description": "NOT_AUTHENTICATED: The client is not authenticated."
+ },
+ "403": {
+ "description": "NOT_AUTHORIZED: The client is not authorized."
+ },
+ "404": {
+ "description": "NO_SUCH_USER: A user with the given name does not exist."
+ },
+ "405": {
+ "description": "NOT_ALLOWED: Method Not Allowed"
+ },
+ "406": {
+ "description": "NOT_ACCEPTABLE: Not Acceptable"
+ },
+ "415": {
+ "description": "UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type"
+ },
+ "default": {
+ "description": "Successfully updated user settings."
+ }
+ }
+ }
+ },
+ "/api/v0/action_configs": {
+ "get": {
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "action_configs"
+ ],
+ "summary": "List all action configs",
+ "operationId": "ListActionConfigs",
+ "responses": {
+ "200": {
+ "description": "Success, list of action configs returned.",
+ "schema": {
+ "$ref": "#/definitions/tmpresponses.ActionConfigs"
+ }
+ },
+ "default": {
+ "description": "Success, list of action configs returned.",
+ "schema": {
+ "$ref": "#/definitions/tmpresponses.ActionConfigs"
+ }
+ }
+ }
+ },
+ "post": {
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "action_configs"
+ ],
+ "summary": "Configure actions",
+ "operationId": "UpdateActionConfig",
+ "parameters": [
+ {
+ "name": "body",
+ "in": "body",
+ "required": true,
+ "schema": {
+ "$ref": "#/definitions/tmpforms.ActionConfigCreate"
+ }
+ }
+ ],
+ "responses": {
+ "202": {
+ "description": "Success.",
+ "schema": {
+ "$ref": "#/definitions/tmpresponses.ActionConfig"
+ }
+ }
+ }
+ }
+ },
+ "/api/v0/action_configs/{action}": {
+ "get": {
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "action_configs"
+ ],
+ "summary": "Get info about the actionConfig with the given action",
+ "operationId": "GetActionConfig",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "name of action to fetch the config for",
+ "name": "action",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Success, action config info returned.",
+ "schema": {
+ "$ref": "#/definitions/tmpresponses.ActionConfig"
+ }
+ },
+ "default": {
+ "description": "Success, action config info returned.",
+ "schema": {
+ "$ref": "#/definitions/tmpresponses.ActionConfig"
+ }
+ }
+ }
+ },
+ "delete": {
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "action_configs"
+ ],
+ "summary": "Delete the action config. The defaults will be used.",
+ "operationId": "DeleteActionConfig",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "the name of the action to delete the config for",
+ "name": "action",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "204": {
+ "description": "Success, action config has been deleted."
+ }
+ }
+ }
+ },
+ "/api/v0/api_tokens": {
+ "get": {
+ "description": "listUserAPITokensHandler",
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "API_tokens"
+ ],
+ "summary": "Get all API tokens associated with user. Get all tokens if no user is not specified",
+ "operationId": "GetAllAPITokensByUser",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "The ID of the first record on the page",
+ "name": "pageStart",
+ "in": "query"
+ },
+ {
+ "type": "integer",
+ "default": 10,
+ "description": "Maximum number of results to return",
+ "name": "pageSize",
+ "in": "query"
+ },
+ {
+ "type": "boolean",
+ "default": false,
+ "description": "Whether to include the resource count in the response header",
+ "name": "count",
+ "in": "query"
+ },
+ {
+ "type": "string",
+ "description": "Limit the API token results to a specific user",
+ "name": "username",
+ "in": "query"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Successfully retrieved API tokens",
+ "schema": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/responses.APIToken"
+ }
+ }
+ },
+ "401": {
+ "description": "NOT_AUTHENTICATED: The client is not authenticated."
+ },
+ "403": {
+ "description": "NOT_AUTHORIZED: The client is not authorized."
+ },
+ "404": {
+ "description": "NO_SUCH_USER: A user with the given name does not exist."
+ },
+ "405": {
+ "description": "NOT_ALLOWED: Method Not Allowed"
+ },
+ "406": {
+ "description": "NOT_ACCEPTABLE: Not Acceptable"
+ },
+ "415": {
+ "description": "UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type"
+ },
+ "default": {
+ "description": "Successfully retrieved API tokens",
+ "schema": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/responses.APIToken"
+ }
+ }
+ }
+ }
+ },
+ "post": {
+ "description": "createAPITokenHandler",
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "API_tokens"
+ ],
+ "summary": "Create a new API token",
+ "operationId": "CreateAnAPIToken",
+ "parameters": [
+ {
+ "name": "body",
+ "in": "body",
+ "required": true,
+ "schema": {
+ "$ref": "#/definitions/forms.CreateAPIToken"
+ }
+ },
+ {
+ "type": "string",
+ "description": "Limit the API token results to a specific user",
+ "name": "username",
+ "in": "query"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Successfully created API token",
+ "schema": {
+ "$ref": "#/definitions/responses.NewAPIToken"
+ }
+ },
+ "401": {
+ "description": "NOT_AUTHENTICATED: The client is not authenticated."
+ },
+ "403": {
+ "description": "NOT_AUTHORIZED: The client is not authorized."
+ },
+ "405": {
+ "description": "NOT_ALLOWED: Method Not Allowed"
+ },
+ "406": {
+ "description": "NOT_ACCEPTABLE: Not Acceptable"
+ },
+ "415": {
+ "description": "UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type"
+ },
+ "default": {
+ "description": "Successfully created API token",
+ "schema": {
+ "$ref": "#/definitions/responses.NewAPIToken"
+ }
+ }
+ }
+ },
+ "delete": {
+ "description": "cleanupAPITokenHleanupHandler",
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "API_tokens"
+ ],
+ "summary": "Mass deletion of API tokens from database based on user, time created, and/or generation method",
+ "operationId": "APITokenCleanup",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "Limit the API token results to a specific user",
+ "name": "username",
+ "in": "query"
+ },
+ {
+ "type": "string",
+ "description": "The date on which the token was last used",
+ "name": "usedbefore",
+ "in": "query"
+ },
+ {
+ "type": "string",
+ "default": "auto",
+ "description": "The method by which the token was created",
+ "name": "generatedby",
+ "in": "query"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Successfully cleaned up API tokens"
+ },
+ "400": {
+ "description": "INVALID_PARAMETERS: Unable to parse query parameters"
+ },
+ "401": {
+ "description": "NOT_AUTHENTICATED: The client is not authenticated."
+ },
+ "403": {
+ "description": "NOT_AUTHORIZED: The client is not authorized."
+ },
+ "404": {
+ "description": "NO_SUCH_USER: A user with the given name does not exist."
+ },
+ "405": {
+ "description": "NOT_ALLOWED: Method Not Allowed"
+ },
+ "406": {
+ "description": "NOT_ACCEPTABLE: Not Acceptable"
+ },
+ "415": {
+ "description": "UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type"
+ },
+ "default": {
+ "description": "Successfully cleaned up API tokens"
+ }
+ }
+ }
+ },
+ "/api/v0/api_tokens/{hashedtoken}": {
+ "get": {
+ "description": "getAPITokenHandler",
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "API_tokens"
+ ],
+ "summary": "Get an API token's information based on it's token id",
+ "operationId": "GetAnAPIToken",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "API token id",
+ "name": "hashedtoken",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Successfully retrieved API token",
+ "schema": {
+ "$ref": "#/definitions/responses.APIToken"
+ }
+ },
+ "401": {
+ "description": "NOT_AUTHENTICATED: The client is not authenticated."
+ },
+ "403": {
+ "description": "NOT_AUTHORIZED: The client is not authorized."
+ },
+ "404": {
+ "description": "NO_SUCH_API_TOKEN: An API token with the id name does not exist."
+ },
+ "405": {
+ "description": "NOT_ALLOWED: Method Not Allowed"
+ },
+ "406": {
+ "description": "NOT_ACCEPTABLE: Not Acceptable"
+ },
+ "415": {
+ "description": "UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type"
+ },
+ "default": {
+ "description": "Successfully retrieved API token",
+ "schema": {
+ "$ref": "#/definitions/responses.APIToken"
+ }
+ }
+ }
+ },
+ "delete": {
+ "description": "deleteAPITokenHandler",
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "API_tokens"
+ ],
+ "summary": "Delete a specific API token",
+ "operationId": "DeleteAnAPIToken",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "API token id",
+ "name": "hashedtoken",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Successfully deleted API token"
+ },
+ "401": {
+ "description": "NOT_AUTHENTICATED: The client is not authenticated."
+ },
+ "403": {
+ "description": "NOT_AUTHORIZED: The client is not authorized."
+ },
+ "404": {
+ "description": "NO_SUCH_API_TOKEN: An API token with the id name does not exist."
+ },
+ "405": {
+ "description": "NOT_ALLOWED: Method Not Allowed"
+ },
+ "406": {
+ "description": "NOT_ACCEPTABLE: Not Acceptable"
+ },
+ "415": {
+ "description": "UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type"
+ },
+ "default": {
+ "description": "Successfully deleted API token"
+ }
+ }
+ },
+ "patch": {
+ "description": "updateAPITokenHandler",
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "API_tokens"
+ ],
+ "summary": "Update information about a specific API token",
+ "operationId": "UpdateAnAPIToken",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "API token id",
+ "name": "hashedtoken",
+ "in": "path",
+ "required": true
+ },
+ {
+ "name": "body",
+ "in": "body",
+ "required": true,
+ "schema": {
+ "$ref": "#/definitions/forms.UpdateAPIToken"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Successfully updated API tokens",
+ "schema": {
+ "$ref": "#/definitions/responses.APIToken"
+ }
+ },
+ "401": {
+ "description": "NOT_AUTHENTICATED: The client is not authenticated."
+ },
+ "403": {
+ "description": "NOT_AUTHORIZED: The client is not authorized."
+ },
+ "404": {
+ "description": "NO_SUCH_API_TOKEN: An API token with the id name does not exist."
+ },
+ "405": {
+ "description": "NOT_ALLOWED: Method Not Allowed"
+ },
+ "406": {
+ "description": "NOT_ACCEPTABLE: Not Acceptable"
+ },
+ "415": {
+ "description": "UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type"
+ },
+ "default": {
+ "description": "Successfully updated API tokens",
+ "schema": {
+ "$ref": "#/definitions/responses.APIToken"
+ }
+ }
+ }
+ }
+ },
+ "/api/v0/content_caches": {
+ "get": {
+ "description": "\n*Authorization:* Client must be authenticated as any active user in the system.\n\t\t",
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "content_caches"
+ ],
+ "summary": "List all content caches",
+ "operationId": "ListContentCaches",
+ "responses": {
+ "200": {
+ "description": "OK",
+ "schema": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/responses.ContentCache"
+ }
+ }
+ },
+ "401": {
+ "description": "NOT_AUTHENTICATED: The client is not authenticated."
+ },
+ "403": {
+ "description": "NOT_AUTHORIZED: The client is not authorized."
+ },
+ "405": {
+ "description": "NOT_ALLOWED: Method Not Allowed"
+ },
+ "406": {
+ "description": "NOT_ACCEPTABLE: Not Acceptable"
+ },
+ "415": {
+ "description": "UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type"
+ },
+ "default": {
+ "description": "OK",
+ "schema": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/responses.ContentCache"
+ }
+ }
+ }
+ }
+ },
+ "post": {
+ "description": "\n*Authorization:* Client must be authenticated an admin.\n\t\t",
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "content_caches"
+ ],
+ "summary": "Create content cache",
+ "operationId": "CreateContentCache",
+ "parameters": [
+ {
+ "name": "body",
+ "in": "body",
+ "required": true,
+ "schema": {
+ "$ref": "#/definitions/forms.CreateContentCache"
+ }
+ }
+ ],
+ "responses": {
+ "201": {
+ "description": "success",
+ "schema": {
+ "$ref": "#/definitions/responses.ContentCache"
+ }
+ },
+ "400": {
+ "description": "invalid content cache details"
+ },
+ "401": {
+ "description": "NOT_AUTHENTICATED: The client is not authenticated."
+ },
+ "403": {
+ "description": "NOT_AUTHORIZED: The client is not authorized."
+ },
+ "405": {
+ "description": "NOT_ALLOWED: Method Not Allowed"
+ },
+ "406": {
+ "description": "NOT_ACCEPTABLE: Not Acceptable"
+ },
+ "415": {
+ "description": "UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type"
+ }
+ }
+ }
+ },
+ "/api/v0/content_caches/{contentcacheuuid}": {
+ "get": {
+ "description": "\n*Authorization:* Client must be authenticated as any active user in the system.\n\t\t",
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "content_caches"
+ ],
+ "summary": "View details of a content cache",
+ "operationId": "GetContentCache",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "uuid of content cache",
+ "name": "contentcacheuuid",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK",
+ "schema": {
+ "$ref": "#/definitions/responses.ContentCache"
+ }
+ },
+ "401": {
+ "description": "NOT_AUTHENTICATED: The client is not authenticated."
+ },
+ "403": {
+ "description": "NOT_AUTHORIZED: The client is not authorized."
+ },
+ "404": {
+ "description": "NO_SUCH_CONTENT_CACHE: A content cache with the given uuid does not exist."
+ },
+ "405": {
+ "description": "NOT_ALLOWED: Method Not Allowed"
+ },
+ "406": {
+ "description": "NOT_ACCEPTABLE: Not Acceptable"
+ },
+ "415": {
+ "description": "UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type"
+ },
+ "default": {
+ "description": "OK",
+ "schema": {
+ "$ref": "#/definitions/responses.ContentCache"
+ }
+ }
+ }
+ },
+ "delete": {
+ "description": "\n*Authorization:* Client must be authenticated an admin.\n\t\t",
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "content_caches"
+ ],
+ "summary": "Remove a content cache",
+ "operationId": "DeleteContentCache",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "uuid of content cache",
+ "name": "contentcacheuuid",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "204": {
+ "description": "success or content cache does not exist"
+ },
+ "401": {
+ "description": "NOT_AUTHENTICATED: The client is not authenticated."
+ },
+ "403": {
+ "description": "NOT_AUTHORIZED: The client is not authorized."
+ },
+ "404": {
+ "description": "NO_SUCH_CONTENT_CACHE: A content cache with the given uuid does not exist."
+ },
+ "405": {
+ "description": "NOT_ALLOWED: Method Not Allowed"
+ },
+ "406": {
+ "description": "NOT_ACCEPTABLE: Not Acceptable"
+ },
+ "415": {
+ "description": "UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type"
+ }
+ }
+ }
+ },
+ "/api/v0/crons": {
+ "get": {
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "crons"
+ ],
+ "summary": "List all crons",
+ "operationId": "ListCrons",
+ "responses": {
+ "200": {
+ "description": "Success, list of crons returned.",
+ "schema": {
+ "$ref": "#/definitions/tmpresponses.Crons"
+ }
+ },
+ "default": {
+ "description": "Success, list of crons returned.",
+ "schema": {
+ "$ref": "#/definitions/tmpresponses.Crons"
+ }
+ }
+ }
+ },
+ "post": {
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "crons"
+ ],
+ "summary": "Create / update a periodic task",
+ "operationId": "UpdateCron",
+ "parameters": [
+ {
+ "name": "body",
+ "in": "body",
+ "required": true,
+ "schema": {
+ "$ref": "#/definitions/tmpforms.CronCreate"
+ }
+ }
+ ],
+ "responses": {
+ "202": {
+ "description": "Success.",
+ "schema": {
+ "$ref": "#/definitions/tmpresponses.Cron"
+ }
+ }
+ }
+ }
+ },
+ "/api/v0/crons/{action}": {
+ "get": {
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "crons"
+ ],
+ "summary": "Get info about the cron with the given action",
+ "operationId": "GetCron",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "action of the cron to fetch",
+ "name": "action",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Success, cron info returned.",
+ "schema": {
+ "$ref": "#/definitions/tmpresponses.Cron"
+ }
+ },
+ "default": {
+ "description": "Success, cron info returned.",
+ "schema": {
+ "$ref": "#/definitions/tmpresponses.Cron"
+ }
+ }
+ }
+ },
+ "delete": {
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "crons"
+ ],
+ "summary": "Delete the cron. Jobs created from it will not be canceled.",
+ "operationId": "DeleteCron",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "action of cron to delete",
+ "name": "action",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "204": {
+ "description": "Success, cron has been deleted."
+ }
+ }
+ }
+ },
+ "/api/v0/events": {
+ "get": {
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "events"
+ ],
+ "summary": "Get Events",
+ "operationId": "GetEvents",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "The ID of the first record on the page",
+ "name": "pageStart",
+ "in": "query"
+ },
+ {
+ "type": "integer",
+ "default": 10,
+ "description": "Maximum number of results to return",
+ "name": "pageSize",
+ "in": "query"
+ },
+ {
+ "type": "boolean",
+ "default": false,
+ "description": "Whether to include the resource count in the response header",
+ "name": "count",
+ "in": "query"
+ },
+ {
+ "type": "string",
+ "name": "publishedBefore",
+ "in": "query"
+ },
+ {
+ "type": "string",
+ "name": "publishedAfter",
+ "in": "query"
+ },
+ {
+ "type": "string",
+ "description": "UUID of the user or organization that performed the event",
+ "name": "actorId",
+ "in": "query"
+ },
+ {
+ "type": "string",
+ "description": "Type of events to filter by",
+ "name": "eventType",
+ "in": "query"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK",
+ "schema": {
+ "$ref": "#/definitions/responses.Events"
+ }
+ },
+ "400": {
+ "description": "INVALID_PARAMETERS: Unable to parse query parameters"
+ },
+ "401": {
+ "description": "NOT_AUTHENTICATED: The client is not authenticated."
+ },
+ "403": {
+ "description": "NOT_AUTHORIZED: The client is not authorized."
+ },
+ "405": {
+ "description": "NOT_ALLOWED: Method Not Allowed"
+ },
+ "406": {
+ "description": "NOT_ACCEPTABLE: Not Acceptable"
+ },
+ "415": {
+ "description": "UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type"
+ },
+ "default": {
+ "description": "OK",
+ "schema": {
+ "$ref": "#/definitions/responses.Events"
+ }
+ }
+ }
+ }
+ },
+ "/api/v0/imagescan/layeroverride": {
+ "get": {
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "imagescan"
+ ],
+ "summary": "Gets a list of all the available overrides",
+ "operationId": "GetLayerVulnOverrides",
+ "responses": {
+ "200": {
+ "description": "Successfully set vulnerability override",
+ "schema": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/responses.LayerVulnOverride"
+ }
+ }
+ },
+ "401": {
+ "description": "NOT_AUTHENTICATED: The client is not authenticated."
+ },
+ "405": {
+ "description": "NOT_ALLOWED: Method Not Allowed"
+ },
+ "406": {
+ "description": "NOT_ACCEPTABLE: Not Acceptable"
+ },
+ "415": {
+ "description": "UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type"
+ },
+ "500": {
+ "description": "INTERNAL_ERROR: An internal server error occurred. Contact a system administrator for more information."
+ },
+ "default": {
+ "description": "Successfully set vulnerability override",
+ "schema": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/responses.LayerVulnOverride"
+ }
+ }
+ }
+ }
+ }
+ },
+ "/api/v0/imagescan/layeroverride/{layerid}": {
+ "post": {
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "imagescan"
+ ],
+ "summary": "Sets a vulnerability override for the given layer",
+ "operationId": "SetLayerVulnOverride",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "layer id",
+ "name": "layerid",
+ "in": "path",
+ "required": true
+ },
+ {
+ "name": "body",
+ "in": "body",
+ "required": true,
+ "schema": {
+ "$ref": "#/definitions/forms.VulnOverrideOption"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Successfully set vulnerability override"
+ },
+ "400": {
+ "description": "INVALID_SETTINGS: The submitted settings change request contains invalid values."
+ },
+ "401": {
+ "description": "NOT_AUTHENTICATED: The client is not authenticated."
+ },
+ "404": {
+ "description": "NO_SUCH_LAYER: A layer with the given sha does not exist in the repository."
+ },
+ "405": {
+ "description": "NOT_ALLOWED: Method Not Allowed"
+ },
+ "406": {
+ "description": "NOT_ACCEPTABLE: Not Acceptable"
+ },
+ "415": {
+ "description": "UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type"
+ },
+ "500": {
+ "description": "INTERNAL_ERROR: An internal server error occurred. Contact a system administrator for more information."
+ },
+ "default": {
+ "description": "Successfully set vulnerability override"
+ }
+ }
+ }
+ },
+ "/api/v0/imagescan/layeroverride/{vulnerabilityid}": {
+ "delete": {
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "imagescan"
+ ],
+ "summary": "Deletes a layer vulnerability override",
+ "operationId": "DeleteLayerVulnOverride",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "vulnerability id",
+ "name": "vulnerabilityid",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK"
+ },
+ "401": {
+ "description": "NOT_AUTHENTICATED: The client is not authenticated."
+ },
+ "404": {
+ "description": "NO_SUCH_LAYER: A layer with the given sha does not exist in the repository."
+ },
+ "405": {
+ "description": "NOT_ALLOWED: Method Not Allowed"
+ },
+ "406": {
+ "description": "NOT_ACCEPTABLE: Not Acceptable"
+ },
+ "415": {
+ "description": "UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type"
+ },
+ "default": {
+ "description": "OK"
+ }
+ }
+ }
+ },
+ "/api/v0/imagescan/repositories/{namespace}/{reponame}/{tag}": {
+ "get": {
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "imagescan"
+ ],
+ "summary": "Deprecated use /scansummary/repositories/{namespace}/{reponame}/{tag}",
+ "operationId": "GetSummaryByManifestDigest",
+ "deprecated": true,
+ "parameters": [
+ {
+ "type": "string",
+ "description": "namespace/owner of repository",
+ "name": "namespace",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of repository",
+ "name": "reponame",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "tag name",
+ "name": "tag",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "boolean",
+ "default": true,
+ "description": "Whether to include detailed summary results",
+ "name": "detailed",
+ "in": "query"
+ },
+ {
+ "type": "string",
+ "description": "Operating system of the tag",
+ "name": "os",
+ "in": "query"
+ },
+ {
+ "type": "string",
+ "description": "Architecture of the tag",
+ "name": "arch",
+ "in": "query"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Successfully retrieved summary.",
+ "schema": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/responses.OldScanSummary"
+ }
+ }
+ },
+ "400": {
+ "description": "SCANNING_NOT_ENABLED: Scanning is not enabled"
+ },
+ "401": {
+ "description": "NOT_AUTHENTICATED: The client is not authenticated."
+ },
+ "404": {
+ "description": "NO_SUCH_TAG: A tag with the given name does not exist for the given repository."
+ },
+ "405": {
+ "description": "NOT_ALLOWED: Method Not Allowed"
+ },
+ "406": {
+ "description": "NOT_ACCEPTABLE: Not Acceptable"
+ },
+ "415": {
+ "description": "UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type"
+ },
+ "default": {
+ "description": "Successfully retrieved summary.",
+ "schema": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/responses.OldScanSummary"
+ }
+ }
+ }
+ }
+ }
+ },
+ "/api/v0/imagescan/scan": {
+ "post": {
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "imagescan"
+ ],
+ "summary": "Do a scan or a scan/check of all layers",
+ "operationId": "ScanAllLayers",
+ "parameters": [
+ {
+ "name": "body",
+ "in": "body",
+ "required": true,
+ "schema": {
+ "$ref": "#/definitions/forms.ScanOptions"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Successfully submitted all layers to jobrunner for scan/check."
+ },
+ "400": {
+ "description": "SCANNING_NOT_ENABLED: Scanning is not enabled"
+ },
+ "401": {
+ "description": "NOT_AUTHENTICATED: The client is not authenticated."
+ },
+ "405": {
+ "description": "NOT_ALLOWED: Method Not Allowed"
+ },
+ "406": {
+ "description": "NOT_ACCEPTABLE: Not Acceptable"
+ },
+ "415": {
+ "description": "UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type"
+ },
+ "default": {
+ "description": "Successfully submitted all layers to jobrunner for scan/check."
+ }
+ }
+ }
+ },
+ "/api/v0/imagescan/scan/update": {
+ "put": {
+ "consumes": [
+ "multipart/form-data",
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "imagescan"
+ ],
+ "summary": "Update the vulnerability database for security scanning",
+ "operationId": "UpdateVulnDB",
+ "parameters": [
+ {
+ "type": "file",
+ "description": "Upload file to init database",
+ "name": "file",
+ "in": "formData"
+ },
+ {
+ "type": "boolean",
+ "default": false,
+ "description": "Init or update vuln db in online mode.",
+ "name": "online",
+ "in": "query"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Successfully started to updated vulnerability DB."
+ },
+ "400": {
+ "description": "SCANNING_DB_NOT_READY: Scanning DB is not ready"
+ },
+ "401": {
+ "description": "NOT_AUTHENTICATED: The client is not authenticated."
+ },
+ "405": {
+ "description": "NOT_ALLOWED: Method Not Allowed"
+ },
+ "406": {
+ "description": "NOT_ACCEPTABLE: Not Acceptable"
+ },
+ "415": {
+ "description": "UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type"
+ },
+ "default": {
+ "description": "Successfully started to updated vulnerability DB."
+ }
+ }
+ }
+ },
+ "/api/v0/imagescan/scan/{namespace}/{reponame}/{tag}/{os}/{arch}": {
+ "post": {
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "imagescan"
+ ],
+ "summary": "Do a scan or a scan/check of given image",
+ "operationId": "ScanImage",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "namespace/owner of repository",
+ "name": "namespace",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of repository",
+ "name": "reponame",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "tag name",
+ "name": "tag",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "operating system of the tag",
+ "name": "os",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "architecture of the tag",
+ "name": "arch",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Successfully submitted image to jobrunner for scan/check."
+ },
+ "400": {
+ "description": "SCANNING_NOT_ENABLED: Scanning is not enabled"
+ },
+ "401": {
+ "description": "NOT_AUTHENTICATED: The client is not authenticated."
+ },
+ "404": {
+ "description": "NO_SUCH_TAG: A tag with the given name does not exist for the given repository."
+ },
+ "405": {
+ "description": "NOT_ALLOWED: Method Not Allowed"
+ },
+ "406": {
+ "description": "NOT_ACCEPTABLE: Not Acceptable"
+ },
+ "415": {
+ "description": "UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type"
+ },
+ "default": {
+ "description": "Successfully submitted image to jobrunner for scan/check."
+ }
+ }
+ }
+ },
+ "/api/v0/imagescan/scansummary/component/{component}": {
+ "get": {
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "imagescan"
+ ],
+ "summary": "Get the image by component",
+ "operationId": "GetScannedImageByComponent",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "component",
+ "name": "component",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "The ID of the first record on the page",
+ "name": "pageStart",
+ "in": "query"
+ },
+ {
+ "type": "integer",
+ "default": 10,
+ "description": "Maximum number of results to return",
+ "name": "pageSize",
+ "in": "query"
+ },
+ {
+ "type": "boolean",
+ "default": false,
+ "description": "Whether to include the resource count in the response header",
+ "name": "count",
+ "in": "query"
+ },
+ {
+ "type": "boolean",
+ "default": true,
+ "description": "Whether to include scan status summary results",
+ "name": "scanstatus",
+ "in": "query"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Successfully retrieved images",
+ "schema": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/responses.ScanSummary"
+ }
+ }
+ },
+ "400": {
+ "description": "SCANNING_NOT_ENABLED: Scanning is not enabled"
+ },
+ "401": {
+ "description": "NOT_AUTHENTICATED: The client is not authenticated."
+ },
+ "404": {
+ "description": "NO_SUCH_TAG: A tag with the given name does not exist for the given repository."
+ },
+ "405": {
+ "description": "NOT_ALLOWED: Method Not Allowed"
+ },
+ "406": {
+ "description": "NOT_ACCEPTABLE: Not Acceptable"
+ },
+ "415": {
+ "description": "UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type"
+ },
+ "default": {
+ "description": "Successfully retrieved images",
+ "schema": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/responses.ScanSummary"
+ }
+ }
+ }
+ }
+ }
+ },
+ "/api/v0/imagescan/scansummary/cve/{cve}": {
+ "get": {
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "imagescan"
+ ],
+ "summary": "Get the image by CVE",
+ "operationId": "GetScannedImageByCVE",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "cve",
+ "name": "cve",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "The ID of the first record on the page",
+ "name": "pageStart",
+ "in": "query"
+ },
+ {
+ "type": "integer",
+ "default": 10,
+ "description": "Maximum number of results to return",
+ "name": "pageSize",
+ "in": "query"
+ },
+ {
+ "type": "boolean",
+ "default": false,
+ "description": "Whether to include the resource count in the response header",
+ "name": "count",
+ "in": "query"
+ },
+ {
+ "type": "boolean",
+ "default": true,
+ "description": "Whether to include scan status summary results",
+ "name": "scanstatus",
+ "in": "query"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Successfully retrieved images",
+ "schema": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/responses.ScanSummary"
+ }
+ }
+ },
+ "400": {
+ "description": "SCANNING_NOT_ENABLED: Scanning is not enabled"
+ },
+ "401": {
+ "description": "NOT_AUTHENTICATED: The client is not authenticated."
+ },
+ "404": {
+ "description": "NO_SUCH_TAG: A tag with the given name does not exist for the given repository."
+ },
+ "405": {
+ "description": "NOT_ALLOWED: Method Not Allowed"
+ },
+ "406": {
+ "description": "NOT_ACCEPTABLE: Not Acceptable"
+ },
+ "415": {
+ "description": "UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type"
+ },
+ "default": {
+ "description": "Successfully retrieved images",
+ "schema": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/responses.ScanSummary"
+ }
+ }
+ }
+ }
+ }
+ },
+ "/api/v0/imagescan/scansummary/layer/{layerid}": {
+ "get": {
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "imagescan"
+ ],
+ "summary": "Get the image by layer sha",
+ "operationId": "GetScannedImageByLayer",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "layer id",
+ "name": "layerid",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "The ID of the first record on the page",
+ "name": "pageStart",
+ "in": "query"
+ },
+ {
+ "type": "integer",
+ "default": 10,
+ "description": "Maximum number of results to return",
+ "name": "pageSize",
+ "in": "query"
+ },
+ {
+ "type": "boolean",
+ "default": false,
+ "description": "Whether to include the resource count in the response header",
+ "name": "count",
+ "in": "query"
+ },
+ {
+ "type": "boolean",
+ "default": true,
+ "description": "Whether to include scan status summary results",
+ "name": "scanstatus",
+ "in": "query"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Successfully retrieved images",
+ "schema": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/responses.ScanSummary"
+ }
+ }
+ },
+ "400": {
+ "description": "SCANNING_NOT_ENABLED: Scanning is not enabled"
+ },
+ "401": {
+ "description": "NOT_AUTHENTICATED: The client is not authenticated."
+ },
+ "404": {
+ "description": "NO_SUCH_LAYER: A layer with the given sha does not exist in the repository."
+ },
+ "405": {
+ "description": "NOT_ALLOWED: Method Not Allowed"
+ },
+ "406": {
+ "description": "NOT_ACCEPTABLE: Not Acceptable"
+ },
+ "415": {
+ "description": "UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type"
+ },
+ "default": {
+ "description": "Successfully retrieved images",
+ "schema": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/responses.ScanSummary"
+ }
+ }
+ }
+ }
+ }
+ },
+ "/api/v0/imagescan/scansummary/license/{license}": {
+ "get": {
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "imagescan"
+ ],
+ "summary": "Get the image by license",
+ "operationId": "GetScannedImageByLicense",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "license",
+ "name": "license",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "The ID of the first record on the page",
+ "name": "pageStart",
+ "in": "query"
+ },
+ {
+ "type": "integer",
+ "default": 10,
+ "description": "Maximum number of results to return",
+ "name": "pageSize",
+ "in": "query"
+ },
+ {
+ "type": "boolean",
+ "default": false,
+ "description": "Whether to include the resource count in the response header",
+ "name": "count",
+ "in": "query"
+ },
+ {
+ "type": "boolean",
+ "default": true,
+ "description": "Whether to include scan status summary results",
+ "name": "scanstatus",
+ "in": "query"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Successfully retrieved images",
+ "schema": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/responses.ScanSummary"
+ }
+ }
+ },
+ "400": {
+ "description": "SCANNING_NOT_ENABLED: Scanning is not enabled"
+ },
+ "401": {
+ "description": "NOT_AUTHENTICATED: The client is not authenticated."
+ },
+ "404": {
+ "description": "NO_SUCH_TAG: A tag with the given name does not exist for the given repository."
+ },
+ "405": {
+ "description": "NOT_ALLOWED: Method Not Allowed"
+ },
+ "406": {
+ "description": "NOT_ACCEPTABLE: Not Acceptable"
+ },
+ "415": {
+ "description": "UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type"
+ },
+ "default": {
+ "description": "Successfully retrieved images",
+ "schema": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/responses.ScanSummary"
+ }
+ }
+ }
+ }
+ }
+ },
+ "/api/v0/imagescan/scansummary/repositories/{namespace}/{reponame}/{reference}": {
+ "get": {
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "imagescan"
+ ],
+ "summary": "Get the scan summary info on a namespace/repo:tag or namespace/repo@digest",
+ "operationId": "GetScanSummary",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "namespace/owner of repository",
+ "name": "namespace",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of repository",
+ "name": "reponame",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "digest or tag for an image manifest",
+ "name": "reference",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "boolean",
+ "default": true,
+ "description": "Whether to include scan status summary results",
+ "name": "scanstatus",
+ "in": "query"
+ },
+ {
+ "type": "string",
+ "description": "Operating system of the tag",
+ "name": "os",
+ "in": "query"
+ },
+ {
+ "type": "string",
+ "description": "Architecture of the tag",
+ "name": "arch",
+ "in": "query"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Successfully retrieved summary.",
+ "schema": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/responses.ScanSummary"
+ }
+ }
+ },
+ "400": {
+ "description": "SCANNING_NOT_ENABLED: Scanning is not enabled"
+ },
+ "401": {
+ "description": "NOT_AUTHENTICATED: The client is not authenticated."
+ },
+ "404": {
+ "description": "NO_SUCH_REF: A ref with the given name does not exist for the given repository."
+ },
+ "405": {
+ "description": "NOT_ALLOWED: Method Not Allowed"
+ },
+ "406": {
+ "description": "NOT_ACCEPTABLE: Not Acceptable"
+ },
+ "415": {
+ "description": "UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type"
+ },
+ "default": {
+ "description": "Successfully retrieved summary.",
+ "schema": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/responses.ScanSummary"
+ }
+ }
+ }
+ }
+ }
+ },
+ "/api/v0/imagescan/scansummary/repositories/{namespace}/{reponame}/{tag}/export": {
+ "get": {
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "text/csv",
+ "application/json"
+ ],
+ "tags": [
+ "imagescan"
+ ],
+ "summary": "Get the scan summary info on a namespace/repo:tag as a file",
+ "operationId": "ExportScanSummary",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "namespace/owner of repository",
+ "name": "namespace",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of repository",
+ "name": "reponame",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "tag name",
+ "name": "tag",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "boolean",
+ "default": true,
+ "description": "Whether to include scan status summary results",
+ "name": "scanstatus",
+ "in": "query"
+ },
+ {
+ "type": "string",
+ "description": "Operating system of the tag",
+ "name": "os",
+ "in": "query"
+ },
+ {
+ "type": "string",
+ "description": "Architecture of the tag",
+ "name": "arch",
+ "in": "query"
+ },
+ {
+ "type": "string",
+ "description": "Scan summary exported filetype",
+ "name": "Accept",
+ "in": "header"
+ }
+ ],
+ "responses": {
+ "400": {
+ "description": "INVALID_PARAMETERS: Unable to parse query parameters"
+ },
+ "401": {
+ "description": "NOT_AUTHENTICATED: The client is not authenticated."
+ },
+ "404": {
+ "description": "NO_SUCH_TAG: A tag with the given name does not exist for the given repository."
+ },
+ "405": {
+ "description": "NOT_ALLOWED: Method Not Allowed"
+ },
+ "406": {
+ "description": "NOT_ACCEPTABLE: Not Acceptable"
+ },
+ "415": {
+ "description": "UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type"
+ }
+ }
+ }
+ },
+ "/api/v0/imagescan/scansummary/tags": {
+ "post": {
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "imagescan"
+ ],
+ "summary": "Get a list of scan summaries",
+ "operationId": "GetScanSummaries",
+ "parameters": [
+ {
+ "name": "body",
+ "in": "body",
+ "required": true,
+ "schema": {
+ "$ref": "#/definitions/forms.ImagesForm"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Successfully retrieved summary.",
+ "schema": {
+ "$ref": "#/definitions/responses.ThinScanSummaries"
+ }
+ },
+ "400": {
+ "description": "INVALID_PARAMETERS: Unable to parse query parameters"
+ },
+ "401": {
+ "description": "NOT_AUTHENTICATED: The client is not authenticated."
+ },
+ "405": {
+ "description": "NOT_ALLOWED: Method Not Allowed"
+ },
+ "406": {
+ "description": "NOT_ACCEPTABLE: Not Acceptable"
+ },
+ "415": {
+ "description": "UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type"
+ },
+ "default": {
+ "description": "Successfully retrieved summary.",
+ "schema": {
+ "$ref": "#/definitions/responses.ThinScanSummaries"
+ }
+ }
+ }
+ }
+ },
+ "/api/v0/imagescan/status": {
+ "get": {
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "imagescan"
+ ],
+ "summary": "Get the status and version of scanning service",
+ "operationId": "GetNautilusDBStatus",
+ "responses": {
+ "200": {
+ "description": "Successfully retrieved DB status",
+ "schema": {
+ "$ref": "#/definitions/responses.NautilusStatus"
+ }
+ },
+ "400": {
+ "description": "SCANNING_NOT_ENABLED: Scanning is not enabled"
+ },
+ "401": {
+ "description": "NOT_AUTHENTICATED: The client is not authenticated."
+ },
+ "405": {
+ "description": "NOT_ALLOWED: Method Not Allowed"
+ },
+ "406": {
+ "description": "NOT_ACCEPTABLE: Not Acceptable"
+ },
+ "415": {
+ "description": "UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type"
+ },
+ "default": {
+ "description": "Successfully retrieved DB status",
+ "schema": {
+ "$ref": "#/definitions/responses.NautilusStatus"
+ }
+ }
+ }
+ }
+ },
+ "/api/v0/index/autocomplete": {
+ "get": {
+ "description": "\nRepository results will be filtered to only those repositories visible to the client. Account results will not be filtered.\n\t\t",
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "index"
+ ],
+ "summary": "Autocompletion for repositories and/or accounts",
+ "operationId": "Autocomplete",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "Autocomplete query",
+ "name": "query",
+ "in": "query",
+ "required": true
+ },
+ {
+ "type": "boolean",
+ "default": true,
+ "description": "Whether to include repositories in the response",
+ "name": "includeRepositories",
+ "in": "query"
+ },
+ {
+ "type": "boolean",
+ "default": true,
+ "description": "Whether to include accounts in the response",
+ "name": "includeAccounts",
+ "in": "query"
+ },
+ {
+ "type": "string",
+ "description": "Exact repository namespace to limit results to.",
+ "name": "namespace",
+ "in": "query"
+ },
+ {
+ "type": "number",
+ "default": 25,
+ "name": "limit",
+ "in": "query"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK",
+ "schema": {
+ "$ref": "#/definitions/responses.Autocomplete"
+ }
+ },
+ "401": {
+ "description": "NOT_AUTHENTICATED: The client is not authenticated."
+ },
+ "405": {
+ "description": "NOT_ALLOWED: Method Not Allowed"
+ },
+ "406": {
+ "description": "NOT_ACCEPTABLE: Not Acceptable"
+ },
+ "415": {
+ "description": "UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type"
+ },
+ "default": {
+ "description": "OK",
+ "schema": {
+ "$ref": "#/definitions/responses.Autocomplete"
+ }
+ }
+ }
+ }
+ },
+ "/api/v0/index/dockersearch": {
+ "get": {
+ "description": "\nThis is used for the Docker CLI's docker search command. Repository results will be filtered to only those repositories visible to the client.\n\t\t",
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "index"
+ ],
+ "summary": "Search Docker repositories",
+ "operationId": "Docker Search",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "Search query",
+ "name": "q",
+ "in": "query",
+ "required": true
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK",
+ "schema": {
+ "$ref": "#/definitions/responses.DockerSearch"
+ }
+ },
+ "401": {
+ "description": "NOT_AUTHENTICATED: The client is not authenticated."
+ },
+ "403": {
+ "description": "NOT_AUTHORIZED: The client is not authorized."
+ },
+ "405": {
+ "description": "NOT_ALLOWED: Method Not Allowed"
+ },
+ "406": {
+ "description": "NOT_ACCEPTABLE: Not Acceptable"
+ },
+ "415": {
+ "description": "UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type"
+ },
+ "default": {
+ "description": "OK",
+ "schema": {
+ "$ref": "#/definitions/responses.DockerSearch"
+ }
+ }
+ }
+ }
+ },
+ "/api/v0/jobs": {
+ "get": {
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "jobs"
+ ],
+ "summary": "List all jobs ordered by most recently scheduled",
+ "operationId": "ListJobs",
+ "parameters": [
+ {
+ "type": "string",
+ "default": "any",
+ "description": "Filter jobs by action.",
+ "name": "action",
+ "in": "query"
+ },
+ {
+ "type": "string",
+ "default": "any",
+ "description": "Filter jobs by worker ID.",
+ "name": "worker",
+ "in": "query"
+ },
+ {
+ "type": "string",
+ "default": "any",
+ "description": "Show only jobs that are running.",
+ "name": "running",
+ "in": "query"
+ },
+ {
+ "type": "integer",
+ "default": 0,
+ "description": "Return most recently scheduled jobs starting from this offset index.",
+ "name": "start",
+ "in": "query"
+ },
+ {
+ "type": "integer",
+ "default": 10,
+ "description": "Maximum number of jobs per page of results.",
+ "name": "limit",
+ "in": "query"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Success, list of jobs returned.",
+ "schema": {
+ "$ref": "#/definitions/tmpresponses.Jobs"
+ }
+ },
+ "default": {
+ "description": "Success, list of jobs returned.",
+ "schema": {
+ "$ref": "#/definitions/tmpresponses.Jobs"
+ }
+ }
+ }
+ },
+ "post": {
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "jobs"
+ ],
+ "summary": "Schedule a job to be run immediately",
+ "operationId": "CreateJob",
+ "parameters": [
+ {
+ "name": "body",
+ "in": "body",
+ "required": true,
+ "schema": {
+ "$ref": "#/definitions/tmpforms.JobSubmission"
+ }
+ }
+ ],
+ "responses": {
+ "202": {
+ "description": "Success, job waiting to be claimed.",
+ "schema": {
+ "$ref": "#/definitions/tmpresponses.Job"
+ }
+ }
+ }
+ }
+ },
+ "/api/v0/jobs/{jobID}": {
+ "get": {
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "jobs"
+ ],
+ "summary": "Get info about the job with the given ID",
+ "operationId": "GetJob",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "ID of job to fetch",
+ "name": "jobID",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Success, job info returned.",
+ "schema": {
+ "$ref": "#/definitions/tmpresponses.Job"
+ }
+ },
+ "default": {
+ "description": "Success, job info returned.",
+ "schema": {
+ "$ref": "#/definitions/tmpresponses.Job"
+ }
+ }
+ }
+ },
+ "delete": {
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "jobs"
+ ],
+ "summary": "Signal this job's worker to cancel and delete the job",
+ "operationId": "DeleteJobs",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "ID of job to delete",
+ "name": "jobID",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "204": {
+ "description": "Success, job has been deleted."
+ }
+ }
+ }
+ },
+ "/api/v0/jobs/{jobID}/cancel": {
+ "post": {
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "jobs"
+ ],
+ "summary": "Signal this job's worker to cancel the job",
+ "operationId": "CancelJob",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "ID of job to cancel",
+ "name": "jobID",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "204": {
+ "description": "Success, job has been canceled."
+ }
+ }
+ }
+ },
+ "/api/v0/jobs/{jobID}/logs": {
+ "get": {
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "jobs"
+ ],
+ "summary": "Retrieve logs for this job from its worker",
+ "operationId": "GetJobLogs",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "ID of job whose logs to retrieve",
+ "name": "jobID",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "boolean",
+ "default": false,
+ "description": "t/f: stream new logs",
+ "name": "stream",
+ "in": "query"
+ },
+ {
+ "type": "integer",
+ "default": 0,
+ "description": "Line number to start from",
+ "name": "offset",
+ "in": "query"
+ },
+ {
+ "type": "integer",
+ "default": 0,
+ "description": "Number of lines to return if not streaming",
+ "name": "limit",
+ "in": "query"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Success, job's logs returned.",
+ "schema": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/tmpresponses.JobLog"
+ }
+ }
+ },
+ "default": {
+ "description": "Success, job's logs returned.",
+ "schema": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/tmpresponses.JobLog"
+ }
+ }
+ }
+ }
+ }
+ },
+ "/api/v0/meta/alerts": {
+ "get": {
+ "description": "\n*Authorization:* Client must be authenticated an admin.\n\t\t",
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "meta"
+ ],
+ "summary": "Get alerts",
+ "operationId": "GetAlerts",
+ "responses": {
+ "200": {
+ "description": "OK",
+ "schema": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/responses.Alert"
+ }
+ }
+ },
+ "401": {
+ "description": "NOT_AUTHENTICATED: The client is not authenticated."
+ },
+ "405": {
+ "description": "NOT_ALLOWED: Method Not Allowed"
+ },
+ "406": {
+ "description": "NOT_ACCEPTABLE: Not Acceptable"
+ },
+ "415": {
+ "description": "UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type"
+ },
+ "default": {
+ "description": "OK",
+ "schema": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/responses.Alert"
+ }
+ }
+ }
+ }
+ }
+ },
+ "/api/v0/meta/cluster_status": {
+ "get": {
+ "description": "\n*Authorization:* Client must be authenticated an admin.\n\t\t",
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "meta"
+ ],
+ "summary": "Get cluster status",
+ "operationId": "GetClusterStatus",
+ "responses": {
+ "200": {
+ "description": "OK",
+ "schema": {
+ "$ref": "#/definitions/responses.ClusterStatus"
+ }
+ },
+ "401": {
+ "description": "NOT_AUTHENTICATED: The client is not authenticated."
+ },
+ "403": {
+ "description": "NOT_AUTHORIZED: The client is not authorized."
+ },
+ "405": {
+ "description": "NOT_ALLOWED: Method Not Allowed"
+ },
+ "406": {
+ "description": "NOT_ACCEPTABLE: Not Acceptable"
+ },
+ "415": {
+ "description": "UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type"
+ },
+ "default": {
+ "description": "OK",
+ "schema": {
+ "$ref": "#/definitions/responses.ClusterStatus"
+ }
+ }
+ }
+ }
+ },
+ "/api/v0/meta/features": {
+ "get": {
+ "description": "\n*Authorization:* Client must be authenticated as any active user in the system\n\t\t",
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "meta"
+ ],
+ "summary": "Get features",
+ "operationId": "GetFeatures",
+ "responses": {
+ "200": {
+ "description": "OK",
+ "schema": {
+ "$ref": "#/definitions/responses.Features"
+ }
+ },
+ "401": {
+ "description": "NOT_AUTHENTICATED: The client is not authenticated."
+ },
+ "405": {
+ "description": "NOT_ALLOWED: Method Not Allowed"
+ },
+ "406": {
+ "description": "NOT_ACCEPTABLE: Not Acceptable"
+ },
+ "415": {
+ "description": "UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type"
+ },
+ "default": {
+ "description": "OK",
+ "schema": {
+ "$ref": "#/definitions/responses.Features"
+ }
+ }
+ }
+ }
+ },
+ "/api/v0/meta/settings": {
+ "get": {
+ "description": "\n*Authorization:* Client must be authenticated an admin.\n\t\t",
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "meta"
+ ],
+ "summary": "Get settings",
+ "operationId": "GetSettings",
+ "responses": {
+ "200": {
+ "description": "OK",
+ "schema": {
+ "$ref": "#/definitions/responses.Settings"
+ }
+ },
+ "401": {
+ "description": "NOT_AUTHENTICATED: The client is not authenticated."
+ },
+ "403": {
+ "description": "NOT_AUTHORIZED: The client is not authorized."
+ },
+ "405": {
+ "description": "NOT_ALLOWED: Method Not Allowed"
+ },
+ "406": {
+ "description": "NOT_ACCEPTABLE: Not Acceptable"
+ },
+ "415": {
+ "description": "UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type"
+ },
+ "default": {
+ "description": "OK",
+ "schema": {
+ "$ref": "#/definitions/responses.Settings"
+ }
+ }
+ }
+ },
+ "post": {
+ "description": "\n*Authorization:* Client must be authenticated an admin.\n\t\t",
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "meta"
+ ],
+ "summary": "Update settings",
+ "operationId": "UpdateSettings",
+ "parameters": [
+ {
+ "name": "body",
+ "in": "body",
+ "required": true,
+ "schema": {
+ "$ref": "#/definitions/forms.Settings"
+ }
+ }
+ ],
+ "responses": {
+ "202": {
+ "description": "success"
+ },
+ "400": {
+ "description": "INVALID_SETTINGS: The submitted settings change request contains invalid values."
+ },
+ "401": {
+ "description": "NOT_AUTHENTICATED: The client is not authenticated."
+ },
+ "405": {
+ "description": "NOT_ALLOWED: Method Not Allowed"
+ },
+ "406": {
+ "description": "NOT_ACCEPTABLE: Not Acceptable"
+ },
+ "415": {
+ "description": "UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type"
+ }
+ }
+ }
+ },
+ "/api/v0/remote/registry": {
+ "post": {
+ "description": "\n*Authorization:* Client must be authenticated as any active user in the system. Credentials provided in the request body must be for an active user in the remote system.\n\t\t",
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "remote"
+ ],
+ "summary": "Create a check for connection status of remote registry",
+ "operationId": "CreateRemoteRegistryCheck",
+ "parameters": [
+ {
+ "name": "body",
+ "in": "body",
+ "required": true,
+ "schema": {
+ "$ref": "#/definitions/forms.CreateRemoteRegistryCheck"
+ }
+ }
+ ],
+ "responses": {
+ "201": {
+ "description": "success",
+ "schema": {
+ "$ref": "#/definitions/responses.RemoteRegistryCheck"
+ }
+ },
+ "400": {
+ "description": "REMOTE_REGISTRY_INVALID_PERMISSIONS: Remote user not authorized to access the requested resource."
+ },
+ "401": {
+ "description": "NOT_AUTHENTICATED: The client is not authenticated."
+ },
+ "405": {
+ "description": "NOT_ALLOWED: Method Not Allowed"
+ },
+ "406": {
+ "description": "NOT_ACCEPTABLE: Not Acceptable"
+ },
+ "415": {
+ "description": "UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type"
+ }
+ }
+ }
+ },
+ "/api/v0/repositories": {
+ "get": {
+ "description": "\n*Authorization:* Client must be authenticated as any active user in the system. Results will be filtered to only those repositories visible to the client.\n\t\t",
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "repositories"
+ ],
+ "summary": "List all repositories",
+ "operationId": "ListRepositories",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "The ID of the first record on the page",
+ "name": "pageStart",
+ "in": "query"
+ },
+ {
+ "type": "integer",
+ "default": 10,
+ "description": "Maximum number of results to return",
+ "name": "pageSize",
+ "in": "query"
+ },
+ {
+ "type": "boolean",
+ "default": false,
+ "description": "Whether to include the resource count in the response header",
+ "name": "count",
+ "in": "query"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK",
+ "schema": {
+ "$ref": "#/definitions/responses.Repositories"
+ }
+ },
+ "401": {
+ "description": "NOT_AUTHENTICATED: The client is not authenticated."
+ },
+ "405": {
+ "description": "NOT_ALLOWED: Method Not Allowed"
+ },
+ "406": {
+ "description": "NOT_ACCEPTABLE: Not Acceptable"
+ },
+ "415": {
+ "description": "UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type"
+ },
+ "default": {
+ "description": "OK",
+ "schema": {
+ "$ref": "#/definitions/responses.Repositories"
+ }
+ }
+ }
+ }
+ },
+ "/api/v0/repositories/scan/toggle": {
+ "post": {
+ "description": "\n*Authorization:* Client must be authenticated as a user who has \"admin\" access to the repository\n(i.e., user owns the repo or is a member of a team with \"admin\" level access to the organization\"s repository).\n\t\t",
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "repositories"
+ ],
+ "summary": "Toggles scan on push for all repositories",
+ "operationId": "ToggleAllRepositoriesScanOnPush",
+ "parameters": [
+ {
+ "name": "body",
+ "in": "body",
+ "required": true,
+ "schema": {
+ "$ref": "#/definitions/forms.ToggleScanOnPush"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Successfully toggled scan on push for all repositories."
+ },
+ "400": {
+ "description": "INVALID_JSON: Unable to parse JSON"
+ },
+ "401": {
+ "description": "NOT_AUTHENTICATED: The client is not authenticated."
+ },
+ "403": {
+ "description": "NOT_AUTHORIZED: The client is not authorized."
+ },
+ "405": {
+ "description": "NOT_ALLOWED: Method Not Allowed"
+ },
+ "406": {
+ "description": "NOT_ACCEPTABLE: Not Acceptable"
+ },
+ "415": {
+ "description": "UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type"
+ },
+ "default": {
+ "description": "Successfully toggled scan on push for all repositories."
+ }
+ }
+ }
+ },
+ "/api/v0/repositories/{namespace}": {
+ "get": {
+ "description": "\n*Authorization:* Client must be authenticated as any active user in the system. Results will be filtered to only those repositories visible to the client.\n\t\t",
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "repositories"
+ ],
+ "summary": "List repositories in a namespace",
+ "operationId": "ListNamespaceRepositories",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "namespace/owner of repository",
+ "name": "namespace",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "The ID of the first record on the page",
+ "name": "pageStart",
+ "in": "query"
+ },
+ {
+ "type": "integer",
+ "default": 10,
+ "description": "Maximum number of results to return",
+ "name": "pageSize",
+ "in": "query"
+ },
+ {
+ "type": "boolean",
+ "default": false,
+ "description": "Whether to include the resource count in the response header",
+ "name": "count",
+ "in": "query"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK",
+ "schema": {
+ "$ref": "#/definitions/responses.Repositories"
+ }
+ },
+ "401": {
+ "description": "NOT_AUTHENTICATED: The client is not authenticated."
+ },
+ "404": {
+ "description": "NO_SUCH_ACCOUNT: An account with the given name does not exist."
+ },
+ "405": {
+ "description": "NOT_ALLOWED: Method Not Allowed"
+ },
+ "406": {
+ "description": "NOT_ACCEPTABLE: Not Acceptable"
+ },
+ "415": {
+ "description": "UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type"
+ },
+ "default": {
+ "description": "OK",
+ "schema": {
+ "$ref": "#/definitions/responses.Repositories"
+ }
+ }
+ }
+ },
+ "post": {
+ "description": "\n*Authorization:* Client must be authenticated as a user who has admin access to the\nrepository namespace (i.e., user owns the repo or is a member of a team with\n\"admin\" level access to the organization's namespace of repositories).\n\t\t",
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "repositories"
+ ],
+ "summary": "Create repository",
+ "operationId": "CreateRepository",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "namespace/owner of repository",
+ "name": "namespace",
+ "in": "path",
+ "required": true
+ },
+ {
+ "name": "body",
+ "in": "body",
+ "required": true,
+ "schema": {
+ "$ref": "#/definitions/forms.CreateRepo"
+ }
+ }
+ ],
+ "responses": {
+ "201": {
+ "description": "success",
+ "schema": {
+ "$ref": "#/definitions/responses.Repository"
+ }
+ },
+ "400": {
+ "description": "REPOSITORY_EXISTS: A repository with the same name already exists."
+ },
+ "401": {
+ "description": "NOT_AUTHENTICATED: The client is not authenticated."
+ },
+ "403": {
+ "description": "NOT_AUTHORIZED: The client is not authorized."
+ },
+ "404": {
+ "description": "NO_SUCH_ACCOUNT: An account with the given name does not exist."
+ },
+ "405": {
+ "description": "NOT_ALLOWED: Method Not Allowed"
+ },
+ "406": {
+ "description": "NOT_ACCEPTABLE: Not Acceptable"
+ },
+ "415": {
+ "description": "UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type"
+ }
+ }
+ }
+ },
+ "/api/v0/repositories/{namespace}/{reponame}": {
+ "get": {
+ "description": "\n*Authorization:* Client must be authenticated as a user who has visibility to the repository.\n\t\t",
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "repositories"
+ ],
+ "summary": "View details of a repository",
+ "operationId": "GetRepository",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "namespace/owner of repository",
+ "name": "namespace",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of repository",
+ "name": "reponame",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK",
+ "schema": {
+ "$ref": "#/definitions/responses.Repository"
+ }
+ },
+ "401": {
+ "description": "NOT_AUTHENTICATED: The client is not authenticated."
+ },
+ "404": {
+ "description": "NO_SUCH_REPOSITORY: A repository with the given name does not exist."
+ },
+ "405": {
+ "description": "NOT_ALLOWED: Method Not Allowed"
+ },
+ "406": {
+ "description": "NOT_ACCEPTABLE: Not Acceptable"
+ },
+ "415": {
+ "description": "UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type"
+ },
+ "default": {
+ "description": "OK",
+ "schema": {
+ "$ref": "#/definitions/responses.Repository"
+ }
+ }
+ }
+ },
+ "delete": {
+ "description": "\n*Authorization:* Client must be authenticated as a user who has \"admin\" access to the repository\n(i.e., user owns the repo or is a member of a team with \"admin\" level access to the organization\"s repository).\n\t\t",
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "repositories"
+ ],
+ "summary": "Remove a repository",
+ "operationId": "DeleteRepository",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "namespace/owner of repository",
+ "name": "namespace",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of repository",
+ "name": "reponame",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "The domain used to push tags to DTR. Must be set to obtain/manipulate Notary related information",
+ "name": "domain",
+ "in": "query"
+ }
+ ],
+ "responses": {
+ "204": {
+ "description": "success or repository does not exist"
+ },
+ "401": {
+ "description": "NOT_AUTHENTICATED: The client is not authenticated."
+ },
+ "403": {
+ "description": "NOT_AUTHORIZED: The client is not authorized."
+ },
+ "404": {
+ "description": "NO_SUCH_REPOSITORY: A repository with the given name does not exist."
+ },
+ "405": {
+ "description": "REPOSITORY_CONTAINS_TAGS_IN_NOTARY: This repository contains tags in notary and can't be deleted until all tags in notary are removed"
+ },
+ "406": {
+ "description": "NOT_ACCEPTABLE: Not Acceptable"
+ },
+ "415": {
+ "description": "UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type"
+ }
+ }
+ },
+ "patch": {
+ "description": "\n*Authorization:* Client must be authenticated as a user who has \"admin\" access to the repository\n(i.e., user owns the repo or is a member of a team with \"admin\" level access to the organization\"s repository).\n\nNote that a repository cannot be renamed this way.\n\t\t",
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "repositories"
+ ],
+ "summary": "Update details of a repository",
+ "operationId": "PatchRepository",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "namespace/owner of repository",
+ "name": "namespace",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of repository",
+ "name": "reponame",
+ "in": "path",
+ "required": true
+ },
+ {
+ "name": "body",
+ "in": "body",
+ "required": true,
+ "schema": {
+ "$ref": "#/definitions/forms.UpdateRepo"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK",
+ "schema": {
+ "$ref": "#/definitions/responses.Repository"
+ }
+ },
+ "400": {
+ "description": "INVALID_REPOSITORY_VISIBILITY: The visibility value of the repository is invalid."
+ },
+ "401": {
+ "description": "NOT_AUTHENTICATED: The client is not authenticated."
+ },
+ "403": {
+ "description": "NOT_AUTHORIZED: The client is not authorized."
+ },
+ "404": {
+ "description": "NO_SUCH_REPOSITORY: A repository with the given name does not exist."
+ },
+ "405": {
+ "description": "NOT_ALLOWED: Method Not Allowed"
+ },
+ "406": {
+ "description": "NOT_ACCEPTABLE: Not Acceptable"
+ },
+ "415": {
+ "description": "UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type"
+ },
+ "default": {
+ "description": "OK",
+ "schema": {
+ "$ref": "#/definitions/responses.Repository"
+ }
+ }
+ }
+ }
+ },
+ "/api/v0/repositories/{namespace}/{reponame}/events": {
+ "get": {
+ "description": "\n*Authorization:* Client must be authenticated as a user who has visibility to local repository.\n\t\t",
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "repositories"
+ ],
+ "summary": "List the events for a repository",
+ "operationId": "ListRepoEvents",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "namespace/owner of repository",
+ "name": "namespace",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of repository",
+ "name": "reponame",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "The ID of the first record on the page",
+ "name": "pageStart",
+ "in": "query"
+ },
+ {
+ "type": "integer",
+ "default": 10,
+ "description": "Maximum number of results to return",
+ "name": "pageSize",
+ "in": "query"
+ },
+ {
+ "type": "boolean",
+ "default": false,
+ "description": "Whether to include the resource count in the response header",
+ "name": "count",
+ "in": "query"
+ },
+ {
+ "type": "string",
+ "name": "publishedBefore",
+ "in": "query"
+ },
+ {
+ "type": "string",
+ "name": "publishedAfter",
+ "in": "query"
+ },
+ {
+ "type": "string",
+ "description": "UUID of the user or organization that performed the event",
+ "name": "actorId",
+ "in": "query"
+ },
+ {
+ "type": "string",
+ "description": "Type of events to filter by",
+ "name": "eventType",
+ "in": "query"
+ },
+ {
+ "type": "boolean",
+ "default": false,
+ "description": "Exclude image pull events",
+ "name": "excludePull",
+ "in": "query"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK",
+ "schema": {
+ "$ref": "#/definitions/responses.Events"
+ }
+ },
+ "400": {
+ "description": "INVALID_PARAMETERS: Unable to parse query parameters"
+ },
+ "401": {
+ "description": "NOT_AUTHENTICATED: The client is not authenticated."
+ },
+ "403": {
+ "description": "NOT_AUTHORIZED: The client is not authorized."
+ },
+ "404": {
+ "description": "NO_SUCH_REPOSITORY: A repository with the given name does not exist."
+ },
+ "405": {
+ "description": "NOT_ALLOWED: Method Not Allowed"
+ },
+ "406": {
+ "description": "NOT_ACCEPTABLE: Not Acceptable"
+ },
+ "415": {
+ "description": "UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type"
+ },
+ "default": {
+ "description": "OK",
+ "schema": {
+ "$ref": "#/definitions/responses.Events"
+ }
+ }
+ }
+ }
+ },
+ "/api/v0/repositories/{namespace}/{reponame}/manifests": {
+ "get": {
+ "description": "\n*Authorization:* Client must be authenticated as a user who has visibility to the repository.\n\t\t",
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "repositories"
+ ],
+ "summary": "List the available manifests for a repository",
+ "operationId": "ListRepoManifests",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "namespace/owner of repository",
+ "name": "namespace",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of repository",
+ "name": "reponame",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "The ID of the first record on the page",
+ "name": "pageStart",
+ "in": "query"
+ },
+ {
+ "type": "integer",
+ "default": 10,
+ "description": "Maximum number of results to return",
+ "name": "pageSize",
+ "in": "query"
+ },
+ {
+ "type": "boolean",
+ "default": false,
+ "description": "Whether to include the resource count in the response header",
+ "name": "count",
+ "in": "query"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK",
+ "schema": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/responses.Manifest"
+ }
+ }
+ },
+ "401": {
+ "description": "NOT_AUTHENTICATED: The client is not authenticated."
+ },
+ "404": {
+ "description": "NO_SUCH_REPOSITORY: A repository with the given name does not exist."
+ },
+ "405": {
+ "description": "NOT_ALLOWED: Method Not Allowed"
+ },
+ "406": {
+ "description": "NOT_ACCEPTABLE: Not Acceptable"
+ },
+ "415": {
+ "description": "UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type"
+ },
+ "default": {
+ "description": "OK",
+ "schema": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/responses.Manifest"
+ }
+ }
+ }
+ }
+ }
+ },
+ "/api/v0/repositories/{namespace}/{reponame}/manifests/{reference}": {
+ "delete": {
+ "description": "\n*Authorization:* Client must be authenticated as a user who has \"write\" level access to the repository.\n\t\t",
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "repositories"
+ ],
+ "summary": "Delete a manifest for a repository",
+ "operationId": "DeleteRepoManifest",
+ "deprecated": true,
+ "parameters": [
+ {
+ "type": "string",
+ "description": "namespace/owner of repository",
+ "name": "namespace",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of repository",
+ "name": "reponame",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "digest or tag for an image manifest",
+ "name": "reference",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "204": {
+ "description": "success"
+ },
+ "400": {
+ "description": "INVALID_DIGEST: The given digest is invalid."
+ },
+ "401": {
+ "description": "NOT_AUTHENTICATED: The client is not authenticated."
+ },
+ "403": {
+ "description": "NOT_AUTHORIZED: The client is not authorized."
+ },
+ "404": {
+ "description": "NO_SUCH_REF: A ref with the given name does not exist for the given repository."
+ },
+ "405": {
+ "description": "NOT_ALLOWED: Method Not Allowed"
+ },
+ "406": {
+ "description": "NOT_ACCEPTABLE: Not Acceptable"
+ },
+ "415": {
+ "description": "UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type"
+ }
+ }
+ }
+ },
+ "/api/v0/repositories/{namespace}/{reponame}/mirroringPolicies": {
+ "get": {
+ "description": "\n*Authorization:* Client must be authenticated as a user who has visibility to local repository.\n\t\t",
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "repositories"
+ ],
+ "summary": "List the mirroring policies for a repository",
+ "operationId": "ListRepoMirroringPolicies",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "namespace/owner of repository",
+ "name": "namespace",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of repository",
+ "name": "reponame",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "The ID of the first record on the page",
+ "name": "pageStart",
+ "in": "query"
+ },
+ {
+ "type": "integer",
+ "default": 10,
+ "description": "Maximum number of results to return",
+ "name": "pageSize",
+ "in": "query"
+ },
+ {
+ "type": "boolean",
+ "default": false,
+ "description": "Whether to include the resource count in the response header",
+ "name": "count",
+ "in": "query"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK",
+ "schema": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/responses.MirroringPolicy"
+ }
+ }
+ },
+ "401": {
+ "description": "NOT_AUTHENTICATED: The client is not authenticated."
+ },
+ "403": {
+ "description": "NOT_AUTHORIZED: The client is not authorized."
+ },
+ "404": {
+ "description": "NO_SUCH_REPOSITORY: A repository with the given name does not exist."
+ },
+ "405": {
+ "description": "NOT_ALLOWED: Method Not Allowed"
+ },
+ "406": {
+ "description": "NOT_ACCEPTABLE: Not Acceptable"
+ },
+ "415": {
+ "description": "UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type"
+ },
+ "default": {
+ "description": "OK",
+ "schema": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/responses.MirroringPolicy"
+ }
+ }
+ }
+ }
+ },
+ "delete": {
+ "description": "\n*Authorization:* Client must be authenticated as a user who has \"admin\" level access to the local repository.\n\t\t",
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "repositories"
+ ],
+ "summary": "Deletes a set of mirroring policies for a repository",
+ "operationId": "DeleteRepoMirroringPolicies",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "namespace/owner of repository",
+ "name": "namespace",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of repository",
+ "name": "reponame",
+ "in": "path",
+ "required": true
+ },
+ {
+ "name": "body",
+ "in": "body",
+ "required": true,
+ "schema": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/forms.DeleteMirroringPolicyIDs"
+ }
+ }
+ }
+ ],
+ "responses": {
+ "204": {
+ "description": "success"
+ },
+ "401": {
+ "description": "NOT_AUTHENTICATED: The client is not authenticated."
+ },
+ "403": {
+ "description": "NOT_AUTHORIZED: The client is not authorized."
+ },
+ "404": {
+ "description": "NO_SUCH_REPOSITORY: A repository with the given name does not exist."
+ },
+ "405": {
+ "description": "NOT_ALLOWED: Method Not Allowed"
+ },
+ "406": {
+ "description": "NOT_ACCEPTABLE: Not Acceptable"
+ },
+ "415": {
+ "description": "UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type"
+ }
+ }
+ }
+ },
+ "/api/v0/repositories/{namespace}/{reponame}/pollMirroringPolicies": {
+ "get": {
+ "description": "\n*Authorization:* Client must be authenticated as a user who has visibility to local repository.\n\t\t",
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "repositories"
+ ],
+ "summary": "List the poll mirroring policies for a repository",
+ "operationId": "ListRepoPollMirroringPolicies",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "namespace/owner of repository",
+ "name": "namespace",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of repository",
+ "name": "reponame",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK",
+ "schema": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/responses.PollMirroringPolicy"
+ }
+ }
+ },
+ "401": {
+ "description": "NOT_AUTHENTICATED: The client is not authenticated."
+ },
+ "403": {
+ "description": "NOT_AUTHORIZED: The client is not authorized."
+ },
+ "404": {
+ "description": "NO_SUCH_REPOSITORY: A repository with the given name does not exist."
+ },
+ "405": {
+ "description": "NOT_ALLOWED: Method Not Allowed"
+ },
+ "406": {
+ "description": "NOT_ACCEPTABLE: Not Acceptable"
+ },
+ "415": {
+ "description": "UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type"
+ },
+ "default": {
+ "description": "OK",
+ "schema": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/responses.PollMirroringPolicy"
+ }
+ }
+ }
+ }
+ },
+ "post": {
+ "description": "*Authorization:* Client must be authenticated as a user who has \"admin\" level access to the local repository and credentials to the remote repository.",
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "repositories"
+ ],
+ "summary": "Create a poll mirroring policy for a repository",
+ "operationId": "CreateRepoPollMirroringPolicy",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "namespace/owner of repository",
+ "name": "namespace",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of repository",
+ "name": "reponame",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "boolean",
+ "default": true,
+ "description": "Whether to evaluate the policy on creation",
+ "name": "initialEvaluation",
+ "in": "query"
+ },
+ {
+ "name": "body",
+ "in": "body",
+ "required": true,
+ "schema": {
+ "$ref": "#/definitions/forms.CreatePollMirroringPolicy"
+ }
+ }
+ ],
+ "responses": {
+ "201": {
+ "description": "success",
+ "schema": {
+ "$ref": "#/definitions/responses.PollMirroringPolicy"
+ }
+ },
+ "400": {
+ "description": "REMOTE_REGISTRY_INVALID_PERMISSIONS: Remote user not authorized to access the requested resource."
+ },
+ "401": {
+ "description": "NOT_AUTHENTICATED: The client is not authenticated."
+ },
+ "403": {
+ "description": "NOT_AUTHORIZED: The client is not authorized."
+ },
+ "404": {
+ "description": "INVALID_POLL_MIRRORING_POLICY: The given poll mirroring policy is invalid."
+ },
+ "405": {
+ "description": "NOT_ALLOWED: Method Not Allowed"
+ },
+ "406": {
+ "description": "NOT_ACCEPTABLE: Not Acceptable"
+ },
+ "415": {
+ "description": "UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type"
+ }
+ }
+ }
+ },
+ "/api/v0/repositories/{namespace}/{reponame}/pollMirroringPolicies/{pollmirroringpolicyid}": {
+ "get": {
+ "description": "\n*Authorization:* Client must be authenticated as a user who has visibility to the local repository.\n\t\t",
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "repositories"
+ ],
+ "summary": "Retrieve a specific poll mirroring policy for a repository",
+ "operationId": "GetRepoPollMirroringPolicy",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "namespace/owner of repository",
+ "name": "namespace",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of repository",
+ "name": "reponame",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "poll mirroring policy id",
+ "name": "pollmirroringpolicyid",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK",
+ "schema": {
+ "$ref": "#/definitions/responses.PollMirroringPolicy"
+ }
+ },
+ "401": {
+ "description": "NOT_AUTHENTICATED: The client is not authenticated."
+ },
+ "403": {
+ "description": "NOT_AUTHORIZED: The client is not authorized."
+ },
+ "404": {
+ "description": "NO_SUCH_POLL_MIRRORING_POLICY: A poll mirroring policy with the given id does not exist."
+ },
+ "405": {
+ "description": "NOT_ALLOWED: Method Not Allowed"
+ },
+ "406": {
+ "description": "NOT_ACCEPTABLE: Not Acceptable"
+ },
+ "415": {
+ "description": "UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type"
+ },
+ "default": {
+ "description": "OK",
+ "schema": {
+ "$ref": "#/definitions/responses.PollMirroringPolicy"
+ }
+ }
+ }
+ },
+ "put": {
+ "description": "\n*Authorization:* Client must be authenticated as a user who has \"admin\" level access to the local repository and credentials to the remote repository.\n\t\t",
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "repositories"
+ ],
+ "summary": "Updates a specific poll mirroring policy for a repository",
+ "operationId": "UpdateRepoPollMirroringPolicy",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "namespace/owner of repository",
+ "name": "namespace",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of repository",
+ "name": "reponame",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "poll mirroring policy id",
+ "name": "pollmirroringpolicyid",
+ "in": "path",
+ "required": true
+ },
+ {
+ "name": "body",
+ "in": "body",
+ "required": true,
+ "schema": {
+ "$ref": "#/definitions/forms.UpdatePollMirroringPolicy"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK",
+ "schema": {
+ "$ref": "#/definitions/responses.PollMirroringPolicy"
+ }
+ },
+ "400": {
+ "description": "REMOTE_REGISTRY_INVALID_PERMISSIONS: Remote user not authorized to access the requested resource."
+ },
+ "401": {
+ "description": "NOT_AUTHENTICATED: The client is not authenticated."
+ },
+ "403": {
+ "description": "NOT_AUTHORIZED: The client is not authorized."
+ },
+ "404": {
+ "description": "INVALID_POLL_MIRRORING_POLICY: The given poll mirroring policy is invalid."
+ },
+ "405": {
+ "description": "NOT_ALLOWED: Method Not Allowed"
+ },
+ "406": {
+ "description": "NOT_ACCEPTABLE: Not Acceptable"
+ },
+ "415": {
+ "description": "UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type"
+ },
+ "default": {
+ "description": "OK",
+ "schema": {
+ "$ref": "#/definitions/responses.PollMirroringPolicy"
+ }
+ }
+ }
+ },
+ "delete": {
+ "description": "\n*Authorization:* Client must be authenticated as a user who has \"admin\" level access to the local repository.\n\t\t",
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "repositories"
+ ],
+ "summary": "Deletes a specific poll mirroring policy for a repository",
+ "operationId": "DeleteRepoPollMirroringPolicy",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "namespace/owner of repository",
+ "name": "namespace",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of repository",
+ "name": "reponame",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "poll mirroring policy id",
+ "name": "pollmirroringpolicyid",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "204": {
+ "description": "success or poll mirroring policy does not exist"
+ },
+ "401": {
+ "description": "NOT_AUTHENTICATED: The client is not authenticated."
+ },
+ "403": {
+ "description": "NOT_AUTHORIZED: The client is not authorized."
+ },
+ "404": {
+ "description": "NO_SUCH_POLL_MIRRORING_POLICY: A poll mirroring policy with the given id does not exist."
+ },
+ "405": {
+ "description": "NOT_ALLOWED: Method Not Allowed"
+ },
+ "406": {
+ "description": "NOT_ACCEPTABLE: Not Acceptable"
+ },
+ "415": {
+ "description": "UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type"
+ }
+ }
+ }
+ },
+ "/api/v0/repositories/{namespace}/{reponame}/promotionPolicies": {
+ "get": {
+ "description": "\n*Authorization:* Client must be authenticated as a user who has visibility to the source or target repository.\n\t\t",
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "repositories"
+ ],
+ "summary": "List the promotion policies for a repository",
+ "operationId": "ListRepoPromotionPolicies",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "namespace/owner of repository",
+ "name": "namespace",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of repository",
+ "name": "reponame",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "boolean",
+ "default": true,
+ "description": "Whether to list promotion policies for a repository as a source or destination.",
+ "name": "source",
+ "in": "query"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK",
+ "schema": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/responses.PromotionPolicy"
+ }
+ }
+ },
+ "401": {
+ "description": "NOT_AUTHENTICATED: The client is not authenticated."
+ },
+ "403": {
+ "description": "NOT_AUTHORIZED: The client is not authorized."
+ },
+ "404": {
+ "description": "NO_SUCH_REPOSITORY: A repository with the given name does not exist."
+ },
+ "405": {
+ "description": "NOT_ALLOWED: Method Not Allowed"
+ },
+ "406": {
+ "description": "NOT_ACCEPTABLE: Not Acceptable"
+ },
+ "415": {
+ "description": "UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type"
+ },
+ "default": {
+ "description": "OK",
+ "schema": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/responses.PromotionPolicy"
+ }
+ }
+ }
+ }
+ },
+ "post": {
+ "description": "*Authorization:* Client must be authenticated as a user who has \"admin\" level access to the source and target repository.\nRules for the policy can be on the following fields and their respective operators:\n- \"tag\"\n\t- \"eq\": equals\n\t- \"sw\": starts with\n\t- \"ew\": ends with\n\t- \"c\": contains\n\t- \"oo\": one of\n\t- \"noo\": not one of\n- \"license.name\"\n\t- \"oo\": one of\n\t- \"noo\": not one of\n- \"component.name\"\n\t- \"oo\": one of\n\t- \"noo\": not one of\n- \"vulnerability_all\"\n\t- \"gte\": greater than or equals\n\t- \"gt\": greater than\n\t- \"eq\": equals\n\t- \"neq\": not equals\n\t- \"lte\": less than or equals\n\t- \"lt\": less than\n- \"vulnerability_critical\"\n\t- \"gte\": greater than or equals\n\t- \"gt\": greater than\n\t- \"eq\": equals\n\t- \"neq\": not equals\n\t- \"lte\": less than or equals\n\t- \"lt\": less than\n- \"vulnerability_major\"\n\t- \"gte\": greater than or equals\n\t- \"gt\": greater than\n\t- \"eq\": equals\n\t- \"neq\": not equals\n\t- \"lte\": less than or equals\n\t- \"lt\": less than\n- \"vulnerability_minor\"\n\t- \"gte\": greater than or equals\n\t- \"gt\": greater than\n\t- \"eq\": equals\n\t- \"neq\": not equals\n\t- \"lte\": less than or equals\n\t- \"lt\": less than\n- \"updated_at\"\n\t- \"bf\": before\n\t- \"af\": after\n- \"updated_at_duration\"\n\t- \"bf\": before\n\t- \"af\": after\n\nThe tag template is used to rename the tag in the target repository. The\nfollowing symbols are allowed:\n- \"%n\": The tag to promote (e.g. 1, 4.5, latest)\n- \"%A\": Day of the week (e.g. Sunday, Monday)\n- \"%a\": Day of the week, abbreviated (e.g. Sun, Mon , Tue)\n- \"%w\": Day of the week, as a number (e.g. 0, 1, 6)\n- \"%d\": Number for the day of the month (e.g. 01, 15, 31)\n- \"%B\": Month (e.g. January, December)\n- \"%b\": Month, abbreviated (e.g. Jan, Jun, Dec)\n- \"%m\": Month, as a number (e.g. 01, 06, 12)\n- \"%Y\": Year (e.g. 1999, 2015, 2048)\n- \"%y\": Year, two digits (e.g. 99, 15, 48)\n- \"%H\": Hour, in 24 hour format (e.g. 00, 12, 23)\n- \"%I\": Hour, in 12 hour format (e.g. 01, 10, 10)\n- \"%p\": Period of the day (e.g. AM, PM)\n- \"%M\": Minute (e.g. 00, 10, 59)\n- \"%S\": Second (e.g. 00, 10, 59)\n- \"%f\": Microsecond (e.g. 000000, 999999)\n- \"%Z\": Name for the timezone (e.g. UTC, PST, EST)\n- \"%j\": Day of the year (e.g. 001, 200, 366)\n- \"%W\": Week of the year (e.g. 00, 10 , 53)\n",
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "repositories"
+ ],
+ "summary": "Create a promotion policy for a repository",
+ "operationId": "CreateRepoPromotionPolicy",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "namespace/owner of repository",
+ "name": "namespace",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of repository",
+ "name": "reponame",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "boolean",
+ "default": true,
+ "description": "Whether to evaluate the policy on creation",
+ "name": "initialEvaluation",
+ "in": "query"
+ },
+ {
+ "name": "body",
+ "in": "body",
+ "required": true,
+ "schema": {
+ "$ref": "#/definitions/forms.CreatePromotionPolicy"
+ }
+ }
+ ],
+ "responses": {
+ "201": {
+ "description": "success",
+ "schema": {
+ "$ref": "#/definitions/responses.PromotionPolicy"
+ }
+ },
+ "400": {
+ "description": "INVALID_PROMOTION_POLICY: The given promotion policy is invalid."
+ },
+ "401": {
+ "description": "NOT_AUTHENTICATED: The client is not authenticated."
+ },
+ "403": {
+ "description": "NOT_AUTHORIZED: The client is not authorized."
+ },
+ "404": {
+ "description": "NO_SUCH_REPOSITORY: A repository with the given name does not exist."
+ },
+ "405": {
+ "description": "NOT_ALLOWED: Method Not Allowed"
+ },
+ "406": {
+ "description": "NOT_ACCEPTABLE: Not Acceptable"
+ },
+ "415": {
+ "description": "UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type"
+ }
+ }
+ }
+ },
+ "/api/v0/repositories/{namespace}/{reponame}/promotionPolicies/{promotionpolicyid}": {
+ "get": {
+ "description": "\n*Authorization:* Client must be authenticated as a user who has visibility to the source or target repository.\n\t\t",
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "repositories"
+ ],
+ "summary": "Retrieve a specific promotion policy for a repository",
+ "operationId": "GetRepoPromotionPolicy",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "namespace/owner of repository",
+ "name": "namespace",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of repository",
+ "name": "reponame",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "promotion policy id",
+ "name": "promotionpolicyid",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK",
+ "schema": {
+ "$ref": "#/definitions/responses.PromotionPolicy"
+ }
+ },
+ "401": {
+ "description": "NOT_AUTHENTICATED: The client is not authenticated."
+ },
+ "403": {
+ "description": "NOT_AUTHORIZED: The client is not authorized."
+ },
+ "404": {
+ "description": "NO_SUCH_PROMOTION_POLICY: A promotion policy with the given id does not exist."
+ },
+ "405": {
+ "description": "NOT_ALLOWED: Method Not Allowed"
+ },
+ "406": {
+ "description": "NOT_ACCEPTABLE: Not Acceptable"
+ },
+ "415": {
+ "description": "UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type"
+ },
+ "default": {
+ "description": "OK",
+ "schema": {
+ "$ref": "#/definitions/responses.PromotionPolicy"
+ }
+ }
+ }
+ },
+ "put": {
+ "description": "\n*Authorization:* Client must be authenticated as a user who has \"admin\" level access to the source and target repository.\n\t\t",
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "repositories"
+ ],
+ "summary": "Updates a specific promotion policy for a repository",
+ "operationId": "UpdateRepoPromotionPolicy",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "namespace/owner of repository",
+ "name": "namespace",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of repository",
+ "name": "reponame",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "promotion policy id",
+ "name": "promotionpolicyid",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "boolean",
+ "default": true,
+ "description": "Whether to evaluate the policy on creation",
+ "name": "initialEvaluation",
+ "in": "query"
+ },
+ {
+ "name": "body",
+ "in": "body",
+ "required": true,
+ "schema": {
+ "$ref": "#/definitions/forms.UpdatePromotionPolicy"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK",
+ "schema": {
+ "$ref": "#/definitions/responses.PromotionPolicy"
+ }
+ },
+ "400": {
+ "description": "INVALID_PROMOTION_POLICY: The given promotion policy is invalid."
+ },
+ "401": {
+ "description": "NOT_AUTHENTICATED: The client is not authenticated."
+ },
+ "403": {
+ "description": "NOT_AUTHORIZED: The client is not authorized."
+ },
+ "404": {
+ "description": "NO_SUCH_PROMOTION_POLICY: A promotion policy with the given id does not exist."
+ },
+ "405": {
+ "description": "NOT_ALLOWED: Method Not Allowed"
+ },
+ "406": {
+ "description": "NOT_ACCEPTABLE: Not Acceptable"
+ },
+ "415": {
+ "description": "UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type"
+ },
+ "default": {
+ "description": "OK",
+ "schema": {
+ "$ref": "#/definitions/responses.PromotionPolicy"
+ }
+ }
+ }
+ },
+ "delete": {
+ "description": "\n*Authorization:* Client must be authenticated as a user who has \"admin\" level access to the source or target repository.\n\t\t",
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "repositories"
+ ],
+ "summary": "Deletes a specific promotion policy for a repository",
+ "operationId": "DeleteRepoPromotionPolicy",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "namespace/owner of repository",
+ "name": "namespace",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of repository",
+ "name": "reponame",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "promotion policy id",
+ "name": "promotionpolicyid",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "204": {
+ "description": "success or promotion policy does not exist"
+ },
+ "401": {
+ "description": "NOT_AUTHENTICATED: The client is not authenticated."
+ },
+ "403": {
+ "description": "NOT_AUTHORIZED: The client is not authorized."
+ },
+ "404": {
+ "description": "NO_SUCH_PROMOTION_POLICY: A promotion policy with the given id does not exist."
+ },
+ "405": {
+ "description": "NOT_ALLOWED: Method Not Allowed"
+ },
+ "406": {
+ "description": "NOT_ACCEPTABLE: Not Acceptable"
+ },
+ "415": {
+ "description": "UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type"
+ }
+ }
+ }
+ },
+ "/api/v0/repositories/{namespace}/{reponame}/pruningPolicies": {
+ "get": {
+ "description": "*Authorization:* Client must be authenticated as a user who has visibility to the repository.",
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "repositories"
+ ],
+ "summary": "List the pruning policies for a repository",
+ "operationId": "ListRepoPruningPolicies",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "namespace/owner of repository",
+ "name": "namespace",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of repository",
+ "name": "reponame",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "The ID of the first record on the page",
+ "name": "pageStart",
+ "in": "query"
+ },
+ {
+ "type": "integer",
+ "default": 10,
+ "description": "Maximum number of results to return",
+ "name": "pageSize",
+ "in": "query"
+ },
+ {
+ "type": "boolean",
+ "default": false,
+ "description": "Whether to include the resource count in the response header",
+ "name": "count",
+ "in": "query"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK",
+ "schema": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/responses.PruningPolicy"
+ }
+ }
+ },
+ "401": {
+ "description": "NOT_AUTHENTICATED: The client is not authenticated."
+ },
+ "403": {
+ "description": "NOT_AUTHORIZED: The client is not authorized."
+ },
+ "404": {
+ "description": "NO_SUCH_REPOSITORY: A repository with the given name does not exist."
+ },
+ "405": {
+ "description": "NOT_ALLOWED: Method Not Allowed"
+ },
+ "406": {
+ "description": "NOT_ACCEPTABLE: Not Acceptable"
+ },
+ "415": {
+ "description": "UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type"
+ },
+ "default": {
+ "description": "OK",
+ "schema": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/responses.PruningPolicy"
+ }
+ }
+ }
+ }
+ },
+ "post": {
+ "description": "*Authorization:* Client must be authenticated as a user who has \"admin\" level access to the repository.\nRules for the policy can be on the following fields and their respective operators:\n- \"tag\"\n\t- \"eq\": equals\n\t- \"sw\": starts with\n\t- \"ew\": ends with\n\t- \"c\": contains\n\t- \"oo\": one of\n\t- \"noo\": not one of\n- \"license.name\"\n\t- \"oo\": one of\n\t- \"noo\": not one of\n- \"component.name\"\n\t- \"oo\": one of\n\t- \"noo\": not one of\n- \"vulnerability_all\"\n\t- \"gte\": greater than or equals\n\t- \"gt\": greater than\n\t- \"eq\": equals\n\t- \"neq\": not equals\n\t- \"lte\": less than or equals\n\t- \"lt\": less than\n- \"vulnerability_critical\"\n\t- \"gte\": greater than or equals\n\t- \"gt\": greater than\n\t- \"eq\": equals\n\t- \"neq\": not equals\n\t- \"lte\": less than or equals\n\t- \"lt\": less than\n- \"vulnerability_major\"\n\t- \"gte\": greater than or equals\n\t- \"gt\": greater than\n\t- \"eq\": equals\n\t- \"neq\": not equals\n\t- \"lte\": less than or equals\n\t- \"lt\": less than\n- \"vulnerability_minor\"\n\t- \"gte\": greater than or equals\n\t- \"gt\": greater than\n\t- \"eq\": equals\n\t- \"neq\": not equals\n\t- \"lte\": less than or equals\n\t- \"lt\": less than\n- \"updated_at\"\n\t- \"bf\": before\n\t- \"af\": after\n- \"updated_at_duration\"\n\t- \"bf\": before\n\t- \"af\": after\n",
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "repositories"
+ ],
+ "summary": "Create a pruning policy for a repository",
+ "operationId": "CreateRepoPruningPolicy",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "namespace/owner of repository",
+ "name": "namespace",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of repository",
+ "name": "reponame",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "boolean",
+ "default": true,
+ "description": "Whether to evaluate the policy on creation",
+ "name": "initialEvaluation",
+ "in": "query"
+ },
+ {
+ "name": "body",
+ "in": "body",
+ "required": true,
+ "schema": {
+ "$ref": "#/definitions/forms.CreatePruningPolicy"
+ }
+ }
+ ],
+ "responses": {
+ "201": {
+ "description": "success",
+ "schema": {
+ "$ref": "#/definitions/responses.PruningPolicy"
+ }
+ },
+ "400": {
+ "description": "REMOTE_REGISTRY_INVALID_PERMISSIONS: Remote user not authorized to access the requested resource."
+ },
+ "401": {
+ "description": "NOT_AUTHENTICATED: The client is not authenticated."
+ },
+ "403": {
+ "description": "NOT_AUTHORIZED: The client is not authorized."
+ },
+ "404": {
+ "description": "INVALID_PRUNING_POLICY: The given pruning policy is invalid."
+ },
+ "405": {
+ "description": "NOT_ALLOWED: Method Not Allowed"
+ },
+ "406": {
+ "description": "NOT_ACCEPTABLE: Not Acceptable"
+ },
+ "415": {
+ "description": "UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type"
+ }
+ }
+ }
+ },
+ "/api/v0/repositories/{namespace}/{reponame}/pruningPolicies/test": {
+ "post": {
+ "description": "*Authorization:* Client must be authenticated as a user who has \"admin\" level access to the repository.",
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "repositories"
+ ],
+ "summary": "Test a pruning policy for a repository",
+ "operationId": "TestRepoPruningPolicy",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "namespace/owner of repository",
+ "name": "namespace",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of repository",
+ "name": "reponame",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "The ID of the first record on the page",
+ "name": "pageStart",
+ "in": "query"
+ },
+ {
+ "type": "integer",
+ "default": 10,
+ "description": "Maximum number of results to return",
+ "name": "pageSize",
+ "in": "query"
+ },
+ {
+ "type": "boolean",
+ "default": false,
+ "description": "Whether to include the resource count in the response header",
+ "name": "count",
+ "in": "query"
+ },
+ {
+ "name": "body",
+ "in": "body",
+ "required": true,
+ "schema": {
+ "$ref": "#/definitions/forms.CreatePruningPolicy"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK",
+ "schema": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/responses.ThinTag"
+ }
+ }
+ },
+ "400": {
+ "description": "REMOTE_REGISTRY_INVALID_PERMISSIONS: Remote user not authorized to access the requested resource."
+ },
+ "401": {
+ "description": "NOT_AUTHENTICATED: The client is not authenticated."
+ },
+ "403": {
+ "description": "NOT_AUTHORIZED: The client is not authorized."
+ },
+ "404": {
+ "description": "INVALID_PRUNING_POLICY: The given pruning policy is invalid."
+ },
+ "405": {
+ "description": "NOT_ALLOWED: Method Not Allowed"
+ },
+ "406": {
+ "description": "NOT_ACCEPTABLE: Not Acceptable"
+ },
+ "415": {
+ "description": "UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type"
+ },
+ "default": {
+ "description": "OK",
+ "schema": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/responses.ThinTag"
+ }
+ }
+ }
+ }
+ }
+ },
+ "/api/v0/repositories/{namespace}/{reponame}/pruningPolicies/{pruningpolicyid}": {
+ "get": {
+ "description": "\n*Authorization:* Client must be authenticated as a user who has visibility to the local repository.\n\t\t",
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "repositories"
+ ],
+ "summary": "Retrieve a specific pruning policy for a repository",
+ "operationId": "GetRepoPruningPolicy",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "namespace/owner of repository",
+ "name": "namespace",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of repository",
+ "name": "reponame",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "pruning policy id",
+ "name": "pruningpolicyid",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK",
+ "schema": {
+ "$ref": "#/definitions/responses.PruningPolicy"
+ }
+ },
+ "401": {
+ "description": "NOT_AUTHENTICATED: The client is not authenticated."
+ },
+ "403": {
+ "description": "NOT_AUTHORIZED: The client is not authorized."
+ },
+ "404": {
+ "description": "NO_SUCH_PRUNING_POLICY: A pruning policy with the given id does not exist."
+ },
+ "405": {
+ "description": "NOT_ALLOWED: Method Not Allowed"
+ },
+ "406": {
+ "description": "NOT_ACCEPTABLE: Not Acceptable"
+ },
+ "415": {
+ "description": "UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type"
+ },
+ "default": {
+ "description": "OK",
+ "schema": {
+ "$ref": "#/definitions/responses.PruningPolicy"
+ }
+ }
+ }
+ },
+ "put": {
+ "description": "\n*Authorization:* Client must be authenticated as a user who has \"admin\" level access to the repository.\n\t\t",
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "repositories"
+ ],
+ "summary": "Updates a specific pruning policy for a repository",
+ "operationId": "UpdateRepoPruningPolicy",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "namespace/owner of repository",
+ "name": "namespace",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of repository",
+ "name": "reponame",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "pruning policy id",
+ "name": "pruningpolicyid",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "boolean",
+ "default": true,
+ "description": "Whether to evaluate the policy on creation",
+ "name": "initialEvaluation",
+ "in": "query"
+ },
+ {
+ "name": "body",
+ "in": "body",
+ "required": true,
+ "schema": {
+ "$ref": "#/definitions/forms.UpdatePruningPolicy"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK",
+ "schema": {
+ "$ref": "#/definitions/responses.PruningPolicy"
+ }
+ },
+ "400": {
+ "description": "REMOTE_REGISTRY_INVALID_PERMISSIONS: Remote user not authorized to access the requested resource."
+ },
+ "401": {
+ "description": "NOT_AUTHENTICATED: The client is not authenticated."
+ },
+ "403": {
+ "description": "NOT_AUTHORIZED: The client is not authorized."
+ },
+ "404": {
+ "description": "INVALID_PRUNING_POLICY: The given pruning policy is invalid."
+ },
+ "405": {
+ "description": "NOT_ALLOWED: Method Not Allowed"
+ },
+ "406": {
+ "description": "NOT_ACCEPTABLE: Not Acceptable"
+ },
+ "415": {
+ "description": "UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type"
+ },
+ "default": {
+ "description": "OK",
+ "schema": {
+ "$ref": "#/definitions/responses.PruningPolicy"
+ }
+ }
+ }
+ },
+ "delete": {
+ "description": "\n*Authorization:* Client must be authenticated as a user who has \"admin\" level access to the repository.\n\t\t",
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "repositories"
+ ],
+ "summary": "Deletes a specific pruning policy for a repository",
+ "operationId": "DeleteRepoPruningPolicy",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "namespace/owner of repository",
+ "name": "namespace",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of repository",
+ "name": "reponame",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "pruning policy id",
+ "name": "pruningpolicyid",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "204": {
+ "description": "success or pruning policy does not exist"
+ },
+ "401": {
+ "description": "NOT_AUTHENTICATED: The client is not authenticated."
+ },
+ "403": {
+ "description": "NOT_AUTHORIZED: The client is not authorized."
+ },
+ "404": {
+ "description": "NO_SUCH_PRUNING_POLICY: A pruning policy with the given id does not exist."
+ },
+ "405": {
+ "description": "NOT_ALLOWED: Method Not Allowed"
+ },
+ "406": {
+ "description": "NOT_ACCEPTABLE: Not Acceptable"
+ },
+ "415": {
+ "description": "UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type"
+ }
+ }
+ }
+ },
+ "/api/v0/repositories/{namespace}/{reponame}/pushMirroringPolicies": {
+ "get": {
+ "description": "\n*Authorization:* Client must be authenticated as a user who has visibility to local repository.\n\t\t",
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "repositories"
+ ],
+ "summary": "List the push mirroring policies for a repository",
+ "operationId": "ListRepoPushMirroringPolicies",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "namespace/owner of repository",
+ "name": "namespace",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of repository",
+ "name": "reponame",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK",
+ "schema": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/responses.PushMirroringPolicy"
+ }
+ }
+ },
+ "401": {
+ "description": "NOT_AUTHENTICATED: The client is not authenticated."
+ },
+ "403": {
+ "description": "NOT_AUTHORIZED: The client is not authorized."
+ },
+ "404": {
+ "description": "NO_SUCH_REPOSITORY: A repository with the given name does not exist."
+ },
+ "405": {
+ "description": "NOT_ALLOWED: Method Not Allowed"
+ },
+ "406": {
+ "description": "NOT_ACCEPTABLE: Not Acceptable"
+ },
+ "415": {
+ "description": "UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type"
+ },
+ "default": {
+ "description": "OK",
+ "schema": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/responses.PushMirroringPolicy"
+ }
+ }
+ }
+ }
+ },
+ "post": {
+ "description": "*Authorization:* Client must be authenticated as a user who has \"admin\" level access to the local repository and credentials to the remote repository.\nRules for the policy can be on the following fields and their respective operators:\n- \"tag\"\n\t- \"eq\": equals\n\t- \"sw\": starts with\n\t- \"ew\": ends with\n\t- \"c\": contains\n\t- \"oo\": one of\n\t- \"noo\": not one of\n- \"license.name\"\n\t- \"oo\": one of\n\t- \"noo\": not one of\n- \"component.name\"\n\t- \"oo\": one of\n\t- \"noo\": not one of\n- \"vulnerability_all\"\n\t- \"gte\": greater than or equals\n\t- \"gt\": greater than\n\t- \"eq\": equals\n\t- \"neq\": not equals\n\t- \"lte\": less than or equals\n\t- \"lt\": less than\n- \"vulnerability_critical\"\n\t- \"gte\": greater than or equals\n\t- \"gt\": greater than\n\t- \"eq\": equals\n\t- \"neq\": not equals\n\t- \"lte\": less than or equals\n\t- \"lt\": less than\n- \"vulnerability_major\"\n\t- \"gte\": greater than or equals\n\t- \"gt\": greater than\n\t- \"eq\": equals\n\t- \"neq\": not equals\n\t- \"lte\": less than or equals\n\t- \"lt\": less than\n- \"vulnerability_minor\"\n\t- \"gte\": greater than or equals\n\t- \"gt\": greater than\n\t- \"eq\": equals\n\t- \"neq\": not equals\n\t- \"lte\": less than or equals\n\t- \"lt\": less than\n- \"updated_at\"\n\t- \"bf\": before\n\t- \"af\": after\n- \"updated_at_duration\"\n\t- \"bf\": before\n\t- \"af\": after\n\nThe tag template is used to rename the tag in the target repository. The\nfollowing symbols are allowed:\n- \"%n\": The tag to promote (e.g. 1, 4.5, latest)\n- \"%A\": Day of the week (e.g. Sunday, Monday)\n- \"%a\": Day of the week, abbreviated (e.g. Sun, Mon , Tue)\n- \"%w\": Day of the week, as a number (e.g. 0, 1, 6)\n- \"%d\": Number for the day of the month (e.g. 01, 15, 31)\n- \"%B\": Month (e.g. January, December)\n- \"%b\": Month, abbreviated (e.g. Jan, Jun, Dec)\n- \"%m\": Month, as a number (e.g. 01, 06, 12)\n- \"%Y\": Year (e.g. 1999, 2015, 2048)\n- \"%y\": Year, two digits (e.g. 99, 15, 48)\n- \"%H\": Hour, in 24 hour format (e.g. 00, 12, 23)\n- \"%I\": Hour, in 12 hour format (e.g. 01, 10, 10)\n- \"%p\": Period of the day (e.g. AM, PM)\n- \"%M\": Minute (e.g. 00, 10, 59)\n- \"%S\": Second (e.g. 00, 10, 59)\n- \"%f\": Microsecond (e.g. 000000, 999999)\n- \"%Z\": Name for the timezone (e.g. UTC, PST, EST)\n- \"%j\": Day of the year (e.g. 001, 200, 366)\n- \"%W\": Week of the year (e.g. 00, 10 , 53)\n",
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "repositories"
+ ],
+ "summary": "Create a push mirroring policy for a repository",
+ "operationId": "CreateRepoPushMirroringPolicy",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "namespace/owner of repository",
+ "name": "namespace",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of repository",
+ "name": "reponame",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "boolean",
+ "default": true,
+ "description": "Whether to evaluate the policy on creation",
+ "name": "initialEvaluation",
+ "in": "query"
+ },
+ {
+ "name": "body",
+ "in": "body",
+ "required": true,
+ "schema": {
+ "$ref": "#/definitions/forms.CreatePushMirroringPolicy"
+ }
+ }
+ ],
+ "responses": {
+ "201": {
+ "description": "success",
+ "schema": {
+ "$ref": "#/definitions/responses.PushMirroringPolicy"
+ }
+ },
+ "400": {
+ "description": "REMOTE_REGISTRY_INVALID_PERMISSIONS: Remote user not authorized to access the requested resource."
+ },
+ "401": {
+ "description": "NOT_AUTHENTICATED: The client is not authenticated."
+ },
+ "403": {
+ "description": "NOT_AUTHORIZED: The client is not authorized."
+ },
+ "404": {
+ "description": "INVALID_PUSH_MIRRORING_POLICY: The given push mirroring policy is invalid."
+ },
+ "405": {
+ "description": "NOT_ALLOWED: Method Not Allowed"
+ },
+ "406": {
+ "description": "NOT_ACCEPTABLE: Not Acceptable"
+ },
+ "415": {
+ "description": "UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type"
+ }
+ }
+ }
+ },
+ "/api/v0/repositories/{namespace}/{reponame}/pushMirroringPolicies/{pushmirroringpolicyid}": {
+ "get": {
+ "description": "\n*Authorization:* Client must be authenticated as a user who has visibility to the local repository.\n\t\t",
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "repositories"
+ ],
+ "summary": "Retrieve a specific push mirroring policy for a repository",
+ "operationId": "GetRepoPushMirroringPolicy",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "namespace/owner of repository",
+ "name": "namespace",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of repository",
+ "name": "reponame",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "push mirroring policy id",
+ "name": "pushmirroringpolicyid",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK",
+ "schema": {
+ "$ref": "#/definitions/responses.PushMirroringPolicy"
+ }
+ },
+ "401": {
+ "description": "NOT_AUTHENTICATED: The client is not authenticated."
+ },
+ "403": {
+ "description": "NOT_AUTHORIZED: The client is not authorized."
+ },
+ "404": {
+ "description": "NO_SUCH_PUSH_MIRRORING_POLICY: A push mirroring policy with the given id does not exist."
+ },
+ "405": {
+ "description": "NOT_ALLOWED: Method Not Allowed"
+ },
+ "406": {
+ "description": "NOT_ACCEPTABLE: Not Acceptable"
+ },
+ "415": {
+ "description": "UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type"
+ },
+ "default": {
+ "description": "OK",
+ "schema": {
+ "$ref": "#/definitions/responses.PushMirroringPolicy"
+ }
+ }
+ }
+ },
+ "put": {
+ "description": "\n*Authorization:* Client must be authenticated as a user who has \"admin\" level access to the local repository and credentials to the remote repository.\n\t\t",
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "repositories"
+ ],
+ "summary": "Updates a specific push mirroring policy for a repository",
+ "operationId": "UpdateRepoPushMirroringPolicy",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "namespace/owner of repository",
+ "name": "namespace",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of repository",
+ "name": "reponame",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "push mirroring policy id",
+ "name": "pushmirroringpolicyid",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "boolean",
+ "default": true,
+ "description": "Whether to evaluate the policy on creation",
+ "name": "initialEvaluation",
+ "in": "query"
+ },
+ {
+ "name": "body",
+ "in": "body",
+ "required": true,
+ "schema": {
+ "$ref": "#/definitions/forms.UpdatePushMirroringPolicy"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK",
+ "schema": {
+ "$ref": "#/definitions/responses.PushMirroringPolicy"
+ }
+ },
+ "400": {
+ "description": "REMOTE_REGISTRY_INVALID_PERMISSIONS: Remote user not authorized to access the requested resource."
+ },
+ "401": {
+ "description": "NOT_AUTHENTICATED: The client is not authenticated."
+ },
+ "403": {
+ "description": "NOT_AUTHORIZED: The client is not authorized."
+ },
+ "404": {
+ "description": "INVALID_PUSH_MIRRORING_POLICY: The given push mirroring policy is invalid."
+ },
+ "405": {
+ "description": "NOT_ALLOWED: Method Not Allowed"
+ },
+ "406": {
+ "description": "NOT_ACCEPTABLE: Not Acceptable"
+ },
+ "415": {
+ "description": "UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type"
+ },
+ "default": {
+ "description": "OK",
+ "schema": {
+ "$ref": "#/definitions/responses.PushMirroringPolicy"
+ }
+ }
+ }
+ },
+ "delete": {
+ "description": "\n*Authorization:* Client must be authenticated as a user who has \"admin\" level access to the local repository.\n\t\t",
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "repositories"
+ ],
+ "summary": "Deletes a specific push mirroring policy for a repository",
+ "operationId": "DeleteRepoPushMirroringPolicy",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "namespace/owner of repository",
+ "name": "namespace",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of repository",
+ "name": "reponame",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "push mirroring policy id",
+ "name": "pushmirroringpolicyid",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "204": {
+ "description": "success or push mirroring policy does not exist"
+ },
+ "401": {
+ "description": "NOT_AUTHENTICATED: The client is not authenticated."
+ },
+ "403": {
+ "description": "NOT_AUTHORIZED: The client is not authorized."
+ },
+ "404": {
+ "description": "NO_SUCH_PUSH_MIRRORING_POLICY: A push mirroring policy with the given id does not exist."
+ },
+ "405": {
+ "description": "NOT_ALLOWED: Method Not Allowed"
+ },
+ "406": {
+ "description": "NOT_ACCEPTABLE: Not Acceptable"
+ },
+ "415": {
+ "description": "UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type"
+ }
+ }
+ }
+ },
+ "/api/v0/repositories/{namespace}/{reponame}/tags": {
+ "get": {
+ "description": "\n*Authorization:* Client must be authenticated as a user who has visibility to the repository.\n\t\t",
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "repositories"
+ ],
+ "summary": "List the available tags for a repository",
+ "operationId": "ListRepoTags",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "namespace/owner of repository",
+ "name": "namespace",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of repository",
+ "name": "reponame",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "The ID of the first record on the page",
+ "name": "pageStart",
+ "in": "query"
+ },
+ {
+ "type": "integer",
+ "default": 10,
+ "description": "Maximum number of results to return",
+ "name": "pageSize",
+ "in": "query"
+ },
+ {
+ "type": "boolean",
+ "default": false,
+ "description": "Whether to include the resource count in the response header",
+ "name": "count",
+ "in": "query"
+ },
+ {
+ "type": "boolean",
+ "default": false,
+ "description": "Whether to include the manifest for each tag",
+ "name": "includeManifests",
+ "in": "query"
+ },
+ {
+ "type": "string",
+ "description": "The domain used to push tags to DTR. Must be set to obtain/manipulate Notary related information",
+ "name": "domain",
+ "in": "query"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK",
+ "schema": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/responses.ListTag"
+ }
+ }
+ },
+ "401": {
+ "description": "NOT_AUTHENTICATED: The client is not authenticated."
+ },
+ "403": {
+ "description": "NOT_AUTHORIZED: The client is not authorized."
+ },
+ "404": {
+ "description": "NO_SUCH_REPOSITORY: A repository with the given name does not exist."
+ },
+ "405": {
+ "description": "NOT_ALLOWED: Method Not Allowed"
+ },
+ "406": {
+ "description": "NOT_ACCEPTABLE: Not Acceptable"
+ },
+ "415": {
+ "description": "UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type"
+ },
+ "default": {
+ "description": "OK",
+ "schema": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/responses.ListTag"
+ }
+ }
+ }
+ }
+ }
+ },
+ "/api/v0/repositories/{namespace}/{reponame}/tags/{reference}": {
+ "get": {
+ "description": "\n*Authorization:* Client must be authenticated as a user who has visibility to the repository.\nIf the ref given is to a manifest list, multiple Tag objects will be returned, one for each manifest in the list.\nSimilarly if the ref is a digest the API will return all tags referencing that digest.\n\t\t",
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "repositories"
+ ],
+ "summary": "Retrieve a specific tag for a repository",
+ "operationId": "ListRepoTag",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "namespace/owner of repository",
+ "name": "namespace",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of repository",
+ "name": "reponame",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "digest or tag for an image manifest",
+ "name": "reference",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "The domain used to push tags to DTR. Must be set to obtain/manipulate Notary related information",
+ "name": "domain",
+ "in": "query"
+ },
+ {
+ "type": "string",
+ "description": "Operating system of the tag",
+ "name": "os",
+ "in": "query"
+ },
+ {
+ "type": "string",
+ "description": "Architecture of the tag",
+ "name": "arch",
+ "in": "query"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK",
+ "schema": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/responses.Tag"
+ }
+ }
+ },
+ "401": {
+ "description": "NOT_AUTHENTICATED: The client is not authenticated."
+ },
+ "403": {
+ "description": "NOT_AUTHORIZED: The client is not authorized."
+ },
+ "404": {
+ "description": "NO_SUCH_REF: A ref with the given name does not exist for the given repository."
+ },
+ "405": {
+ "description": "NOT_ALLOWED: Method Not Allowed"
+ },
+ "406": {
+ "description": "NOT_ACCEPTABLE: Not Acceptable"
+ },
+ "415": {
+ "description": "UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type"
+ },
+ "default": {
+ "description": "OK",
+ "schema": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/responses.Tag"
+ }
+ }
+ }
+ }
+ }
+ },
+ "/api/v0/repositories/{namespace}/{reponame}/tags/{tag}": {
+ "delete": {
+ "description": "\n*Authorization:* Client must be authenticated as a user who has \"write\" level access to the repository.\n\t\t",
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "repositories"
+ ],
+ "summary": "Delete a tag for a repository",
+ "operationId": "DeleteRepoTag",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "namespace/owner of repository",
+ "name": "namespace",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of repository",
+ "name": "reponame",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "tag name",
+ "name": "tag",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "The domain used to push tags to DTR. Must be set to obtain/manipulate Notary related information",
+ "name": "domain",
+ "in": "query"
+ }
+ ],
+ "responses": {
+ "204": {
+ "description": "success"
+ },
+ "401": {
+ "description": "NOT_AUTHENTICATED: The client is not authenticated."
+ },
+ "403": {
+ "description": "NOT_AUTHORIZED: The client is not authorized."
+ },
+ "404": {
+ "description": "NO_SUCH_TAG: A tag with the given name does not exist for the given repository."
+ },
+ "405": {
+ "description": "NOT_ALLOWED: Method Not Allowed"
+ },
+ "406": {
+ "description": "NOT_ACCEPTABLE: Not Acceptable"
+ },
+ "409": {
+ "description": "TAG_IN_NOTARY: This tag is in notary and can't be deleted until it is removed from notary"
+ },
+ "415": {
+ "description": "UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type"
+ }
+ }
+ }
+ },
+ "/api/v0/repositories/{namespace}/{reponame}/tags/{tag}/promotion": {
+ "post": {
+ "description": "\n*Authorization:* Client must be authenticated as a user who has \"read\" level access to the source repository and \"write\" level access to the target repository.\n\t\t",
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "repositories"
+ ],
+ "summary": "Promotes a specific tag for a repository",
+ "operationId": "CreateRepoTagPromotion",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "namespace/owner of repository",
+ "name": "namespace",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of repository",
+ "name": "reponame",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "tag name",
+ "name": "tag",
+ "in": "path",
+ "required": true
+ },
+ {
+ "name": "body",
+ "in": "body",
+ "required": true,
+ "schema": {
+ "$ref": "#/definitions/forms.CreatePromotion"
+ }
+ }
+ ],
+ "responses": {
+ "201": {
+ "description": "success",
+ "schema": {
+ "$ref": "#/definitions/responses.Promotion"
+ }
+ },
+ "400": {
+ "description": "INVALID_TAG_NAME: The given tag name is either too long or contains illegal characters."
+ },
+ "401": {
+ "description": "NOT_AUTHENTICATED: The client is not authenticated."
+ },
+ "403": {
+ "description": "NOT_AUTHORIZED: The client is not authorized."
+ },
+ "404": {
+ "description": "NO_SUCH_TAG: A tag with the given name does not exist for the given repository."
+ },
+ "405": {
+ "description": "NOT_ALLOWED: Method Not Allowed"
+ },
+ "406": {
+ "description": "NOT_ACCEPTABLE: Not Acceptable"
+ },
+ "415": {
+ "description": "UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type"
+ }
+ }
+ }
+ },
+ "/api/v0/repositories/{namespace}/{reponame}/tags/{tag}/pushMirroring": {
+ "post": {
+ "description": "\n*Authorization:* Client must be authenticated as a user who has \"read\" level access to the local repository and \"write\" level access to the remote repository.\n\t\t",
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "repositories"
+ ],
+ "summary": "Mirrors a local tag by pushing to a remote repository",
+ "operationId": "CreateRepoTagPushMirroring",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "namespace/owner of repository",
+ "name": "namespace",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of repository",
+ "name": "reponame",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "tag name",
+ "name": "tag",
+ "in": "path",
+ "required": true
+ },
+ {
+ "name": "body",
+ "in": "body",
+ "required": true,
+ "schema": {
+ "$ref": "#/definitions/forms.CreateMirroring"
+ }
+ }
+ ],
+ "responses": {
+ "201": {
+ "description": "success",
+ "schema": {
+ "$ref": "#/definitions/responses.Mirroring"
+ }
+ },
+ "400": {
+ "description": "INVALID_TAG_NAME: The given tag name is either too long or contains illegal characters."
+ },
+ "401": {
+ "description": "NOT_AUTHENTICATED: The client is not authenticated."
+ },
+ "403": {
+ "description": "NOT_AUTHORIZED: The client is not authorized."
+ },
+ "404": {
+ "description": "NO_SUCH_TAG: A tag with the given name does not exist for the given repository."
+ },
+ "405": {
+ "description": "NOT_ALLOWED: Method Not Allowed"
+ },
+ "406": {
+ "description": "NOT_ACCEPTABLE: Not Acceptable"
+ },
+ "415": {
+ "description": "UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type"
+ }
+ }
+ }
+ },
+ "/api/v0/repositories/{namespace}/{reponame}/teamAccess": {
+ "get": {
+ "description": "\n*Authorization:* Client must be authenticated as a user who has \"admin\" level access to the repository.\n\t\t",
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "repositories"
+ ],
+ "summary": "List teams granted access to an organization-owned repository",
+ "operationId": "ListRepoTeamAccess",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "namespace/owner of repository",
+ "name": "namespace",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of repository",
+ "name": "reponame",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "The ID of the first record on the page",
+ "name": "pageStart",
+ "in": "query"
+ },
+ {
+ "type": "integer",
+ "default": 10,
+ "description": "Maximum number of results to return",
+ "name": "pageSize",
+ "in": "query"
+ },
+ {
+ "type": "boolean",
+ "default": false,
+ "description": "Whether to include the resource count in the response header",
+ "name": "count",
+ "in": "query"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK",
+ "schema": {
+ "$ref": "#/definitions/responses.ListRepoTeamAccess"
+ }
+ },
+ "401": {
+ "description": "NOT_AUTHENTICATED: The client is not authenticated."
+ },
+ "403": {
+ "description": "NOT_AUTHORIZED: The client is not authorized."
+ },
+ "404": {
+ "description": "NO_SUCH_REPOSITORY: A repository with the given name does not exist."
+ },
+ "405": {
+ "description": "NOT_ALLOWED: Method Not Allowed"
+ },
+ "406": {
+ "description": "NOT_ACCEPTABLE: Not Acceptable"
+ },
+ "415": {
+ "description": "UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type"
+ },
+ "default": {
+ "description": "OK",
+ "schema": {
+ "$ref": "#/definitions/responses.ListRepoTeamAccess"
+ }
+ }
+ }
+ }
+ },
+ "/api/v0/repositories/{namespace}/{reponame}/teamAccess/{teamname}": {
+ "put": {
+ "description": "\n*Authorization:* Client must be authenticated as a user who has \"admin\" level access to the repository.\n\t\t",
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "repositories"
+ ],
+ "summary": "Set a team's access to an orgnization-owned repository",
+ "operationId": "GrantRepoTeamAccess",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "namespace/owner of repository",
+ "name": "namespace",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of repository",
+ "name": "reponame",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "team name",
+ "name": "teamname",
+ "in": "path",
+ "required": true
+ },
+ {
+ "name": "body",
+ "in": "body",
+ "required": true,
+ "schema": {
+ "$ref": "#/definitions/forms.Access"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK",
+ "schema": {
+ "$ref": "#/definitions/responses.ListRepoTeamAccess"
+ }
+ },
+ "400": {
+ "description": "the team does not belong to the organization"
+ },
+ "401": {
+ "description": "NOT_AUTHENTICATED: The client is not authenticated."
+ },
+ "403": {
+ "description": "NOT_AUTHORIZED: The client is not authorized."
+ },
+ "404": {
+ "description": "NO_SUCH_TEAM: A team with the given name does not exist in the organization."
+ },
+ "405": {
+ "description": "NOT_ALLOWED: Method Not Allowed"
+ },
+ "406": {
+ "description": "NOT_ACCEPTABLE: Not Acceptable"
+ },
+ "415": {
+ "description": "UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type"
+ },
+ "default": {
+ "description": "OK",
+ "schema": {
+ "$ref": "#/definitions/responses.ListRepoTeamAccess"
+ }
+ }
+ }
+ },
+ "delete": {
+ "description": "\n*Authorization:* Client must be authenticated as a user who has \"admin\" level access to the repository.\n\t\t",
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "repositories"
+ ],
+ "summary": "Revoke a team's acccess to an organization-owned repository",
+ "operationId": "RevokeRepoTeamAccess",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "namespace/owner of repository",
+ "name": "namespace",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of repository",
+ "name": "reponame",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "team name",
+ "name": "teamname",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "204": {
+ "description": "success or the team is not in the access list or there is no such team in the organization"
+ },
+ "400": {
+ "description": "the repository is not owned by an organization"
+ },
+ "401": {
+ "description": "NOT_AUTHENTICATED: The client is not authenticated."
+ },
+ "403": {
+ "description": "NOT_AUTHORIZED: The client is not authorized."
+ },
+ "404": {
+ "description": "NO_SUCH_TEAM: A team with the given name does not exist in the organization."
+ },
+ "405": {
+ "description": "NOT_ALLOWED: Method Not Allowed"
+ },
+ "406": {
+ "description": "NOT_ACCEPTABLE: Not Acceptable"
+ },
+ "415": {
+ "description": "UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type"
+ }
+ }
+ }
+ },
+ "/api/v0/repositories/{namespace}/{reponame}/webhooks": {
+ "get": {
+ "description": "\n*Authorization:* Client must be authenticated as a user who has \"admin\" level access to the repository.\n\t\t",
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "repositories"
+ ],
+ "summary": "List the webhook subscriptions for a repository",
+ "operationId": "ListRepoWebhooks",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "namespace/owner of repository",
+ "name": "namespace",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of repository",
+ "name": "reponame",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK",
+ "schema": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/responses.Webhook"
+ }
+ }
+ },
+ "401": {
+ "description": "NOT_AUTHENTICATED: The client is not authenticated."
+ },
+ "403": {
+ "description": "NOT_AUTHORIZED: The client is not authorized."
+ },
+ "404": {
+ "description": "NO_SUCH_REPOSITORY: A repository with the given name does not exist."
+ },
+ "405": {
+ "description": "NOT_ALLOWED: Method Not Allowed"
+ },
+ "406": {
+ "description": "NOT_ACCEPTABLE: Not Acceptable"
+ },
+ "415": {
+ "description": "UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type"
+ },
+ "default": {
+ "description": "OK",
+ "schema": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/responses.Webhook"
+ }
+ }
+ }
+ }
+ }
+ },
+ "/api/v0/repositoryNamespaces/{namespace}/teamAccess": {
+ "get": {
+ "description": "\n*Authorization:* Client must be authenticated as an admin or a member of the organization.\n\t\t",
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "repositoryNamespaces"
+ ],
+ "summary": "List teams granted access to an organization-owned namespace of repositories",
+ "operationId": "ListRepoNamespaceTeamAccess",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "namespace/owner of repository",
+ "name": "namespace",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "The ID of the first record on the page",
+ "name": "pageStart",
+ "in": "query"
+ },
+ {
+ "type": "integer",
+ "default": 10,
+ "description": "Maximum number of results to return",
+ "name": "pageSize",
+ "in": "query"
+ },
+ {
+ "type": "boolean",
+ "default": false,
+ "description": "Whether to include the resource count in the response header",
+ "name": "count",
+ "in": "query"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK",
+ "schema": {
+ "$ref": "#/definitions/responses.ListRepoNamespaceTeamAccess"
+ }
+ },
+ "400": {
+ "description": "the namespace is not owned by an organization"
+ },
+ "401": {
+ "description": "NOT_AUTHENTICATED: The client is not authenticated."
+ },
+ "403": {
+ "description": "NOT_AUTHORIZED: The client is not authorized."
+ },
+ "404": {
+ "description": "NO_SUCH_ACCOUNT: An account with the given name does not exist."
+ },
+ "405": {
+ "description": "NOT_ALLOWED: Method Not Allowed"
+ },
+ "406": {
+ "description": "NOT_ACCEPTABLE: Not Acceptable"
+ },
+ "415": {
+ "description": "UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type"
+ },
+ "default": {
+ "description": "OK",
+ "schema": {
+ "$ref": "#/definitions/responses.ListRepoNamespaceTeamAccess"
+ }
+ }
+ }
+ }
+ },
+ "/api/v0/repositoryNamespaces/{namespace}/teamAccess/{teamname}": {
+ "get": {
+ "description": "\n*Authorization:* Client must be authenticated as a user who has \"admin\" level\naccess to the namespace or is a member of the team.\n\t\t",
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "repositoryNamespaces"
+ ],
+ "summary": "Get a team's granted access to an organization-owned namespace of repositories",
+ "operationId": "GetRepoNamespaceTeamAccess",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "namespace/owner of repository",
+ "name": "namespace",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "team name",
+ "name": "teamname",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK",
+ "schema": {
+ "$ref": "#/definitions/responses.NamespaceTeamAccess"
+ }
+ },
+ "401": {
+ "description": "NOT_AUTHENTICATED: The client is not authenticated."
+ },
+ "403": {
+ "description": "NOT_AUTHORIZED: The client is not authorized."
+ },
+ "404": {
+ "description": "NO_SUCH_NAMESPACE_TEAM_ACCESS: An access grant for the given team in the given namespace does not exist."
+ },
+ "405": {
+ "description": "NOT_ALLOWED: Method Not Allowed"
+ },
+ "406": {
+ "description": "NOT_ACCEPTABLE: Not Acceptable"
+ },
+ "415": {
+ "description": "UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type"
+ },
+ "default": {
+ "description": "OK",
+ "schema": {
+ "$ref": "#/definitions/responses.NamespaceTeamAccess"
+ }
+ }
+ }
+ },
+ "put": {
+ "description": "\n*Authorization:* Client must be authenticated as a user who has \"admin\" level access to the namespace.\n\t\t",
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "repositoryNamespaces"
+ ],
+ "summary": "Set a team's access to an organization-owned namespace of repositories",
+ "operationId": "GrantRepoNamespaceTeamAccess",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "namespace/owner of repository",
+ "name": "namespace",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "team name",
+ "name": "teamname",
+ "in": "path",
+ "required": true
+ },
+ {
+ "name": "body",
+ "in": "body",
+ "required": true,
+ "schema": {
+ "$ref": "#/definitions/forms.Access"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK",
+ "schema": {
+ "$ref": "#/definitions/responses.NamespaceTeamAccess"
+ }
+ },
+ "400": {
+ "description": "the team does not belong to the owning organization"
+ },
+ "401": {
+ "description": "NOT_AUTHENTICATED: The client is not authenticated."
+ },
+ "403": {
+ "description": "NOT_AUTHORIZED: The client is not authorized."
+ },
+ "404": {
+ "description": "NO_SUCH_TEAM: A team with the given name does not exist in the organization."
+ },
+ "405": {
+ "description": "NOT_ALLOWED: Method Not Allowed"
+ },
+ "406": {
+ "description": "NOT_ACCEPTABLE: Not Acceptable"
+ },
+ "415": {
+ "description": "UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type"
+ },
+ "default": {
+ "description": "OK",
+ "schema": {
+ "$ref": "#/definitions/responses.NamespaceTeamAccess"
+ }
+ }
+ }
+ },
+ "delete": {
+ "description": "\n*Authorization:* Client must be authenticated as a user who has \"admin\" level access to the namespace.\n\t\t",
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "repositoryNamespaces"
+ ],
+ "summary": "Revoke a team's access to an organization-owned namespace of repositories",
+ "operationId": "RevokeRepoNamespaceTeamAccess",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "namespace/owner of repository",
+ "name": "namespace",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "team name",
+ "name": "teamname",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "204": {
+ "description": "success or the team does not exist in the access list or there is no such team in the organization"
+ },
+ "401": {
+ "description": "NOT_AUTHENTICATED: The client is not authenticated."
+ },
+ "403": {
+ "description": "NOT_AUTHORIZED: The client is not authorized."
+ },
+ "404": {
+ "description": "NO_SUCH_TEAM: A team with the given name does not exist in the organization."
+ },
+ "405": {
+ "description": "NOT_ALLOWED: Method Not Allowed"
+ },
+ "406": {
+ "description": "NOT_ACCEPTABLE: Not Acceptable"
+ },
+ "415": {
+ "description": "UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type"
+ }
+ }
+ }
+ },
+ "/api/v0/webhooks": {
+ "get": {
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "webhooks"
+ ],
+ "summary": "List Webhooks",
+ "operationId": "ListWebhooks",
+ "parameters": [
+ {
+ "type": "string",
+ "default": "any",
+ "description": "The type of webhook to list",
+ "name": "webhookType",
+ "in": "query"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK",
+ "schema": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/responses.Webhook"
+ }
+ }
+ },
+ "400": {
+ "description": "INVALID_JSON: Unable to parse JSON"
+ },
+ "401": {
+ "description": "NOT_AUTHENTICATED: The client is not authenticated."
+ },
+ "403": {
+ "description": "NOT_AUTHORIZED: The client is not authorized."
+ },
+ "405": {
+ "description": "NOT_ALLOWED: Method Not Allowed"
+ },
+ "406": {
+ "description": "NOT_ACCEPTABLE: Not Acceptable"
+ },
+ "415": {
+ "description": "UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type"
+ },
+ "default": {
+ "description": "OK",
+ "schema": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/responses.Webhook"
+ }
+ }
+ }
+ }
+ },
+ "post": {
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "webhooks"
+ ],
+ "summary": "Create Webhook",
+ "operationId": "CreateWebhook",
+ "parameters": [
+ {
+ "name": "body",
+ "in": "body",
+ "required": true,
+ "schema": {
+ "$ref": "#/definitions/forms.Webhook"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK",
+ "schema": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/responses.Webhook"
+ }
+ }
+ },
+ "400": {
+ "description": "INVALID_JSON: Unable to parse JSON"
+ },
+ "401": {
+ "description": "NOT_AUTHENTICATED: The client is not authenticated."
+ },
+ "403": {
+ "description": "NOT_AUTHORIZED: The client is not authorized."
+ },
+ "404": {
+ "description": "NO_SUCH_ACCOUNT: An account with the given name does not exist."
+ },
+ "405": {
+ "description": "NOT_ALLOWED: Method Not Allowed"
+ },
+ "406": {
+ "description": "NOT_ACCEPTABLE: Not Acceptable"
+ },
+ "415": {
+ "description": "UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type"
+ },
+ "default": {
+ "description": "OK",
+ "schema": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/responses.Webhook"
+ }
+ }
+ }
+ }
+ }
+ },
+ "/api/v0/webhooks/test": {
+ "post": {
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "webhooks"
+ ],
+ "summary": "Test Webhook",
+ "operationId": "TestWebhook",
+ "parameters": [
+ {
+ "name": "body",
+ "in": "body",
+ "required": true,
+ "schema": {
+ "$ref": "#/definitions/forms.WebhookTestPayload"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK"
+ },
+ "400": {
+ "description": "INVALID_JSON: Unable to parse JSON"
+ },
+ "401": {
+ "description": "NOT_AUTHENTICATED: The client is not authenticated."
+ },
+ "403": {
+ "description": "NOT_AUTHORIZED: The client is not authorized."
+ },
+ "405": {
+ "description": "NOT_ALLOWED: Method Not Allowed"
+ },
+ "406": {
+ "description": "NOT_ACCEPTABLE: Not Acceptable"
+ },
+ "415": {
+ "description": "UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type"
+ },
+ "default": {
+ "description": "OK"
+ }
+ }
+ }
+ },
+ "/api/v0/webhooks/update": {
+ "post": {
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "webhooks"
+ ],
+ "summary": "Update Webhook",
+ "operationId": "UpdateWebhook",
+ "parameters": [
+ {
+ "name": "body",
+ "in": "body",
+ "required": true,
+ "schema": {
+ "$ref": "#/definitions/forms.WebhookUpdate"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK",
+ "schema": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/responses.Webhook"
+ }
+ }
+ },
+ "400": {
+ "description": "INVALID_JSON: Unable to parse JSON"
+ },
+ "401": {
+ "description": "NOT_AUTHENTICATED: The client is not authenticated."
+ },
+ "403": {
+ "description": "NOT_AUTHORIZED: The client is not authorized."
+ },
+ "405": {
+ "description": "NOT_ALLOWED: Method Not Allowed"
+ },
+ "406": {
+ "description": "NOT_ACCEPTABLE: Not Acceptable"
+ },
+ "415": {
+ "description": "UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type"
+ },
+ "default": {
+ "description": "OK",
+ "schema": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/responses.Webhook"
+ }
+ }
+ }
+ }
+ }
+ },
+ "/api/v0/webhooks/{webhook}": {
+ "delete": {
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "webhooks"
+ ],
+ "summary": "Delete Webhook",
+ "operationId": "DeleteWebhook",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "webhook subscription ID",
+ "name": "webhook",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK"
+ },
+ "401": {
+ "description": "NOT_AUTHENTICATED: The client is not authenticated."
+ },
+ "403": {
+ "description": "NOT_AUTHORIZED: The client is not authorized."
+ },
+ "404": {
+ "description": "NO_SUCH_WEBHOOK: A webhook subscription with the given name does not exist for the given repository."
+ },
+ "405": {
+ "description": "NOT_ALLOWED: Method Not Allowed"
+ },
+ "406": {
+ "description": "NOT_ACCEPTABLE: Not Acceptable"
+ },
+ "415": {
+ "description": "UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type"
+ },
+ "default": {
+ "description": "OK"
+ }
+ }
+ }
+ },
+ "/api/v0/workers": {
+ "get": {
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "workers"
+ ],
+ "summary": "List all workers",
+ "operationId": "ListWorkers",
+ "responses": {
+ "200": {
+ "description": "Success, list of workers returned.",
+ "schema": {
+ "$ref": "#/definitions/tmpresponses.Workers"
+ }
+ },
+ "default": {
+ "description": "Success, list of workers returned.",
+ "schema": {
+ "$ref": "#/definitions/tmpresponses.Workers"
+ }
+ }
+ }
+ }
+ },
+ "/api/v0/workers/{id}/capacity": {
+ "post": {
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "workers"
+ ],
+ "summary": "Update the capacity for a worker",
+ "operationId": "UpdateWorkerCapacity",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "ID of worker to update",
+ "name": "id",
+ "in": "path",
+ "required": true
+ },
+ {
+ "name": "body",
+ "in": "body",
+ "required": true,
+ "schema": {
+ "$ref": "#/definitions/tmpforms.UpdateWorkerCapacity"
+ }
+ }
+ ],
+ "responses": {
+ "202": {
+ "description": "Success."
+ }
+ }
+ }
+ }
+ },
+ "definitions": {
+ "forms.Access": {
+ "required": [
+ "accessLevel"
+ ],
+ "properties": {
+ "accessLevel": {
+ "type": "string",
+ "enum": [
+ "read-only",
+ "read-write",
+ "admin"
+ ]
+ }
+ }
+ },
+ "forms.CreateAPIToken": {
+ "properties": {
+ "tokenLabel": {
+ "type": "string"
+ }
+ }
+ },
+ "forms.CreateContentCache": {
+ "required": [
+ "name",
+ "host"
+ ],
+ "properties": {
+ "host": {
+ "type": "string"
+ },
+ "name": {
+ "type": "string"
+ }
+ }
+ },
+ "forms.CreateMirroring": {
+ "required": [
+ "remoteHost",
+ "remoteRepository",
+ "remoteCA",
+ "skipTLSVerification",
+ "remoteTag",
+ "username",
+ "password",
+ "authToken"
+ ],
+ "properties": {
+ "authToken": {
+ "type": "string"
+ },
+ "password": {
+ "type": "string"
+ },
+ "remoteCA": {
+ "type": "string"
+ },
+ "remoteHost": {
+ "type": "string"
+ },
+ "remoteRepository": {
+ "type": "string"
+ },
+ "remoteTag": {
+ "type": "string"
+ },
+ "skipTLSVerification": {
+ "type": "boolean"
+ },
+ "username": {
+ "type": "string"
+ }
+ }
+ },
+ "forms.CreatePollMirroringPolicy": {
+ "required": [
+ "remoteHost",
+ "remoteRepository",
+ "remoteCA",
+ "skipTLSVerification",
+ "enabled",
+ "username",
+ "password",
+ "authToken"
+ ],
+ "properties": {
+ "authToken": {
+ "type": "string"
+ },
+ "enabled": {
+ "type": "boolean"
+ },
+ "password": {
+ "type": "string"
+ },
+ "remoteCA": {
+ "type": "string"
+ },
+ "remoteHost": {
+ "type": "string"
+ },
+ "remoteRepository": {
+ "type": "string"
+ },
+ "skipTLSVerification": {
+ "type": "boolean"
+ },
+ "username": {
+ "type": "string"
+ }
+ }
+ },
+ "forms.CreatePromotion": {
+ "required": [
+ "targetRepository",
+ "targetTag"
+ ],
+ "properties": {
+ "targetRepository": {
+ "type": "string"
+ },
+ "targetTag": {
+ "type": "string"
+ }
+ }
+ },
+ "forms.CreatePromotionPolicy": {
+ "required": [
+ "rules",
+ "targetRepository",
+ "tagTemplate",
+ "enabled"
+ ],
+ "properties": {
+ "enabled": {
+ "type": "boolean"
+ },
+ "rules": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/ruleengine.Rule"
+ }
+ },
+ "tagTemplate": {
+ "type": "string"
+ },
+ "targetRepository": {
+ "type": "string"
+ }
+ }
+ },
+ "forms.CreatePruningPolicy": {
+ "required": [
+ "rules",
+ "enabled"
+ ],
+ "properties": {
+ "enabled": {
+ "type": "boolean"
+ },
+ "rules": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/ruleengine.Rule"
+ }
+ }
+ }
+ },
+ "forms.CreatePushMirroringPolicy": {
+ "required": [
+ "rules",
+ "remoteHost",
+ "remoteRepository",
+ "remoteCA",
+ "skipTLSVerification",
+ "tagTemplate",
+ "enabled",
+ "username",
+ "password",
+ "authToken"
+ ],
+ "properties": {
+ "authToken": {
+ "type": "string"
+ },
+ "enabled": {
+ "type": "boolean"
+ },
+ "password": {
+ "type": "string"
+ },
+ "remoteCA": {
+ "type": "string"
+ },
+ "remoteHost": {
+ "type": "string"
+ },
+ "remoteRepository": {
+ "type": "string"
+ },
+ "rules": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/ruleengine.Rule"
+ }
+ },
+ "skipTLSVerification": {
+ "type": "boolean"
+ },
+ "tagTemplate": {
+ "type": "string"
+ },
+ "username": {
+ "type": "string"
+ }
+ }
+ },
+ "forms.CreateRemoteRegistryCheck": {
+ "required": [
+ "remoteHost",
+ "remoteRepository",
+ "remoteCA",
+ "skipTLSVerification",
+ "username",
+ "password",
+ "authToken"
+ ],
+ "properties": {
+ "authToken": {
+ "type": "string"
+ },
+ "password": {
+ "type": "string"
+ },
+ "remoteCA": {
+ "type": "string"
+ },
+ "remoteHost": {
+ "type": "string"
+ },
+ "remoteRepository": {
+ "type": "string"
+ },
+ "skipTLSVerification": {
+ "type": "boolean"
+ },
+ "username": {
+ "type": "string"
+ }
+ }
+ },
+ "forms.CreateRepo": {
+ "required": [
+ "name",
+ "shortDescription",
+ "longDescription",
+ "scanOnPush",
+ "immutableTags",
+ "enableManifestLists",
+ "tagLimit"
+ ],
+ "properties": {
+ "enableManifestLists": {
+ "type": "boolean"
+ },
+ "immutableTags": {
+ "type": "boolean"
+ },
+ "longDescription": {
+ "type": "string"
+ },
+ "name": {
+ "type": "string"
+ },
+ "scanOnPush": {
+ "type": "boolean"
+ },
+ "shortDescription": {
+ "type": "string"
+ },
+ "tagLimit": {
+ "type": "integer",
+ "format": "integer"
+ },
+ "visibility": {
+ "type": "string",
+ "enum": [
+ "public",
+ "private"
+ ]
+ }
+ }
+ },
+ "forms.DeleteMirroringPolicyIDs": {
+ "required": [
+ "id"
+ ],
+ "properties": {
+ "id": {
+ "type": "string"
+ }
+ }
+ },
+ "forms.EmptyForm": {},
+ "forms.Image": {
+ "required": [
+ "name",
+ "digest"
+ ],
+ "properties": {
+ "digest": {
+ "type": "string"
+ },
+ "name": {
+ "type": "string"
+ }
+ }
+ },
+ "forms.ImagesForm": {
+ "required": [
+ "images"
+ ],
+ "properties": {
+ "images": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/forms.Image"
+ }
+ }
+ }
+ },
+ "forms.ScanOptions": {
+ "required": [
+ "scan",
+ "check"
+ ],
+ "properties": {
+ "check": {
+ "type": "boolean"
+ },
+ "scan": {
+ "type": "boolean"
+ }
+ }
+ },
+ "forms.Settings": {
+ "required": [
+ "dtrHost",
+ "sso",
+ "createRepositoryOnPush",
+ "disableUpgrades",
+ "reportAnalytics",
+ "anonymizeAnalytics",
+ "disableBackupWarning",
+ "webTLSCert",
+ "webTLSKey",
+ "webTLSCA",
+ "scanningEnabled",
+ "scanningSyncOnline",
+ "scanningDeadline",
+ "scanningEnableAutoRecheck",
+ "jobHistoryCompactionEnabled",
+ "jobHistoryToKeep",
+ "jobHistoryMaxAge",
+ "repoEventHistoryCompactionEnabled",
+ "repoEventHistoryToKeep",
+ "repoEventHistoryMaxAge",
+ "readOnlyRegistry"
+ ],
+ "properties": {
+ "anonymizeAnalytics": {
+ "type": "boolean"
+ },
+ "createRepositoryOnPush": {
+ "type": "boolean"
+ },
+ "disableBackupWarning": {
+ "type": "boolean"
+ },
+ "disableUpgrades": {
+ "type": "boolean"
+ },
+ "dtrHost": {
+ "type": "string"
+ },
+ "jobHistoryCompactionEnabled": {
+ "type": "boolean"
+ },
+ "jobHistoryMaxAge": {
+ "type": "string"
+ },
+ "jobHistoryToKeep": {
+ "type": "integer",
+ "format": "int64"
+ },
+ "readOnlyRegistry": {
+ "type": "boolean"
+ },
+ "repoEventHistoryCompactionEnabled": {
+ "type": "boolean"
+ },
+ "repoEventHistoryMaxAge": {
+ "type": "string"
+ },
+ "repoEventHistoryToKeep": {
+ "type": "integer",
+ "format": "int64"
+ },
+ "reportAnalytics": {
+ "type": "boolean"
+ },
+ "scanningDeadline": {
+ "type": "integer"
+ },
+ "scanningEnableAutoRecheck": {
+ "type": "boolean"
+ },
+ "scanningEnabled": {
+ "type": "boolean"
+ },
+ "scanningSyncOnline": {
+ "type": "boolean"
+ },
+ "sso": {
+ "type": "boolean"
+ },
+ "webTLSCA": {
+ "type": "string"
+ },
+ "webTLSCert": {
+ "type": "string"
+ },
+ "webTLSKey": {
+ "type": "string"
+ }
+ }
+ },
+ "forms.ToggleScanOnPush": {
+ "required": [
+ "scanOnPush"
+ ],
+ "properties": {
+ "scanOnPush": {
+ "type": "boolean"
+ }
+ }
+ },
+ "forms.UpdateAPIToken": {
+ "properties": {
+ "isActive": {
+ "type": "boolean"
+ },
+ "tokenLabel": {
+ "type": "string"
+ }
+ }
+ },
+ "forms.UpdatePollMirroringPolicy": {
+ "properties": {
+ "authToken": {
+ "type": "string"
+ },
+ "enabled": {
+ "type": "boolean"
+ },
+ "password": {
+ "type": "string"
+ },
+ "remoteCA": {
+ "type": "string"
+ },
+ "remoteHost": {
+ "type": "string"
+ },
+ "remoteRepository": {
+ "type": "string"
+ },
+ "skipTLSVerification": {
+ "type": "boolean"
+ },
+ "username": {
+ "type": "string"
+ }
+ }
+ },
+ "forms.UpdatePromotionPolicy": {
+ "properties": {
+ "enabled": {
+ "type": "boolean"
+ },
+ "rules": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/ruleengine.Rule"
+ }
+ },
+ "tagTemplate": {
+ "type": "string"
+ },
+ "targetRepository": {
+ "type": "string"
+ }
+ }
+ },
+ "forms.UpdatePruningPolicy": {
+ "properties": {
+ "enabled": {
+ "type": "boolean"
+ },
+ "rules": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/ruleengine.Rule"
+ }
+ }
+ }
+ },
+ "forms.UpdatePushMirroringPolicy": {
+ "properties": {
+ "authToken": {
+ "type": "string"
+ },
+ "enabled": {
+ "type": "boolean"
+ },
+ "password": {
+ "type": "string"
+ },
+ "remoteCA": {
+ "type": "string"
+ },
+ "remoteHost": {
+ "type": "string"
+ },
+ "remoteRepository": {
+ "type": "string"
+ },
+ "rules": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/ruleengine.Rule"
+ }
+ },
+ "skipTLSVerification": {
+ "type": "boolean"
+ },
+ "tagTemplate": {
+ "type": "string"
+ },
+ "username": {
+ "type": "string"
+ }
+ }
+ },
+ "forms.UpdateRepo": {
+ "required": [
+ "immutableTags"
+ ],
+ "properties": {
+ "enableManifestLists": {
+ "type": "boolean"
+ },
+ "immutableTags": {
+ "type": "boolean"
+ },
+ "longDescription": {
+ "type": "string"
+ },
+ "scanOnPush": {
+ "type": "boolean"
+ },
+ "shortDescription": {
+ "type": "string"
+ },
+ "tagLimit": {
+ "type": "integer",
+ "format": "integer"
+ },
+ "visibility": {
+ "type": "string",
+ "enum": [
+ "public",
+ "private"
+ ]
+ }
+ }
+ },
+ "forms.UserSettings": {
+ "properties": {
+ "contentCacheUUID": {
+ "type": "string"
+ }
+ }
+ },
+ "forms.VulnOverrideOption": {
+ "required": [
+ "component",
+ "componentVersion",
+ "cve",
+ "notes"
+ ],
+ "properties": {
+ "component": {
+ "type": "string"
+ },
+ "componentVersion": {
+ "type": "string"
+ },
+ "cve": {
+ "type": "string"
+ },
+ "notes": {
+ "type": "string"
+ }
+ }
+ },
+ "forms.Webhook": {
+ "required": [
+ "endpoint",
+ "tlsCert",
+ "skipTLSVerification"
+ ],
+ "properties": {
+ "endpoint": {
+ "type": "string"
+ },
+ "key": {
+ "type": "string"
+ },
+ "skipTLSVerification": {
+ "type": "boolean"
+ },
+ "tlsCert": {
+ "type": "string"
+ },
+ "type": {
+ "type": "string",
+ "enum": [
+ "TAG_PUSH",
+ "TAG_PULL",
+ "TAG_DELETE",
+ "PROMOTION",
+ "PUSH_MIRRORING",
+ "POLL_MIRRORING",
+ "MANIFEST_PUSH",
+ "MANIFEST_PULL",
+ "MANIFEST_DELETE",
+ "REPO_EVENT",
+ "SCAN_COMPLETED",
+ "SCAN_FAILED",
+ "SCANNER_UPDATE_COMPLETED"
+ ]
+ }
+ }
+ },
+ "forms.WebhookTestPayload": {
+ "required": [
+ "type",
+ "endpoint",
+ "tlsCert",
+ "skipTLSVerification"
+ ],
+ "properties": {
+ "endpoint": {
+ "type": "string"
+ },
+ "skipTLSVerification": {
+ "type": "boolean"
+ },
+ "tlsCert": {
+ "type": "string"
+ },
+ "type": {
+ "type": "string"
+ }
+ }
+ },
+ "forms.WebhookUpdate": {
+ "required": [
+ "id",
+ "inactive",
+ "tlsCert",
+ "skipTLSVerification"
+ ],
+ "properties": {
+ "id": {
+ "type": "string"
+ },
+ "inactive": {
+ "type": "boolean"
+ },
+ "skipTLSVerification": {
+ "type": "boolean"
+ },
+ "tlsCert": {
+ "type": "string"
+ }
+ }
+ },
+ "responses.APIToken": {
+ "required": [
+ "hashedToken",
+ "tokenLabel",
+ "isActive",
+ "lastUsed",
+ "createdAt",
+ "generatedBy",
+ "creatorUa"
+ ],
+ "properties": {
+ "createdAt": {
+ "type": "string",
+ "format": "date-time"
+ },
+ "creatorUa": {
+ "type": "string"
+ },
+ "generatedBy": {
+ "type": "string"
+ },
+ "hashedToken": {
+ "type": "string"
+ },
+ "isActive": {
+ "type": "boolean"
+ },
+ "lastUsed": {
+ "type": "string",
+ "format": "date-time"
+ },
+ "tokenLabel": {
+ "type": "string"
+ }
+ }
+ },
+ "responses.Account": {
+ "required": [
+ "name",
+ "id",
+ "fullName",
+ "isOrg"
+ ],
+ "properties": {
+ "fullName": {
+ "description": "Full Name of the account",
+ "type": "string"
+ },
+ "id": {
+ "description": "ID of the account",
+ "type": "string"
+ },
+ "isActive": {
+ "description": "Whether the user is active and can login (users only)",
+ "type": "boolean"
+ },
+ "isAdmin": {
+ "description": "Whether the user is a system admin (users only)",
+ "type": "boolean"
+ },
+ "isImported": {
+ "description": "Whether the user was imported from an upstream identity provider",
+ "type": "boolean"
+ },
+ "isOrg": {
+ "description": "Whether the account is an organization (or user)",
+ "type": "boolean"
+ },
+ "membersCount": {
+ "description": "The number of members of the organization",
+ "type": "integer",
+ "format": "int32"
+ },
+ "name": {
+ "description": "Name of the account",
+ "type": "string"
+ },
+ "teamsCount": {
+ "description": "The number of teams in the organization",
+ "type": "integer",
+ "format": "int32"
+ }
+ }
+ },
+ "responses.Alert": {
+ "required": [
+ "message"
+ ],
+ "properties": {
+ "class": {
+ "type": "string"
+ },
+ "id": {
+ "type": "string"
+ },
+ "img": {
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ },
+ "url": {
+ "type": "string"
+ }
+ }
+ },
+ "responses.Autocomplete": {
+ "properties": {
+ "accountResults": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/responses.Account"
+ }
+ },
+ "repositoryResults": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/responses.Repository"
+ }
+ }
+ }
+ },
+ "responses.ClusterStatus": {
+ "required": [
+ "rethink_system_tables",
+ "replica_health",
+ "replica_timestamp",
+ "replica_readonly",
+ "gc_lock_holder"
+ ],
+ "properties": {
+ "gc_lock_holder": {
+ "type": "string"
+ },
+ "replica_health": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "string"
+ }
+ },
+ "replica_readonly": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "boolean"
+ }
+ },
+ "replica_timestamp": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "string"
+ }
+ },
+ "rethink_system_tables": {
+ "type": "object"
+ }
+ }
+ },
+ "responses.Component": {
+ "required": [
+ "component",
+ "version",
+ "vulns",
+ "fullpath"
+ ],
+ "properties": {
+ "component": {
+ "type": "string"
+ },
+ "fullpath": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "license": {
+ "$ref": "#/definitions/responses.License"
+ },
+ "version": {
+ "type": "string"
+ },
+ "vulns": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/responses.VulnerabilityDetails"
+ }
+ }
+ }
+ },
+ "responses.ContentCache": {
+ "required": [
+ "id",
+ "name",
+ "host"
+ ],
+ "properties": {
+ "host": {
+ "type": "string"
+ },
+ "id": {
+ "type": "string"
+ },
+ "name": {
+ "type": "string"
+ }
+ }
+ },
+ "responses.DetailedSummary": {
+ "required": [
+ "sha256sum"
+ ],
+ "properties": {
+ "components": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/responses.Component"
+ }
+ },
+ "sha256sum": {
+ "type": "string"
+ }
+ }
+ },
+ "responses.DockerRepository": {
+ "required": [
+ "description",
+ "is_official",
+ "is_trusted",
+ "name",
+ "star_count"
+ ],
+ "properties": {
+ "description": {
+ "type": "string"
+ },
+ "is_official": {
+ "type": "boolean"
+ },
+ "is_trusted": {
+ "type": "boolean"
+ },
+ "name": {
+ "type": "string"
+ },
+ "star_count": {
+ "type": "integer",
+ "format": "int32"
+ }
+ }
+ },
+ "responses.DockerSearch": {
+ "required": [
+ "num_results",
+ "query",
+ "results"
+ ],
+ "properties": {
+ "num_results": {
+ "type": "integer",
+ "format": "int32"
+ },
+ "query": {
+ "type": "string"
+ },
+ "results": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/responses.DockerRepository"
+ }
+ }
+ }
+ },
+ "responses.DockerfileLine": {
+ "required": [
+ "line",
+ "layerDigest",
+ "size",
+ "isEmpty"
+ ],
+ "properties": {
+ "isEmpty": {
+ "type": "boolean"
+ },
+ "layerDigest": {
+ "type": "string"
+ },
+ "line": {
+ "type": "string"
+ },
+ "mediaType": {
+ "type": "string"
+ },
+ "size": {
+ "type": "integer",
+ "format": "int64"
+ },
+ "urls": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ }
+ }
+ },
+ "responses.Events": {
+ "required": [
+ "events"
+ ],
+ "properties": {
+ "events": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/schema.Event"
+ }
+ }
+ }
+ },
+ "responses.Features": {
+ "required": [
+ "scanningEnabled",
+ "scanningLicensed",
+ "promotionLicensed",
+ "mirroringLicensed",
+ "metadataStoreOptedIn",
+ "onlineGCEnabled",
+ "db_version",
+ "ucpHost"
+ ],
+ "properties": {
+ "db_version": {
+ "type": "integer",
+ "format": "int32"
+ },
+ "metadataStoreOptedIn": {
+ "type": "boolean"
+ },
+ "mirroringLicensed": {
+ "type": "boolean"
+ },
+ "onlineGCEnabled": {
+ "type": "boolean"
+ },
+ "promotionLicensed": {
+ "type": "boolean"
+ },
+ "scanningEnabled": {
+ "type": "boolean"
+ },
+ "scanningLicensed": {
+ "type": "boolean"
+ },
+ "ucpHost": {
+ "type": "string"
+ }
+ }
+ },
+ "responses.Language": {
+ "required": [
+ "language"
+ ],
+ "properties": {
+ "language": {
+ "type": "string"
+ }
+ }
+ },
+ "responses.LayerVulnOverride": {
+ "required": [
+ "pk",
+ "digest",
+ "component",
+ "componentVersion",
+ "cve",
+ "notes"
+ ],
+ "properties": {
+ "component": {
+ "type": "string"
+ },
+ "componentVersion": {
+ "type": "string"
+ },
+ "cve": {
+ "type": "string"
+ },
+ "digest": {
+ "type": "string"
+ },
+ "notes": {
+ "type": "string"
+ },
+ "pk": {
+ "type": "string"
+ }
+ }
+ },
+ "responses.License": {
+ "required": [
+ "name",
+ "type",
+ "url"
+ ],
+ "properties": {
+ "name": {
+ "type": "string"
+ },
+ "type": {
+ "type": "string"
+ },
+ "url": {
+ "type": "string"
+ }
+ }
+ },
+ "responses.ListRepoNamespaceTeamAccess": {
+ "required": [
+ "namespace",
+ "teamAccessList"
+ ],
+ "properties": {
+ "namespace": {
+ "type": "string"
+ },
+ "teamAccessList": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/responses.TeamAccess"
+ }
+ }
+ }
+ },
+ "responses.ListRepoTeamAccess": {
+ "required": [
+ "repository",
+ "teamAccessList"
+ ],
+ "properties": {
+ "repository": {
+ "$ref": "#/definitions/responses.Repository"
+ },
+ "teamAccessList": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/responses.TeamAccess"
+ }
+ }
+ }
+ },
+ "responses.ListTag": {
+ "required": [
+ "name",
+ "digest",
+ "author",
+ "updatedAt",
+ "createdAt",
+ "hashMismatch",
+ "inNotary",
+ "manifest"
+ ],
+ "properties": {
+ "author": {
+ "type": "string"
+ },
+ "createdAt": {
+ "type": "string",
+ "format": "date-time"
+ },
+ "digest": {
+ "type": "string"
+ },
+ "hashMismatch": {
+ "description": "true if the hashes from notary and registry don't match",
+ "type": "boolean"
+ },
+ "inNotary": {
+ "description": "true if the tag exists in Notary",
+ "type": "boolean"
+ },
+ "manifest": {
+ "$ref": "#/definitions/responses.Manifest"
+ },
+ "mirroring": {
+ "$ref": "#/definitions/responses.Mirroring"
+ },
+ "name": {
+ "type": "string"
+ },
+ "promotion": {
+ "$ref": "#/definitions/responses.Promotion"
+ },
+ "updatedAt": {
+ "type": "string",
+ "format": "date-time"
+ }
+ }
+ },
+ "responses.ListTeamRepoAccess": {
+ "required": [
+ "team",
+ "repositoryAccessList"
+ ],
+ "properties": {
+ "repositoryAccessList": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/responses.RepoAccess"
+ }
+ },
+ "team": {
+ "$ref": "#/definitions/responses.Team"
+ }
+ }
+ },
+ "responses.Manifest": {
+ "required": [
+ "digest"
+ ],
+ "properties": {
+ "architecture": {
+ "type": "string"
+ },
+ "author": {
+ "type": "string"
+ },
+ "configDigest": {
+ "type": "string"
+ },
+ "configMediaType": {
+ "type": "string"
+ },
+ "createdAt": {
+ "type": "string",
+ "format": "date-time"
+ },
+ "digest": {
+ "type": "string"
+ },
+ "dockerfile": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/responses.DockerfileLine"
+ }
+ },
+ "mediaType": {
+ "type": "string"
+ },
+ "os": {
+ "type": "string"
+ },
+ "osVersion": {
+ "type": "string"
+ },
+ "size": {
+ "type": "integer",
+ "format": "int64"
+ }
+ }
+ },
+ "responses.Mirroring": {
+ "required": [
+ "mirroringPolicyID",
+ "digest",
+ "remoteRepository",
+ "remoteTag"
+ ],
+ "properties": {
+ "digest": {
+ "type": "string"
+ },
+ "mirroringPolicyID": {
+ "type": "string"
+ },
+ "remoteRepository": {
+ "type": "string"
+ },
+ "remoteTag": {
+ "type": "string"
+ }
+ }
+ },
+ "responses.MirroringPolicy": {
+ "required": [
+ "id",
+ "mirroringType",
+ "username",
+ "localRepository",
+ "remoteHost",
+ "remoteRepository",
+ "remoteCA",
+ "skipTLSVerification",
+ "enabled",
+ "lastMirroredAt",
+ "lastStatus"
+ ],
+ "properties": {
+ "enabled": {
+ "type": "boolean"
+ },
+ "id": {
+ "type": "string"
+ },
+ "lastMirroredAt": {
+ "type": "string"
+ },
+ "lastStatus": {
+ "$ref": "#/definitions/schema.MirroringStatus"
+ },
+ "localRepository": {
+ "type": "string"
+ },
+ "mirroringType": {
+ "type": "string"
+ },
+ "remoteCA": {
+ "type": "string"
+ },
+ "remoteHost": {
+ "type": "string"
+ },
+ "remoteRepository": {
+ "type": "string"
+ },
+ "rules": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/ruleengine.Rule"
+ }
+ },
+ "skipTLSVerification": {
+ "type": "boolean"
+ },
+ "tagTemplate": {
+ "type": "string"
+ },
+ "username": {
+ "type": "string"
+ }
+ }
+ },
+ "responses.NamespaceTeamAccess": {
+ "required": [
+ "accessLevel",
+ "team",
+ "namespace"
+ ],
+ "properties": {
+ "accessLevel": {
+ "type": "string",
+ "enum": [
+ "read-only",
+ "read-write",
+ "admin"
+ ]
+ },
+ "namespace": {
+ "type": "string"
+ },
+ "team": {
+ "$ref": "#/definitions/responses.Team"
+ }
+ }
+ },
+ "responses.NautilusStatus": {
+ "required": [
+ "state",
+ "scanner_version",
+ "scannerUpdatedAt",
+ "db_version",
+ "db_updated_at",
+ "lastDBUpdateFailed",
+ "lastVulnOverridesDBUpdateFailed"
+ ],
+ "properties": {
+ "db_updated_at": {
+ "type": "string",
+ "format": "date-time"
+ },
+ "db_version": {
+ "type": "integer",
+ "format": "int32"
+ },
+ "lastDBUpdateFailed": {
+ "type": "boolean"
+ },
+ "lastVulnOverridesDBUpdateFailed": {
+ "type": "boolean"
+ },
+ "replicas": {
+ "type": "object",
+ "additionalProperties": {
+ "$ref": "#/definitions/schema.ScannerFingerprint"
+ }
+ },
+ "scannerUpdatedAt": {
+ "type": "string",
+ "format": "date-time"
+ },
+ "scanner_version": {
+ "type": "integer",
+ "format": "int32"
+ },
+ "state": {
+ "type": "integer",
+ "format": "int32"
+ }
+ }
+ },
+ "responses.NewAPIToken": {
+ "required": [
+ "token",
+ "hashedToken",
+ "tokenLabel",
+ "isActive",
+ "lastUsed",
+ "createdAt",
+ "generatedBy",
+ "creatorUa"
+ ],
+ "properties": {
+ "createdAt": {
+ "type": "string",
+ "format": "date-time"
+ },
+ "creatorUa": {
+ "type": "string"
+ },
+ "generatedBy": {
+ "type": "string"
+ },
+ "hashedToken": {
+ "type": "string"
+ },
+ "isActive": {
+ "type": "boolean"
+ },
+ "lastUsed": {
+ "type": "string",
+ "format": "date-time"
+ },
+ "token": {
+ "type": "string"
+ },
+ "tokenLabel": {
+ "type": "string"
+ }
+ }
+ },
+ "responses.Note": {
+ "required": [
+ "reason",
+ "type"
+ ],
+ "properties": {
+ "reason": {
+ "type": "string"
+ },
+ "type": {
+ "type": "string"
+ }
+ }
+ },
+ "responses.OldScanSummary": {
+ "required": [
+ "namespace",
+ "reponame",
+ "tag",
+ "critical",
+ "major",
+ "minor",
+ "last_scan_status",
+ "check_completed_at",
+ "should_rescan",
+ "has_foreign_layers"
+ ],
+ "properties": {
+ "check_completed_at": {
+ "type": "string",
+ "format": "date-time"
+ },
+ "critical": {
+ "type": "integer",
+ "format": "int32"
+ },
+ "has_foreign_layers": {
+ "type": "boolean"
+ },
+ "last_scan_status": {
+ "type": "integer",
+ "format": "int32"
+ },
+ "layer_details": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/responses.DetailedSummary"
+ }
+ },
+ "major": {
+ "type": "integer",
+ "format": "int32"
+ },
+ "minor": {
+ "type": "integer",
+ "format": "int32"
+ },
+ "namespace": {
+ "type": "string"
+ },
+ "reponame": {
+ "type": "string"
+ },
+ "should_rescan": {
+ "type": "boolean"
+ },
+ "tag": {
+ "type": "string"
+ }
+ }
+ },
+ "responses.PollMirroringPolicy": {
+ "required": [
+ "id",
+ "username",
+ "localRepository",
+ "remoteHost",
+ "remoteRepository",
+ "remoteCA",
+ "skipTLSVerification",
+ "enabled",
+ "lastMirroredAt",
+ "lastStatus"
+ ],
+ "properties": {
+ "enabled": {
+ "type": "boolean"
+ },
+ "id": {
+ "type": "string"
+ },
+ "lastMirroredAt": {
+ "type": "string"
+ },
+ "lastStatus": {
+ "$ref": "#/definitions/schema.MirroringStatus"
+ },
+ "localRepository": {
+ "type": "string"
+ },
+ "remoteCA": {
+ "type": "string"
+ },
+ "remoteHost": {
+ "type": "string"
+ },
+ "remoteRepository": {
+ "type": "string"
+ },
+ "skipTLSVerification": {
+ "type": "boolean"
+ },
+ "username": {
+ "type": "string"
+ }
+ }
+ },
+ "responses.Promotion": {
+ "required": [
+ "promotionPolicyID",
+ "string",
+ "sourceRepository",
+ "sourceTag"
+ ],
+ "properties": {
+ "promotionPolicyID": {
+ "type": "string"
+ },
+ "sourceRepository": {
+ "type": "string"
+ },
+ "sourceTag": {
+ "type": "string"
+ },
+ "string": {
+ "type": "string"
+ }
+ }
+ },
+ "responses.PromotionPolicy": {
+ "required": [
+ "id",
+ "rules",
+ "sourceRepository",
+ "targetRepository",
+ "tagTemplate",
+ "enabled",
+ "lastPromotedAt"
+ ],
+ "properties": {
+ "enabled": {
+ "type": "boolean"
+ },
+ "id": {
+ "type": "string"
+ },
+ "lastPromotedAt": {
+ "type": "string",
+ "format": "date-time"
+ },
+ "rules": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/ruleengine.Rule"
+ }
+ },
+ "sourceRepository": {
+ "type": "string"
+ },
+ "tagTemplate": {
+ "type": "string"
+ },
+ "targetRepository": {
+ "type": "string"
+ }
+ }
+ },
+ "responses.PruningPolicy": {
+ "required": [
+ "id",
+ "rules",
+ "repository",
+ "enabled",
+ "lastPrunedAt"
+ ],
+ "properties": {
+ "enabled": {
+ "type": "boolean"
+ },
+ "id": {
+ "type": "string"
+ },
+ "lastPrunedAt": {
+ "type": "string"
+ },
+ "repository": {
+ "type": "string"
+ },
+ "rules": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/ruleengine.Rule"
+ }
+ }
+ }
+ },
+ "responses.PushMirroringPolicy": {
+ "required": [
+ "id",
+ "rules",
+ "username",
+ "localRepository",
+ "remoteHost",
+ "remoteRepository",
+ "remoteCA",
+ "skipTLSVerification",
+ "tagTemplate",
+ "enabled",
+ "lastMirroredAt",
+ "lastStatus"
+ ],
+ "properties": {
+ "enabled": {
+ "type": "boolean"
+ },
+ "id": {
+ "type": "string"
+ },
+ "lastMirroredAt": {
+ "type": "string"
+ },
+ "lastStatus": {
+ "$ref": "#/definitions/schema.MirroringStatus"
+ },
+ "localRepository": {
+ "type": "string"
+ },
+ "remoteCA": {
+ "type": "string"
+ },
+ "remoteHost": {
+ "type": "string"
+ },
+ "remoteRepository": {
+ "type": "string"
+ },
+ "rules": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/ruleengine.Rule"
+ }
+ },
+ "skipTLSVerification": {
+ "type": "boolean"
+ },
+ "tagTemplate": {
+ "type": "string"
+ },
+ "username": {
+ "type": "string"
+ }
+ }
+ },
+ "responses.RemoteRegistryCheck": {
+ "required": [
+ "registryType",
+ "permissions"
+ ],
+ "properties": {
+ "permissions": {
+ "$ref": "#/definitions/responses.RemoteRepositoryPermissions"
+ },
+ "registryType": {
+ "type": "string"
+ }
+ }
+ },
+ "responses.RemoteRepositoryPermissions": {
+ "required": [
+ "read",
+ "write"
+ ],
+ "properties": {
+ "read": {
+ "type": "boolean"
+ },
+ "write": {
+ "type": "boolean"
+ }
+ }
+ },
+ "responses.ReplicaSettings": {
+ "required": [
+ "HTTPPort",
+ "HTTPSPort",
+ "node"
+ ],
+ "properties": {
+ "HTTPPort": {
+ "type": "integer"
+ },
+ "HTTPSPort": {
+ "type": "integer"
+ },
+ "node": {
+ "type": "string"
+ }
+ }
+ },
+ "responses.RepoAccess": {
+ "required": [
+ "accessLevel",
+ "repository"
+ ],
+ "properties": {
+ "accessLevel": {
+ "type": "string",
+ "enum": [
+ "read-only",
+ "read-write",
+ "admin"
+ ]
+ },
+ "repository": {
+ "$ref": "#/definitions/responses.Repository"
+ }
+ }
+ },
+ "responses.RepoUserAccess": {
+ "required": [
+ "accessLevel",
+ "user",
+ "repository"
+ ],
+ "properties": {
+ "accessLevel": {
+ "type": "string",
+ "enum": [
+ "read-only",
+ "read-write",
+ "admin"
+ ]
+ },
+ "repository": {
+ "$ref": "#/definitions/responses.Repository"
+ },
+ "user": {
+ "$ref": "#/definitions/responses.Account"
+ }
+ }
+ },
+ "responses.Repositories": {
+ "required": [
+ "repositories"
+ ],
+ "properties": {
+ "repositories": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/responses.Repository"
+ }
+ }
+ }
+ },
+ "responses.Repository": {
+ "required": [
+ "id",
+ "namespace",
+ "namespaceType",
+ "name",
+ "shortDescription",
+ "visibility",
+ "scanOnPush",
+ "immutableTags",
+ "enableManifestLists",
+ "pulls",
+ "pushes",
+ "tagLimit"
+ ],
+ "properties": {
+ "enableManifestLists": {
+ "type": "boolean"
+ },
+ "id": {
+ "type": "string"
+ },
+ "immutableTags": {
+ "type": "boolean"
+ },
+ "longDescription": {
+ "type": "string"
+ },
+ "name": {
+ "type": "string"
+ },
+ "namespace": {
+ "type": "string"
+ },
+ "namespaceType": {
+ "type": "string",
+ "enum": [
+ "user",
+ "organization"
+ ]
+ },
+ "pulls": {
+ "type": "integer",
+ "format": "integer"
+ },
+ "pushes": {
+ "type": "integer",
+ "format": "integer"
+ },
+ "scanOnPush": {
+ "type": "boolean"
+ },
+ "shortDescription": {
+ "type": "string"
+ },
+ "tagLimit": {
+ "type": "integer",
+ "format": "integer"
+ },
+ "visibility": {
+ "type": "string",
+ "enum": [
+ "public",
+ "private"
+ ]
+ }
+ }
+ },
+ "responses.ScanSummary": {
+ "required": [
+ "scannedImage",
+ "shouldRescan"
+ ],
+ "properties": {
+ "scanStatus": {
+ "type": "integer",
+ "format": "int32"
+ },
+ "scannedImage": {
+ "$ref": "#/definitions/schema.ScannedImage"
+ },
+ "shouldRescan": {
+ "type": "boolean"
+ }
+ }
+ },
+ "responses.Settings": {
+ "required": [
+ "dtrHost",
+ "sso",
+ "createRepositoryOnPush",
+ "replicaSettings",
+ "httpProxy",
+ "httpsProxy",
+ "noProxy",
+ "disableUpgrades",
+ "reportAnalytics",
+ "anonymizeAnalytics",
+ "disableBackupWarning",
+ "logProtocol",
+ "logHost",
+ "logLevel",
+ "webTLSCert",
+ "webTLSCA",
+ "replicaID",
+ "scanningEnabled",
+ "scanningSyncOnline",
+ "scanningDeadline",
+ "scanningEnableAutoRecheck",
+ "jobHistoryCompactionEnabled",
+ "jobHistoryToKeep",
+ "jobHistoryMaxAge",
+ "repoEventHistoryCompactionEnabled",
+ "repoEventHistoryToKeep",
+ "repoEventHistoryMaxAge",
+ "storageVolume",
+ "nfsHost",
+ "nfsPath",
+ "readOnlyRegistry"
+ ],
+ "properties": {
+ "anonymizeAnalytics": {
+ "type": "boolean"
+ },
+ "createRepositoryOnPush": {
+ "type": "boolean"
+ },
+ "disableBackupWarning": {
+ "type": "boolean"
+ },
+ "disableUpgrades": {
+ "type": "boolean"
+ },
+ "dtrHost": {
+ "type": "string"
+ },
+ "httpProxy": {
+ "type": "string"
+ },
+ "httpsProxy": {
+ "type": "string"
+ },
+ "jobHistoryCompactionEnabled": {
+ "type": "boolean"
+ },
+ "jobHistoryMaxAge": {
+ "type": "string"
+ },
+ "jobHistoryToKeep": {
+ "type": "integer",
+ "format": "int64"
+ },
+ "logHost": {
+ "type": "string"
+ },
+ "logLevel": {
+ "type": "string"
+ },
+ "logProtocol": {
+ "type": "string"
+ },
+ "nfsHost": {
+ "type": "string"
+ },
+ "nfsPath": {
+ "type": "string"
+ },
+ "noProxy": {
+ "type": "string"
+ },
+ "readOnlyRegistry": {
+ "type": "boolean"
+ },
+ "replicaID": {
+ "type": "string"
+ },
+ "replicaSettings": {
+ "type": "object",
+ "additionalProperties": {
+ "$ref": "#/definitions/responses.ReplicaSettings"
+ }
+ },
+ "repoEventHistoryCompactionEnabled": {
+ "type": "boolean"
+ },
+ "repoEventHistoryMaxAge": {
+ "type": "string"
+ },
+ "repoEventHistoryToKeep": {
+ "type": "integer",
+ "format": "int64"
+ },
+ "reportAnalytics": {
+ "type": "boolean"
+ },
+ "scanningDeadline": {
+ "type": "integer"
+ },
+ "scanningEnableAutoRecheck": {
+ "type": "boolean"
+ },
+ "scanningEnabled": {
+ "type": "boolean"
+ },
+ "scanningSyncOnline": {
+ "type": "boolean"
+ },
+ "sso": {
+ "type": "boolean"
+ },
+ "storageVolume": {
+ "type": "string"
+ },
+ "webTLSCA": {
+ "type": "string"
+ },
+ "webTLSCert": {
+ "type": "string"
+ }
+ }
+ },
+ "responses.Tag": {
+ "required": [
+ "digest",
+ "createdAt",
+ "inNotary",
+ "manifest",
+ "name",
+ "author",
+ "updatedAt",
+ "hashMismatch"
+ ],
+ "properties": {
+ "author": {
+ "type": "string"
+ },
+ "components": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/schema.ScannerComponent"
+ }
+ },
+ "createdAt": {
+ "type": "string",
+ "format": "date-time"
+ },
+ "digest": {
+ "type": "string"
+ },
+ "hashMismatch": {
+ "description": "true if the hashes from notary and registry don't match",
+ "type": "boolean"
+ },
+ "inNotary": {
+ "description": "true if the tag exists in Notary",
+ "type": "boolean"
+ },
+ "licenses": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/schema.ScannerLicense"
+ }
+ },
+ "manifest": {
+ "$ref": "#/definitions/responses.Manifest"
+ },
+ "mirroring": {
+ "$ref": "#/definitions/responses.Mirroring"
+ },
+ "name": {
+ "type": "string"
+ },
+ "promotion": {
+ "$ref": "#/definitions/responses.Promotion"
+ },
+ "updatedAt": {
+ "type": "string",
+ "format": "date-time"
+ },
+ "vuln_summary": {
+ "$ref": "#/definitions/responses.OldScanSummary"
+ }
+ }
+ },
+ "responses.Team": {
+ "required": [
+ "id",
+ "clientUserIsMember"
+ ],
+ "properties": {
+ "clientUserIsMember": {
+ "type": "boolean"
+ },
+ "id": {
+ "type": "string"
+ }
+ }
+ },
+ "responses.TeamAccess": {
+ "required": [
+ "accessLevel",
+ "team"
+ ],
+ "properties": {
+ "accessLevel": {
+ "type": "string",
+ "enum": [
+ "read-only",
+ "read-write",
+ "admin"
+ ]
+ },
+ "team": {
+ "$ref": "#/definitions/responses.Team"
+ }
+ }
+ },
+ "responses.ThinScanSummaries": {
+ "required": [
+ "images"
+ ],
+ "properties": {
+ "images": {
+ "type": "object",
+ "additionalProperties": {
+ "$ref": "#/definitions/schema.ScannerVulnCount"
+ }
+ }
+ }
+ },
+ "responses.ThinTag": {
+ "required": [
+ "name",
+ "digest"
+ ],
+ "properties": {
+ "digest": {
+ "type": "string"
+ },
+ "name": {
+ "type": "string"
+ }
+ }
+ },
+ "responses.UserSettings": {
+ "required": [
+ "ContentCacheUUID"
+ ],
+ "properties": {
+ "ContentCacheUUID": {
+ "type": "string"
+ }
+ }
+ },
+ "responses.Vulnerability": {
+ "required": [
+ "cve",
+ "cvss",
+ "summary"
+ ],
+ "properties": {
+ "cve": {
+ "type": "string"
+ },
+ "cvss": {
+ "type": "number",
+ "format": "float"
+ },
+ "summary": {
+ "type": "string"
+ }
+ }
+ },
+ "responses.VulnerabilityDetails": {
+ "required": [
+ "vuln",
+ "exact",
+ "notes"
+ ],
+ "properties": {
+ "exact": {
+ "type": "boolean"
+ },
+ "notes": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/responses.Note"
+ }
+ },
+ "vuln": {
+ "$ref": "#/definitions/responses.Vulnerability"
+ }
+ }
+ },
+ "responses.Webhook": {
+ "required": [
+ "id",
+ "type",
+ "key",
+ "endpoint",
+ "authorID",
+ "createdAt",
+ "inactive",
+ "tlsCert",
+ "skipTLSVerification"
+ ],
+ "properties": {
+ "authorID": {
+ "type": "string"
+ },
+ "createdAt": {
+ "type": "string",
+ "format": "date-time"
+ },
+ "endpoint": {
+ "type": "string"
+ },
+ "id": {
+ "type": "string"
+ },
+ "inactive": {
+ "type": "boolean"
+ },
+ "key": {
+ "type": "string"
+ },
+ "lastSuccessfulAt": {
+ "type": "string",
+ "format": "date-time"
+ },
+ "skipTLSVerification": {
+ "type": "boolean"
+ },
+ "tlsCert": {
+ "type": "string"
+ },
+ "type": {
+ "type": "string"
+ }
+ }
+ },
+ "ruleengine.Rule": {
+ "properties": {
+ "field": {
+ "type": "string"
+ },
+ "operator": {
+ "type": "string"
+ },
+ "values": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ }
+ }
+ },
+ "schema.Event": {
+ "required": [
+ "id",
+ "publishedAt",
+ "actor",
+ "actorType",
+ "type",
+ "object",
+ "repository"
+ ],
+ "properties": {
+ "actor": {
+ "type": "string"
+ },
+ "actorType": {
+ "type": "string"
+ },
+ "id": {
+ "type": "string"
+ },
+ "object": {
+ "$ref": "#/definitions/schema.Object"
+ },
+ "publishedAt": {
+ "type": "string",
+ "format": "date-time"
+ },
+ "repository": {
+ "type": "string"
+ },
+ "target": {
+ "$ref": "#/definitions/schema.Object"
+ },
+ "type": {
+ "type": "string"
+ }
+ }
+ },
+ "schema.LayerVulnOverride": {
+ "required": [
+ "pk",
+ "digest",
+ "component",
+ "componentVersion",
+ "cve",
+ "notes"
+ ],
+ "properties": {
+ "component": {
+ "type": "string"
+ },
+ "componentVersion": {
+ "type": "string"
+ },
+ "cve": {
+ "type": "string"
+ },
+ "digest": {
+ "type": "string"
+ },
+ "notes": {
+ "type": "string"
+ },
+ "pk": {
+ "type": "string"
+ }
+ }
+ },
+ "schema.MirroringStatus": {
+ "required": [
+ "code",
+ "detail",
+ "timestamp"
+ ],
+ "properties": {
+ "code": {
+ "type": "string"
+ },
+ "detail": {
+ "type": "string"
+ },
+ "timestamp": {
+ "type": "string",
+ "format": "date-time"
+ }
+ }
+ },
+ "schema.Object": {
+ "required": [
+ "id",
+ "type"
+ ],
+ "properties": {
+ "content": {
+ "type": "string"
+ },
+ "id": {
+ "type": "string"
+ },
+ "name": {
+ "type": "string"
+ },
+ "type": {
+ "type": "string"
+ }
+ }
+ },
+ "schema.ScannedImage": {
+ "required": [
+ "pk",
+ "namespace",
+ "repository",
+ "tag",
+ "manifestDigest",
+ "totalVulnCount",
+ "licenses",
+ "layers",
+ "components",
+ "cves",
+ "maxCVSSValue",
+ "scannerFingerprint",
+ "vulnOverrides"
+ ],
+ "properties": {
+ "components": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/schema.ScannerComponent"
+ }
+ },
+ "cves": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/schema.ScannerCVE"
+ }
+ },
+ "layers": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/schema.ScannerLayer"
+ }
+ },
+ "licenses": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/schema.ScannerLicense"
+ }
+ },
+ "manifestDigest": {
+ "type": "string"
+ },
+ "maxCVSSValue": {
+ "type": "number",
+ "format": "float"
+ },
+ "namespace": {
+ "type": "string"
+ },
+ "pk": {
+ "type": "string"
+ },
+ "repository": {
+ "type": "string"
+ },
+ "scannerFingerprint": {
+ "$ref": "#/definitions/schema.ScannerFingerprint"
+ },
+ "tag": {
+ "type": "string"
+ },
+ "totalVulnCount": {
+ "$ref": "#/definitions/schema.ScannerVulnCount"
+ },
+ "vulnOverrides": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/schema.LayerVulnOverride"
+ }
+ }
+ }
+ },
+ "schema.ScannerCVE": {
+ "required": [
+ "cvePK",
+ "summary",
+ "cvss",
+ "notes"
+ ],
+ "properties": {
+ "cvePK": {
+ "type": "string"
+ },
+ "cvss": {
+ "type": "number",
+ "format": "float"
+ },
+ "notes": {
+ "type": "string"
+ },
+ "summary": {
+ "type": "string"
+ }
+ }
+ },
+ "schema.ScannerComponent": {
+ "required": [
+ "componentPK",
+ "vulnCount",
+ "name",
+ "version",
+ "filepaths",
+ "cves",
+ "licenses",
+ "source"
+ ],
+ "properties": {
+ "componentPK": {
+ "type": "string"
+ },
+ "cves": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "filepaths": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "licenses": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "name": {
+ "type": "string"
+ },
+ "source": {
+ "type": "string"
+ },
+ "version": {
+ "type": "string"
+ },
+ "vulnCount": {
+ "$ref": "#/definitions/schema.ScannerVulnCount"
+ }
+ }
+ },
+ "schema.ScannerFingerprint": {
+ "required": [
+ "scannerType",
+ "version"
+ ],
+ "properties": {
+ "scannerType": {
+ "type": "integer",
+ "format": "int32"
+ },
+ "version": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ }
+ }
+ },
+ "schema.ScannerLayer": {
+ "required": [
+ "digest",
+ "mediaType",
+ "author",
+ "size",
+ "components"
+ ],
+ "properties": {
+ "author": {
+ "type": "string"
+ },
+ "components": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "digest": {
+ "type": "string"
+ },
+ "mediaType": {
+ "type": "string"
+ },
+ "size": {
+ "type": "integer",
+ "format": "int64"
+ }
+ }
+ },
+ "schema.ScannerLicense": {
+ "required": [
+ "name",
+ "url",
+ "type"
+ ],
+ "properties": {
+ "name": {
+ "type": "string"
+ },
+ "type": {
+ "type": "string"
+ },
+ "url": {
+ "type": "string"
+ }
+ }
+ },
+ "schema.ScannerVulnCount": {
+ "required": [
+ "critical",
+ "major",
+ "minor"
+ ],
+ "properties": {
+ "critical": {
+ "type": "integer",
+ "format": "int32"
+ },
+ "major": {
+ "type": "integer",
+ "format": "int32"
+ },
+ "minor": {
+ "type": "integer",
+ "format": "int32"
+ }
+ }
+ },
+ "tmpforms.ActionConfigCreate": {
+ "required": [
+ "action",
+ "parameters"
+ ],
+ "properties": {
+ "action": {
+ "description": "The action to modify the config for",
+ "type": "string"
+ },
+ "parameters": {
+ "description": "Extra parameters to pass to the job. The available parameters depend on the job. These are overwritten by any corresponding parameters set in the job itself.",
+ "type": "object",
+ "additionalProperties": {
+ "type": "string"
+ }
+ }
+ }
+ },
+ "tmpforms.CronCreate": {
+ "required": [
+ "action",
+ "schedule",
+ "retries",
+ "capacityMap",
+ "parameters",
+ "deadline",
+ "stopTimeout"
+ ],
+ "properties": {
+ "action": {
+ "description": "The action which the cron will perform",
+ "type": "string"
+ },
+ "capacityMap": {
+ "description": "The map of required capacity",
+ "type": "object",
+ "additionalProperties": {
+ "type": "integer"
+ }
+ },
+ "deadline": {
+ "description": "After this amount of time has passed, a SIGTERM will be sent",
+ "type": "string"
+ },
+ "parameters": {
+ "description": "Extra parameters to pass to the job. The available parameters depend on the job.",
+ "type": "object",
+ "additionalProperties": {
+ "type": "string"
+ }
+ },
+ "retries": {
+ "description": "The number of times to retry a job if it fails",
+ "type": "integer",
+ "format": "int32"
+ },
+ "schedule": {
+ "description": "The for the cron as a cronspec string: (seconds) (minutes) (hours) (day of month) (month) (day of week) or @hourly, @weekly, etc.",
+ "type": "string"
+ },
+ "stopTimeout": {
+ "description": "This long after SIGTERM is sent, SIGKILL will be sent if the proccess is still alive",
+ "type": "string"
+ }
+ }
+ },
+ "tmpforms.EmptyForm": {},
+ "tmpforms.JobSubmission": {
+ "required": [
+ "action",
+ "parameters",
+ "retries",
+ "capacityMap",
+ "deadline",
+ "stopTimeout",
+ "scheduledAt"
+ ],
+ "properties": {
+ "action": {
+ "description": "The action which the job will perform",
+ "type": "string"
+ },
+ "capacityMap": {
+ "description": "The map of required capacity",
+ "type": "object",
+ "additionalProperties": {
+ "type": "integer"
+ }
+ },
+ "deadline": {
+ "description": "After this amount of time has passed, a SIGTERM will be sent",
+ "type": "string"
+ },
+ "parameters": {
+ "description": "Parameters to start the job with",
+ "type": "object",
+ "additionalProperties": {
+ "type": "string"
+ }
+ },
+ "retries": {
+ "description": "The number of times to retry a job if it fails",
+ "type": "integer",
+ "format": "int32"
+ },
+ "scheduledAt": {
+ "description": "The time at which to run the job. Empty string or no value means now. Format: RFC3339",
+ "type": "string"
+ },
+ "stopTimeout": {
+ "description": "This long after SIGTERM is sent, SIGKILL will be sent if the proccess is still alive",
+ "type": "string"
+ }
+ }
+ },
+ "tmpforms.UpdateWorkerCapacity": {
+ "required": [
+ "capacityMap"
+ ],
+ "properties": {
+ "capacityMap": {
+ "description": "The new capacity for the worker, representing roughly the amount of RAM to use",
+ "type": "object",
+ "additionalProperties": {
+ "type": "integer"
+ }
+ }
+ }
+ },
+ "tmpresponses.ActionConfig": {
+ "required": [
+ "id",
+ "action",
+ "parameters"
+ ],
+ "properties": {
+ "action": {
+ "description": "The action this config refers to.",
+ "type": "string"
+ },
+ "id": {
+ "description": "Randomly generated UUID for foreign references.",
+ "type": "string"
+ },
+ "parameters": {
+ "description": "Extra parameters to pass to the job. The available parameters depend on the job.",
+ "type": "object",
+ "additionalProperties": {
+ "type": "string"
+ }
+ }
+ }
+ },
+ "tmpresponses.ActionConfigs": {
+ "required": [
+ "actionConfigs"
+ ],
+ "properties": {
+ "actionConfigs": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/tmpresponses.ActionConfig"
+ }
+ }
+ }
+ },
+ "tmpresponses.Cron": {
+ "required": [
+ "id",
+ "action",
+ "schedule",
+ "retries",
+ "capacityMap",
+ "parameters",
+ "deadline",
+ "stopTimeout",
+ "nextRun"
+ ],
+ "properties": {
+ "action": {
+ "description": "The action to be performed by jobs spawned from this cron.",
+ "type": "string"
+ },
+ "capacityMap": {
+ "description": "The map of required capacity",
+ "type": "object",
+ "additionalProperties": {
+ "type": "integer"
+ }
+ },
+ "deadline": {
+ "type": "string"
+ },
+ "id": {
+ "description": "Randomly generated UUID for foreign references.",
+ "type": "string"
+ },
+ "nextRun": {
+ "description": "The next time the job will run.",
+ "type": "string",
+ "format": "date-time"
+ },
+ "parameters": {
+ "description": "Extra parameters to pass to the job. The available parameters depend on the job.",
+ "type": "object",
+ "additionalProperties": {
+ "type": "string"
+ }
+ },
+ "retries": {
+ "description": "The number of times to retry the job if it fails",
+ "type": "integer",
+ "format": "int32"
+ },
+ "schedule": {
+ "description": "The schedule for this cron as a cronspec string: (seconds) (minutes) (hours) (day of month) (month) (day of week) or @hourly, @weekly, etc.",
+ "type": "string"
+ },
+ "stopTimeout": {
+ "description": "This long after SIGTERM is sent, SIGKILL will be sent if the proccess is still alive",
+ "type": "string"
+ }
+ }
+ },
+ "tmpresponses.Crons": {
+ "required": [
+ "crons"
+ ],
+ "properties": {
+ "crons": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/tmpresponses.Cron"
+ }
+ }
+ }
+ },
+ "tmpresponses.Job": {
+ "required": [
+ "id",
+ "retryFromID",
+ "workerID",
+ "status",
+ "scheduledAt",
+ "lastUpdated",
+ "action",
+ "retriesLeft",
+ "retriesTotal",
+ "capacityMap",
+ "parameters",
+ "deadline",
+ "stopTimeout"
+ ],
+ "properties": {
+ "action": {
+ "description": "The action this job performs",
+ "type": "string"
+ },
+ "capacityMap": {
+ "description": "The map of required capacity",
+ "type": "object",
+ "additionalProperties": {
+ "type": "integer"
+ }
+ },
+ "deadline": {
+ "type": "string"
+ },
+ "id": {
+ "description": "The ID of the job",
+ "type": "string"
+ },
+ "lastUpdated": {
+ "description": "The last time at which the status of this job was updated",
+ "type": "string",
+ "format": "date-time"
+ },
+ "parameters": {
+ "description": "Extra parameters to pass to the job. The available parameters depend on the job.",
+ "type": "object",
+ "additionalProperties": {
+ "type": "string"
+ }
+ },
+ "retriesLeft": {
+ "description": "The number of times to retry the job if it fails",
+ "type": "integer",
+ "format": "int32"
+ },
+ "retriesTotal": {
+ "description": "The total number of times to retry the original job if it fails",
+ "type": "integer",
+ "format": "int32"
+ },
+ "retryFromID": {
+ "description": "The ID of the job this job retried from",
+ "type": "string"
+ },
+ "scheduledAt": {
+ "description": "The time at which this job was scheduled",
+ "type": "string",
+ "format": "date-time"
+ },
+ "status": {
+ "description": "The current status of the job",
+ "type": "string",
+ "enum": [
+ "waiting",
+ "running",
+ "done",
+ "canceled",
+ "errored"
+ ]
+ },
+ "stopTimeout": {
+ "description": "This long after SIGTERM is sent, SIGKILL will be sent if the proccess is still alive",
+ "type": "string"
+ },
+ "workerID": {
+ "description": "The ID of the worker which performed the job, unclaimed by a worker if empty",
+ "type": "string"
+ }
+ }
+ },
+ "tmpresponses.JobLog": {
+ "required": [
+ "data",
+ "lineNum"
+ ],
+ "properties": {
+ "data": {
+ "type": "string"
+ },
+ "lineNum": {
+ "type": "integer",
+ "format": "int32"
+ }
+ }
+ },
+ "tmpresponses.Jobs": {
+ "required": [
+ "jobs"
+ ],
+ "properties": {
+ "jobs": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/tmpresponses.Job"
+ }
+ }
+ }
+ },
+ "tmpresponses.Worker": {
+ "required": [
+ "id",
+ "status",
+ "capacityMap",
+ "heartbeatExpiration"
+ ],
+ "properties": {
+ "capacityMap": {
+ "description": "A map used to represent now much load the worker should be allocated. Only security scanning jobs use this and the value is roughly equivalent to expected memory usage in bytes.",
+ "type": "object",
+ "additionalProperties": {
+ "type": "integer"
+ }
+ },
+ "heartbeatExpiration": {
+ "description": "Time after which the worker should be considered dead.",
+ "type": "string"
+ },
+ "id": {
+ "description": "Randomly generated UUID for foreign references.",
+ "type": "string"
+ },
+ "status": {
+ "description": "Status of the worker",
+ "type": "string"
+ }
+ }
+ },
+ "tmpresponses.Workers": {
+ "required": [
+ "workers"
+ ],
+ "properties": {
+ "workers": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/tmpresponses.Worker"
+ }
+ }
+ }
+ }
+ },
+ "tags": [
+ {
+ "description": "Accounts",
+ "name": "accounts"
+ },
+ {
+ "description": "Admin",
+ "name": "meta"
+ },
+ {
+ "description": "Content Caches",
+ "name": "content_caches"
+ },
+ {
+ "description": "Repositories",
+ "name": "repositories"
+ },
+ {
+ "description": "Repository Namespaces",
+ "name": "repositoryNamespaces"
+ },
+ {
+ "description": "Events",
+ "name": "events"
+ },
+ {
+ "description": "Docker Security Scanner",
+ "name": "imagescan"
+ },
+ {
+ "description": "Webhooks",
+ "name": "webhooks"
+ },
+ {
+ "description": "Jobs",
+ "name": "jobs"
+ },
+ {
+ "description": "Crons",
+ "name": "crons"
+ },
+ {
+ "description": "Workers",
+ "name": "workers"
+ },
+ {
+ "description": "Action Configs",
+ "name": "action_configs"
+ }
+ ]
+}