From f5050253469fc0961c02deec0e698ad62bdd9de5 Mon Sep 17 00:00:00 2001 From: GitLab Bot Date: Wed, 8 Apr 2020 09:09:43 +0000 Subject: Add latest changes from gitlab-org/gitlab@master --- doc/administration/packages/container_registry.md | 4 + doc/api/graphql/reference/gitlab_schema.graphql | 142 ++++++++ doc/api/graphql/reference/gitlab_schema.json | 409 ++++++++++++++++++++++ doc/api/graphql/reference/index.md | 19 + doc/api/settings.md | 1 + doc/ci/triggers/README.md | 16 +- doc/user/admin_area/index.md | 3 + doc/user/admin_area/settings/index.md | 2 +- doc/user/packages/container_registry/index.md | 13 +- 9 files changed, 606 insertions(+), 3 deletions(-) (limited to 'doc') diff --git a/doc/administration/packages/container_registry.md b/doc/administration/packages/container_registry.md index a798c9527b0..b940cb6933b 100644 --- a/doc/administration/packages/container_registry.md +++ b/doc/administration/packages/container_registry.md @@ -516,6 +516,10 @@ on how to achieve that. ## Use an external container registry with GitLab as an auth endpoint +NOTE: **Note:** +In using an external container registry, some features associated with the +container registry may be unavailable or have [inherant risks](./../../user/packages/container_registry/index.md#use-with-external-container-registries) + **Omnibus GitLab** You can use GitLab as an auth endpoint with an external container registry. diff --git a/doc/api/graphql/reference/gitlab_schema.graphql b/doc/api/graphql/reference/gitlab_schema.graphql index 7e863490369..0eebc74cc6c 100644 --- a/doc/api/graphql/reference/gitlab_schema.graphql +++ b/doc/api/graphql/reference/gitlab_schema.graphql @@ -2984,6 +2984,103 @@ type EpicTreeReorderPayload { errors: [String!]! } +type GeoNode { + """ + The maximum concurrency of container repository sync for this secondary node + """ + containerRepositoriesMaxCapacity: Int + + """ + Indicates whether this Geo node is enabled + """ + enabled: Boolean + + """ + The maximum concurrency of LFS/attachment backfill for this secondary node + """ + filesMaxCapacity: Int + + """ + ID of this GeoNode + """ + id: ID! + + """ + The URL defined on the primary node that secondary nodes should use to contact it + """ + internalUrl: String + + """ + The interval (in days) in which the repository verification is valid. Once expired, it will be reverified + """ + minimumReverificationInterval: Int + + """ + The unique identifier for this Geo node + """ + name: String + + """ + Indicates whether this Geo node is the primary + """ + primary: Boolean + + """ + The maximum concurrency of repository backfill for this secondary node + """ + reposMaxCapacity: Int + + """ + The namespaces that should be synced, if `selective_sync_type` == `namespaces` + """ + selectiveSyncNamespaces( + """ + Returns the elements in the list that come after the specified cursor. + """ + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """ + Returns the first _n_ elements from the list. + """ + first: Int + + """ + Returns the last _n_ elements from the list. + """ + last: Int + ): NamespaceConnection + + """ + The repository storages whose projects should be synced, if `selective_sync_type` == `shards` + """ + selectiveSyncShards: [String!] + + """ + Indicates if syncing is limited to only specific groups, or shards + """ + selectiveSyncType: String + + """ + Indicates if this secondary node will replicate blobs in Object Storage + """ + syncObjectStorage: Boolean + + """ + The user-facing URL for this Geo node + """ + url: String + + """ + The maximum concurrency of repository verification for this secondary node + """ + verificationMaxCapacity: Int +} + type GrafanaIntegration { """ Timestamp of the issue's creation @@ -5435,6 +5532,41 @@ type Namespace { visibility: String } +""" +The connection type for Namespace. +""" +type NamespaceConnection { + """ + A list of edges. + """ + edges: [NamespaceEdge] + + """ + A list of nodes. + """ + nodes: [Namespace] + + """ + Information to aid in pagination. + """ + pageInfo: PageInfo! +} + +""" +An edge in a connection. +""" +type NamespaceEdge { + """ + A cursor for use in pagination. + """ + cursor: String! + + """ + The item at the end of the edge. + """ + node: Namespace +} + type Note { """ User who wrote this note @@ -6916,6 +7048,16 @@ type Query { text: String! ): String! + """ + Find a Geo node + """ + geoNode( + """ + The name of the Geo node. Defaults to the current Geo node name. + """ + name: String + ): GeoNode + """ Find a group """ diff --git a/doc/api/graphql/reference/gitlab_schema.json b/doc/api/graphql/reference/gitlab_schema.json index 813ab39795a..9abc312da33 100644 --- a/doc/api/graphql/reference/gitlab_schema.json +++ b/doc/api/graphql/reference/gitlab_schema.json @@ -8653,6 +8653,280 @@ "enumValues": null, "possibleTypes": null }, + { + "kind": "OBJECT", + "name": "GeoNode", + "description": null, + "fields": [ + { + "name": "containerRepositoriesMaxCapacity", + "description": "The maximum concurrency of container repository sync for this secondary node", + "args": [ + + ], + "type": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "enabled", + "description": "Indicates whether this Geo node is enabled", + "args": [ + + ], + "type": { + "kind": "SCALAR", + "name": "Boolean", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "filesMaxCapacity", + "description": "The maximum concurrency of LFS/attachment backfill for this secondary node", + "args": [ + + ], + "type": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "id", + "description": "ID of this GeoNode", + "args": [ + + ], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "ID", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "internalUrl", + "description": "The URL defined on the primary node that secondary nodes should use to contact it", + "args": [ + + ], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "minimumReverificationInterval", + "description": "The interval (in days) in which the repository verification is valid. Once expired, it will be reverified", + "args": [ + + ], + "type": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "name", + "description": "The unique identifier for this Geo node", + "args": [ + + ], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "primary", + "description": "Indicates whether this Geo node is the primary", + "args": [ + + ], + "type": { + "kind": "SCALAR", + "name": "Boolean", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "reposMaxCapacity", + "description": "The maximum concurrency of repository backfill for this secondary node", + "args": [ + + ], + "type": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "selectiveSyncNamespaces", + "description": "The namespaces that should be synced, if `selective_sync_type` == `namespaces`", + "args": [ + { + "name": "after", + "description": "Returns the elements in the list that come after the specified cursor.", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "before", + "description": "Returns the elements in the list that come before the specified cursor.", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "first", + "description": "Returns the first _n_ elements from the list.", + "type": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "last", + "description": "Returns the last _n_ elements from the list.", + "type": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + }, + "defaultValue": null + } + ], + "type": { + "kind": "OBJECT", + "name": "NamespaceConnection", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "selectiveSyncShards", + "description": "The repository storages whose projects should be synced, if `selective_sync_type` == `shards`", + "args": [ + + ], + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "String", + "ofType": null + } + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "selectiveSyncType", + "description": "Indicates if syncing is limited to only specific groups, or shards", + "args": [ + + ], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "syncObjectStorage", + "description": "Indicates if this secondary node will replicate blobs in Object Storage", + "args": [ + + ], + "type": { + "kind": "SCALAR", + "name": "Boolean", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "url", + "description": "The user-facing URL for this Geo node", + "args": [ + + ], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "verificationMaxCapacity", + "description": "The maximum concurrency of repository verification for this secondary node", + "args": [ + + ], + "type": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + } + ], + "inputFields": null, + "interfaces": [ + + ], + "enumValues": null, + "possibleTypes": null + }, { "kind": "OBJECT", "name": "GrafanaIntegration", @@ -16462,6 +16736,118 @@ "enumValues": null, "possibleTypes": null }, + { + "kind": "OBJECT", + "name": "NamespaceConnection", + "description": "The connection type for Namespace.", + "fields": [ + { + "name": "edges", + "description": "A list of edges.", + "args": [ + + ], + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "NamespaceEdge", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "nodes", + "description": "A list of nodes.", + "args": [ + + ], + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "Namespace", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "pageInfo", + "description": "Information to aid in pagination.", + "args": [ + + ], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "PageInfo", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + } + ], + "inputFields": null, + "interfaces": [ + + ], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "NamespaceEdge", + "description": "An edge in a connection.", + "fields": [ + { + "name": "cursor", + "description": "A cursor for use in pagination.", + "args": [ + + ], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "String", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "node", + "description": "The item at the end of the edge.", + "args": [ + + ], + "type": { + "kind": "OBJECT", + "name": "Namespace", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + } + ], + "inputFields": null, + "interfaces": [ + + ], + "enumValues": null, + "possibleTypes": null + }, { "kind": "OBJECT", "name": "Note", @@ -20778,6 +21164,29 @@ "isDeprecated": false, "deprecationReason": null }, + { + "name": "geoNode", + "description": "Find a Geo node", + "args": [ + { + "name": "name", + "description": "The name of the Geo node. Defaults to the current Geo node name.", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + } + ], + "type": { + "kind": "OBJECT", + "name": "GeoNode", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, { "name": "group", "description": "Find a group", diff --git a/doc/api/graphql/reference/index.md b/doc/api/graphql/reference/index.md index dbe98639d23..6948f361a14 100644 --- a/doc/api/graphql/reference/index.md +++ b/doc/api/graphql/reference/index.md @@ -483,6 +483,25 @@ Autogenerated return type of EpicTreeReorder | `clientMutationId` | String | A unique identifier for the client performing the mutation. | | `errors` | String! => Array | Reasons why the mutation failed. | +## GeoNode + +| Name | Type | Description | +| --- | ---- | ---------- | +| `containerRepositoriesMaxCapacity` | Int | The maximum concurrency of container repository sync for this secondary node | +| `enabled` | Boolean | Indicates whether this Geo node is enabled | +| `filesMaxCapacity` | Int | The maximum concurrency of LFS/attachment backfill for this secondary node | +| `id` | ID! | ID of this GeoNode | +| `internalUrl` | String | The URL defined on the primary node that secondary nodes should use to contact it | +| `minimumReverificationInterval` | Int | The interval (in days) in which the repository verification is valid. Once expired, it will be reverified | +| `name` | String | The unique identifier for this Geo node | +| `primary` | Boolean | Indicates whether this Geo node is the primary | +| `reposMaxCapacity` | Int | The maximum concurrency of repository backfill for this secondary node | +| `selectiveSyncShards` | String! => Array | The repository storages whose projects should be synced, if `selective_sync_type` == `shards` | +| `selectiveSyncType` | String | Indicates if syncing is limited to only specific groups, or shards | +| `syncObjectStorage` | Boolean | Indicates if this secondary node will replicate blobs in Object Storage | +| `url` | String | The user-facing URL for this Geo node | +| `verificationMaxCapacity` | Int | The maximum concurrency of repository verification for this secondary node | + ## GrafanaIntegration | Name | Type | Description | diff --git a/doc/api/settings.md b/doc/api/settings.md index 2c75c175fdd..5fe068cf085 100644 --- a/doc/api/settings.md +++ b/doc/api/settings.md @@ -45,6 +45,7 @@ Example response: "default_group_visibility" : "private", "gravatar_enabled" : true, "sign_in_text" : null, + "container_expiration_policies_enable_historic_entries": true, "container_registry_token_expire_delay": 5, "repository_storages": ["default"], "plantuml_enabled": false, diff --git a/doc/ci/triggers/README.md b/doc/ci/triggers/README.md index 29deed724f9..db3d2352f09 100644 --- a/doc/ci/triggers/README.md +++ b/doc/ci/triggers/README.md @@ -15,7 +15,21 @@ tag) with an API call. ## Authentication tokens -The following methods of authentication are supported. +The following methods of authentication are supported: + +- [Trigger token](#trigger-token) +- [CI job token](#ci-job-token) + +If using the `$CI_PIPELINE_SOURCE` [predefined environment variable](../variables/predefined_variables.md#variables-reference) +to limit which jobs run in a pipeline, the value could be either `pipeline` or `trigger`, +depending on which trigger method is used. + +| `$CI_PIPELINE_SOURCE` value | Trigger method | +|-----------------------------|----------------| +| `pipeline` | Using the `trigger:` keyword in the CI/CD configuration file, or using the trigger API with `$CI_JOB_TOKEN`. | +| `trigger` | Using the trigger API using a generated trigger token | + +This also applies when using the `pipelines` or `triggers` keywords with the legacy [`only/except` basic syntax](../yaml/README.md#onlyexcept-basic). ### Trigger token diff --git a/doc/user/admin_area/index.md b/doc/user/admin_area/index.md index cbc033fdedc..204573da02d 100644 --- a/doc/user/admin_area/index.md +++ b/doc/user/admin_area/index.md @@ -147,6 +147,9 @@ The **Total users** is calculated as: **Active users** + **Blocked users**. GitLab billing is based on the number of active users. For details of active users, see [Choosing the number of users](../../subscriptions/index.md#choosing-the-number-of-users). +**Please note** that during the initial stage, the information won't be 100% accurate given that +background processes are still recollecting data. + ### Administering Groups You can administer all groups in the GitLab instance from the Admin Area's Groups page. diff --git a/doc/user/admin_area/settings/index.md b/doc/user/admin_area/settings/index.md index 6731ebb1d8c..f0e7bf272a7 100644 --- a/doc/user/admin_area/settings/index.md +++ b/doc/user/admin_area/settings/index.md @@ -61,7 +61,7 @@ Access the default page for admin area settings by navigating to | ------ | ----------- | | [Continuous Integration and Deployment](continuous_integration.md) | Auto DevOps, runners and job artifacts. | | [Required pipeline configuration](continuous_integration.md#required-pipeline-configuration-premium-only) **(PREMIUM ONLY)** | Set an instance-wide auto included [pipeline configuration](../../../ci/yaml/README.md). This pipeline configuration will be run after the project's own configuration. | -| [Package Registry](continuous_integration.md#package-registry-configuration-premium-only) **(PREMIUM ONLY)**| Settings related to the use and experience of using GitLab's Package Registry. | +| [Package Registry](continuous_integration.md#package-registry-configuration-premium-only) **(PREMIUM ONLY)**| Settings related to the use and experience of using GitLab's Package Registry. Note there are [risks involved](./../../packages/container_registry/index.md#use-with-external-container-registries) in enabling some of these settings. | ## Reporting diff --git a/doc/user/packages/container_registry/index.md b/doc/user/packages/container_registry/index.md index f5b8bd82a2b..d6c6767a8fd 100644 --- a/doc/user/packages/container_registry/index.md +++ b/doc/user/packages/container_registry/index.md @@ -488,7 +488,9 @@ older tags and images are regularly removed from the Container Registry. > [Introduced](https://gitlab.com/gitlab-org/gitlab/issues/15398) in GitLab 12.8. NOTE: **Note:** -Expiration policies are only available for projects created in GitLab 12.8 and later. +Expiration policies for projects created before GitLab 12.8 may be enabled by an +admin in the [CI/CD Package Registry settings](./../../admin_area/settings/index.md#cicd). +Note the inherant [risks involved](./index.md#use-with-external-container-registries). It is possible to create a per-project expiration policy, so that you can make sure that older tags and images are regularly removed from the Container Registry. @@ -539,6 +541,15 @@ Examples: See the API documentation for further details: [Edit project](../../../api/projects.md#edit-project). +### Use with external container registries + +When using an [external container registry](./../../../administration/packages/container_registry.md#use-an-external-container-registry-with-gitlab-as-an-auth-endpoint), +running an experation policy on a project may have some performance risks. If a project is going to run +a policy that will remove large quantities of tags (in the thousands), the GitLab background jobs that +run the policy may get backed up or fail completely. It is recommended you only enable container expiration +policies for projects that were created before GitLab 12.8 if you are confident the amount of tags +being cleaned up will be minimal. + ## Limitations Moving or renaming existing Container Registry repositories is not supported -- cgit v1.2.3