Commit 6af29c94 authored by GitLab Bot's avatar GitLab Bot

Add latest changes from gitlab-org/gitlab@master

parent 8a04ac23
...@@ -2,9 +2,11 @@ ...@@ -2,9 +2,11 @@
module Resolvers module Resolvers
class EchoResolver < BaseResolver class EchoResolver < BaseResolver
argument :text, GraphQL::STRING_TYPE, required: true # rubocop:disable Graphql/Descriptions
description 'Testing endpoint to validate the API with' description 'Testing endpoint to validate the API with'
argument :text, GraphQL::STRING_TYPE, required: true,
description: 'Text to echo back'
def resolve(**args) def resolve(**args)
username = context[:current_user]&.username username = context[:current_user]&.username
......
...@@ -4,17 +4,17 @@ module Resolvers ...@@ -4,17 +4,17 @@ module Resolvers
class IssuesResolver < BaseResolver class IssuesResolver < BaseResolver
argument :iid, GraphQL::STRING_TYPE, argument :iid, GraphQL::STRING_TYPE,
required: false, required: false,
description: 'The IID of the issue, e.g., "1"' description: 'IID of the issue. For example, "1"'
argument :iids, [GraphQL::STRING_TYPE], argument :iids, [GraphQL::STRING_TYPE],
required: false, required: false,
description: 'The list of IIDs of issues, e.g., [1, 2]' description: 'List of IIDs of issues. For example, [1, 2]'
argument :state, Types::IssuableStateEnum, argument :state, Types::IssuableStateEnum,
required: false, required: false,
description: 'Current state of Issue' description: 'Current state of this issue'
argument :label_name, GraphQL::STRING_TYPE.to_list_type, argument :label_name, GraphQL::STRING_TYPE.to_list_type,
required: false, required: false,
description: 'Labels applied to the Issue' description: 'Labels applied to this issue'
argument :created_before, Types::TimeType, argument :created_before, Types::TimeType,
required: false, required: false,
description: 'Issues created before this date' description: 'Issues created before this date'
...@@ -33,8 +33,9 @@ module Resolvers ...@@ -33,8 +33,9 @@ module Resolvers
argument :closed_after, Types::TimeType, argument :closed_after, Types::TimeType,
required: false, required: false,
description: 'Issues closed after this date' description: 'Issues closed after this date'
argument :search, GraphQL::STRING_TYPE, # rubocop:disable Graphql/Descriptions argument :search, GraphQL::STRING_TYPE,
required: false required: false,
description: 'Search query for finding issues by title or description'
argument :sort, Types::IssueSortEnum, argument :sort, Types::IssueSortEnum,
description: 'Sort issues by this criteria', description: 'Sort issues by this criteria',
required: false, required: false,
......
...@@ -6,9 +6,12 @@ module Types ...@@ -6,9 +6,12 @@ module Types
class DiffRefsType < BaseObject class DiffRefsType < BaseObject
graphql_name 'DiffRefs' graphql_name 'DiffRefs'
field :head_sha, GraphQL::STRING_TYPE, null: false, description: 'The sha of the head at the time the comment was made' field :head_sha, GraphQL::STRING_TYPE, null: false,
field :base_sha, GraphQL::STRING_TYPE, null: false, description: 'The merge base of the branch the comment was made on' description: 'SHA of the HEAD at the time the comment was made'
field :start_sha, GraphQL::STRING_TYPE, null: false, description: 'The sha of the branch being compared against' field :base_sha, GraphQL::STRING_TYPE, null: false,
description: 'Merge base of the branch the comment was made on'
field :start_sha, GraphQL::STRING_TYPE, null: false,
description: 'SHA of the branch being compared against'
end end
# rubocop: enable Graphql/AuthorizeTypes # rubocop: enable Graphql/AuthorizeTypes
end end
...@@ -7,36 +7,38 @@ module Types ...@@ -7,36 +7,38 @@ module Types
class DiffPositionType < BaseObject class DiffPositionType < BaseObject
graphql_name 'DiffPosition' graphql_name 'DiffPosition'
field :diff_refs, Types::DiffRefsType, null: false # rubocop:disable Graphql/Descriptions field :diff_refs, Types::DiffRefsType, null: false,
description: 'Information about the branch, HEAD, and base at the time of commenting'
field :file_path, GraphQL::STRING_TYPE, null: false, field :file_path, GraphQL::STRING_TYPE, null: false,
description: "The path of the file that was changed" description: 'Path of the file that was changed'
field :old_path, GraphQL::STRING_TYPE, null: true, field :old_path, GraphQL::STRING_TYPE, null: true,
description: "The path of the file on the start sha." description: 'Path of the file on the start SHA'
field :new_path, GraphQL::STRING_TYPE, null: true, field :new_path, GraphQL::STRING_TYPE, null: true,
description: "The path of the file on the head sha." description: 'Path of the file on the HEAD SHA'
field :position_type, Types::Notes::PositionTypeEnum, null: false # rubocop:disable Graphql/Descriptions field :position_type, Types::Notes::PositionTypeEnum, null: false,
description: 'Type of file the position refers to'
# Fields for text positions # Fields for text positions
field :old_line, GraphQL::INT_TYPE, null: true, field :old_line, GraphQL::INT_TYPE, null: true,
description: "The line on start sha that was changed", description: 'Line on start SHA that was changed',
resolve: -> (position, _args, _ctx) { position.old_line if position.on_text? } resolve: -> (position, _args, _ctx) { position.old_line if position.on_text? }
field :new_line, GraphQL::INT_TYPE, null: true, field :new_line, GraphQL::INT_TYPE, null: true,
description: "The line on head sha that was changed", description: 'Line on HEAD SHA that was changed',
resolve: -> (position, _args, _ctx) { position.new_line if position.on_text? } resolve: -> (position, _args, _ctx) { position.new_line if position.on_text? }
# Fields for image positions # Fields for image positions
field :x, GraphQL::INT_TYPE, null: true, field :x, GraphQL::INT_TYPE, null: true,
description: "The X postion on which the comment was made", description: 'X position on which the comment was made',
resolve: -> (position, _args, _ctx) { position.x if position.on_image? } resolve: -> (position, _args, _ctx) { position.x if position.on_image? }
field :y, GraphQL::INT_TYPE, null: true, field :y, GraphQL::INT_TYPE, null: true,
description: "The Y position on which the comment was made", description: 'Y position on which the comment was made',
resolve: -> (position, _args, _ctx) { position.y if position.on_image? } resolve: -> (position, _args, _ctx) { position.y if position.on_image? }
field :width, GraphQL::INT_TYPE, null: true, field :width, GraphQL::INT_TYPE, null: true,
description: "The total width of the image", description: 'Total width of the image',
resolve: -> (position, _args, _ctx) { position.width if position.on_image? } resolve: -> (position, _args, _ctx) { position.width if position.on_image? }
field :height, GraphQL::INT_TYPE, null: true, field :height, GraphQL::INT_TYPE, null: true,
description: "The total height of the image", description: 'Total height of the image',
resolve: -> (position, _args, _ctx) { position.height if position.on_image? } resolve: -> (position, _args, _ctx) { position.height if position.on_image? }
end end
# rubocop: enable Graphql/AuthorizeTypes # rubocop: enable Graphql/AuthorizeTypes
......
...@@ -7,10 +7,14 @@ module Types ...@@ -7,10 +7,14 @@ module Types
authorize :read_note authorize :read_note
field :id, GraphQL::ID_TYPE, null: false # rubocop:disable Graphql/Descriptions field :id, GraphQL::ID_TYPE, null: false,
field :reply_id, GraphQL::ID_TYPE, null: false, description: 'The ID used to reply to this discussion' description: "ID of this discussion"
field :created_at, Types::TimeType, null: false # rubocop:disable Graphql/Descriptions field :reply_id, GraphQL::ID_TYPE, null: false,
field :notes, Types::Notes::NoteType.connection_type, null: false, description: "All notes in the discussion" description: 'ID used to reply to this discussion'
field :created_at, Types::TimeType, null: false,
description: "Timestamp of the discussion's creation"
field :notes, Types::Notes::NoteType.connection_type, null: false,
description: 'All notes in the discussion'
# The gem we use to generate Global IDs is hard-coded to work with # The gem we use to generate Global IDs is hard-coded to work with
# `id` properties. To generate a GID for the `reply_id` property, # `id` properties. To generate a GID for the `reply_id` property,
......
...@@ -9,40 +9,48 @@ module Types ...@@ -9,40 +9,48 @@ module Types
expose_permissions Types::PermissionTypes::Note expose_permissions Types::PermissionTypes::Note
field :id, GraphQL::ID_TYPE, null: false # rubocop:disable Graphql/Descriptions field :id, GraphQL::ID_TYPE, null: false,
description: 'ID of the note'
field :project, Types::ProjectType, field :project, Types::ProjectType,
null: true, null: true,
description: "The project this note is associated to", description: 'Project associated with the note',
resolve: -> (note, args, context) { Gitlab::Graphql::Loaders::BatchModelLoader.new(Project, note.project_id).find } resolve: -> (note, args, context) { Gitlab::Graphql::Loaders::BatchModelLoader.new(Project, note.project_id).find }
field :author, Types::UserType, field :author, Types::UserType,
null: false, null: false,
description: "The user who wrote this note", description: 'User who wrote this note',
resolve: -> (note, args, context) { Gitlab::Graphql::Loaders::BatchModelLoader.new(User, note.author_id).find } resolve: -> (note, args, context) { Gitlab::Graphql::Loaders::BatchModelLoader.new(User, note.author_id).find }
field :resolved_by, Types::UserType, field :resolved_by, Types::UserType,
null: true, null: true,
description: "The user that resolved the discussion", description: 'User that resolved the discussion',
resolve: -> (note, _args, _context) { Gitlab::Graphql::Loaders::BatchModelLoader.new(User, note.resolved_by_id).find } resolve: -> (note, _args, _context) { Gitlab::Graphql::Loaders::BatchModelLoader.new(User, note.resolved_by_id).find }
field :system, GraphQL::BOOLEAN_TYPE, field :system, GraphQL::BOOLEAN_TYPE,
null: false, null: false,
description: "Whether or not this note was created by the system or by a user" description: 'Indicates whether this note was created by the system or by a user'
field :body, GraphQL::STRING_TYPE, field :body, GraphQL::STRING_TYPE,
null: false, null: false,
method: :note, method: :note,
description: "The content note itself" description: 'Content of the note'
markdown_field :body_html, null: true, method: :note markdown_field :body_html, null: true, method: :note
field :created_at, Types::TimeType, null: false # rubocop:disable Graphql/Descriptions field :created_at, Types::TimeType, null: false,
field :updated_at, Types::TimeType, null: false # rubocop:disable Graphql/Descriptions description: 'Timestamp of the note creation'
field :discussion, Types::Notes::DiscussionType, null: true, description: "The discussion this note is a part of" field :updated_at, Types::TimeType, null: false,
field :resolvable, GraphQL::BOOLEAN_TYPE, null: false, method: :resolvable? # rubocop:disable Graphql/Descriptions description: "Timestamp of the note's last activity"
field :resolved_at, Types::TimeType, null: true, description: "The time the discussion was resolved" field :discussion, Types::Notes::DiscussionType, null: true,
field :position, Types::Notes::DiffPositionType, null: true, description: "The position of this note on a diff" description: 'The discussion this note is a part of'
field :resolvable, GraphQL::BOOLEAN_TYPE, null: false,
description: 'Indicates if this note can be resolved. That is, if it is a resolvable discussion or simply a standalone note',
method: :resolvable?
field :resolved_at, Types::TimeType, null: true,
description: "Timestamp of the note's resolution"
field :position, Types::Notes::DiffPositionType, null: true,
description: 'The position of this note on a diff'
end end
end end
end end
...@@ -35,6 +35,8 @@ module Types ...@@ -35,6 +35,8 @@ module Types
resolver: Resolvers::SnippetsResolver, resolver: Resolvers::SnippetsResolver,
description: 'Find Snippets visible to the current user' description: 'Find Snippets visible to the current user'
field :echo, GraphQL::STRING_TYPE, null: false, resolver: Resolvers::EchoResolver # rubocop:disable Graphql/Descriptions field :echo, GraphQL::STRING_TYPE, null: false,
description: 'Text to echo back',
resolver: Resolvers::EchoResolver
end end
end end
...@@ -178,33 +178,33 @@ The API can be explored interactively using the [GraphiQL IDE](../index.md#graph ...@@ -178,33 +178,33 @@ The API can be explored interactively using the [GraphiQL IDE](../index.md#graph
| Name | Type | Description | | Name | Type | Description |
| --- | ---- | ---------- | | --- | ---- | ---------- |
| `diffRefs` | DiffRefs! | | | `diffRefs` | DiffRefs! | Information about the branch, HEAD, and base at the time of commenting |
| `filePath` | String! | The path of the file that was changed | | `filePath` | String! | Path of the file that was changed |
| `oldPath` | String | The path of the file on the start sha. | | `oldPath` | String | Path of the file on the start SHA |
| `newPath` | String | The path of the file on the head sha. | | `newPath` | String | Path of the file on the HEAD SHA |
| `positionType` | DiffPositionType! | | | `positionType` | DiffPositionType! | Type of file the position refers to |
| `oldLine` | Int | The line on start sha that was changed | | `oldLine` | Int | Line on start SHA that was changed |
| `newLine` | Int | The line on head sha that was changed | | `newLine` | Int | Line on HEAD SHA that was changed |
| `x` | Int | The X postion on which the comment was made | | `x` | Int | X position on which the comment was made |
| `y` | Int | The Y position on which the comment was made | | `y` | Int | Y position on which the comment was made |
| `width` | Int | The total width of the image | | `width` | Int | Total width of the image |
| `height` | Int | The total height of the image | | `height` | Int | Total height of the image |
### DiffRefs ### DiffRefs
| Name | Type | Description | | Name | Type | Description |
| --- | ---- | ---------- | | --- | ---- | ---------- |
| `headSha` | String! | The sha of the head at the time the comment was made | | `headSha` | String! | SHA of the HEAD at the time the comment was made |
| `baseSha` | String! | The merge base of the branch the comment was made on | | `baseSha` | String! | Merge base of the branch the comment was made on |
| `startSha` | String! | The sha of the branch being compared against | | `startSha` | String! | SHA of the branch being compared against |
### Discussion ### Discussion
| Name | Type | Description | | Name | Type | Description |
| --- | ---- | ---------- | | --- | ---- | ---------- |
| `id` | ID! | | | `id` | ID! | ID of this discussion |
| `replyId` | ID! | The ID used to reply to this discussion | | `replyId` | ID! | ID used to reply to this discussion |
| `createdAt` | Time! | | | `createdAt` | Time! | Timestamp of the discussion's creation |
### Epic ### Epic
...@@ -281,13 +281,13 @@ The API can be explored interactively using the [GraphiQL IDE](../index.md#graph ...@@ -281,13 +281,13 @@ The API can be explored interactively using the [GraphiQL IDE](../index.md#graph
| `createdAt` | Time! | Timestamp of when the issue was created | | `createdAt` | Time! | Timestamp of when the issue was created |
| `updatedAt` | Time! | Timestamp of when the issue was last updated | | `updatedAt` | Time! | Timestamp of when the issue was last updated |
| `taskCompletionStatus` | TaskCompletionStatus! | Task completion status of the issue | | `taskCompletionStatus` | TaskCompletionStatus! | Task completion status of the issue |
| `epic` | Epic | The epic to which issue belongs | | `epic` | Epic | Epic to which this issue belongs |
| `weight` | Int | | | `weight` | Int | Weight of the issue |
| `designs` | DesignCollection | | | `designs` | DesignCollection | Deprecated. Use `design_collection`. |
| `designCollection` | DesignCollection | | | `designCollection` | DesignCollection | Collection of design images associated with this issue |
| `epicIssueId` | ID! | | | `epicIssueId` | ID! | ID of the epic-issue relation |
| `relationPath` | String | | | `relationPath` | String | URI path of the epic-issue relation |
| `id` | ID | The global id of the epic-issue relation | | `id` | ID | Global ID of the epic-issue relation |
### EpicPermissions ### EpicPermissions
...@@ -338,7 +338,7 @@ The API can be explored interactively using the [GraphiQL IDE](../index.md#graph ...@@ -338,7 +338,7 @@ The API can be explored interactively using the [GraphiQL IDE](../index.md#graph
| `parent` | Group | Parent group | | `parent` | Group | Parent group |
| `epicsEnabled` | Boolean | Indicates if Epics are enabled for namespace | | `epicsEnabled` | Boolean | Indicates if Epics are enabled for namespace |
| `groupTimelogsEnabled` | Boolean | Indicates if Group timelogs are enabled for namespace | | `groupTimelogsEnabled` | Boolean | Indicates if Group timelogs are enabled for namespace |
| `epic` | Epic | | | `epic` | Epic | Find a single epic |
### GroupPermissions ### GroupPermissions
...@@ -376,10 +376,10 @@ The API can be explored interactively using the [GraphiQL IDE](../index.md#graph ...@@ -376,10 +376,10 @@ The API can be explored interactively using the [GraphiQL IDE](../index.md#graph
| `createdAt` | Time! | Timestamp of when the issue was created | | `createdAt` | Time! | Timestamp of when the issue was created |
| `updatedAt` | Time! | Timestamp of when the issue was last updated | | `updatedAt` | Time! | Timestamp of when the issue was last updated |
| `taskCompletionStatus` | TaskCompletionStatus! | Task completion status of the issue | | `taskCompletionStatus` | TaskCompletionStatus! | Task completion status of the issue |
| `epic` | Epic | The epic to which issue belongs | | `epic` | Epic | Epic to which this issue belongs |
| `weight` | Int | | | `weight` | Int | Weight of the issue |
| `designs` | DesignCollection | | | `designs` | DesignCollection | Deprecated. Use `design_collection`. |
| `designCollection` | DesignCollection | | | `designCollection` | DesignCollection | Collection of design images associated with this issue |
### IssuePermissions ### IssuePermissions
...@@ -577,18 +577,18 @@ The API can be explored interactively using the [GraphiQL IDE](../index.md#graph ...@@ -577,18 +577,18 @@ The API can be explored interactively using the [GraphiQL IDE](../index.md#graph
| Name | Type | Description | | Name | Type | Description |
| --- | ---- | ---------- | | --- | ---- | ---------- |
| `userPermissions` | NotePermissions! | Permissions for the current user on the resource | | `userPermissions` | NotePermissions! | Permissions for the current user on the resource |
| `id` | ID! | | | `id` | ID! | ID of the note |
| `project` | Project | The project this note is associated to | | `project` | Project | Project associated with the note |
| `author` | User! | The user who wrote this note | | `author` | User! | User who wrote this note |
| `resolvedBy` | User | The user that resolved the discussion | | `resolvedBy` | User | User that resolved the discussion |
| `system` | Boolean! | Whether or not this note was created by the system or by a user | | `system` | Boolean! | Indicates whether this note was created by the system or by a user |
| `body` | String! | The content note itself | | `body` | String! | Content of the note |
| `bodyHtml` | String | The GitLab Flavored Markdown rendering of `note` | | `bodyHtml` | String | The GitLab Flavored Markdown rendering of `note` |
| `createdAt` | Time! | | | `createdAt` | Time! | Timestamp of the note creation |
| `updatedAt` | Time! | | | `updatedAt` | Time! | Timestamp of the note's last activity |
| `discussion` | Discussion | The discussion this note is a part of | | `discussion` | Discussion | The discussion this note is a part of |
| `resolvable` | Boolean! | | | `resolvable` | Boolean! | Indicates if this note can be resolved. That is, if it is a resolvable discussion or simply a standalone note |
| `resolvedAt` | Time | The time the discussion was resolved | | `resolvedAt` | Time | Timestamp of the note's resolution |
| `position` | DiffPosition | The position of this note on a diff | | `position` | DiffPosition | The position of this note on a diff |
### NotePermissions ### NotePermissions
......
...@@ -1009,6 +1009,7 @@ POST /projects ...@@ -1009,6 +1009,7 @@ POST /projects
| `template_project_id` | integer | no | **(PREMIUM)** When used with `use_custom_template`, project ID of a custom project template. This is preferable to using `template_name` since `template_name` may be ambiguous. | | `template_project_id` | integer | no | **(PREMIUM)** When used with `use_custom_template`, project ID of a custom project template. This is preferable to using `template_name` since `template_name` may be ambiguous. |
| `use_custom_template` | boolean | no | **(PREMIUM)** Use either custom [instance](../user/admin_area/custom_project_templates.md) or [group](../user/group/custom_project_templates.md) (with `group_with_project_templates_id`) project template | | `use_custom_template` | boolean | no | **(PREMIUM)** Use either custom [instance](../user/admin_area/custom_project_templates.md) or [group](../user/group/custom_project_templates.md) (with `group_with_project_templates_id`) project template |
| `group_with_project_templates_id` | integer | no | **(PREMIUM)** For group-level custom templates, specifies ID of group from which all the custom project templates are sourced. Leave empty for instance-level templates. Requires `use_custom_template` to be true | | `group_with_project_templates_id` | integer | no | **(PREMIUM)** For group-level custom templates, specifies ID of group from which all the custom project templates are sourced. Leave empty for instance-level templates. Requires `use_custom_template` to be true |
| `packages_enabled` | boolean | no | **(PREMIUM ONLY)** Enable or disable packages repository feature |
NOTE: **Note:** If your HTTP repository is not publicly accessible, NOTE: **Note:** If your HTTP repository is not publicly accessible,
add authentication information to the URL: `https://username:password@gitlab.company.com/group/project.git` add authentication information to the URL: `https://username:password@gitlab.company.com/group/project.git`
...@@ -1071,6 +1072,7 @@ POST /projects/user/:user_id ...@@ -1071,6 +1072,7 @@ POST /projects/user/:user_id
| `template_name` | string | no | When used without `use_custom_template`, name of a [built-in project template](../gitlab-basics/create-project.md#built-in-templates). When used with `use_custom_template`, name of a custom project template | | `template_name` | string | no | When used without `use_custom_template`, name of a [built-in project template](../gitlab-basics/create-project.md#built-in-templates). When used with `use_custom_template`, name of a custom project template |
| `use_custom_template` | boolean | no | **(PREMIUM)** Use either custom [instance](../user/admin_area/custom_project_templates.md) or [group](../user/group/custom_project_templates.md) (with `group_with_project_templates_id`) project template | | `use_custom_template` | boolean | no | **(PREMIUM)** Use either custom [instance](../user/admin_area/custom_project_templates.md) or [group](../user/group/custom_project_templates.md) (with `group_with_project_templates_id`) project template |
| `group_with_project_templates_id` | integer | no | **(PREMIUM)** For group-level custom templates, specifies ID of group from which all the custom project templates are sourced. Leave empty for instance-level templates. Requires `use_custom_template` to be true | | `group_with_project_templates_id` | integer | no | **(PREMIUM)** For group-level custom templates, specifies ID of group from which all the custom project templates are sourced. Leave empty for instance-level templates. Requires `use_custom_template` to be true |
| `packages_enabled` | boolean | no | **(PREMIUM ONLY)** Enable or disable packages repository feature |
NOTE: **Note:** If your HTTP repository is not publicly accessible, NOTE: **Note:** If your HTTP repository is not publicly accessible,
add authentication information to the URL: `https://username:password@gitlab.company.com/group/project.git` add authentication information to the URL: `https://username:password@gitlab.company.com/group/project.git`
......
...@@ -2478,12 +2478,13 @@ sequentially from `job_name 1/N` to `job_name N/N`. ...@@ -2478,12 +2478,13 @@ sequentially from `job_name 1/N` to `job_name N/N`.
For every job, `CI_NODE_INDEX` and `CI_NODE_TOTAL` [environment variables](../variables/README.md#predefined-environment-variables) are set. For every job, `CI_NODE_INDEX` and `CI_NODE_TOTAL` [environment variables](../variables/README.md#predefined-environment-variables) are set.
Marking a job to be run in parallel requires only a simple addition to your configuration file: Marking a job to be run in parallel requires adding `parallel` to your configuration
file. For example:
```diff ```yaml
test: test:
script: rspec script: rspec
+ parallel: 5 parallel: 5
``` ```
TIP: **Tip:** TIP: **Tip:**
...@@ -2531,7 +2532,7 @@ triggers being used. ...@@ -2531,7 +2532,7 @@ triggers being used.
#### Simple `trigger` syntax #### Simple `trigger` syntax
The most simple way to configure a downstream trigger to use `trigger` keyword The simplest way to configure a downstream trigger is to use `trigger` keyword
with a full path to a downstream project: with a full path to a downstream project:
```yaml ```yaml
...@@ -2563,7 +2564,7 @@ staging: ...@@ -2563,7 +2564,7 @@ staging:
It is possible to mirror the status from a triggered pipeline: It is possible to mirror the status from a triggered pipeline:
``` ```yaml
trigger_job: trigger_job:
trigger: trigger:
project: my/project project: my/project
...@@ -2572,7 +2573,7 @@ trigger_job: ...@@ -2572,7 +2573,7 @@ trigger_job:
It is possible to mirror the status from an upstream pipeline: It is possible to mirror the status from an upstream pipeline:
``` ```yaml
upstream_bridge: upstream_bridge:
stage: test stage: test
needs: needs:
...@@ -3286,7 +3287,7 @@ There are three possible values: `none`, `normal`, and `recursive`: ...@@ -3286,7 +3287,7 @@ There are three possible values: `none`, `normal`, and `recursive`:
- `normal` means that only the top-level submodules will be included. It is - `normal` means that only the top-level submodules will be included. It is
equivalent to: equivalent to:
``` ```shell
git submodule sync git submodule sync
git submodule update --init git submodule update --init
``` ```
...@@ -3296,7 +3297,7 @@ There are three possible values: `none`, `normal`, and `recursive`: ...@@ -3296,7 +3297,7 @@ There are three possible values: `none`, `normal`, and `recursive`:
GitLab Runner with an executor not based on Docker, make sure the Git version GitLab Runner with an executor not based on Docker, make sure the Git version
meets that requirement. It is equivalent to: meets that requirement. It is equivalent to:
``` ```shell
git submodule sync --recursive git submodule sync --recursive
git submodule update --init --recursive git submodule update --init --recursive
``` ```
...@@ -3557,7 +3558,7 @@ Read more about the various [YAML features](https://learnxinyminutes.com/docs/ya ...@@ -3557,7 +3558,7 @@ Read more about the various [YAML features](https://learnxinyminutes.com/docs/ya
If you want to temporarily 'disable' a job, rather than commenting out all the If you want to temporarily 'disable' a job, rather than commenting out all the
lines where the job is defined: lines where the job is defined:
``` ```yaml
#hidden_job: #hidden_job:
# script: # script:
# - run test # - run test
......
...@@ -38,7 +38,7 @@ The following are guides to basic GitLab functionality: ...@@ -38,7 +38,7 @@ The following are guides to basic GitLab functionality:
If you're familiar with Git on the command line, you can interact with your GitLab If you're familiar with Git on the command line, you can interact with your GitLab
projects just as you would with any other Git repository. projects just as you would with any other Git repository.
These resources will help get further acclimated to working on the command line. These resources will help you get further acclimated to working on the command line.
- [Start using Git on the command line](start-using-git.md), for some simple Git commands. - [Start using Git on the command line](start-using-git.md), for some simple Git commands.
- [Command line basics](command-line-commands.md), to create and edit files using the command line. - [Command line basics](command-line-commands.md), to create and edit files using the command line.
......
...@@ -153,6 +153,27 @@ A few notes: ...@@ -153,6 +153,27 @@ A few notes:
cycles, calculate their median time and the result is what the dashboard of cycles, calculate their median time and the result is what the dashboard of
Cycle Analytics is showing. Cycle Analytics is showing.
## Days to completion chart
> [Introduced](https://gitlab.com/gitlab-org/gitlab/merge_requests/21631) in GitLab 12.6.
This chart visually depicts the total number of days it takes for cycles to be completed.
This chart uses the global page filters for displaying data based on the selected
group, projects, and timeframe. In addition, specific stages can be selected
from within the chart itself.
### Enabling chart
By default, this chart is disabled for self-managed instances. To enable it, ask an
administrator with Rails console access to run the following:
```ruby
Feature.enable(:cycle_analytics_scatterplot_enabled)
```
This chart is enabled by default on GitLab.com.
## Permissions ## Permissions
The current permissions on the Project Cycle Analytics dashboard are: The current permissions on the Project Cycle Analytics dashboard are:
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment