Add latest changes from gitlab-org/gitlab@master
This commit is contained in:
parent
2e26679b96
commit
b6a92c969b
2
Gemfile
2
Gemfile
|
@ -138,7 +138,7 @@ gem 'faraday_middleware-aws-signers-v4'
|
|||
# Markdown and HTML processing
|
||||
gem 'html-pipeline', '~> 2.12'
|
||||
gem 'deckar01-task_list', '2.3.1'
|
||||
gem 'gitlab-markup', '~> 1.7.0'
|
||||
gem 'gitlab-markup', '~> 1.7.1'
|
||||
gem 'github-markup', '~> 1.7.0', require: 'github/markup'
|
||||
gem 'commonmarker', '~> 0.20'
|
||||
gem 'RedCloth', '~> 4.3.2'
|
||||
|
|
|
@ -392,7 +392,7 @@ GEM
|
|||
redis (> 3.0.0, < 5.0.0)
|
||||
gitlab-license (1.0.0)
|
||||
gitlab-mail_room (0.0.4)
|
||||
gitlab-markup (1.7.0)
|
||||
gitlab-markup (1.7.1)
|
||||
gitlab-net-dns (0.9.1)
|
||||
gitlab-puma (4.3.3.gitlab.2)
|
||||
nio4r (~> 2.0)
|
||||
|
@ -1245,7 +1245,7 @@ DEPENDENCIES
|
|||
gitlab-labkit (= 0.12.0)
|
||||
gitlab-license (~> 1.0)
|
||||
gitlab-mail_room (~> 0.0.4)
|
||||
gitlab-markup (~> 1.7.0)
|
||||
gitlab-markup (~> 1.7.1)
|
||||
gitlab-net-dns (~> 0.9.1)
|
||||
gitlab-puma (~> 4.3.3.gitlab.2)
|
||||
gitlab-puma_worker_killer (~> 0.1.1.gitlab.1)
|
||||
|
|
|
@ -13,6 +13,8 @@ import { s__ } from '~/locale';
|
|||
import TimeAgo from '~/vue_shared/components/time_ago_tooltip.vue';
|
||||
import getAlerts from '../graphql/queries/getAlerts.query.graphql';
|
||||
|
||||
const tdClass = 'table-col d-flex d-md-table-cell align-items-center';
|
||||
|
||||
export default {
|
||||
i18n: {
|
||||
noAlertsMsg: s__(
|
||||
|
@ -26,29 +28,34 @@ export default {
|
|||
{
|
||||
key: 'severity',
|
||||
label: s__('AlertManagement|Severity'),
|
||||
tdClass: `${tdClass} rounded-top text-capitalize`,
|
||||
},
|
||||
{
|
||||
key: 'startedAt',
|
||||
label: s__('AlertManagement|Start time'),
|
||||
tdClass,
|
||||
},
|
||||
{
|
||||
key: 'endedAt',
|
||||
label: s__('AlertManagement|End time'),
|
||||
tdClass,
|
||||
},
|
||||
{
|
||||
key: 'title',
|
||||
label: s__('AlertManagement|Alert'),
|
||||
thClass: 'w-30p',
|
||||
tdClass,
|
||||
},
|
||||
{
|
||||
key: 'eventCount',
|
||||
label: s__('AlertManagement|Events'),
|
||||
thClass: 'text-right event-count',
|
||||
tdClass: 'text-right event-count',
|
||||
tdClass: `${tdClass} text-md-right event-count`,
|
||||
},
|
||||
{
|
||||
key: 'status',
|
||||
label: s__('AlertManagement|Status'),
|
||||
tdClass: `${tdClass} rounded-bottom text-capitalize`,
|
||||
},
|
||||
],
|
||||
statuses: {
|
||||
|
@ -137,8 +144,11 @@ export default {
|
|||
{{ $options.i18n.errorMsg }}
|
||||
</gl-alert>
|
||||
|
||||
<h4 class="d-block d-md-none my-3">
|
||||
{{ s__('AlertManagement|Alerts') }}
|
||||
</h4>
|
||||
<gl-table
|
||||
class="mt-3"
|
||||
class="alert-management-table mt-3"
|
||||
:items="alerts"
|
||||
:fields="$options.fields"
|
||||
:show-empty="true"
|
||||
|
@ -169,6 +179,7 @@ export default {
|
|||
<template #cell(title)="{ item }">
|
||||
<div class="gl-max-w-full text-truncate">{{ item.title }}</div>
|
||||
</template>
|
||||
|
||||
<template #cell(status)="{ item }">
|
||||
<gl-new-dropdown class="w-100" :text="item.status">
|
||||
<gl-new-dropdown-item v-for="(label, field) in $options.statuses" :key="field">
|
||||
|
|
|
@ -72,9 +72,6 @@ export default {
|
|||
dismissCookieName() {
|
||||
return `${this.trackLabel}_${this.dismissKey}`;
|
||||
},
|
||||
commitCookieName() {
|
||||
return `suggest_gitlab_ci_yml_commit_${this.dismissKey}`;
|
||||
},
|
||||
},
|
||||
mounted() {
|
||||
if (
|
||||
|
|
|
@ -106,7 +106,6 @@ function deferredInitialisation() {
|
|||
initLogoAnimation();
|
||||
initUsagePingConsent();
|
||||
initUserPopovers();
|
||||
initUserTracking();
|
||||
initBroadcastNotifications();
|
||||
|
||||
const recoverySettingsCallout = document.querySelector('.js-recovery-settings-callout');
|
||||
|
@ -187,6 +186,7 @@ document.addEventListener('DOMContentLoaded', () => {
|
|||
|
||||
if (document.querySelector('#js-peek')) initPerformanceBar({ container: '#js-peek' });
|
||||
|
||||
initUserTracking();
|
||||
initLayoutNav();
|
||||
|
||||
// Set the default path for all cookies to GitLab's root directory
|
||||
|
|
|
@ -1,12 +1,3 @@
|
|||
import initBlobBundle from '~/blob_edit/blob_bundle';
|
||||
import initPopover from '~/blob/suggest_gitlab_ci_yml';
|
||||
|
||||
document.addEventListener('DOMContentLoaded', () => {
|
||||
initBlobBundle();
|
||||
|
||||
const suggestEl = document.querySelector('.js-suggest-gitlab-ci-yml');
|
||||
|
||||
if (suggestEl) {
|
||||
initPopover(suggestEl);
|
||||
}
|
||||
});
|
||||
document.addEventListener('DOMContentLoaded', initBlobBundle);
|
||||
|
|
|
@ -53,4 +53,25 @@
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
@include media-breakpoint-down(sm) {
|
||||
.alert-management-table {
|
||||
.table-col {
|
||||
min-height: 68px;
|
||||
|
||||
&:last-child {
|
||||
background-color: $gray-normal;
|
||||
|
||||
&::before {
|
||||
content: none !important;
|
||||
}
|
||||
|
||||
div {
|
||||
width: 100% !important;
|
||||
padding: 0 !important;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -12,7 +12,8 @@ module AlertManagement
|
|||
return AlertManagement::Alert.none unless authorized?
|
||||
|
||||
collection = project.alert_management_alerts
|
||||
by_iid(collection)
|
||||
collection = by_iid(collection)
|
||||
sort(collection)
|
||||
end
|
||||
|
||||
private
|
||||
|
@ -25,6 +26,10 @@ module AlertManagement
|
|||
collection.for_iid(params[:iid])
|
||||
end
|
||||
|
||||
def sort(collection)
|
||||
params[:sort] ? collection.sort_by_attribute(params[:sort]) : collection
|
||||
end
|
||||
|
||||
def authorized?
|
||||
Ability.allowed?(current_user, :read_alert_management_alerts, project)
|
||||
end
|
||||
|
|
|
@ -6,6 +6,10 @@ module Resolvers
|
|||
required: false,
|
||||
description: 'IID of the alert. For example, "1"'
|
||||
|
||||
argument :sort, Types::AlertManagement::AlertSortEnum,
|
||||
description: 'Sort alerts by this criteria',
|
||||
required: false
|
||||
|
||||
type Types::AlertManagement::AlertType, null: true
|
||||
|
||||
def resolve(**args)
|
||||
|
|
|
@ -0,0 +1,25 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
module Types
|
||||
module AlertManagement
|
||||
class AlertSortEnum < SortEnum
|
||||
graphql_name 'AlertManagementAlertSort'
|
||||
description 'Values for sorting alerts'
|
||||
|
||||
value 'START_TIME_ASC', 'Start time by ascending order', value: :start_time_asc
|
||||
value 'START_TIME_DESC', 'Start time by descending order', value: :start_time_desc
|
||||
value 'END_TIME_ASC', 'End time by ascending order', value: :end_time_asc
|
||||
value 'END_TIME_DESC', 'End time by descending order', value: :end_time_desc
|
||||
value 'CREATED_TIME_ASC', 'Created time by ascending order', value: :created_at_asc
|
||||
value 'CREATED_TIME_DESC', 'Created time by ascending order', value: :created_at_desc
|
||||
value 'UPDATED_TIME_ASC', 'Created time by ascending order', value: :updated_at_desc
|
||||
value 'UPDATED_TIME_DESC', 'Created time by ascending order', value: :updated_at_desc
|
||||
value 'EVENTS_COUNT_ASC', 'Events count by ascending order', value: :events_count_asc
|
||||
value 'EVENTS_COUNT_DESC', 'Events count by descending order', value: :events_count_desc
|
||||
value 'SEVERITY_ASC', 'Severity by ascending order', value: :severity_asc
|
||||
value 'SEVERITY_DESC', 'Severity by descending order', value: :severity_desc
|
||||
value 'STATUS_ASC', 'Status by ascending order', value: :status_asc
|
||||
value 'STATUS_DESC', 'Status by descending order', value: :status_desc
|
||||
end
|
||||
end
|
||||
end
|
|
@ -4,6 +4,7 @@ module AlertManagement
|
|||
class Alert < ApplicationRecord
|
||||
include AtomicInternalId
|
||||
include ShaAttribute
|
||||
include Sortable
|
||||
|
||||
belongs_to :project
|
||||
belongs_to :issue, optional: true
|
||||
|
@ -45,6 +46,29 @@ module AlertManagement
|
|||
|
||||
scope :for_iid, -> (iid) { where(iid: iid) }
|
||||
|
||||
scope :order_start_time, -> (sort_order) { order(started_at: sort_order) }
|
||||
scope :order_end_time, -> (sort_order) { order(ended_at: sort_order) }
|
||||
scope :order_events_count, -> (sort_order) { order(events: sort_order) }
|
||||
scope :order_severity, -> (sort_order) { order(severity: sort_order) }
|
||||
scope :order_status, -> (sort_order) { order(status: sort_order) }
|
||||
|
||||
def self.sort_by_attribute(method)
|
||||
case method.to_s
|
||||
when 'start_time_asc' then order_start_time(:asc)
|
||||
when 'start_time_desc' then order_start_time(:desc)
|
||||
when 'end_time_asc' then order_end_time(:asc)
|
||||
when 'end_time_desc' then order_end_time(:desc)
|
||||
when 'events_count_asc' then order_events_count(:asc)
|
||||
when 'events_count_desc' then order_events_count(:desc)
|
||||
when 'severity_asc' then order_severity(:asc)
|
||||
when 'severity_desc' then order_severity(:desc)
|
||||
when 'status_asc' then order_status(:asc)
|
||||
when 'status_desc' then order_status(:desc)
|
||||
else
|
||||
order_by(method)
|
||||
end
|
||||
end
|
||||
|
||||
def fingerprint=(value)
|
||||
if value.blank?
|
||||
super(nil)
|
||||
|
|
|
@ -0,0 +1,5 @@
|
|||
---
|
||||
title: Alert Management mobile styling
|
||||
merge_request: 31082
|
||||
author:
|
||||
type: other
|
|
@ -0,0 +1,5 @@
|
|||
---
|
||||
title: Add sorting to AlertManagement Alert Graphql
|
||||
merge_request: 30964
|
||||
author:
|
||||
type: added
|
|
@ -0,0 +1,5 @@
|
|||
---
|
||||
title: Fix RST rendering hanging on large files
|
||||
merge_request: 31287
|
||||
author:
|
||||
type: fixed
|
|
@ -94,7 +94,7 @@ The OpenID Connect will provide you with a client details and secret for you to
|
|||
- `basic` - HTTP Basic Authentication
|
||||
- `jwt_bearer` - JWT based authentication (private key and client secret signing)
|
||||
- `mtls` - Mutual TLS or X.509 certificate validation
|
||||
- Any other value will POST the client id and secret in the request body
|
||||
- Any other value will POST the client ID and secret in the request body
|
||||
- If not specified, defaults to `basic`.
|
||||
- `<uid_field>` (optional) is the field name from the `user_info` details that will be used as `uid` value. For example, `preferred_username`.
|
||||
If this value is not provided or the field with the configured value is missing from the `user_info` details, the `uid` will use the `sub` field.
|
||||
|
|
|
@ -104,11 +104,29 @@ Omnibus GitLab or install it from source:
|
|||
### 2. Authentication
|
||||
|
||||
Gitaly and GitLab use two shared secrets for authentication, one to authenticate gRPC requests
|
||||
to Gitaly, and a second for authentication callbacks from Gitaly to the GitLab internal API.
|
||||
to Gitaly, and a second for authentication callbacks from GitLab-Shell to the GitLab internal API.
|
||||
|
||||
**For Omnibus GitLab**
|
||||
|
||||
There are two ways to configure the required tokens:
|
||||
To configure the Gitaly token:
|
||||
|
||||
1. On the client server, edit `/etc/gitlab/gitlab.rb`:
|
||||
|
||||
```ruby
|
||||
gitlab_rails['gitaly_token'] = 'abc123secret'
|
||||
```
|
||||
|
||||
1. Save the file and [reconfigure GitLab](../restart_gitlab.md#omnibus-gitlab-reconfigure).
|
||||
|
||||
1. On the Gitaly server, edit `/etc/gitlab/gitlab.rb`:
|
||||
|
||||
```ruby
|
||||
gitaly['auth_token'] = 'abc123secret'
|
||||
```
|
||||
|
||||
1. [Reconfigure GitLab](../restart_gitlab.md#omnibus-gitlab-reconfigure).
|
||||
|
||||
There are two ways to configure the GitLab-Shell token:
|
||||
|
||||
1. Copy `/etc/gitlab/gitlab-secrets.json` from the client server to same path on the Gitaly server.
|
||||
1. [Reconfigure GitLab](../restart_gitlab.md#omnibus-gitlab-reconfigure).
|
||||
|
@ -118,7 +136,6 @@ There are two ways to configure the required tokens:
|
|||
1. On the client server, edit `/etc/gitlab/gitlab.rb`:
|
||||
|
||||
```ruby
|
||||
gitlab_rails['gitaly_token'] = 'abc123secret'
|
||||
gitlab_shell['secret_token'] = 'shellsecret'
|
||||
```
|
||||
|
||||
|
@ -127,7 +144,6 @@ There are two ways to configure the required tokens:
|
|||
1. On the Gitaly server, edit `/etc/gitlab/gitlab.rb`:
|
||||
|
||||
```ruby
|
||||
gitaly['auth_token'] = 'abc123secret'
|
||||
gitlab_shell['secret_token'] = 'shellsecret'
|
||||
```
|
||||
|
||||
|
|
|
@ -169,10 +169,10 @@ diagram delimiters `@startuml`/`@enduml` as these are replaced by the AsciiDoc `
|
|||
|
||||
Some parameters can be added to the AsciiDoc block definition:
|
||||
|
||||
- *format*: Can be either `png` or `svg`. Note that `svg` is not supported by
|
||||
- `format`: Can be either `png` or `svg`. Note that `svg` is not supported by
|
||||
all browsers so use with care. The default is `png`.
|
||||
- *id*: A CSS id added to the diagram HTML tag.
|
||||
- *width*: Width attribute added to the image tag.
|
||||
- *height*: Height attribute added to the image tag.
|
||||
- `id`: A CSS ID added to the diagram HTML tag.
|
||||
- `width`: Width attribute added to the image tag.
|
||||
- `height`: Height attribute added to the image tag.
|
||||
|
||||
Markdown does not support any parameters and will always use PNG format.
|
||||
|
|
|
@ -78,7 +78,7 @@ The following metrics are available:
|
|||
| `gitlab_transaction_event_remove_tag_total` | Counter | 9.4 | Counter when a tag is remove for any repository | |
|
||||
| `gitlab_transaction_event_sidekiq_exception_total` | Counter | 9.4 | Counter of Sidekiq exceptions | |
|
||||
| `gitlab_transaction_event_stuck_import_jobs_total` | Counter | 9.4 | Count of stuck import jobs | `projects_without_jid_count`, `projects_with_jid_count` |
|
||||
| `gitlab_transaction_event_update_build_total` | Counter | 9.4 | Counter for update build for API /jobs/request/:id | |
|
||||
| `gitlab_transaction_event_update_build_total` | Counter | 9.4 | Counter for update build for API `/jobs/request/:id` | |
|
||||
| `gitlab_transaction_new_redis_connections_total` | Counter | 9.4 | Counter for new Redis connections | |
|
||||
| `gitlab_transaction_queue_duration_total` | Counter | 9.4 | Duration jobs were enqueued before processing | |
|
||||
| `gitlab_transaction_rails_queue_duration_total` | Counter | 9.4 | Measures latency between GitLab Workhorse forwarding a request to Rails | `controller`, `action` |
|
||||
|
|
|
@ -50,7 +50,7 @@ the GitLab server itself, but your setup may vary. If the CA is only
|
|||
used for GitLab consider putting this in the `Match User git` section
|
||||
(described below).
|
||||
|
||||
The SSH certificates being issued by that CA **MUST** have a "key id"
|
||||
The SSH certificates being issued by that CA **MUST** have a "key ID"
|
||||
corresponding to that user's username on GitLab, e.g. (some output
|
||||
omitted for brevity):
|
||||
|
||||
|
@ -77,7 +77,7 @@ own `AuthorizedPrincipalsCommand` to do that mapping instead of using
|
|||
our provided default.
|
||||
|
||||
The important part is that the `AuthorizedPrincipalsCommand` must be
|
||||
able to map from the "key id" to a GitLab username in some way, the
|
||||
able to map from the "key ID" to a GitLab username in some way, the
|
||||
default command we ship assumes there's a 1=1 mapping between the two,
|
||||
since the whole point of this is to allow us to extract a GitLab
|
||||
username from the key itself, instead of relying on something like the
|
||||
|
@ -122,7 +122,7 @@ into multiple lines of `authorized_keys` output, as described in the
|
|||
Normally when using the `AuthorizedKeysCommand` with OpenSSH the
|
||||
principal is some "group" that's allowed to log into that
|
||||
server. However with GitLab it's only used to appease OpenSSH's
|
||||
requirement for it, we effectively only care about the "key id" being
|
||||
requirement for it, we effectively only care about the "key ID" being
|
||||
correct. Once that's extracted GitLab will enforce its own ACLs for
|
||||
that user (e.g. what projects the user can access).
|
||||
|
||||
|
|
|
@ -124,7 +124,7 @@ GitLab server. For example, on a default Omnibus installation this would be
|
|||
`/var/opt/gitlab/git-data/repositories/@hashed/b1/7e/b17ef6d19c7a5b1ee83b907c595526dcb1eb06db8227d650d5dda0a9f4ce8cd9.git`
|
||||
with `.git` from the end of the directory name removed.
|
||||
|
||||
The output includes the project id and the project name:
|
||||
The output includes the project ID and the project name:
|
||||
|
||||
```plaintext
|
||||
=> #<Project id:16 it/supportteam/ticketsystem>
|
||||
|
|
|
@ -282,7 +282,8 @@ Commonly, `<condition>` references the job arguments, which depend on the type o
|
|||
|
||||
For example, `repository_import` has `project_id` as the job argument, while `update_merge_requests` has `project_id, user_id, oldrev, newrev, ref`.
|
||||
|
||||
NOTE: **Note:** Arguments need to be referenced by their sequence id using `job.args[<id>]` because `job.args` is a list of all arguments provided to the Sidekiq job.
|
||||
NOTE: **Note:**
|
||||
Arguments need to be referenced by their sequence ID using `job.args[<id>]` because `job.args` is a list of all arguments provided to the Sidekiq job.
|
||||
|
||||
Here are some examples:
|
||||
|
||||
|
|
|
@ -446,9 +446,9 @@ For example:
|
|||
DELETE /projects/:id/share/:group_id
|
||||
```
|
||||
|
||||
The `:id` path parameter needs to be replaced with the project id, and the `:group_id` needs to be replaced with the id of the group. The colons `:` should not be included.
|
||||
The `:id` path parameter needs to be replaced with the project ID, and the `:group_id` needs to be replaced with the ID of the group. The colons `:` should not be included.
|
||||
|
||||
The resulting cURL call for a project with id `5` and a group id of `17` is then:
|
||||
The resulting cURL call for a project with ID `5` and a group ID of `17` is then:
|
||||
|
||||
```shell
|
||||
curl --request DELETE --header "PRIVATE-TOKEN: <your_access_token>" https://gitlab.example.com/api/v4/projects/5/share/17
|
||||
|
|
|
@ -93,7 +93,7 @@ Parameters:
|
|||
|
||||
| Attribute | Type | Required | Description |
|
||||
|:----------|:--------|:---------|:----------------------------------------------------|
|
||||
| `id` | integer | yes | The id of the application (not the application_id). |
|
||||
| `id` | integer | yes | The ID of the application (not the application_id). |
|
||||
|
||||
Example request:
|
||||
|
||||
|
|
|
@ -94,7 +94,7 @@ POST /projects/:id/repository/commits
|
|||
| `previous_path` | string | no | Original full path to the file being moved. Ex. `lib/class1.rb`. Only considered for `move` action. |
|
||||
| `content` | string | no | File content, required for all except `delete`, `chmod`, and `move`. Move actions that do not specify `content` will preserve the existing file content, and any other value of `content` will overwrite the file content. |
|
||||
| `encoding` | string | no | `text` or `base64`. `text` is default. |
|
||||
| `last_commit_id` | string | no | Last known file commit id. Will be only considered in update, move and delete actions. |
|
||||
| `last_commit_id` | string | no | Last known file commit ID. Will be only considered in update, move, and delete actions. |
|
||||
| `execute_filemode` | boolean | no | When `true/false` enables/disables the execute flag on the file. Only considered for `chmod` action. |
|
||||
|
||||
```shell
|
||||
|
|
|
@ -249,7 +249,7 @@ POST /groups/:id/epics
|
|||
| `start_date_fixed` | string | no | The fixed start date of an epic (since 11.3) |
|
||||
| `due_date_is_fixed` | boolean | no | Whether due date should be sourced from `due_date_fixed` or from milestones (since 11.3) |
|
||||
| `due_date_fixed` | string | no | The fixed due date of an epic (since 11.3) |
|
||||
| `parent_id` | integer/string | no | The id of a parent epic (since 11.11) |
|
||||
| `parent_id` | integer/string | no | The ID of a parent epic (since 11.11) |
|
||||
|
||||
```shell
|
||||
curl --request POST --header "PRIVATE-TOKEN: <your_access_token>" https://gitlab.example.com/api/v4/groups/1/epics?title=Epic&description=Epic%20description
|
||||
|
|
|
@ -248,6 +248,101 @@ type AlertManagementAlertEdge {
|
|||
node: AlertManagementAlert
|
||||
}
|
||||
|
||||
"""
|
||||
Values for sorting alerts
|
||||
"""
|
||||
enum AlertManagementAlertSort {
|
||||
"""
|
||||
Created time by ascending order
|
||||
"""
|
||||
CREATED_TIME_ASC
|
||||
|
||||
"""
|
||||
Created time by ascending order
|
||||
"""
|
||||
CREATED_TIME_DESC
|
||||
|
||||
"""
|
||||
End time by ascending order
|
||||
"""
|
||||
END_TIME_ASC
|
||||
|
||||
"""
|
||||
End time by descending order
|
||||
"""
|
||||
END_TIME_DESC
|
||||
|
||||
"""
|
||||
Events count by ascending order
|
||||
"""
|
||||
EVENTS_COUNT_ASC
|
||||
|
||||
"""
|
||||
Events count by descending order
|
||||
"""
|
||||
EVENTS_COUNT_DESC
|
||||
|
||||
"""
|
||||
Severity by ascending order
|
||||
"""
|
||||
SEVERITY_ASC
|
||||
|
||||
"""
|
||||
Severity by descending order
|
||||
"""
|
||||
SEVERITY_DESC
|
||||
|
||||
"""
|
||||
Start time by ascending order
|
||||
"""
|
||||
START_TIME_ASC
|
||||
|
||||
"""
|
||||
Start time by descending order
|
||||
"""
|
||||
START_TIME_DESC
|
||||
|
||||
"""
|
||||
Status by ascending order
|
||||
"""
|
||||
STATUS_ASC
|
||||
|
||||
"""
|
||||
Status by descending order
|
||||
"""
|
||||
STATUS_DESC
|
||||
|
||||
"""
|
||||
Created time by ascending order
|
||||
"""
|
||||
UPDATED_TIME_ASC
|
||||
|
||||
"""
|
||||
Created time by ascending order
|
||||
"""
|
||||
UPDATED_TIME_DESC
|
||||
|
||||
"""
|
||||
Created at ascending order
|
||||
"""
|
||||
created_asc
|
||||
|
||||
"""
|
||||
Created at descending order
|
||||
"""
|
||||
created_desc
|
||||
|
||||
"""
|
||||
Updated at ascending order
|
||||
"""
|
||||
updated_asc
|
||||
|
||||
"""
|
||||
Updated at descending order
|
||||
"""
|
||||
updated_desc
|
||||
}
|
||||
|
||||
"""
|
||||
Alert severity values
|
||||
"""
|
||||
|
@ -6705,6 +6800,11 @@ type Project {
|
|||
IID of the alert. For example, "1"
|
||||
"""
|
||||
iid: String
|
||||
|
||||
"""
|
||||
Sort alerts by this criteria
|
||||
"""
|
||||
sort: AlertManagementAlertSort
|
||||
): AlertManagementAlert
|
||||
|
||||
"""
|
||||
|
@ -6735,6 +6835,11 @@ type Project {
|
|||
Returns the last _n_ elements from the list.
|
||||
"""
|
||||
last: Int
|
||||
|
||||
"""
|
||||
Sort alerts by this criteria
|
||||
"""
|
||||
sort: AlertManagementAlertSort
|
||||
): AlertManagementAlertConnection
|
||||
|
||||
"""
|
||||
|
|
|
@ -722,6 +722,125 @@
|
|||
"enumValues": null,
|
||||
"possibleTypes": null
|
||||
},
|
||||
{
|
||||
"kind": "ENUM",
|
||||
"name": "AlertManagementAlertSort",
|
||||
"description": "Values for sorting alerts",
|
||||
"fields": null,
|
||||
"inputFields": null,
|
||||
"interfaces": null,
|
||||
"enumValues": [
|
||||
{
|
||||
"name": "updated_desc",
|
||||
"description": "Updated at descending order",
|
||||
"isDeprecated": false,
|
||||
"deprecationReason": null
|
||||
},
|
||||
{
|
||||
"name": "updated_asc",
|
||||
"description": "Updated at ascending order",
|
||||
"isDeprecated": false,
|
||||
"deprecationReason": null
|
||||
},
|
||||
{
|
||||
"name": "created_desc",
|
||||
"description": "Created at descending order",
|
||||
"isDeprecated": false,
|
||||
"deprecationReason": null
|
||||
},
|
||||
{
|
||||
"name": "created_asc",
|
||||
"description": "Created at ascending order",
|
||||
"isDeprecated": false,
|
||||
"deprecationReason": null
|
||||
},
|
||||
{
|
||||
"name": "START_TIME_ASC",
|
||||
"description": "Start time by ascending order",
|
||||
"isDeprecated": false,
|
||||
"deprecationReason": null
|
||||
},
|
||||
{
|
||||
"name": "START_TIME_DESC",
|
||||
"description": "Start time by descending order",
|
||||
"isDeprecated": false,
|
||||
"deprecationReason": null
|
||||
},
|
||||
{
|
||||
"name": "END_TIME_ASC",
|
||||
"description": "End time by ascending order",
|
||||
"isDeprecated": false,
|
||||
"deprecationReason": null
|
||||
},
|
||||
{
|
||||
"name": "END_TIME_DESC",
|
||||
"description": "End time by descending order",
|
||||
"isDeprecated": false,
|
||||
"deprecationReason": null
|
||||
},
|
||||
{
|
||||
"name": "CREATED_TIME_ASC",
|
||||
"description": "Created time by ascending order",
|
||||
"isDeprecated": false,
|
||||
"deprecationReason": null
|
||||
},
|
||||
{
|
||||
"name": "CREATED_TIME_DESC",
|
||||
"description": "Created time by ascending order",
|
||||
"isDeprecated": false,
|
||||
"deprecationReason": null
|
||||
},
|
||||
{
|
||||
"name": "UPDATED_TIME_ASC",
|
||||
"description": "Created time by ascending order",
|
||||
"isDeprecated": false,
|
||||
"deprecationReason": null
|
||||
},
|
||||
{
|
||||
"name": "UPDATED_TIME_DESC",
|
||||
"description": "Created time by ascending order",
|
||||
"isDeprecated": false,
|
||||
"deprecationReason": null
|
||||
},
|
||||
{
|
||||
"name": "EVENTS_COUNT_ASC",
|
||||
"description": "Events count by ascending order",
|
||||
"isDeprecated": false,
|
||||
"deprecationReason": null
|
||||
},
|
||||
{
|
||||
"name": "EVENTS_COUNT_DESC",
|
||||
"description": "Events count by descending order",
|
||||
"isDeprecated": false,
|
||||
"deprecationReason": null
|
||||
},
|
||||
{
|
||||
"name": "SEVERITY_ASC",
|
||||
"description": "Severity by ascending order",
|
||||
"isDeprecated": false,
|
||||
"deprecationReason": null
|
||||
},
|
||||
{
|
||||
"name": "SEVERITY_DESC",
|
||||
"description": "Severity by descending order",
|
||||
"isDeprecated": false,
|
||||
"deprecationReason": null
|
||||
},
|
||||
{
|
||||
"name": "STATUS_ASC",
|
||||
"description": "Status by ascending order",
|
||||
"isDeprecated": false,
|
||||
"deprecationReason": null
|
||||
},
|
||||
{
|
||||
"name": "STATUS_DESC",
|
||||
"description": "Status by descending order",
|
||||
"isDeprecated": false,
|
||||
"deprecationReason": null
|
||||
}
|
||||
],
|
||||
"possibleTypes": null
|
||||
},
|
||||
{
|
||||
"kind": "ENUM",
|
||||
"name": "AlertManagementSeverity",
|
||||
|
@ -20262,6 +20381,16 @@
|
|||
"ofType": null
|
||||
},
|
||||
"defaultValue": null
|
||||
},
|
||||
{
|
||||
"name": "sort",
|
||||
"description": "Sort alerts by this criteria",
|
||||
"type": {
|
||||
"kind": "ENUM",
|
||||
"name": "AlertManagementAlertSort",
|
||||
"ofType": null
|
||||
},
|
||||
"defaultValue": null
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
|
@ -20286,6 +20415,16 @@
|
|||
},
|
||||
"defaultValue": null
|
||||
},
|
||||
{
|
||||
"name": "sort",
|
||||
"description": "Sort alerts by this criteria",
|
||||
"type": {
|
||||
"kind": "ENUM",
|
||||
"name": "AlertManagementAlertSort",
|
||||
"ofType": null
|
||||
},
|
||||
"defaultValue": null
|
||||
},
|
||||
{
|
||||
"name": "after",
|
||||
"description": "Returns the elements in the list that come after the specified cursor.",
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
Badges support placeholders that will be replaced in real time in both the link and image URL. The allowed placeholders are:
|
||||
|
||||
- **%{project_path}**: will be replaced by the project path.
|
||||
- **%{project_id}**: will be replaced by the project id.
|
||||
- **%{project_id}**: will be replaced by the project ID.
|
||||
- **%{default_branch}**: will be replaced by the project default branch.
|
||||
- **%{commit_sha}**: will be replaced by the last project's commit SHA.
|
||||
|
||||
|
|
|
@ -543,8 +543,8 @@ GET /projects/:id/jobs/:job_id/trace
|
|||
|
||||
| Attribute | Type | Required | Description |
|
||||
|-----------|----------------|----------|------------------------------------------------------------------------------------------------------------------|
|
||||
| id | integer/string | yes | ID or [URL-encoded path of the project](README.md#namespaced-path-encoding) owned by the authenticated user. |
|
||||
| job_id | integer | yes | ID of a job. |
|
||||
| `id` | integer/string | yes | ID or [URL-encoded path of the project](README.md#namespaced-path-encoding) owned by the authenticated user. |
|
||||
| `job_id` | integer | yes | ID of a job. |
|
||||
|
||||
```shell
|
||||
curl --location --header "PRIVATE-TOKEN: <your_access_token>" "https://gitlab.example.com/api/v4/projects/1/jobs/8/trace"
|
||||
|
|
|
@ -90,7 +90,7 @@ Example response:
|
|||
|
||||
## Delete a managed license
|
||||
|
||||
Deletes a managed license with a given id.
|
||||
Deletes a managed license with a given ID.
|
||||
|
||||
```plaintext
|
||||
DELETE /projects/:id/managed_licenses/:managed_license_id
|
||||
|
|
|
@ -972,7 +972,7 @@ POST /projects/:id/merge_requests
|
|||
| `assignee_id` | integer | no | Assignee user ID |
|
||||
| `assignee_ids` | integer array | no | The ID of the user(s) to assign the MR to. Set to `0` or provide an empty value to unassign all assignees. |
|
||||
| `description` | string | no | Description of MR. Limited to 1,048,576 characters. |
|
||||
| `target_project_id` | integer | no | The target project (numeric id) |
|
||||
| `target_project_id` | integer | no | The target project (numeric ID) |
|
||||
| `labels` | string | no | Labels for MR as a comma-separated list |
|
||||
| `milestone_id` | integer | no | The global ID of a milestone |
|
||||
| `remove_source_branch` | boolean | no | Flag indicating if a merge request should remove the source branch when merging |
|
||||
|
|
|
@ -54,7 +54,7 @@ GET /projects/:id/pipeline_schedules/:pipeline_schedule_id
|
|||
| Attribute | Type | required | Description |
|
||||
|--------------|---------|----------|--------------------------|
|
||||
| `id` | integer/string | yes | The ID or [URL-encoded path of the project](README.md#namespaced-path-encoding) owned by the authenticated user |
|
||||
| `pipeline_schedule_id` | integer | yes | The pipeline schedule id |
|
||||
| `pipeline_schedule_id` | integer | yes | The pipeline schedule ID |
|
||||
|
||||
```shell
|
||||
curl --header "PRIVATE-TOKEN: k5ESFgWY2Qf5xEvDcFxZ" "https://gitlab.example.com/api/v4/projects/29/pipeline_schedules/13"
|
||||
|
@ -150,7 +150,7 @@ PUT /projects/:id/pipeline_schedules/:pipeline_schedule_id
|
|||
| Attribute | Type | required | Description |
|
||||
|---------------|---------|----------|--------------------------|
|
||||
| `id` | integer/string | yes | The ID or [URL-encoded path of the project](README.md#namespaced-path-encoding) owned by the authenticated user |
|
||||
| `pipeline_schedule_id` | integer | yes | The pipeline schedule id |
|
||||
| `pipeline_schedule_id` | integer | yes | The pipeline schedule ID |
|
||||
| `description` | string | no | The description of pipeline schedule |
|
||||
| `ref` | string | no | The branch/tag name will be triggered |
|
||||
| `cron` | string | no | The cron (e.g. `0 1 * * *`) ([Cron syntax](https://en.wikipedia.org/wiki/Cron)) |
|
||||
|
@ -200,7 +200,7 @@ POST /projects/:id/pipeline_schedules/:pipeline_schedule_id/take_ownership
|
|||
| Attribute | Type | required | Description |
|
||||
|---------------|---------|----------|--------------------------|
|
||||
| `id` | integer/string | yes | The ID or [URL-encoded path of the project](README.md#namespaced-path-encoding) owned by the authenticated user |
|
||||
| `pipeline_schedule_id` | integer | yes | The pipeline schedule id |
|
||||
| `pipeline_schedule_id` | integer | yes | The pipeline schedule ID |
|
||||
|
||||
```shell
|
||||
curl --request POST --header "PRIVATE-TOKEN: hf2CvZXB9w8Uc5pZKpSB" "https://gitlab.example.com/api/v4/projects/29/pipeline_schedules/13/take_ownership"
|
||||
|
@ -245,7 +245,7 @@ DELETE /projects/:id/pipeline_schedules/:pipeline_schedule_id
|
|||
| Attribute | Type | required | Description |
|
||||
|----------------|---------|----------|--------------------------|
|
||||
| `id` | integer/string | yes | The ID or [URL-encoded path of the project](README.md#namespaced-path-encoding) owned by the authenticated user |
|
||||
| `pipeline_schedule_id` | integer | yes | The pipeline schedule id |
|
||||
| `pipeline_schedule_id` | integer | yes | The pipeline schedule ID |
|
||||
|
||||
```shell
|
||||
curl --request DELETE --header "PRIVATE-TOKEN: k5ESFgWY2Qf5xEvDcFxZ" "https://gitlab.example.com/api/v4/projects/29/pipeline_schedules/13"
|
||||
|
@ -293,7 +293,7 @@ POST /projects/:id/pipeline_schedules/:pipeline_schedule_id/play
|
|||
| Attribute | Type | required | Description |
|
||||
| ---------------- | --------- | ---------- | -------------------------- |
|
||||
| `id` | integer/string | yes | The ID or [URL-encoded path of the project](README.md#namespaced-path-encoding) owned by the authenticated user |
|
||||
| `pipeline_schedule_id` | integer | yes | The pipeline schedule id |
|
||||
| `pipeline_schedule_id` | integer | yes | The pipeline schedule ID |
|
||||
|
||||
Example request:
|
||||
|
||||
|
@ -324,7 +324,7 @@ POST /projects/:id/pipeline_schedules/:pipeline_schedule_id/variables
|
|||
| Attribute | Type | required | Description |
|
||||
|------------------------|----------------|----------|--------------------------|
|
||||
| `id` | integer/string | yes | The ID or [URL-encoded path of the project](README.md#namespaced-path-encoding) owned by the authenticated user |
|
||||
| `pipeline_schedule_id` | integer | yes | The pipeline schedule id |
|
||||
| `pipeline_schedule_id` | integer | yes | The pipeline schedule ID |
|
||||
| `key` | string | yes | The `key` of a variable; must have no more than 255 characters; only `A-Z`, `a-z`, `0-9`, and `_` are allowed |
|
||||
| `value` | string | yes | The `value` of a variable |
|
||||
| `variable_type` | string | no | The type of a variable. Available types are: `env_var` (default) and `file` |
|
||||
|
@ -352,7 +352,7 @@ PUT /projects/:id/pipeline_schedules/:pipeline_schedule_id/variables/:key
|
|||
| Attribute | Type | required | Description |
|
||||
|------------------------|----------------|----------|--------------------------|
|
||||
| `id` | integer/string | yes | The ID or [URL-encoded path of the project](README.md#namespaced-path-encoding) owned by the authenticated user |
|
||||
| `pipeline_schedule_id` | integer | yes | The pipeline schedule id |
|
||||
| `pipeline_schedule_id` | integer | yes | The pipeline schedule ID |
|
||||
| `key` | string | yes | The `key` of a variable |
|
||||
| `value` | string | yes | The `value` of a variable |
|
||||
| `variable_type` | string | no | The type of a variable. Available types are: `env_var` (default) and `file` |
|
||||
|
@ -380,7 +380,7 @@ DELETE /projects/:id/pipeline_schedules/:pipeline_schedule_id/variables/:key
|
|||
| Attribute | Type | required | Description |
|
||||
|------------------------|----------------|----------|--------------------------|
|
||||
| `id` | integer/string | yes | The ID or [URL-encoded path of the project](README.md#namespaced-path-encoding) owned by the authenticated user |
|
||||
| `pipeline_schedule_id` | integer | yes | The pipeline schedule id |
|
||||
| `pipeline_schedule_id` | integer | yes | The pipeline schedule ID |
|
||||
| `key` | string | yes | The `key` of a variable |
|
||||
|
||||
```shell
|
||||
|
|
|
@ -43,7 +43,7 @@ GET /projects/:id/triggers/:trigger_id
|
|||
| Attribute | Type | required | Description |
|
||||
|--------------|---------|----------|--------------------------|
|
||||
| `id` | integer/string | yes | The ID or [URL-encoded path of the project](README.md#namespaced-path-encoding) owned by the authenticated user |
|
||||
| `trigger_id` | integer | yes | The trigger id |
|
||||
| `trigger_id` | integer | yes | The trigger ID |
|
||||
|
||||
```shell
|
||||
curl --header "PRIVATE-TOKEN: <your_access_token>" "https://gitlab.example.com/api/v4/projects/1/triggers/5"
|
||||
|
@ -101,7 +101,7 @@ PUT /projects/:id/triggers/:trigger_id
|
|||
| Attribute | Type | required | Description |
|
||||
|---------------|---------|----------|--------------------------|
|
||||
| `id` | integer/string | yes | The ID or [URL-encoded path of the project](README.md#namespaced-path-encoding) owned by the authenticated user |
|
||||
| `trigger_id` | integer | yes | The trigger id |
|
||||
| `trigger_id` | integer | yes | The trigger ID |
|
||||
| `description` | string | no | The trigger name |
|
||||
|
||||
```shell
|
||||
|
@ -131,7 +131,7 @@ DELETE /projects/:id/triggers/:trigger_id
|
|||
| Attribute | Type | required | Description |
|
||||
|----------------|---------|----------|--------------------------|
|
||||
| `id` | integer/string | yes | The ID or [URL-encoded path of the project](README.md#namespaced-path-encoding) owned by the authenticated user |
|
||||
| `trigger_id` | integer | yes | The trigger id |
|
||||
| `trigger_id` | integer | yes | The trigger ID |
|
||||
|
||||
```shell
|
||||
curl --request DELETE --header "PRIVATE-TOKEN: <your_access_token>" "https://gitlab.example.com/api/v4/projects/1/triggers/5"
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
Badges support placeholders that will be replaced in real time in both the link and image URL. The allowed placeholders are:
|
||||
|
||||
- **%{project_path}**: will be replaced by the project path.
|
||||
- **%{project_id}**: will be replaced by the project id.
|
||||
- **%{project_id}**: will be replaced by the project ID.
|
||||
- **%{default_branch}**: will be replaced by the project default branch.
|
||||
- **%{commit_sha}**: will be replaced by the last project's commit sha.
|
||||
|
||||
|
|
|
@ -55,7 +55,7 @@ GET /projects/:id/releases/:tag_name/assets/links/:link_id
|
|||
| ------------- | -------------- | -------- | --------------------------------------- |
|
||||
| `id` | integer/string | yes | The ID or [URL-encoded path of the project](../README.md#namespaced-path-encoding). |
|
||||
| `tag_name` | string | yes | The tag associated with the Release. |
|
||||
| `link_id` | integer | yes | The id of the link. |
|
||||
| `link_id` | integer | yes | The ID of the link. |
|
||||
|
||||
Example request:
|
||||
|
||||
|
@ -122,7 +122,7 @@ PUT /projects/:id/releases/:tag_name/assets/links/:link_id
|
|||
| ------------- | -------------- | -------- | --------------------------------------- |
|
||||
| `id` | integer/string | yes | The ID or [URL-encoded path of the project](../README.md#namespaced-path-encoding). |
|
||||
| `tag_name` | string | yes | The tag associated with the Release. |
|
||||
| `link_id` | integer | yes | The id of the link. |
|
||||
| `link_id` | integer | yes | The ID of the link. |
|
||||
| `name` | string | no | The name of the link. |
|
||||
| `url` | string | no | The URL of the link. |
|
||||
|
||||
|
@ -158,7 +158,7 @@ DELETE /projects/:id/releases/:tag_name/assets/links/:link_id
|
|||
| ------------- | -------------- | -------- | --------------------------------------- |
|
||||
| `id` | integer/string | yes | The ID or [URL-encoded path of the project](../README.md#namespaced-path-encoding). |
|
||||
| `tag_name` | string | yes | The tag associated with the Release. |
|
||||
| `link_id` | integer | yes | The id of the link. |
|
||||
| `link_id` | integer | yes | The ID of the link. |
|
||||
|
||||
Example request:
|
||||
|
||||
|
|
|
@ -236,7 +236,7 @@ Parameters:
|
|||
- `author_name` (optional) - Specify the commit author's name
|
||||
- `content` (required) - New file content
|
||||
- `commit_message` (required) - Commit message
|
||||
- `last_commit_id` (optional) - Last known file commit id
|
||||
- `last_commit_id` (optional) - Last known file commit ID
|
||||
|
||||
If the commit fails for any reason we return a 400 error with a non-specific
|
||||
error message. Possible causes for a failed commit include:
|
||||
|
@ -271,4 +271,4 @@ Parameters:
|
|||
- `author_email` (optional) - Specify the commit author's email address
|
||||
- `author_name` (optional) - Specify the commit author's name
|
||||
- `commit_message` (required) - Commit message
|
||||
- `last_commit_id` (optional) - Last known file commit id
|
||||
- `last_commit_id` (optional) - Last known file commit ID
|
||||
|
|
|
@ -158,13 +158,13 @@ Returns a `201` status code if successful.
|
|||
|
||||
Fields that can be updated are:
|
||||
|
||||
| SCIM/IdP field | GitLab field |
|
||||
|:----------|:--------|
|
||||
| id/externalId | extern_uid |
|
||||
| name.formatted | name |
|
||||
| emails\[type eq "work"\].value | email |
|
||||
| active | Identity removal if `active = false` |
|
||||
| userName | username |
|
||||
| SCIM/IdP field | GitLab field |
|
||||
|:---------------------------------|:---------------------------------------|
|
||||
| `id/externalId` | `extern_uid` |
|
||||
| `name.formatted` | `name` |
|
||||
| `emails\[type eq "work"\].value` | `email` |
|
||||
| `active` | Identity removal if `active` = `false` |
|
||||
| `userName` | `username` |
|
||||
|
||||
```text
|
||||
PATCH /api/scim/v2/groups/:group_path/Users/:id
|
||||
|
|
|
@ -331,13 +331,13 @@ are listed in the descriptions of the relevant settings.
|
|||
| `sign_in_text` | string | no | Text on the login page. |
|
||||
| `signup_enabled` | boolean | no | Enable registration. Default is `true`. |
|
||||
| `slack_app_enabled` | boolean | no | **(PREMIUM)** (**If enabled, requires:** `slack_app_id`, `slack_app_secret` and `slack_app_secret`) Enable Slack app. |
|
||||
| `slack_app_id` | string | required by: `slack_app_enabled` | **(PREMIUM)** The app id of the Slack-app. |
|
||||
| `slack_app_id` | string | required by: `slack_app_enabled` | **(PREMIUM)** The app ID of the Slack-app. |
|
||||
| `slack_app_secret` | string | required by: `slack_app_enabled` | **(PREMIUM)** The app secret of the Slack-app. |
|
||||
| `slack_app_verification_token` | string | required by: `slack_app_enabled` | **(PREMIUM)** The verification token of the Slack-app. |
|
||||
| `snowplow_collector_hostname` | string | required by: `snowplow_enabled` | The Snowplow collector hostname. (for example, `snowplow.trx.gitlab.net`) |
|
||||
| `snowplow_cookie_domain` | string | no | The Snowplow cookie domain. (for example, `.gitlab.com`) |
|
||||
| `snowplow_enabled` | boolean | no | Enable snowplow tracking. |
|
||||
| `snowplow_app_id` | string | no | The Snowplow site name / application id. (for example, `gitlab`) |
|
||||
| `snowplow_app_id` | string | no | The Snowplow site name / application ID. (for example, `gitlab`) |
|
||||
| `snowplow_iglu_registry_url` | string | no | The Snowplow base Iglu Schema Registry URL to use for custom context and self describing events'|
|
||||
| `sourcegraph_enabled` | boolean | no | Enables Sourcegraph integration. Default is `false`. **If enabled, requires** `sourcegraph_url`. |
|
||||
| `sourcegraph_url` | string | required by: `sourcegraph_enabled` | The Sourcegraph instance URL for integration. |
|
||||
|
|
|
@ -611,7 +611,7 @@ GET /users/:id_or_username/status
|
|||
|
||||
| Attribute | Type | Required | Description |
|
||||
| ---------------- | ------ | -------- | ----------- |
|
||||
| `id_or_username` | string | yes | The id or username of the user to get a status of |
|
||||
| `id_or_username` | string | yes | The ID or username of the user to get a status of |
|
||||
|
||||
```shell
|
||||
curl "https://gitlab.example.com/users/janedoe/status"
|
||||
|
@ -723,7 +723,7 @@ GET /users/:id_or_username/keys
|
|||
|
||||
| Attribute | Type | Required | Description |
|
||||
| ---------------- | ------ | -------- | ----------- |
|
||||
| `id_or_username` | string | yes | The id or username of the user to get the SSH keys for. |
|
||||
| `id_or_username` | string | yes | The ID or username of the user to get the SSH keys for. |
|
||||
|
||||
## Single SSH key
|
||||
|
||||
|
@ -794,7 +794,7 @@ POST /users/:id/keys
|
|||
|
||||
Parameters:
|
||||
|
||||
- `id` (required) - id of specified user
|
||||
- `id` (required) - ID of specified user
|
||||
- `title` (required) - new SSH Key's title
|
||||
- `key` (required) - new SSH key
|
||||
|
||||
|
@ -821,7 +821,7 @@ DELETE /users/:id/keys/:key_id
|
|||
|
||||
Parameters:
|
||||
|
||||
- `id` (required) - id of specified user
|
||||
- `id` (required) - ID of specified user
|
||||
- `key_id` (required) - SSH key ID
|
||||
|
||||
## List all GPG keys
|
||||
|
@ -1070,7 +1070,7 @@ GET /users/:id/emails
|
|||
|
||||
Parameters:
|
||||
|
||||
- `id` (required) - id of specified user
|
||||
- `id` (required) - ID of specified user
|
||||
|
||||
## Single email
|
||||
|
||||
|
@ -1133,7 +1133,7 @@ POST /users/:id/emails
|
|||
|
||||
Parameters:
|
||||
|
||||
- `id` (required) - id of specified user
|
||||
- `id` (required) - ID of specified user
|
||||
- `email` (required) - email address
|
||||
- `skip_confirmation` (optional) - Skip confirmation and assume e-mail is verified - true or false (default)
|
||||
|
||||
|
@ -1160,7 +1160,7 @@ DELETE /users/:id/emails/:email_id
|
|||
|
||||
Parameters:
|
||||
|
||||
- `id` (required) - id of specified user
|
||||
- `id` (required) - ID of specified user
|
||||
- `email_id` (required) - email ID
|
||||
|
||||
## Block user
|
||||
|
@ -1173,7 +1173,7 @@ POST /users/:id/block
|
|||
|
||||
Parameters:
|
||||
|
||||
- `id` (required) - id of specified user
|
||||
- `id` (required) - ID of specified user
|
||||
|
||||
Returns:
|
||||
|
||||
|
@ -1191,7 +1191,7 @@ POST /users/:id/unblock
|
|||
|
||||
Parameters:
|
||||
|
||||
- `id` (required) - id of specified user
|
||||
- `id` (required) - ID of specified user
|
||||
|
||||
Will return `201 OK` on success, `404 User Not Found` is user cannot be found or
|
||||
`403 Forbidden` when trying to unblock a user blocked by LDAP synchronization.
|
||||
|
@ -1208,7 +1208,7 @@ POST /users/:id/deactivate
|
|||
|
||||
Parameters:
|
||||
|
||||
- `id` (required) - id of specified user
|
||||
- `id` (required) - ID of specified user
|
||||
|
||||
Returns:
|
||||
|
||||
|
@ -1230,7 +1230,7 @@ POST /users/:id/activate
|
|||
|
||||
Parameters:
|
||||
|
||||
- `id` (required) - id of specified user
|
||||
- `id` (required) - ID of specified user
|
||||
|
||||
Returns:
|
||||
|
||||
|
|
|
@ -417,7 +417,7 @@ credentials, which will be the same two credentials (Key ID and Secret). It's a
|
|||
fully understand [IAM Best Practices in AWS](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html). We need to add these credentials to GitLab:
|
||||
|
||||
1. Log into your AWS account and go to the [Security Credentials page](https://console.aws.amazon.com/iam/home#/security_credential)
|
||||
1. Click the **Access Keys** section and **Create New Access Key**. Create the key and keep the id and secret around, you'll need them later
|
||||
1. Click the **Access Keys** section and **Create New Access Key**. Create the key and keep the ID and secret around, you'll need them later
|
||||
|
||||
![AWS Access Key Config](img/aws_config_window.png)
|
||||
|
||||
|
@ -426,7 +426,7 @@ fully understand [IAM Best Practices in AWS](https://docs.aws.amazon.com/IAM/lat
|
|||
|
||||
![GitLab Secret Config](img/gitlab_config.png)
|
||||
|
||||
1. Add a key named `AWS_KEY_ID` and copy the key id from Step 2 into the **Value** textbox
|
||||
1. Add a key named `AWS_KEY_ID` and copy the key ID from Step 2 into the **Value** textbox
|
||||
1. Add a key named `AWS_KEY_SECRET` and copy the key secret from Step 2 into the **Value** textbox
|
||||
|
||||
### Deploy your game with GitLab CI/CD
|
||||
|
|
|
@ -13,17 +13,27 @@ changes are pushed to a branch.
|
|||
If you want the pipeline to run jobs **only** when merge requests are created or updated,
|
||||
you can use *pipelines for merge requests*.
|
||||
|
||||
In the UI, these pipelines are labeled as `detached`.
|
||||
In the UI, these pipelines are labeled as `detached`. Otherwise, these pipelines appear the same
|
||||
as other pipelines.
|
||||
|
||||
Any user who has developer [permissions](../../user/permissions.md)
|
||||
can run a pipeline for merge requests.
|
||||
|
||||
![Merge request page](img/merge_request.png)
|
||||
|
||||
A few notes:
|
||||
NOTE: **Note**:
|
||||
If you use this feature with [merge when pipeline succeeds](../../user/project/merge_requests/merge_when_pipeline_succeeds.md),
|
||||
pipelines for merge requests take precedence over the other regular pipelines.
|
||||
|
||||
- Pipelines for merge requests are incompatible with
|
||||
[CI/CD for external repositories](../ci_cd_for_external_repos/index.md).
|
||||
- [Since GitLab 11.10](https://gitlab.com/gitlab-org/gitlab-foss/-/merge_requests/25504), pipelines for merge requests require GitLab Runner 11.9.
|
||||
- If you use this feature with [merge when pipeline succeeds](../../user/project/merge_requests/merge_when_pipeline_succeeds.md),
|
||||
pipelines for merge requests take precedence over the other regular pipelines.
|
||||
## Prerequisites
|
||||
|
||||
To enable pipelines for merge requests:
|
||||
|
||||
- You must have maintainer [permissions](../../user/permissions.md).
|
||||
- Your repository must be a GitLab repository, not an
|
||||
[external repository](../ci_cd_for_external_repos/index.md).
|
||||
- [In GitLab 11.10 and later](https://gitlab.com/gitlab-org/gitlab-foss/-/merge_requests/25504),
|
||||
you must be using GitLab Runner 11.9.
|
||||
|
||||
## Configuring pipelines for merge requests
|
||||
|
||||
|
|
|
@ -34,14 +34,18 @@ In these cases, the pipeline runs as a [pipeline for merge requests](../index.md
|
|||
and is labeled as `detached`. If these cases no longer exist, new pipelines will
|
||||
again run against the merged results.
|
||||
|
||||
## Requirements and limitations
|
||||
Any user who has developer [permissions](../../../user/permissions.md) can run a
|
||||
pipeline for merged results.
|
||||
|
||||
Pipelines for merged results have the following requirements and limitations:
|
||||
## Prerequisites
|
||||
|
||||
- Pipelines for merged results require [GitLab Runner](https://gitlab.com/gitlab-org/gitlab-runner) 11.9 or newer.
|
||||
- Forking/cross-repo workflows are not currently supported. To follow progress,
|
||||
To enable pipelines for merge results:
|
||||
|
||||
- You must have maintainer [permissions](../../../user/permissions.md).
|
||||
- You must be using [GitLab Runner](https://gitlab.com/gitlab-org/gitlab-runner) 11.9 or later.
|
||||
- You must not be forking or using cross-repo workflows. To follow progress,
|
||||
see [#11934](https://gitlab.com/gitlab-org/gitlab/issues/11934).
|
||||
- This feature is not available for
|
||||
- You must not be using
|
||||
[fast forward merges](../../../user/project/merge_requests/fast_forward_merge.md) yet.
|
||||
To follow progress, see [#58226](https://gitlab.com/gitlab-org/gitlab/-/issues/26996).
|
||||
|
||||
|
|
|
@ -30,6 +30,14 @@ If the pipeline for the merge request at the front of the train completes succes
|
|||
the changes are merged into the target branch, and the other pipelines continue to
|
||||
run.
|
||||
|
||||
To add a merge request to a merge train, you need [permissions](../../../../user/permissions.md) to push to the target branch.
|
||||
|
||||
NOTE: **Note:**
|
||||
Each merge train can run a maximum of **twenty** pipelines in parallel.
|
||||
If more than twenty merge requests are added to the merge train, the merge requests
|
||||
will be queued until a slot in the merge train is free. There is no limit to the
|
||||
number of merge requests that can be queued.
|
||||
|
||||
## Merge train example
|
||||
|
||||
Three merge requests (`A`, `B` and `C`) are added to a merge train in order, which
|
||||
|
@ -55,16 +63,13 @@ Watch this video for a demonstration on [how parallel execution
|
|||
of Merge Trains can prevent commits from breaking the default
|
||||
branch](https://www.youtube.com/watch?v=D4qCqXgZkHQ).
|
||||
|
||||
## Requirements and limitations
|
||||
## Prerequisites
|
||||
|
||||
Merge trains have the following requirements and limitations:
|
||||
To enable merge trains:
|
||||
|
||||
- Merge trains require [GitLab Runner](https://gitlab.com/gitlab-org/gitlab-runner) 11.9 or newer.
|
||||
- GitLab 12.0 and later requires [Redis](https://redis.io/) 3.2 or higher.
|
||||
- Each merge train can run a maximum of **twenty** pipelines in parallel.
|
||||
If more than twenty merge requests are added to the merge train, the merge requests
|
||||
will be queued until a slot in the merge train is free. There is no limit to the
|
||||
number of merge requests that can be queued.
|
||||
- You must have maintainer [permissions](../../../../user/permissions.md).
|
||||
- You must be using [GitLab Runner](https://gitlab.com/gitlab-org/gitlab-runner) 11.9 or later.
|
||||
- In GitLab 12.0 and later, you need [Redis](https://redis.io/) 3.2 or later.
|
||||
|
||||
## Enable merge trains
|
||||
|
||||
|
|
|
@ -56,7 +56,7 @@ future GitLab releases.**
|
|||
| `CI_EXTERNAL_PULL_REQUEST_SOURCE_BRANCH_SHA` | 12.3 | all | The HEAD SHA of the source branch of the pull request if [the pipelines are for external pull requests](../ci_cd_for_external_repos/index.md#pipelines-for-external-pull-requests). Available only if `only: [external_pull_requests]` or [`rules`](../yaml/README.md#rules) syntax is used and the pull request is open. |
|
||||
| `CI_EXTERNAL_PULL_REQUEST_TARGET_BRANCH_NAME` | 12.3 | all | The target branch name of the pull request if [the pipelines are for external pull requests](../ci_cd_for_external_repos/index.md#pipelines-for-external-pull-requests). Available only if `only: [external_pull_requests]` or [`rules`](../yaml/README.md#rules) syntax is used and the pull request is open. |
|
||||
| `CI_EXTERNAL_PULL_REQUEST_TARGET_BRANCH_SHA` | 12.3 | all | The HEAD SHA of the target branch of the pull request if [the pipelines are for external pull requests](../ci_cd_for_external_repos/index.md#pipelines-for-external-pull-requests). Available only if `only: [external_pull_requests]` or [`rules`](../yaml/README.md#rules) syntax is used and the pull request is open. |
|
||||
| `CI_JOB_ID` | 9.0 | all | The unique id of the current job that GitLab CI/CD uses internally |
|
||||
| `CI_JOB_ID` | 9.0 | all | The unique ID of the current job that GitLab CI/CD uses internally |
|
||||
| `CI_JOB_IMAGE` | 12.9 | 12.9 | The name of the image running the CI job |
|
||||
| `CI_JOB_MANUAL` | 8.12 | all | The flag to indicate that job was manually started |
|
||||
| `CI_JOB_NAME` | 9.0 | 0.5 | The name of the job as defined in `.gitlab-ci.yml` |
|
||||
|
@ -88,13 +88,13 @@ future GitLab releases.**
|
|||
| `CI_NODE_TOTAL` | 11.5 | all | Total number of instances of this job running in parallel. If the job is not parallelized, this variable is set to `1`. |
|
||||
| `CI_PAGES_DOMAIN` | 11.8 | all | The configured domain that hosts GitLab Pages. |
|
||||
| `CI_PAGES_URL` | 11.8 | all | URL to GitLab Pages-built pages. Always belongs to a subdomain of `CI_PAGES_DOMAIN`. |
|
||||
| `CI_PIPELINE_ID` | 8.10 | all | The unique id of the current pipeline that GitLab CI/CD uses internally |
|
||||
| `CI_PIPELINE_IID` | 11.0 | all | The unique id of the current pipeline scoped to project |
|
||||
| `CI_PIPELINE_ID` | 8.10 | all | The unique ID of the current pipeline that GitLab CI/CD uses internally |
|
||||
| `CI_PIPELINE_IID` | 11.0 | all | The unique ID of the current pipeline scoped to project |
|
||||
| `CI_PIPELINE_SOURCE` | 10.0 | all | Indicates how the pipeline was triggered. Possible options are: `push`, `web`, `trigger`, `schedule`, `api`, `pipeline`, `parent_pipeline`, `external`, `chat`, `merge_request_event`, and `external_pull_request_event`. For pipelines created before GitLab 9.5, this will show as `unknown` |
|
||||
| `CI_PIPELINE_TRIGGERED` | all | all | The flag to indicate that job was [triggered](../triggers/README.md) |
|
||||
| `CI_PIPELINE_URL` | 11.1 | 0.5 | Pipeline details URL |
|
||||
| `CI_PROJECT_DIR` | all | all | The full path where the repository is cloned and where the job is run. If the GitLab Runner `builds_dir` parameter is set, this variable is set relative to the value of `builds_dir`. For more information, see [Advanced configuration](https://docs.gitlab.com/runner/configuration/advanced-configuration.html#the-runners-section) for GitLab Runner. |
|
||||
| `CI_PROJECT_ID` | all | all | The unique id of the current project that GitLab CI/CD uses internally |
|
||||
| `CI_PROJECT_ID` | all | all | The unique ID of the current project that GitLab CI/CD uses internally |
|
||||
| `CI_PROJECT_NAME` | 8.10 | 0.5 | The name of the directory for the project that is currently being built. For example, if the project URL is `gitlab.example.com/group-name/project-1`, the `CI_PROJECT_NAME` would be `project-1`. |
|
||||
| `CI_PROJECT_NAMESPACE` | 8.10 | 0.5 | The project namespace (username or groupname) that is currently being built |
|
||||
| `CI_PROJECT_PATH` | 8.10 | 0.5 | The namespace with project name |
|
||||
|
@ -110,7 +110,7 @@ future GitLab releases.**
|
|||
| `CI_REPOSITORY_URL` | 9.0 | all | The URL to clone the Git repository |
|
||||
| `CI_RUNNER_DESCRIPTION` | 8.10 | 0.5 | The description of the runner as saved in GitLab |
|
||||
| `CI_RUNNER_EXECUTABLE_ARCH` | all | 10.6 | The OS/architecture of the GitLab Runner executable (note that this is not necessarily the same as the environment of the executor) |
|
||||
| `CI_RUNNER_ID` | 8.10 | 0.5 | The unique id of runner being used |
|
||||
| `CI_RUNNER_ID` | 8.10 | 0.5 | The unique ID of runner being used |
|
||||
| `CI_RUNNER_REVISION` | all | 10.6 | GitLab Runner revision that is executing the current job |
|
||||
| `CI_RUNNER_SHORT_TOKEN` | all | 12.3 | First eight characters of GitLab Runner's token used to authenticate new job requests. Used as Runner's unique ID |
|
||||
| `CI_RUNNER_TAGS` | 8.10 | 0.5 | The defined runner tags |
|
||||
|
@ -131,7 +131,7 @@ future GitLab releases.**
|
|||
| `GITLAB_CI` | all | all | Mark that job is executed in GitLab CI/CD environment |
|
||||
| `GITLAB_FEATURES` | 10.6 | all | The comma separated list of licensed features available for your instance and plan |
|
||||
| `GITLAB_USER_EMAIL` | 8.12 | all | The email of the user who started the job |
|
||||
| `GITLAB_USER_ID` | 8.12 | all | The id of the user who started the job |
|
||||
| `GITLAB_USER_ID` | 8.12 | all | The ID of the user who started the job |
|
||||
| `GITLAB_USER_LOGIN` | 10.0 | all | The login username of the user who started the job |
|
||||
| `GITLAB_USER_NAME` | 10.0 | all | The real name of the user who started the job |
|
||||
| `RESTORE_CACHE_ATTEMPTS` | 8.15 | 1.9 | Number of attempts to restore the cache running a job |
|
||||
|
|
|
@ -1641,7 +1641,7 @@ curl --request POST --header "PRIVATE-TOKEN: <your_access_token>" --form "title=
|
|||
```
|
||||
|
||||
The above example is run by and administrator and will add an SSH public key
|
||||
titled `ssh-key` to user's account which has an id of 25.
|
||||
titled `ssh-key` to user's account which has an ID of 25.
|
||||
|
||||
#### Escape special characters
|
||||
|
||||
|
|
|
@ -85,7 +85,7 @@ for the format of the email key:
|
|||
|
||||
- Actions are always at the end, separated by `-`. For example `-issue` or `-merge-request`
|
||||
- If your feature is related to a project, the key begins with the project identifiers (project path slug
|
||||
and project id), separated by `-`. For example, `gitlab-org-gitlab-foss-20`
|
||||
and project ID), separated by `-`. For example, `gitlab-org-gitlab-foss-20`
|
||||
- Additional information, such as an author's token, can be added between the project identifiers and
|
||||
the action, separated by `-`. For example, `gitlab-org-gitlab-foss-20-Author_Token12345678-issue`
|
||||
- You register your handlers in `lib/gitlab/email/handler.rb`
|
||||
|
|
|
@ -325,7 +325,7 @@ When using `v-for` you need to provide a *unique* `:key` attribute for each item
|
|||
</div>
|
||||
```
|
||||
|
||||
1. When the elements being iterated don't have a unique id, you can use the array index as the `:key` attribute
|
||||
1. When the elements being iterated don't have a unique ID, you can use the array index as the `:key` attribute
|
||||
|
||||
```html
|
||||
<div
|
||||
|
|
|
@ -30,18 +30,18 @@ they are still not 100% standardized. You can see them below:
|
|||
|
||||
| Description | In DB? | Relative path (from CarrierWave.root) | Uploader class | model_type |
|
||||
| ------------------------------------- | ------ | ----------------------------------------------------------- | ---------------------- | ---------- |
|
||||
| Instance logo | yes | uploads/-/system/appearance/logo/:id/:filename | `AttachmentUploader` | Appearance |
|
||||
| Header logo | yes | uploads/-/system/appearance/header_logo/:id/:filename | `AttachmentUploader` | Appearance |
|
||||
| Group avatars | yes | uploads/-/system/group/avatar/:id/:filename | `AvatarUploader` | Group |
|
||||
| User avatars | yes | uploads/-/system/user/avatar/:id/:filename | `AvatarUploader` | User |
|
||||
| User snippet attachments | yes | uploads/-/system/personal_snippet/:id/:random_hex/:filename | `PersonalFileUploader` | Snippet |
|
||||
| Project avatars | yes | uploads/-/system/project/avatar/:id/:filename | `AvatarUploader` | Project |
|
||||
| Issues/MR/Notes Markdown attachments | yes | uploads/:project_path_with_namespace/:random_hex/:filename | `FileUploader` | Project |
|
||||
| Issues/MR/Notes Legacy Markdown attachments | no | uploads/-/system/note/attachment/:id/:filename | `AttachmentUploader` | Note |
|
||||
| Design Management design thumbnails (EE) | yes | uploads/-/system/design_management/action/image_v432x230/:id/:filename | `DesignManagement::DesignV432x230Uploader` | DesignManagement::Action |
|
||||
| CI Artifacts (CE) | yes | `shared/artifacts/:disk_hash[0..1]/:disk_hash[2..3]/:disk_hash/:year_:month_:date/:job_id/:job_artifact_id` (:disk_hash is SHA256 digest of project_id) | `JobArtifactUploader` | Ci::JobArtifact |
|
||||
| LFS Objects (CE) | yes | shared/lfs-objects/:hex/:hex/:object_hash | `LfsObjectUploader` | LfsObject |
|
||||
| External merge request diffs | yes | shared/external-diffs/merge_request_diffs/mr-:parent_id/diff-:id | `ExternalDiffUploader` | MergeRequestDiff |
|
||||
| Instance logo | yes | `uploads/-/system/appearance/logo/:id/:filename` | `AttachmentUploader` | Appearance |
|
||||
| Header logo | yes | `uploads/-/system/appearance/header_logo/:id/:filename` | `AttachmentUploader` | Appearance |
|
||||
| Group avatars | yes | `uploads/-/system/group/avatar/:id/:filename` | `AvatarUploader` | Group |
|
||||
| User avatars | yes | `uploads/-/system/user/avatar/:id/:filename` | `AvatarUploader` | User |
|
||||
| User snippet attachments | yes | `uploads/-/system/personal_snippet/:id/:random_hex/:filename` | `PersonalFileUploader` | Snippet |
|
||||
| Project avatars | yes | `uploads/-/system/project/avatar/:id/:filename` | `AvatarUploader` | Project |
|
||||
| Issues/MR/Notes Markdown attachments | yes | `uploads/:project_path_with_namespace/:random_hex/:filename` | `FileUploader` | Project |
|
||||
| Issues/MR/Notes Legacy Markdown attachments | no | `uploads/-/system/note/attachment/:id/:filename` | `AttachmentUploader` | Note |
|
||||
| Design Management design thumbnails (EE) | yes | `uploads/-/system/design_management/action/image_v432x230/:id/:filename` | `DesignManagement::DesignV432x230Uploader` | DesignManagement::Action |
|
||||
| CI Artifacts (CE) | yes | `shared/artifacts/:disk_hash[0..1]/:disk_hash[2..3]/:disk_hash/:year_:month_:date/:job_id/:job_artifact_id` (`:disk_hash` is SHA256 digest of `project_id`) | `JobArtifactUploader` | Ci::JobArtifact |
|
||||
| LFS Objects (CE) | yes | `shared/lfs-objects/:hex/:hex/:object_hash` | `LfsObjectUploader` | LfsObject |
|
||||
| External merge request diffs | yes | `shared/external-diffs/merge_request_diffs/mr-:parent_id/diff-:id` | `ExternalDiffUploader` | MergeRequestDiff |
|
||||
|
||||
CI Artifacts and LFS Objects behave differently in CE and EE. In CE they inherit the `GitlabUploader`
|
||||
while in EE they inherit the `ObjectStorage` and store files in and S3 API compatible object store.
|
||||
|
|
|
@ -536,9 +536,9 @@ The linter will take the following into account:
|
|||
- Variable usage
|
||||
- Only one unnamed (`%d`) variable, since the order of variables might change
|
||||
in different languages
|
||||
- All variables used in the message-id are used in the translation
|
||||
- All variables used in the message ID are used in the translation
|
||||
- There should be no variables used in a translation that aren't in the
|
||||
message-id
|
||||
message ID
|
||||
- Errors during translation.
|
||||
|
||||
The errors are grouped per file, and per message ID:
|
||||
|
@ -562,7 +562,7 @@ Errors in `locale/zh_TW/gitlab.po`:
|
|||
|
||||
In this output the `locale/zh_HK/gitlab.po` has syntax errors.
|
||||
The `locale/zh_TW/gitlab.po` has variables that are used in the translation that
|
||||
aren't in the message with id `1 pipeline`.
|
||||
aren't in the message with ID `1 pipeline`.
|
||||
|
||||
## Adding a new language
|
||||
|
||||
|
|
|
@ -40,7 +40,7 @@ POST /internal/allowed
|
|||
|
||||
| Attribute | Type | Required | Description |
|
||||
|:----------|:-------|:---------|:------------|
|
||||
| `key_id` | string | no | Id of the SSH-key used to connect to GitLab-shell |
|
||||
| `key_id` | string | no | ID of the SSH-key used to connect to GitLab-shell |
|
||||
| `username` | string | no | Username from the certificate used to connect to GitLab-Shell |
|
||||
| `project` | string | no (if `gl_repository` is passed) | Path to the project |
|
||||
| `gl_repository` | string | no (if `project` is passed) | Path to the project |
|
||||
|
@ -93,7 +93,7 @@ information for LFS clients when the repository is accessed over SSH.
|
|||
|
||||
| Attribute | Type | Required | Description |
|
||||
|:----------|:-------|:---------|:------------|
|
||||
| `key_id` | string | no | Id of the SSH-key used to connect to GitLab-shell |
|
||||
| `key_id` | string | no | ID of the SSH-key used to connect to GitLab-shell |
|
||||
| `username`| string | no | Username from the certificate used to connect to GitLab-Shell |
|
||||
| `project` | string | no | Path to the project |
|
||||
|
||||
|
@ -151,14 +151,14 @@ Example response:
|
|||
|
||||
- GitLab-shell
|
||||
|
||||
## Get user for user id or key
|
||||
## Get user for user ID or key
|
||||
|
||||
This endpoint is used when a user performs `ssh git@gitlab.com`. It
|
||||
discovers the user associated with an SSH key.
|
||||
|
||||
| Attribute | Type | Required | Description |
|
||||
|:----------|:-------|:---------|:------------|
|
||||
| `key_id` | integer | no | The id of the SSH key used as found in the authorized-keys file or through the `/authorized_keys` check |
|
||||
| `key_id` | integer | no | The ID of the SSH key used as found in the authorized-keys file or through the `/authorized_keys` check |
|
||||
| `username` | string | no | Username of the user being looked up, used by GitLab-shell when authenticating using a certificate |
|
||||
|
||||
```plaintext
|
||||
|
@ -223,7 +223,7 @@ recovery codes based on their SSH key
|
|||
|
||||
| Attribute | Type | Required | Description |
|
||||
|:----------|:-------|:---------|:------------|
|
||||
| `key_id` | integer | no | The id of the SSH key used as found in the authorized-keys file or through the `/authorized_keys` check |
|
||||
| `key_id` | integer | no | The ID of the SSH key used as found in the authorized-keys file or through the `/authorized_keys` check |
|
||||
| `user_id` | integer | no | **Deprecated** User_id for which to generate new recovery codes |
|
||||
|
||||
```plaintext
|
||||
|
|
|
@ -111,11 +111,11 @@ Directly relate the root namespace to its child namespaces, so
|
|||
whenever a namespace is created without a parent, this one is tagged
|
||||
with the root namespace ID:
|
||||
|
||||
| id | root_id | parent_id
|
||||
|:---|:--------|:----------
|
||||
| 1 | 1 | NULL
|
||||
| 2 | 1 | 1
|
||||
| 3 | 1 | 2
|
||||
| ID | root ID | parent ID |
|
||||
|:---|:--------|:----------|
|
||||
| 1 | 1 | NULL |
|
||||
| 2 | 1 | 1 |
|
||||
| 3 | 1 | 2 |
|
||||
|
||||
To aggregate the statistics inside a namespace we'd execute something like:
|
||||
|
||||
|
|
|
@ -77,64 +77,64 @@ always be at the end of a table.
|
|||
Let's use the `events` table as an example, which currently has the following
|
||||
layout:
|
||||
|
||||
| Column | Type | Size |
|
||||
|:------------|:----------------------------|:---------|
|
||||
| id | integer | 4 bytes |
|
||||
| target_type | character varying | variable |
|
||||
| target_id | integer | 4 bytes |
|
||||
| title | character varying | variable |
|
||||
| data | text | variable |
|
||||
| project_id | integer | 4 bytes |
|
||||
| created_at | timestamp without time zone | 8 bytes |
|
||||
| updated_at | timestamp without time zone | 8 bytes |
|
||||
| action | integer | 4 bytes |
|
||||
| author_id | integer | 4 bytes |
|
||||
| Column | Type | Size |
|
||||
|:--------------|:----------------------------|:---------|
|
||||
| `id` | integer | 4 bytes |
|
||||
| `target_type` | character varying | variable |
|
||||
| `target_id` | integer | 4 bytes |
|
||||
| `title` | character varying | variable |
|
||||
| `data` | text | variable |
|
||||
| `project_id` | integer | 4 bytes |
|
||||
| `created_at` | timestamp without time zone | 8 bytes |
|
||||
| `updated_at` | timestamp without time zone | 8 bytes |
|
||||
| `action` | integer | 4 bytes |
|
||||
| `author_id` | integer | 4 bytes |
|
||||
|
||||
After adding padding to align the columns this would translate to columns being
|
||||
divided into fixed size chunks as follows:
|
||||
|
||||
| Chunk Size | Columns |
|
||||
|:-----------|:------------------|
|
||||
| 8 bytes | id |
|
||||
| variable | target_type |
|
||||
| 8 bytes | target_id |
|
||||
| variable | title |
|
||||
| variable | data |
|
||||
| 8 bytes | project_id |
|
||||
| 8 bytes | created_at |
|
||||
| 8 bytes | updated_at |
|
||||
| 8 bytes | action, author_id |
|
||||
| Chunk Size | Columns |
|
||||
|:-----------|:----------------------|
|
||||
| 8 bytes | `id` |
|
||||
| variable | `target_type` |
|
||||
| 8 bytes | `target_id` |
|
||||
| variable | `title` |
|
||||
| variable | `data` |
|
||||
| 8 bytes | `project_id` |
|
||||
| 8 bytes | `created_at` |
|
||||
| 8 bytes | `updated_at` |
|
||||
| 8 bytes | `action`, `author_id` |
|
||||
|
||||
This means that excluding the variable sized data and tuple header, we need at
|
||||
least 8 * 6 = 48 bytes per row.
|
||||
|
||||
We can optimise this by using the following column order instead:
|
||||
|
||||
| Column | Type | Size |
|
||||
|:------------|:----------------------------|:---------|
|
||||
| created_at | timestamp without time zone | 8 bytes |
|
||||
| updated_at | timestamp without time zone | 8 bytes |
|
||||
| id | integer | 4 bytes |
|
||||
| target_id | integer | 4 bytes |
|
||||
| project_id | integer | 4 bytes |
|
||||
| action | integer | 4 bytes |
|
||||
| author_id | integer | 4 bytes |
|
||||
| target_type | character varying | variable |
|
||||
| title | character varying | variable |
|
||||
| data | text | variable |
|
||||
| Column | Type | Size |
|
||||
|:--------------|:----------------------------|:---------|
|
||||
| `created_at` | timestamp without time zone | 8 bytes |
|
||||
| `updated_at` | timestamp without time zone | 8 bytes |
|
||||
| `id` | integer | 4 bytes |
|
||||
| `target_id` | integer | 4 bytes |
|
||||
| `project_id` | integer | 4 bytes |
|
||||
| `action` | integer | 4 bytes |
|
||||
| `author_id` | integer | 4 bytes |
|
||||
| `target_type` | character varying | variable |
|
||||
| `title` | character varying | variable |
|
||||
| `data` | text | variable |
|
||||
|
||||
This would produce the following chunks:
|
||||
|
||||
| Chunk Size | Columns |
|
||||
|:-----------|:-------------------|
|
||||
| 8 bytes | created_at |
|
||||
| 8 bytes | updated_at |
|
||||
| 8 bytes | id, target_id |
|
||||
| 8 bytes | project_id, action |
|
||||
| 8 bytes | author_id |
|
||||
| variable | target_type |
|
||||
| variable | title |
|
||||
| variable | data |
|
||||
| Chunk Size | Columns |
|
||||
|:-----------|:-----------------------|
|
||||
| 8 bytes | `created_at` |
|
||||
| 8 bytes | `updated_at` |
|
||||
| 8 bytes | `id`, `target_id` |
|
||||
| 8 bytes | `project_id`, `action` |
|
||||
| 8 bytes | `author_id` |
|
||||
| variable | `target_type` |
|
||||
| variable | `title` |
|
||||
| variable | `data` |
|
||||
|
||||
Here we only need 40 bytes per row excluding the variable sized data and 24-byte
|
||||
tuple header. 8 bytes being saved may not sound like much, but for tables as
|
||||
|
|
|
@ -74,7 +74,7 @@ It is using the top-level group or namespace as the defining portion of the name
|
|||
|
||||
To avoid name conflict for instance-level endpoints you will need to define a package naming convention
|
||||
that gives a way to identify the project that the package belongs to. This generally involves using the project
|
||||
id or full project path in the package name. See
|
||||
ID or full project path in the package name. See
|
||||
[Conan's naming convention](../user/packages/conan_repository/index.md#package-recipe-naming-convention) as an example.
|
||||
|
||||
For group and project-level endpoints, naming can be less constrained and it will be up to the group and project
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
|
||||
Rails makes it possible to define so called "polymorphic associations". This
|
||||
usually works by adding two columns to a table: a target type column, and a
|
||||
target id. For example, at the time of writing we have such a setup for
|
||||
target ID. For example, at the time of writing we have such a setup for
|
||||
`members` with the following columns:
|
||||
|
||||
- `source_type`: a string defining the model to use, can be either `Project` or
|
||||
|
|
|
@ -24,9 +24,8 @@ GitLab.com will generate an application ID and secret key for you to use.
|
|||
|
||||
1. Select **Save application**.
|
||||
|
||||
1. You should now see a **Application Id** and **Secret** near the top right of the page (see screenshot).
|
||||
Keep this page open as you continue configuration.
|
||||
![GitLab app](img/gitlab_app.png)
|
||||
1. You should now see an **Application ID** and **Secret**. Keep this page open as you continue
|
||||
configuration.
|
||||
|
||||
1. On your GitLab server, open the configuration file.
|
||||
|
||||
|
|
Binary file not shown.
Before Width: | Height: | Size: 31 KiB |
|
@ -62,7 +62,7 @@ There are no special requirements if you are using GitLab.com.
|
|||
|
||||
- Check `api` in the Scopes section.
|
||||
|
||||
1. Click `Save application`. You will see the generated 'Application Id' and 'Secret' values.
|
||||
1. Click `Save application`. You will see the generated 'Application ID' and 'Secret' values.
|
||||
Copy these values that you will use on the Jira configuration side.
|
||||
|
||||
## Jira Configuration
|
||||
|
|
|
@ -14,11 +14,11 @@ Taking the trigger term as `project-name`, the commands are:
|
|||
| ------- | ------ |
|
||||
| `/project-name help` | Shows all available slash commands |
|
||||
| `/project-name issue new <title> <shift+return> <description>` | Creates a new issue with title `<title>` and description `<description>` |
|
||||
| `/project-name issue show <id>` | Shows the issue with id `<id>` |
|
||||
| `/project-name issue close <id>` | Closes the issue with id `<id>` |
|
||||
| `/project-name issue show <id>` | Shows the issue with ID `<id>` |
|
||||
| `/project-name issue close <id>` | Closes the issue with ID `<id>` |
|
||||
| `/project-name issue search <query>` | Shows up to 5 issues matching `<query>` |
|
||||
| `/project-name issue move <id> to <project>` | Moves issue ID `<id>` to `<project>` |
|
||||
| `/project-name issue comment <id> <shift+return> <comment>` | Adds a new comment to an issue with id `<id>` and comment body `<comment>` |
|
||||
| `/project-name issue comment <id> <shift+return> <comment>` | Adds a new comment to an issue with ID `<id>` and comment body `<comment>` |
|
||||
| `/project-name deploy <from> to <to>` | Deploy from the `<from>` environment to the `<to>` environment |
|
||||
| `/project-name run <job name> <arguments>` | Execute [ChatOps](../ci/chatops/README.md) job `<job name>` on `master` |
|
||||
|
||||
|
|
|
@ -241,6 +241,8 @@ You can disable DAST:
|
|||
- On all branches by setting the `DAST_DISABLED` environment variable to `"true"`.
|
||||
- Only on the default branch by setting the `DAST_DISABLED_FOR_DEFAULT_BRANCH`
|
||||
environment variable to `"true"`.
|
||||
- Only on feature branches by setting `REVIEW_DISABLED` environment variable to
|
||||
`"true"`. This also disables the Review App.
|
||||
|
||||
## Auto Browser Performance Testing **(PREMIUM)**
|
||||
|
||||
|
|
|
@ -154,7 +154,7 @@ also edit it:
|
|||
git lfs unlock images/banner.png
|
||||
```
|
||||
|
||||
You can also unlock by id:
|
||||
You can also unlock by ID:
|
||||
|
||||
```shell
|
||||
git lfs unlock --id=123
|
||||
|
|
|
@ -24,7 +24,7 @@ Git is really deleted](https://git-scm.com/book/en/v2/Git-Internals-Maintenance-
|
|||
|
||||
This means that until Git automatically cleans detached commits (which cannot be
|
||||
accessed by branch or tag) it will be possible to view them with `git reflog` command
|
||||
and access them with direct commit-id. Read more about _[redoing the undo](#redoing-the-undo)_ on the section below.
|
||||
and access them with direct commit ID. Read more about _[redoing the undo](#redoing-the-undo)_ on the section below.
|
||||
|
||||
## Introduction
|
||||
|
||||
|
@ -233,7 +233,7 @@ last known good commit (we assume `A`) and first known bad commit (where bug was
|
|||
git bisect A..E
|
||||
```
|
||||
|
||||
Bisect will provide us with commit-id of the middle commit to test, and then guide us
|
||||
Bisect will provide us with commit ID of the middle commit to test, and then guide us
|
||||
through simple bisection process. You can read more about it [in official Git Tools](https://git-scm.com/book/en/v2/Git-Tools-Debugging-with-Git)
|
||||
In our example we will end up with commit `B`, that introduced bug/error. We have
|
||||
4 options on how to remove it (or part of it) from our repository.
|
||||
|
@ -332,7 +332,7 @@ history](#how-modifying-history-is-done)
|
|||
Sometimes you realize that the changes you undid were useful and you want them
|
||||
back. Well because of first paragraph you are in luck. Command `git reflog`
|
||||
enables you to *recall* detached local commits by referencing or applying them
|
||||
via commit-id. Although, do not expect to see really old commits in reflog, because
|
||||
via commit ID. Although, do not expect to see really old commits in reflog, because
|
||||
Git regularly [cleans the commits which are *unreachable* by branches or tags](https://git-scm.com/book/en/v2/Git-Internals-Maintenance-and-Data-Recovery).
|
||||
|
||||
To view repository history and to track older commits you can use below command:
|
||||
|
@ -353,7 +353,7 @@ eb37e74 HEAD@{6}: rebase -i (pick): Commit C
|
|||
6e43d59 HEAD@{16}: commit: Commit B
|
||||
```
|
||||
|
||||
Output of command shows repository history. In first column there is commit-id,
|
||||
Output of command shows repository history. In first column there is commit ID,
|
||||
in following column, number next to `HEAD` indicates how many commits ago something
|
||||
was made, after that indicator of action that was made (commit, rebase, merge, ...)
|
||||
and then on end description of that action.
|
||||
|
@ -393,7 +393,7 @@ passwords, SSH keys, etc. It is and should not be used to hide mistakes, as
|
|||
it will make it harder to debug in case there are some other bugs. The main
|
||||
reason for this is that you loose the real development progress. **Also keep in
|
||||
mind that, even with modified history, commits are just detached and can still be
|
||||
accessed through commit-id** - at least until all repositories perform
|
||||
accessed through commit ID** - at least until all repositories perform
|
||||
the cleanup of detached commits (happens automatically).
|
||||
|
||||
![Modifying history causes problems on remote branch](img/rebase_reset.png)
|
||||
|
@ -426,7 +426,7 @@ Never modify the commit history of `master` or shared branch.
|
|||
|
||||
After you know what you want to modify (how far in history or how which range of
|
||||
old commits), use `git rebase -i commit-id`. This command will then display all the commits from
|
||||
current version to chosen commit-id and allow modification, squashing, deletion
|
||||
current version to chosen commit ID and allow modification, squashing, deletion
|
||||
of that commits.
|
||||
|
||||
```shell
|
||||
|
|
|
@ -20,7 +20,7 @@ Branching in an Agile environment usually happens around user stories with one
|
|||
or more developers working on it.
|
||||
|
||||
If more than one developer then another branch for each developer is also used
|
||||
with their initials, and US id.
|
||||
with their initials, and US ID.
|
||||
|
||||
After its tested merge into master and remove the branch.
|
||||
|
||||
|
|
|
@ -418,7 +418,7 @@ the report JSON unless stated otherwise. Presence of optional fields depends on
|
|||
| `vulnerabilities[].confidence` | How reliable the vulnerability's assessment is. Possible values: `Ignore`, `Unknown`, `Experimental`, `Low`, `Medium`, `High`, `Confirmed`. **Note:** Our current container scanning tool based on [klar](https://github.com/optiopay/klar) does not provide a confidence level, so this value is currently hardcoded to `Unknown`. |
|
||||
| `vulnerabilities[].solution` | Explanation of how to fix the vulnerability. Optional. |
|
||||
| `vulnerabilities[].scanner` | A node that describes the analyzer used to find this vulnerability. |
|
||||
| `vulnerabilities[].scanner.id` | Id of the scanner as a snake_case string. |
|
||||
| `vulnerabilities[].scanner.id` | ID of the scanner as a snake_case string. |
|
||||
| `vulnerabilities[].scanner.name` | Name of the scanner, for display purposes. |
|
||||
| `vulnerabilities[].location` | A node that tells where the vulnerability is located. |
|
||||
| `vulnerabilities[].location.dependency` | A node that describes the dependency of a project where the vulnerability is located. |
|
||||
|
@ -437,7 +437,7 @@ the report JSON unless stated otherwise. Presence of optional fields depends on
|
|||
| `vulnerabilities[].links[].url` | URL of the vulnerability details document. Optional. |
|
||||
| `remediations` | An array of objects containing information on cured vulnerabilities along with patch diffs to apply. Empty if no remediations provided by an underlying analyzer. |
|
||||
| `remediations[].fixes` | An array of strings that represent references to vulnerabilities fixed by this particular remediation. |
|
||||
| `remediations[].fixes[].id` | The id of a fixed vulnerability. |
|
||||
| `remediations[].fixes[].id` | The ID of a fixed vulnerability. |
|
||||
| `remediations[].fixes[].cve` | (**DEPRECATED - use `remediations[].fixes[].id` instead**) A string value that describes a fixed vulnerability in the same format as `vulnerabilities[].cve`. |
|
||||
| `remediations[].summary` | Overview of how the vulnerabilities have been fixed. |
|
||||
| `remediations[].diff` | base64-encoded remediation code diff, compatible with [`git apply`](https://git-scm.com/docs/git-format-patch#_discussion). |
|
||||
|
|
|
@ -149,7 +149,7 @@ The [Security Scanner Integration](../../../development/integrations/secure.md)
|
|||
| End line | ✓ | ✓ | 𐄂 | ✓ | ✓ | 𐄂 | 𐄂 | 𐄂 | 𐄂 | 𐄂 | 𐄂 | 𐄂 | ✓ |
|
||||
| Start column | ✓ | 𐄂 | 𐄂 | ✓ | ✓ | ✓ | ✓ | 𐄂 | 𐄂 | ✓ | ✓ | 𐄂 | ✓ |
|
||||
| End column | ✓ | 𐄂 | 𐄂 | ✓ | ✓ | 𐄂 | 𐄂 | 𐄂 | 𐄂 | 𐄂 | 𐄂 | 𐄂 | ✓ |
|
||||
| External id (e.g. CVE) | 𐄂 | 𐄂 | ⚠ | 𐄂 | ⚠ | ✓ | 𐄂 | 𐄂 | 𐄂 | 𐄂 | 𐄂 | 𐄂 | 𐄂 |
|
||||
| External ID (e.g. CVE) | 𐄂 | 𐄂 | ⚠ | 𐄂 | ⚠ | ✓ | 𐄂 | 𐄂 | 𐄂 | 𐄂 | 𐄂 | 𐄂 | 𐄂 |
|
||||
| URLs | ✓ | 𐄂 | ✓ | 𐄂 | ⚠ | 𐄂 | ⚠ | 𐄂 | 𐄂 | 𐄂 | 𐄂 | 𐄂 | 𐄂 |
|
||||
| Internal doc/explanation | ✓ | ⚠ | ✓ | 𐄂 | ✓ | 𐄂 | 𐄂 | 𐄂 | 𐄂 | 𐄂 | 𐄂 | ✓ | 𐄂 |
|
||||
| Solution | ✓ | 𐄂 | 𐄂 | 𐄂 | ⚠ | ✓ | 𐄂 | 𐄂 | 𐄂 | 𐄂 | 𐄂 | 𐄂 | 𐄂 |
|
||||
|
|
|
@ -462,7 +462,7 @@ the report JSON unless stated otherwise. Presence of optional fields depends on
|
|||
| `vulnerabilities[].confidence` | How reliable the vulnerability's assessment is. Possible values: `Ignore`, `Unknown`, `Experimental`, `Low`, `Medium`, `High`, `Confirmed`. |
|
||||
| `vulnerabilities[].solution` | Explanation of how to fix the vulnerability. Optional. |
|
||||
| `vulnerabilities[].scanner` | A node that describes the analyzer used to find this vulnerability. |
|
||||
| `vulnerabilities[].scanner.id` | Id of the scanner as a snake_case string. |
|
||||
| `vulnerabilities[].scanner.id` | ID of the scanner as a snake_case string. |
|
||||
| `vulnerabilities[].scanner.name` | Name of the scanner, for display purposes. |
|
||||
| `vulnerabilities[].location` | A node that tells where the vulnerability is located. |
|
||||
| `vulnerabilities[].location.file` | Path to the file where the vulnerability is located. Optional. |
|
||||
|
|
|
@ -673,7 +673,7 @@ The example below shows how to create a new package each time the `master` branc
|
|||
is updated:
|
||||
|
||||
1. Create a `ci_settings.xml` file that will serve as Maven's `settings.xml` file.
|
||||
Add the server section with the same id you defined in your `pom.xml` file.
|
||||
Add the server section with the same ID you defined in your `pom.xml` file.
|
||||
For example, in our case it's `gitlab-maven`:
|
||||
|
||||
```xml
|
||||
|
|
|
@ -201,7 +201,7 @@ nuget install <package_id> -OutputDirectory <output_directory> \
|
|||
|
||||
Where:
|
||||
|
||||
- `<package_id>` is the package id.
|
||||
- `<package_id>` is the package ID.
|
||||
- `<output_directory>` is the output directory, where the package will be installed.
|
||||
- `<package_version>` (Optional) is the package version.
|
||||
- `<source_name>` (Optional) is the source name.
|
||||
|
@ -222,5 +222,5 @@ dotnet add package <package_id> \
|
|||
|
||||
Where:
|
||||
|
||||
- `<package_id>` is the package id.
|
||||
- `<package_id>` is the package ID.
|
||||
- `<package_version>` (Optional) is the package version.
|
||||
|
|
|
@ -225,7 +225,7 @@ Where:
|
|||
|
||||
- `<package_name>` is the package name.
|
||||
- `<personal_access_token>` is a personal access token with the `read_api` scope.
|
||||
- `<project_id>` is the project id number.
|
||||
- `<project_id>` is the project ID.
|
||||
|
||||
If you were following the guide above and want to test installing the
|
||||
`MyPyPiPackage` package, you can run the following:
|
||||
|
|
|
@ -211,17 +211,17 @@ The following table lists all GitLab-specific email headers:
|
|||
|
||||
| Header | Description |
|
||||
|------------------------------------|-------------------------------------------------------------------------|
|
||||
| X-GitLab-Group-Id **(PREMIUM)** | The group's ID. Only present on notification emails for epics. |
|
||||
| X-GitLab-Group-Path **(PREMIUM)** | The group's path. Only present on notification emails for epics. |
|
||||
| X-GitLab-Project | The name of the project the notification belongs to. |
|
||||
| X-GitLab-Project-Id | The project's ID. |
|
||||
| X-GitLab-Project-Path | The project's path. |
|
||||
| X-GitLab-(Resource)-ID | The ID of the resource the notification is for. The resource, for example, can be `Issue`, `MergeRequest`, `Commit`, or another such resource. |
|
||||
| X-GitLab-Discussion-ID | The ID of the thread the comment belongs to, in notification emails for comments. |
|
||||
| X-GitLab-Pipeline-Id | The ID of the pipeline the notification is for, in notification emails for pipelines. |
|
||||
| X-GitLab-Reply-Key | A unique token to support reply by email. |
|
||||
| X-GitLab-NotificationReason | The reason for the notification. This can be `mentioned`, `assigned`, or `own_activity`. |
|
||||
| List-Id | The path of the project in an RFC 2919 mailing list identifier. This is useful for email organization with filters, for example. |
|
||||
| `X-GitLab-Group-Id` **(PREMIUM)** | The group's ID. Only present on notification emails for epics. |
|
||||
| `X-GitLab-Group-Path` **(PREMIUM)** | The group's path. Only present on notification emails for epics. |
|
||||
| `X-GitLab-Project` | The name of the project the notification belongs to. |
|
||||
| `X-GitLab-Project-Id` | The project's ID. |
|
||||
| `X-GitLab-Project-Path` | The project's path. |
|
||||
| `X-GitLab-(Resource)-ID` | The ID of the resource the notification is for. The resource, for example, can be `Issue`, `MergeRequest`, `Commit`, or another such resource. |
|
||||
| `X-GitLab-Discussion-ID` | The ID of the thread the comment belongs to, in notification emails for comments. |
|
||||
| `X-GitLab-Pipeline-Id` | The ID of the pipeline the notification is for, in notification emails for pipelines. |
|
||||
| `X-GitLab-Reply-Key` | A unique token to support reply by email. |
|
||||
| `X-GitLab-NotificationReason` | The reason for the notification. This can be `mentioned`, `assigned`, or `own_activity`. |
|
||||
| `List-Id` | The path of the project in an RFC 2919 mailing list identifier. This is useful for email organization with filters, for example. |
|
||||
|
||||
### X-GitLab-NotificationReason
|
||||
|
||||
|
|
|
@ -1294,7 +1294,7 @@ X-Gitlab-Event: Job Hook
|
|||
}
|
||||
```
|
||||
|
||||
Note that `commit.id` is the id of the pipeline, not the id of the commit.
|
||||
Note that `commit.id` is the ID of the pipeline, not the ID of the commit.
|
||||
|
||||
## Image URL rewriting
|
||||
|
||||
|
|
|
@ -70,7 +70,7 @@ Data will be encoded with a comma as the column delimiter, with `"` used to quot
|
|||
| Labels | Title of any labels joined with a `,` |
|
||||
| Time Estimate | [Time estimate](../time_tracking.md#estimates) in seconds |
|
||||
| Time Spent | [Time spent](../time_tracking.md#time-spent) in seconds |
|
||||
| Epic ID | Id of the parent epic **(ULTIMATE)**, introduced in 12.7 |
|
||||
| Epic ID | ID of the parent epic **(ULTIMATE)**, introduced in 12.7 |
|
||||
| Epic Title | Title of the parent epic **(ULTIMATE)**, introduced in 12.7 |
|
||||
|
||||
## Limitations
|
||||
|
|
|
@ -53,7 +53,7 @@ From error list, users can navigate to the error details page by clicking the ti
|
|||
This page has:
|
||||
|
||||
- A link to the Sentry issue.
|
||||
- A link to the GitLab commit if the Sentry [release id/version](https://docs.sentry.io/workflow/releases/?platform=javascript#configure-sdk) on the Sentry Issue's first release matches a commit SHA in your GitLab hosted project.
|
||||
- A link to the GitLab commit if the Sentry [release ID/version](https://docs.sentry.io/workflow/releases/?platform=javascript#configure-sdk) on the Sentry Issue's first release matches a commit SHA in your GitLab hosted project.
|
||||
- Other details about the issue, including a full stack trace.
|
||||
- In [GitLab 12.7 and newer](https://gitlab.com/gitlab-org/gitlab/issues/36246), language and urgency are displayed.
|
||||
|
||||
|
|
|
@ -273,7 +273,7 @@ func main() {
|
|||
|
||||
Here's an example of how to integrate the feature flags in a Ruby application.
|
||||
|
||||
The Unleash client is given a user id for use with a **Percent rollout (logged in users)** rollout strategy or a list of **Target Users**.
|
||||
The Unleash client is given a user ID for use with a **Percent rollout (logged in users)** rollout strategy or a list of **Target Users**.
|
||||
|
||||
```ruby
|
||||
#!/usr/bin/env ruby
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
# Service Desk **(Starter)**
|
||||
# Service Desk **(STARTER)**
|
||||
|
||||
> [Introduced](https://gitlab.com/gitlab-org/gitlab/issues/149) in [GitLab Premium 9.1](https://about.gitlab.com/releases/2017/04/22/gitlab-9-1-released/#service-desk-eep).
|
||||
|
||||
|
|
|
@ -36,3 +36,4 @@ dast:
|
|||
variables:
|
||||
- $DAST_DISABLED
|
||||
- $DAST_DISABLED_FOR_DEFAULT_BRANCH && $CI_DEFAULT_BRANCH == $CI_COMMIT_REF_NAME
|
||||
- $CI_DEFAULT_BRANCH != $CI_COMMIT_REF_NAME && $REVIEW_DISABLED && $DAST_WEBSITE == null && $DAST_API_SPECIFICATION == null
|
||||
|
|
|
@ -5,8 +5,8 @@ require 'spec_helper'
|
|||
describe AlertManagement::AlertsFinder, '#execute' do
|
||||
let_it_be(:current_user) { create(:user) }
|
||||
let_it_be(:project) { create(:project) }
|
||||
let_it_be(:alert_1) { create(:alert_management_alert, project: project) }
|
||||
let_it_be(:alert_2) { create(:alert_management_alert, project: project) }
|
||||
let_it_be(:alert_1) { create(:alert_management_alert, project: project, ended_at: 1.year.ago, events: 2, severity: :high, status: :resolved) }
|
||||
let_it_be(:alert_2) { create(:alert_management_alert, project: project, events: 1, severity: :critical, status: :ignored) }
|
||||
let_it_be(:alert_3) { create(:alert_management_alert) }
|
||||
let(:params) { {} }
|
||||
|
||||
|
@ -36,5 +36,160 @@ describe AlertManagement::AlertsFinder, '#execute' do
|
|||
it { is_expected.to be_empty }
|
||||
end
|
||||
end
|
||||
|
||||
describe 'sorting' do
|
||||
context 'when sorting by created' do
|
||||
context 'sorts alerts ascending' do
|
||||
let(:params) { { sort: 'created_asc' } }
|
||||
|
||||
it { is_expected.to eq [alert_1, alert_2] }
|
||||
end
|
||||
|
||||
context 'sorts alerts descending' do
|
||||
let(:params) { { sort: 'created_desc' } }
|
||||
|
||||
it { is_expected.to eq [alert_2, alert_1] }
|
||||
end
|
||||
end
|
||||
|
||||
context 'when sorting by updated' do
|
||||
context 'sorts alerts ascending' do
|
||||
let(:params) { { sort: 'updated_asc' } }
|
||||
|
||||
it { is_expected.to eq [alert_1, alert_2] }
|
||||
end
|
||||
|
||||
context 'sorts alerts descending' do
|
||||
let(:params) { { sort: 'updated_desc' } }
|
||||
|
||||
it { is_expected.to eq [alert_2, alert_1] }
|
||||
end
|
||||
end
|
||||
|
||||
context 'when sorting by start time' do
|
||||
context 'sorts alerts ascending' do
|
||||
let(:params) { { sort: 'start_time_asc' } }
|
||||
|
||||
it { is_expected.to eq [alert_1, alert_2] }
|
||||
end
|
||||
|
||||
context 'sorts alerts descending' do
|
||||
let(:params) { { sort: 'start_time_desc' } }
|
||||
|
||||
it { is_expected.to eq [alert_2, alert_1] }
|
||||
end
|
||||
end
|
||||
|
||||
context 'when sorting by end time' do
|
||||
context 'sorts alerts ascending' do
|
||||
let(:params) { { sort: 'end_time_asc' } }
|
||||
|
||||
it { is_expected.to eq [alert_1, alert_2] }
|
||||
end
|
||||
|
||||
context 'sorts alerts descending' do
|
||||
let(:params) { { sort: 'end_time_desc' } }
|
||||
|
||||
it { is_expected.to eq [alert_2, alert_1] }
|
||||
end
|
||||
end
|
||||
|
||||
context 'when sorting by events count' do
|
||||
let_it_be(:alert_count_6) { create(:alert_management_alert, project: project, events: 6) }
|
||||
let_it_be(:alert_count_3) { create(:alert_management_alert, project: project, events: 3) }
|
||||
|
||||
context 'sorts alerts ascending' do
|
||||
let(:params) { { sort: 'events_count_asc' } }
|
||||
|
||||
it { is_expected.to eq [alert_2, alert_1, alert_count_3, alert_count_6] }
|
||||
end
|
||||
|
||||
context 'sorts alerts descending' do
|
||||
let(:params) { { sort: 'events_count_desc' } }
|
||||
|
||||
it { is_expected.to eq [alert_count_6, alert_count_3, alert_1, alert_2] }
|
||||
end
|
||||
end
|
||||
|
||||
context 'when sorting by severity' do
|
||||
let_it_be(:alert_critical) { create(:alert_management_alert, project: project, severity: :critical) }
|
||||
let_it_be(:alert_high) { create(:alert_management_alert, project: project, severity: :high) }
|
||||
let_it_be(:alert_medium) { create(:alert_management_alert, project: project, severity: :medium) }
|
||||
let_it_be(:alert_low) { create(:alert_management_alert, project: project, severity: :low) }
|
||||
let_it_be(:alert_info) { create(:alert_management_alert, project: project, severity: :info) }
|
||||
let_it_be(:alert_unknown) { create(:alert_management_alert, project: project, severity: :unknown) }
|
||||
|
||||
context 'sorts alerts ascending' do
|
||||
let(:params) { { sort: 'severity_asc' } }
|
||||
|
||||
it do
|
||||
is_expected.to eq [
|
||||
alert_2,
|
||||
alert_critical,
|
||||
alert_1,
|
||||
alert_high,
|
||||
alert_medium,
|
||||
alert_low,
|
||||
alert_info,
|
||||
alert_unknown
|
||||
]
|
||||
end
|
||||
end
|
||||
|
||||
context 'sorts alerts descending' do
|
||||
let(:params) { { sort: 'severity_desc' } }
|
||||
|
||||
it do
|
||||
is_expected.to eq [
|
||||
alert_unknown,
|
||||
alert_info,
|
||||
alert_low,
|
||||
alert_medium,
|
||||
alert_1,
|
||||
alert_high,
|
||||
alert_critical,
|
||||
alert_2
|
||||
]
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
context 'when sorting by status' do
|
||||
let_it_be(:alert_triggered) { create(:alert_management_alert, project: project, status: :triggered) }
|
||||
let_it_be(:alert_acknowledged) { create(:alert_management_alert, project: project, status: :acknowledged) }
|
||||
let_it_be(:alert_resolved) { create(:alert_management_alert, project: project, status: :resolved) }
|
||||
let_it_be(:alert_ignored) { create(:alert_management_alert, project: project, status: :ignored) }
|
||||
|
||||
context 'sorts alerts ascending' do
|
||||
let(:params) { { sort: 'status_asc' } }
|
||||
|
||||
it do
|
||||
is_expected.to eq [
|
||||
alert_triggered,
|
||||
alert_acknowledged,
|
||||
alert_1,
|
||||
alert_resolved,
|
||||
alert_2,
|
||||
alert_ignored
|
||||
]
|
||||
end
|
||||
end
|
||||
|
||||
context 'sorts alerts descending' do
|
||||
let(:params) { { sort: 'status_desc' } }
|
||||
|
||||
it do
|
||||
is_expected.to eq [
|
||||
alert_2,
|
||||
alert_ignored,
|
||||
alert_1,
|
||||
alert_resolved,
|
||||
alert_acknowledged,
|
||||
alert_triggered
|
||||
]
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -12,8 +12,8 @@ describe('PipelineTourSuccessModal', () => {
|
|||
|
||||
beforeEach(() => {
|
||||
document.body.dataset.page = 'projects:blob:show';
|
||||
|
||||
trackingSpy = mockTracking('_category_', undefined, jest.spyOn);
|
||||
|
||||
wrapper = shallowMount(pipelineTourSuccess, {
|
||||
propsData: modalProps,
|
||||
stubs: {
|
||||
|
|
|
@ -69,8 +69,10 @@ describe('Suggest gitlab-ci.yml Popover', () => {
|
|||
let trackingSpy;
|
||||
|
||||
beforeEach(() => {
|
||||
document.body.dataset.page = 'projects:blob:new';
|
||||
trackingSpy = mockTracking('_category_', undefined, jest.spyOn);
|
||||
|
||||
createWrapper(commitTrackLabel);
|
||||
trackingSpy = mockTracking('_category_', wrapper.element, jest.spyOn);
|
||||
});
|
||||
|
||||
afterEach(() => {
|
||||
|
@ -83,10 +85,6 @@ describe('Suggest gitlab-ci.yml Popover', () => {
|
|||
const expectedLabel = 'suggest_commit_first_project_gitlab_ci_yml';
|
||||
const expectedProperty = 'owner';
|
||||
|
||||
document.body.dataset.page = 'projects:blob:new';
|
||||
|
||||
wrapper.vm.trackOnShow();
|
||||
|
||||
expect(trackingSpy).toHaveBeenCalledWith(expectedCategory, expectedAction, {
|
||||
label: expectedLabel,
|
||||
property: expectedProperty,
|
||||
|
@ -99,6 +97,7 @@ describe('Suggest gitlab-ci.yml Popover', () => {
|
|||
const expectedProperty = 'owner';
|
||||
const expectedValue = '10';
|
||||
const dismissButton = wrapper.find(GlDeprecatedButton);
|
||||
trackingSpy = mockTracking('_category_', wrapper.element, jest.spyOn);
|
||||
|
||||
triggerEvent(dismissButton.element);
|
||||
|
||||
|
|
|
@ -7,8 +7,8 @@ describe Resolvers::AlertManagementAlertResolver do
|
|||
|
||||
let_it_be(:current_user) { create(:user) }
|
||||
let_it_be(:project) { create(:project) }
|
||||
let_it_be(:alert_1) { create(:alert_management_alert, project: project) }
|
||||
let_it_be(:alert_2) { create(:alert_management_alert, project: project) }
|
||||
let_it_be(:alert_1) { create(:alert_management_alert, project: project, ended_at: 1.year.ago, events: 2, severity: :high, status: :resolved) }
|
||||
let_it_be(:alert_2) { create(:alert_management_alert, project: project, events: 1, severity: :critical, status: :ignored) }
|
||||
let_it_be(:alert_other_proj) { create(:alert_management_alert) }
|
||||
|
||||
let(:args) { {} }
|
||||
|
@ -31,6 +31,22 @@ describe Resolvers::AlertManagementAlertResolver do
|
|||
|
||||
it { is_expected.to contain_exactly(alert_1) }
|
||||
end
|
||||
|
||||
describe 'sorting' do
|
||||
# Other sorting examples in spec/finders/alert_management/alerts_finder_spec.rb
|
||||
context 'when sorting by events count' do
|
||||
let_it_be(:alert_count_6) { create(:alert_management_alert, project: project, events: 6) }
|
||||
let_it_be(:alert_count_3) { create(:alert_management_alert, project: project, events: 3) }
|
||||
|
||||
it 'sorts alerts ascending' do
|
||||
expect(resolve_alerts(sort: :events_count_asc)).to eq [alert_2, alert_1, alert_count_3, alert_count_6]
|
||||
end
|
||||
|
||||
it 'sorts alerts descending' do
|
||||
expect(resolve_alerts(sort: :events_count_desc)).to eq [alert_count_6, alert_count_3, alert_1, alert_2]
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
private
|
||||
|
|
|
@ -3,9 +3,9 @@
|
|||
require 'spec_helper'
|
||||
|
||||
describe GitlabSchema.types['AlertManagementAlert'] do
|
||||
it { expect(described_class.graphql_name).to eq('AlertManagementAlert') }
|
||||
specify { expect(described_class.graphql_name).to eq('AlertManagementAlert') }
|
||||
|
||||
it { expect(described_class).to require_graphql_authorizations(:read_alert_management_alerts) }
|
||||
specify { expect(described_class).to require_graphql_authorizations(:read_alert_management_alerts) }
|
||||
|
||||
it 'exposes the expected fields' do
|
||||
expected_fields = %i[
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
require 'spec_helper'
|
||||
|
||||
describe GitlabSchema.types['AlertManagementSeverity'] do
|
||||
it { expect(described_class.graphql_name).to eq('AlertManagementSeverity') }
|
||||
specify { expect(described_class.graphql_name).to eq('AlertManagementSeverity') }
|
||||
|
||||
it 'exposes all the severity values' do
|
||||
expect(described_class.values.keys).to include(*%w[CRITICAL HIGH MEDIUM LOW INFO UNKNOWN])
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
require 'spec_helper'
|
||||
|
||||
describe GitlabSchema.types['AlertManagementStatus'] do
|
||||
it { expect(described_class.graphql_name).to eq('AlertManagementStatus') }
|
||||
specify { expect(described_class.graphql_name).to eq('AlertManagementStatus') }
|
||||
|
||||
it 'exposes all the severity values' do
|
||||
expect(described_class.values.keys).to include(*%w[TRIGGERED ACKNOWLEDGED RESOLVED IGNORED])
|
||||
|
|
|
@ -3,9 +3,9 @@
|
|||
require 'spec_helper'
|
||||
|
||||
describe GitlabSchema.types['AwardEmoji'] do
|
||||
it { expect(described_class.graphql_name).to eq('AwardEmoji') }
|
||||
specify { expect(described_class.graphql_name).to eq('AwardEmoji') }
|
||||
|
||||
it { expect(described_class).to require_graphql_authorizations(:read_emoji) }
|
||||
specify { expect(described_class).to require_graphql_authorizations(:read_emoji) }
|
||||
|
||||
it { expect(described_class).to have_graphql_fields(:description, :unicode_version, :emoji, :name, :unicode, :user) }
|
||||
specify { expect(described_class).to have_graphql_fields(:description, :unicode_version, :emoji, :name, :unicode, :user) }
|
||||
end
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
require 'spec_helper'
|
||||
|
||||
describe Types::BlobViewers::TypeEnum do
|
||||
it { expect(described_class.graphql_name).to eq('BlobViewersType') }
|
||||
specify { expect(described_class.graphql_name).to eq('BlobViewersType') }
|
||||
|
||||
it 'exposes all tree entry types' do
|
||||
expect(described_class.values.keys).to include(*%w[rich simple auxiliary])
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
require 'spec_helper'
|
||||
|
||||
describe GitlabSchema.types['BoardList'] do
|
||||
it { expect(described_class.graphql_name).to eq('BoardList') }
|
||||
specify { expect(described_class.graphql_name).to eq('BoardList') }
|
||||
|
||||
it 'has specific fields' do
|
||||
expected_fields = %w[id list_type position label]
|
||||
|
|
|
@ -3,9 +3,9 @@
|
|||
require 'spec_helper'
|
||||
|
||||
describe GitlabSchema.types['Board'] do
|
||||
it { expect(described_class.graphql_name).to eq('Board') }
|
||||
specify { expect(described_class.graphql_name).to eq('Board') }
|
||||
|
||||
it { expect(described_class).to require_graphql_authorizations(:read_board) }
|
||||
specify { expect(described_class).to require_graphql_authorizations(:read_board) }
|
||||
|
||||
it 'has specific fields' do
|
||||
expected_fields = %w[id name]
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
require 'spec_helper'
|
||||
|
||||
describe Types::Ci::DetailedStatusType do
|
||||
it { expect(described_class.graphql_name).to eq('DetailedStatus') }
|
||||
specify { expect(described_class.graphql_name).to eq('DetailedStatus') }
|
||||
|
||||
it "has all fields" do
|
||||
expect(described_class).to have_graphql_fields(:group, :icon, :favicon,
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
require 'spec_helper'
|
||||
|
||||
describe Types::Ci::PipelineType do
|
||||
it { expect(described_class.graphql_name).to eq('Pipeline') }
|
||||
specify { expect(described_class.graphql_name).to eq('Pipeline') }
|
||||
|
||||
it { expect(described_class).to expose_permissions_using(Types::PermissionTypes::Ci::Pipeline) }
|
||||
specify { expect(described_class).to expose_permissions_using(Types::PermissionTypes::Ci::Pipeline) }
|
||||
end
|
||||
|
|
|
@ -3,9 +3,9 @@
|
|||
require 'spec_helper'
|
||||
|
||||
describe GitlabSchema.types['Commit'] do
|
||||
it { expect(described_class.graphql_name).to eq('Commit') }
|
||||
specify { expect(described_class.graphql_name).to eq('Commit') }
|
||||
|
||||
it { expect(described_class).to require_graphql_authorizations(:download_code) }
|
||||
specify { expect(described_class).to require_graphql_authorizations(:download_code) }
|
||||
|
||||
it 'contains attributes related to commit' do
|
||||
expect(described_class).to have_graphql_fields(
|
||||
|
|
|
@ -3,11 +3,11 @@
|
|||
require 'spec_helper'
|
||||
|
||||
describe GitlabSchema.types['DiffRefs'] do
|
||||
it { expect(described_class.graphql_name).to eq('DiffRefs') }
|
||||
specify { expect(described_class.graphql_name).to eq('DiffRefs') }
|
||||
|
||||
it { expect(described_class).to have_graphql_fields(:head_sha, :base_sha, :start_sha).only }
|
||||
specify { expect(described_class).to have_graphql_fields(:head_sha, :base_sha, :start_sha).only }
|
||||
|
||||
it { expect(described_class.fields['headSha'].type).to be_non_null }
|
||||
it { expect(described_class.fields['baseSha'].type).not_to be_non_null }
|
||||
it { expect(described_class.fields['startSha'].type).to be_non_null }
|
||||
specify { expect(described_class.fields['headSha'].type).to be_non_null }
|
||||
specify { expect(described_class.fields['baseSha'].type).not_to be_non_null }
|
||||
specify { expect(described_class.fields['startSha'].type).to be_non_null }
|
||||
end
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
require 'spec_helper'
|
||||
|
||||
describe GitlabSchema.types['Environment'] do
|
||||
it { expect(described_class.graphql_name).to eq('Environment') }
|
||||
specify { expect(described_class.graphql_name).to eq('Environment') }
|
||||
|
||||
it 'has the expected fields' do
|
||||
expected_fields = %w[
|
||||
|
@ -13,5 +13,5 @@ describe GitlabSchema.types['Environment'] do
|
|||
expect(described_class).to have_graphql_fields(*expected_fields)
|
||||
end
|
||||
|
||||
it { expect(described_class).to require_graphql_authorizations(:read_environment) }
|
||||
specify { expect(described_class).to require_graphql_authorizations(:read_environment) }
|
||||
end
|
||||
|
|
|
@ -3,9 +3,9 @@
|
|||
require 'spec_helper'
|
||||
|
||||
describe GitlabSchema.types['SentryDetailedError'] do
|
||||
it { expect(described_class.graphql_name).to eq('SentryDetailedError') }
|
||||
specify { expect(described_class.graphql_name).to eq('SentryDetailedError') }
|
||||
|
||||
it { expect(described_class).to require_graphql_authorizations(:read_sentry_issue) }
|
||||
specify { expect(described_class).to require_graphql_authorizations(:read_sentry_issue) }
|
||||
|
||||
it 'exposes the expected fields' do
|
||||
expected_fields = %i[
|
||||
|
|
|
@ -3,9 +3,9 @@
|
|||
require 'spec_helper'
|
||||
|
||||
describe GitlabSchema.types['SentryErrorCollection'] do
|
||||
it { expect(described_class.graphql_name).to eq('SentryErrorCollection') }
|
||||
specify { expect(described_class.graphql_name).to eq('SentryErrorCollection') }
|
||||
|
||||
it { expect(described_class).to require_graphql_authorizations(:read_sentry_issue) }
|
||||
specify { expect(described_class).to require_graphql_authorizations(:read_sentry_issue) }
|
||||
|
||||
it 'exposes the expected fields' do
|
||||
expected_fields = %i[
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
require 'spec_helper'
|
||||
|
||||
describe GitlabSchema.types['SentryErrorStackTraceEntry'] do
|
||||
it { expect(described_class.graphql_name).to eq('SentryErrorStackTraceEntry') }
|
||||
specify { expect(described_class.graphql_name).to eq('SentryErrorStackTraceEntry') }
|
||||
|
||||
it 'exposes the expected fields' do
|
||||
expected_fields = %i[
|
||||
|
|
|
@ -3,9 +3,9 @@
|
|||
require 'spec_helper'
|
||||
|
||||
describe GitlabSchema.types['SentryErrorStackTrace'] do
|
||||
it { expect(described_class.graphql_name).to eq('SentryErrorStackTrace') }
|
||||
specify { expect(described_class.graphql_name).to eq('SentryErrorStackTrace') }
|
||||
|
||||
it { expect(described_class).to require_graphql_authorizations(:read_sentry_issue) }
|
||||
specify { expect(described_class).to require_graphql_authorizations(:read_sentry_issue) }
|
||||
|
||||
it 'exposes the expected fields' do
|
||||
expected_fields = %i[
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
require 'spec_helper'
|
||||
|
||||
describe GitlabSchema.types['SentryError'] do
|
||||
it { expect(described_class.graphql_name).to eq('SentryError') }
|
||||
specify { expect(described_class.graphql_name).to eq('SentryError') }
|
||||
|
||||
it 'exposes the expected fields' do
|
||||
expected_fields = %i[
|
||||
|
|
|
@ -14,9 +14,9 @@ describe GitlabSchema.types['GrafanaIntegration'] do
|
|||
]
|
||||
end
|
||||
|
||||
it { expect(described_class.graphql_name).to eq('GrafanaIntegration') }
|
||||
specify { expect(described_class.graphql_name).to eq('GrafanaIntegration') }
|
||||
|
||||
it { expect(described_class).to require_graphql_authorizations(:admin_operations) }
|
||||
specify { expect(described_class).to require_graphql_authorizations(:admin_operations) }
|
||||
|
||||
it { expect(described_class).to have_graphql_fields(*expected_fields) }
|
||||
specify { expect(described_class).to have_graphql_fields(*expected_fields) }
|
||||
end
|
||||
|
|
|
@ -3,11 +3,11 @@
|
|||
require 'spec_helper'
|
||||
|
||||
describe GitlabSchema.types['Group'] do
|
||||
it { expect(described_class).to expose_permissions_using(Types::PermissionTypes::Group) }
|
||||
specify { expect(described_class).to expose_permissions_using(Types::PermissionTypes::Group) }
|
||||
|
||||
it { expect(described_class.graphql_name).to eq('Group') }
|
||||
specify { expect(described_class.graphql_name).to eq('Group') }
|
||||
|
||||
it { expect(described_class).to require_graphql_authorizations(:read_group) }
|
||||
specify { expect(described_class).to require_graphql_authorizations(:read_group) }
|
||||
|
||||
it 'has the expected fields' do
|
||||
expected_fields = %w[
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
require 'spec_helper'
|
||||
|
||||
describe Types::IssuableSortEnum do
|
||||
it { expect(described_class.graphql_name).to eq('IssuableSort') }
|
||||
specify { expect(described_class.graphql_name).to eq('IssuableSort') }
|
||||
|
||||
it 'exposes all the existing issuable sort values' do
|
||||
expect(described_class.values.keys).to include(
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
require 'spec_helper'
|
||||
|
||||
describe GitlabSchema.types['IssuableState'] do
|
||||
it { expect(described_class.graphql_name).to eq('IssuableState') }
|
||||
specify { expect(described_class.graphql_name).to eq('IssuableState') }
|
||||
|
||||
it_behaves_like 'issuable state'
|
||||
end
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue