From 6287caa6fad6e2b69c23bdba3bcca6bdfd82c8ff Mon Sep 17 00:00:00 2001 From: GitLab Bot Date: Thu, 19 Dec 2019 06:08:05 +0000 Subject: [PATCH] Add latest changes from gitlab-org/gitlab@master --- app/graphql/types/ci/detailed_status_type.rb | 26 +++++-- app/graphql/types/ci/pipeline_type.rb | 43 +++++----- doc/administration/housekeeping.md | 9 +-- .../performance/gitlab_configuration.md | 4 +- doc/administration/repository_checks.md | 7 +- .../graphql/reference/gitlab_schema.graphql | 78 ++++++++++++++++++- doc/api/graphql/reference/gitlab_schema.json | 42 +++++----- doc/api/graphql/reference/index.md | 42 +++++----- doc/development/README.md | 2 + doc/development/issue_types.md | 45 +++++++++++ 10 files changed, 216 insertions(+), 82 deletions(-) create mode 100644 doc/development/issue_types.md diff --git a/app/graphql/types/ci/detailed_status_type.rb b/app/graphql/types/ci/detailed_status_type.rb index d2847641d91..90b5283fc9a 100644 --- a/app/graphql/types/ci/detailed_status_type.rb +++ b/app/graphql/types/ci/detailed_status_type.rb @@ -6,14 +6,24 @@ module Types class DetailedStatusType < BaseObject graphql_name 'DetailedStatus' - field :group, GraphQL::STRING_TYPE, null: false # rubocop:disable Graphql/Descriptions - field :icon, GraphQL::STRING_TYPE, null: false # rubocop:disable Graphql/Descriptions - field :favicon, GraphQL::STRING_TYPE, null: false # rubocop:disable Graphql/Descriptions - field :details_path, GraphQL::STRING_TYPE, null: false # rubocop:disable Graphql/Descriptions - field :has_details, GraphQL::BOOLEAN_TYPE, null: false, method: :has_details? # rubocop:disable Graphql/Descriptions - field :label, GraphQL::STRING_TYPE, null: false # rubocop:disable Graphql/Descriptions - field :text, GraphQL::STRING_TYPE, null: false # rubocop:disable Graphql/Descriptions - field :tooltip, GraphQL::STRING_TYPE, null: false, method: :status_tooltip # rubocop:disable Graphql/Descriptions + field :group, GraphQL::STRING_TYPE, null: false, + description: 'Group of the pipeline status' + field :icon, GraphQL::STRING_TYPE, null: false, + description: 'Icon of the pipeline status' + field :favicon, GraphQL::STRING_TYPE, null: false, + description: 'Favicon of the pipeline status' + field :details_path, GraphQL::STRING_TYPE, null: false, + description: 'Path of the details for the pipeline status' + field :has_details, GraphQL::BOOLEAN_TYPE, null: false, + description: 'Indicates if the pipeline status has further details', + method: :has_details? + field :label, GraphQL::STRING_TYPE, null: false, + description: 'Label of the pipeline status' + field :text, GraphQL::STRING_TYPE, null: false, + description: 'Text of the pipeline status' + field :tooltip, GraphQL::STRING_TYPE, null: false, + description: 'Tooltip associated with the pipeline status', + method: :status_tooltip end # rubocop: enable Graphql/AuthorizeTypes end diff --git a/app/graphql/types/ci/pipeline_type.rb b/app/graphql/types/ci/pipeline_type.rb index dfcfd6211bc..e786add6359 100644 --- a/app/graphql/types/ci/pipeline_type.rb +++ b/app/graphql/types/ci/pipeline_type.rb @@ -9,29 +9,34 @@ module Types expose_permissions Types::PermissionTypes::Ci::Pipeline - field :id, GraphQL::ID_TYPE, null: false # rubocop:disable Graphql/Descriptions - field :iid, GraphQL::STRING_TYPE, null: false # rubocop:disable Graphql/Descriptions + field :id, GraphQL::ID_TYPE, null: false, + description: 'ID of the pipeline' + field :iid, GraphQL::STRING_TYPE, null: false, + description: 'Internal ID of the pipeline' - field :sha, GraphQL::STRING_TYPE, null: false # rubocop:disable Graphql/Descriptions - field :before_sha, GraphQL::STRING_TYPE, null: true # rubocop:disable Graphql/Descriptions - field :status, PipelineStatusEnum, null: false # rubocop:disable Graphql/Descriptions - field :detailed_status, # rubocop:disable Graphql/Descriptions - Types::Ci::DetailedStatusType, - null: false, + field :sha, GraphQL::STRING_TYPE, null: false, + description: "SHA of the pipeline's commit" + field :before_sha, GraphQL::STRING_TYPE, null: true, + description: "Base SHA of the source branch" + field :status, PipelineStatusEnum, null: false, + description: "Status of the pipeline (#{::Ci::Pipeline.all_state_names.compact.join(', ').upcase})" + field :detailed_status, Types::Ci::DetailedStatusType, null: false, + description: 'Detailed status of the pipeline', resolve: -> (obj, _args, ctx) { obj.detailed_status(ctx[:current_user]) } - field :duration, - GraphQL::INT_TYPE, - null: true, + field :duration, GraphQL::INT_TYPE, null: true, description: "Duration of the pipeline in seconds" - field :coverage, - GraphQL::FLOAT_TYPE, - null: true, + field :coverage, GraphQL::FLOAT_TYPE, null: true, description: "Coverage percentage" - field :created_at, Types::TimeType, null: false # rubocop:disable Graphql/Descriptions - field :updated_at, Types::TimeType, null: false # rubocop:disable Graphql/Descriptions - field :started_at, Types::TimeType, null: true # rubocop:disable Graphql/Descriptions - field :finished_at, Types::TimeType, null: true # rubocop:disable Graphql/Descriptions - field :committed_at, Types::TimeType, null: true # rubocop:disable Graphql/Descriptions + field :created_at, Types::TimeType, null: false, + description: "Timestamp of the pipeline's creation" + field :updated_at, Types::TimeType, null: false, + description: "Timestamp of the pipeline's last activity" + field :started_at, Types::TimeType, null: true, + description: 'Timestamp when the pipeline was started' + field :finished_at, Types::TimeType, null: true, + description: "Timestamp of the pipeline's completion" + field :committed_at, Types::TimeType, null: true, + description: "Timestamp of the pipeline's commit" # TODO: Add triggering user as a type end diff --git a/doc/administration/housekeeping.md b/doc/administration/housekeeping.md index 9083619841e..c2c31d2d813 100644 --- a/doc/administration/housekeeping.md +++ b/doc/administration/housekeeping.md @@ -5,14 +5,13 @@ ## Automatic housekeeping GitLab automatically runs `git gc` and `git repack` on repositories -after Git pushes. If needed you can change how often this happens, or -to turn it off, go to **Admin area > Settings** -(`/admin/application_settings`). +after Git pushes. You can change how often this happens or turn it off in +**Admin area > Settings > Repository** (`/admin/application_settings/repository`). ## Manual housekeeping -The housekeeping function will run a `repack` or `gc` depending on the -"Automatic Git repository housekeeping" settings configured in **Admin area > Settings** +The housekeeping function runs `repack` or `gc` depending on the +**Housekeeping** settings configured in **Admin area > Settings > Repository**. For example in the following scenario a `git repack -d` will be executed: diff --git a/doc/administration/monitoring/performance/gitlab_configuration.md b/doc/administration/monitoring/performance/gitlab_configuration.md index 8245c25ad25..528e032417a 100644 --- a/doc/administration/monitoring/performance/gitlab_configuration.md +++ b/doc/administration/monitoring/performance/gitlab_configuration.md @@ -5,8 +5,8 @@ InfluxDB support is scheduled to be removed in GitLab 13.0. You are advised to use [Prometheus](../prometheus/index.md) instead. GitLab Performance Monitoring is disabled by default. To enable it and change any of its -settings, navigate to the Admin area in **Settings > Metrics** -(`/admin/application_settings`). +settings, navigate to **Admin Area > Settings > Metrics and profiling** +(`/admin/application_settings/metrics_and_profiling`). The minimum required settings you need to set are the InfluxDB host and port. Make sure _Enable InfluxDB Metrics_ is checked and hit **Save** to save the diff --git a/doc/administration/repository_checks.md b/doc/administration/repository_checks.md index 6bf10441369..62dd12af87f 100644 --- a/doc/administration/repository_checks.md +++ b/doc/administration/repository_checks.md @@ -36,10 +36,9 @@ in `repocheck.log`: - `/var/log/gitlab/gitlab-rails` for Omnibus installations - `/home/git/gitlab/log` for installations from source -If for some reason the periodic repository check caused a lot of false -alarms you can choose to clear *all* repository check states by -clicking "Clear all repository checks" on the **Settings** page of the -admin panel (`/admin/application_settings`). +If the periodic repository check causes false alarms, you can clear all repository check states by +navigating to **Admin area > Settings > Repository** +(`/admin/application_settings/repository`) and clicking **Clear all repository checks**. --- [ce-3232]: https://gitlab.com/gitlab-org/gitlab-foss/merge_requests/3232 "Auto git fsck" diff --git a/doc/api/graphql/reference/gitlab_schema.graphql b/doc/api/graphql/reference/gitlab_schema.graphql index 4673356cf9d..bc3395920ab 100644 --- a/doc/api/graphql/reference/gitlab_schema.graphql +++ b/doc/api/graphql/reference/gitlab_schema.graphql @@ -957,13 +957,44 @@ type DestroySnippetPayload { } type DetailedStatus { + """ + Path of the details for the pipeline status + """ detailsPath: String! + + """ + Favicon of the pipeline status + """ favicon: String! + + """ + Group of the pipeline status + """ group: String! + + """ + Indicates if the pipeline status has further details + """ hasDetails: Boolean! + + """ + Icon of the pipeline status + """ icon: String! + + """ + Label of the pipeline status + """ label: String! + + """ + Text of the pipeline status + """ text: String! + + """ + Tooltip associated with the pipeline status + """ tooltip: String! } @@ -1693,7 +1724,7 @@ type EpicIssue implements Noteable { designCollection: DesignCollection """ - Deprecated. Use `design_collection`. + Deprecated. Use `design_collection` """ designs: DesignCollection @deprecated(reason: "use design_collection") @@ -2508,7 +2539,7 @@ type Issue implements Noteable { designCollection: DesignCollection """ - Deprecated. Use `design_collection`. + Deprecated. Use `design_collection` """ designs: DesignCollection @deprecated(reason: "use design_collection") @@ -4312,26 +4343,69 @@ type PageInfo { } type Pipeline { + """ + Base SHA of the source branch + """ beforeSha: String + + """ + Timestamp of the pipeline's commit + """ committedAt: Time """ Coverage percentage """ coverage: Float + + """ + Timestamp of the pipeline's creation + """ createdAt: Time! + + """ + Detailed status of the pipeline + """ detailedStatus: DetailedStatus! """ Duration of the pipeline in seconds """ duration: Int + + """ + Timestamp of the pipeline's completion + """ finishedAt: Time + + """ + ID of the pipeline + """ id: ID! + + """ + Internal ID of the pipeline + """ iid: String! + + """ + SHA of the pipeline's commit + """ sha: String! + + """ + Timestamp when the pipeline was started + """ startedAt: Time + + """ + Status of the pipeline (CREATED, PREPARING, PENDING, RUNNING, FAILED, SUCCESS, CANCELED, SKIPPED, MANUAL, SCHEDULED) + """ status: PipelineStatusEnum! + + """ + Timestamp of the pipeline's last activity + """ updatedAt: Time! """ diff --git a/doc/api/graphql/reference/gitlab_schema.json b/doc/api/graphql/reference/gitlab_schema.json index 398ae52c130..3c30d2482e8 100644 --- a/doc/api/graphql/reference/gitlab_schema.json +++ b/doc/api/graphql/reference/gitlab_schema.json @@ -8148,7 +8148,7 @@ }, { "name": "designs", - "description": "Deprecated. Use `design_collection`.", + "description": "Deprecated. Use `design_collection`", "args": [ ], @@ -9578,7 +9578,7 @@ }, { "name": "designs", - "description": "Deprecated. Use `design_collection`.", + "description": "Deprecated. Use `design_collection`", "args": [ ], @@ -12029,7 +12029,7 @@ "fields": [ { "name": "beforeSha", - "description": null, + "description": "Base SHA of the source branch", "args": [ ], @@ -12043,7 +12043,7 @@ }, { "name": "committedAt", - "description": null, + "description": "Timestamp of the pipeline's commit", "args": [ ], @@ -12071,7 +12071,7 @@ }, { "name": "createdAt", - "description": null, + "description": "Timestamp of the pipeline's creation", "args": [ ], @@ -12089,7 +12089,7 @@ }, { "name": "detailedStatus", - "description": null, + "description": "Detailed status of the pipeline", "args": [ ], @@ -12121,7 +12121,7 @@ }, { "name": "finishedAt", - "description": null, + "description": "Timestamp of the pipeline's completion", "args": [ ], @@ -12135,7 +12135,7 @@ }, { "name": "id", - "description": null, + "description": "ID of the pipeline", "args": [ ], @@ -12153,7 +12153,7 @@ }, { "name": "iid", - "description": null, + "description": "Internal ID of the pipeline", "args": [ ], @@ -12171,7 +12171,7 @@ }, { "name": "sha", - "description": null, + "description": "SHA of the pipeline's commit", "args": [ ], @@ -12189,7 +12189,7 @@ }, { "name": "startedAt", - "description": null, + "description": "Timestamp when the pipeline was started", "args": [ ], @@ -12203,7 +12203,7 @@ }, { "name": "status", - "description": null, + "description": "Status of the pipeline (CREATED, PREPARING, PENDING, RUNNING, FAILED, SUCCESS, CANCELED, SKIPPED, MANUAL, SCHEDULED)", "args": [ ], @@ -12221,7 +12221,7 @@ }, { "name": "updatedAt", - "description": null, + "description": "Timestamp of the pipeline's last activity", "args": [ ], @@ -12408,7 +12408,7 @@ "fields": [ { "name": "detailsPath", - "description": null, + "description": "Path of the details for the pipeline status", "args": [ ], @@ -12426,7 +12426,7 @@ }, { "name": "favicon", - "description": null, + "description": "Favicon of the pipeline status", "args": [ ], @@ -12444,7 +12444,7 @@ }, { "name": "group", - "description": null, + "description": "Group of the pipeline status", "args": [ ], @@ -12462,7 +12462,7 @@ }, { "name": "hasDetails", - "description": null, + "description": "Indicates if the pipeline status has further details", "args": [ ], @@ -12480,7 +12480,7 @@ }, { "name": "icon", - "description": null, + "description": "Icon of the pipeline status", "args": [ ], @@ -12498,7 +12498,7 @@ }, { "name": "label", - "description": null, + "description": "Label of the pipeline status", "args": [ ], @@ -12516,7 +12516,7 @@ }, { "name": "text", - "description": null, + "description": "Text of the pipeline status", "args": [ ], @@ -12534,7 +12534,7 @@ }, { "name": "tooltip", - "description": null, + "description": "Tooltip associated with the pipeline status", "args": [ ], diff --git a/doc/api/graphql/reference/index.md b/doc/api/graphql/reference/index.md index 9fb39322f5c..1669e3d604c 100644 --- a/doc/api/graphql/reference/index.md +++ b/doc/api/graphql/reference/index.md @@ -165,14 +165,14 @@ The API can be explored interactively using the [GraphiQL IDE](../index.md#graph | Name | Type | Description | | --- | ---- | ---------- | -| `group` | String! | | -| `icon` | String! | | -| `favicon` | String! | | -| `detailsPath` | String! | | -| `hasDetails` | Boolean! | | -| `label` | String! | | -| `text` | String! | | -| `tooltip` | String! | | +| `group` | String! | Group of the pipeline status | +| `icon` | String! | Icon of the pipeline status | +| `favicon` | String! | Favicon of the pipeline status | +| `detailsPath` | String! | Path of the details for the pipeline status | +| `hasDetails` | Boolean! | Indicates if the pipeline status has further details | +| `label` | String! | Label of the pipeline status | +| `text` | String! | Text of the pipeline status | +| `tooltip` | String! | Tooltip associated with the pipeline status | ### DiffPosition @@ -283,7 +283,7 @@ The API can be explored interactively using the [GraphiQL IDE](../index.md#graph | `taskCompletionStatus` | TaskCompletionStatus! | Task completion status of the issue | | `epic` | Epic | Epic to which this issue belongs | | `weight` | Int | Weight of the issue | -| `designs` | DesignCollection | Deprecated. Use `design_collection`. | +| `designs` | DesignCollection | Deprecated. Use `design_collection` | | `designCollection` | DesignCollection | Collection of design images associated with this issue | | `epicIssueId` | ID! | ID of the epic-issue relation | | `relationPath` | String | URI path of the epic-issue relation | @@ -378,7 +378,7 @@ The API can be explored interactively using the [GraphiQL IDE](../index.md#graph | `taskCompletionStatus` | TaskCompletionStatus! | Task completion status of the issue | | `epic` | Epic | Epic to which this issue belongs | | `weight` | Int | Weight of the issue | -| `designs` | DesignCollection | Deprecated. Use `design_collection`. | +| `designs` | DesignCollection | Deprecated. Use `design_collection` | | `designCollection` | DesignCollection | Collection of design images associated with this issue | ### IssuePermissions @@ -631,19 +631,19 @@ The API can be explored interactively using the [GraphiQL IDE](../index.md#graph | Name | Type | Description | | --- | ---- | ---------- | | `userPermissions` | PipelinePermissions! | Permissions for the current user on the resource | -| `id` | ID! | | -| `iid` | String! | | -| `sha` | String! | | -| `beforeSha` | String | | -| `status` | PipelineStatusEnum! | | -| `detailedStatus` | DetailedStatus! | | +| `id` | ID! | ID of the pipeline | +| `iid` | String! | Internal ID of the pipeline | +| `sha` | String! | SHA of the pipeline's commit | +| `beforeSha` | String | Base SHA of the source branch | +| `status` | PipelineStatusEnum! | Status of the pipeline (CREATED, PREPARING, PENDING, RUNNING, FAILED, SUCCESS, CANCELED, SKIPPED, MANUAL, SCHEDULED) | +| `detailedStatus` | DetailedStatus! | Detailed status of the pipeline | | `duration` | Int | Duration of the pipeline in seconds | | `coverage` | Float | Coverage percentage | -| `createdAt` | Time! | | -| `updatedAt` | Time! | | -| `startedAt` | Time | | -| `finishedAt` | Time | | -| `committedAt` | Time | | +| `createdAt` | Time! | Timestamp of the pipeline's creation | +| `updatedAt` | Time! | Timestamp of the pipeline's last activity | +| `startedAt` | Time | Timestamp when the pipeline was started | +| `finishedAt` | Time | Timestamp of the pipeline's completion | +| `committedAt` | Time | Timestamp of the pipeline's commit | ### PipelinePermissions diff --git a/doc/development/README.md b/doc/development/README.md index 3a972c4c588..53133366c78 100644 --- a/doc/development/README.md +++ b/doc/development/README.md @@ -71,6 +71,7 @@ description: 'Learn how to contribute to GitLab.' - [Auto DevOps development guide](auto_devops.md) - [Mass Inserting Models](mass_insert.md) - [Cycle Analytics development guide](cycle_analytics.md) +- [Issue types vs first-class types](issue_types.md) ## Performance guides @@ -106,6 +107,7 @@ description: 'Learn how to contribute to GitLab.' ### Debugging - Tracing the source of an SQL query using query comments with [Marginalia](database_query_comments.md) +- Tracing the source of an SQL query in Rails console using [Verbose Query Logs](https://guides.rubyonrails.org/debugging_rails_applications.html#verbose-query-logs) ### Best practices diff --git a/doc/development/issue_types.md b/doc/development/issue_types.md new file mode 100644 index 00000000000..bcd3980c298 --- /dev/null +++ b/doc/development/issue_types.md @@ -0,0 +1,45 @@ +# Issue Types + +Sometimes when a new resource type is added it's not clear if it should be only an +"extension" of Issue (Issue Type) or if it should be a new first-class resource type +(similar to Issue, Epic, Merge Request, Snippet). + +The idea of Issue Types was first proposed in [this +issue](https://gitlab.com/gitlab-org/gitlab/issues/8767) and its usage was +discussed few times since then, for example in [incident +management](https://gitlab.com/gitlab-org/gitlab-foss/issues/55532). + +## What is an Issue Type + +Issue Type is a resource type which extends the existing Issue type and can be +used anywhere where Issue is used - for example when listing or searching +issues or when linking objects of the type from Epics. It should use the same +`issues` table, additional fields can be stored in a separate table. + +## When an Issue Type should be used + +- When the new type only adds new fields to the basic Issue type without + removing existing fields (but it's OK if some fields from the basic Issue + type are hidden in user interface/API). +- When the new type can be used anywhere where the basic Issue type is used. + +## When a first-class resource type should be used + +- When a separate model and table is used for the new resource. +- When some fields of the basic Issue type need to be removed - hiding in the UI + is OK, but not complete removal. +- When the new resource cannot be used instead of the basic Issue type, + for example: + + - You can't add it to an epic. + - You can't close it from a commit or a merge request. + - You can't mark it as related to another issue. + +If an Issue type can not be used you can still define a first-class type and +then include concerns such as `Issuable` or `Noteable` to reuse functionality +which is common for all our issue-related resources. But you still need to +define the interface for working with the new resource and update some other +components to make them work with the new type. + +Usage of the Issue type limits what fields, functionality, or both is available +for the type. However, this functionality is provided by default.