diff --git a/app/assets/stylesheets/framework/mixins.scss b/app/assets/stylesheets/framework/mixins.scss index c551dd41882..1e51bf3d974 100644 --- a/app/assets/stylesheets/framework/mixins.scss +++ b/app/assets/stylesheets/framework/mixins.scss @@ -419,6 +419,30 @@ height: $gl-font-size * $code-line-height * 0.9; } +@mixin email-code-block { + .code.language-email { + font-family: inherit; + font-size: inherit; + + code { + white-space: pre-wrap; + font-family: inherit; + + // Rouge `Name.Tag` and `Operator` token (email header key + ':') + .nt, + .o { + color: inherit; + font-weight: bold; + } + + // Rouge `Name.Attribute` token (email header value) + .na { + color: inherit; + } + } + } +} + @mixin avatar-counter($border-radius: 1em) { background-color: $gray-darkest; color: $white; diff --git a/app/assets/stylesheets/framework/typography.scss b/app/assets/stylesheets/framework/typography.scss index 0bee925b0ab..51c41c46f61 100644 --- a/app/assets/stylesheets/framework/typography.scss +++ b/app/assets/stylesheets/framework/typography.scss @@ -597,6 +597,8 @@ .text-justify { text-align: justify !important; } + + @include email-code-block; } /** diff --git a/app/assets/stylesheets/notify.scss b/app/assets/stylesheets/notify.scss index d281f62c370..feb4ea77e58 100644 --- a/app/assets/stylesheets/notify.scss +++ b/app/assets/stylesheets/notify.scss @@ -1,3 +1,4 @@ +@import 'framework/mixins'; @import 'framework/variables'; img { @@ -38,3 +39,14 @@ pre.commit-message { .gl-label-text-dark { color: $gl-text-color; } + +.content { + .markdown-code-block pre.code { + padding: $gl-padding-8 $input-horizontal-padding; + margin: 0 0 $gl-padding-8; + border: 1px solid $gray-100; + border-radius: $border-radius-small; + } + + @include email-code-block; +} diff --git a/app/models/member.rb b/app/models/member.rb index 3521223b27c..7d4c0bb2c59 100644 --- a/app/models/member.rb +++ b/app/models/member.rb @@ -27,6 +27,7 @@ class Member < ApplicationRecord belongs_to :created_by, class_name: "User" belongs_to :user belongs_to :source, polymorphic: true # rubocop:disable Cop/PolymorphicAssociations + belongs_to :member_namespace, inverse_of: :namespace_members, foreign_key: 'member_namespace_id', class_name: 'Namespace' has_one :member_task delegate :name, :username, :email, :last_activity_on, to: :user, prefix: true diff --git a/app/models/namespace.rb b/app/models/namespace.rb index 1e7f0f10aa6..58822a575b5 100644 --- a/app/models/namespace.rb +++ b/app/models/namespace.rb @@ -44,6 +44,7 @@ class Namespace < ApplicationRecord has_many :project_statistics has_one :namespace_settings, inverse_of: :namespace, class_name: 'NamespaceSetting', autosave: true has_one :namespace_route, foreign_key: :namespace_id, autosave: false, inverse_of: :namespace, class_name: 'Route' + has_many :namespace_members, foreign_key: :member_namespace_id, inverse_of: :member_namespace, class_name: 'Member' has_many :runner_namespaces, inverse_of: :namespace, class_name: 'Ci::RunnerNamespace' has_many :runners, through: :runner_namespaces, source: :runner, class_name: 'Ci::Runner' diff --git a/config/feature_flags/development/opt_in_sidekiq_status.yml b/config/feature_flags/development/opt_in_sidekiq_status.yml deleted file mode 100644 index 433c04e7822..00000000000 --- a/config/feature_flags/development/opt_in_sidekiq_status.yml +++ /dev/null @@ -1,8 +0,0 @@ ---- -name: opt_in_sidekiq_status -introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/77349 -rollout_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/343964 -milestone: '14.7' -type: development -group: group::scalability -default_enabled: false diff --git a/db/migrate/20220107165036_remove_note_id_index.rb b/db/migrate/20220107165036_remove_note_id_index.rb new file mode 100644 index 00000000000..15b4a3caf78 --- /dev/null +++ b/db/migrate/20220107165036_remove_note_id_index.rb @@ -0,0 +1,16 @@ +# frozen_string_literal: true + +class RemoveNoteIdIndex < Gitlab::Database::Migration[1.0] + disable_ddl_transaction! + + TABLE = :suggestions + INDEX_NAME = 'index_suggestions_on_note_id' + + def up + remove_concurrent_index_by_name TABLE, INDEX_NAME + end + + def down + add_concurrent_index TABLE, :note_id, name: INDEX_NAME + end +end diff --git a/db/migrate/20220112232037_add_member_namespace_reference.rb b/db/migrate/20220112232037_add_member_namespace_reference.rb new file mode 100644 index 00000000000..d67ea09a78c --- /dev/null +++ b/db/migrate/20220112232037_add_member_namespace_reference.rb @@ -0,0 +1,13 @@ +# frozen_string_literal: true + +class AddMemberNamespaceReference < Gitlab::Database::Migration[1.0] + enable_lock_retries! + + def up + add_column :members, :member_namespace_id, :bigint unless column_exists?(:members, :member_namespace_id) + end + + def down + remove_column :members, :member_namespace_id if column_exists?(:members, :member_namespace_id) + end +end diff --git a/db/migrate/20220112232605_add_member_namespace_index.rb b/db/migrate/20220112232605_add_member_namespace_index.rb new file mode 100644 index 00000000000..ba32df53ae7 --- /dev/null +++ b/db/migrate/20220112232605_add_member_namespace_index.rb @@ -0,0 +1,19 @@ +# frozen_string_literal: true + +class AddMemberNamespaceIndex < Gitlab::Database::Migration[1.0] + disable_ddl_transaction! + INDEX_NAME = 'index_members_on_member_namespace_id' + + def up + add_concurrent_index :members, :member_namespace_id, unique: false, name: INDEX_NAME + add_concurrent_foreign_key :members, :namespaces, column: :member_namespace_id, on_delete: :nullify, reverse_lock_order: true + end + + def down + with_lock_retries do + remove_foreign_key_if_exists :members, column: :member_namespace_id + end + + remove_concurrent_index_by_name :members, INDEX_NAME + end +end diff --git a/db/schema_migrations/20220107165036 b/db/schema_migrations/20220107165036 new file mode 100644 index 00000000000..bab28284d04 --- /dev/null +++ b/db/schema_migrations/20220107165036 @@ -0,0 +1 @@ +72639ba84675a6687864ef4cb6f02d0429124d7deb9ce9f3c8e255591e2f0a8d \ No newline at end of file diff --git a/db/schema_migrations/20220112232037 b/db/schema_migrations/20220112232037 new file mode 100644 index 00000000000..83267de0489 --- /dev/null +++ b/db/schema_migrations/20220112232037 @@ -0,0 +1 @@ +775ac42ad194bd0175a6925e1c2e83c11d57a8d4430ad08a70e3d5275ca2e709 \ No newline at end of file diff --git a/db/schema_migrations/20220112232605 b/db/schema_migrations/20220112232605 new file mode 100644 index 00000000000..fb5809b543e --- /dev/null +++ b/db/schema_migrations/20220112232605 @@ -0,0 +1 @@ +4813b55e933564851f2fec9a2fa5900409eff226fec34ae0be1895307f603904 \ No newline at end of file diff --git a/db/structure.sql b/db/structure.sql index 8f07dfeada1..1f8ff54765f 100644 --- a/db/structure.sql +++ b/db/structure.sql @@ -15979,7 +15979,8 @@ CREATE TABLE members ( ldap boolean DEFAULT false NOT NULL, override boolean DEFAULT false NOT NULL, state smallint DEFAULT 0, - invite_email_success boolean DEFAULT true NOT NULL + invite_email_success boolean DEFAULT true NOT NULL, + member_namespace_id bigint ); CREATE SEQUENCE members_id_seq @@ -26567,6 +26568,8 @@ CREATE INDEX index_members_on_invite_email ON members USING btree (invite_email) CREATE UNIQUE INDEX index_members_on_invite_token ON members USING btree (invite_token); +CREATE INDEX index_members_on_member_namespace_id ON members USING btree (member_namespace_id); + CREATE INDEX index_members_on_requested_at ON members USING btree (requested_at); CREATE INDEX index_members_on_source_id_and_source_type ON members USING btree (source_id, source_type); @@ -29586,6 +29589,9 @@ ALTER TABLE ONLY epics ALTER TABLE ONLY dast_profiles ADD CONSTRAINT fk_aa76ef30e9 FOREIGN KEY (project_id) REFERENCES projects(id) ON DELETE CASCADE; +ALTER TABLE ONLY members + ADD CONSTRAINT fk_aa82dcc1c6 FOREIGN KEY (member_namespace_id) REFERENCES namespaces(id) ON DELETE SET NULL; + ALTER TABLE ONLY alert_management_alerts ADD CONSTRAINT fk_aad61aedca FOREIGN KEY (environment_id) REFERENCES environments(id) ON DELETE SET NULL; diff --git a/doc/.vale/vale.tmpl b/doc/.vale/vale.tmpl index 36dfbd6b778..8a6c6e5157d 100644 --- a/doc/.vale/vale.tmpl +++ b/doc/.vale/vale.tmpl @@ -48,4 +48,4 @@ {{end -}} {{end -}} -{{- $e}} {{"errors" | red}}, {{$w}} {{"warnings" | yellow}}, and {{$s}} {{"suggestions" | blue}} found in {{$f}} {{$f | int | plural "file" "files"}}. +{{- $e}} {{"errors" | red}}, {{$w}} {{"warnings" | yellow}}, and {{$s}} {{"suggestions" | blue}} found. diff --git a/doc/ci/environments/deployment_approvals.md b/doc/ci/environments/deployment_approvals.md index e3e3797b420..feb76947609 100644 --- a/doc/ci/environments/deployment_approvals.md +++ b/doc/ci/environments/deployment_approvals.md @@ -5,7 +5,7 @@ info: To determine the technical writer assigned to the Stage/Group associated w description: Require approvals prior to deploying to a Protected Environment --- -# Deployment Approvals **(PREMIUM)** +# Deployment approvals **(PREMIUM)** > [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/215888) in GitLab 14.7 with a flag named `deployment_approvals`. Disabled by default. diff --git a/doc/ci/environments/protected_environments.md b/doc/ci/environments/protected_environments.md index dbcd9051b18..78db2345de4 100644 --- a/doc/ci/environments/protected_environments.md +++ b/doc/ci/environments/protected_environments.md @@ -248,9 +248,9 @@ NOTE: Configuration [with the UI](https://gitlab.com/gitlab-org/gitlab/-/issues/325249) is scheduled for a later release. -## Deployment Approvals +## Deployment approvals -Protected Environments can also be used to require manual approvals before deployments. See [Deployment Approvals](deployment_approvals.md) for more information. +Protected environments can also be used to require manual approvals before deployments. See [Deployment approvals](deployment_approvals.md) for more information.