diff --git a/app/assets/stylesheets/framework/variables.scss b/app/assets/stylesheets/framework/variables.scss index 3e83c295491..e179e2cdb3e 100644 --- a/app/assets/stylesheets/framework/variables.scss +++ b/app/assets/stylesheets/framework/variables.scss @@ -874,14 +874,6 @@ Image Commenting cursor $image-comment-cursor-left-offset: 12; $image-comment-cursor-top-offset: 12; -/* -Add GitLab Slack Application -*/ -$add-to-slack-popup-max-width: 400px; -$add-to-slack-gif-max-width: 850px; -$add-to-slack-well-max-width: 750px; -$add-to-slack-logo-size: 100px; - /* Security & Compliance Carousel */ diff --git a/app/assets/stylesheets/pages/profile.scss b/app/assets/stylesheets/pages/profile.scss index ccbc796913e..f76a8030e5b 100644 --- a/app/assets/stylesheets/pages/profile.scss +++ b/app/assets/stylesheets/pages/profile.scss @@ -363,25 +363,12 @@ table.u2f-registrations { color: $gl-text-color-secondary; } -.gitlab-slack-gif { - width: 100%; - max-width: $add-to-slack-gif-max-width; +.gitlab-slack-body { + max-width: 420px; } -.gitlab-slack-well { - background-color: $white; - box-shadow: none; - max-width: $add-to-slack-well-max-width; -} - -.gitlab-slack-logo { - width: $add-to-slack-logo-size; - height: $add-to-slack-logo-size; -} - -.gitlab-slack-popup { - width: 100%; - max-width: $add-to-slack-popup-max-width; +.gitlab-slack-slack-logo { + transform: scale(200%); // Slack logo SVG is scaled down 50% and has empty space around it } .skype-icon { diff --git a/config/gitlab.yml.example b/config/gitlab.yml.example index 2b67572c470..f5755591da7 100644 --- a/config/gitlab.yml.example +++ b/config/gitlab.yml.example @@ -9,6 +9,8 @@ # If you change this file in a merge request, please also create # # a MR on https://gitlab.com/gitlab-org/omnibus-gitlab/merge_requests. # # For more details see https://gitlab.com/gitlab-org/omnibus-gitlab/blob/master/doc/settings/gitlab.yml.md # +# Be sure to create a MR against the GDK configuration # +# file (https://gitlab.com/gitlab-org/gitlab-development-kit/-/blob/main/support/templates/gitlab/config/gitlab.yml.erb) too. # ######################################################################## # # @@ -1435,7 +1437,7 @@ test: provider: AWS # Only AWS supported at the moment aws_access_key_id: AWS_ACCESS_KEY_ID aws_secret_access_key: AWS_SECRET_ACCESS_KEY - region: us-east-1 + region: us-east-1 gitlab: host: localhost diff --git a/doc/api/job_artifacts.md b/doc/api/job_artifacts.md index 947caf20da6..ef00c050a3a 100644 --- a/doc/api/job_artifacts.md +++ b/doc/api/job_artifacts.md @@ -287,12 +287,12 @@ If the artifacts were deleted successfully, a response with status `204 No Conte ## Delete project artifacts -> [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/223793) in GitLab 14.7 [with a flag](../administration/feature_flags.md) named `bulk_expire_project_artifacts`. Disabled by default. +> [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/223793) in GitLab 14.7 [with a flag](../administration/feature_flags.md) named `bulk_expire_project_artifacts`. Disabled by default on GitLab self-managed. Enabled on GitLab.com. FLAG: On self-managed GitLab, by default this feature is not available. To make it available, ask an administrator to [enable the `bulk_expire_project_artifacts` flag](../administration/feature_flags.md). -On GitLab.com, this feature is not available. +On GitLab.com, this feature is available. [Expire artifacts of a project that can be deleted](https://gitlab.com/gitlab-org/gitlab/-/issues/223793) but that don't have an expiry time. diff --git a/doc/ci/triggers/index.md b/doc/ci/triggers/index.md index a7b211e1965..1b648a486ef 100644 --- a/doc/ci/triggers/index.md +++ b/doc/ci/triggers/index.md @@ -54,7 +54,7 @@ For example: ```shell curl --request POST \ --form token= \ - --formref= \ + --form ref= \ "https://gitlab.example.com/api/v4/projects//trigger/pipeline" ``` diff --git a/locale/gitlab.pot b/locale/gitlab.pot index 9478268c407..73959468a49 100644 --- a/locale/gitlab.pot +++ b/locale/gitlab.pot @@ -1982,9 +1982,6 @@ msgstr "" msgid "Add CONTRIBUTING" msgstr "" -msgid "Add GitLab to Slack" -msgstr "" - msgid "Add Jaeger URL" msgstr "" @@ -2198,9 +2195,6 @@ msgstr "" msgid "Add text to the sign-in page. Markdown enabled." msgstr "" -msgid "Add to Slack" -msgstr "" - msgid "Add to board" msgstr "" @@ -16166,9 +16160,6 @@ msgstr "" msgid "GitLab export" msgstr "" -msgid "GitLab for Slack" -msgstr "" - msgid "GitLab group: %{source_link}" msgstr "" @@ -16193,6 +16184,9 @@ msgstr "" msgid "GitLab is undergoing maintenance and is operating in read-only mode." msgstr "" +msgid "GitLab logo" +msgstr "" + msgid "GitLab member or Email address" msgstr "" @@ -17724,9 +17718,6 @@ msgstr "" msgid "How do I use file templates?" msgstr "" -msgid "How it works" -msgstr "" - msgid "How many days need to pass between marking entity for deletion and actual removing it." msgstr "" @@ -23140,9 +23131,6 @@ msgstr "" msgid "More Information" msgstr "" -msgid "More Slack commands" -msgstr "" - msgid "More actions" msgstr "" @@ -32065,9 +32053,6 @@ msgstr "" msgid "Select Git revision" msgstr "" -msgid "Select GitLab project to link with your Slack team" -msgstr "" - msgid "Select Page" msgstr "" @@ -33118,6 +33103,15 @@ msgstr "" msgid "Slack integration allows you to interact with GitLab via slash commands in a chat window." msgstr "" +msgid "Slack logo" +msgstr "" + +msgid "SlackIntegration|GitLab for Slack" +msgstr "" + +msgid "SlackIntegration|Select a GitLab project to link with your Slack workspace." +msgstr "" + msgid "SlackIntegration|Sends notifications about project events to Slack channels." msgstr "" @@ -37464,9 +37458,6 @@ msgstr "" msgid "Track time with quick actions" msgstr "" -msgid "Track your GitLab projects with GitLab for Slack." -msgstr "" - msgid "Training mode" msgstr "" @@ -38642,6 +38633,9 @@ msgstr "" msgid "User cap" msgstr "" +msgid "User cap cannot be enabled. The group or one of its subgroups or projects is shared externally." +msgstr "" + msgid "User created at" msgstr "" @@ -42391,9 +42385,6 @@ msgstr "" msgid "locked by %{path_lock_user_name} %{created_at}" msgstr "" -msgid "log in" -msgstr "" - msgid "manual" msgstr "" diff --git a/qa/qa/service/praefect_manager.rb b/qa/qa/service/praefect_manager.rb index 9b63b1bc20f..7e47049d446 100644 --- a/qa/qa/service/praefect_manager.rb +++ b/qa/qa/service/praefect_manager.rb @@ -19,7 +19,7 @@ module QA @virtual_storage = 'default' end - attr_reader :primary_node, :secondary_node, :tertiary_node + attr_reader :primary_node, :secondary_node, :tertiary_node, :postgres # Executes the praefect `dataloss` command. # @@ -87,6 +87,13 @@ module QA def stop_node(name) shell "docker stop #{name}" + wait_until_shell_command_matches( + "docker inspect -f {{.State.Running}} #{name}", + /false/, + sleep_interval: 3, + max_duration: 180, + retry_on_exception: true + ) end def clear_replication_queue @@ -167,6 +174,7 @@ module QA end def start_all_nodes + start_node(@postgres) start_node(@primary_node) start_node(@secondary_node) start_node(@tertiary_node) @@ -195,6 +203,14 @@ module QA end end + def praefect_sql_ping_healthy? + cmd = "docker exec #{@praefect} bash -c '/opt/gitlab/embedded/bin/praefect -config /var/opt/gitlab/praefect/config.toml sql-ping'" + wait_until_shell_command(cmd) do |line| + QA::Runtime::Logger.debug(line.chomp) + break line.include?('praefect sql-ping: OK') + end + end + def wait_for_sql_ping wait_until_shell_command_matches( "docker exec #{@praefect} bash -c '/opt/gitlab/embedded/bin/praefect -config /var/opt/gitlab/praefect/config.toml sql-ping'", @@ -206,6 +222,34 @@ module QA ['error when pinging healthcheck', 'failed checking node health'].include?(msg) end + def wait_for_dial_nodes_successful + Support::Waiter.repeat_until(max_attempts: 3, max_duration: 120, sleep_interval: 1) do + nodes_confirmed = { + @primary_node => false, + @secondary_node => false, + @tertiary_node => false + } + + nodes_confirmed.each_key do |node| + nodes_confirmed[node] = true if praefect_dial_nodes_status?(node) + end + + nodes_confirmed.values.all? + end + end + + def praefect_dial_nodes_status?(node, expect_healthy = true) + cmd = "docker exec #{@praefect} bash -c '/opt/gitlab/embedded/bin/praefect -config /var/opt/gitlab/praefect/config.toml dial-nodes -timeout 1s'" + if expect_healthy + wait_until_shell_command_matches(cmd, /SUCCESS: confirmed Gitaly storage "#{node}" in virtual storages \[#{@virtual_storage}\] is served/) + else + wait_until_shell_command(cmd, raise_on_failure: false) do |line| + QA::Runtime::Logger.debug(line.chomp) + break true if line.include?('the following nodes are not healthy') && line.include?(node) + end + end + end + def wait_for_health_check_all_nodes wait_for_gitaly_health_check(@primary_node) wait_for_gitaly_health_check(@secondary_node) diff --git a/qa/qa/specs/features/api/3_create/gitaly/praefect_connectivity_spec.rb b/qa/qa/specs/features/api/3_create/gitaly/praefect_connectivity_spec.rb new file mode 100644 index 00000000000..28469b99d04 --- /dev/null +++ b/qa/qa/specs/features/api/3_create/gitaly/praefect_connectivity_spec.rb @@ -0,0 +1,41 @@ +# frozen_string_literal: true + +module QA + RSpec.describe 'Create' do + context 'Praefect connectivity commands', :orchestrated, :gitaly_cluster do + praefect_manager = Service::PraefectManager.new + + before do + praefect_manager.start_all_nodes + end + + context 'in a healthy environment' do + it 'confirms healthy connection to database', testcase: 'https://gitlab.com/gitlab-org/gitlab/-/quality/test_cases/349937' do + expect(praefect_manager.praefect_sql_ping_healthy?).to be true + end + + it 'confirms healthy connection to gitaly nodes', testcase: 'https://gitlab.com/gitlab-org/gitlab/-/quality/test_cases/349938' do + expect(praefect_manager.wait_for_dial_nodes_successful).to be true + end + end + + context 'in an unhealthy environment' do + it 'diagnoses unhealthy connection to database', testcase: 'https://gitlab.com/gitlab-org/gitlab/-/quality/test_cases/349939' do + praefect_manager.stop_node(praefect_manager.postgres) + expect(praefect_manager.praefect_sql_ping_healthy?).to be false + end + + it 'diagnoses connection issues to gitaly nodes', testcase: 'https://gitlab.com/gitlab-org/gitlab/-/quality/test_cases/349940' do + praefect_manager.stop_node(praefect_manager.primary_node) + praefect_manager.stop_node(praefect_manager.tertiary_node) + expect(praefect_manager.praefect_dial_nodes_status?(praefect_manager.primary_node, false)).to be true + expect(praefect_manager.praefect_dial_nodes_status?(praefect_manager.secondary_node)).to be true + expect(praefect_manager.praefect_dial_nodes_status?(praefect_manager.tertiary_node, false)).to be true + + praefect_manager.stop_node(praefect_manager.secondary_node) + expect(praefect_manager.praefect_dial_nodes_status?(praefect_manager.secondary_node, false)).to be true + end + end + end + end +end