Add latest changes from gitlab-org/gitlab@master
This commit is contained in:
		
							parent
							
								
									fd11748fe8
								
							
						
					
					
						commit
						88141b43d5
					
				| 
						 | 
					@ -1,9 +1,6 @@
 | 
				
			||||||
- if @page&.persisted?
 | 
					- if @page&.persisted?
 | 
				
			||||||
  - if can?(current_user, :create_wiki, @wiki.container)
 | 
					 | 
				
			||||||
    = link_to wiki_path(@wiki, action: :new), class: "btn gl-button btn-success", role: "button", data: { qa_selector: 'new_page_button' } do
 | 
					 | 
				
			||||||
      = s_("Wiki|New page")
 | 
					 | 
				
			||||||
  = link_to wiki_page_path(@wiki, @page, action: :history), class: "btn gl-button", role: "button", data: { qa_selector: 'page_history_button' } do
 | 
					  = link_to wiki_page_path(@wiki, @page, action: :history), class: "btn gl-button", role: "button", data: { qa_selector: 'page_history_button' } do
 | 
				
			||||||
    = s_("Wiki|Page history")
 | 
					    = s_("Wiki|Page history")
 | 
				
			||||||
  - if can?(current_user, :create_wiki, @wiki.container) && @page.latest? && @valid_encoding
 | 
					  - if can?(current_user, :create_wiki, @wiki.container)
 | 
				
			||||||
    = link_to wiki_page_path(@wiki, @page, action: :edit), class: "btn gl-button js-wiki-edit", role: "button", data: { qa_selector: 'edit_page_button' } do
 | 
					    = link_to wiki_path(@wiki, action: :new), class: "btn gl-button btn-success btn-inverted", role: "button", data: { qa_selector: 'new_page_button' } do
 | 
				
			||||||
      = _("Edit")
 | 
					      = s_("Wiki|New page")
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -20,7 +20,11 @@
 | 
				
			||||||
    = (s_("WikiHistoricalPage|You can view the %{most_recent_link} or browse the %{history_link}.") % { most_recent_link: most_recent_link, history_link: history_link }).html_safe
 | 
					    = (s_("WikiHistoricalPage|You can view the %{most_recent_link} or browse the %{history_link}.") % { most_recent_link: most_recent_link, history_link: history_link }).html_safe
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.gl-mt-5.gl-mb-3
 | 
					.gl-mt-5.gl-mb-3
 | 
				
			||||||
 | 
					  .gl-display-flex.gl-justify-content-space-between
 | 
				
			||||||
    %h2.gl-mt-0.gl-mb-5{ data: { qa_selector: 'wiki_page_title', testid: 'wiki_page_title' } }= @page.human_title
 | 
					    %h2.gl-mt-0.gl-mb-5{ data: { qa_selector: 'wiki_page_title', testid: 'wiki_page_title' } }= @page.human_title
 | 
				
			||||||
 | 
					    %div
 | 
				
			||||||
 | 
					      - if can?(current_user, :create_wiki, @wiki.container) && @page.latest? && @valid_encoding
 | 
				
			||||||
 | 
					        = link_to sprite_icon('pencil', css_class: 'gl-icon'), wiki_page_path(@wiki, @page, action: :edit), title: 'Edit', role: "button", class: 'btn gl-button btn-icon btn-default js-wiki-edit', data: { qa_selector: 'edit_page_button', testid: 'wiki_edit_button' }
 | 
				
			||||||
  .js-wiki-page-content.md.gl-pt-2{ data: { qa_selector: 'wiki_page_content', testid: 'wiki_page_content', tracking_context: wiki_page_tracking_context(@page).to_json } }
 | 
					  .js-wiki-page-content.md.gl-pt-2{ data: { qa_selector: 'wiki_page_content', testid: 'wiki_page_content', tracking_context: wiki_page_tracking_context(@page).to_json } }
 | 
				
			||||||
    = render_wiki_content(@page)
 | 
					    = render_wiki_content(@page)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -23,7 +23,9 @@ class BackgroundMigrationWorker # rubocop:disable Scalability/IdempotentWorker
 | 
				
			||||||
  #
 | 
					  #
 | 
				
			||||||
  # class_name - The class name of the background migration to run.
 | 
					  # class_name - The class name of the background migration to run.
 | 
				
			||||||
  # arguments - The arguments to pass to the migration class.
 | 
					  # arguments - The arguments to pass to the migration class.
 | 
				
			||||||
  def perform(class_name, arguments = [])
 | 
					  # lease_attempts - The number of times we will try to obtain an exclusive
 | 
				
			||||||
 | 
					  #   lease on the class before running anyway.  Pass 0 to always run.
 | 
				
			||||||
 | 
					  def perform(class_name, arguments = [], lease_attempts = 5)
 | 
				
			||||||
    with_context(caller_id: class_name.to_s) do
 | 
					    with_context(caller_id: class_name.to_s) do
 | 
				
			||||||
      should_perform, ttl = perform_and_ttl(class_name)
 | 
					      should_perform, ttl = perform_and_ttl(class_name)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,5 @@
 | 
				
			||||||
 | 
					---
 | 
				
			||||||
 | 
					title: Add support for manual bridges for CI pipelines
 | 
				
			||||||
 | 
					merge_request: 45368
 | 
				
			||||||
 | 
					author:
 | 
				
			||||||
 | 
					type: added
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,5 @@
 | 
				
			||||||
 | 
					---
 | 
				
			||||||
 | 
					title: Move wiki edit button inline with wiki title
 | 
				
			||||||
 | 
					merge_request: 44391
 | 
				
			||||||
 | 
					author:
 | 
				
			||||||
 | 
					type: changed
 | 
				
			||||||
| 
						 | 
					@ -4,4 +4,4 @@ introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/44011
 | 
				
			||||||
rollout_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/263412
 | 
					rollout_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/263412
 | 
				
			||||||
type: development
 | 
					type: development
 | 
				
			||||||
group: group::pipeline authoring
 | 
					group: group::pipeline authoring
 | 
				
			||||||
default_enabled: false
 | 
					default_enabled: true
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,7 @@
 | 
				
			||||||
 | 
					---
 | 
				
			||||||
 | 
					name: two_factor_for_cli
 | 
				
			||||||
 | 
					introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/39703
 | 
				
			||||||
 | 
					rollout_issue_url: 
 | 
				
			||||||
 | 
					type: development
 | 
				
			||||||
 | 
					group: group::access
 | 
				
			||||||
 | 
					default_enabled: false
 | 
				
			||||||
| 
						 | 
					@ -249,13 +249,10 @@ with the other servers.
 | 
				
			||||||
To configure Consul:
 | 
					To configure Consul:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
1. SSH in to the server that will host Consul.
 | 
					1. SSH in to the server that will host Consul.
 | 
				
			||||||
