Add latest changes from gitlab-org/gitlab@master
This commit is contained in:
parent
f52b15b639
commit
1c47c8e2d6
33 changed files with 197 additions and 163 deletions
|
@ -266,7 +266,7 @@ export default {
|
||||||
}}
|
}}
|
||||||
</p>
|
</p>
|
||||||
<gl-button
|
<gl-button
|
||||||
variant="info"
|
variant="confirm"
|
||||||
category="primary"
|
category="primary"
|
||||||
size="small"
|
size="small"
|
||||||
@click="handleSuggestDismissed"
|
@click="handleSuggestDismissed"
|
||||||
|
|
|
@ -29,10 +29,6 @@ module NotificationRecipients
|
||||||
::NotificationRecipients::Builder::ProjectMaintainers.new(target, **args).notification_recipients
|
::NotificationRecipients::Builder::ProjectMaintainers.new(target, **args).notification_recipients
|
||||||
end
|
end
|
||||||
|
|
||||||
def self.build_new_release_recipients(*args)
|
|
||||||
::NotificationRecipients::Builder::NewRelease.new(*args).notification_recipients
|
|
||||||
end
|
|
||||||
|
|
||||||
def self.build_new_review_recipients(*args)
|
def self.build_new_review_recipients(*args)
|
||||||
::NotificationRecipients::Builder::NewReview.new(*args).notification_recipients
|
::NotificationRecipients::Builder::NewReview.new(*args).notification_recipients
|
||||||
end
|
end
|
||||||
|
|
|
@ -1,25 +0,0 @@
|
||||||
# frozen_string_literal: true
|
|
||||||
|
|
||||||
module NotificationRecipients
|
|
||||||
module Builder
|
|
||||||
class NewRelease < Base
|
|
||||||
attr_reader :target
|
|
||||||
|
|
||||||
def initialize(target)
|
|
||||||
@target = target
|
|
||||||
end
|
|
||||||
|
|
||||||
def build!
|
|
||||||
add_recipients(target.project.authorized_users, :custom, nil)
|
|
||||||
end
|
|
||||||
|
|
||||||
def custom_action
|
|
||||||
:new_release
|
|
||||||
end
|
|
||||||
|
|
||||||
def acting_user
|
|
||||||
target.author
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -447,7 +447,9 @@ class NotificationService
|
||||||
return false
|
return false
|
||||||
end
|
end
|
||||||
|
|
||||||
recipients = NotificationRecipients::BuildService.build_new_release_recipients(release)
|
recipients = NotificationRecipients::BuildService.build_recipients(release,
|
||||||
|
release.author,
|
||||||
|
action: "new")
|
||||||
|
|
||||||
recipients.each do |recipient|
|
recipients.each do |recipient|
|
||||||
mailer.new_release_email(recipient.user.id, release, recipient.reason).deliver_later
|
mailer.new_release_email(recipient.user.id, release, recipient.reason).deliver_later
|
||||||
|
|
|
@ -56,7 +56,7 @@
|
||||||
= gl_badge_tag s_('Profiles|Notification email'), variant: :info
|
= gl_badge_tag s_('Profiles|Notification email'), variant: :info
|
||||||
- unless email.confirmed?
|
- unless email.confirmed?
|
||||||
- confirm_title = "#{email.confirmation_sent_at ? _('Resend confirmation email') : _('Send confirmation email')}"
|
- confirm_title = "#{email.confirmation_sent_at ? _('Resend confirmation email') : _('Send confirmation email')}"
|
||||||
= link_to confirm_title, resend_confirmation_instructions_profile_email_path(email), method: :put, class: 'gl-button btn btn-sm btn-warning gl-ml-3'
|
= link_to confirm_title, resend_confirmation_instructions_profile_email_path(email), method: :put, class: 'gl-button btn btn-sm btn-default gl-ml-3'
|
||||||
|
|
||||||
= link_to profile_email_path(email), data: { confirm: _('Are you sure?'), qa_selector: 'delete_email_link'}, method: :delete, class: 'gl-button btn btn-sm btn-danger gl-ml-3' do
|
= link_to profile_email_path(email), data: { confirm: _('Are you sure?'), qa_selector: 'delete_email_link'}, method: :delete, class: 'gl-button btn btn-sm btn-danger gl-ml-3' do
|
||||||
%span.sr-only= _('Remove')
|
%span.sr-only= _('Remove')
|
||||||
|
|
9
db/docs/vulnerability_state_transitions.yml
Normal file
9
db/docs/vulnerability_state_transitions.yml
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
---
|
||||||
|
table_name: vulnerability_state_transitions
|
||||||
|
classes:
|
||||||
|
- Vulnerabilities::VulnerabilityStateTransition
|
||||||
|
feature_categories:
|
||||||
|
- vulnerability_management
|
||||||
|
description: Stores state transitions of a Vulnerability
|
||||||
|
introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/87957
|
||||||
|
milestone: '15.1'
|
|
@ -0,0 +1,18 @@
|
||||||
|
# frozen_string_literal: true
|
||||||
|
|
||||||
|
class CreateVulnerabilityStateTransition < Gitlab::Database::Migration[2.0]
|
||||||
|
enable_lock_retries!
|
||||||
|
|
||||||
|
def up
|
||||||
|
create_table :vulnerability_state_transitions do |t|
|
||||||
|
t.references :vulnerability, index: true, null: false, foreign_key: { on_delete: :cascade }
|
||||||
|
t.integer :to_state, limit: 2, null: false
|
||||||
|
t.integer :from_state, limit: 2, null: false
|
||||||
|
t.timestamps_with_timezone null: false
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def down
|
||||||
|
drop_table :vulnerability_state_transitions
|
||||||
|
end
|
||||||
|
end
|
1
db/schema_migrations/20220517182529
Normal file
1
db/schema_migrations/20220517182529
Normal file
|
@ -0,0 +1 @@
|
||||||
|
b47c2ddd218df29117d3c69d59819eed67b83a6d687547a44c1b31b302c005a5
|
|
@ -22160,6 +22160,24 @@ CREATE SEQUENCE vulnerability_scanners_id_seq
|
||||||
|
|
||||||
ALTER SEQUENCE vulnerability_scanners_id_seq OWNED BY vulnerability_scanners.id;
|
ALTER SEQUENCE vulnerability_scanners_id_seq OWNED BY vulnerability_scanners.id;
|
||||||
|
|
||||||
|
CREATE TABLE vulnerability_state_transitions (
|
||||||
|
id bigint NOT NULL,
|
||||||
|
vulnerability_id bigint NOT NULL,
|
||||||
|
to_state smallint NOT NULL,
|
||||||
|
from_state smallint NOT NULL,
|
||||||
|
created_at timestamp with time zone NOT NULL,
|
||||||
|
updated_at timestamp with time zone NOT NULL
|
||||||
|
);
|
||||||
|
|
||||||
|
CREATE SEQUENCE vulnerability_state_transitions_id_seq
|
||||||
|
START WITH 1
|
||||||
|
INCREMENT BY 1
|
||||||
|
NO MINVALUE
|
||||||
|
NO MAXVALUE
|
||||||
|
CACHE 1;
|
||||||
|
|
||||||
|
ALTER SEQUENCE vulnerability_state_transitions_id_seq OWNED BY vulnerability_state_transitions.id;
|
||||||
|
|
||||||
CREATE TABLE vulnerability_statistics (
|
CREATE TABLE vulnerability_statistics (
|
||||||
id bigint NOT NULL,
|
id bigint NOT NULL,
|
||||||
created_at timestamp with time zone NOT NULL,
|
created_at timestamp with time zone NOT NULL,
|
||||||
|
@ -23419,6 +23437,8 @@ ALTER TABLE ONLY vulnerability_remediations ALTER COLUMN id SET DEFAULT nextval(
|
||||||
|
|
||||||
ALTER TABLE ONLY vulnerability_scanners ALTER COLUMN id SET DEFAULT nextval('vulnerability_scanners_id_seq'::regclass);
|
ALTER TABLE ONLY vulnerability_scanners ALTER COLUMN id SET DEFAULT nextval('vulnerability_scanners_id_seq'::regclass);
|
||||||
|
|
||||||
|
ALTER TABLE ONLY vulnerability_state_transitions ALTER COLUMN id SET DEFAULT nextval('vulnerability_state_transitions_id_seq'::regclass);
|
||||||
|
|
||||||
ALTER TABLE ONLY vulnerability_statistics ALTER COLUMN id SET DEFAULT nextval('vulnerability_statistics_id_seq'::regclass);
|
ALTER TABLE ONLY vulnerability_statistics ALTER COLUMN id SET DEFAULT nextval('vulnerability_statistics_id_seq'::regclass);
|
||||||
|
|
||||||
ALTER TABLE ONLY vulnerability_user_mentions ALTER COLUMN id SET DEFAULT nextval('vulnerability_user_mentions_id_seq'::regclass);
|
ALTER TABLE ONLY vulnerability_user_mentions ALTER COLUMN id SET DEFAULT nextval('vulnerability_user_mentions_id_seq'::regclass);
|
||||||
|
@ -25706,6 +25726,9 @@ ALTER TABLE ONLY vulnerability_remediations
|
||||||
ALTER TABLE ONLY vulnerability_scanners
|
ALTER TABLE ONLY vulnerability_scanners
|
||||||
ADD CONSTRAINT vulnerability_scanners_pkey PRIMARY KEY (id);
|
ADD CONSTRAINT vulnerability_scanners_pkey PRIMARY KEY (id);
|
||||||
|
|
||||||
|
ALTER TABLE ONLY vulnerability_state_transitions
|
||||||
|
ADD CONSTRAINT vulnerability_state_transitions_pkey PRIMARY KEY (id);
|
||||||
|
|
||||||
ALTER TABLE ONLY vulnerability_statistics
|
ALTER TABLE ONLY vulnerability_statistics
|
||||||
ADD CONSTRAINT vulnerability_statistics_pkey PRIMARY KEY (id);
|
ADD CONSTRAINT vulnerability_statistics_pkey PRIMARY KEY (id);
|
||||||
|
|
||||||
|
@ -29784,6 +29807,8 @@ CREATE UNIQUE INDEX index_vulnerability_remediations_on_project_id_and_checksum
|
||||||
|
|
||||||
CREATE UNIQUE INDEX index_vulnerability_scanners_on_project_id_and_external_id ON vulnerability_scanners USING btree (project_id, external_id);
|
CREATE UNIQUE INDEX index_vulnerability_scanners_on_project_id_and_external_id ON vulnerability_scanners USING btree (project_id, external_id);
|
||||||
|
|
||||||
|
CREATE INDEX index_vulnerability_state_transitions_on_vulnerability_id ON vulnerability_state_transitions USING btree (vulnerability_id);
|
||||||
|
|
||||||
CREATE INDEX index_vulnerability_statistics_on_latest_pipeline_id ON vulnerability_statistics USING btree (latest_pipeline_id);
|
CREATE INDEX index_vulnerability_statistics_on_latest_pipeline_id ON vulnerability_statistics USING btree (latest_pipeline_id);
|
||||||
|
|
||||||
CREATE INDEX index_vulnerability_statistics_on_letter_grade ON vulnerability_statistics USING btree (letter_grade);
|
CREATE INDEX index_vulnerability_statistics_on_letter_grade ON vulnerability_statistics USING btree (letter_grade);
|
||||||
|
@ -32764,6 +32789,9 @@ ALTER TABLE ONLY incident_management_oncall_participants
|
||||||
ALTER TABLE ONLY work_item_parent_links
|
ALTER TABLE ONLY work_item_parent_links
|
||||||
ADD CONSTRAINT fk_rails_601d5bec3a FOREIGN KEY (work_item_id) REFERENCES issues(id) ON DELETE CASCADE;
|
ADD CONSTRAINT fk_rails_601d5bec3a FOREIGN KEY (work_item_id) REFERENCES issues(id) ON DELETE CASCADE;
|
||||||
|
|
||||||
|
ALTER TABLE ONLY vulnerability_state_transitions
|
||||||
|
ADD CONSTRAINT fk_rails_60e4899648 FOREIGN KEY (vulnerability_id) REFERENCES vulnerabilities(id) ON DELETE CASCADE;
|
||||||
|
|
||||||
ALTER TABLE ONLY user_highest_roles
|
ALTER TABLE ONLY user_highest_roles
|
||||||
ADD CONSTRAINT fk_rails_60f6c325a6 FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE;
|
ADD CONSTRAINT fk_rails_60f6c325a6 FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE;
|
||||||
|
|
||||||
|
|
|
@ -132,7 +132,7 @@ issue by email" or
|
||||||
"[Create new merge request by email](../user/project/merge_requests/creating_merge_requests.md#by-sending-an-email)"
|
"[Create new merge request by email](../user/project/merge_requests/creating_merge_requests.md#by-sending-an-email)"
|
||||||
features by using a project's unique address as the email when signing up for
|
features by using a project's unique address as the email when signing up for
|
||||||
Slack. This would send a confirmation email, which would create a new issue or
|
Slack. This would send a confirmation email, which would create a new issue or
|
||||||
merge request on the project owned by the attacker, allowing them to click the
|
merge request on the project owned by the attacker, allowing them to select the
|
||||||
confirmation link and validate their account on your company's private Slack
|
confirmation link and validate their account on your company's private Slack
|
||||||
instance.
|
instance.
|
||||||
|
|
||||||
|
|
|
@ -21,7 +21,7 @@ From left to right, the performance bar displays:
|
||||||
|
|
||||||
- **Current Host**: the current host serving the page.
|
- **Current Host**: the current host serving the page.
|
||||||
- **Database queries**: the time taken (in milliseconds) and the total number
|
- **Database queries**: the time taken (in milliseconds) and the total number
|
||||||
of database queries, displayed in the format `00ms / 00 (00 cached) pg`. Click to display
|
of database queries, displayed in the format `00ms / 00 (00 cached) pg`. Select to display
|
||||||
a modal window with more details. You can use this to see the following
|
a modal window with more details. You can use this to see the following
|
||||||
details for each query:
|
details for each query:
|
||||||
- **In a transaction**: shows up below the query if it was executed in
|
- **In a transaction**: shows up below the query if it was executed in
|
||||||
|
@ -35,21 +35,21 @@ From left to right, the performance bar displays:
|
||||||
GitLab features. The name shown is the same name used to configure database
|
GitLab features. The name shown is the same name used to configure database
|
||||||
connections in GitLab.
|
connections in GitLab.
|
||||||
- **Gitaly calls**: the time taken (in milliseconds) and the total number of
|
- **Gitaly calls**: the time taken (in milliseconds) and the total number of
|
||||||
[Gitaly](../../gitaly/index.md) calls. Click to display a modal window with more
|
[Gitaly](../../gitaly/index.md) calls. Select to display a modal window with more
|
||||||
details.
|
details.
|
||||||
- **Rugged calls**: the time taken (in milliseconds) and the total number of
|
- **Rugged calls**: the time taken (in milliseconds) and the total number of
|
||||||
[Rugged](../../nfs.md#improving-nfs-performance-with-gitlab) calls.
|
[Rugged](../../nfs.md#improving-nfs-performance-with-gitlab) calls.
|
||||||
Click to display a modal window with more details.
|
Select to display a modal window with more details.
|
||||||
- **Redis calls**: the time taken (in milliseconds) and the total number of
|
- **Redis calls**: the time taken (in milliseconds) and the total number of
|
||||||
Redis calls. Click to display a modal window with more details.
|
Redis calls. Select to display a modal window with more details.
|
||||||
- **Elasticsearch calls**: the time taken (in milliseconds) and the total number of
|
- **Elasticsearch calls**: the time taken (in milliseconds) and the total number of
|
||||||
Elasticsearch calls. Click to display a modal window with more details.
|
Elasticsearch calls. Select to display a modal window with more details.
|
||||||
- **External HTTP calls**: the time taken (in milliseconds) and the total
|
- **External HTTP calls**: the time taken (in milliseconds) and the total
|
||||||
number of external calls to other systems. Click to display a modal window
|
number of external calls to other systems. Select to display a modal window
|
||||||
with more details.
|
with more details.
|
||||||
- **Load timings** of the page: if your browser supports load timings, several
|
- **Load timings** of the page: if your browser supports load timings, several
|
||||||
values in milliseconds, separated by slashes.
|
values in milliseconds, separated by slashes.
|
||||||
Click to display a modal window with more details. The values, from left to right:
|
Select to display a modal window with more details. The values, from left to right:
|
||||||
- **Backend**: time needed for the base page to load.
|
- **Backend**: time needed for the base page to load.
|
||||||
- [**First Contentful Paint**](https://web.dev/first-contentful-paint/):
|
- [**First Contentful Paint**](https://web.dev/first-contentful-paint/):
|
||||||
Time until something was visible to the user. Displays `NaN` if your browser does not
|
Time until something was visible to the user. Displays `NaN` if your browser does not
|
||||||
|
@ -112,7 +112,7 @@ for a given group:
|
||||||
1. On the left sidebar, select **Settings > Metrics and profiling**
|
1. On the left sidebar, select **Settings > Metrics and profiling**
|
||||||
(`admin/application_settings/metrics_and_profiling`), and expand
|
(`admin/application_settings/metrics_and_profiling`), and expand
|
||||||
**Profiling - Performance bar**.
|
**Profiling - Performance bar**.
|
||||||
1. Click **Allow non-administrators access to the performance bar**.
|
1. Select **Allow non-administrators access to the performance bar**.
|
||||||
1. In the **Allow access to members of the following group** field, provide the full path of the
|
1. In the **Allow access to members of the following group** field, provide the full path of the
|
||||||
group allowed to access the performance.
|
group allowed to access the performance.
|
||||||
1. Click **Save changes**.
|
1. Select **Save changes**.
|
||||||
|
|
|
@ -12,8 +12,8 @@ This is the documentation for the Omnibus GitLab packages. For using your own
|
||||||
non-bundled Redis, follow the [relevant documentation](replication_and_failover_external.md).
|
non-bundled Redis, follow the [relevant documentation](replication_and_failover_external.md).
|
||||||
|
|
||||||
NOTE:
|
NOTE:
|
||||||
In Redis lingo, primary is called master. In this document, primary is used
|
In Redis lingo, `primary` is called `master`. In this document, `primary` is used
|
||||||
instead of master, except the settings where `master` is required.
|
instead of `master`, except the settings where `master` is required.
|
||||||
|
|
||||||
Using [Redis](https://redis.io/) in scalable environment is possible using a **Primary** x **Replica**
|
Using [Redis](https://redis.io/) in scalable environment is possible using a **Primary** x **Replica**
|
||||||
topology with a [Redis Sentinel](https://redis.io/topics/sentinel) service to watch and automatically
|
topology with a [Redis Sentinel](https://redis.io/topics/sentinel) service to watch and automatically
|
||||||
|
|
|
@ -18,22 +18,22 @@ full list of reference architectures, see
|
||||||
> - **Test requests per second (RPS) rates:** API: 500 RPS, Web: 50 RPS, Git (Pull): 50 RPS, Git (Push): 10 RPS
|
> - **Test requests per second (RPS) rates:** API: 500 RPS, Web: 50 RPS, Git (Pull): 50 RPS, Git (Push): 10 RPS
|
||||||
> - **[Latest Results](https://gitlab.com/gitlab-org/quality/performance/-/wikis/Benchmarks/Latest/25k)**
|
> - **[Latest Results](https://gitlab.com/gitlab-org/quality/performance/-/wikis/Benchmarks/Latest/25k)**
|
||||||
|
|
||||||
| Service | Nodes | Configuration | GCP | AWS | Azure |
|
| Service | Nodes | Configuration | GCP | AWS | Azure |
|
||||||
|---------------------------------------------------|-------------|-------------------------|------------------|--------------|-----------|
|
|---------------------------------------------------|----------------|-------------------------|------------------|----------------|----------------|
|
||||||
| External load balancing node<sup>3</sup> | 1 | 4 vCPU, 3.6 GB memory | `n1-highcpu-4` | `c5.xlarge` | `F4s v2` |
|
| External load balancing node<sup>3</sup> | 1 | 4 vCPU, 3.6 GB memory | `n1-highcpu-4` | `c5.xlarge` | `F4s v2` |
|
||||||
| Consul<sup>1</sup> | 3 | 2 vCPU, 1.8 GB memory | `n1-highcpu-2` | `c5.large` | `F2s v2` |
|
| Consul<sup>1</sup> | 3 | 2 vCPU, 1.8 GB memory | `n1-highcpu-2` | `c5.large` | `F2s v2` |
|
||||||
| PostgreSQL<sup>1</sup> | 3 | 16 vCPU, 60 GB memory | `n1-standard-16` | `m5.4xlarge` | `D16s v3` |
|
| PostgreSQL<sup>1</sup> | 3 | 16 vCPU, 60 GB memory | `n1-standard-16` | `m5.4xlarge` | `D16s v3` |
|
||||||
| PgBouncer<sup>1</sup> | 3 | 2 vCPU, 1.8 GB memory | `n1-highcpu-2` | `c5.large` | `F2s v2` |
|
| PgBouncer<sup>1</sup> | 3 | 2 vCPU, 1.8 GB memory | `n1-highcpu-2` | `c5.large` | `F2s v2` |
|
||||||
| Internal load balancing node<sup>3</sup> | 1 | 4 vCPU, 3.6GB memory | `n1-highcpu-4` | `c5.xlarge` | `F4s v2` |
|
| Internal load balancing node<sup>3</sup> | 1 | 4 vCPU, 3.6GB memory | `n1-highcpu-4` | `c5.xlarge` | `F4s v2` |
|
||||||
| Redis/Sentinel - Cache<sup>2</sup> | 3 | 4 vCPU, 15 GB memory | `n1-standard-4` | `m5.xlarge` | `D4s v3` |
|
| Redis/Sentinel - Cache<sup>2</sup> | 3 | 4 vCPU, 15 GB memory | `n1-standard-4` | `m5.xlarge` | `D4s v3` |
|
||||||
| Redis/Sentinel - Persistent<sup>2</sup> | 3 | 4 vCPU, 15 GB memory | `n1-standard-4` | `m5.xlarge` | `D4s v3` |
|
| Redis/Sentinel - Persistent<sup>2</sup> | 3 | 4 vCPU, 15 GB memory | `n1-standard-4` | `m5.xlarge` | `D4s v3` |
|
||||||
| Gitaly<sup>5</sup> | 3 | 32 vCPU, 120 GB memory | `n1-standard-32` | `m5.8xlarge` | `D32s v3` |
|
| Gitaly<sup>5</sup> | 3 | 32 vCPU, 120 GB memory | `n1-standard-32` | `m5.8xlarge` | `D32s v3` |
|
||||||
| Praefect<sup>5</sup> | 3 | 4 vCPU, 3.6 GB memory | `n1-highcpu-4` | `c5.xlarge` | `F4s v2` |
|
| Praefect<sup>5</sup> | 3 | 4 vCPU, 3.6 GB memory | `n1-highcpu-4` | `c5.xlarge` | `F4s v2` |
|
||||||
| Praefect PostgreSQL<sup>1</sup> | 1+ | 2 vCPU, 1.8 GB memory | `n1-highcpu-2` | `c5.large` | `F2s v2` |
|
| Praefect PostgreSQL<sup>1</sup> | 1+ | 2 vCPU, 1.8 GB memory | `n1-highcpu-2` | `c5.large` | `F2s v2` |
|
||||||
| Sidekiq | 4 | 4 vCPU, 15 GB memory | `n1-standard-4` | `m5.xlarge` | `D4s v3` |
|
| Sidekiq | 4 | 4 vCPU, 15 GB memory | `n1-standard-4` | `m5.xlarge` | `D4s v3` |
|
||||||
| GitLab Rails | 5 | 32 vCPU, 28.8 GB memory | `n1-highcpu-32` | `c5.9xlarge` | `F32s v2` |
|
| GitLab Rails | 5 | 32 vCPU, 28.8 GB memory | `n1-highcpu-32` | `c5.9xlarge` | `F32s v2` |
|
||||||
| Monitoring node | 1 | 4 vCPU, 3.6 GB memory | `n1-highcpu-4` | `c5.xlarge` | `F4s v2` |
|
| Monitoring node | 1 | 4 vCPU, 3.6 GB memory | `n1-highcpu-4` | `c5.xlarge` | `F4s v2` |
|
||||||
| Object storage<sup>4</sup> | n/a | n/a | n/a | n/a | n/a |
|
| Object storage<sup>4</sup> | Not applicable | Not applicable | Not applicable | Not applicable | Not applicable |
|
||||||
| NFS server (non-Gitaly) | 1 | 4 vCPU, 3.6 GB memory | `n1-highcpu-4` | `c5.xlarge` | `F4s v2` |
|
| NFS server (non-Gitaly) | 1 | 4 vCPU, 3.6 GB memory | `n1-highcpu-4` | `c5.xlarge` | `F4s v2` |
|
||||||
|
|
||||||
<!-- Disable ordered list rule https://github.com/DavidAnson/markdownlint/blob/main/doc/Rules.md#md029---ordered-list-item-prefix -->
|
<!-- Disable ordered list rule https://github.com/DavidAnson/markdownlint/blob/main/doc/Rules.md#md029---ordered-list-item-prefix -->
|
||||||
|
@ -2309,18 +2309,18 @@ future with further specific cloud provider details.
|
||||||
Next are the backend components that run on static compute VMs via Omnibus (or External PaaS
|
Next are the backend components that run on static compute VMs via Omnibus (or External PaaS
|
||||||
services where applicable):
|
services where applicable):
|
||||||
|
|
||||||
| Service | Nodes | Configuration | GCP | AWS |
|
| Service | Nodes | Configuration | GCP | AWS |
|
||||||
|------------------------------------------|-------|------------------------|------------------|--------------|
|
|------------------------------------------|----------------|------------------------|------------------|----------------|
|
||||||
| Consul<sup>1</sup> | 3 | 2 vCPU, 1.8 GB memory | `n1-highcpu-2` | `c5.large` |
|
| Consul<sup>1</sup> | 3 | 2 vCPU, 1.8 GB memory | `n1-highcpu-2` | `c5.large` |
|
||||||
| PostgreSQL<sup>1</sup> | 3 | 16 vCPU, 60 GB memory | `n1-standard-16` | `m5.4xlarge` |
|
| PostgreSQL<sup>1</sup> | 3 | 16 vCPU, 60 GB memory | `n1-standard-16` | `m5.4xlarge` |
|
||||||
| PgBouncer<sup>1</sup> | 3 | 2 vCPU, 1.8 GB memory | `n1-highcpu-2` | `c5.large` |
|
| PgBouncer<sup>1</sup> | 3 | 2 vCPU, 1.8 GB memory | `n1-highcpu-2` | `c5.large` |
|
||||||
| Internal load balancing node<sup>3</sup> | 1 | 4 vCPU, 3.6GB memory | `n1-highcpu-4` | `c5.xlarge` |
|
| Internal load balancing node<sup>3</sup> | 1 | 4 vCPU, 3.6GB memory | `n1-highcpu-4` | `c5.xlarge` |
|
||||||
| Redis/Sentinel - Cache<sup>2</sup> | 3 | 4 vCPU, 15 GB memory | `n1-standard-4` | `m5.xlarge` |
|
| Redis/Sentinel - Cache<sup>2</sup> | 3 | 4 vCPU, 15 GB memory | `n1-standard-4` | `m5.xlarge` |
|
||||||
| Redis/Sentinel - Persistent<sup>2</sup> | 3 | 4 vCPU, 15 GB memory | `n1-standard-4` | `m5.xlarge` |
|
| Redis/Sentinel - Persistent<sup>2</sup> | 3 | 4 vCPU, 15 GB memory | `n1-standard-4` | `m5.xlarge` |
|
||||||
| Gitaly<sup>5</sup> | 3 | 32 vCPU, 120 GB memory | `n1-standard-32` | `m5.8xlarge` |
|
| Gitaly<sup>5</sup> | 3 | 32 vCPU, 120 GB memory | `n1-standard-32` | `m5.8xlarge` |
|
||||||
| Praefect<sup>5</sup> | 3 | 4 vCPU, 3.6 GB memory | `n1-highcpu-4` | `c5.xlarge` |
|
| Praefect<sup>5</sup> | 3 | 4 vCPU, 3.6 GB memory | `n1-highcpu-4` | `c5.xlarge` |
|
||||||
| Praefect PostgreSQL<sup>1</sup> | 1+ | 2 vCPU, 1.8 GB memory | `n1-highcpu-2` | `c5.large` |
|
| Praefect PostgreSQL<sup>1</sup> | 1+ | 2 vCPU, 1.8 GB memory | `n1-highcpu-2` | `c5.large` |
|
||||||
| Object storage<sup>4</sup> | n/a | n/a | n/a | n/a |
|
| Object storage<sup>4</sup> | Not applicable | Not applicable | Not applicable | Not applicable |
|
||||||
|
|
||||||
<!-- Disable ordered list rule https://github.com/DavidAnson/markdownlint/blob/main/doc/Rules.md#md029---ordered-list-item-prefix -->
|
<!-- Disable ordered list rule https://github.com/DavidAnson/markdownlint/blob/main/doc/Rules.md#md029---ordered-list-item-prefix -->
|
||||||
<!-- markdownlint-disable MD029 -->
|
<!-- markdownlint-disable MD029 -->
|
||||||
|
|
|
@ -28,21 +28,21 @@ For a full list of reference architectures, see
|
||||||
> - **Test requests per second (RPS) rates:** API: 60 RPS, Web: 6 RPS, Git (Pull): 6 RPS, Git (Push): 1 RPS
|
> - **Test requests per second (RPS) rates:** API: 60 RPS, Web: 6 RPS, Git (Pull): 6 RPS, Git (Push): 1 RPS
|
||||||
> - **[Latest Results](https://gitlab.com/gitlab-org/quality/performance/-/wikis/Benchmarks/Latest/3k)**
|
> - **[Latest Results](https://gitlab.com/gitlab-org/quality/performance/-/wikis/Benchmarks/Latest/3k)**
|
||||||
|
|
||||||
| Service | Nodes | Configuration | GCP | AWS | Azure |
|
| Service | Nodes | Configuration | GCP | AWS | Azure |
|
||||||
|--------------------------------------------|-------------|-----------------------|-----------------|--------------|----------|
|
|--------------------------------------------|----------------|-----------------------|-----------------|----------------|----------------|
|
||||||
| External load balancing node<sup>3</sup> | 1 | 2 vCPU, 1.8 GB memory | `n1-highcpu-2` | `c5.large` | `F2s v2` |
|
| External load balancing node<sup>3</sup> | 1 | 2 vCPU, 1.8 GB memory | `n1-highcpu-2` | `c5.large` | `F2s v2` |
|
||||||
| Redis<sup>2</sup> | 3 | 2 vCPU, 7.5 GB memory | `n1-standard-2` | `m5.large` | `D2s v3` |
|
| Redis<sup>2</sup> | 3 | 2 vCPU, 7.5 GB memory | `n1-standard-2` | `m5.large` | `D2s v3` |
|
||||||
| Consul<sup>1</sup> + Sentinel<sup>2</sup> | 3 | 2 vCPU, 1.8 GB memory | `n1-highcpu-2` | `c5.large` | `F2s v2` |
|
| Consul<sup>1</sup> + Sentinel<sup>2</sup> | 3 | 2 vCPU, 1.8 GB memory | `n1-highcpu-2` | `c5.large` | `F2s v2` |
|
||||||
| PostgreSQL<sup>1</sup> | 3 | 2 vCPU, 7.5 GB memory | `n1-standard-2` | `m5.large` | `D2s v3` |
|
| PostgreSQL<sup>1</sup> | 3 | 2 vCPU, 7.5 GB memory | `n1-standard-2` | `m5.large` | `D2s v3` |
|
||||||
| PgBouncer<sup>1</sup> | 3 | 2 vCPU, 1.8 GB memory | `n1-highcpu-2` | `c5.large` | `F2s v2` |
|
| PgBouncer<sup>1</sup> | 3 | 2 vCPU, 1.8 GB memory | `n1-highcpu-2` | `c5.large` | `F2s v2` |
|
||||||
| Internal load balancing node<sup>3</sup> | 1 | 2 vCPU, 1.8 GB memory | `n1-highcpu-2` | `c5.large` | `F2s v2` |
|
| Internal load balancing node<sup>3</sup> | 1 | 2 vCPU, 1.8 GB memory | `n1-highcpu-2` | `c5.large` | `F2s v2` |
|
||||||
| Gitaly<sup>5</sup> | 3 | 4 vCPU, 15 GB memory | `n1-standard-4` | `m5.xlarge` | `D4s v3` |
|
| Gitaly<sup>5</sup> | 3 | 4 vCPU, 15 GB memory | `n1-standard-4` | `m5.xlarge` | `D4s v3` |
|
||||||
| Praefect<sup>5</sup> | 3 | 2 vCPU, 1.8 GB memory | `n1-highcpu-2` | `c5.large` | `F2s v2` |
|
| Praefect<sup>5</sup> | 3 | 2 vCPU, 1.8 GB memory | `n1-highcpu-2` | `c5.large` | `F2s v2` |
|
||||||
| Praefect PostgreSQL<sup>1</sup> | 1+ | 2 vCPU, 1.8 GB memory | `n1-highcpu-2` | `c5.large` | `F2s v2` |
|
| Praefect PostgreSQL<sup>1</sup> | 1+ | 2 vCPU, 1.8 GB memory | `n1-highcpu-2` | `c5.large` | `F2s v2` |
|
||||||
| Sidekiq | 4 | 2 vCPU, 7.5 GB memory | `n1-standard-2` | `m5.large` | `D2s v3` |
|
| Sidekiq | 4 | 2 vCPU, 7.5 GB memory | `n1-standard-2` | `m5.large` | `D2s v3` |
|
||||||
| GitLab Rails | 3 | 8 vCPU, 7.2 GB memory | `n1-highcpu-8` | `c5.2xlarge` | `F8s v2` |
|
| GitLab Rails | 3 | 8 vCPU, 7.2 GB memory | `n1-highcpu-8` | `c5.2xlarge` | `F8s v2` |
|
||||||
| Monitoring node | 1 | 2 vCPU, 1.8 GB memory | `n1-highcpu-2` | `c5.large` | `F2s v2` |
|
| Monitoring node | 1 | 2 vCPU, 1.8 GB memory | `n1-highcpu-2` | `c5.large` | `F2s v2` |
|
||||||
| Object storage<sup>4</sup> | n/a | n/a | n/a | n/a | n/a |
|
| Object storage<sup>4</sup> | Not applicable | Not applicable | Not applicable | Not applicable | Not applicable |
|
||||||
| NFS server (non-Gitaly) | 1 | 4 vCPU, 3.6 GB memory | `n1-highcpu-4` | `c5.xlarge` | `F4s v2` |
|
| NFS server (non-Gitaly) | 1 | 4 vCPU, 3.6 GB memory | `n1-highcpu-4` | `c5.xlarge` | `F4s v2` |
|
||||||
|
|
||||||
<!-- Disable ordered list rule https://github.com/DavidAnson/markdownlint/blob/main/doc/Rules.md#md029---ordered-list-item-prefix -->
|
<!-- Disable ordered list rule https://github.com/DavidAnson/markdownlint/blob/main/doc/Rules.md#md029---ordered-list-item-prefix -->
|
||||||
|
@ -2269,17 +2269,17 @@ future with further specific cloud provider details.
|
||||||
Next are the backend components that run on static compute VMs via Omnibus (or External PaaS
|
Next are the backend components that run on static compute VMs via Omnibus (or External PaaS
|
||||||
services where applicable):
|
services where applicable):
|
||||||
|
|
||||||
| Service | Nodes | Configuration | GCP | AWS |
|
| Service | Nodes | Configuration | GCP | AWS |
|
||||||
|-------------------------------------------|-------|-----------------------|-----------------|-------------|
|
|-------------------------------------------|----------------|-----------------------|-----------------|----------------|
|
||||||
| Redis<sup>2</sup> | 3 | 2 vCPU, 7.5 GB memory | `n1-standard-2` | `m5.large` |
|
| Redis<sup>2</sup> | 3 | 2 vCPU, 7.5 GB memory | `n1-standard-2` | `m5.large` |
|
||||||
| Consul<sup>1</sup> + Sentinel<sup>2</sup> | 3 | 2 vCPU, 1.8 GB memory | `n1-highcpu-2` | `c5.large` |
|
| Consul<sup>1</sup> + Sentinel<sup>2</sup> | 3 | 2 vCPU, 1.8 GB memory | `n1-highcpu-2` | `c5.large` |
|
||||||
| PostgreSQL<sup>1</sup> | 3 | 2 vCPU, 7.5 GB memory | `n1-standard-2` | `m5.large` |
|
| PostgreSQL<sup>1</sup> | 3 | 2 vCPU, 7.5 GB memory | `n1-standard-2` | `m5.large` |
|
||||||
| PgBouncer<sup>1</sup> | 3 | 2 vCPU, 1.8 GB memory | `n1-highcpu-2` | `c5.large` |
|
| PgBouncer<sup>1</sup> | 3 | 2 vCPU, 1.8 GB memory | `n1-highcpu-2` | `c5.large` |
|
||||||
| Internal load balancing node<sup>3</sup> | 1 | 2 vCPU, 1.8 GB memory | `n1-highcpu-2` | `c5.large` |
|
| Internal load balancing node<sup>3</sup> | 1 | 2 vCPU, 1.8 GB memory | `n1-highcpu-2` | `c5.large` |
|
||||||
| Gitaly<sup>5</sup> | 3 | 4 vCPU, 15 GB memory | `n1-standard-4` | `m5.xlarge` |
|
| Gitaly<sup>5</sup> | 3 | 4 vCPU, 15 GB memory | `n1-standard-4` | `m5.xlarge` |
|
||||||
| Praefect<sup>5</sup> | 3 | 2 vCPU, 1.8 GB memory | `n1-highcpu-2` | `c5.large` |
|
| Praefect<sup>5</sup> | 3 | 2 vCPU, 1.8 GB memory | `n1-highcpu-2` | `c5.large` |
|
||||||
| Praefect PostgreSQL<sup>1</sup> | 1+ | 2 vCPU, 1.8 GB memory | `n1-highcpu-2` | `c5.large` |
|
| Praefect PostgreSQL<sup>1</sup> | 1+ | 2 vCPU, 1.8 GB memory | `n1-highcpu-2` | `c5.large` |
|
||||||
| Object storage<sup>4</sup> | n/a | n/a | n/a | n/a |
|
| Object storage<sup>4</sup> | Not applicable | Not applicable | Not applicable | Not applicable |
|
||||||
|
|
||||||
<!-- Disable ordered list rule https://github.com/DavidAnson/markdownlint/blob/main/doc/Rules.md#md029---ordered-list-item-prefix -->
|
<!-- Disable ordered list rule https://github.com/DavidAnson/markdownlint/blob/main/doc/Rules.md#md029---ordered-list-item-prefix -->
|
||||||
<!-- markdownlint-disable MD029 -->
|
<!-- markdownlint-disable MD029 -->
|
||||||
|
|
|
@ -34,7 +34,7 @@ To locate a relevant request and view its correlation ID:
|
||||||
|
|
||||||
1. Enable persistent logging in your network monitor. Some actions in GitLab will redirect you quickly after you submit a form, so this will help capture all relevant activity.
|
1. Enable persistent logging in your network monitor. Some actions in GitLab will redirect you quickly after you submit a form, so this will help capture all relevant activity.
|
||||||
1. To help isolate the requests you are looking for, you can filter for `document` requests.
|
1. To help isolate the requests you are looking for, you can filter for `document` requests.
|
||||||
1. Click the request of interest to view further detail.
|
1. Select the request of interest to view further detail.
|
||||||
1. Go to the **Headers** section and look for **Response Headers**. There you should find an `x-request-id` header with a
|
1. Go to the **Headers** section and look for **Response Headers**. There you should find an `x-request-id` header with a
|
||||||
value that was randomly generated by GitLab for the request.
|
value that was randomly generated by GitLab for the request.
|
||||||
|
|
||||||
|
|
|
@ -129,7 +129,7 @@ they are collapsed into a single group in regular pipeline graphs (not the mini
|
||||||
|
|
||||||
You can recognize when a pipeline has grouped jobs if you don't see the retry or
|
You can recognize when a pipeline has grouped jobs if you don't see the retry or
|
||||||
cancel button inside them. Hovering over them shows the number of grouped
|
cancel button inside them. Hovering over them shows the number of grouped
|
||||||
jobs. Click to expand them.
|
jobs. Select to expand them.
|
||||||
|
|
||||||
![Grouped pipelines](img/pipeline_grouped_jobs_v14_2.png)
|
![Grouped pipelines](img/pipeline_grouped_jobs_v14_2.png)
|
||||||
|
|
||||||
|
|
|
@ -168,7 +168,7 @@ If EKS node autoscaling is employed, it is likely that your average loading will
|
||||||
| Gitaly Instances (in ASG) | 12 vCPU, 45GB<br />(across 3 nodes) | **m5.xlarge** x 3 nodes<br />(48 vCPU, 180 GB) | $0.192 x 3 = $0.58/hr | $0.192 x 3 = $0.58/hr |
|
| Gitaly Instances (in ASG) | 12 vCPU, 45GB<br />(across 3 nodes) | **m5.xlarge** x 3 nodes<br />(48 vCPU, 180 GB) | $0.192 x 3 = $0.58/hr | $0.192 x 3 = $0.58/hr |
|
||||||
| | The GitLab Reference architecture for 2K is not Highly Available and therefore has a single Gitaly no Praefect. AWS Quick Starts MUST be HA, so it implements Prafect from the 3K Ref Architecture to meet that requirement | | | |
|
| | The GitLab Reference architecture for 2K is not Highly Available and therefore has a single Gitaly no Praefect. AWS Quick Starts MUST be HA, so it implements Prafect from the 3K Ref Architecture to meet that requirement | | | |
|
||||||
| Praefect (Instances in ASG with load balancer) | 6 vCPU, 10 GB<br />([across 3 nodes](gitlab_sre_for_aws.md#gitaly-and-praefect-elections)) | **c5.large** x 3 nodes<br />(6 vCPU, 12 GB) | $0.09 x 3 = $0.21/hr | $0.09 x 3 = $0.21/hr |
|
| Praefect (Instances in ASG with load balancer) | 6 vCPU, 10 GB<br />([across 3 nodes](gitlab_sre_for_aws.md#gitaly-and-praefect-elections)) | **c5.large** x 3 nodes<br />(6 vCPU, 12 GB) | $0.09 x 3 = $0.21/hr | $0.09 x 3 = $0.21/hr |
|
||||||
| Praefect PostgreSQL(1) (AWS RDS) | 6 vCPU, 5.4 GB<br />([across 3 nodes](gitlab_sre_for_aws.md#gitaly-and-praefect-elections)) | N/A Reuses GitLab PostgreSQL | $0 | $0 |
|
| Praefect PostgreSQL(1) (AWS RDS) | 6 vCPU, 5.4 GB<br />([across 3 nodes](gitlab_sre_for_aws.md#gitaly-and-praefect-elections)) | Not applicable; reuses GitLab PostgreSQL | $0 | $0 |
|
||||||
| Internal Load Balancing Node | 2 vCPU, 1.8 GB | AWS ELB | $0.10/hr | $0.10/hr |
|
| Internal Load Balancing Node | 2 vCPU, 1.8 GB | AWS ELB | $0.10/hr | $0.10/hr |
|
||||||
|
|
||||||
### 3K Cloud Native Hybrid on EKS
|
### 3K Cloud Native Hybrid on EKS
|
||||||
|
@ -222,7 +222,7 @@ If EKS node autoscaling is employed, it is likely that your average loading will
|
||||||
| **<u>Gitaly Cluster</u>** [Details](gitlab_sre_for_aws.md#gitaly-sre-considerations) | | | | |
|
| **<u>Gitaly Cluster</u>** [Details](gitlab_sre_for_aws.md#gitaly-sre-considerations) | | | | |
|
||||||
| Gitaly Instances (in ASG) | 12 vCPU, 45GB<br />([across 3 nodes](gitlab_sre_for_aws.md#gitaly-and-praefect-elections)) | **m5.large** x 3 nodes<br />(12 vCPU, 48 GB) | $0.192 x 3 = $0.58/hr | [Gitaly & Praefect Must Have an Uneven Node Count for HA](gitlab_sre_for_aws.md#gitaly-and-praefect-elections) |
|
| Gitaly Instances (in ASG) | 12 vCPU, 45GB<br />([across 3 nodes](gitlab_sre_for_aws.md#gitaly-and-praefect-elections)) | **m5.large** x 3 nodes<br />(12 vCPU, 48 GB) | $0.192 x 3 = $0.58/hr | [Gitaly & Praefect Must Have an Uneven Node Count for HA](gitlab_sre_for_aws.md#gitaly-and-praefect-elections) |
|
||||||
| Praefect (Instances in ASG with load balancer) | 6 vCPU, 5.4 GB<br />([across 3 nodes](gitlab_sre_for_aws.md#gitaly-and-praefect-elections)) | **c5.large** x 3 nodes<br />(6 vCPU, 12 GB) | $0.09 x 3 = $0.21/hr | [Gitaly & Praefect Must Have an Uneven Node Count for HA](gitlab_sre_for_aws.md#gitaly-and-praefect-elections) |
|
| Praefect (Instances in ASG with load balancer) | 6 vCPU, 5.4 GB<br />([across 3 nodes](gitlab_sre_for_aws.md#gitaly-and-praefect-elections)) | **c5.large** x 3 nodes<br />(6 vCPU, 12 GB) | $0.09 x 3 = $0.21/hr | [Gitaly & Praefect Must Have an Uneven Node Count for HA](gitlab_sre_for_aws.md#gitaly-and-praefect-elections) |
|
||||||
| Praefect PostgreSQL(1) (Amazon RDS) | 6 vCPU, 5.4 GB<br />([across 3 nodes](gitlab_sre_for_aws.md#gitaly-and-praefect-elections)) | N/A Reuses GitLab PostgreSQL | $0 | |
|
| Praefect PostgreSQL(1) (Amazon RDS) | 6 vCPU, 5.4 GB<br />([across 3 nodes](gitlab_sre_for_aws.md#gitaly-and-praefect-elections)) | Not applicable; reuses GitLab PostgreSQL | $0 | |
|
||||||
| Internal Load Balancing Node | 2 vCPU, 1.8 GB | AWS ELB | $0.10/hr | $0.10/hr |
|
| Internal Load Balancing Node | 2 vCPU, 1.8 GB | AWS ELB | $0.10/hr | $0.10/hr |
|
||||||
|
|
||||||
### 5K Cloud Native Hybrid on EKS
|
### 5K Cloud Native Hybrid on EKS
|
||||||
|
@ -276,7 +276,7 @@ If EKS node autoscaling is employed, it is likely that your average loading will
|
||||||
| **<u>Gitaly Cluster</u>** [Details](gitlab_sre_for_aws.md#gitaly-sre-considerations) | | | | |
|
| **<u>Gitaly Cluster</u>** [Details](gitlab_sre_for_aws.md#gitaly-sre-considerations) | | | | |
|
||||||
| Gitaly Instances (in ASG) | 24 vCPU, 90GB<br />([across 3 nodes](gitlab_sre_for_aws.md#gitaly-and-praefect-elections)) | **m5.2xlarge** x 3 nodes<br />(24 vCPU, 96GB) | $0.384 x 3 = $1.15/hr | [Gitaly & Praefect Must Have an Uneven Node Count for HA](gitlab_sre_for_aws.md#gitaly-and-praefect-elections) |
|
| Gitaly Instances (in ASG) | 24 vCPU, 90GB<br />([across 3 nodes](gitlab_sre_for_aws.md#gitaly-and-praefect-elections)) | **m5.2xlarge** x 3 nodes<br />(24 vCPU, 96GB) | $0.384 x 3 = $1.15/hr | [Gitaly & Praefect Must Have an Uneven Node Count for HA](gitlab_sre_for_aws.md#gitaly-and-praefect-elections) |
|
||||||
| Praefect (Instances in ASG with load balancer) | 6 vCPU, 5.4 GB<br />([across 3 nodes](gitlab_sre_for_aws.md#gitaly-and-praefect-elections)) | **c5.large** x 3 nodes<br />(6 vCPU, 12 GB) | $0.09 x 3 = $0.21/hr | [Gitaly & Praefect Must Have an Uneven Node Count for HA](gitlab_sre_for_aws.md#gitaly-and-praefect-elections) |
|
| Praefect (Instances in ASG with load balancer) | 6 vCPU, 5.4 GB<br />([across 3 nodes](gitlab_sre_for_aws.md#gitaly-and-praefect-elections)) | **c5.large** x 3 nodes<br />(6 vCPU, 12 GB) | $0.09 x 3 = $0.21/hr | [Gitaly & Praefect Must Have an Uneven Node Count for HA](gitlab_sre_for_aws.md#gitaly-and-praefect-elections) |
|
||||||
| Praefect PostgreSQL(1) (Amazon RDS) | 6 vCPU, 5.4 GB<br />([across 3 nodes](gitlab_sre_for_aws.md#gitaly-and-praefect-elections)) | N/A Reuses GitLab PostgreSQL | $0 | |
|
| Praefect PostgreSQL(1) (Amazon RDS) | 6 vCPU, 5.4 GB<br />([across 3 nodes](gitlab_sre_for_aws.md#gitaly-and-praefect-elections)) | Not applicable; reuses GitLab PostgreSQL | $0 | |
|
||||||
| Internal Load Balancing Node | 2 vCPU, 1.8 GB | AWS ELB | $0.10/hr | $0.10/hr |
|
| Internal Load Balancing Node | 2 vCPU, 1.8 GB | AWS ELB | $0.10/hr | $0.10/hr |
|
||||||
|
|
||||||
### 10K Cloud Native Hybrid on EKS
|
### 10K Cloud Native Hybrid on EKS
|
||||||
|
@ -329,7 +329,7 @@ If EKS node autoscaling is employed, it is likely that your average loading will
|
||||||
| **<u>Gitaly Cluster</u>** [Details](gitlab_sre_for_aws.md#gitaly-sre-considerations) | | | | |
|
| **<u>Gitaly Cluster</u>** [Details](gitlab_sre_for_aws.md#gitaly-sre-considerations) | | | | |
|
||||||
| Gitaly Instances (in ASG) | 48 vCPU, 180GB<br />([across 3 nodes](gitlab_sre_for_aws.md#gitaly-and-praefect-elections)) | **m5.4xlarge** x 3 nodes<br />(48 vCPU, 180 GB) | $0.77 x 3 = $2.31/hr | [Gitaly & Praefect Must Have an Uneven Node Count for HA](gitlab_sre_for_aws.md#gitaly-and-praefect-elections) |
|
| Gitaly Instances (in ASG) | 48 vCPU, 180GB<br />([across 3 nodes](gitlab_sre_for_aws.md#gitaly-and-praefect-elections)) | **m5.4xlarge** x 3 nodes<br />(48 vCPU, 180 GB) | $0.77 x 3 = $2.31/hr | [Gitaly & Praefect Must Have an Uneven Node Count for HA](gitlab_sre_for_aws.md#gitaly-and-praefect-elections) |
|
||||||
| Praefect (Instances in ASG with load balancer) | 6 vCPU, 5.4 GB<br />([across 3 nodes](gitlab_sre_for_aws.md#gitaly-and-praefect-elections)) | **c5.large** x 3 nodes<br />(6 vCPU, 12 GB) | $0.09 x 3 = $0.21/hr | [Gitaly & Praefect Must Have an Uneven Node Count for HA](gitlab_sre_for_aws.md#gitaly-and-praefect-elections) |
|
| Praefect (Instances in ASG with load balancer) | 6 vCPU, 5.4 GB<br />([across 3 nodes](gitlab_sre_for_aws.md#gitaly-and-praefect-elections)) | **c5.large** x 3 nodes<br />(6 vCPU, 12 GB) | $0.09 x 3 = $0.21/hr | [Gitaly & Praefect Must Have an Uneven Node Count for HA](gitlab_sre_for_aws.md#gitaly-and-praefect-elections) |
|
||||||
| Praefect PostgreSQL(1) (Amazon RDS) | 6 vCPU, 5.4 GB<br />([across 3 nodes](gitlab_sre_for_aws.md#gitaly-and-praefect-elections)) | N/A Reuses GitLab PostgreSQL | $0 | |
|
| Praefect PostgreSQL(1) (Amazon RDS) | 6 vCPU, 5.4 GB<br />([across 3 nodes](gitlab_sre_for_aws.md#gitaly-and-praefect-elections)) | Not applicable; reuses GitLab PostgreSQL | $0 | |
|
||||||
| Internal Load Balancing Node | 2 vCPU, 1.8 GB | AWS ELB | $0.10/hr | $0.10/hr |
|
| Internal Load Balancing Node | 2 vCPU, 1.8 GB | AWS ELB | $0.10/hr | $0.10/hr |
|
||||||
|
|
||||||
### 50K Cloud Native Hybrid on EKS
|
### 50K Cloud Native Hybrid on EKS
|
||||||
|
@ -382,7 +382,7 @@ If EKS node autoscaling is employed, it is likely that your average loading will
|
||||||
| **<u>Gitaly Cluster</u>** [Details](gitlab_sre_for_aws.md#gitaly-sre-considerations) | | | | |
|
| **<u>Gitaly Cluster</u>** [Details](gitlab_sre_for_aws.md#gitaly-sre-considerations) | | | | |
|
||||||
| Gitaly Instances (in ASG) | 64 vCPU, 240GB x [3 nodes](gitlab_sre_for_aws.md#gitaly-and-praefect-elections) | **m5.16xlarge** x 3 nodes<br />(64 vCPU, 256 GB each) | $3.07 x 3 = $9.21/hr | [Gitaly & Praefect Must Have an Uneven Node Count for HA](gitlab_sre_for_aws.md#gitaly-and-praefect-elections) |
|
| Gitaly Instances (in ASG) | 64 vCPU, 240GB x [3 nodes](gitlab_sre_for_aws.md#gitaly-and-praefect-elections) | **m5.16xlarge** x 3 nodes<br />(64 vCPU, 256 GB each) | $3.07 x 3 = $9.21/hr | [Gitaly & Praefect Must Have an Uneven Node Count for HA](gitlab_sre_for_aws.md#gitaly-and-praefect-elections) |
|
||||||
| Praefect (Instances in ASG with load balancer) | 4 vCPU, 3.6 GB x [3 nodes](gitlab_sre_for_aws.md#gitaly-and-praefect-elections) | **c5.xlarge** x 3 nodes<br />(4 vCPU, 8 GB each) | $0.17 x 3 = $0.51/hr | [Gitaly & Praefect Must Have an Uneven Node Count for HA](gitlab_sre_for_aws.md#gitaly-and-praefect-elections) |
|
| Praefect (Instances in ASG with load balancer) | 4 vCPU, 3.6 GB x [3 nodes](gitlab_sre_for_aws.md#gitaly-and-praefect-elections) | **c5.xlarge** x 3 nodes<br />(4 vCPU, 8 GB each) | $0.17 x 3 = $0.51/hr | [Gitaly & Praefect Must Have an Uneven Node Count for HA](gitlab_sre_for_aws.md#gitaly-and-praefect-elections) |
|
||||||
| Praefect PostgreSQL(1) (AWS RDS) | 2 vCPU, 1.8 GB x [3 nodes](gitlab_sre_for_aws.md#gitaly-and-praefect-elections) | N/A Reuses GitLab PostgreSQL | $0 | |
|
| Praefect PostgreSQL(1) (AWS RDS) | 2 vCPU, 1.8 GB x [3 nodes](gitlab_sre_for_aws.md#gitaly-and-praefect-elections) | Not applicable; reuses GitLab PostgreSQL | $0 | |
|
||||||
| Internal Load Balancing Node | 2 vCPU, 1.8 GB | AWS ELB | $0.10/hr | $0.10/hr |
|
| Internal Load Balancing Node | 2 vCPU, 1.8 GB | AWS ELB | $0.10/hr | $0.10/hr |
|
||||||
|
|
||||||
## Helpful Resources
|
## Helpful Resources
|
||||||
|
|
|
@ -403,7 +403,7 @@ docker run \
|
||||||
> - Showing related feature flags in issues [introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/220333) in GitLab 14.1.
|
> - Showing related feature flags in issues [introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/220333) in GitLab 14.1.
|
||||||
|
|
||||||
You can link related issues to a feature flag. In the Feature Flag **Linked issues** section,
|
You can link related issues to a feature flag. In the Feature Flag **Linked issues** section,
|
||||||
click the `+` button and input the issue reference number or the full URL of the issue.
|
select the `+` button and input the issue reference number or the full URL of the issue.
|
||||||
The issues then appear in the related feature flag and the other way round.
|
The issues then appear in the related feature flag and the other way round.
|
||||||
|
|
||||||
This feature is similar to the [linked issues](../user/project/issues/related_issues.md) feature.
|
This feature is similar to the [linked issues](../user/project/issues/related_issues.md) feature.
|
||||||
|
|
|
@ -58,7 +58,7 @@ GitLab to create incident automatically whenever an alert is triggered:
|
||||||
with the Developer role, select
|
with the Developer role, select
|
||||||
**Send a separate email notification to Developers**. Email notifications are
|
**Send a separate email notification to Developers**. Email notifications are
|
||||||
also sent to users with the **Maintainer** and **Owner** roles.
|
also sent to users with the **Maintainer** and **Owner** roles.
|
||||||
1. Click **Save changes**.
|
1. Select **Save changes**.
|
||||||
|
|
||||||
### Create incidents via the PagerDuty webhook
|
### Create incidents via the PagerDuty webhook
|
||||||
|
|
||||||
|
@ -149,7 +149,7 @@ displays it in the Incident Details view:
|
||||||
|
|
||||||
For live examples of GitLab incidents, visit the `tanuki-inc` project's
|
For live examples of GitLab incidents, visit the `tanuki-inc` project's
|
||||||
[incident list page](https://gitlab.com/gitlab-examples/ops/incident-setup/everyone/tanuki-inc/-/incidents).
|
[incident list page](https://gitlab.com/gitlab-examples/ops/incident-setup/everyone/tanuki-inc/-/incidents).
|
||||||
Click any incident in the list to display its incident details page.
|
Select any incident in the list to display its incident details page.
|
||||||
|
|
||||||
### Summary
|
### Summary
|
||||||
|
|
||||||
|
@ -199,7 +199,7 @@ field populated.
|
||||||
|
|
||||||
> [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/227836) in GitLab 13.5.
|
> [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/227836) in GitLab 13.5.
|
||||||
|
|
||||||
To quickly see the latest updates on an incident, click
|
To quickly see the latest updates on an incident, select
|
||||||
**{history}** **Turn recent updates view on** in the comment bar to display comments
|
**{history}** **Turn recent updates view on** in the comment bar to display comments
|
||||||
un-threaded and ordered chronologically, newest to oldest:
|
un-threaded and ordered chronologically, newest to oldest:
|
||||||
|
|
||||||
|
@ -217,11 +217,11 @@ every 15 minutes so you do not have to refresh the page to see the time remainin
|
||||||
To configure the timer:
|
To configure the timer:
|
||||||
|
|
||||||
1. Navigate to **Settings > Monitor**.
|
1. Navigate to **Settings > Monitor**.
|
||||||
1. Scroll to **Incidents** and click **Expand**, then select the
|
1. Scroll to **Incidents** and select **Expand**, then select the
|
||||||
**Incident settings** tab.
|
**Incident settings** tab.
|
||||||
1. Select **Activate "time to SLA" countdown timer**.
|
1. Select **Activate "time to SLA" countdown timer**.
|
||||||
1. Set a time limit in increments of 15 minutes.
|
1. Set a time limit in increments of 15 minutes.
|
||||||
1. Click **Save changes**.
|
1. Select **Save changes**.
|
||||||
|
|
||||||
After you enable the SLA countdown timer, the **Time to SLA** attribute is displayed
|
After you enable the SLA countdown timer, the **Time to SLA** attribute is displayed
|
||||||
as a column in the Incidents List, and as a field on newly created Incidents. If
|
as a column in the Incidents List, and as a field on newly created Incidents. If
|
||||||
|
@ -250,8 +250,8 @@ You can also change the severity using the [`/severity` quick action](../../user
|
||||||
|
|
||||||
### Add a to-do item
|
### Add a to-do item
|
||||||
|
|
||||||
Add a to-do for incidents that you want to track in your to-do list. Click the
|
Add a to-do for incidents that you want to track in your to-do list. Select
|
||||||
**Add a to do** button at the top of the right-hand side bar to add a to-do item.
|
**Add a to do** at the top of the right-hand side bar to add a to-do item.
|
||||||
|
|
||||||
### Change incident status
|
### Change incident status
|
||||||
|
|
||||||
|
@ -336,7 +336,7 @@ With at least the Maintainer role, you can enable
|
||||||
|
|
||||||
1. Navigate to **Settings > Monitor > Incidents** and expand **Incidents**.
|
1. Navigate to **Settings > Monitor > Incidents** and expand **Incidents**.
|
||||||
1. Check the **Automatically close associated Incident** checkbox.
|
1. Check the **Automatically close associated Incident** checkbox.
|
||||||
1. Click **Save changes**.
|
1. Select **Save changes**.
|
||||||
|
|
||||||
When GitLab receives a **Recovery Alert**, it closes the associated incident.
|
When GitLab receives a **Recovery Alert**, it closes the associated incident.
|
||||||
This action is recorded as a system message on the incident indicating that it
|
This action is recorded as a system message on the incident indicating that it
|
||||||
|
|
|
@ -56,19 +56,19 @@ and you can [customize the payload](#customize-the-alert-payload-outside-of-gitl
|
||||||
1. Expand the **Alerts** section.
|
1. Expand the **Alerts** section.
|
||||||
1. For each endpoint you want to create:
|
1. For each endpoint you want to create:
|
||||||
|
|
||||||
1. Click the **Add new integration** button.
|
1. Select **Add new integration**.
|
||||||
1. In the **Select integration type** dropdown menu, select **HTTP Endpoint**.
|
1. In the **Select integration type** dropdown menu, select **HTTP Endpoint**.
|
||||||
1. Name the integration.
|
1. Name the integration.
|
||||||
1. Toggle the **Active** alert setting. The **URL** and **Authorization Key** for the webhook
|
1. Toggle the **Active** alert setting. The **URL** and **Authorization Key** for the webhook
|
||||||
configuration are available in the **View credentials** tab after you save the integration.
|
configuration are available in the **View credentials** tab after you save the integration.
|
||||||
You must also input the URL and Authorization Key in your external service.
|
You must also input the URL and Authorization Key in your external service.
|
||||||
1. Optional. To map fields from your monitoring tool's alert to GitLab fields, enter a sample
|
1. Optional. To map fields from your monitoring tool's alert to GitLab fields, enter a sample
|
||||||
payload and click **Parse payload for custom mapping**. Valid JSON is required. If you update
|
payload and select **Parse payload for custom mapping**. Valid JSON is required. If you update
|
||||||
a sample payload, you must also remap the fields.
|
a sample payload, you must also remap the fields.
|
||||||
|
|
||||||
1. Optional. If you provided a valid sample payload, select each value in
|
1. Optional. If you provided a valid sample payload, select each value in
|
||||||
**Payload alert key** to [map to a **GitLab alert key**](#map-fields-in-custom-alerts).
|
**Payload alert key** to [map to a **GitLab alert key**](#map-fields-in-custom-alerts).
|
||||||
1. To save your integration, click **Save Integration**. If desired, you can send a test alert
|
1. To save your integration, select **Save Integration**. If desired, you can send a test alert
|
||||||
from your integration's **Send test alert** tab after the integration is created.
|
from your integration's **Send test alert** tab after the integration is created.
|
||||||
|
|
||||||
The new HTTP Endpoint displays in the [integrations list](#integrations-list).
|
The new HTTP Endpoint displays in the [integrations list](#integrations-list).
|
||||||
|
@ -218,11 +218,11 @@ alert to confirm your integration works properly.
|
||||||
|
|
||||||
1. Sign in as a user with at least the Developer role.
|
1. Sign in as a user with at least the Developer role.
|
||||||
1. Navigate to **Settings > Monitor** in your project.
|
1. Navigate to **Settings > Monitor** in your project.
|
||||||
1. Click **Alerts** to expand the section.
|
1. Select **Alerts** to expand the section.
|
||||||
1. Click the **{settings}** settings icon on the right side of the integration in [the list](#integrations-list).
|
1. Select the **{settings}** settings icon on the right side of the integration in [the list](#integrations-list).
|
||||||
1. Select the **Send test alert** tab to open it.
|
1. Select the **Send test alert** tab to open it.
|
||||||
1. Enter a test payload in the payload field (valid JSON is required).
|
1. Enter a test payload in the payload field (valid JSON is required).
|
||||||
1. Click **Send**.
|
1. Select **Send**.
|
||||||
|
|
||||||
GitLab displays an error or success message, depending on the outcome of your test.
|
GitLab displays an error or success message, depending on the outcome of your test.
|
||||||
|
|
||||||
|
|
|
@ -33,10 +33,10 @@ To create a new dashboard from the GitLab user interface:
|
||||||
1. Sign in to GitLab as a user with Maintainer or Owner
|
1. Sign in to GitLab as a user with Maintainer or Owner
|
||||||
[permissions](../../../user/permissions.md#project-members-permissions).
|
[permissions](../../../user/permissions.md#project-members-permissions).
|
||||||
1. Navigate to your dashboard at **Monitor > Metrics**.
|
1. Navigate to your dashboard at **Monitor > Metrics**.
|
||||||
1. In the top-right corner of your dashboard, click the **{ellipsis_v}** **More actions** menu,
|
1. In the top-right corner of your dashboard, select the **{ellipsis_v}** **More actions** menu,
|
||||||
and select **Create new**:
|
and select **Create new**:
|
||||||
![Monitoring Dashboard actions menu with create new item](img/actions_menu_create_new_dashboard_v13_3.png)
|
![Monitoring Dashboard actions menu with create new item](img/actions_menu_create_new_dashboard_v13_3.png)
|
||||||
1. In the modal window, click **Open Repository**, then follow the instructions
|
1. In the modal window, select **Open Repository**, then follow the instructions
|
||||||
for creating a new dashboard from the command line.
|
for creating a new dashboard from the command line.
|
||||||
|
|
||||||
To create a new dashboard from the command line:
|
To create a new dashboard from the command line:
|
||||||
|
@ -84,7 +84,7 @@ with the **Add Panel** page:
|
||||||
|
|
||||||
1. Sign in to GitLab as a user with Maintainer or Owner
|
1. Sign in to GitLab as a user with Maintainer or Owner
|
||||||
[permissions](../../../user/permissions.md#project-members-permissions).
|
[permissions](../../../user/permissions.md#project-members-permissions).
|
||||||
1. Click **Add panel** in the **{ellipsis_v}** **More actions** menu.
|
1. Select **Add panel** in the **{ellipsis_v}** **More actions** menu.
|
||||||
|
|
||||||
NOTE:
|
NOTE:
|
||||||
You can only add panels to custom dashboards.
|
You can only add panels to custom dashboards.
|
||||||
|
@ -92,7 +92,7 @@ with the **Add Panel** page:
|
||||||
![Monitoring Dashboard actions menu with add panel item](img/actions_menu_create_add_panel_v13_3.png)
|
![Monitoring Dashboard actions menu with add panel item](img/actions_menu_create_add_panel_v13_3.png)
|
||||||
1. In the **Define and preview panel** section, paste in the YAML you want to
|
1. In the **Define and preview panel** section, paste in the YAML you want to
|
||||||
preview in the **Panel YAML** field.
|
preview in the **Panel YAML** field.
|
||||||
1. Click **Preview panel**, and GitLab displays a preview of the chart below the
|
1. Select **Preview panel**, and GitLab displays a preview of the chart below the
|
||||||
`Define and preview panel` section:
|
`Define and preview panel` section:
|
||||||
![Monitoring Dashboard Add Panel page](img/metrics_dashboard_panel_preview_v13_3.png)
|
![Monitoring Dashboard Add Panel page](img/metrics_dashboard_panel_preview_v13_3.png)
|
||||||
|
|
||||||
|
@ -106,8 +106,8 @@ The resulting `.yml` file can be customized and adapted to your project.
|
||||||
You can decide to save the dashboard `.yml` file in the project's **default** branch or in a
|
You can decide to save the dashboard `.yml` file in the project's **default** branch or in a
|
||||||
new branch. To duplicate a GitLab-defined dashboard:
|
new branch. To duplicate a GitLab-defined dashboard:
|
||||||
|
|
||||||
1. Click **Duplicate current dashboard** in the **{ellipsis_v}** **More actions** menu.
|
1. Select **Duplicate current dashboard** in the **{ellipsis_v}** **More actions** menu.
|
||||||
1. Enter the filename and other information, such as the new commit's message, and click **Duplicate**.
|
1. Enter the filename and other information, such as the new commit's message, and select **Duplicate**.
|
||||||
1. Select a branch to add your dashboard to:
|
1. Select a branch to add your dashboard to:
|
||||||
- *If you select your **default** branch,* the new dashboard becomes immediately available.
|
- *If you select your **default** branch,* the new dashboard becomes immediately available.
|
||||||
- *If you select another branch,* this branch should be merged to your **default** branch first.
|
- *If you select another branch,* this branch should be merged to your **default** branch first.
|
||||||
|
@ -133,7 +133,7 @@ any chart on a dashboard:
|
||||||
The options are:
|
The options are:
|
||||||
|
|
||||||
- **Expand panel** - Displays a larger version of a visualization. To return to
|
- **Expand panel** - Displays a larger version of a visualization. To return to
|
||||||
the dashboard, click the **Back** button in your browser, or press the <kbd>Escape</kbd> key.
|
the dashboard, select the **Back** button in your browser, or press the <kbd>Escape</kbd> key.
|
||||||
([Introduced](https://gitlab.com/groups/gitlab-org/-/epics/3100) in GitLab 13.0.)
|
([Introduced](https://gitlab.com/groups/gitlab-org/-/epics/3100) in GitLab 13.0.)
|
||||||
- **View logs** **(ULTIMATE)** - Displays [Logs](../../../user/project/clusters/kubernetes_pod_logs.md),
|
- **View logs** **(ULTIMATE)** - Displays [Logs](../../../user/project/clusters/kubernetes_pod_logs.md),
|
||||||
if they are enabled. If used in conjunction with the [timeline zoom](#timeline-zoom-and-url-sharing)
|
if they are enabled. If used in conjunction with the [timeline zoom](#timeline-zoom-and-url-sharing)
|
||||||
|
@ -146,7 +146,7 @@ The options are:
|
||||||
> [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/198910) in GitLab 12.8.
|
> [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/198910) in GitLab 12.8.
|
||||||
|
|
||||||
You can use the **Timeline zoom** function at the bottom of a chart to zoom in
|
You can use the **Timeline zoom** function at the bottom of a chart to zoom in
|
||||||
on a date and time of your choice. When you click and drag the sliders to select
|
on a date and time of your choice. When you select and drag the sliders to select
|
||||||
a different beginning or end date of data to display, GitLab adds your selected start
|
a different beginning or end date of data to display, GitLab adds your selected start
|
||||||
and end times to the URL, enabling you to share specific time frames more easily.
|
and end times to the URL, enabling you to share specific time frames more easily.
|
||||||
|
|
||||||
|
|
|
@ -46,6 +46,6 @@ GitLab provides an easy way to open the Jaeger UI from within your project:
|
||||||
1. [Set up Jaeger](https://www.jaegertracing.io) and configure your application using one of the
|
1. [Set up Jaeger](https://www.jaegertracing.io) and configure your application using one of the
|
||||||
[client libraries](https://www.jaegertracing.io/docs/latest/client-libraries/).
|
[client libraries](https://www.jaegertracing.io/docs/latest/client-libraries/).
|
||||||
1. Navigate to your project's **Settings > Monitor** and provide the Jaeger URL.
|
1. Navigate to your project's **Settings > Monitor** and provide the Jaeger URL.
|
||||||
1. Click **Save changes** for the changes to take effect.
|
1. Select **Save changes** for the changes to take effect.
|
||||||
1. You can now visit **Monitor > Tracing** in your project's sidebar and GitLab redirects you to
|
1. You can now visit **Monitor > Tracing** in your project's sidebar and GitLab redirects you to
|
||||||
the configured Jaeger URL.
|
the configured Jaeger URL.
|
||||||
|
|
|
@ -151,7 +151,7 @@ export it as a HAR file.
|
||||||
1. Select **Preserve log**.
|
1. Select **Preserve log**.
|
||||||
1. Browse pages that call the API.
|
1. Browse pages that call the API.
|
||||||
1. Select one or more requests.
|
1. Select one or more requests.
|
||||||
1. Right click and select **Save all as HAR with content**.
|
1. Right-click and select **Save all as HAR with content**.
|
||||||
1. Enter a filename and select **Save**.
|
1. Enter a filename and select **Save**.
|
||||||
1. To append additional requests, select and save them to the same file.
|
1. To append additional requests, select and save them to the same file.
|
||||||
|
|
||||||
|
@ -170,7 +170,7 @@ and export it as a HAR file.
|
||||||
`Perform a request or Reload the page to see detailed information about network activity`,
|
`Perform a request or Reload the page to see detailed information about network activity`,
|
||||||
select **Reload** to start recording requests.
|
select **Reload** to start recording requests.
|
||||||
1. Select one or more requests.
|
1. Select one or more requests.
|
||||||
1. Right click and select **Save All As HAR**.
|
1. Right-click and select **Save All As HAR**.
|
||||||
1. Enter a filename and select **Save**.
|
1. Enter a filename and select **Save**.
|
||||||
1. To append additional requests, select and save them to the same file.
|
1. To append additional requests, select and save them to the same file.
|
||||||
|
|
||||||
|
|
|
@ -154,7 +154,7 @@ table.supported-languages ul {
|
||||||
<tbody>
|
<tbody>
|
||||||
<tr>
|
<tr>
|
||||||
<td>Ruby</td>
|
<td>Ruby</td>
|
||||||
<td>N/A</td>
|
<td>Not applicable</td>
|
||||||
<td><a href="https://bundler.io/">Bundler</a></td>
|
<td><a href="https://bundler.io/">Bundler</a></td>
|
||||||
<td>
|
<td>
|
||||||
<ul>
|
<ul>
|
||||||
|
@ -167,7 +167,7 @@ table.supported-languages ul {
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td>PHP</td>
|
<td>PHP</td>
|
||||||
<td>N/A</td>
|
<td>Not applicable</td>
|
||||||
<td><a href="https://getcomposer.org/">Composer</a></td>
|
<td><a href="https://getcomposer.org/">Composer</a></td>
|
||||||
<td><code>composer.lock</code></td>
|
<td><code>composer.lock</code></td>
|
||||||
<td><a href="https://gitlab.com/gitlab-org/security-products/analyzers/gemnasium">Gemnasium</a></td>
|
<td><a href="https://gitlab.com/gitlab-org/security-products/analyzers/gemnasium">Gemnasium</a></td>
|
||||||
|
@ -175,7 +175,7 @@ table.supported-languages ul {
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td>C</td>
|
<td>C</td>
|
||||||
<td rowspan="2">N/A</td>
|
<td rowspan="2">Not applicable</td>
|
||||||
<td rowspan="2"><a href="https://conan.io/">Conan</a></td>
|
<td rowspan="2"><a href="https://conan.io/">Conan</a></td>
|
||||||
<td rowspan="2"><a href="https://docs.conan.io/en/latest/versioning/lockfiles.html"><code>conan.lock</code></a></td>
|
<td rowspan="2"><a href="https://docs.conan.io/en/latest/versioning/lockfiles.html"><code>conan.lock</code></a></td>
|
||||||
<td rowspan="2"><a href="https://gitlab.com/gitlab-org/security-products/analyzers/gemnasium">Gemnasium</a></td>
|
<td rowspan="2"><a href="https://gitlab.com/gitlab-org/security-products/analyzers/gemnasium">Gemnasium</a></td>
|
||||||
|
@ -186,7 +186,7 @@ table.supported-languages ul {
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td>Go</td>
|
<td>Go</td>
|
||||||
<td>N/A</td>
|
<td>Not applicable</td>
|
||||||
<td><a href="https://go.dev/">Go</a></td>
|
<td><a href="https://go.dev/">Go</a></td>
|
||||||
<td><code>go.sum</code></td>
|
<td><code>go.sum</code></td>
|
||||||
<td><a href="https://gitlab.com/gitlab-org/security-products/analyzers/gemnasium">Gemnasium</a></td>
|
<td><a href="https://gitlab.com/gitlab-org/security-products/analyzers/gemnasium">Gemnasium</a></td>
|
||||||
|
@ -213,7 +213,7 @@ table.supported-languages ul {
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td rowspan="2">JavaScript</td>
|
<td rowspan="2">JavaScript</td>
|
||||||
<td>N/A</td>
|
<td>Not applicable</td>
|
||||||
<td><a href="https://www.npmjs.com/">npm</a></td>
|
<td><a href="https://www.npmjs.com/">npm</a></td>
|
||||||
<td>
|
<td>
|
||||||
<ul>
|
<ul>
|
||||||
|
@ -225,7 +225,7 @@ table.supported-languages ul {
|
||||||
<td>Y</td>
|
<td>Y</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td>N/A</td>
|
<td>Not applicable</td>
|
||||||
<td><a href="https://classic.yarnpkg.com/en/">yarn</a></td>
|
<td><a href="https://classic.yarnpkg.com/en/">yarn</a></td>
|
||||||
<td><code>yarn.lock</code></td>
|
<td><code>yarn.lock</code></td>
|
||||||
<td><a href="https://gitlab.com/gitlab-org/security-products/analyzers/gemnasium">Gemnasium</a></td>
|
<td><a href="https://gitlab.com/gitlab-org/security-products/analyzers/gemnasium">Gemnasium</a></td>
|
||||||
|
@ -233,7 +233,7 @@ table.supported-languages ul {
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td>.NET</td>
|
<td>.NET</td>
|
||||||
<td rowspan="2">N/A</td>
|
<td rowspan="2">Not applicable</td>
|
||||||
<td rowspan="2"><a href="https://www.nuget.org/">NuGet</a></td>
|
<td rowspan="2"><a href="https://www.nuget.org/">NuGet</a></td>
|
||||||
<td rowspan="2"><a href="https://docs.microsoft.com/en-us/nuget/consume-packages/package-references-in-project-files#enabling-lock-file"><code>packages.lock.json</code></a></td>
|
<td rowspan="2"><a href="https://docs.microsoft.com/en-us/nuget/consume-packages/package-references-in-project-files#enabling-lock-file"><code>packages.lock.json</code></a></td>
|
||||||
<td rowspan="2"><a href="https://gitlab.com/gitlab-org/security-products/analyzers/gemnasium">Gemnasium</a></td>
|
<td rowspan="2"><a href="https://gitlab.com/gitlab-org/security-products/analyzers/gemnasium">Gemnasium</a></td>
|
||||||
|
@ -281,7 +281,7 @@ table.supported-languages ul {
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td>Scala</td>
|
<td>Scala</td>
|
||||||
<td>N/A</td>
|
<td>Not applicable</td>
|
||||||
<td><a href="https://www.scala-sbt.org/">sbt</a><sup><b><a href="#notes-regarding-supported-languages-and-package-managers-3">3</a></b></sup></td>
|
<td><a href="https://www.scala-sbt.org/">sbt</a><sup><b><a href="#notes-regarding-supported-languages-and-package-managers-3">3</a></b></sup></td>
|
||||||
<td><code>build.sbt</code></td>
|
<td><code>build.sbt</code></td>
|
||||||
<td><a href="https://gitlab.com/gitlab-org/security-products/analyzers/gemnasium">Gemnasium</a></td>
|
<td><a href="https://gitlab.com/gitlab-org/security-products/analyzers/gemnasium">Gemnasium</a></td>
|
||||||
|
@ -342,10 +342,10 @@ The following package managers use lockfiles that GitLab analyzers are capable o
|
||||||
|
|
||||||
| Package Manager | Supported File Format Versions | Tested Versions |
|
| Package Manager | Supported File Format Versions | Tested Versions |
|
||||||
| ------ | ------ | ------ |
|
| ------ | ------ | ------ |
|
||||||
| Bundler | N/A | [1.17.3](https://gitlab.com/gitlab-org/security-products/analyzers/gemnasium/-/blob/master/qa/fixtures/ruby-bundler/default/Gemfile.lock#L118), [2.1.4](https://gitlab.com/gitlab-org/security-products/tests/ruby-bundler/-/blob/bundler2-FREEZE/Gemfile.lock#L118) |
|
| Bundler | Not applicable | [1.17.3](https://gitlab.com/gitlab-org/security-products/analyzers/gemnasium/-/blob/master/qa/fixtures/ruby-bundler/default/Gemfile.lock#L118), [2.1.4](https://gitlab.com/gitlab-org/security-products/tests/ruby-bundler/-/blob/bundler2-FREEZE/Gemfile.lock#L118) |
|
||||||
| Composer | N/A | [1.x](https://gitlab.com/gitlab-org/security-products/analyzers/gemnasium/-/blob/master/qa/fixtures/php-composer/default/composer.lock) |
|
| Composer | Not applicable | [1.x](https://gitlab.com/gitlab-org/security-products/analyzers/gemnasium/-/blob/master/qa/fixtures/php-composer/default/composer.lock) |
|
||||||
| Conan | 0.4 | [1.x](https://gitlab.com/gitlab-org/security-products/analyzers/gemnasium/-/blob/master/qa/fixtures/c-conan/default/conan.lock) |
|
| Conan | 0.4 | [1.x](https://gitlab.com/gitlab-org/security-products/analyzers/gemnasium/-/blob/master/qa/fixtures/c-conan/default/conan.lock) |
|
||||||
| Go | N/A | [1.x](https://gitlab.com/gitlab-org/security-products/analyzers/gemnasium/-/blob/master/qa/fixtures/go-modules/default/go.sum) |
|
| Go | Not applicable | [1.x](https://gitlab.com/gitlab-org/security-products/analyzers/gemnasium/-/blob/master/qa/fixtures/go-modules/default/go.sum) |
|
||||||
| NuGet | v1 | [4.9](https://gitlab.com/gitlab-org/security-products/analyzers/gemnasium/-/blob/master/qa/fixtures/csharp-nuget-dotnetcore/default/src/web.api/packages.lock.json#L2) |
|
| NuGet | v1 | [4.9](https://gitlab.com/gitlab-org/security-products/analyzers/gemnasium/-/blob/master/qa/fixtures/csharp-nuget-dotnetcore/default/src/web.api/packages.lock.json#L2) |
|
||||||
| npm | v1, v2 | [6.x](https://gitlab.com/gitlab-org/security-products/analyzers/gemnasium/-/blob/master/qa/fixtures/js-npm/default/package-lock.json#L4), [7.x](https://gitlab.com/gitlab-org/security-products/analyzers/gemnasium/-/blob/master/qa/fixtures/js-npm/lockfileVersion2/package-lock.json#L4) |
|
| npm | v1, v2 | [6.x](https://gitlab.com/gitlab-org/security-products/analyzers/gemnasium/-/blob/master/qa/fixtures/js-npm/default/package-lock.json#L4), [7.x](https://gitlab.com/gitlab-org/security-products/analyzers/gemnasium/-/blob/master/qa/fixtures/js-npm/lockfileVersion2/package-lock.json#L4) |
|
||||||
| yarn | v1 | [1.x](https://gitlab.com/gitlab-org/security-products/analyzers/gemnasium/-/blob/master/qa/fixtures/js-yarn/default/yarn.lock#L2) |
|
| yarn | v1 | [1.x](https://gitlab.com/gitlab-org/security-products/analyzers/gemnasium/-/blob/master/qa/fixtures/js-yarn/default/yarn.lock#L2) |
|
||||||
|
|
|
@ -39,17 +39,17 @@ the following tables:
|
||||||
|----------------------------------------------------------------------------------------------------------|--------------------------|----------------------------|------------------------------------|
|
|----------------------------------------------------------------------------------------------------------|--------------------------|----------------------------|------------------------------------|
|
||||||
| [`security-code-scan`](https://gitlab.com/gitlab-org/security-products/analyzers/security-code-scan) | **{check-circle}** Yes | String | `CRITICAL`, `HIGH`, `MEDIUM` in [analyzer version 3.2.0 and later](https://gitlab.com/gitlab-org/security-products/analyzers/security-code-scan/-/blob/master/CHANGELOG.md#v320). In earlier versions, hardcoded to `Unknown`. |
|
| [`security-code-scan`](https://gitlab.com/gitlab-org/security-products/analyzers/security-code-scan) | **{check-circle}** Yes | String | `CRITICAL`, `HIGH`, `MEDIUM` in [analyzer version 3.2.0 and later](https://gitlab.com/gitlab-org/security-products/analyzers/security-code-scan/-/blob/master/CHANGELOG.md#v320). In earlier versions, hardcoded to `Unknown`. |
|
||||||
| [`brakeman`](https://gitlab.com/gitlab-org/security-products/analyzers/brakeman) | **{check-circle}** Yes | String | `HIGH`, `MEDIUM`, `LOW` |
|
| [`brakeman`](https://gitlab.com/gitlab-org/security-products/analyzers/brakeman) | **{check-circle}** Yes | String | `HIGH`, `MEDIUM`, `LOW` |
|
||||||
| [`sobelow`](https://gitlab.com/gitlab-org/security-products/analyzers/sobelow) | **{check-circle}** Yes | N/A | Hardcodes all severity levels to `Unknown` |
|
| [`sobelow`](https://gitlab.com/gitlab-org/security-products/analyzers/sobelow) | **{check-circle}** Yes | Not applicable | Hardcodes all severity levels to `Unknown` |
|
||||||
| [`nodejs-scan`](https://gitlab.com/gitlab-org/security-products/analyzers/nodejs-scan) | **{check-circle}** Yes | String | `INFO`, `WARNING`, `ERROR` |
|
| [`nodejs-scan`](https://gitlab.com/gitlab-org/security-products/analyzers/nodejs-scan) | **{check-circle}** Yes | String | `INFO`, `WARNING`, `ERROR` |
|
||||||
| [`flawfinder`](https://gitlab.com/gitlab-org/security-products/analyzers/flawfinder) | **{check-circle}** Yes | Integer | `0`, `1`, `2`, `3`, `4`, `5` |
|
| [`flawfinder`](https://gitlab.com/gitlab-org/security-products/analyzers/flawfinder) | **{check-circle}** Yes | Integer | `0`, `1`, `2`, `3`, `4`, `5` |
|
||||||
| [`eslint`](https://gitlab.com/gitlab-org/security-products/analyzers/eslint) | **{check-circle}** Yes | N/A | Hardcodes all severity levels to `Unknown` |
|
| [`eslint`](https://gitlab.com/gitlab-org/security-products/analyzers/eslint) | **{check-circle}** Yes | Not applicable | Hardcodes all severity levels to `Unknown` |
|
||||||
| [`SpotBugs`](https://gitlab.com/gitlab-org/security-products/analyzers/spotbugs) | **{check-circle}** Yes | Integer | `1`, `2`, `3`, `11`, `12`, `18` |
|
| [`SpotBugs`](https://gitlab.com/gitlab-org/security-products/analyzers/spotbugs) | **{check-circle}** Yes | Integer | `1`, `2`, `3`, `11`, `12`, `18` |
|
||||||
| [`gosec`](https://gitlab.com/gitlab-org/security-products/analyzers/gosec) | **{check-circle}** Yes | String | `HIGH`, `MEDIUM`, `LOW` |
|
| [`gosec`](https://gitlab.com/gitlab-org/security-products/analyzers/gosec) | **{check-circle}** Yes | String | `HIGH`, `MEDIUM`, `LOW` |
|
||||||
| [`bandit`](https://gitlab.com/gitlab-org/security-products/analyzers/bandit) | **{check-circle}** Yes | String | `HIGH`, `MEDIUM`, `LOW` |
|
| [`bandit`](https://gitlab.com/gitlab-org/security-products/analyzers/bandit) | **{check-circle}** Yes | String | `HIGH`, `MEDIUM`, `LOW` |
|
||||||
| [`phpcs-security-audit`](https://gitlab.com/gitlab-org/security-products/analyzers/phpcs-security-audit) | **{check-circle}** Yes | String | `ERROR`, `WARNING` |
|
| [`phpcs-security-audit`](https://gitlab.com/gitlab-org/security-products/analyzers/phpcs-security-audit) | **{check-circle}** Yes | String | `ERROR`, `WARNING` |
|
||||||
| [`pmd-apex`](https://gitlab.com/gitlab-org/security-products/analyzers/pmd-apex) | **{check-circle}** Yes | Integer | `1`, `2`, `3`, `4`, `5` |
|
| [`pmd-apex`](https://gitlab.com/gitlab-org/security-products/analyzers/pmd-apex) | **{check-circle}** Yes | Integer | `1`, `2`, `3`, `4`, `5` |
|
||||||
| [`kubesec`](https://gitlab.com/gitlab-org/security-products/analyzers/kubesec) | **{check-circle}** Yes | String | `CriticalSeverity`, `InfoSeverity` |
|
| [`kubesec`](https://gitlab.com/gitlab-org/security-products/analyzers/kubesec) | **{check-circle}** Yes | String | `CriticalSeverity`, `InfoSeverity` |
|
||||||
| [`secrets`](https://gitlab.com/gitlab-org/security-products/analyzers/secrets) | **{check-circle}** Yes | N/A | Hardcodes all severity levels to `Critical` |
|
| [`secrets`](https://gitlab.com/gitlab-org/security-products/analyzers/secrets) | **{check-circle}** Yes | Not applicable | Hardcodes all severity levels to `Critical` |
|
||||||
| [`semgrep`](https://gitlab.com/gitlab-org/security-products/analyzers/semgrep) | **{check-circle}** Yes | String | `error`, `warning`, `note`, `none` |
|
| [`semgrep`](https://gitlab.com/gitlab-org/security-products/analyzers/semgrep) | **{check-circle}** Yes | String | `error`, `warning`, `note`, `none` |
|
||||||
|
|
||||||
## Dependency Scanning
|
## Dependency Scanning
|
||||||
|
|
|
@ -11,3 +11,4 @@ You connect the clusters to GitLab by using the agent for Kubernetes.
|
||||||
|
|
||||||
- [Create a cluster on Google GKE](../../infrastructure/clusters/connect/new_gke_cluster.md)
|
- [Create a cluster on Google GKE](../../infrastructure/clusters/connect/new_gke_cluster.md)
|
||||||
- [Create a cluster on Amazon EKS](../../infrastructure/clusters/connect/new_eks_cluster.md)
|
- [Create a cluster on Amazon EKS](../../infrastructure/clusters/connect/new_eks_cluster.md)
|
||||||
|
- [Create a cluster on Civo](../../infrastructure/clusters/connect/new_civo_cluster.md)
|
||||||
|
|
|
@ -578,7 +578,7 @@ To generate a SAML Response:
|
||||||
- [SAML-tracer](https://addons.mozilla.org/en-US/firefox/addon/saml-tracer/) for Firefox.
|
- [SAML-tracer](https://addons.mozilla.org/en-US/firefox/addon/saml-tracer/) for Firefox.
|
||||||
1. Open a new browser tab.
|
1. Open a new browser tab.
|
||||||
1. Open the SAML tracer console:
|
1. Open the SAML tracer console:
|
||||||
- Chrome: Right click on the page, select **Inspect**, then select the SAML tab in the opened developer console.
|
- Chrome: Right-click on the page, select **Inspect**, then select the **SAML** tab in the opened developer console.
|
||||||
- Firefox: Select the SAML-tracer icon located on the browser toolbar.
|
- Firefox: Select the SAML-tracer icon located on the browser toolbar.
|
||||||
1. Go to the GitLab single sign-on URL for the group in the same browser tab with the SAML tracer open.
|
1. Go to the GitLab single sign-on URL for the group in the same browser tab with the SAML tracer open.
|
||||||
1. Select **Authorize** or attempt to log in. A SAML response is displayed in the tracer console that resembles this
|
1. Select **Authorize** or attempt to log in. A SAML response is displayed in the tracer console that resembles this
|
||||||
|
|
|
@ -380,8 +380,8 @@ the [Asciidoctor user manual](https://asciidoctor.org/docs/user-manual/#activati
|
||||||
|
|
||||||
You can add task lists anywhere Markdown is supported.
|
You can add task lists anywhere Markdown is supported.
|
||||||
|
|
||||||
- In issues, merge requests, and comments, you can click to select the boxes.
|
- In issues, merge requests, and comments, you can select the boxes.
|
||||||
- In all other places, you cannot click to select the boxes. You must edit the Markdown manually
|
- In all other places, you cannot select the boxes. You must edit the Markdown manually
|
||||||
by adding or removing an `x` in the brackets.
|
by adding or removing an `x` in the brackets.
|
||||||
|
|
||||||
To create a task list, follow the format of an ordered or unordered list:
|
To create a task list, follow the format of an ordered or unordered list:
|
||||||
|
|
|
@ -210,7 +210,7 @@ the components outlined above and the pre-loaded demo runbook.
|
||||||
|
|
||||||
1. Select **Save variables**.
|
1. Select **Save variables**.
|
||||||
|
|
||||||
1. In Jupyter, select the **Run SQL queries in Notebook** heading, and then click
|
1. In Jupyter, select the **Run SQL queries in Notebook** heading, and then select
|
||||||
**Run**. The results are displayed inline as follows:
|
**Run**. The results are displayed inline as follows:
|
||||||
|
|
||||||
![PostgreSQL query](img/postgres-query.png)
|
![PostgreSQL query](img/postgres-query.png)
|
||||||
|
|
|
@ -552,6 +552,7 @@ vulnerability_occurrences: :gitlab_main
|
||||||
vulnerability_reads: :gitlab_main
|
vulnerability_reads: :gitlab_main
|
||||||
vulnerability_remediations: :gitlab_main
|
vulnerability_remediations: :gitlab_main
|
||||||
vulnerability_scanners: :gitlab_main
|
vulnerability_scanners: :gitlab_main
|
||||||
|
vulnerability_state_transitions: :gitlab_main
|
||||||
vulnerability_statistics: :gitlab_main
|
vulnerability_statistics: :gitlab_main
|
||||||
vulnerability_user_mentions: :gitlab_main
|
vulnerability_user_mentions: :gitlab_main
|
||||||
webauthn_registrations: :gitlab_main
|
webauthn_registrations: :gitlab_main
|
||||||
|
|
|
@ -35,7 +35,7 @@ module RuboCop
|
||||||
# class Gitlab::MyDomain::MyClass
|
# class Gitlab::MyDomain::MyClass
|
||||||
# end
|
# end
|
||||||
class NamespacedClass < RuboCop::Cop::Cop
|
class NamespacedClass < RuboCop::Cop::Cop
|
||||||
MSG = 'Classes must be declared inside a module indicating a product domain namespace. For more info: https://gitlab.com/gitlab-org/gitlab/-/issues/212156'
|
MSG = 'Classes must be declared inside a module indicating a product domain namespace. For more info: https://gitlab.com/gitlab-org/gitlab/-/issues/321982'
|
||||||
|
|
||||||
# These namespaces are considered top-level semantically.
|
# These namespaces are considered top-level semantically.
|
||||||
# Note: Nested namespace like Foo::Bar are also supported.
|
# Note: Nested namespace like Foo::Bar are also supported.
|
||||||
|
|
|
@ -69,7 +69,7 @@ RSpec.describe DeploymentEntity do
|
||||||
|
|
||||||
it 'returns another manual action' do
|
it 'returns another manual action' do
|
||||||
expect(subject[:manual_actions].count).to eq(2)
|
expect(subject[:manual_actions].count).to eq(2)
|
||||||
expect(subject[:manual_actions].second[:name]).to eq('another deploy')
|
expect(subject[:manual_actions].pluck(:name)).to match_array(['test', 'another deploy'])
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'when user is a reporter' do
|
context 'when user is a reporter' do
|
||||||
|
|
|
@ -975,10 +975,17 @@ RSpec.describe NotificationService, :mailer do
|
||||||
end
|
end
|
||||||
|
|
||||||
describe '#send_new_release_notifications', :deliver_mails_inline do
|
describe '#send_new_release_notifications', :deliver_mails_inline do
|
||||||
let(:release) { create(:release, author: current_user) }
|
let(:release) { create(:release, project: project, author: current_user) }
|
||||||
let(:object) { release }
|
let(:object) { release }
|
||||||
let(:action) { notification.send_new_release_notifications(release) }
|
let(:action) { notification.send_new_release_notifications(release) }
|
||||||
|
|
||||||
|
before_all do
|
||||||
|
build_team(project)
|
||||||
|
|
||||||
|
update_custom_notification(:new_release, @u_guest_custom, resource: project)
|
||||||
|
update_custom_notification(:new_release, @u_custom_global)
|
||||||
|
end
|
||||||
|
|
||||||
context 'when release author is blocked' do
|
context 'when release author is blocked' do
|
||||||
let(:current_user) { create(:user, :blocked) }
|
let(:current_user) { create(:user, :blocked) }
|
||||||
|
|
||||||
|
@ -994,19 +1001,15 @@ RSpec.describe NotificationService, :mailer do
|
||||||
context 'when recipients for a new release exist' do
|
context 'when recipients for a new release exist' do
|
||||||
let(:current_user) { create(:user) }
|
let(:current_user) { create(:user) }
|
||||||
|
|
||||||
it 'calls new_release_email for each relevant recipient' do
|
it 'notifies the expected users' do
|
||||||
user_1 = create(:user)
|
|
||||||
user_2 = create(:user)
|
|
||||||
user_3 = create(:user)
|
|
||||||
recipient_1 = NotificationRecipient.new(user_1, :custom, custom_action: :new_release)
|
|
||||||
recipient_2 = NotificationRecipient.new(user_2, :custom, custom_action: :new_release)
|
|
||||||
allow(NotificationRecipients::BuildService).to receive(:build_new_release_recipients).and_return([recipient_1, recipient_2])
|
|
||||||
|
|
||||||
notification.send_new_release_notifications(release)
|
notification.send_new_release_notifications(release)
|
||||||
|
|
||||||
should_email(user_1)
|
should_only_email(
|
||||||
should_email(user_2)
|
@u_watcher,
|
||||||
should_not_email(user_3)
|
@u_guest_watcher,
|
||||||
|
@u_custom_global,
|
||||||
|
@u_guest_custom
|
||||||
|
)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in a new issue