1. [Download/install](https://about.gitlab.com/install/) the
 | 
					1. [Download and install](https://about.gitlab.com/install/) the Omnibus GitLab
 | 
				
			||||||
   Omnibus GitLab Enterprise Edition package using **steps 1 and 2** from the
 | 
					   package of your choice. Be sure to both follow _only_ installation steps 1 and 2
 | 
				
			||||||
   GitLab downloads page.
 | 
					   on the page, and to select the correct Omnibus GitLab package, with the same version
 | 
				
			||||||
   - Make sure you select the correct Omnibus package, with the same version
 | 
					   and type (Community or Enterprise editions) as your current install.
 | 
				
			||||||
     the GitLab application is running.
 | 
					 | 
				
			||||||
   - Do not complete any other steps on the download page.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
1. Edit `/etc/gitlab/gitlab.rb` and add the contents:
 | 
					1. Edit `/etc/gitlab/gitlab.rb` and add the contents:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
   ```ruby
 | 
					   ```ruby
 | 
				
			||||||
| 
						 | 
					@ -816,12 +813,10 @@ a node and change its status from primary to replica (and vice versa).
 | 
				
			||||||
#### Configure the primary Redis Cache node
 | 
					#### Configure the primary Redis Cache node
 | 
				
			||||||
 | 
					
 | 
				
			||||||
1. SSH in to the **Primary** Redis server.
 | 
					1. SSH in to the **Primary** Redis server.
 | 
				
			||||||
1. [Download/install](https://about.gitlab.com/install/) the Omnibus GitLab
 | 
					1. [Download and install](https://about.gitlab.com/install/) the Omnibus GitLab
 | 
				
			||||||
   package you want using **steps 1 and 2** from the GitLab downloads page.
 | 
					   package of your choice. Be sure to both follow _only_ installation steps 1 and 2
 | 
				
			||||||
   - Make sure you select the correct Omnibus package, with the same version
 | 
					   on the page, and to select the correct Omnibus GitLab package, with the same version
 | 
				
			||||||
     and type (Community, Enterprise editions) of your current install.
 | 
					   and type (Community or Enterprise editions) as your current install.
 | 
				
			||||||
   - Do not complete any other steps on the download page.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
1. Edit `/etc/gitlab/gitlab.rb` and add the contents:
 | 
					1. Edit `/etc/gitlab/gitlab.rb` and add the contents:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
   ```ruby
 | 
					   ```ruby
 | 
				
			||||||
| 
						 | 
					@ -872,12 +867,10 @@ You can specify multiple roles, like sentinel and Redis, as:
 | 
				
			||||||
#### Configure the replica Redis Cache nodes
 | 
					#### Configure the replica Redis Cache nodes
 | 
				
			||||||
 | 
					
 | 
				
			||||||
1. SSH in to the **replica** Redis server.
 | 
					1. SSH in to the **replica** Redis server.
 | 
				
			||||||
1. [Download/install](https://about.gitlab.com/install/) the Omnibus GitLab
 | 
					1. [Download and install](https://about.gitlab.com/install/) the Omnibus GitLab
 | 
				
			||||||
   package you want using **steps 1 and 2** from the GitLab downloads page.
 | 
					   package of your choice. Be sure to both follow _only_ installation steps 1 and 2
 | 
				
			||||||
   - Make sure you select the correct Omnibus package, with the same version
 | 
					   on the page, and to select the correct Omnibus GitLab package, with the same version
 | 
				
			||||||
     and type (Community, Enterprise editions) of your current install.
 | 
					   and type (Community or Enterprise editions) as your current install.
 | 
				
			||||||
   - Do not complete any other steps on the download page.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
1. Edit `/etc/gitlab/gitlab.rb` and add the contents:
 | 
					1. Edit `/etc/gitlab/gitlab.rb` and add the contents:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
   ```ruby
 | 
					   ```ruby
 | 
				
			||||||
| 
						 | 
					@ -966,13 +959,10 @@ clients to report `NOAUTH Authentication required.`.
 | 
				
			||||||
To configure the Sentinel Cache server:
 | 
					To configure the Sentinel Cache server:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
1. SSH in to the server that will host Consul/Sentinel.
 | 
					1. SSH in to the server that will host Consul/Sentinel.
 | 
				
			||||||
1. [Download/install](https://about.gitlab.com/install/) the
 | 
					1. [Download and install](https://about.gitlab.com/install/) the Omnibus GitLab
 | 
				
			||||||
   Omnibus GitLab Enterprise Edition package using **steps 1 and 2** from the
 | 
					   package of your choice. Be sure to both follow _only_ installation steps 1 and 2
 | 
				
			||||||
   GitLab downloads page.
 | 
					   on the page, and to select the correct Omnibus GitLab package, with the same version
 | 
				
			||||||
   - Make sure you select the correct Omnibus package, with the same version
 | 
					   and type (Community or Enterprise editions) as your current install.
 | 
				
			||||||
     the GitLab application is running.
 | 
					 | 
				
			||||||
   - Do not complete any other steps on the download page.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
1. Edit `/etc/gitlab/gitlab.rb` and add the contents:
 | 
					1. Edit `/etc/gitlab/gitlab.rb` and add the contents:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
   ```ruby
 | 
					   ```ruby
 | 
				
			||||||
| 
						 | 
					@ -1082,12 +1072,10 @@ a node and change its status from primary to replica (and vice versa).
 | 
				
			||||||
#### Configure the primary Redis Queues node
 | 
					#### Configure the primary Redis Queues node
 | 
				
			||||||
 | 
					
 | 
				
			||||||
1. SSH in to the **Primary** Redis server.
 | 
					1. SSH in to the **Primary** Redis server.
 | 
				
			||||||
1. [Download/install](https://about.gitlab.com/install/) the Omnibus GitLab
 | 
					1. [Download and install](https://about.gitlab.com/install/) the Omnibus GitLab
 | 
				
			||||||
   package you want using **steps 1 and 2** from the GitLab downloads page.
 | 
					   package of your choice. Be sure to both follow _only_ installation steps 1 and 2
 | 
				
			||||||
   - Make sure you select the correct Omnibus package, with the same version
 | 
					   on the page, and to select the correct Omnibus GitLab package, with the same version
 | 
				
			||||||
     and type (Community, Enterprise editions) of your current install.
 | 
					   and type (Community or Enterprise editions) as your current install.
 | 
				
			||||||
   - Do not complete any other steps on the download page.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
1. Edit `/etc/gitlab/gitlab.rb` and add the contents:
 | 
					1. Edit `/etc/gitlab/gitlab.rb` and add the contents:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
   ```ruby
 | 
					   ```ruby
 | 
				
			||||||
| 
						 | 
					@ -1143,12 +1131,10 @@ You can specify multiple roles, like sentinel and Redis, as:
 | 
				
			||||||
#### Configure the replica Redis Queues nodes
 | 
					#### Configure the replica Redis Queues nodes
 | 
				
			||||||
 | 
					
 | 
				
			||||||
1. SSH in to the **replica** Redis Queue server.
 | 
					1. SSH in to the **replica** Redis Queue server.
 | 
				
			||||||
1. [Download/install](https://about.gitlab.com/install/) the Omnibus GitLab
 | 
					1. [Download and install](https://about.gitlab.com/install/) the Omnibus GitLab
 | 
				
			||||||
   package you want using **steps 1 and 2** from the GitLab downloads page.
 | 
					   package of your choice. Be sure to both follow _only_ installation steps 1 and 2
 | 
				
			||||||
   - Make sure you select the correct Omnibus package, with the same version
 | 
					   on the page, and to select the correct Omnibus GitLab package, with the same version
 | 
				
			||||||
     and type (Community, Enterprise editions) of your current install.
 | 
					   and type (Community or Enterprise editions) as your current install.
 | 
				
			||||||
   - Do not complete any other steps on the download page.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
1. Edit `/etc/gitlab/gitlab.rb` and add the contents:
 | 
					1. Edit `/etc/gitlab/gitlab.rb` and add the contents:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
   ```ruby
 | 
					   ```ruby
 | 
				
			||||||
| 
						 | 
					@ -1237,13 +1223,10 @@ clients to report `NOAUTH Authentication required.`.
 | 
				
			||||||
To configure the Sentinel Queues server:
 | 
					To configure the Sentinel Queues server:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
1. SSH in to the server that will host Sentinel.
 | 
					1. SSH in to the server that will host Sentinel.
 | 
				
			||||||
1. [Download/install](https://about.gitlab.com/install/) the
 | 
					1. [Download and install](https://about.gitlab.com/install/) the Omnibus GitLab
 | 
				
			||||||
   Omnibus GitLab Enterprise Edition package using **steps 1 and 2** from the
 | 
					   package of your choice. Be sure to both follow _only_ installation steps 1 and 2
 | 
				
			||||||
   GitLab downloads page.
 | 
					   on the page, and to select the correct Omnibus GitLab package, with the same version
 | 
				
			||||||
   - Make sure you select the correct Omnibus package, with the same version
 | 
					   and type (Community or Enterprise editions) as your current install.
 | 
				
			||||||
     the GitLab application is running.
 | 
					 | 
				
			||||||
   - Do not complete any other steps on the download page.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
1. Edit `/etc/gitlab/gitlab.rb` and add the contents:
 | 
					1. Edit `/etc/gitlab/gitlab.rb` and add the contents:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
   ```ruby
 | 
					   ```ruby
 | 
				
			||||||
| 
						 | 
					@ -1402,8 +1385,8 @@ and that your GitLab installation has three repository storages:
 | 
				
			||||||
On each node:
 | 
					On each node:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
1. [Download and install](https://about.gitlab.com/install/) the Omnibus GitLab
 | 
					1. [Download and install](https://about.gitlab.com/install/) the Omnibus GitLab
 | 
				
			||||||
   package you want (based on _steps 1 and 2_ on the GitLab downloads page), but
 | 
					   package of your choice. Be sure to follow _only_ installation steps 1 and 2
 | 
				
			||||||
   _without_ providing the `EXTERNAL_URL` value.
 | 
					   on the page, and _do not_ provide the `EXTERNAL_URL` value.
 | 
				
			||||||
1. Edit `/etc/gitlab/gitlab.rb` to configure the storage paths, enable
 | 
					1. Edit `/etc/gitlab/gitlab.rb` to configure the storage paths, enable
 | 
				
			||||||
   the network listener, and configure the token:
 | 
					   the network listener, and configure the token:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1566,9 +1549,9 @@ The following IPs will be used as an example:
 | 
				
			||||||
To configure the Sidekiq nodes, on each one:
 | 
					To configure the Sidekiq nodes, on each one:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
1. SSH in to the Sidekiq server.
 | 
					1. SSH in to the Sidekiq server.
 | 
				
			||||||
1. [Download/install](https://about.gitlab.com/install/) the Omnibus GitLab package
 | 
					1. [Download and install](https://about.gitlab.com/install/) the Omnibus GitLab
 | 
				
			||||||
you want using steps 1 and 2 from the GitLab downloads page.
 | 
					   package of your choice. Be sure to follow _only_ installation steps 1 and 2
 | 
				
			||||||
**Do not complete any other steps on the download page.**
 | 
					   on the page.
 | 
				
			||||||
1. Open `/etc/gitlab/gitlab.rb` with your editor:
 | 
					1. Open `/etc/gitlab/gitlab.rb` with your editor:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
   ```ruby
 | 
					   ```ruby
 | 
				
			||||||
| 
						 | 
					@ -1702,10 +1685,9 @@ The following IPs will be used as an example:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
On each node perform the following:
 | 
					On each node perform the following:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
1. Download and install Omnibus GitLab using **steps 1 and 2** from
 | 
					1. [Download and install](https://about.gitlab.com/install/) the Omnibus GitLab
 | 
				
			||||||
   [GitLab downloads](https://about.gitlab.com/install/). Do not complete other
 | 
					   package of your choice. Be sure to follow _only_ installation steps 1 and 2
 | 
				
			||||||
   steps on the download page.
 | 
					   on the page.
 | 
				
			||||||
 | 
					 | 
				
			||||||
1. Copy the `/etc/gitlab/gitlab-secrets.json` file from your Consul server, and replace
 | 
					1. Copy the `/etc/gitlab/gitlab-secrets.json` file from your Consul server, and replace
 | 
				
			||||||
   the file of the same name on this server. If that file is not on this server,
 | 
					   the file of the same name on this server. If that file is not on this server,
 | 
				
			||||||
   add the file from your Consul server to this server.
 | 
					   add the file from your Consul server to this server.
 | 
				
			||||||
| 
						 | 
					@ -1906,10 +1888,9 @@ The following IP will be used as an example:
 | 
				
			||||||
To configure the Monitoring node:
 | 
					To configure the Monitoring node:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
1. SSH in to the Monitoring node.
 | 
					1. SSH in to the Monitoring node.
 | 
				
			||||||
1. [Download/install](https://about.gitlab.com/install/) the Omnibus GitLab
 | 
					1. [Download and install](https://about.gitlab.com/install/) the Omnibus GitLab
 | 
				
			||||||
   package you want using **steps 1 and 2** from the GitLab downloads page.
 | 
					   package of your choice. Be sure to follow _only_ installation steps 1 and 2
 | 
				
			||||||
   Do not complete any other steps on the download page.
 | 
					   on the page.
 | 
				
			||||||
 | 
					 | 
				
			||||||
1. Copy the `/etc/gitlab/gitlab-secrets.json` file from your Consul server, and replace
 | 
					1. Copy the `/etc/gitlab/gitlab-secrets.json` file from your Consul server, and replace
 | 
				
			||||||
   the file of the same name on this server. If that file is not on this server,
 | 
					   the file of the same name on this server. If that file is not on this server,
 | 
				
			||||||
   add the file from your Consul server to this server.
 | 
					   add the file from your Consul server to this server.
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -249,13 +249,10 @@ with the other servers.
 | 
				
			||||||
To configure Consul:
 | 
					To configure Consul:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
1. SSH in to the server that will host Consul.
 | 
					1. SSH in to the server that will host Consul.
 | 
				
			||||||
1. [Download/install](https://about.gitlab.com/install/) the
 | 
					1. [Download and install](https://about.gitlab.com/install/) the Omnibus GitLab
 | 
				
			||||||
   Omnibus GitLab Enterprise Edition package using **steps 1 and 2** from the
 | 
					   package of your choice. Be sure to both follow _only_ installation steps 1 and 2
 | 
				
			||||||
   GitLab downloads page.
 | 
					   on the page, and to select the correct Omnibus GitLab package, with the same version
 | 
				
			||||||
   - Make sure you select the correct Omnibus package, with the same version
 | 
					   and type (Community or Enterprise editions) as your current install.
 | 
				
			||||||
     the GitLab application is running.
 | 
					 | 
				
			||||||
   - Do not complete any other steps on the download page.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
1. Edit `/etc/gitlab/gitlab.rb` and add the contents:
 | 
					1. Edit `/etc/gitlab/gitlab.rb` and add the contents:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
   ```ruby
 | 
					   ```ruby
 | 
				
			||||||
| 
						 | 
					@ -816,12 +813,10 @@ a node and change its status from primary to replica (and vice versa).
 | 
				
			||||||
#### Configure the primary Redis Cache node
 | 
					#### Configure the primary Redis Cache node
 | 
				
			||||||
 | 
					
 | 
				
			||||||
1. SSH in to the **Primary** Redis server.
 | 
					1. SSH in to the **Primary** Redis server.
 | 
				
			||||||
1. [Download/install](https://about.gitlab.com/install/) the Omnibus GitLab
 | 
					1. [Download and install](https://about.gitlab.com/install/) the Omnibus GitLab
 | 
				
			||||||
   package you want using **steps 1 and 2** from the GitLab downloads page.
 | 
					   package of your choice. Be sure to both follow _only_ installation steps 1 and 2
 | 
				
			||||||
   - Make sure you select the correct Omnibus package, with the same version
 | 
					   on the page, and to select the correct Omnibus GitLab package, with the same version
 | 
				
			||||||
     and type (Community, Enterprise editions) of your current install.
 | 
					   and type (Community or Enterprise editions) as your current install.
 | 
				
			||||||
   - Do not complete any other steps on the download page.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
1. Edit `/etc/gitlab/gitlab.rb` and add the contents:
 | 
					1. Edit `/etc/gitlab/gitlab.rb` and add the contents:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
   ```ruby
 | 
					   ```ruby
 | 
				
			||||||
| 
						 | 
					@ -872,12 +867,10 @@ You can specify multiple roles, like sentinel and Redis, as:
 | 
				
			||||||
#### Configure the replica Redis Cache nodes
 | 
					#### Configure the replica Redis Cache nodes
 | 
				
			||||||
 | 
					
 | 
				
			||||||
1. SSH in to the **replica** Redis server.
 | 
					1. SSH in to the **replica** Redis server.
 | 
				
			||||||
1. [Download/install](https://about.gitlab.com/install/) the Omnibus GitLab
 | 
					1. [Download and install](https://about.gitlab.com/install/) the Omnibus GitLab
 | 
				
			||||||
   package you want using **steps 1 and 2** from the GitLab downloads page.
 | 
					   package of your choice. Be sure to both follow _only_ installation steps 1 and 2
 | 
				
			||||||
   - Make sure you select the correct Omnibus package, with the same version
 | 
					   on the page, and to select the correct Omnibus GitLab package, with the same version
 | 
				
			||||||
     and type (Community, Enterprise editions) of your current install.
 | 
					   and type (Community or Enterprise editions) as your current install.
 | 
				
			||||||
   - Do not complete any other steps on the download page.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
1. Edit `/etc/gitlab/gitlab.rb` and add the contents:
 | 
					1. Edit `/etc/gitlab/gitlab.rb` and add the contents:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
   ```ruby
 | 
					   ```ruby
 | 
				
			||||||
| 
						 | 
					@ -966,13 +959,10 @@ clients to report `NOAUTH Authentication required.`.
 | 
				
			||||||
To configure the Sentinel Cache server:
 | 
					To configure the Sentinel Cache server:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
1. SSH in to the server that will host Consul/Sentinel.
 | 
					1. SSH in to the server that will host Consul/Sentinel.
 | 
				
			||||||
1. [Download/install](https://about.gitlab.com/install/) the
 | 
					1. [Download and install](https://about.gitlab.com/install/) the Omnibus GitLab
 | 
				
			||||||
   Omnibus GitLab Enterprise Edition package using **steps 1 and 2** from the
 | 
					   package of your choice. Be sure to both follow _only_ installation steps 1 and 2
 | 
				
			||||||
   GitLab downloads page.
 | 
					   on the page, and to select the correct Omnibus GitLab package, with the same version
 | 
				
			||||||
   - Make sure you select the correct Omnibus package, with the same version
 | 
					   and type (Community or Enterprise editions) as your current install.
 | 
				
			||||||
     the GitLab application is running.
 | 
					 | 
				
			||||||
   - Do not complete any other steps on the download page.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
1. Edit `/etc/gitlab/gitlab.rb` and add the contents:
 | 
					1. Edit `/etc/gitlab/gitlab.rb` and add the contents:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
   ```ruby
 | 
					   ```ruby
 | 
				
			||||||
| 
						 | 
					@ -1082,12 +1072,10 @@ a node and change its status from primary to replica (and vice versa).
 | 
				
			||||||
#### Configure the primary Redis Queues node
 | 
					#### Configure the primary Redis Queues node
 | 
				
			||||||
 | 
					
 | 
				
			||||||
1. SSH in to the **Primary** Redis server.
 | 
					1. SSH in to the **Primary** Redis server.
 | 
				
			||||||
1. [Download/install](https://about.gitlab.com/install/) the Omnibus GitLab
 | 
					1. [Download and install](https://about.gitlab.com/install/) the Omnibus GitLab
 | 
				
			||||||
   package you want using **steps 1 and 2** from the GitLab downloads page.
 | 
					   package of your choice. Be sure to both follow _only_ installation steps 1 and 2
 | 
				
			||||||
   - Make sure you select the correct Omnibus package, with the same version
 | 
					   on the page, and to select the correct Omnibus GitLab package, with the same version
 | 
				
			||||||
     and type (Community, Enterprise editions) of your current install.
 | 
					   and type (Community or Enterprise editions) as your current install.
 | 
				
			||||||
   - Do not complete any other steps on the download page.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
1. Edit `/etc/gitlab/gitlab.rb` and add the contents:
 | 
					1. Edit `/etc/gitlab/gitlab.rb` and add the contents:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
   ```ruby
 | 
					   ```ruby
 | 
				
			||||||
| 
						 | 
					@ -1143,12 +1131,10 @@ You can specify multiple roles, like sentinel and Redis, as:
 | 
				
			||||||
#### Configure the replica Redis Queues nodes
 | 
					#### Configure the replica Redis Queues nodes
 | 
				
			||||||
 | 
					
 | 
				
			||||||
1. SSH in to the **replica** Redis Queue server.
 | 
					1. SSH in to the **replica** Redis Queue server.
 | 
				
			||||||
1. [Download/install](https://about.gitlab.com/install/) the Omnibus GitLab
 | 
					1. [Download and install](https://about.gitlab.com/install/) the Omnibus GitLab
 | 
				
			||||||
   package you want using **steps 1 and 2** from the GitLab downloads page.
 | 
					   package of your choice. Be sure to both follow _only_ installation steps 1 and 2
 | 
				
			||||||
   - Make sure you select the correct Omnibus package, with the same version
 | 
					   on the page, and to select the correct Omnibus GitLab package, with the same version
 | 
				
			||||||
     and type (Community, Enterprise editions) of your current install.
 | 
					   and type (Community or Enterprise editions) as your current install.
 | 
				
			||||||
   - Do not complete any other steps on the download page.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
1. Edit `/etc/gitlab/gitlab.rb` and add the contents:
 | 
					1. Edit `/etc/gitlab/gitlab.rb` and add the contents:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
   ```ruby
 | 
					   ```ruby
 | 
				
			||||||
| 
						 | 
					@ -1237,13 +1223,10 @@ clients to report `NOAUTH Authentication required.`.
 | 
				
			||||||
To configure the Sentinel Queues server:
 | 
					To configure the Sentinel Queues server:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
1. SSH in to the server that will host Sentinel.
 | 
					1. SSH in to the server that will host Sentinel.
 | 
				
			||||||
1. [Download/install](https://about.gitlab.com/install/) the
 | 
					1. [Download and install](https://about.gitlab.com/install/) the Omnibus GitLab
 | 
				
			||||||
   Omnibus GitLab Enterprise Edition package using **steps 1 and 2** from the
 | 
					   package of your choice. Be sure to both follow _only_ installation steps 1 and 2
 | 
				
			||||||
   GitLab downloads page.
 | 
					   on the page, and to select the correct Omnibus package, with the same version
 | 
				
			||||||
   - Make sure you select the correct Omnibus package, with the same version
 | 
					   and type (Community or Enterprise editions) as your current install.
 | 
				
			||||||
     the GitLab application is running.
 | 
					 | 
				
			||||||
   - Do not complete any other steps on the download page.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
1. Edit `/etc/gitlab/gitlab.rb` and add the contents:
 | 
					1. Edit `/etc/gitlab/gitlab.rb` and add the contents:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
   ```ruby
 | 
					   ```ruby
 | 
				
			||||||
| 
						 | 
					@ -1402,8 +1385,8 @@ and that your GitLab installation has three repository storages:
 | 
				
			||||||
On each node:
 | 
					On each node:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
1. [Download and install](https://about.gitlab.com/install/) the Omnibus GitLab
 | 
					1. [Download and install](https://about.gitlab.com/install/) the Omnibus GitLab
 | 
				
			||||||
   package you want (based on _steps 1 and 2_ on the GitLab downloads page), but
 | 
					   package of your choice. Be sure to follow _only_ installation steps 1 and 2
 | 
				
			||||||
   _without_ providing the `EXTERNAL_URL` value.
 | 
					   on the page, and _do not_ provide the `EXTERNAL_URL` value.
 | 
				
			||||||
1. Edit `/etc/gitlab/gitlab.rb` to configure the storage paths, enable
 | 
					1. Edit `/etc/gitlab/gitlab.rb` to configure the storage paths, enable
 | 
				
			||||||
   the network listener, and configure the token:
 | 
					   the network listener, and configure the token:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1566,9 +1549,9 @@ The following IPs will be used as an example:
 | 
				
			||||||
To configure the Sidekiq nodes, on each one:
 | 
					To configure the Sidekiq nodes, on each one:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
1. SSH in to the Sidekiq server.
 | 
					1. SSH in to the Sidekiq server.
 | 
				
			||||||
1. [Download/install](https://about.gitlab.com/install/) the Omnibus GitLab package
 | 
					1. [Download and install](https://about.gitlab.com/install/) the Omnibus GitLab
 | 
				
			||||||
you want using steps 1 and 2 from the GitLab downloads page.
 | 
					   package of your choice. Be sure to follow _only_ installation steps 1 and 2
 | 
				
			||||||
**Do not complete any other steps on the download page.**
 | 
					   on the page.
 | 
				
			||||||
1. Open `/etc/gitlab/gitlab.rb` with your editor:
 | 
					1. Open `/etc/gitlab/gitlab.rb` with your editor:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
   ```ruby
 | 
					   ```ruby
 | 
				
			||||||
| 
						 | 
					@ -1702,10 +1685,9 @@ The following IPs will be used as an example:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
On each node perform the following:
 | 
					On each node perform the following:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
1. Download and install Omnibus GitLab using **steps 1 and 2** from
 | 
					1. [Download and install](https://about.gitlab.com/install/) the Omnibus GitLab
 | 
				
			||||||
   [GitLab downloads](https://about.gitlab.com/install/). Do not complete other
 | 
					   package of your choice. Be sure to follow _only_ installation steps 1 and 2
 | 
				
			||||||
   steps on the download page.
 | 
					   on the page.
 | 
				
			||||||
 | 
					 | 
				
			||||||
1. Copy the `/etc/gitlab/gitlab-secrets.json` file from your Consul server, and replace
 | 
					1. Copy the `/etc/gitlab/gitlab-secrets.json` file from your Consul server, and replace
 | 
				
			||||||
   the file of the same name on this server. If that file is not on this server,
 | 
					   the file of the same name on this server. If that file is not on this server,
 | 
				
			||||||
   add the file from your Consul server to this server.
 | 
					   add the file from your Consul server to this server.
 | 
				
			||||||
| 
						 | 
					@ -1906,10 +1888,9 @@ The following IP will be used as an example:
 | 
				
			||||||
To configure the Monitoring node:
 | 
					To configure the Monitoring node:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
1. SSH in to the Monitoring node.
 | 
					1. SSH in to the Monitoring node.
 | 
				
			||||||
1. [Download/install](https://about.gitlab.com/install/) the Omnibus GitLab
 | 
					1. [Download and install](https://about.gitlab.com/install/) the Omnibus GitLab
 | 
				
			||||||
   package you want using **steps 1 and 2** from the GitLab downloads page.
 | 
					   package of your choice. Be sure to follow _only_ installation steps 1 and 2
 | 
				
			||||||
   Do not complete any other steps on the download page.
 | 
					   on the page.
 | 
				
			||||||
 | 
					 | 
				
			||||||
1. Copy the `/etc/gitlab/gitlab-secrets.json` file from your Consul server, and replace
 | 
					1. Copy the `/etc/gitlab/gitlab-secrets.json` file from your Consul server, and replace
 | 
				
			||||||
   the file of the same name on this server. If that file is not on this server,
 | 
					   the file of the same name on this server. If that file is not on this server,
 | 
				
			||||||
   add the file from your Consul server to this server.
 | 
					   add the file from your Consul server to this server.
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -208,9 +208,9 @@ further configuration steps.
 | 
				
			||||||
### Standalone PostgreSQL using Omnibus GitLab
 | 
					### Standalone PostgreSQL using Omnibus GitLab
 | 
				
			||||||
 | 
					
 | 
				
			||||||
1. SSH in to the PostgreSQL server.
 | 
					1. SSH in to the PostgreSQL server.
 | 
				
			||||||
1. [Download/install](https://about.gitlab.com/install/) the Omnibus GitLab
 | 
					1. [Download and install](https://about.gitlab.com/install/) the Omnibus GitLab
 | 
				
			||||||
   package you want using **steps 1 and 2** from the GitLab downloads page.
 | 
					   package of your choice. Be sure to follow _only_ installation steps 1 and 2
 | 
				
			||||||
   - Do not complete any other steps on the download page.
 | 
					   on the page.
 | 
				
			||||||
1. Generate a password hash for PostgreSQL. This assumes you will use the default
 | 
					1. Generate a password hash for PostgreSQL. This assumes you will use the default
 | 
				
			||||||
   username of `gitlab` (recommended). The command will request a password
 | 
					   username of `gitlab` (recommended). The command will request a password
 | 
				
			||||||
   and confirmation. Use the value that is output by this command in the next
 | 
					   and confirmation. Use the value that is output by this command in the next
 | 
				
			||||||
| 
						 | 
					@ -302,10 +302,9 @@ The steps below are the minimum necessary to configure a Redis server with
 | 
				
			||||||
Omnibus:
 | 
					Omnibus:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
1. SSH in to the Redis server.
 | 
					1. SSH in to the Redis server.
 | 
				
			||||||
1. [Download/install](https://about.gitlab.com/install/) the Omnibus GitLab
 | 
					1. [Download and install](https://about.gitlab.com/install/) the Omnibus GitLab
 | 
				
			||||||
   package you want using **steps 1 and 2** from the GitLab downloads page.
 | 
					   package of your choice. Be sure to follow _only_ installation steps 1 and 2
 | 
				
			||||||
     - Do not complete any other steps on the download page.
 | 
					   on the page.
 | 
				
			||||||
 | 
					 | 
				
			||||||
1. Edit `/etc/gitlab/gitlab.rb` and add the contents:
 | 
					1. Edit `/etc/gitlab/gitlab.rb` and add the contents:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
   ```ruby
 | 
					   ```ruby
 | 
				
			||||||
| 
						 | 
					@ -394,12 +393,11 @@ The following procedure describes how to configure a single Gitaly server named
 | 
				
			||||||
`gitaly1.internal` with the secret token `gitalysecret`. We assume your GitLab
 | 
					`gitaly1.internal` with the secret token `gitalysecret`. We assume your GitLab
 | 
				
			||||||
installation has two repository storages: `default` and `storage1`.
 | 
					installation has two repository storages: `default` and `storage1`.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
To configure the Gitaly server:
 | 
					To configure the Gitaly server, on the server node you want to use for Gitaly:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
1. On the server node you want to use for Gitaly,
 | 
					1. [Download and install](https://about.gitlab.com/install/) the Omnibus GitLab
 | 
				
			||||||
   [download and install](https://about.gitlab.com/install/) your selected
 | 
					   package of your choice. Be sure to follow _only_ installation steps 1 and 2
 | 
				
			||||||
   Omnibus GitLab package using *steps 1 and 2* from the GitLab downloads page,
 | 
					   on the page, and _do not_ provide the `EXTERNAL_URL` value.
 | 
				
			||||||
   but *without* providing the `EXTERNAL_URL` value.
 | 
					 | 
				
			||||||
1. Edit the Gitaly server node's `/etc/gitlab/gitlab.rb` file to configure
 | 
					1. Edit the Gitaly server node's `/etc/gitlab/gitlab.rb` file to configure
 | 
				
			||||||
   storage paths, enable the network listener, and to configure the token:
 | 
					   storage paths, enable the network listener, and to configure the token:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -570,9 +568,9 @@ On each node perform the following:
 | 
				
			||||||
      mkdir -p /var/opt/gitlab/.ssh /var/opt/gitlab/gitlab-rails/uploads /var/opt/gitlab/gitlab-rails/shared /var/opt/gitlab/gitlab-ci/builds /var/opt/gitlab/git-data
 | 
					      mkdir -p /var/opt/gitlab/.ssh /var/opt/gitlab/gitlab-rails/uploads /var/opt/gitlab/gitlab-rails/shared /var/opt/gitlab/gitlab-ci/builds /var/opt/gitlab/git-data
 | 
				
			||||||
      ```
 | 
					      ```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
1. Download and install Omnibus GitLab using **steps 1 and 2** from
 | 
					1. [Download and install](https://about.gitlab.com/install/) the Omnibus GitLab
 | 
				
			||||||
   [GitLab downloads](https://about.gitlab.com/install/). Do not complete other
 | 
					   package of your choice. Be sure to follow _only_ installation steps 1 and 2
 | 
				
			||||||
   steps on the download page.
 | 
					   on the page.
 | 
				
			||||||
1. Create or edit `/etc/gitlab/gitlab.rb` and use the following configuration.
 | 
					1. Create or edit `/etc/gitlab/gitlab.rb` and use the following configuration.
 | 
				
			||||||
   To maintain uniformity of links across nodes, the `external_url`
 | 
					   To maintain uniformity of links across nodes, the `external_url`
 | 
				
			||||||
   on the application server should point to the external URL that users will use
 | 
					   on the application server should point to the external URL that users will use
 | 
				
			||||||
| 
						 | 
					@ -705,9 +703,9 @@ running [Prometheus](../monitoring/prometheus/index.md) and
 | 
				
			||||||
[Grafana](../monitoring/performance/grafana_configuration.md):
 | 
					[Grafana](../monitoring/performance/grafana_configuration.md):
 | 
				
			||||||
 | 
					
 | 
				
			||||||
1. SSH in to the Monitoring node.
 | 
					1. SSH in to the Monitoring node.
 | 
				
			||||||
1. [Download/install](https://about.gitlab.com/install/) the Omnibus GitLab
 | 
					1. [Download and install](https://about.gitlab.com/install/) the Omnibus GitLab
 | 
				
			||||||
   package you want using **steps 1 and 2** from the GitLab downloads page.
 | 
					   package of your choice. Be sure to follow _only_ installation steps 1 and 2
 | 
				
			||||||
   Do not complete any other steps on the download page.
 | 
					   on the page.
 | 
				
			||||||
1. Edit `/etc/gitlab/gitlab.rb` and add the contents:
 | 
					1. Edit `/etc/gitlab/gitlab.rb` and add the contents:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
   ```ruby
 | 
					   ```ruby
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -285,12 +285,10 @@ a node and change its status from primary to replica (and vice versa).
 | 
				
			||||||
#### Configuring the primary Redis instance
 | 
					#### Configuring the primary Redis instance
 | 
				
			||||||
 | 
					
 | 
				
			||||||
1. SSH in to the **Primary** Redis server.
 | 
					1. SSH in to the **Primary** Redis server.
 | 
				
			||||||
1. [Download/install](https://about.gitlab.com/install/) the Omnibus GitLab
 | 
					1. [Download and install](https://about.gitlab.com/install/) the Omnibus GitLab
 | 
				
			||||||
   package you want using **steps 1 and 2** from the GitLab downloads page.
 | 
					   package of your choice. Be sure to both follow _only_ installation steps 1 and 2
 | 
				
			||||||
   - Make sure you select the correct Omnibus package, with the same version
 | 
					   on the page, and to select the correct Omnibus GitLab package, with the same version
 | 
				
			||||||
     and type (Community, Enterprise editions) of your current install.
 | 
					   and type (Community or Enterprise editions) as your current install.
 | 
				
			||||||
   - Do not complete any other steps on the download page.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
1. Edit `/etc/gitlab/gitlab.rb` and add the contents:
 | 
					1. Edit `/etc/gitlab/gitlab.rb` and add the contents:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
   ```ruby
 | 
					   ```ruby
 | 
				
			||||||
| 
						 | 
					@ -363,12 +361,10 @@ run: redis-exporter: (pid 30075) 76861s; run: log: (pid 29674) 76896s
 | 
				
			||||||
#### Configuring the replica Redis instances
 | 
					#### Configuring the replica Redis instances
 | 
				
			||||||
 | 
					
 | 
				
			||||||
1. SSH in to the **replica** Redis server.
 | 
					1. SSH in to the **replica** Redis server.
 | 
				
			||||||
1. [Download/install](https://about.gitlab.com/install/) the Omnibus GitLab
 | 
					1. [Download and install](https://about.gitlab.com/install/) the Omnibus GitLab
 | 
				
			||||||
   package you want using **steps 1 and 2** from the GitLab downloads page.
 | 
					   package of your choice. Be sure to both follow _only_ installation steps 1 and 2
 | 
				
			||||||
   - Make sure you select the correct Omnibus package, with the same version
 | 
					   on the page, and to select the correct Omnibus GitLab package, with the same version
 | 
				
			||||||
     and type (Community, Enterprise editions) of your current install.
 | 
					   and type (Community or Enterprise editions) as your current install.
 | 
				
			||||||
   - Do not complete any other steps on the download page.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
1. Edit `/etc/gitlab/gitlab.rb` and add the contents:
 | 
					1. Edit `/etc/gitlab/gitlab.rb` and add the contents:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
   ```ruby
 | 
					   ```ruby
 | 
				
			||||||
| 
						 | 
					@ -457,13 +453,10 @@ clients to report `NOAUTH Authentication required.`.
 | 
				
			||||||
To configure the Sentinel:
 | 
					To configure the Sentinel:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
1. SSH in to the server that will host Consul/Sentinel.
 | 
					1. SSH in to the server that will host Consul/Sentinel.
 | 
				
			||||||
1. [Download/install](https://about.gitlab.com/install/) the
 | 
					1. [Download and install](https://about.gitlab.com/install/) the Omnibus GitLab
 | 
				
			||||||
   Omnibus GitLab Enterprise Edition package using **steps 1 and 2** from the
 | 
					   package of your choice. Be sure to both follow _only_ installation steps 1 and 2
 | 
				
			||||||
   GitLab downloads page.
 | 
					   on the page, and to select the correct Omnibus GitLab package, with the same version
 | 
				
			||||||
   - Make sure you select the correct Omnibus package, with the same version
 | 
					   and type (Community or Enterprise editions) as your current install.
 | 
				
			||||||
     the GitLab application is running.
 | 
					 | 
				
			||||||
   - Do not complete any other steps on the download page.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
1. Edit `/etc/gitlab/gitlab.rb` and add the contents:
 | 
					1. Edit `/etc/gitlab/gitlab.rb` and add the contents:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
   ```ruby
 | 
					   ```ruby
 | 
				
			||||||
| 
						 | 
					@ -1115,8 +1108,8 @@ and that your GitLab installation has three repository storages:
 | 
				
			||||||
On each node:
 | 
					On each node:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
1. [Download and install](https://about.gitlab.com/install/) the Omnibus GitLab
 | 
					1. [Download and install](https://about.gitlab.com/install/) the Omnibus GitLab
 | 
				
			||||||
   package you want (based on _steps 1 and 2_ on the GitLab downloads page), but
 | 
					   package of your choice. Be sure to follow _only_ installation steps 1 and 2
 | 
				
			||||||
   _without_ providing the `EXTERNAL_URL` value.
 | 
					   on the page, and _do not_ provide the `EXTERNAL_URL` value.
 | 
				
			||||||
1. Edit `/etc/gitlab/gitlab.rb` to configure the storage paths, enable
 | 
					1. Edit `/etc/gitlab/gitlab.rb` to configure the storage paths, enable
 | 
				
			||||||
   the network listener, and configure the token:
 | 
					   the network listener, and configure the token:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1310,9 +1303,9 @@ The following IPs will be used as an example:
 | 
				
			||||||
To configure the Sidekiq nodes, one each one:
 | 
					To configure the Sidekiq nodes, one each one:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
1. SSH in to the Sidekiq server.
 | 
					1. SSH in to the Sidekiq server.
 | 
				
			||||||
1. [Download/install](https://about.gitlab.com/install/) the Omnibus GitLab package
 | 
					1. [Download and install](https://about.gitlab.com/install/) the Omnibus GitLab
 | 
				
			||||||
you want using steps 1 and 2 from the GitLab downloads page.
 | 
					   package of your choice. Be sure to follow _only_ installation steps 1 and 2
 | 
				
			||||||
**Do not complete any other steps on the download page.**
 | 
					   on the page.
 | 
				
			||||||
1. Open `/etc/gitlab/gitlab.rb` with your editor:
 | 
					1. Open `/etc/gitlab/gitlab.rb` with your editor:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
   ```ruby
 | 
					   ```ruby
 | 
				
			||||||
| 
						 | 
					@ -1458,9 +1451,9 @@ On each node perform the following:
 | 
				
			||||||
      mkdir -p /var/opt/gitlab/.ssh /var/opt/gitlab/gitlab-rails/uploads /var/opt/gitlab/gitlab-rails/shared /var/opt/gitlab/gitlab-ci/builds /var/opt/gitlab/git-data
 | 
					      mkdir -p /var/opt/gitlab/.ssh /var/opt/gitlab/gitlab-rails/uploads /var/opt/gitlab/gitlab-rails/shared /var/opt/gitlab/gitlab-ci/builds /var/opt/gitlab/git-data
 | 
				
			||||||
      ```
 | 
					      ```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
1. Download and install Omnibus GitLab using **steps 1 and 2** from
 | 
					1. [Download and install](https://about.gitlab.com/install/) the Omnibus GitLab
 | 
				
			||||||
   [GitLab downloads](https://about.gitlab.com/install/). Do not complete other
 | 
					   package of your choice. Be sure to follow _only_ installation steps 1 and 2
 | 
				
			||||||
   steps on the download page.
 | 
					   on the page.
 | 
				
			||||||
1. Create or edit `/etc/gitlab/gitlab.rb` and use the following configuration.
 | 
					1. Create or edit `/etc/gitlab/gitlab.rb` and use the following configuration.
 | 
				
			||||||
   To maintain uniformity of links across nodes, the `external_url`
 | 
					   To maintain uniformity of links across nodes, the `external_url`
 | 
				
			||||||
   on the application server should point to the external URL that users will use
 | 
					   on the application server should point to the external URL that users will use
 | 
				
			||||||
| 
						 | 
					@ -1631,9 +1624,9 @@ running [Prometheus](../monitoring/prometheus/index.md) and
 | 
				
			||||||
[Grafana](../monitoring/performance/grafana_configuration.md):
 | 
					[Grafana](../monitoring/performance/grafana_configuration.md):
 | 
				
			||||||
 | 
					
 | 
				
			||||||
1. SSH in to the Monitoring node.
 | 
					1. SSH in to the Monitoring node.
 | 
				
			||||||
1. [Download/install](https://about.gitlab.com/install/) the Omnibus GitLab
 | 
					1. [Download and install](https://about.gitlab.com/install/) the Omnibus GitLab
 | 
				
			||||||
   package you want using **steps 1 and 2** from the GitLab downloads page.
 | 
					   package of your choice. Be sure to follow _only_ installation steps 1 and 2
 | 
				
			||||||
   Do not complete any other steps on the download page.
 | 
					   on the page.
 | 
				
			||||||
1. Edit `/etc/gitlab/gitlab.rb` and add the contents:
 | 
					1. Edit `/etc/gitlab/gitlab.rb` and add the contents:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
   ```ruby
 | 
					   ```ruby
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -249,13 +249,10 @@ with the other servers.
 | 
				
			||||||
To configure Consul:
 | 
					To configure Consul:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
1. SSH in to the server that will host Consul.
 | 
					1. SSH in to the server that will host Consul.
 | 
				
			||||||
1. [Download/install](https://about.gitlab.com/install/) the
 | 
					1. [Download and install](https://about.gitlab.com/install/) the Omnibus GitLab
 | 
				
			||||||
   Omnibus GitLab Enterprise Edition package using **steps 1 and 2** from the
 | 
					   package of your choice. Be sure to both follow _only_ installation steps 1 and 2
 | 
				
			||||||
   GitLab downloads page.
 | 
					   on the page, and to select the correct Omnibus GitLab package, with the same version
 | 
				
			||||||
   - Make sure you select the correct Omnibus package, with the same version
 | 
					   and type (Community or Enterprise editions) as your current install.
 | 
				
			||||||
     the GitLab application is running.
 | 
					 | 
				
			||||||
   - Do not complete any other steps on the download page.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
1. Edit `/etc/gitlab/gitlab.rb` and add the contents:
 | 
					1. Edit `/etc/gitlab/gitlab.rb` and add the contents:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
   ```ruby
 | 
					   ```ruby
 | 
				
			||||||
| 
						 | 
					@ -816,12 +813,10 @@ a node and change its status from primary to replica (and vice versa).
 | 
				
			||||||
#### Configure the primary Redis Cache node
 | 
					#### Configure the primary Redis Cache node
 | 
				
			||||||
 | 
					
 | 
				
			||||||
1. SSH in to the **Primary** Redis server.
 | 
					1. SSH in to the **Primary** Redis server.
 | 
				
			||||||
1. [Download/install](https://about.gitlab.com/install/) the Omnibus GitLab
 | 
					1. [Download and install](https://about.gitlab.com/install/) the Omnibus GitLab
 | 
				
			||||||
   package you want using **steps 1 and 2** from the GitLab downloads page.
 | 
					   package of your choice. Be sure to both follow _only_ installation steps 1 and 2
 | 
				
			||||||
   - Make sure you select the correct Omnibus package, with the same version
 | 
					   on the page, and to select the correct Omnibus GitLab package, with the same version
 | 
				
			||||||
     and type (Community, Enterprise editions) of your current install.
 | 
					   and type (Community or Enterprise editions) as your current install.
 | 
				
			||||||
   - Do not complete any other steps on the download page.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
1. Edit `/etc/gitlab/gitlab.rb` and add the contents:
 | 
					1. Edit `/etc/gitlab/gitlab.rb` and add the contents:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
   ```ruby
 | 
					   ```ruby
 | 
				
			||||||
| 
						 | 
					@ -872,12 +867,10 @@ You can specify multiple roles, like sentinel and Redis, as:
 | 
				
			||||||
#### Configure the replica Redis Cache nodes
 | 
					#### Configure the replica Redis Cache nodes
 | 
				
			||||||
 | 
					
 | 
				
			||||||
1. SSH in to the **replica** Redis server.
 | 
					1. SSH in to the **replica** Redis server.
 | 
				
			||||||
1. [Download/install](https://about.gitlab.com/install/) the Omnibus GitLab
 | 
					1. [Download and install](https://about.gitlab.com/install/) the Omnibus GitLab
 | 
				
			||||||
   package you want using **steps 1 and 2** from the GitLab downloads page.
 | 
					   package of your choice. Be sure to both follow _only_ installation steps 1 and 2
 | 
				
			||||||
   - Make sure you select the correct Omnibus package, with the same version
 | 
					   on the page, and to select the correct Omnibus GitLab package, with the same version
 | 
				
			||||||
     and type (Community, Enterprise editions) of your current install.
 | 
					   and type (Community or Enterprise editions) as your current install.
 | 
				
			||||||
   - Do not complete any other steps on the download page.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
1. Edit `/etc/gitlab/gitlab.rb` and add the contents:
 | 
					1. Edit `/etc/gitlab/gitlab.rb` and add the contents:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
   ```ruby
 | 
					   ```ruby
 | 
				
			||||||
| 
						 | 
					@ -966,13 +959,10 @@ clients to report `NOAUTH Authentication required.`.
 | 
				
			||||||
To configure the Sentinel Cache server:
 | 
					To configure the Sentinel Cache server:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
1. SSH in to the server that will host Consul/Sentinel.
 | 
					1. SSH in to the server that will host Consul/Sentinel.
 | 
				
			||||||
1. [Download/install](https://about.gitlab.com/install/) the
 | 
					1. [Download and install](https://about.gitlab.com/install/) the Omnibus GitLab
 | 
				
			||||||
   Omnibus GitLab Enterprise Edition package using **steps 1 and 2** from the
 | 
					   package of your choice. Be sure to both follow _only_ installation steps 1 and 2
 | 
				
			||||||
   GitLab downloads page.
 | 
					   on the page, and to select the correct Omnibus GitLab package, with the same version
 | 
				
			||||||
   - Make sure you select the correct Omnibus package, with the same version
 | 
					   and type (Community or Enterprise editions) as your current install.
 | 
				
			||||||
     the GitLab application is running.
 | 
					 | 
				
			||||||
   - Do not complete any other steps on the download page.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
1. Edit `/etc/gitlab/gitlab.rb` and add the contents:
 | 
					1. Edit `/etc/gitlab/gitlab.rb` and add the contents:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
   ```ruby
 | 
					   ```ruby
 | 
				
			||||||
| 
						 | 
					@ -1082,12 +1072,10 @@ a node and change its status from primary to replica (and vice versa).
 | 
				
			||||||
#### Configure the primary Redis Queues node
 | 
					#### Configure the primary Redis Queues node
 | 
				
			||||||
 | 
					
 | 
				
			||||||
1. SSH in to the **Primary** Redis server.
 | 
					1. SSH in to the **Primary** Redis server.
 | 
				
			||||||
1. [Download/install](https://about.gitlab.com/install/) the Omnibus GitLab
 | 
					1. [Download and install](https://about.gitlab.com/install/) the Omnibus GitLab
 | 
				
			||||||
   package you want using **steps 1 and 2** from the GitLab downloads page.
 | 
					   package of your choice. Be sure to both follow _only_ installation steps 1 and 2
 | 
				
			||||||
   - Make sure you select the correct Omnibus package, with the same version
 | 
					   on the page, and to select the correct Omnibus GitLab package, with the same version
 | 
				
			||||||
     and type (Community, Enterprise editions) of your current install.
 | 
					   and type (Community or Enterprise editions) as your current install.
 | 
				
			||||||
   - Do not complete any other steps on the download page.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
1. Edit `/etc/gitlab/gitlab.rb` and add the contents:
 | 
					1. Edit `/etc/gitlab/gitlab.rb` and add the contents:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
   ```ruby
 | 
					   ```ruby
 | 
				
			||||||
| 
						 | 
					@ -1143,12 +1131,10 @@ You can specify multiple roles, like sentinel and Redis, as:
 | 
				
			||||||
#### Configure the replica Redis Queues nodes
 | 
					#### Configure the replica Redis Queues nodes
 | 
				
			||||||
 | 
					
 | 
				
			||||||
1. SSH in to the **replica** Redis Queue server.
 | 
					1. SSH in to the **replica** Redis Queue server.
 | 
				
			||||||
1. [Download/install](https://about.gitlab.com/install/) the Omnibus GitLab
 | 
					1. [Download and install](https://about.gitlab.com/install/) the Omnibus GitLab
 | 
				
			||||||
   package you want using **steps 1 and 2** from the GitLab downloads page.
 | 
					   package of your choice. Be sure to both follow _only_ installation steps 1 and 2
 | 
				
			||||||
   - Make sure you select the correct Omnibus package, with the same version
 | 
					   on the page, and to select the correct Omnibus GitLab package, with the same version
 | 
				
			||||||
     and type (Community, Enterprise editions) of your current install.
 | 
					   and type (Community or Enterprise editions) as your current install.
 | 
				
			||||||
   - Do not complete any other steps on the download page.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
1. Edit `/etc/gitlab/gitlab.rb` and add the contents:
 | 
					1. Edit `/etc/gitlab/gitlab.rb` and add the contents:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
   ```ruby
 | 
					   ```ruby
 | 
				
			||||||
| 
						 | 
					@ -1237,13 +1223,10 @@ clients to report `NOAUTH Authentication required.`.
 | 
				
			||||||
To configure the Sentinel Queues server:
 | 
					To configure the Sentinel Queues server:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
1. SSH in to the server that will host Sentinel.
 | 
					1. SSH in to the server that will host Sentinel.
 | 
				
			||||||
1. [Download/install](https://about.gitlab.com/install/) the
 | 
					1. [Download and install](https://about.gitlab.com/install/) the Omnibus GitLab
 | 
				
			||||||
   Omnibus GitLab Enterprise Edition package using **steps 1 and 2** from the
 | 
					   package of your choice. Be sure to both follow _only_ installation steps 1 and 2
 | 
				
			||||||
   GitLab downloads page.
 | 
					   on the page, and to select the correct Omnibus GitLab package, with the same version
 | 
				
			||||||
   - Make sure you select the correct Omnibus package, with the same version
 | 
					   and type (Community or Enterprise editions) as your current install.
 | 
				
			||||||
     the GitLab application is running.
 | 
					 | 
				
			||||||
   - Do not complete any other steps on the download page.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
1. Edit `/etc/gitlab/gitlab.rb` and add the contents:
 | 
					1. Edit `/etc/gitlab/gitlab.rb` and add the contents:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
   ```ruby
 | 
					   ```ruby
 | 
				
			||||||
| 
						 | 
					@ -1402,8 +1385,8 @@ and that your GitLab installation has three repository storages:
 | 
				
			||||||
On each node:
 | 
					On each node:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
1. [Download and install](https://about.gitlab.com/install/) the Omnibus GitLab
 | 
					1. [Download and install](https://about.gitlab.com/install/) the Omnibus GitLab
 | 
				
			||||||
   package you want (based on _steps 1 and 2_ on the GitLab downloads page), but
 | 
					   package of your choice. Be sure to follow _only_ installation steps 1 and 2
 | 
				
			||||||
   _without_ providing the `EXTERNAL_URL` value.
 | 
					   on the page, and _do not_ provide the `EXTERNAL_URL` value.
 | 
				
			||||||
1. Edit `/etc/gitlab/gitlab.rb` to configure the storage paths, enable
 | 
					1. Edit `/etc/gitlab/gitlab.rb` to configure the storage paths, enable
 | 
				
			||||||
   the network listener, and configure the token:
 | 
					   the network listener, and configure the token:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1566,9 +1549,9 @@ The following IPs will be used as an example:
 | 
				
			||||||
To configure the Sidekiq nodes, on each one:
 | 
					To configure the Sidekiq nodes, on each one:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
1. SSH in to the Sidekiq server.
 | 
					1. SSH in to the Sidekiq server.
 | 
				
			||||||
1. [Download/install](https://about.gitlab.com/install/) the Omnibus GitLab package
 | 
					1. [Download and install](https://about.gitlab.com/install/) the Omnibus GitLab
 | 
				
			||||||
you want using steps 1 and 2 from the GitLab downloads page.
 | 
					   package of your choice. Be sure to follow _only_ installation steps 1 and 2
 | 
				
			||||||
**Do not complete any other steps on the download page.**
 | 
					   on the page.
 | 
				
			||||||
1. Open `/etc/gitlab/gitlab.rb` with your editor:
 | 
					1. Open `/etc/gitlab/gitlab.rb` with your editor:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
   ```ruby
 | 
					   ```ruby
 | 
				
			||||||
| 
						 | 
					@ -1702,10 +1685,9 @@ The following IPs will be used as an example:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
On each node perform the following:
 | 
					On each node perform the following:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
1. Download and install Omnibus GitLab using **steps 1 and 2** from
 | 
					1. [Download and install](https://about.gitlab.com/install/) the Omnibus GitLab
 | 
				
			||||||
   [GitLab downloads](https://about.gitlab.com/install/). Do not complete other
 | 
					   package of your choice. Be sure to follow _only_ installation steps 1 and 2
 | 
				
			||||||
   steps on the download page.
 | 
					   on the page.
 | 
				
			||||||
 | 
					 | 
				
			||||||
1. Copy the `/etc/gitlab/gitlab-secrets.json` file from your Consul server, and replace
 | 
					1. Copy the `/etc/gitlab/gitlab-secrets.json` file from your Consul server, and replace
 | 
				
			||||||
   the file of the same name on this server. If that file is not on this server,
 | 
					   the file of the same name on this server. If that file is not on this server,
 | 
				
			||||||
   add the file from your Consul server to this server.
 | 
					   add the file from your Consul server to this server.
 | 
				
			||||||
| 
						 | 
					@ -1906,10 +1888,9 @@ The following IP will be used as an example:
 | 
				
			||||||
To configure the Monitoring node:
 | 
					To configure the Monitoring node:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
1. SSH in to the Monitoring node.
 | 
					1. SSH in to the Monitoring node.
 | 
				
			||||||
1. [Download/install](https://about.gitlab.com/install/) the Omnibus GitLab
 | 
					1. [Download and install](https://about.gitlab.com/install/) the Omnibus GitLab
 | 
				
			||||||
   package you want using **steps 1 and 2** from the GitLab downloads page.
 | 
					   package of your choice. Be sure to follow _only_ installation steps 1 and 2
 | 
				
			||||||
   Do not complete any other steps on the download page.
 | 
					   on the page.
 | 
				
			||||||
 | 
					 | 
				
			||||||
1. Copy the `/etc/gitlab/gitlab-secrets.json` file from your Consul server, and replace
 | 
					1. Copy the `/etc/gitlab/gitlab-secrets.json` file from your Consul server, and replace
 | 
				
			||||||
   the file of the same name on this server. If that file is not on this server,
 | 
					   the file of the same name on this server. If that file is not on this server,
 | 
				
			||||||
   add the file from your Consul server to this server.
 | 
					   add the file from your Consul server to this server.
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -285,12 +285,10 @@ a node and change its status from primary to replica (and vice versa).
 | 
				
			||||||
#### Configuring the primary Redis instance
 | 
					#### Configuring the primary Redis instance
 | 
				
			||||||
 | 
					
 | 
				
			||||||
1. SSH in to the **Primary** Redis server.
 | 
					1. SSH in to the **Primary** Redis server.
 | 
				
			||||||
1. [Download/install](https://about.gitlab.com/install/) the Omnibus GitLab
 | 
					1. [Download and install](https://about.gitlab.com/install/) the Omnibus GitLab
 | 
				
			||||||
   package you want using **steps 1 and 2** from the GitLab downloads page.
 | 
					   package of your choice. Be sure to both follow _only_ installation steps 1 and 2
 | 
				
			||||||
   - Make sure you select the correct Omnibus package, with the same version
 | 
					   on the page, and to select the correct Omnibus GitLab package, with the same version
 | 
				
			||||||
     and type (Community, Enterprise editions) of your current install.
 | 
					   and type (Community or Enterprise editions) as your current install.
 | 
				
			||||||
   - Do not complete any other steps on the download page.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
1. Edit `/etc/gitlab/gitlab.rb` and add the contents:
 | 
					1. Edit `/etc/gitlab/gitlab.rb` and add the contents:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
   ```ruby
 | 
					   ```ruby
 | 
				
			||||||
| 
						 | 
					@ -363,12 +361,10 @@ run: redis-exporter: (pid 30075) 76861s; run: log: (pid 29674) 76896s
 | 
				
			||||||
#### Configuring the replica Redis instances
 | 
					#### Configuring the replica Redis instances
 | 
				
			||||||
 | 
					
 | 
				
			||||||
1. SSH in to the **replica** Redis server.
 | 
					1. SSH in to the **replica** Redis server.
 | 
				
			||||||
1. [Download/install](https://about.gitlab.com/install/) the Omnibus GitLab
 | 
					1. [Download and install](https://about.gitlab.com/install/) the Omnibus GitLab
 | 
				
			||||||
   package you want using **steps 1 and 2** from the GitLab downloads page.
 | 
					   package of your choice. Be sure to both follow _only_ installation steps 1 and 2
 | 
				
			||||||
   - Make sure you select the correct Omnibus package, with the same version
 | 
					   on the page, and to select the correct Omnibus GitLab package, with the same version
 | 
				
			||||||
     and type (Community, Enterprise editions) of your current install.
 | 
					   and type (Community or Enterprise editions) as your current install.
 | 
				
			||||||
   - Do not complete any other steps on the download page.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
1. Edit `/etc/gitlab/gitlab.rb` and add the contents:
 | 
					1. Edit `/etc/gitlab/gitlab.rb` and add the contents:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
   ```ruby
 | 
					   ```ruby
 | 
				
			||||||
| 
						 | 
					@ -457,13 +453,10 @@ clients to report `NOAUTH Authentication required.`.
 | 
				
			||||||
To configure the Sentinel:
 | 
					To configure the Sentinel:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
1. SSH in to the server that will host Consul/Sentinel.
 | 
					1. SSH in to the server that will host Consul/Sentinel.
 | 
				
			||||||
1. [Download/install](https://about.gitlab.com/install/) the
 | 
					1. [Download and install](https://about.gitlab.com/install/) the Omnibus GitLab
 | 
				
			||||||
   Omnibus GitLab Enterprise Edition package using **steps 1 and 2** from the
 | 
					   package of your choice. Be sure to both follow _only_ installation steps 1 and 2
 | 
				
			||||||
   GitLab downloads page.
 | 
					   on the page, and to select the correct Omnibus GitLab package, with the same version
 | 
				
			||||||
   - Make sure you select the correct Omnibus package, with the same version
 | 
					   and type (Community or Enterprise editions) as your current install.
 | 
				
			||||||
     the GitLab application is running.
 | 
					 | 
				
			||||||
   - Do not complete any other steps on the download page.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
1. Edit `/etc/gitlab/gitlab.rb` and add the contents:
 | 
					1. Edit `/etc/gitlab/gitlab.rb` and add the contents:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
   ```ruby
 | 
					   ```ruby
 | 
				
			||||||
| 
						 | 
					@ -1114,8 +1107,8 @@ and that your GitLab installation has three repository storages:
 | 
				
			||||||
On each node:
 | 
					On each node:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
1. [Download and install](https://about.gitlab.com/install/) the Omnibus GitLab
 | 
					1. [Download and install](https://about.gitlab.com/install/) the Omnibus GitLab
 | 
				
			||||||
   package you want (based on _steps 1 and 2_ on the GitLab downloads page), but
 | 
					   package of your choice. Be sure to follow _only_ installation steps 1 and 2
 | 
				
			||||||
   _without_ providing the `EXTERNAL_URL` value.
 | 
					   on the page, and _do not_ provide the `EXTERNAL_URL` value.
 | 
				
			||||||
1. Edit `/etc/gitlab/gitlab.rb` to configure the storage paths, enable
 | 
					1. Edit `/etc/gitlab/gitlab.rb` to configure the storage paths, enable
 | 
				
			||||||
   the network listener, and configure the token:
 | 
					   the network listener, and configure the token:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1309,9 +1302,9 @@ The following IPs will be used as an example:
 | 
				
			||||||
To configure the Sidekiq nodes, one each one:
 | 
					To configure the Sidekiq nodes, one each one:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
1. SSH in to the Sidekiq server.
 | 
					1. SSH in to the Sidekiq server.
 | 
				
			||||||
1. [Download/install](https://about.gitlab.com/install/) the Omnibus GitLab package
 | 
					1. [Download and install](https://about.gitlab.com/install/) the Omnibus GitLab
 | 
				
			||||||
you want using steps 1 and 2 from the GitLab downloads page.
 | 
					   package of your choice. Be sure to follow _only_ installation steps 1 and 2
 | 
				
			||||||
**Do not complete any other steps on the download page.**
 | 
					   on the page.
 | 
				
			||||||
1. Open `/etc/gitlab/gitlab.rb` with your editor:
 | 
					1. Open `/etc/gitlab/gitlab.rb` with your editor:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
   ```ruby
 | 
					   ```ruby
 | 
				
			||||||
| 
						 | 
					@ -1457,9 +1450,9 @@ On each node perform the following:
 | 
				
			||||||
      mkdir -p /var/opt/gitlab/.ssh /var/opt/gitlab/gitlab-rails/uploads /var/opt/gitlab/gitlab-rails/shared /var/opt/gitlab/gitlab-ci/builds /var/opt/gitlab/git-data
 | 
					      mkdir -p /var/opt/gitlab/.ssh /var/opt/gitlab/gitlab-rails/uploads /var/opt/gitlab/gitlab-rails/shared /var/opt/gitlab/gitlab-ci/builds /var/opt/gitlab/git-data
 | 
				
			||||||
      ```
 | 
					      ```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
1. Download and install Omnibus GitLab using **steps 1 and 2** from
 | 
					1. [Download and install](https://about.gitlab.com/install/) the Omnibus GitLab
 | 
				
			||||||
   [GitLab downloads](https://about.gitlab.com/install/). Do not complete other
 | 
					   package of your choice. Be sure to follow _only_ installation steps 1 and 2
 | 
				
			||||||
   steps on the download page.
 | 
					   on the page.
 | 
				
			||||||
1. Create or edit `/etc/gitlab/gitlab.rb` and use the following configuration.
 | 
					1. Create or edit `/etc/gitlab/gitlab.rb` and use the following configuration.
 | 
				
			||||||
   To maintain uniformity of links across nodes, the `external_url`
 | 
					   To maintain uniformity of links across nodes, the `external_url`
 | 
				
			||||||
   on the application server should point to the external URL that users will use
 | 
					   on the application server should point to the external URL that users will use
 | 
				
			||||||
| 
						 | 
					@ -1630,9 +1623,9 @@ running [Prometheus](../monitoring/prometheus/index.md) and
 | 
				
			||||||
[Grafana](../monitoring/performance/grafana_configuration.md):
 | 
					[Grafana](../monitoring/performance/grafana_configuration.md):
 | 
				
			||||||
 | 
					
 | 
				
			||||||
1. SSH in to the Monitoring node.
 | 
					1. SSH in to the Monitoring node.
 | 
				
			||||||
1. [Download/install](https://about.gitlab.com/install/) the Omnibus GitLab
 | 
					1. [Download and install](https://about.gitlab.com/install/) the Omnibus GitLab
 | 
				
			||||||
   package you want using **steps 1 and 2** from the GitLab downloads page.
 | 
					   package of your choice. Be sure to follow _only_ installation steps 1 and 2
 | 
				
			||||||
   Do not complete any other steps on the download page.
 | 
					   on the page.
 | 
				
			||||||
1. Edit `/etc/gitlab/gitlab.rb` and add the contents:
 | 
					1. Edit `/etc/gitlab/gitlab.rb` and add the contents:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
   ```ruby
 | 
					   ```ruby
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -38,6 +38,7 @@ The following API resources are available in the project context:
 | 
				
			||||||
| [Issues Statistics](issues_statistics.md)                           | `/projects/:id/issues_statistics` (also available for groups and standalone)                                                                                                                          |
 | 
					| [Issues Statistics](issues_statistics.md)                           | `/projects/:id/issues_statistics` (also available for groups and standalone)                                                                                                                          |
 | 
				
			||||||
| [Issue boards](boards.md)                                           | `/projects/:id/boards`                                                                                                                                                                                |
 | 
					| [Issue boards](boards.md)                                           | `/projects/:id/boards`                                                                                                                                                                                |
 | 
				
			||||||
| [Issue links](issue_links.md) **(STARTER)**                         | `/projects/:id/issues/.../links`                                                                                                                                                                      |
 | 
					| [Issue links](issue_links.md) **(STARTER)**                         | `/projects/:id/issues/.../links`                                                                                                                                                                      |
 | 
				
			||||||
 | 
					| [Iterations](iterations.md) **(STARTER)**                           | `/projects/:id/iterations` (also available for groups)                                                                                                                                                                     |
 | 
				
			||||||
| [Jobs](jobs.md)                                                     | `/projects/:id/jobs`, `/projects/:id/pipelines/.../jobs`                                                                                                                                              |
 | 
					| [Jobs](jobs.md)                                                     | `/projects/:id/jobs`, `/projects/:id/pipelines/.../jobs`                                                                                                                                              |
 | 
				
			||||||
| [Labels](labels.md)                                                 | `/projects/:id/labels`                                                                                                                                                                                |
 | 
					| [Labels](labels.md)                                                 | `/projects/:id/labels`                                                                                                                                                                                |
 | 
				
			||||||
| [Managed licenses](managed_licenses.md) **(ULTIMATE)**              | `/projects/:id/managed_licenses`                                                                                                                                                                      |
 | 
					| [Managed licenses](managed_licenses.md) **(ULTIMATE)**              | `/projects/:id/managed_licenses`                                                                                                                                                                      |
 | 
				
			||||||
| 
						 | 
					@ -97,6 +98,7 @@ The following API resources are available in the group context:
 | 
				
			||||||
| [Groups](groups.md)                                              | `/groups`, `/groups/.../subgroups`                                               |
 | 
					| [Groups](groups.md)                                              | `/groups`, `/groups/.../subgroups`                                               |
 | 
				
			||||||
| [Group badges](group_badges.md)                                  | `/groups/:id/badges`                                                             |
 | 
					| [Group badges](group_badges.md)                                  | `/groups/:id/badges`                                                             |
 | 
				
			||||||
| [Group issue boards](group_boards.md)                            | `/groups/:id/boards`                                                             |
 | 
					| [Group issue boards](group_boards.md)                            | `/groups/:id/boards`                                                             |
 | 
				
			||||||
 | 
					| [Group iterations](group_iterations.md) **(STARTER)**            | `/groups/:id/iterations` (also available for projects)                           |
 | 
				
			||||||
| [Group labels](group_labels.md)                                  | `/groups/:id/labels`                                                             |
 | 
					| [Group labels](group_labels.md)                                  | `/groups/:id/labels`                                                             |
 | 
				
			||||||
| [Group-level variables](group_level_variables.md)                | `/groups/:id/variables`                                                          |
 | 
					| [Group-level variables](group_level_variables.md)                | `/groups/:id/variables`                                                          |
 | 
				
			||||||
| [Group milestones](group_milestones.md)                          | `/groups/:id/milestones`                                                         |
 | 
					| [Group milestones](group_milestones.md)                          | `/groups/:id/milestones`                                                         |
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,55 @@
 | 
				
			||||||
 | 
					---
 | 
				
			||||||
 | 
					stage: Plan
 | 
				
			||||||
 | 
					group: Project Management
 | 
				
			||||||
 | 
					info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#designated-technical-writers
 | 
				
			||||||
 | 
					---
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Group iterations API **(STARTER)**
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					> [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/118742) in [GitLab Starter](https://about.gitlab.com/pricing/) 13.5.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					This page describes the group iterations API.
 | 
				
			||||||
 | 
					There's a separate [project iterations API](./iterations.md) page.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## List group iterations
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Returns a list of group iterations.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					```plaintext
 | 
				
			||||||
 | 
					GET /groups/:id/iterations
 | 
				
			||||||
 | 
					GET /groups/:id/iterations?state=opened
 | 
				
			||||||
 | 
					GET /groups/:id/iterations?state=closed
 | 
				
			||||||
 | 
					GET /groups/:id/iterations?title=1.0
 | 
				
			||||||
 | 
					GET /groups/:id/iterations?search=version
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					| Attribute           | Type    | Required | Description |
 | 
				
			||||||
 | 
					| ------------------- | ------- | -------- | ----------- |
 | 
				
			||||||
 | 
					| `state`             | string  | no       | Return only `opened`, `upcoming`, `started`, `closed`, or `all` iterations. Defaults to `all`. |
 | 
				
			||||||
 | 
					| `search`            | string  | no       | Return only iterations with a title matching the provided string.                              |
 | 
				
			||||||
 | 
					| `include_ancestors` | boolean | no       | Include iterations from parent group and its ancestors. Defaults to `true`.                    |
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Example request:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					```shell
 | 
				
			||||||
 | 
					curl --header "PRIVATE-TOKEN: <your_access_token>" "https://gitlab.example.com/api/v4/groups/5/iterations"
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Example response:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					```json
 | 
				
			||||||
 | 
					[
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    "id": 53,
 | 
				
			||||||
 | 
					    "iid": 13,
 | 
				
			||||||
 | 
					    "group_id": 5,
 | 
				
			||||||
 | 
					    "title": "Iteration II",
 | 
				
			||||||
 | 
					    "description": "Ipsum Lorem ipsum",
 | 
				
			||||||
 | 
					    "state": 2,
 | 
				
			||||||
 | 
					    "created_at": "2020-01-27T05:07:12.573Z",
 | 
				
			||||||
 | 
					    "updated_at": "2020-01-27T05:07:12.573Z",
 | 
				
			||||||
 | 
					    "due_date": "2020-02-01",
 | 
				
			||||||
 | 
					    "start_date": "2020-02-14"
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					]
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
| 
						 | 
					@ -9,7 +9,7 @@ info: To determine the technical writer assigned to the Stage/Group associated w
 | 
				
			||||||
> [Introduced](https://gitlab.com/gitlab-org/gitlab-foss/-/merge_requests/12819) in GitLab 9.5.
 | 
					> [Introduced](https://gitlab.com/gitlab-org/gitlab-foss/-/merge_requests/12819) in GitLab 9.5.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
This page describes the group milestones API.
 | 
					This page describes the group milestones API.
 | 
				
			||||||
There's a separate [project milestones API](./group_milestones.md) page.
 | 
					There's a separate [project milestones API](./milestones.md) page.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
## List group milestones
 | 
					## List group milestones
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,57 @@
 | 
				
			||||||
 | 
					---
 | 
				
			||||||
 | 
					stage: Plan
 | 
				
			||||||
 | 
					group: Project Management
 | 
				
			||||||
 | 
					info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#designated-technical-writers
 | 
				
			||||||
 | 
					---
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Project iterations API **(STARTER)**
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					> [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/118742) in [GitLab Starter](https://about.gitlab.com/pricing/) 13.5.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					This page describes the project iterations API.
 | 
				
			||||||
 | 
					There's a separate [group iterations API](./group_iterations.md) page.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					As of GitLab 13.5, we don't have project-level iterations, but you can use this endpoint to fetch the iterations of the project's ancestor groups.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## List project iterations
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Returns a list of project iterations.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					```plaintext
 | 
				
			||||||
 | 
					GET /projects/:id/iterations
 | 
				
			||||||
 | 
					GET /projects/:id/iterations?state=opened
 | 
				
			||||||
 | 
					GET /projects/:id/iterations?state=closed
 | 
				
			||||||
 | 
					GET /projects/:id/iterations?title=1.0
 | 
				
			||||||
 | 
					GET /projects/:id/iterations?search=version
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					| Attribute           | Type    | Required | Description |
 | 
				
			||||||
 | 
					| ------------------- | ------- | -------- | ----------- |
 | 
				
			||||||
 | 
					| `state`             | string  | no       | Return only `opened`, `upcoming`, `started`, `closed`, or `all` iterations. Defaults to `all`. |
 | 
				
			||||||
 | 
					| `search`            | string  | no       | Return only iterations with a title matching the provided string.                              |
 | 
				
			||||||
 | 
					| `include_ancestors` | boolean | no       | Include iterations from parent group and its ancestors. Defaults to `true`.                    |
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Example request:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					```shell
 | 
				
			||||||
 | 
					curl --header "PRIVATE-TOKEN: <your_access_token>" "https://gitlab.example.com/api/v4/projects/5/iterations"
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Example response:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					```json
 | 
				
			||||||
 | 
					[
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    "id": 53,
 | 
				
			||||||
 | 
					    "iid": 13,
 | 
				
			||||||
 | 
					    "group_id": 5,
 | 
				
			||||||
 | 
					    "title": "Iteration II",
 | 
				
			||||||
 | 
					    "description": "Ipsum Lorem ipsum",
 | 
				
			||||||
 | 
					    "state": 2,
 | 
				
			||||||
 | 
					    "created_at": "2020-01-27T05:07:12.573Z",
 | 
				
			||||||
 | 
					    "updated_at": "2020-01-27T05:07:12.573Z",
 | 
				
			||||||
 | 
					    "due_date": "2020-02-01",
 | 
				
			||||||
 | 
					    "start_date": "2020-02-14"
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					]
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
| 
						 | 
					@ -99,6 +99,14 @@ module API
 | 
				
			||||||
            @project = @container = access_checker.container
 | 
					            @project = @container = access_checker.container
 | 
				
			||||||
          end
 | 
					          end
 | 
				
			||||||
        end
 | 
					        end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        def validate_actor_key(actor, key_id)
 | 
				
			||||||
 | 
					          return 'Could not find a user without a key' unless key_id
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					          return 'Could not find the given key' unless actor.key
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					          'Could not find a user for the given key' unless actor.user
 | 
				
			||||||
 | 
					        end
 | 
				
			||||||
      end
 | 
					      end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      namespace 'internal' do
 | 
					      namespace 'internal' do
 | 
				
			||||||
| 
						 | 
					@ -163,28 +171,23 @@ module API
 | 
				
			||||||
            redis: redis_ping
 | 
					            redis: redis_ping
 | 
				
			||||||
          }
 | 
					          }
 | 
				
			||||||
        end
 | 
					        end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        post '/two_factor_recovery_codes' do
 | 
					        post '/two_factor_recovery_codes' do
 | 
				
			||||||
          status 200
 | 
					          status 200
 | 
				
			||||||
 | 
					
 | 
				
			||||||
          actor.update_last_used_at!
 | 
					          actor.update_last_used_at!
 | 
				
			||||||
          user = actor.user
 | 
					          user = actor.user
 | 
				
			||||||
 | 
					
 | 
				
			||||||
          if params[:key_id]
 | 
					          error_message = validate_actor_key(actor, params[:key_id])
 | 
				
			||||||
            unless actor.key
 | 
					 | 
				
			||||||
              break { success: false, message: 'Could not find the given key' }
 | 
					 | 
				
			||||||
            end
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
            if actor.key.is_a?(DeployKey)
 | 
					          if params[:user_id] && user.nil?
 | 
				
			||||||
              break { success: false, message: 'Deploy keys cannot be used to retrieve recovery codes' }
 | 
					 | 
				
			||||||
            end
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            unless user
 | 
					 | 
				
			||||||
              break { success: false, message: 'Could not find a user for the given key' }
 | 
					 | 
				
			||||||
            end
 | 
					 | 
				
			||||||
          elsif params[:user_id] && user.nil?
 | 
					 | 
				
			||||||
            break { success: false, message: 'Could not find the given user' }
 | 
					            break { success: false, message: 'Could not find the given user' }
 | 
				
			||||||
 | 
					          elsif error_message
 | 
				
			||||||
 | 
					            break { success: false, message: error_message }
 | 
				
			||||||
          end
 | 
					          end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					          break { success: false, message: 'Deploy keys cannot be used to retrieve recovery codes' } if actor.key.is_a?(DeployKey)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
          unless user.two_factor_enabled?
 | 
					          unless user.two_factor_enabled?
 | 
				
			||||||
            break { success: false, message: 'Two-factor authentication is not enabled for this user' }
 | 
					            break { success: false, message: 'Two-factor authentication is not enabled for this user' }
 | 
				
			||||||
          end
 | 
					          end
 | 
				
			||||||
| 
						 | 
					@ -204,20 +207,14 @@ module API
 | 
				
			||||||
          actor.update_last_used_at!
 | 
					          actor.update_last_used_at!
 | 
				
			||||||
          user = actor.user
 | 
					          user = actor.user
 | 
				
			||||||
 | 
					
 | 
				
			||||||
          if params[:key_id]
 | 
					          error_message = validate_actor_key(actor, params[:key_id])
 | 
				
			||||||
            unless actor.key
 | 
					 | 
				
			||||||
              break { success: false, message: 'Could not find the given key' }
 | 
					 | 
				
			||||||
            end
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
            if actor.key.is_a?(DeployKey)
 | 
					          break { success: false, message: 'Deploy keys cannot be used to create personal access tokens' } if actor.key.is_a?(DeployKey)
 | 
				
			||||||
              break { success: false, message: 'Deploy keys cannot be used to create personal access tokens' }
 | 
					 | 
				
			||||||
            end
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
            unless user
 | 
					          if params[:user_id] && user.nil?
 | 
				
			||||||
              break { success: false, message: 'Could not find a user for the given key' }
 | 
					 | 
				
			||||||
            end
 | 
					 | 
				
			||||||
          elsif params[:user_id] && user.nil?
 | 
					 | 
				
			||||||
            break { success: false, message: 'Could not find the given user' }
 | 
					            break { success: false, message: 'Could not find the given user' }
 | 
				
			||||||
 | 
					          elsif error_message
 | 
				
			||||||
 | 
					            break { success: false, message: error_message }
 | 
				
			||||||
          end
 | 
					          end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
          if params[:name].blank?
 | 
					          if params[:name].blank?
 | 
				
			||||||
| 
						 | 
					@ -269,6 +266,28 @@ module API
 | 
				
			||||||
 | 
					
 | 
				
			||||||
          present response, with: Entities::InternalPostReceive::Response
 | 
					          present response, with: Entities::InternalPostReceive::Response
 | 
				
			||||||
        end
 | 
					        end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        post '/two_factor_config' do
 | 
				
			||||||
 | 
					          status 200
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					          break { success: false } unless Feature.enabled?(:two_factor_for_cli)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					          actor.update_last_used_at!
 | 
				
			||||||
 | 
					          user = actor.user
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					          error_message = validate_actor_key(actor, params[:key_id])
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					          if error_message
 | 
				
			||||||
 | 
					            { success: false, message: error_message }
 | 
				
			||||||
 | 
					          elsif actor.key.is_a?(DeployKey)
 | 
				
			||||||
 | 
					            { success: true, two_factor_required: false }
 | 
				
			||||||
 | 
					          else
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					              success: true,
 | 
				
			||||||
 | 
					              two_factor_required: user.two_factor_enabled?
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					          end
 | 
				
			||||||
 | 
					        end
 | 
				
			||||||
      end
 | 
					      end
 | 
				
			||||||
    end
 | 
					    end
 | 
				
			||||||
  end
 | 
					  end
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -68,7 +68,7 @@ module Gitlab
 | 
				
			||||||
      end
 | 
					      end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      def self.manual_bridges_enabled?(project)
 | 
					      def self.manual_bridges_enabled?(project)
 | 
				
			||||||
        ::Feature.enabled?(:ci_manual_bridges, project, default_enabled: false)
 | 
					        ::Feature.enabled?(:ci_manual_bridges, project, default_enabled: true)
 | 
				
			||||||
      end
 | 
					      end
 | 
				
			||||||
    end
 | 
					    end
 | 
				
			||||||
  end
 | 
					  end
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -28440,6 +28440,9 @@ msgstr ""
 | 
				
			||||||
msgid "UsageQuota|%{help_link_start}Shared runners%{help_link_end} are disabled, so there are no limits set on pipeline usage"
 | 
					msgid "UsageQuota|%{help_link_start}Shared runners%{help_link_end} are disabled, so there are no limits set on pipeline usage"
 | 
				
			||||||
msgstr ""
 | 
					msgstr ""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					msgid "UsageQuota|%{percentageLeft} of purchased storage is available"
 | 
				
			||||||
 | 
					msgstr ""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
msgid "UsageQuota|Artifacts"
 | 
					msgid "UsageQuota|Artifacts"
 | 
				
			||||||
msgstr ""
 | 
					msgstr ""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -28530,15 +28533,27 @@ msgstr ""
 | 
				
			||||||
msgid "UsageQuota|Usage since"
 | 
					msgid "UsageQuota|Usage since"
 | 
				
			||||||
msgstr ""
 | 
					msgstr ""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					msgid "UsageQuota|When you purchase additional storage, we automatically unlock projects that were locked when you reached the %{actualRepositorySizeLimit} limit."
 | 
				
			||||||
 | 
					msgstr ""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
msgid "UsageQuota|Wiki"
 | 
					msgid "UsageQuota|Wiki"
 | 
				
			||||||
msgstr ""
 | 
					msgstr ""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
msgid "UsageQuota|Wikis"
 | 
					msgid "UsageQuota|Wikis"
 | 
				
			||||||
msgstr ""
 | 
					msgstr ""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					msgid "UsageQuota|You have consumed all of your additional storage, please purchase more to unlock your projects over the free %{actualRepositorySizeLimit} limit."
 | 
				
			||||||
 | 
					msgstr ""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					msgid "UsageQuota|You have reached the free storage limit of %{actualRepositorySizeLimit} on %{projectsLockedText}. To unlock them, please purchase additional storage."
 | 
				
			||||||
 | 
					msgstr ""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
msgid "UsageQuota|You used: %{usage} %{limit}"
 | 
					msgid "UsageQuota|You used: %{usage} %{limit}"
 | 
				
			||||||
msgstr ""
 | 
					msgstr ""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					msgid "UsageQuota|Your purchased storage is running low. To avoid locked projects, please purchase more storage."
 | 
				
			||||||
 | 
					msgstr ""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
msgid "UsageQuota|out of %{formattedLimit} of your namespace storage"
 | 
					msgid "UsageQuota|out of %{formattedLimit} of your namespace storage"
 | 
				
			||||||
msgstr ""
 | 
					msgstr ""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -30585,9 +30600,6 @@ msgstr ""
 | 
				
			||||||
msgid "Your projects"
 | 
					msgid "Your projects"
 | 
				
			||||||
msgstr ""
 | 
					msgstr ""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
msgid "Your purchased storage is running low. To avoid locked projects, please purchase more storage."
 | 
					 | 
				
			||||||
msgstr ""
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
msgid "Your request for access could not be processed: %{error_meesage}"
 | 
					msgid "Your request for access could not be processed: %{error_meesage}"
 | 
				
			||||||
msgstr ""
 | 
					msgstr ""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -11,12 +11,12 @@ module QA
 | 
				
			||||||
          view 'app/views/shared/wikis/show.html.haml' do
 | 
					          view 'app/views/shared/wikis/show.html.haml' do
 | 
				
			||||||
            element :wiki_page_title
 | 
					            element :wiki_page_title
 | 
				
			||||||
            element :wiki_page_content
 | 
					            element :wiki_page_content
 | 
				
			||||||
 | 
					            element :edit_page_button
 | 
				
			||||||
          end
 | 
					          end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
          view 'app/views/shared/wikis/_main_links.html.haml' do
 | 
					          view 'app/views/shared/wikis/_main_links.html.haml' do
 | 
				
			||||||
            element :new_page_button
 | 
					            element :new_page_button
 | 
				
			||||||
            element :page_history_button
 | 
					            element :page_history_button
 | 
				
			||||||
            element :edit_page_button
 | 
					 | 
				
			||||||
          end
 | 
					          end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
          view 'app/views/shared/empty_states/_wikis.html.haml' do
 | 
					          view 'app/views/shared/empty_states/_wikis.html.haml' do
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -50,43 +50,63 @@ RSpec.describe API::Internal::Base do
 | 
				
			||||||
    end
 | 
					    end
 | 
				
			||||||
  end
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  describe 'GET /internal/two_factor_recovery_codes' do
 | 
					  shared_examples 'actor key validations' do
 | 
				
			||||||
    it 'returns an error message when the key does not exist' do
 | 
					    context 'key id is not provided' do
 | 
				
			||||||
      post api('/internal/two_factor_recovery_codes'),
 | 
					      let(:key_id) { nil }
 | 
				
			||||||
           params: {
 | 
					
 | 
				
			||||||
             secret_token: secret_token,
 | 
					      it 'returns an error message' do
 | 
				
			||||||
             key_id: non_existing_record_id
 | 
					        subject
 | 
				
			||||||
           }
 | 
					
 | 
				
			||||||
 | 
					        expect(json_response['success']).to be_falsey
 | 
				
			||||||
 | 
					        expect(json_response['message']).to eq('Could not find a user without a key')
 | 
				
			||||||
 | 
					      end
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    context 'key does not exist' do
 | 
				
			||||||
 | 
					      let(:key_id) { non_existing_record_id }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      it 'returns an error message' do
 | 
				
			||||||
 | 
					        subject
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        expect(json_response['success']).to be_falsey
 | 
					        expect(json_response['success']).to be_falsey
 | 
				
			||||||
        expect(json_response['message']).to eq('Could not find the given key')
 | 
					        expect(json_response['message']).to eq('Could not find the given key')
 | 
				
			||||||
      end
 | 
					      end
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    it 'returns an error message when the key is a deploy key' do
 | 
					    context 'key without user' do
 | 
				
			||||||
      deploy_key = create(:deploy_key)
 | 
					      let(:key_id) { create(:key, user: nil).id }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      it 'returns an error message' do
 | 
				
			||||||
 | 
					        subject
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        expect(json_response['success']).to be_falsey
 | 
				
			||||||
 | 
					        expect(json_response['message']).to eq('Could not find a user for the given key')
 | 
				
			||||||
 | 
					      end
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  describe 'GET /internal/two_factor_recovery_codes' do
 | 
				
			||||||
 | 
					    let(:key_id) { key.id }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    subject do
 | 
				
			||||||
      post api('/internal/two_factor_recovery_codes'),
 | 
					      post api('/internal/two_factor_recovery_codes'),
 | 
				
			||||||
           params: {
 | 
					           params: {
 | 
				
			||||||
             secret_token: secret_token,
 | 
					             secret_token: secret_token,
 | 
				
			||||||
             key_id: deploy_key.id
 | 
					             key_id: key_id
 | 
				
			||||||
           }
 | 
					           }
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    it_behaves_like 'actor key validations'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    context 'key is a deploy key' do
 | 
				
			||||||
 | 
					      let(:key_id) { create(:deploy_key).id }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      it 'returns an error message' do
 | 
				
			||||||
 | 
					        subject
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        expect(json_response['success']).to be_falsey
 | 
					        expect(json_response['success']).to be_falsey
 | 
				
			||||||
        expect(json_response['message']).to eq('Deploy keys cannot be used to retrieve recovery codes')
 | 
					        expect(json_response['message']).to eq('Deploy keys cannot be used to retrieve recovery codes')
 | 
				
			||||||
      end
 | 
					      end
 | 
				
			||||||
 | 
					 | 
				
			||||||
    it 'returns an error message when the user does not exist' do
 | 
					 | 
				
			||||||
      key_without_user = create(:key, user: nil)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      post api('/internal/two_factor_recovery_codes'),
 | 
					 | 
				
			||||||
           params: {
 | 
					 | 
				
			||||||
             secret_token: secret_token,
 | 
					 | 
				
			||||||
             key_id: key_without_user.id
 | 
					 | 
				
			||||||
           }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      expect(json_response['success']).to be_falsey
 | 
					 | 
				
			||||||
      expect(json_response['message']).to eq('Could not find a user for the given key')
 | 
					 | 
				
			||||||
      expect(json_response['recovery_codes']).to be_nil
 | 
					 | 
				
			||||||
    end
 | 
					    end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    context 'when two-factor is enabled' do
 | 
					    context 'when two-factor is enabled' do
 | 
				
			||||||
| 
						 | 
					@ -95,11 +115,7 @@ RSpec.describe API::Internal::Base do
 | 
				
			||||||
        allow_any_instance_of(User)
 | 
					        allow_any_instance_of(User)
 | 
				
			||||||
          .to receive(:generate_otp_backup_codes!).and_return(%w(119135e5a3ebce8e 34bd7b74adbc8861))
 | 
					          .to receive(:generate_otp_backup_codes!).and_return(%w(119135e5a3ebce8e 34bd7b74adbc8861))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        post api('/internal/two_factor_recovery_codes'),
 | 
					        subject
 | 
				
			||||||
             params: {
 | 
					 | 
				
			||||||
               secret_token: secret_token,
 | 
					 | 
				
			||||||
               key_id: key.id
 | 
					 | 
				
			||||||
             }
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
        expect(json_response['success']).to be_truthy
 | 
					        expect(json_response['success']).to be_truthy
 | 
				
			||||||
        expect(json_response['recovery_codes']).to match_array(%w(119135e5a3ebce8e 34bd7b74adbc8861))
 | 
					        expect(json_response['recovery_codes']).to match_array(%w(119135e5a3ebce8e 34bd7b74adbc8861))
 | 
				
			||||||
| 
						 | 
					@ -110,11 +126,7 @@ RSpec.describe API::Internal::Base do
 | 
				
			||||||
      it 'returns an error message' do
 | 
					      it 'returns an error message' do
 | 
				
			||||||
        allow_any_instance_of(User).to receive(:two_factor_enabled?).and_return(false)
 | 
					        allow_any_instance_of(User).to receive(:two_factor_enabled?).and_return(false)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        post api('/internal/two_factor_recovery_codes'),
 | 
					        subject
 | 
				
			||||||
             params: {
 | 
					 | 
				
			||||||
               secret_token: secret_token,
 | 
					 | 
				
			||||||
               key_id: key.id
 | 
					 | 
				
			||||||
             }
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
        expect(json_response['success']).to be_falsey
 | 
					        expect(json_response['success']).to be_falsey
 | 
				
			||||||
        expect(json_response['recovery_codes']).to be_nil
 | 
					        expect(json_response['recovery_codes']).to be_nil
 | 
				
			||||||
| 
						 | 
					@ -123,42 +135,27 @@ RSpec.describe API::Internal::Base do
 | 
				
			||||||
  end
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  describe 'POST /internal/personal_access_token' do
 | 
					  describe 'POST /internal/personal_access_token' do
 | 
				
			||||||
    it 'returns an error message when the key does not exist' do
 | 
					    let(:key_id) { key.id }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    subject do
 | 
				
			||||||
      post api('/internal/personal_access_token'),
 | 
					      post api('/internal/personal_access_token'),
 | 
				
			||||||
           params: {
 | 
					           params: {
 | 
				
			||||||
             secret_token: secret_token,
 | 
					             secret_token: secret_token,
 | 
				
			||||||
             key_id: non_existing_record_id
 | 
					             key_id: key_id
 | 
				
			||||||
           }
 | 
					           }
 | 
				
			||||||
 | 
					 | 
				
			||||||
      expect(json_response['success']).to be_falsey
 | 
					 | 
				
			||||||
      expect(json_response['message']).to eq('Could not find the given key')
 | 
					 | 
				
			||||||
    end
 | 
					    end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    it 'returns an error message when the key is a deploy key' do
 | 
					    it_behaves_like 'actor key validations'
 | 
				
			||||||
      deploy_key = create(:deploy_key)
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
      post api('/internal/personal_access_token'),
 | 
					    context 'key is a deploy key' do
 | 
				
			||||||
           params: {
 | 
					      let(:key_id) { create(:deploy_key).id }
 | 
				
			||||||
             secret_token: secret_token,
 | 
					
 | 
				
			||||||
             key_id: deploy_key.id
 | 
					      it 'returns an error message' do
 | 
				
			||||||
           }
 | 
					        subject
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        expect(json_response['success']).to be_falsey
 | 
					        expect(json_response['success']).to be_falsey
 | 
				
			||||||
        expect(json_response['message']).to eq('Deploy keys cannot be used to create personal access tokens')
 | 
					        expect(json_response['message']).to eq('Deploy keys cannot be used to create personal access tokens')
 | 
				
			||||||
      end
 | 
					      end
 | 
				
			||||||
 | 
					 | 
				
			||||||
    it 'returns an error message when the user does not exist' do
 | 
					 | 
				
			||||||
      key_without_user = create(:key, user: nil)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      post api('/internal/personal_access_token'),
 | 
					 | 
				
			||||||
           params: {
 | 
					 | 
				
			||||||
             secret_token: secret_token,
 | 
					 | 
				
			||||||
             key_id: key_without_user.id
 | 
					 | 
				
			||||||
           }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      expect(json_response['success']).to be_falsey
 | 
					 | 
				
			||||||
      expect(json_response['message']).to eq('Could not find a user for the given key')
 | 
					 | 
				
			||||||
      expect(json_response['token']).to be_nil
 | 
					 | 
				
			||||||
    end
 | 
					    end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    it 'returns an error message when given an non existent user' do
 | 
					    it 'returns an error message when given an non existent user' do
 | 
				
			||||||
| 
						 | 
					@ -1209,6 +1206,73 @@ RSpec.describe API::Internal::Base do
 | 
				
			||||||
    end
 | 
					    end
 | 
				
			||||||
  end
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  describe 'POST /internal/two_factor_config' do
 | 
				
			||||||
 | 
					    let(:key_id) { key.id }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    before do
 | 
				
			||||||
 | 
					      stub_feature_flags(two_factor_for_cli: true)
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    subject do
 | 
				
			||||||
 | 
					      post api('/internal/two_factor_config'),
 | 
				
			||||||
 | 
					           params: {
 | 
				
			||||||
 | 
					             secret_token: secret_token,
 | 
				
			||||||
 | 
					             key_id: key_id
 | 
				
			||||||
 | 
					           }
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    it_behaves_like 'actor key validations'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    context 'when the key is a deploy key' do
 | 
				
			||||||
 | 
					      let(:key) { create(:deploy_key) }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      it 'does not required two factor' do
 | 
				
			||||||
 | 
					        subject
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        expect(json_response['success']).to be_truthy
 | 
				
			||||||
 | 
					        expect(json_response['two_factor_required']).to be_falsey
 | 
				
			||||||
 | 
					      end
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    context 'when two-factor is enabled' do
 | 
				
			||||||
 | 
					      it 'returns user two factor config' do
 | 
				
			||||||
 | 
					        allow_any_instance_of(User).to receive(:two_factor_enabled?).and_return(true)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        subject
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        expect(json_response['success']).to be_truthy
 | 
				
			||||||
 | 
					        expect(json_response['two_factor_required']).to be_truthy
 | 
				
			||||||
 | 
					      end
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    context 'when two-factor is not enabled' do
 | 
				
			||||||
 | 
					      it 'returns an error message' do
 | 
				
			||||||
 | 
					        allow_any_instance_of(User).to receive(:two_factor_enabled?).and_return(false)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        subject
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        expect(json_response['success']).to be_truthy
 | 
				
			||||||
 | 
					        expect(json_response['two_factor_required']).to be_falsey
 | 
				
			||||||
 | 
					      end
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    context 'two_factor_for_cli feature is disabled' do
 | 
				
			||||||
 | 
					      before do
 | 
				
			||||||
 | 
					        stub_feature_flags(two_factor_for_cli: false)
 | 
				
			||||||
 | 
					      end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      context 'when two-factor is enabled for the user' do
 | 
				
			||||||
 | 
					        it 'returns user two factor config' do
 | 
				
			||||||
 | 
					          allow_any_instance_of(User).to receive(:two_factor_enabled?).and_return(true)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					          subject
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					          expect(json_response['success']).to be_falsey
 | 
				
			||||||
 | 
					        end
 | 
				
			||||||
 | 
					      end
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  def lfs_auth_project(project)
 | 
					  def lfs_auth_project(project)
 | 
				
			||||||
    post(
 | 
					    post(
 | 
				
			||||||
      api("/internal/lfs_authenticate"),
 | 
					      api("/internal/lfs_authenticate"),
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -121,7 +121,7 @@ RSpec.shared_examples 'User views a wiki page' do
 | 
				
			||||||
    it 'shows the page history' do
 | 
					    it 'shows the page history' do
 | 
				
			||||||
      visit(wiki_page_path(wiki, wiki_page))
 | 
					      visit(wiki_page_path(wiki, wiki_page))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      expect(page).to have_selector('a.btn', text: 'Edit')
 | 
					      expect(page).to have_selector('[data-testid="wiki_edit_button"]')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      click_on('Page history')
 | 
					      click_on('Page history')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -133,7 +133,7 @@ RSpec.shared_examples 'User views a wiki page' do
 | 
				
			||||||
    it 'does not show the "Edit" button' do
 | 
					    it 'does not show the "Edit" button' do
 | 
				
			||||||
      visit(wiki_page_path(wiki, wiki_page, version_id: wiki_page.versions.last.id))
 | 
					      visit(wiki_page_path(wiki, wiki_page, version_id: wiki_page.versions.last.id))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      expect(page).not_to have_selector('a.btn', text: 'Edit')
 | 
					      expect(page).not_to have_selector('[data-testid="wiki_edit_button"]')
 | 
				
			||||||
    end
 | 
					    end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    context 'show the diff' do
 | 
					    context 'show the diff' do
 | 
				
			||||||
| 
						 | 
					@ -250,7 +250,7 @@ RSpec.shared_examples 'User views a wiki page' do
 | 
				
			||||||
    end
 | 
					    end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    it 'does not show "Edit" button' do
 | 
					    it 'does not show "Edit" button' do
 | 
				
			||||||
      expect(page).not_to have_selector('a.btn', text: 'Edit')
 | 
					      expect(page).not_to have_selector('[data-testid="wiki_edit_button"]')
 | 
				
			||||||
    end
 | 
					    end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    it 'shows error' do
 | 
					    it 'shows error' do
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue