Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--app/assets/javascripts/content_editor/extensions/code_block_highlight.js4
-rw-r--r--app/assets/javascripts/content_editor/extensions/image.js18
-rw-r--r--app/assets/javascripts/content_editor/services/serialization_helpers.js20
-rw-r--r--app/assets/javascripts/jobs/components/job/sidebar/sidebar_job_details_container.vue7
-rw-r--r--app/controllers/admin/application_settings/appearances_controller.rb1
-rw-r--r--app/models/appearance.rb1
-rw-r--r--config/feature_flags/development/markup_rendering_timeout.yml8
-rw-r--r--config/gitlab_loose_foreign_keys.yml4
-rw-r--r--db/docs/dast_scanner_profiles_tags.yml10
-rw-r--r--db/migrate/20221114131943_add_short_title_to_appearances.rb10
-rw-r--r--db/migrate/20221115085813_add_limit_to_appereances_short_title.rb13
-rw-r--r--db/migrate/20221207220120_create_dast_scanner_profiles_runner_tags.rb18
-rw-r--r--db/schema_migrations/202211141319431
-rw-r--r--db/schema_migrations/202211150858131
-rw-r--r--db/schema_migrations/202212072201201
-rw-r--r--db/structure.sql31
-rw-r--r--doc/.vale/gitlab/CurrentStatus.yml5
-rw-r--r--doc/.vale/gitlab/ElementDescriptors.yml17
-rw-r--r--doc/.vale/gitlab/InclusionAbleism.yml4
-rw-r--r--doc/.vale/gitlab/InclusionGender.yml4
-rw-r--r--doc/.vale/gitlab/Simplicity.yml4
-rw-r--r--doc/.vale/gitlab/Units.yml4
-rw-r--r--doc/administration/housekeeping.md23
-rw-r--r--doc/api/appearance.md3
-rw-r--r--doc/api/graphql/reference/index.md3
-rw-r--r--doc/api/merge_request_approvals.md8
-rw-r--r--doc/subscriptions/gitlab_com/index.md15
-rw-r--r--doc/user/admin_area/settings/account_and_limit_settings.md2
-rw-r--r--doc/user/project/merge_requests/img/add_previously_merged_commits_button_v14_1.pngbin19306 -> 0 bytes
-rw-r--r--doc/user/project/merge_requests/img/commit_nav_v13_11.pngbin24164 -> 0 bytes
-rw-r--r--doc/user/project/merge_requests/img/previously_merged_commits_v14_1.pngbin26788 -> 0 bytes
-rw-r--r--glfm_specification/input/gitlab_flavored_markdown/glfm_example_status.yml30
-rw-r--r--glfm_specification/input/gitlab_flavored_markdown/glfm_internal_extensions.md50
-rw-r--r--glfm_specification/output_example_snapshots/examples_index.yml15
-rw-r--r--glfm_specification/output_example_snapshots/html.yml25
-rw-r--r--glfm_specification/output_example_snapshots/markdown.yml10
-rw-r--r--glfm_specification/output_example_snapshots/prosemirror_json.yml344
-rw-r--r--glfm_specification/output_example_snapshots/snapshot_spec.html69
-rw-r--r--glfm_specification/output_example_snapshots/snapshot_spec.md50
-rw-r--r--lib/api/appearance.rb1
-rw-r--r--lib/api/entities/appearance.rb1
-rw-r--r--lib/banzai/filter/timeout_html_pipeline_filter.rb6
-rw-r--r--lib/gitlab/other_markup.rb7
-rw-r--r--locale/gitlab.pot18
-rw-r--r--spec/controllers/admin/application_settings/appearances_controller_spec.rb1
-rw-r--r--spec/frontend/content_editor/services/markdown_serializer_spec.js39
-rw-r--r--spec/lib/banzai/filter/timeout_html_pipeline_filter_spec.rb19
-rw-r--r--spec/lib/gitlab/ci/pipeline/chain/validate/abilities_spec.rb4
-rw-r--r--spec/lib/gitlab/other_markup_spec.rb10
-rw-r--r--spec/models/appearance_spec.rb1
-rw-r--r--spec/requests/api/appearance_spec.rb3
-rw-r--r--spec/support/shared_examples/features/discussion_comments_shared_example.rb2
52 files changed, 755 insertions, 190 deletions
diff --git a/app/assets/javascripts/content_editor/extensions/code_block_highlight.js b/app/assets/javascripts/content_editor/extensions/code_block_highlight.js
index 27432b1e18b..1d85bfcc965 100644
--- a/app/assets/javascripts/content_editor/extensions/code_block_highlight.js
+++ b/app/assets/javascripts/content_editor/extensions/code_block_highlight.js
@@ -23,6 +23,10 @@ export default CodeBlockLowlight.extend({
// eslint-disable-next-line @gitlab/require-i18n-strings
default: 'code highlight',
},
+ langParams: {
+ default: null,
+ parseHTML: (element) => element.dataset.langParams,
+ },
};
},
addInputRules() {
diff --git a/app/assets/javascripts/content_editor/extensions/image.js b/app/assets/javascripts/content_editor/extensions/image.js
index 65849ec4d0d..fc4c108b773 100644
--- a/app/assets/javascripts/content_editor/extensions/image.js
+++ b/app/assets/javascripts/content_editor/extensions/image.js
@@ -52,6 +52,22 @@ export default Image.extend({
return img.getAttribute('title');
},
},
+ width: {
+ default: null,
+ parseHTML: (element) => {
+ const img = resolveImageEl(element);
+
+ return img.getAttribute('width');
+ },
+ },
+ height: {
+ default: null,
+ parseHTML: (element) => {
+ const img = resolveImageEl(element);
+
+ return img.getAttribute('height');
+ },
+ },
isReference: {
default: false,
renderHTML: () => '',
@@ -76,6 +92,8 @@ export default Image.extend({
src: HTMLAttributes.src,
alt: HTMLAttributes.alt,
title: HTMLAttributes.title,
+ width: HTMLAttributes.width,
+ height: HTMLAttributes.height,
},
];
},
diff --git a/app/assets/javascripts/content_editor/services/serialization_helpers.js b/app/assets/javascripts/content_editor/services/serialization_helpers.js
index 5ee9d66def1..131c79357bf 100644
--- a/app/assets/javascripts/content_editor/services/serialization_helpers.js
+++ b/app/assets/javascripts/content_editor/services/serialization_helpers.js
@@ -308,7 +308,7 @@ export function renderHardBreak(state, node, parent, index) {
}
export function renderImage(state, node) {
- const { alt, canonicalSrc, src, title, isReference } = node.attrs;
+ const { alt, canonicalSrc, src, title, width, height, isReference } = node.attrs;
if (isString(src) || isString(canonicalSrc)) {
const quotedTitle = title ? ` ${state.quote(title)}` : '';
@@ -316,7 +316,17 @@ export function renderImage(state, node) {
? `[${canonicalSrc}]`
: `(${state.esc(canonicalSrc || src)}${quotedTitle})`;
- state.write(`![${state.esc(alt || '')}]${sourceExpression}`);
+ const sizeAttributes = [];
+ if (width) {
+ sizeAttributes.push(`width=${JSON.stringify(width)}`);
+ }
+ if (height) {
+ sizeAttributes.push(`height=${JSON.stringify(height)}`);
+ }
+
+ const attributes = sizeAttributes.length ? `{${sizeAttributes.join(' ')}}` : '';
+
+ state.write(`![${state.esc(alt || '')}]${sourceExpression}${attributes}`);
}
}
@@ -332,7 +342,11 @@ export function renderComment(state, node) {
}
export function renderCodeBlock(state, node) {
- state.write(`\`\`\`${node.attrs.language || ''}\n`);
+ state.write(
+ `\`\`\`${
+ (node.attrs.language || '') + (node.attrs.langParams ? `:${node.attrs.langParams}` : '')
+ }\n`,
+ );
state.text(node.textContent, false);
state.ensureNewLine();
state.write('```');
diff --git a/app/assets/javascripts/jobs/components/job/sidebar/sidebar_job_details_container.vue b/app/assets/javascripts/jobs/components/job/sidebar/sidebar_job_details_container.vue
index 3b1509e5be5..8300a22cb67 100644
--- a/app/assets/javascripts/jobs/components/job/sidebar/sidebar_job_details_container.vue
+++ b/app/assets/javascripts/jobs/components/job/sidebar/sidebar_job_details_container.vue
@@ -1,6 +1,7 @@
<script>
import { mapState } from 'vuex';
import { GlBadge } from '@gitlab/ui';
+import { helpPagePath } from '~/helpers/help_page_helper';
import { timeIntervalInWords } from '~/lib/utils/datetime_utility';
import { __, sprintf } from '~/locale';
import timeagoMixin from '~/vue_shared/mixins/timeago';
@@ -79,7 +80,9 @@ export default {
TAGS: __('Tags:'),
TIMEOUT: __('Timeout'),
},
- RUNNER_HELP_URL: 'https://docs.gitlab.com/runner/register/index.html',
+ TIMEOUT_HELP_URL: helpPagePath('/ci/pipelines/settings.md', {
+ anchor: 'set-a-limit-for-how-long-jobs-can-run',
+ }),
};
</script>
@@ -96,7 +99,7 @@ export default {
<detail-row v-if="job.queued_duration" :value="queuedDuration" :title="$options.i18n.QUEUED" />
<detail-row
v-if="hasTimeout"
- :help-url="$options.RUNNER_HELP_URL"
+ :help-url="$options.TIMEOUT_HELP_URL"
:value="timeout"
data-testid="job-timeout"
:title="$options.i18n.TIMEOUT"
diff --git a/app/controllers/admin/application_settings/appearances_controller.rb b/app/controllers/admin/application_settings/appearances_controller.rb
index cf765c96a8f..1a8447185a7 100644
--- a/app/controllers/admin/application_settings/appearances_controller.rb
+++ b/app/controllers/admin/application_settings/appearances_controller.rb
@@ -68,6 +68,7 @@ class Admin::ApplicationSettings::AppearancesController < Admin::ApplicationCont
def allowed_appearance_params
%i[
title
+ short_title
description
logo
logo_cache
diff --git a/app/models/appearance.rb b/app/models/appearance.rb
index 03fbf0d176c..4a046b3ab20 100644
--- a/app/models/appearance.rb
+++ b/app/models/appearance.rb
@@ -6,6 +6,7 @@ class Appearance < ApplicationRecord
include WithUploads
attribute :title, default: ''
+ attribute :short_title, default: ''
attribute :description, default: ''
attribute :new_project_guidelines, default: ''
attribute :profile_image_guidelines, default: ''
diff --git a/config/feature_flags/development/markup_rendering_timeout.yml b/config/feature_flags/development/markup_rendering_timeout.yml
deleted file mode 100644
index 6c579ebe28a..00000000000
--- a/config/feature_flags/development/markup_rendering_timeout.yml
+++ /dev/null
@@ -1,8 +0,0 @@
----
-name: markup_rendering_timeout
-introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/89509
-rollout_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/365358
-milestone: '15.1'
-type: development
-group: group::source code
-default_enabled: false
diff --git a/config/gitlab_loose_foreign_keys.yml b/config/gitlab_loose_foreign_keys.yml
index f0d6ecaf26f..5212ffbfd6b 100644
--- a/config/gitlab_loose_foreign_keys.yml
+++ b/config/gitlab_loose_foreign_keys.yml
@@ -178,6 +178,10 @@ dast_scanner_profiles_builds:
- table: ci_builds
column: ci_build_id
on_delete: async_delete
+dast_scanner_profiles_tags:
+ - table: tags
+ column: tag_id
+ on_delete: async_delete
dast_site_profiles_builds:
- table: ci_builds
column: ci_build_id
diff --git a/db/docs/dast_scanner_profiles_tags.yml b/db/docs/dast_scanner_profiles_tags.yml
new file mode 100644
index 00000000000..9766ce6c4fc
--- /dev/null
+++ b/db/docs/dast_scanner_profiles_tags.yml
@@ -0,0 +1,10 @@
+---
+table_name: dast_scanner_profiles_tags
+classes:
+ - Dast::ScannerProfileTag
+feature_categories:
+ - dynamic_application_security_testing
+description: Join Table for Runner tags and DAST Scanner Profiles
+introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/104909
+milestone: '15.7'
+gitlab_schema: gitlab_main
diff --git a/db/migrate/20221114131943_add_short_title_to_appearances.rb b/db/migrate/20221114131943_add_short_title_to_appearances.rb
new file mode 100644
index 00000000000..6bf5d32f441
--- /dev/null
+++ b/db/migrate/20221114131943_add_short_title_to_appearances.rb
@@ -0,0 +1,10 @@
+# frozen_string_literal: true
+
+class AddShortTitleToAppearances < Gitlab::Database::Migration[2.0]
+ # rubocop:disable Migration/AddLimitToTextColumns
+ # limit is added in 20221115085813_add_limit_to_appereances_short_title.rb
+ def change
+ add_column :appearances, :short_title, :text
+ end
+ # rubocop:enable Migration/AddLimitToTextColumns
+end
diff --git a/db/migrate/20221115085813_add_limit_to_appereances_short_title.rb b/db/migrate/20221115085813_add_limit_to_appereances_short_title.rb
new file mode 100644
index 00000000000..d75895216f7
--- /dev/null
+++ b/db/migrate/20221115085813_add_limit_to_appereances_short_title.rb
@@ -0,0 +1,13 @@
+# frozen_string_literal: true
+
+class AddLimitToAppereancesShortTitle < Gitlab::Database::Migration[2.0]
+ disable_ddl_transaction!
+
+ def up
+ add_text_limit :appearances, :short_title, 255
+ end
+
+ def down
+ remove_text_limit :appearances, :short_title
+ end
+end
diff --git a/db/migrate/20221207220120_create_dast_scanner_profiles_runner_tags.rb b/db/migrate/20221207220120_create_dast_scanner_profiles_runner_tags.rb
new file mode 100644
index 00000000000..f07cebb6b2c
--- /dev/null
+++ b/db/migrate/20221207220120_create_dast_scanner_profiles_runner_tags.rb
@@ -0,0 +1,18 @@
+# frozen_string_literal: true
+
+class CreateDastScannerProfilesRunnerTags < Gitlab::Database::Migration[2.1]
+ def up
+ create_table :dast_scanner_profiles_tags do |t|
+ t.references :dast_scanner_profile, null: false, foreign_key: { on_delete: :cascade },
+ index: { name: 'i_dast_scanner_profiles_tags_on_scanner_profiles_id' }
+
+ t.bigint :tag_id, null: false
+
+ t.index :tag_id, name: :index_dast_scanner_profiles_tags_on_tag_id
+ end
+ end
+
+ def down
+ drop_table :dast_scanner_profiles_tags
+ end
+end
diff --git a/db/schema_migrations/20221114131943 b/db/schema_migrations/20221114131943
new file mode 100644
index 00000000000..ce5aa4208b4
--- /dev/null
+++ b/db/schema_migrations/20221114131943
@@ -0,0 +1 @@
+f101fcfae81e560c141c571f1494d63821b28271bda74cc2697cea9895872f8f \ No newline at end of file
diff --git a/db/schema_migrations/20221115085813 b/db/schema_migrations/20221115085813
new file mode 100644
index 00000000000..c2f7c8a7c51
--- /dev/null
+++ b/db/schema_migrations/20221115085813
@@ -0,0 +1 @@
+b6538475a9c8a48e640ae367523b9843573e271e508e3f8fe575abef0a4b64f3 \ No newline at end of file
diff --git a/db/schema_migrations/20221207220120 b/db/schema_migrations/20221207220120
new file mode 100644
index 00000000000..3ff084a13ac
--- /dev/null
+++ b/db/schema_migrations/20221207220120
@@ -0,0 +1 @@
+caa6f87b639b62ea25c9f7adc81bd64bba4084b8987bfc5df84f507b63faab4a \ No newline at end of file
diff --git a/db/structure.sql b/db/structure.sql
index 2aad46280a3..9eae9c42525 100644
--- a/db/structure.sql
+++ b/db/structure.sql
@@ -11063,7 +11063,9 @@ CREATE TABLE appearances (
email_header_and_footer_enabled boolean DEFAULT false NOT NULL,
profile_image_guidelines text,
profile_image_guidelines_html text,
- CONSTRAINT appearances_profile_image_guidelines CHECK ((char_length(profile_image_guidelines) <= 4096))
+ short_title text,
+ CONSTRAINT appearances_profile_image_guidelines CHECK ((char_length(profile_image_guidelines) <= 4096)),
+ CONSTRAINT check_fdf3064682 CHECK ((char_length(short_title) <= 255))
);
CREATE SEQUENCE appearances_id_seq
@@ -14530,6 +14532,21 @@ CREATE SEQUENCE dast_scanner_profiles_id_seq
ALTER SEQUENCE dast_scanner_profiles_id_seq OWNED BY dast_scanner_profiles.id;
+CREATE TABLE dast_scanner_profiles_tags (
+ id bigint NOT NULL,
+ dast_scanner_profile_id bigint NOT NULL,
+ tag_id bigint NOT NULL
+);
+
+CREATE SEQUENCE dast_scanner_profiles_tags_id_seq
+ START WITH 1
+ INCREMENT BY 1
+ NO MINVALUE
+ NO MAXVALUE
+ CACHE 1;
+
+ALTER SEQUENCE dast_scanner_profiles_tags_id_seq OWNED BY dast_scanner_profiles_tags.id;
+
CREATE TABLE dast_site_profile_secret_variables (
id bigint NOT NULL,
dast_site_profile_id bigint NOT NULL,
@@ -23957,6 +23974,8 @@ ALTER TABLE ONLY dast_profiles ALTER COLUMN id SET DEFAULT nextval('dast_profile
ALTER TABLE ONLY dast_scanner_profiles ALTER COLUMN id SET DEFAULT nextval('dast_scanner_profiles_id_seq'::regclass);
+ALTER TABLE ONLY dast_scanner_profiles_tags ALTER COLUMN id SET DEFAULT nextval('dast_scanner_profiles_tags_id_seq'::regclass);
+
ALTER TABLE ONLY dast_site_profile_secret_variables ALTER COLUMN id SET DEFAULT nextval('dast_site_profile_secret_variables_id_seq'::regclass);
ALTER TABLE ONLY dast_site_profiles ALTER COLUMN id SET DEFAULT nextval('dast_site_profiles_id_seq'::regclass);
@@ -25820,6 +25839,9 @@ ALTER TABLE ONLY dast_scanner_profiles_builds
ALTER TABLE ONLY dast_scanner_profiles
ADD CONSTRAINT dast_scanner_profiles_pkey PRIMARY KEY (id);
+ALTER TABLE ONLY dast_scanner_profiles_tags
+ ADD CONSTRAINT dast_scanner_profiles_tags_pkey PRIMARY KEY (id);
+
ALTER TABLE ONLY dast_site_profile_secret_variables
ADD CONSTRAINT dast_site_profile_secret_variables_pkey PRIMARY KEY (id);
@@ -28131,6 +28153,8 @@ CREATE INDEX i_compliance_frameworks_on_id_and_created_at ON compliance_manageme
CREATE INDEX i_dast_pre_scan_verification_steps_on_pre_scan_verification_id ON dast_pre_scan_verification_steps USING btree (dast_pre_scan_verification_id);
+CREATE INDEX i_dast_scanner_profiles_tags_on_scanner_profiles_id ON dast_scanner_profiles_tags USING btree (dast_scanner_profile_id);
+
CREATE UNIQUE INDEX i_pm_licenses_on_spdx_identifier ON pm_licenses USING btree (spdx_identifier);
CREATE UNIQUE INDEX i_pm_package_versions_on_package_id_and_version ON pm_package_versions USING btree (pm_package_id, version);
@@ -29091,6 +29115,8 @@ CREATE UNIQUE INDEX index_dast_profiles_pipelines_on_ci_pipeline_id ON dast_prof
CREATE UNIQUE INDEX index_dast_scanner_profiles_on_project_id_and_name ON dast_scanner_profiles USING btree (project_id, name);
+CREATE INDEX index_dast_scanner_profiles_tags_on_tag_id ON dast_scanner_profiles_tags USING btree (tag_id);
+
CREATE INDEX index_dast_site_profiles_on_dast_site_id ON dast_site_profiles USING btree (dast_site_id);
CREATE UNIQUE INDEX index_dast_site_profiles_on_project_id_and_name ON dast_site_profiles USING btree (project_id, name);
@@ -35412,6 +35438,9 @@ ALTER TABLE ONLY incident_management_timeline_event_tags
ALTER TABLE ONLY user_callouts
ADD CONSTRAINT fk_rails_ddfdd80f3d FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE;
+ALTER TABLE ONLY dast_scanner_profiles_tags
+ ADD CONSTRAINT fk_rails_deb79b7f19 FOREIGN KEY (dast_scanner_profile_id) REFERENCES dast_scanner_profiles(id) ON DELETE CASCADE;
+
ALTER TABLE ONLY vulnerability_feedback
ADD CONSTRAINT fk_rails_debd54e456 FOREIGN KEY (project_id) REFERENCES projects(id) ON DELETE CASCADE;
diff --git a/doc/.vale/gitlab/CurrentStatus.yml b/doc/.vale/gitlab/CurrentStatus.yml
index 57b95dcf4ac..9972573b406 100644
--- a/doc/.vale/gitlab/CurrentStatus.yml
+++ b/doc/.vale/gitlab/CurrentStatus.yml
@@ -1,14 +1,13 @@
---
-# Suggestion: gitlab.CurrentStatus
+# Warning: gitlab.CurrentStatus
#
# Checks for words that indicate a product or feature may change in the future.
#
# For a list of all options, see https://vale.sh/docs/topics/styles/
extends: existence
message: "Remove '%s'. The documentation reflects the current state of the product."
-level: suggestion
+level: warning
ignorecase: true
link: https://docs.gitlab.com/ee/development/documentation/versions.html#promising-features-in-future-versions
tokens:
- currently
- - yet
diff --git a/doc/.vale/gitlab/ElementDescriptors.yml b/doc/.vale/gitlab/ElementDescriptors.yml
index f3573f5ce65..f806f5878e1 100644
--- a/doc/.vale/gitlab/ElementDescriptors.yml
+++ b/doc/.vale/gitlab/ElementDescriptors.yml
@@ -1,13 +1,14 @@
---
-# Suggestion: gitlab.ElementDescriptors
+# Warning: gitlab.ElementDescriptors
#
-# Suggests the correct way to describe elements in a form.
+# Suggests the correct way to describe a button.
#
# For a list of all options, see https://vale.sh/docs/topics/styles/
-extends: substitution
-message: "When describing elements, %s '%s'."
-link: https://docs.gitlab.com/ee/development/documentation/styleguide/index.html#language
-level: suggestion
+extends: existence
+message: "If possible, rewrite to remove 'button'."
+link: https://docs.gitlab.com/ee/development/documentation/styleguide/word_list.html#button
+level: warning
ignorecase: true
-swap:
- button: 'if possible, rewrite to remove'
+scope: raw
+raw:
+ - \*\*.+?\*\* button
diff --git a/doc/.vale/gitlab/InclusionAbleism.yml b/doc/.vale/gitlab/InclusionAbleism.yml
index 7419430c8a2..3ee356155cd 100644
--- a/doc/.vale/gitlab/InclusionAbleism.yml
+++ b/doc/.vale/gitlab/InclusionAbleism.yml
@@ -1,5 +1,5 @@
---
-# Suggestion: gitlab.InclusionAbleism
+# Warning: gitlab.InclusionAbleism
#
# Suggests alternatives for words that foster ableism.
#
@@ -7,7 +7,7 @@
extends: substitution
message: "Use inclusive language. Consider '%s' instead of '%s'."
link: https://docs.gitlab.com/ee/development/documentation/styleguide/word_list.html
-level: suggestion
+level: warning
ignorecase: true
swap:
sanity (?:check|test): check for completeness
diff --git a/doc/.vale/gitlab/InclusionGender.yml b/doc/.vale/gitlab/InclusionGender.yml
index ce8861b6a09..dcf8c1930ec 100644
--- a/doc/.vale/gitlab/InclusionGender.yml
+++ b/doc/.vale/gitlab/InclusionGender.yml
@@ -1,5 +1,5 @@
---
-# Suggestion: gitlab.InclusionGender
+# Warning: gitlab.InclusionGender
#
# Suggests alternatives for words that are gender-specific.
#
@@ -7,7 +7,7 @@
extends: substitution
message: "Use inclusive language. Consider '%s' instead of '%s'."
link: https://docs.gitlab.com/ee/development/documentation/styleguide/word_list.html
-level: suggestion
+level: warning
ignorecase: true
swap:
mankind: humanity, people
diff --git a/doc/.vale/gitlab/Simplicity.yml b/doc/.vale/gitlab/Simplicity.yml
index 89169c1aa46..fd9b1c5e5a6 100644
--- a/doc/.vale/gitlab/Simplicity.yml
+++ b/doc/.vale/gitlab/Simplicity.yml
@@ -1,12 +1,12 @@
---
-# Suggestion: gitlab.Simplicity
+# Warning: gitlab.Simplicity
#
# Checks for words implying ease of use, to avoid cognitive dissonance for frustrated users.
#
# For a list of all options, see https://vale.sh/docs/topics/styles/
extends: existence
message: "Remove '%s'. Be precise instead of subjective."
-level: suggestion
+level: warning
ignorecase: true
link: https://docs.gitlab.com/ee/development/documentation/styleguide/word_list.html
tokens:
diff --git a/doc/.vale/gitlab/Units.yml b/doc/.vale/gitlab/Units.yml
index 4211fdee38b..e6263ad66b4 100644
--- a/doc/.vale/gitlab/Units.yml
+++ b/doc/.vale/gitlab/Units.yml
@@ -1,5 +1,5 @@
---
-# Suggestion: gitlab.Units
+# Warning: gitlab.Units
#
# Recommends a space between a number and a unit of measure.
#
@@ -8,7 +8,7 @@ extends: existence
message: "Add a space between the number and the unit in '%s'."
link: 'https://docs.gitlab.com/ee/development/documentation/styleguide/'
nonword: true
-level: suggestion
+level: warning
ignorecase: true
tokens:
- \d+(?:B|kB|KiB|MB|MiB|GB|GiB|TB|TiB)
diff --git a/doc/administration/housekeeping.md b/doc/administration/housekeeping.md
index 814575caf50..584f06ef537 100644
--- a/doc/administration/housekeeping.md
+++ b/doc/administration/housekeeping.md
@@ -45,11 +45,12 @@ be slow.
### Heuristical housekeeping
-> - [Introduced](https://gitlab.com/gitlab-org/gitaly/-/issues/2634) in GitLab 14.9 for the [manual trigger](#manual-trigger) and the [push-based trigger](#push-based-trigger) [with a flag](feature_flags.md) named `optimized_housekeeping`. Disabled by default.
+> - [Introduced](https://gitlab.com/gitlab-org/gitaly/-/issues/2634) in GitLab 14.9 for the [manual trigger](#manual-trigger) and the [push-based trigger](#push-based-trigger) [with a flag](feature_flags.md) named `optimized_housekeeping`. Enabled by default.
> - [Enabled on GitLab.com](https://gitlab.com/gitlab-org/gitlab/-/issues/353607) in GitLab 14.10.
FLAG:
-On self-managed GitLab, by default this feature is not available for the [manual trigger](#manual-trigger) and the [push-based trigger](#push-based-trigger).
+On self-managed GitLab, by default this feature is available. To hide the feature, ask an administrator to [disable the feature flag](feature_flags.md) named `optimize_repository`.
+
To make it available, ask an administrator to [enable the feature flag](feature_flags.md) named `optimized_housekeeping`.
The heuristical (or "opportunistic") housekeeping strategy analyzes the
@@ -79,6 +80,19 @@ more time the bigger they get. It is especially important in large
monorepos (which receive a lot of traffic) to avoid optimizing them too
frequently.
+You can change how often Gitaly is asked to optimize a repository.
+
+1. On the top bar, select **Main menu > Admin**.
+1. On the left sidebar, select **Settings > Repository**.
+1. Expand **Repository maintenance**.
+1. In the **Housekeeping** section, configure the housekeeping options.
+1. Select **Save changes**.
+
+- **Enable automatic repository housekeeping**: Regularly ask Gitaly to run repository optimization. If you
+ keep this setting disabled for a long time, Git repository access on your GitLab server becomes
+ slower and your repositories use more disk space.
+- **Optimize repository period**: Number of Git pushes after which Gitaly is asked to optimize a repository.
+
## Running housekeeping tasks
There are different ways in which GitLab runs housekeeping tasks:
@@ -108,8 +122,13 @@ To trigger housekeeping tasks manually:
This starts an asynchronous background worker for the project's repository. The
background worker executes `git gc`, which performs a number of optimizations.
+<!--- start_remove The following content will be removed on remove_date: '2023-04-22' -->
+
### Push-based trigger
+FLAG:
+On self-managed GitLab, by default this feature is not available and superseded by [heuristical housekeeping](#heuristical-housekeeping). It is planned to be removed in 15.8. To enable the feature, ask an administrator to [disable the feature flag](feature_flags.md) named `optimize_repository`.
+
GitLab automatically runs repository housekeeping tasks after a configured
number of pushes:
diff --git a/doc/api/appearance.md b/doc/api/appearance.md
index f8926f8a91d..622239e7283 100644
--- a/doc/api/appearance.md
+++ b/doc/api/appearance.md
@@ -29,6 +29,7 @@ Example response:
```json
{
"title": "GitLab Test Instance",
+ "short_title": "GitLab",
"description": "gitlab-test.example.com",
"logo": "/uploads/-/system/appearance/logo/1/logo.png",
"header_logo": "/uploads/-/system/appearance/header_logo/1/header.png",
@@ -54,6 +55,7 @@ PUT /application/appearance
| Attribute | Type | Required | Description |
| --------------------------------- | ------- | -------- | ----------- |
| `title` | string | no | Instance title on the sign in / sign up page
+| `short_title` | string | no | Short title for progressive web app
| `description` | string | no | Markdown text shown on the sign in / sign up page
| `logo` | mixed | no | Instance image used on the sign in / sign up page. See [Change logo](#change-logo)
| `header_logo` | mixed | no | Instance image used for the main navigation bar
@@ -75,6 +77,7 @@ Example response:
```json
{
"title": "GitLab Test Instance",
+ "short_title": "GitLab",
"description": "gitlab-test.example.com",
"logo": "/uploads/-/system/appearance/logo/1/logo.png",
"header_logo": "/uploads/-/system/appearance/header_logo/1/header.png",
diff --git a/doc/api/graphql/reference/index.md b/doc/api/graphql/reference/index.md
index bc7b151a9be..a3d4458bb6c 100644
--- a/doc/api/graphql/reference/index.md
+++ b/doc/api/graphql/reference/index.md
@@ -17020,10 +17020,11 @@ Represents vulnerability finding of a security report on the pipeline.
| <a id="pipelinesecurityreportfindingreporttype"></a>`reportType` | [`VulnerabilityReportType`](#vulnerabilityreporttype) | Type of the security report that found the vulnerability finding. |
| <a id="pipelinesecurityreportfindingscanner"></a>`scanner` | [`VulnerabilityScanner`](#vulnerabilityscanner) | Scanner metadata for the vulnerability. |
| <a id="pipelinesecurityreportfindingseverity"></a>`severity` | [`VulnerabilitySeverity`](#vulnerabilityseverity) | Severity of the vulnerability finding. |
-| <a id="pipelinesecurityreportfindingsolution"></a>`solution` | [`String`](#string) | URL to the vulnerability's details page. |
+| <a id="pipelinesecurityreportfindingsolution"></a>`solution` | [`String`](#string) | Solution for resolving the security report finding. |
| <a id="pipelinesecurityreportfindingstate"></a>`state` | [`VulnerabilityState`](#vulnerabilitystate) | Finding status. |
| <a id="pipelinesecurityreportfindingtitle"></a>`title` | [`String`](#string) | Title of the vulnerability finding. |
| <a id="pipelinesecurityreportfindinguuid"></a>`uuid` | [`String`](#string) | UUIDv5 digest based on the vulnerability's report type, primary identifier, location, fingerprint, project identifier. |
+| <a id="pipelinesecurityreportfindingvulnerability"></a>`vulnerability` | [`Vulnerability`](#vulnerability) | Vulnerability related to the security report finding. |
### `PreviewBillableUserChange`
diff --git a/doc/api/merge_request_approvals.md b/doc/api/merge_request_approvals.md
index bc91f2752c6..d9777b87ff2 100644
--- a/doc/api/merge_request_approvals.md
+++ b/doc/api/merge_request_approvals.md
@@ -85,6 +85,7 @@ Supported attributes:
> - Pagination support [introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/31011) in GitLab 15.3 [with a flag](../administration/feature_flags.md) named `approval_rules_pagination`. Enabled by default.
> - `applies_to_all_protected_branches` property was [introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/335316) in GitLab 15.3.
> - Pagination support [generally available](https://gitlab.com/gitlab-org/gitlab/-/issues/366823) in GitLab 15.7. Feature flag `approval_rules_pagination` removed.
+> - `usernames` property was [introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/) in GitLab 15.8.
You can request information about a project's approval rules using the following endpoint:
@@ -188,6 +189,7 @@ Supported attributes:
> - Introduced in GitLab 13.7.
> - `applies_to_all_protected_branches` property was [introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/335316) in GitLab 15.3.
+> - `usernames` property was [introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/) in GitLab 1x.x.
You can request information about a single project approval rules using the following endpoint:
@@ -289,6 +291,7 @@ Supported attributes:
> - Moved to GitLab Premium in 13.9.
> - [Removed](https://gitlab.com/gitlab-org/gitlab/-/issues/357300) the Vulnerability-Check feature in GitLab 15.0.
> - `applies_to_all_protected_branches` property was [introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/335316) in GitLab 15.3.
+> - `usernames` property was [introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/) in GitLab 1x.x.
You can create project approval rules using the following endpoint:
@@ -309,6 +312,7 @@ Supported attributes:
| `report_type` | string | **{dotted-circle}** No | The report type required when the rule type is `report_approver`. The supported report types are `license_scanning` and `code_coverage`. |
| `rule_type` | string | **{dotted-circle}** No | The type of rule. `any_approver` is a pre-configured default rule with `approvals_required` at `0`. Other rules are `regular`. |
| `user_ids` | Array | **{dotted-circle}** No | The IDs of users as approvers. |
+| `usernames` | string array | **{dotted-circle}** No | The usernames for this rule. |
```json
{
@@ -414,6 +418,7 @@ curl --request POST --header "PRIVATE-TOKEN: <your_access_token>" \
> - Moved to GitLab Premium in 13.9.
> - [Removed](https://gitlab.com/gitlab-org/gitlab/-/issues/357300) the Vulnerability-Check feature in GitLab 15.0.
> - `applies_to_all_protected_branches` property was [introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/335316) in GitLab 15.3.
+> - `usernames` property was [introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/) in GitLab 1x.x.
You can update project approval rules using the following endpoint:
@@ -436,6 +441,7 @@ Supported attributes:
| `protected_branch_ids` | Array | **{dotted-circle}** No | The IDs of protected branches to scope the rule by. To identify the ID, [use the API](protected_branches.md#list-protected-branches). |
| `remove_hidden_groups` | boolean | **{dotted-circle}** No | Whether hidden groups should be removed. |
| `user_ids` | Array | **{dotted-circle}** No | The IDs of users as approvers. |
+| `usernames` | string array | **{dotted-circle}** No | The usernames for this rule. |
```json
{
@@ -879,6 +885,7 @@ Supported attributes:
| `approval_project_rule_id` | integer | **{dotted-circle}** No | The ID of a project-level approval rule. |
| `group_ids` | Array | **{dotted-circle}** No | The IDs of groups as approvers. |
| `user_ids` | Array | **{dotted-circle}** No | The IDs of users as approvers. |
+| `usernames` | string array | **{dotted-circle}** No | The usernames for this rule. |
**Important:** When `approval_project_rule_id` is set, the `name`, `users` and
`groups` of project-level rule are copied. The `approvals_required` specified
@@ -969,6 +976,7 @@ Supported attributes:
| `group_ids` | Array | **{dotted-circle}** No | The IDs of groups as approvers. |
| `remove_hidden_groups` | boolean | **{dotted-circle}** No | Whether hidden groups should be removed. |
| `user_ids` | Array | **{dotted-circle}** No | The IDs of users as approvers. |
+| `usernames` | string array | **{dotted-circle}** No | The usernames for this rule. |
```json
{
diff --git a/doc/subscriptions/gitlab_com/index.md b/doc/subscriptions/gitlab_com/index.md
index 75fbd5b7b55..552e9c46c4a 100644
--- a/doc/subscriptions/gitlab_com/index.md
+++ b/doc/subscriptions/gitlab_com/index.md
@@ -323,10 +323,17 @@ For details on upgrading your subscription tier, see
### Automatic subscription renewal
-When you enable automatic renewal, the subscription automatically renews on the
-expiration date without a gap in available service. An invoice is
-generated for the renewal and available for viewing or download on the
-[View invoices](https://customers.gitlab.com/receipts) page.
+When a subscription is set to auto-renew, it renews automatically on the
+expiration date without a gap in available service. Subscriptions purchased through Customers Portal or GitLab.com are set to auto-renew by default. The number of seats is adjusted to fit the [number of billable users in your group](#view-seat-usage) at the time of renewal. You can view and download your renewal invoice on the
+[View invoices](https://customers.gitlab.com/receipts) page. If your account has a [saved credit card](../index.md#change-your-payment-method), the card is charged for the invoice amount. If we are unable to process a payment or the auto-renewal fails for any other reason, you have 14 days to renew your subscription. After that, your access is downgraded.
+
+#### Email notifications
+
+15 days before a subscription automatically renews, an email is sent with information about the renewal.
+
+- If your credit card is expired, the email tells you how to update it.
+- If you have any outstanding overages, the email tells you to contact our Sales team.
+- If there are no issues, the email specifies the names and quantity of the products being renewed. The email also includes the total amount you owe. If your usage increases or decreases before renewal, this amount can change.
#### Enable or disable automatic subscription renewal
diff --git a/doc/user/admin_area/settings/account_and_limit_settings.md b/doc/user/admin_area/settings/account_and_limit_settings.md
index 44a6bbb9d8e..b235b812416 100644
--- a/doc/user/admin_area/settings/account_and_limit_settings.md
+++ b/doc/user/admin_area/settings/account_and_limit_settings.md
@@ -57,7 +57,7 @@ You can change the maximum push size for your instance:
1. On the left sidebar, select **Settings > General**, then expand **Account and limit**.
1. Increase or decrease by changing the value in **Maximum push size (MB)**.
-For GitLab.com application limits, read [GitLab application limits](../../../administration/instance_limits.md#max-push-size).
+For GitLab.com push size limits, read [accounts and limit settings](../../gitlab_com/index.md#account-and-limit-settings).
NOTE:
When you [add files to a repository](../../project/repository/web_editor.md#create-a-file)
diff --git a/doc/user/project/merge_requests/img/add_previously_merged_commits_button_v14_1.png b/doc/user/project/merge_requests/img/add_previously_merged_commits_button_v14_1.png
deleted file mode 100644
index e60e869f854..00000000000
--- a/doc/user/project/merge_requests/img/add_previously_merged_commits_button_v14_1.png
+++ /dev/null
Binary files differ
diff --git a/doc/user/project/merge_requests/img/commit_nav_v13_11.png b/doc/user/project/merge_requests/img/commit_nav_v13_11.png
deleted file mode 100644
index a9bc8fa6bee..00000000000
--- a/doc/user/project/merge_requests/img/commit_nav_v13_11.png
+++ /dev/null
Binary files differ
diff --git a/doc/user/project/merge_requests/img/previously_merged_commits_v14_1.png b/doc/user/project/merge_requests/img/previously_merged_commits_v14_1.png
deleted file mode 100644
index 4f49fad10ad..00000000000
--- a/doc/user/project/merge_requests/img/previously_merged_commits_v14_1.png
+++ /dev/null
Binary files differ
diff --git a/glfm_specification/input/gitlab_flavored_markdown/glfm_example_status.yml b/glfm_specification/input/gitlab_flavored_markdown/glfm_example_status.yml
index e986f5309e8..501d06692ea 100644
--- a/glfm_specification/input/gitlab_flavored_markdown/glfm_example_status.yml
+++ b/glfm_specification/input/gitlab_flavored_markdown/glfm_example_status.yml
@@ -78,3 +78,33 @@
skip_running_conformance_wysiwyg_tests: Example currently fails. See https://gitlab.com/gitlab-org/gitlab/-/issues/383866
skip_running_snapshot_wysiwyg_html_tests: Example currently fails. See https://gitlab.com/gitlab-org/gitlab/-/issues/383866
skip_running_snapshot_prosemirror_json_tests: Example currently fails. See https://gitlab.com/gitlab-org/gitlab/-/issues/383866
+08_05_00__gitlab_internal_extension_markdown__image_attributes__001:
+ skip_update_example_snapshot_html_wysiwyg: WYSYWIG and prosemirror examples not generated correctly. See https://gitlab.com/gitlab-org/gitlab/-/merge_requests/106733#note_1206201340
+ skip_update_example_snapshot_prosemirror_json: WYSYWIG and prosemirror examples not generated correctly. See https://gitlab.com/gitlab-org/gitlab/-/merge_requests/106733#note_1206201340
+ skip_running_conformance_wysiwyg_tests: WYSYWIG and prosemirror examples not generated correctly. See https://gitlab.com/gitlab-org/gitlab/-/merge_requests/106733#note_1206201340
+ skip_running_snapshot_wysiwyg_html_tests: WYSYWIG and prosemirror examples not generated correctly. See https://gitlab.com/gitlab-org/gitlab/-/merge_requests/106733#note_1206201340
+ skip_running_snapshot_prosemirror_json_tests: WYSYWIG and prosemirror examples not generated correctly. See https://gitlab.com/gitlab-org/gitlab/-/merge_requests/106733#note_1206201340
+08_05_00__gitlab_internal_extension_markdown__image_attributes__002:
+ skip_update_example_snapshot_html_wysiwyg: WYSYWIG and prosemirror examples not generated correctly. See https://gitlab.com/gitlab-org/gitlab/-/merge_requests/106733#note_1206201340
+ skip_update_example_snapshot_prosemirror_json: WYSYWIG and prosemirror examples not generated correctly. See https://gitlab.com/gitlab-org/gitlab/-/merge_requests/106733#note_1206201340
+ skip_running_conformance_wysiwyg_tests: WYSYWIG and prosemirror examples not generated correctly. See https://gitlab.com/gitlab-org/gitlab/-/merge_requests/106733#note_1206201340
+ skip_running_snapshot_wysiwyg_html_tests: WYSYWIG and prosemirror examples not generated correctly. See https://gitlab.com/gitlab-org/gitlab/-/merge_requests/106733#note_1206201340
+ skip_running_snapshot_prosemirror_json_tests: WYSYWIG and prosemirror examples not generated correctly. See https://gitlab.com/gitlab-org/gitlab/-/merge_requests/106733#note_1206201340
+08_05_00__gitlab_internal_extension_markdown__image_attributes__003:
+ skip_update_example_snapshot_html_wysiwyg: WYSYWIG and prosemirror examples not generated correctly. See https://gitlab.com/gitlab-org/gitlab/-/merge_requests/106733#note_1206201340
+ skip_update_example_snapshot_prosemirror_json: WYSYWIG and prosemirror examples not generated correctly. See https://gitlab.com/gitlab-org/gitlab/-/merge_requests/106733#note_1206201340
+ skip_running_conformance_wysiwyg_tests: WYSYWIG and prosemirror examples not generated correctly. See https://gitlab.com/gitlab-org/gitlab/-/merge_requests/106733#note_1206201340
+ skip_running_snapshot_wysiwyg_html_tests: WYSYWIG and prosemirror examples not generated correctly. See https://gitlab.com/gitlab-org/gitlab/-/merge_requests/106733#note_1206201340
+ skip_running_snapshot_prosemirror_json_tests: WYSYWIG and prosemirror examples not generated correctly. See https://gitlab.com/gitlab-org/gitlab/-/merge_requests/106733#note_1206201340
+08_05_00__gitlab_internal_extension_markdown__image_attributes__004:
+ skip_update_example_snapshot_html_wysiwyg: WYSYWIG and prosemirror examples not generated correctly. See https://gitlab.com/gitlab-org/gitlab/-/merge_requests/106733#note_1206201340
+ skip_update_example_snapshot_prosemirror_json: WYSYWIG and prosemirror examples not generated correctly. See https://gitlab.com/gitlab-org/gitlab/-/merge_requests/106733#note_1206201340
+ skip_running_conformance_wysiwyg_tests: WYSYWIG and prosemirror examples not generated correctly. See https://gitlab.com/gitlab-org/gitlab/-/merge_requests/106733#note_1206201340
+ skip_running_snapshot_wysiwyg_html_tests: WYSYWIG and prosemirror examples not generated correctly. See https://gitlab.com/gitlab-org/gitlab/-/merge_requests/106733#note_1206201340
+ skip_running_snapshot_prosemirror_json_tests: WYSYWIG and prosemirror examples not generated correctly. See https://gitlab.com/gitlab-org/gitlab/-/merge_requests/106733#note_1206201340
+08_05_00__gitlab_internal_extension_markdown__image_attributes__005:
+ skip_update_example_snapshot_html_wysiwyg: WYSYWIG and prosemirror examples not generated correctly. See https://gitlab.com/gitlab-org/gitlab/-/merge_requests/106733#note_1206201340
+ skip_update_example_snapshot_prosemirror_json: WYSYWIG and prosemirror examples not generated correctly. See https://gitlab.com/gitlab-org/gitlab/-/merge_requests/106733#note_1206201340
+ skip_running_conformance_wysiwyg_tests: WYSYWIG and prosemirror examples not generated correctly. See https://gitlab.com/gitlab-org/gitlab/-/merge_requests/106733#note_1206201340
+ skip_running_snapshot_wysiwyg_html_tests: WYSYWIG and prosemirror examples not generated correctly. See https://gitlab.com/gitlab-org/gitlab/-/merge_requests/106733#note_1206201340
+ skip_running_snapshot_prosemirror_json_tests: WYSYWIG and prosemirror examples not generated correctly. See https://gitlab.com/gitlab-org/gitlab/-/merge_requests/106733#note_1206201340
diff --git a/glfm_specification/input/gitlab_flavored_markdown/glfm_internal_extensions.md b/glfm_specification/input/gitlab_flavored_markdown/glfm_internal_extensions.md
index 4d5b16b7ec0..63518a93f71 100644
--- a/glfm_specification/input/gitlab_flavored_markdown/glfm_internal_extensions.md
+++ b/glfm_specification/input/gitlab_flavored_markdown/glfm_internal_extensions.md
@@ -696,4 +696,54 @@ Fernstraßen<wbr>bau<wbr>privat<wbr>finanzierungs<wbr>gesetz
.
TODO: Write canonical HTML for this example
````````````````````````````````
+
+## Image Attributes
+
+See
+[Change the image dimensions](https://docs.gitlab.com/ee/user/markdown.html#change-the-image-dimensions)
+in the GitLab Flavored Markdown documentation.
+
+The `width` and `height` attributes for an image can be specified directly after
+the image markdown.
+
+General syntax conforms to the
+[commonmark-hs attribute syntax](https://github.com/jgm/commonmark-hs/blob/master/commonmark-extensions/test/attributes.md)
+where it makes sense.
+
+```````````````````````````````` example gitlab
+![](https://gitlab.com/logo.png){width="100" height="100"}
+.
+<p><img src="https://gitlab.com/logo.png" width="100" height="100"></p>
+````````````````````````````````
+
+`%` and `px` units may also be specified.
+
+```````````````````````````````` example gitlab
+![](https://gitlab.com/logo.png){width="100%"}
+.
+<p><img src="https://gitlab.com/logo.png" width="100%"></p>
+````````````````````````````````
+
+```````````````````````````````` example gitlab
+![](https://gitlab.com/logo.png){height="100px"}
+.
+<p><img src="https://gitlab.com/logo.png" height="100px"></p>
+````````````````````````````````
+
+Whitespace is tolerated around the delimiters:
+
+```````````````````````````````` example gitlab
+![](https://gitlab.com/logo.png){ width="100" height="100" }
+.
+<p><img src="https://gitlab.com/logo.png" width="100" height="100"></p>
+````````````````````````````````
+
+Attributes must immediately follow the image markdown.
+
+```````````````````````````````` example gitlab
+![](https://gitlab.com/logo.png) {width="100" height="100"}
+.
+<p><img src="https://gitlab.com/logo.png"> {width="100" height="100"}</p>
+````````````````````````````````
+
<!-- END TESTS -->
diff --git a/glfm_specification/output_example_snapshots/examples_index.yml b/glfm_specification/output_example_snapshots/examples_index.yml
index 934be77ebd5..d08f16c7313 100644
--- a/glfm_specification/output_example_snapshots/examples_index.yml
+++ b/glfm_specification/output_example_snapshots/examples_index.yml
@@ -2240,3 +2240,18 @@
08_04_52__gitlab_internal_extension_markdown__migrated_golden_master_examples__word_break__001:
spec_example_position: 749
source_specification: gitlab
+08_05_00__gitlab_internal_extension_markdown__image_attributes__001:
+ spec_example_position: 750
+ source_specification: gitlab
+08_05_00__gitlab_internal_extension_markdown__image_attributes__002:
+ spec_example_position: 751
+ source_specification: gitlab
+08_05_00__gitlab_internal_extension_markdown__image_attributes__003:
+ spec_example_position: 752
+ source_specification: gitlab
+08_05_00__gitlab_internal_extension_markdown__image_attributes__004:
+ spec_example_position: 753
+ source_specification: gitlab
+08_05_00__gitlab_internal_extension_markdown__image_attributes__005:
+ spec_example_position: 754
+ source_specification: gitlab
diff --git a/glfm_specification/output_example_snapshots/html.yml b/glfm_specification/output_example_snapshots/html.yml
index c724f670bb5..06e88ce4b81 100644
--- a/glfm_specification/output_example_snapshots/html.yml
+++ b/glfm_specification/output_example_snapshots/html.yml
@@ -8625,3 +8625,28 @@
<p data-sourcepos="1:1-1:60" dir="auto">Fernstraßen<wbr>bau<wbr>privat<wbr>finanzierungs<wbr>gesetz</wbr></wbr></wbr></wbr></p>
wysiwyg: |-
<p>Fernstraßenbauprivatfinanzierungsgesetz</p>
+08_05_00__gitlab_internal_extension_markdown__image_attributes__001:
+ canonical: |
+ <p><img src="https://gitlab.com/logo.png" width="100" height="100"></p>
+ static: |-
+ <p data-sourcepos="1:1-1:58" dir="auto"><a class="no-attachment-icon" href="https://gitlab.com/logo.png" target="_blank" rel="nofollow noreferrer noopener"><img src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" alt="" width="100" height="100" decoding="async" class="lazy" data-src="https://gitlab.com/logo.png"></a></p>
+08_05_00__gitlab_internal_extension_markdown__image_attributes__002:
+ canonical: |
+ <p><img src="https://gitlab.com/logo.png" width="100%"></p>
+ static: |-
+ <p data-sourcepos="1:1-1:46" dir="auto"><a class="no-attachment-icon" href="https://gitlab.com/logo.png" target="_blank" rel="nofollow noreferrer noopener"><img src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" alt="" width="100%" decoding="async" class="lazy" data-src="https://gitlab.com/logo.png"></a></p>
+08_05_00__gitlab_internal_extension_markdown__image_attributes__003:
+ canonical: |
+ <p><img src="https://gitlab.com/logo.png" height="100px"></p>
+ static: |-
+ <p data-sourcepos="1:1-1:48" dir="auto"><a class="no-attachment-icon" href="https://gitlab.com/logo.png" target="_blank" rel="nofollow noreferrer noopener"><img src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" alt="" height="100px" decoding="async" class="lazy" data-src="https://gitlab.com/logo.png"></a></p>
+08_05_00__gitlab_internal_extension_markdown__image_attributes__004:
+ canonical: |
+ <p><img src="https://gitlab.com/logo.png" width="100" height="100"></p>
+ static: |-
+ <p data-sourcepos="1:1-1:60" dir="auto"><a class="no-attachment-icon" href="https://gitlab.com/logo.png" target="_blank" rel="nofollow noreferrer noopener"><img src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" alt="" width="100" height="100" decoding="async" class="lazy" data-src="https://gitlab.com/logo.png"></a></p>
+08_05_00__gitlab_internal_extension_markdown__image_attributes__005:
+ canonical: |
+ <p><img src="https://gitlab.com/logo.png"> {width="100" height="100"}</p>
+ static: |-
+ <p data-sourcepos="1:1-1:59" dir="auto"><a class="no-attachment-icon" href="https://gitlab.com/logo.png" target="_blank" rel="nofollow noreferrer noopener"><img src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" alt="" decoding="async" class="lazy" data-src="https://gitlab.com/logo.png"></a> {width="100" height="100"}</p>
diff --git a/glfm_specification/output_example_snapshots/markdown.yml b/glfm_specification/output_example_snapshots/markdown.yml
index 29fce0bccfb..c5145803088 100644
--- a/glfm_specification/output_example_snapshots/markdown.yml
+++ b/glfm_specification/output_example_snapshots/markdown.yml
@@ -2547,3 +2547,13 @@
![Sample Video](https://gitlab.com/gitlab.mp4)
08_04_52__gitlab_internal_extension_markdown__migrated_golden_master_examples__word_break__001: |
Fernstraßen<wbr>bau<wbr>privat<wbr>finanzierungs<wbr>gesetz
+08_05_00__gitlab_internal_extension_markdown__image_attributes__001: |
+ ![](https://gitlab.com/logo.png){width="100" height="100"}
+08_05_00__gitlab_internal_extension_markdown__image_attributes__002: |
+ ![](https://gitlab.com/logo.png){width="100%"}
+08_05_00__gitlab_internal_extension_markdown__image_attributes__003: |
+ ![](https://gitlab.com/logo.png){height="100px"}
+08_05_00__gitlab_internal_extension_markdown__image_attributes__004: |
+ ![](https://gitlab.com/logo.png){ width="100" height="100" }
+08_05_00__gitlab_internal_extension_markdown__image_attributes__005: |
+ ![](https://gitlab.com/logo.png) {width="100" height="100"}
diff --git a/glfm_specification/output_example_snapshots/prosemirror_json.yml b/glfm_specification/output_example_snapshots/prosemirror_json.yml
index a654cacfca6..f6110185348 100644
--- a/glfm_specification/output_example_snapshots/prosemirror_json.yml
+++ b/glfm_specification/output_example_snapshots/prosemirror_json.yml
@@ -7,7 +7,8 @@
"type": "codeBlock",
"attrs": {
"language": null,
- "class": "code highlight"
+ "class": "code highlight",
+ "langParams": null
},
"content": [
{
@@ -26,7 +27,8 @@
"type": "codeBlock",
"attrs": {
"language": null,
- "class": "code highlight"
+ "class": "code highlight",
+ "langParams": null
},
"content": [
{
@@ -45,7 +47,8 @@
"type": "codeBlock",
"attrs": {
"language": null,
- "class": "code highlight"
+ "class": "code highlight",
+ "langParams": null
},
"content": [
{
@@ -119,7 +122,8 @@
"type": "codeBlock",
"attrs": {
"language": null,
- "class": "code highlight"
+ "class": "code highlight",
+ "langParams": null
},
"content": [
{
@@ -148,7 +152,8 @@
"type": "codeBlock",
"attrs": {
"language": null,
- "class": "code highlight"
+ "class": "code highlight",
+ "langParams": null
},
"content": [
{
@@ -181,7 +186,8 @@
"type": "codeBlock",
"attrs": {
"language": null,
- "class": "code highlight"
+ "class": "code highlight",
+ "langParams": null
},
"content": [
{
@@ -204,7 +210,8 @@
"type": "codeBlock",
"attrs": {
"language": null,
- "class": "code highlight"
+ "class": "code highlight",
+ "langParams": null
},
"content": [
{
@@ -439,7 +446,8 @@
"type": "codeBlock",
"attrs": {
"language": null,
- "class": "code highlight"
+ "class": "code highlight",
+ "langParams": null
},
"content": [
{
@@ -993,7 +1001,8 @@
"type": "codeBlock",
"attrs": {
"language": null,
- "class": "code highlight"
+ "class": "code highlight",
+ "langParams": null
},
"content": [
{
@@ -1441,7 +1450,8 @@
"type": "codeBlock",
"attrs": {
"language": null,
- "class": "code highlight"
+ "class": "code highlight",
+ "langParams": null
},
"content": [
{
@@ -1706,6 +1716,7 @@
"attrs": {
"language": "yaml",
"class": "code highlight",
+ "langParams": null,
"isFrontmatter": true
},
"content": [
@@ -1762,6 +1773,7 @@
"attrs": {
"language": "yaml",
"class": "code highlight",
+ "langParams": null,
"isFrontmatter": true
}
}
@@ -1806,7 +1818,8 @@
"type": "codeBlock",
"attrs": {
"language": null,
- "class": "code highlight"
+ "class": "code highlight",
+ "langParams": null
},
"content": [
{
@@ -1977,7 +1990,8 @@
"type": "codeBlock",
"attrs": {
"language": null,
- "class": "code highlight"
+ "class": "code highlight",
+ "langParams": null
},
"content": [
{
@@ -2084,7 +2098,8 @@
"type": "codeBlock",
"attrs": {
"language": null,
- "class": "code highlight"
+ "class": "code highlight",
+ "langParams": null
},
"content": [
{
@@ -2103,7 +2118,8 @@
"type": "codeBlock",
"attrs": {
"language": null,
- "class": "code highlight"
+ "class": "code highlight",
+ "langParams": null
},
"content": [
{
@@ -2122,7 +2138,8 @@
"type": "codeBlock",
"attrs": {
"language": null,
- "class": "code highlight"
+ "class": "code highlight",
+ "langParams": null
},
"content": [
{
@@ -2156,7 +2173,8 @@
"type": "codeBlock",
"attrs": {
"language": null,
- "class": "code highlight"
+ "class": "code highlight",
+ "langParams": null
},
"content": [
{
@@ -2196,7 +2214,8 @@
"type": "codeBlock",
"attrs": {
"language": null,
- "class": "code highlight"
+ "class": "code highlight",
+ "langParams": null
},
"content": [
{
@@ -2221,7 +2240,8 @@
"type": "codeBlock",
"attrs": {
"language": null,
- "class": "code highlight"
+ "class": "code highlight",
+ "langParams": null
},
"content": [
{
@@ -2243,7 +2263,8 @@
"type": "codeBlock",
"attrs": {
"language": null,
- "class": "code highlight"
+ "class": "code highlight",
+ "langParams": null
},
"content": [
{
@@ -2262,7 +2283,8 @@
"type": "codeBlock",
"attrs": {
"language": null,
- "class": "code highlight"
+ "class": "code highlight",
+ "langParams": null
},
"content": [
{
@@ -2281,7 +2303,8 @@
"type": "codeBlock",
"attrs": {
"language": null,
- "class": "code highlight"
+ "class": "code highlight",
+ "langParams": null
},
"content": [
{
@@ -2300,7 +2323,8 @@
"type": "codeBlock",
"attrs": {
"language": null,
- "class": "code highlight"
+ "class": "code highlight",
+ "langParams": null
},
"content": [
{
@@ -2319,7 +2343,8 @@
"type": "codeBlock",
"attrs": {
"language": null,
- "class": "code highlight"
+ "class": "code highlight",
+ "langParams": null
},
"content": [
{
@@ -2358,7 +2383,8 @@
"type": "codeBlock",
"attrs": {
"language": null,
- "class": "code highlight"
+ "class": "code highlight",
+ "langParams": null
},
"content": [
{
@@ -2377,7 +2403,8 @@
"type": "codeBlock",
"attrs": {
"language": null,
- "class": "code highlight"
+ "class": "code highlight",
+ "langParams": null
},
"content": [
{
@@ -2396,7 +2423,8 @@
"type": "codeBlock",
"attrs": {
"language": null,
- "class": "code highlight"
+ "class": "code highlight",
+ "langParams": null
},
"content": [
{
@@ -2415,7 +2443,8 @@
"type": "codeBlock",
"attrs": {
"language": null,
- "class": "code highlight"
+ "class": "code highlight",
+ "langParams": null
},
"content": [
{
@@ -2434,7 +2463,8 @@
"type": "codeBlock",
"attrs": {
"language": null,
- "class": "code highlight"
+ "class": "code highlight",
+ "langParams": null
}
}
]
@@ -2447,7 +2477,8 @@
"type": "codeBlock",
"attrs": {
"language": null,
- "class": "code highlight"
+ "class": "code highlight",
+ "langParams": null
},
"content": [
{
@@ -2472,7 +2503,8 @@
"type": "codeBlock",
"attrs": {
"language": null,
- "class": "code highlight"
+ "class": "code highlight",
+ "langParams": null
},
"content": [
{
@@ -2502,7 +2534,8 @@
"type": "codeBlock",
"attrs": {
"language": null,
- "class": "code highlight"
+ "class": "code highlight",
+ "langParams": null
}
}
]
@@ -2515,7 +2548,8 @@
"type": "codeBlock",
"attrs": {
"language": null,
- "class": "code highlight"
+ "class": "code highlight",
+ "langParams": null
}
}
]
@@ -2528,7 +2562,8 @@
"type": "codeBlock",
"attrs": {
"language": null,
- "class": "code highlight"
+ "class": "code highlight",
+ "langParams": null
},
"content": [
{
@@ -2547,7 +2582,8 @@
"type": "codeBlock",
"attrs": {
"language": null,
- "class": "code highlight"
+ "class": "code highlight",
+ "langParams": null
},
"content": [
{
@@ -2566,7 +2602,8 @@
"type": "codeBlock",
"attrs": {
"language": null,
- "class": "code highlight"
+ "class": "code highlight",
+ "langParams": null
},
"content": [
{
@@ -2585,7 +2622,8 @@
"type": "codeBlock",
"attrs": {
"language": null,
- "class": "code highlight"
+ "class": "code highlight",
+ "langParams": null
},
"content": [
{
@@ -2604,7 +2642,8 @@
"type": "codeBlock",
"attrs": {
"language": null,
- "class": "code highlight"
+ "class": "code highlight",
+ "langParams": null
},
"content": [
{
@@ -2623,7 +2662,8 @@
"type": "codeBlock",
"attrs": {
"language": null,
- "class": "code highlight"
+ "class": "code highlight",
+ "langParams": null
},
"content": [
{
@@ -2642,7 +2682,8 @@
"type": "codeBlock",
"attrs": {
"language": null,
- "class": "code highlight"
+ "class": "code highlight",
+ "langParams": null
},
"content": [
{
@@ -2676,7 +2717,8 @@
"type": "codeBlock",
"attrs": {
"language": null,
- "class": "code highlight"
+ "class": "code highlight",
+ "langParams": null
},
"content": [
{
@@ -2704,7 +2746,8 @@
"type": "codeBlock",
"attrs": {
"language": null,
- "class": "code highlight"
+ "class": "code highlight",
+ "langParams": null
},
"content": [
{
@@ -2744,7 +2787,8 @@
"type": "codeBlock",
"attrs": {
"language": null,
- "class": "code highlight"
+ "class": "code highlight",
+ "langParams": null
},
"content": [
{
@@ -2775,7 +2819,8 @@
"type": "codeBlock",
"attrs": {
"language": "ruby",
- "class": "code highlight"
+ "class": "code highlight",
+ "langParams": null
},
"content": [
{
@@ -2794,7 +2839,8 @@
"type": "codeBlock",
"attrs": {
"language": "ruby",
- "class": "code highlight"
+ "class": "code highlight",
+ "langParams": null
},
"content": [
{
@@ -2813,7 +2859,8 @@
"type": "codeBlock",
"attrs": {
"language": ";",
- "class": "code highlight"
+ "class": "code highlight",
+ "langParams": null
}
}
]
@@ -2850,7 +2897,8 @@
"type": "codeBlock",
"attrs": {
"language": "aa",
- "class": "code highlight"
+ "class": "code highlight",
+ "langParams": null
},
"content": [
{
@@ -2869,7 +2917,8 @@
"type": "codeBlock",
"attrs": {
"language": null,
- "class": "code highlight"
+ "class": "code highlight",
+ "langParams": null
},
"content": [
{
@@ -3641,7 +3690,8 @@
"type": "codeBlock",
"attrs": {
"language": null,
- "class": "code highlight"
+ "class": "code highlight",
+ "langParams": null
},
"content": [
{
@@ -3663,7 +3713,8 @@
"type": "codeBlock",
"attrs": {
"language": null,
- "class": "code highlight"
+ "class": "code highlight",
+ "langParams": null
},
"content": [
{
@@ -3861,7 +3912,8 @@
"type": "codeBlock",
"attrs": {
"language": null,
- "class": "code highlight"
+ "class": "code highlight",
+ "langParams": null
},
"content": [
{
@@ -4583,7 +4635,8 @@
"type": "codeBlock",
"attrs": {
"language": null,
- "class": "code highlight"
+ "class": "code highlight",
+ "langParams": null
},
"content": [
{
@@ -4611,7 +4664,8 @@
"type": "codeBlock",
"attrs": {
"language": null,
- "class": "code highlight"
+ "class": "code highlight",
+ "langParams": null
},
"content": [
{
@@ -5124,7 +5178,8 @@
"type": "codeBlock",
"attrs": {
"language": null,
- "class": "code highlight"
+ "class": "code highlight",
+ "langParams": null
},
"content": [
{
@@ -6090,7 +6145,8 @@
"type": "codeBlock",
"attrs": {
"language": null,
- "class": "code highlight"
+ "class": "code highlight",
+ "langParams": null
},
"content": [
{
@@ -6257,7 +6313,8 @@
"type": "codeBlock",
"attrs": {
"language": null,
- "class": "code highlight"
+ "class": "code highlight",
+ "langParams": null
},
"content": [
{
@@ -6272,7 +6329,8 @@
"type": "codeBlock",
"attrs": {
"language": null,
- "class": "code highlight"
+ "class": "code highlight",
+ "langParams": null
},
"content": [
{
@@ -6297,7 +6355,8 @@
"type": "codeBlock",
"attrs": {
"language": null,
- "class": "code highlight"
+ "class": "code highlight",
+ "langParams": null
}
}
]
@@ -6315,7 +6374,8 @@
"type": "codeBlock",
"attrs": {
"language": null,
- "class": "code highlight"
+ "class": "code highlight",
+ "langParams": null
}
}
]
@@ -6749,7 +6809,8 @@
"type": "codeBlock",
"attrs": {
"language": null,
- "class": "code highlight"
+ "class": "code highlight",
+ "langParams": null
},
"content": [
{
@@ -6796,7 +6857,8 @@
"type": "codeBlock",
"attrs": {
"language": null,
- "class": "code highlight"
+ "class": "code highlight",
+ "langParams": null
},
"content": [
{
@@ -6851,7 +6913,8 @@
"type": "codeBlock",
"attrs": {
"language": null,
- "class": "code highlight"
+ "class": "code highlight",
+ "langParams": null
},
"content": [
{
@@ -6987,7 +7050,8 @@
"type": "codeBlock",
"attrs": {
"language": null,
- "class": "code highlight"
+ "class": "code highlight",
+ "langParams": null
},
"content": [
{
@@ -7230,7 +7294,8 @@
"type": "codeBlock",
"attrs": {
"language": null,
- "class": "code highlight"
+ "class": "code highlight",
+ "langParams": null
},
"content": [
{
@@ -7297,7 +7362,8 @@
"type": "codeBlock",
"attrs": {
"language": null,
- "class": "code highlight"
+ "class": "code highlight",
+ "langParams": null
},
"content": [
{
@@ -7455,7 +7521,8 @@
"type": "codeBlock",
"attrs": {
"language": null,
- "class": "code highlight"
+ "class": "code highlight",
+ "langParams": null
},
"content": [
{
@@ -7497,7 +7564,8 @@
"type": "codeBlock",
"attrs": {
"language": null,
- "class": "code highlight"
+ "class": "code highlight",
+ "langParams": null
},
"content": [
{
@@ -7520,7 +7588,8 @@
"type": "codeBlock",
"attrs": {
"language": null,
- "class": "code highlight"
+ "class": "code highlight",
+ "langParams": null
},
"content": [
{
@@ -7542,7 +7611,8 @@
"type": "codeBlock",
"attrs": {
"language": null,
- "class": "code highlight"
+ "class": "code highlight",
+ "langParams": null
},
"content": [
{
@@ -7574,7 +7644,8 @@
"type": "codeBlock",
"attrs": {
"language": null,
- "class": "code highlight"
+ "class": "code highlight",
+ "langParams": null
},
"content": [
{
@@ -7596,7 +7667,8 @@
"type": "codeBlock",
"attrs": {
"language": null,
- "class": "code highlight"
+ "class": "code highlight",
+ "langParams": null
},
"content": [
{
@@ -7632,7 +7704,8 @@
"type": "codeBlock",
"attrs": {
"language": null,
- "class": "code highlight"
+ "class": "code highlight",
+ "langParams": null
},
"content": [
{
@@ -7654,7 +7727,8 @@
"type": "codeBlock",
"attrs": {
"language": null,
- "class": "code highlight"
+ "class": "code highlight",
+ "langParams": null
},
"content": [
{
@@ -7801,7 +7875,8 @@
"type": "codeBlock",
"attrs": {
"language": null,
- "class": "code highlight"
+ "class": "code highlight",
+ "langParams": null
},
"content": [
{
@@ -7822,7 +7897,8 @@
"type": "codeBlock",
"attrs": {
"language": null,
- "class": "code highlight"
+ "class": "code highlight",
+ "langParams": null
},
"content": [
{
@@ -8120,7 +8196,8 @@
"type": "codeBlock",
"attrs": {
"language": null,
- "class": "code highlight"
+ "class": "code highlight",
+ "langParams": null
},
"content": [
{
@@ -8179,7 +8256,8 @@
"type": "codeBlock",
"attrs": {
"language": null,
- "class": "code highlight"
+ "class": "code highlight",
+ "langParams": null
},
"content": [
{
@@ -8238,7 +8316,8 @@
"type": "codeBlock",
"attrs": {
"language": null,
- "class": "code highlight"
+ "class": "code highlight",
+ "langParams": null
},
"content": [
{
@@ -8278,7 +8357,8 @@
"type": "codeBlock",
"attrs": {
"language": null,
- "class": "code highlight"
+ "class": "code highlight",
+ "langParams": null
},
"content": [
{
@@ -8316,7 +8396,8 @@
"type": "codeBlock",
"attrs": {
"language": null,
- "class": "code highlight"
+ "class": "code highlight",
+ "langParams": null
},
"content": [
{
@@ -9410,7 +9491,8 @@
"type": "codeBlock",
"attrs": {
"language": null,
- "class": "code highlight"
+ "class": "code highlight",
+ "langParams": null
},
"content": [
{
@@ -9705,7 +9787,8 @@
"type": "codeBlock",
"attrs": {
"language": null,
- "class": "code highlight"
+ "class": "code highlight",
+ "langParams": null
},
"content": [
{
@@ -9991,7 +10074,8 @@
"type": "codeBlock",
"attrs": {
"language": null,
- "class": "code highlight"
+ "class": "code highlight",
+ "langParams": null
},
"content": [
{
@@ -10195,7 +10279,8 @@
"type": "codeBlock",
"attrs": {
"language": null,
- "class": "code highlight"
+ "class": "code highlight",
+ "langParams": null
},
"content": [
{
@@ -10323,7 +10408,8 @@
"type": "codeBlock",
"attrs": {
"language": null,
- "class": "code highlight"
+ "class": "code highlight",
+ "langParams": null
},
"content": [
{
@@ -10663,7 +10749,8 @@
"type": "codeBlock",
"attrs": {
"language": null,
- "class": "code highlight"
+ "class": "code highlight",
+ "langParams": null
},
"content": [
{
@@ -10682,7 +10769,8 @@
"type": "codeBlock",
"attrs": {
"language": null,
- "class": "code highlight"
+ "class": "code highlight",
+ "langParams": null
},
"content": [
{
@@ -10808,7 +10896,8 @@
"type": "codeBlock",
"attrs": {
"language": "foo+bar",
- "class": "code highlight"
+ "class": "code highlight",
+ "langParams": null
},
"content": [
{
@@ -10996,7 +11085,8 @@
"type": "codeBlock",
"attrs": {
"language": "föö",
- "class": "code highlight"
+ "class": "code highlight",
+ "langParams": null
},
"content": [
{
@@ -11035,7 +11125,8 @@
"type": "codeBlock",
"attrs": {
"language": null,
- "class": "code highlight"
+ "class": "code highlight",
+ "langParams": null
},
"content": [
{
@@ -14577,6 +14668,8 @@
"title": "*",
"uploading": false,
"canonicalSrc": "foo",
+ "width": null,
+ "height": null,
"isReference": false
}
}
@@ -15723,6 +15816,8 @@
"title": null,
"uploading": false,
"canonicalSrc": "moon.jpg",
+ "width": null,
+ "height": null,
"isReference": false
},
"marks": [
@@ -15851,6 +15946,8 @@
"title": null,
"uploading": false,
"canonicalSrc": "uri3",
+ "width": null,
+ "height": null,
"isReference": false
}
}
@@ -16265,6 +16362,8 @@
"title": null,
"uploading": false,
"canonicalSrc": "moon.jpg",
+ "width": null,
+ "height": null,
"isReference": false
},
"marks": [
@@ -18112,6 +18211,8 @@
"title": "title",
"uploading": false,
"canonicalSrc": "/url",
+ "width": null,
+ "height": null,
"isReference": false
}
}
@@ -18134,6 +18235,8 @@
"title": "train & tracks",
"uploading": false,
"canonicalSrc": "foo *bar*",
+ "width": null,
+ "height": null,
"isReference": true
}
}
@@ -18170,6 +18273,8 @@
"title": null,
"uploading": false,
"canonicalSrc": "/url2",
+ "width": null,
+ "height": null,
"isReference": false
}
}
@@ -18192,6 +18297,8 @@
"title": null,
"uploading": false,
"canonicalSrc": "/url2",
+ "width": null,
+ "height": null,
"isReference": false
}
}
@@ -18214,6 +18321,8 @@
"title": "train & tracks",
"uploading": false,
"canonicalSrc": "foo *bar*",
+ "width": null,
+ "height": null,
"isReference": true
}
}
@@ -18250,6 +18359,8 @@
"title": "train & tracks",
"uploading": false,
"canonicalSrc": "foobar",
+ "width": null,
+ "height": null,
"isReference": true
}
}
@@ -18286,6 +18397,8 @@
"title": null,
"uploading": false,
"canonicalSrc": "train.jpg",
+ "width": null,
+ "height": null,
"isReference": false
}
}
@@ -18312,6 +18425,8 @@
"title": "title",
"uploading": false,
"canonicalSrc": "/path/to/train.jpg",
+ "width": null,
+ "height": null,
"isReference": false
}
}
@@ -18334,6 +18449,8 @@
"title": null,
"uploading": false,
"canonicalSrc": "url",
+ "width": null,
+ "height": null,
"isReference": false
}
}
@@ -18356,6 +18473,8 @@
"title": null,
"uploading": false,
"canonicalSrc": "/url",
+ "width": null,
+ "height": null,
"isReference": false
}
}
@@ -18378,6 +18497,8 @@
"title": null,
"uploading": false,
"canonicalSrc": "bar",
+ "width": null,
+ "height": null,
"isReference": true
}
}
@@ -18414,6 +18535,8 @@
"title": null,
"uploading": false,
"canonicalSrc": "bar",
+ "width": null,
+ "height": null,
"isReference": true
}
}
@@ -18450,6 +18573,8 @@
"title": "title",
"uploading": false,
"canonicalSrc": "foo",
+ "width": null,
+ "height": null,
"isReference": true
}
}
@@ -18486,6 +18611,8 @@
"title": "title",
"uploading": false,
"canonicalSrc": "*foo* bar",
+ "width": null,
+ "height": null,
"isReference": true
}
}
@@ -18522,6 +18649,8 @@
"title": "title",
"uploading": false,
"canonicalSrc": "foo",
+ "width": null,
+ "height": null,
"isReference": true
}
}
@@ -18558,6 +18687,8 @@
"title": "title",
"uploading": false,
"canonicalSrc": "foo",
+ "width": null,
+ "height": null,
"isReference": true
}
},
@@ -18598,6 +18729,8 @@
"title": "title",
"uploading": false,
"canonicalSrc": "foo",
+ "width": null,
+ "height": null,
"isReference": true
}
}
@@ -18634,6 +18767,8 @@
"title": "title",
"uploading": false,
"canonicalSrc": "*foo* bar",
+ "width": null,
+ "height": null,
"isReference": true
}
}
@@ -18694,6 +18829,8 @@
"title": "title",
"uploading": false,
"canonicalSrc": "foo",
+ "width": null,
+ "height": null,
"isReference": true
}
}
@@ -20676,6 +20813,7 @@
"attrs": {
"language": "yaml",
"class": "code highlight",
+ "langParams": null,
"isFrontmatter": true
},
"content": [
@@ -20696,6 +20834,7 @@
"attrs": {
"language": "toml",
"class": "code highlight",
+ "langParams": null,
"isFrontmatter": true
},
"content": [
@@ -20716,6 +20855,7 @@
"attrs": {
"language": "json",
"class": "code highlight",
+ "langParams": null,
"isFrontmatter": true
},
"content": [
@@ -21025,6 +21165,8 @@
"title": null,
"uploading": false,
"canonicalSrc": "/uploads/aa45a38ec2cfe97433281b10bbff042c/test-file.png",
+ "width": null,
+ "height": null,
"isReference": false
}
}
@@ -21047,6 +21189,8 @@
"title": null,
"uploading": false,
"canonicalSrc": "/uploads/aa45a38ec2cfe97433281b10bbff042c/test-file.png",
+ "width": null,
+ "height": null,
"isReference": false
}
}
@@ -21069,6 +21213,8 @@
"title": null,
"uploading": false,
"canonicalSrc": "test-file.png",
+ "width": null,
+ "height": null,
"isReference": false
}
}
@@ -21635,7 +21781,8 @@
"type": "codeBlock",
"attrs": {
"language": "javascript",
- "class": "code highlight"
+ "class": "code highlight",
+ "langParams": null
},
"content": [
{
@@ -21654,7 +21801,8 @@
"type": "codeBlock",
"attrs": {
"language": null,
- "class": "code highlight"
+ "class": "code highlight",
+ "langParams": null
},
"content": [
{
@@ -21673,7 +21821,8 @@
"type": "codeBlock",
"attrs": {
"language": "foobar",
- "class": "code highlight"
+ "class": "code highlight",
+ "langParams": null
},
"content": [
{
@@ -21895,7 +22044,8 @@
"type": "codeBlock",
"attrs": {
"language": "nomnoml",
- "class": "code highlight"
+ "class": "code highlight",
+ "langParams": null
},
"content": [
{
@@ -22120,6 +22270,7 @@
"attrs": {
"language": "json",
"class": "code highlight",
+ "langParams": null,
"isFrontmatter": true
},
"content": [
@@ -22140,6 +22291,7 @@
"attrs": {
"language": "toml",
"class": "code highlight",
+ "langParams": null,
"isFrontmatter": true
},
"content": [
@@ -22160,6 +22312,7 @@
"attrs": {
"language": "yaml",
"class": "code highlight",
+ "langParams": null,
"isFrontmatter": true
},
"content": [
@@ -22751,6 +22904,8 @@
"title": null,
"uploading": false,
"canonicalSrc": "https://gitlab.com/logo.png",
+ "width": null,
+ "height": null,
"isReference": false
}
}
@@ -22902,7 +23057,8 @@
"type": "codeBlock",
"attrs": {
"language": "math",
- "class": "code highlight"
+ "class": "code highlight",
+ "langParams": null
},
"content": [
{
diff --git a/glfm_specification/output_example_snapshots/snapshot_spec.html b/glfm_specification/output_example_snapshots/snapshot_spec.html
index 8e18c768c7d..080712d1b4e 100644
--- a/glfm_specification/output_example_snapshots/snapshot_spec.html
+++ b/glfm_specification/output_example_snapshots/snapshot_spec.html
@@ -363,6 +363,7 @@
<li><a href="#word_break">word_break</a></li>
</ul>
</li>
+<li><a href="#image-attributes">Image Attributes</a></li>
</ul>
</li>
</ul>
@@ -13477,6 +13478,74 @@ also requires an EE license enabling the <code>group_wikis</code> feature:</p>
<copy-code></copy-code>
</div>
</div>
+<h2 data-sourcepos="15072:1-15072:19" dir="auto">
+<a id="user-content-image-attributes" class="anchor" href="#image-attributes" aria-hidden="true"></a>Image Attributes</h2>
+<p data-sourcepos="15074:1-15076:46" dir="auto">See
+<a href="https://docs.gitlab.com/ee/user/markdown.html#change-the-image-dimensions" rel="nofollow noreferrer noopener" target="_blank">Change the image dimensions</a>
+in the GitLab Flavored Markdown documentation.</p>
+<p data-sourcepos="15078:1-15079:19" dir="auto">The <code>width</code> and <code>height</code> attributes for an image can be specified directly after
+the image markdown.</p>
+<p data-sourcepos="15081:1-15083:21" dir="auto">General syntax conforms to the
+<a href="https://github.com/jgm/commonmark-hs/blob/master/commonmark-extensions/test/attributes.md" rel="nofollow noreferrer noopener" target="_blank">commonmark-hs attribute syntax</a>
+where it makes sense.</p>
+<div>
+<div><a href="#example-750">Example 750</a></div>
+<div class="gl-relative markdown-code-block js-markdown-code">
+<pre data-sourcepos="15088:1-15090:32" lang="plaintext" class="code highlight js-syntax-highlight language-plaintext" data-canonical-lang="example" v-pre="true"><code><span id="LC1" class="line" lang="plaintext">![](https://gitlab.com/logo.png){width="100" height="100"}</span></code></pre>
+<copy-code></copy-code>
+</div>
+<div class="gl-relative markdown-code-block js-markdown-code">
+<pre data-sourcepos="15092:1-15094:32" lang="plaintext" class="code highlight js-syntax-highlight language-plaintext" data-canonical-lang="" v-pre="true"><code><span id="LC1" class="line" lang="plaintext">&lt;p&gt;&lt;img src="https://gitlab.com/logo.png" width="100" height="100"&gt;&lt;/p&gt;</span></code></pre>
+<copy-code></copy-code>
+</div>
+</div>
+<p data-sourcepos="15097:1-15097:41" dir="auto"><code>%</code> and <code>px</code> units may also be specified.</p>
+<div>
+<div><a href="#example-751">Example 751</a></div>
+<div class="gl-relative markdown-code-block js-markdown-code">
+<pre data-sourcepos="15102:1-15104:32" lang="plaintext" class="code highlight js-syntax-highlight language-plaintext" data-canonical-lang="example" v-pre="true"><code><span id="LC1" class="line" lang="plaintext">![](https://gitlab.com/logo.png){width="100%"}</span></code></pre>
+<copy-code></copy-code>
+</div>
+<div class="gl-relative markdown-code-block js-markdown-code">
+<pre data-sourcepos="15106:1-15108:32" lang="plaintext" class="code highlight js-syntax-highlight language-plaintext" data-canonical-lang="" v-pre="true"><code><span id="LC1" class="line" lang="plaintext">&lt;p&gt;&lt;img src="https://gitlab.com/logo.png" width="100%"&gt;&lt;/p&gt;</span></code></pre>
+<copy-code></copy-code>
+</div>
+</div>
+<div>
+<div><a href="#example-752">Example 752</a></div>
+<div class="gl-relative markdown-code-block js-markdown-code">
+<pre data-sourcepos="15114:1-15116:32" lang="plaintext" class="code highlight js-syntax-highlight language-plaintext" data-canonical-lang="example" v-pre="true"><code><span id="LC1" class="line" lang="plaintext">![](https://gitlab.com/logo.png){height="100px"}</span></code></pre>
+<copy-code></copy-code>
+</div>
+<div class="gl-relative markdown-code-block js-markdown-code">
+<pre data-sourcepos="15118:1-15120:32" lang="plaintext" class="code highlight js-syntax-highlight language-plaintext" data-canonical-lang="" v-pre="true"><code><span id="LC1" class="line" lang="plaintext">&lt;p&gt;&lt;img src="https://gitlab.com/logo.png" height="100px"&gt;&lt;/p&gt;</span></code></pre>
+<copy-code></copy-code>
+</div>
+</div>
+<p data-sourcepos="15123:1-15123:46" dir="auto">Whitespace is tolerated around the delimiters:</p>
+<div>
+<div><a href="#example-753">Example 753</a></div>
+<div class="gl-relative markdown-code-block js-markdown-code">
+<pre data-sourcepos="15128:1-15130:32" lang="plaintext" class="code highlight js-syntax-highlight language-plaintext" data-canonical-lang="example" v-pre="true"><code><span id="LC1" class="line" lang="plaintext">![](https://gitlab.com/logo.png){ width="100" height="100" }</span></code></pre>
+<copy-code></copy-code>
+</div>
+<div class="gl-relative markdown-code-block js-markdown-code">
+<pre data-sourcepos="15132:1-15134:32" lang="plaintext" class="code highlight js-syntax-highlight language-plaintext" data-canonical-lang="" v-pre="true"><code><span id="LC1" class="line" lang="plaintext">&lt;p&gt;&lt;img src="https://gitlab.com/logo.png" width="100" height="100"&gt;&lt;/p&gt;</span></code></pre>
+<copy-code></copy-code>
+</div>
+</div>
+<p data-sourcepos="15137:1-15137:54" dir="auto">Attributes must immediately follow the image markdown.</p>
+<div>
+<div><a href="#example-754">Example 754</a></div>
+<div class="gl-relative markdown-code-block js-markdown-code">
+<pre data-sourcepos="15142:1-15144:32" lang="plaintext" class="code highlight js-syntax-highlight language-plaintext" data-canonical-lang="example" v-pre="true"><code><span id="LC1" class="line" lang="plaintext">![](https://gitlab.com/logo.png) {width="100" height="100"}</span></code></pre>
+<copy-code></copy-code>
+</div>
+<div class="gl-relative markdown-code-block js-markdown-code">
+<pre data-sourcepos="15146:1-15148:32" lang="plaintext" class="code highlight js-syntax-highlight language-plaintext" data-canonical-lang="" v-pre="true"><code><span id="LC1" class="line" lang="plaintext">&lt;p&gt;&lt;img src="https://gitlab.com/logo.png"&gt; {width="100" height="100"}&lt;/p&gt;</span></code></pre>
+<copy-code></copy-code>
+</div>
+</div>
</body>
</html>
diff --git a/glfm_specification/output_example_snapshots/snapshot_spec.md b/glfm_specification/output_example_snapshots/snapshot_spec.md
index 8898857ba45..ccee9c1707e 100644
--- a/glfm_specification/output_example_snapshots/snapshot_spec.md
+++ b/glfm_specification/output_example_snapshots/snapshot_spec.md
@@ -10576,3 +10576,53 @@ Fernstraßen<wbr>bau<wbr>privat<wbr>finanzierungs<wbr>gesetz
.
TODO: Write canonical HTML for this example
````````````````````````````````
+
+## Image Attributes
+
+See
+[Change the image dimensions](https://docs.gitlab.com/ee/user/markdown.html#change-the-image-dimensions)
+in the GitLab Flavored Markdown documentation.
+
+The `width` and `height` attributes for an image can be specified directly after
+the image markdown.
+
+General syntax conforms to the
+[commonmark-hs attribute syntax](https://github.com/jgm/commonmark-hs/blob/master/commonmark-extensions/test/attributes.md)
+where it makes sense.
+
+```````````````````````````````` example gitlab
+![](https://gitlab.com/logo.png){width="100" height="100"}
+.
+<p><img src="https://gitlab.com/logo.png" width="100" height="100"></p>
+````````````````````````````````
+
+`%` and `px` units may also be specified.
+
+```````````````````````````````` example gitlab
+![](https://gitlab.com/logo.png){width="100%"}
+.
+<p><img src="https://gitlab.com/logo.png" width="100%"></p>
+````````````````````````````````
+
+```````````````````````````````` example gitlab
+![](https://gitlab.com/logo.png){height="100px"}
+.
+<p><img src="https://gitlab.com/logo.png" height="100px"></p>
+````````````````````````````````
+
+Whitespace is tolerated around the delimiters:
+
+```````````````````````````````` example gitlab
+![](https://gitlab.com/logo.png){ width="100" height="100" }
+.
+<p><img src="https://gitlab.com/logo.png" width="100" height="100"></p>
+````````````````````````````````
+
+Attributes must immediately follow the image markdown.
+
+```````````````````````````````` example gitlab
+![](https://gitlab.com/logo.png) {width="100" height="100"}
+.
+<p><img src="https://gitlab.com/logo.png"> {width="100" height="100"}</p>
+````````````````````````````````
+
diff --git a/lib/api/appearance.rb b/lib/api/appearance.rb
index 69f1521ef2a..2cef1b27504 100644
--- a/lib/api/appearance.rb
+++ b/lib/api/appearance.rb
@@ -26,6 +26,7 @@ module API
end
params do
optional :title, type: String, desc: 'Instance title on the sign in / sign up page'
+ optional :short_title, type: String, desc: 'Short title for Progressive Web App'
optional :description, type: String, desc: 'Markdown text shown on the sign in / sign up page'
# TODO: remove rubocop disable - https://gitlab.com/gitlab-org/gitlab/issues/14960
optional :logo, type: File, desc: 'Instance image used on the sign in / sign up page' # rubocop:disable Scalability/FileUploads
diff --git a/lib/api/entities/appearance.rb b/lib/api/entities/appearance.rb
index a09faf55f48..94a39568393 100644
--- a/lib/api/entities/appearance.rb
+++ b/lib/api/entities/appearance.rb
@@ -4,6 +4,7 @@ module API
module Entities
class Appearance < Grape::Entity
expose :title
+ expose :short_title
expose :description
expose :logo do |appearance, options|
diff --git a/lib/banzai/filter/timeout_html_pipeline_filter.rb b/lib/banzai/filter/timeout_html_pipeline_filter.rb
index 0df70d13118..b9b71163ab1 100644
--- a/lib/banzai/filter/timeout_html_pipeline_filter.rb
+++ b/lib/banzai/filter/timeout_html_pipeline_filter.rb
@@ -13,11 +13,7 @@ module Banzai
RENDER_TIMEOUT = 10.seconds
def call
- if Feature.enabled?(:markup_rendering_timeout, context[:project])
- Gitlab::RenderTimeout.timeout(foreground: RENDER_TIMEOUT) { call_with_timeout }
- else
- call_with_timeout
- end
+ Gitlab::RenderTimeout.timeout(foreground: RENDER_TIMEOUT) { call_with_timeout }
rescue Timeout::Error => e
class_name = self.class.name.demodulize
timeout_counter.increment(source: class_name)
diff --git a/lib/gitlab/other_markup.rb b/lib/gitlab/other_markup.rb
index 2fb83e5d9eb..2368ea3ad28 100644
--- a/lib/gitlab/other_markup.rb
+++ b/lib/gitlab/other_markup.rb
@@ -19,12 +19,7 @@ module Gitlab
end
def self.render_markup(file_name, input, context)
- if Feature.enabled?(:markup_rendering_timeout, context[:project])
- Gitlab::RenderTimeout.timeout(foreground: RENDER_TIMEOUT) { GitHub::Markup.render(file_name, input) }
- else
- GitHub::Markup.render(file_name, input)
- end
-
+ Gitlab::RenderTimeout.timeout(foreground: RENDER_TIMEOUT) { GitHub::Markup.render(file_name, input) }
rescue Timeout::Error => e
class_name = name.demodulize
timeout_counter.increment(source: class_name)
diff --git a/locale/gitlab.pot b/locale/gitlab.pot
index f392512b075..9aeebe20eb8 100644
--- a/locale/gitlab.pot
+++ b/locale/gitlab.pot
@@ -956,6 +956,12 @@ msgstr ""
msgid "%{ref} cannot be added: %{error}"
msgstr ""
+msgid "%{relation_type} epic does not exist."
+msgstr ""
+
+msgid "%{relation_type} epic is not present."
+msgstr ""
+
msgid "%{releases} release"
msgid_plural "%{releases} releases"
msgstr[0] ""
@@ -8469,12 +8475,6 @@ msgstr ""
msgid "Child epic"
msgstr ""
-msgid "Child epic does not exist."
-msgstr ""
-
-msgid "Child epic doesn't exist."
-msgstr ""
-
msgid "Child issues and epics"
msgstr ""
@@ -29793,12 +29793,6 @@ msgstr ""
msgid "Parent"
msgstr ""
-msgid "Parent epic doesn't exist."
-msgstr ""
-
-msgid "Parent epic is not present."
-msgstr ""
-
msgid "Parsing error for param :embed_json. %{message}"
msgstr ""
diff --git a/spec/controllers/admin/application_settings/appearances_controller_spec.rb b/spec/controllers/admin/application_settings/appearances_controller_spec.rb
index cc914f3c9b8..5978381a926 100644
--- a/spec/controllers/admin/application_settings/appearances_controller_spec.rb
+++ b/spec/controllers/admin/application_settings/appearances_controller_spec.rb
@@ -11,6 +11,7 @@ RSpec.describe Admin::ApplicationSettings::AppearancesController do
let(:create_params) do
{
title: 'Foo',
+ short_title: 'F',
description: 'Bar',
header_message: header_message,
footer_message: footer_message
diff --git a/spec/frontend/content_editor/services/markdown_serializer_spec.js b/spec/frontend/content_editor/services/markdown_serializer_spec.js
index a29678ff1bc..2cd8b8a0d6f 100644
--- a/spec/frontend/content_editor/services/markdown_serializer_spec.js
+++ b/spec/frontend/content_editor/services/markdown_serializer_spec.js
@@ -318,7 +318,7 @@ var y = 10;
expect(
serialize(
codeBlock(
- { language: 'json' },
+ { language: 'json', langParams: '' },
'this is not really json but just trying out whether this case works or not',
),
),
@@ -331,6 +331,23 @@ this is not really json but just trying out whether this case works or not
);
});
+ it('correctly serializes a code block with language parameters', () => {
+ expect(
+ serialize(
+ codeBlock(
+ { language: 'json', langParams: 'table' },
+ 'this is not really json:table but just trying out whether this case works or not',
+ ),
+ ),
+ ).toBe(
+ `
+\`\`\`json:table
+this is not really json:table but just trying out whether this case works or not
+\`\`\`
+ `.trim(),
+ );
+ });
+
it('correctly serializes emoji', () => {
expect(serialize(paragraph(emoji({ name: 'dog' })))).toBe(':dog:');
});
@@ -380,6 +397,26 @@ this is not really json but just trying out whether this case works or not
);
});
+ it.each`
+ width | height | outputAttributes
+ ${300} | ${undefined} | ${'width=300'}
+ ${undefined} | ${300} | ${'height=300'}
+ ${300} | ${300} | ${'width=300 height=300'}
+ ${'300%'} | ${'300px'} | ${'width="300%" height="300px"'}
+ `(
+ 'correctly serializes an image with width and height attributes',
+ ({ width, height, outputAttributes }) => {
+ const imageAttrs = { src: 'img.jpg', alt: 'foo bar' };
+
+ if (width) imageAttrs.width = width;
+ if (height) imageAttrs.height = height;
+
+ expect(serialize(paragraph(image(imageAttrs)))).toBe(
+ `![foo bar](img.jpg){${outputAttributes}}`,
+ );
+ },
+ );
+
it('does not serialize an image when src and canonicalSrc are empty', () => {
expect(serialize(paragraph(image({})))).toBe('');
});
diff --git a/spec/lib/banzai/filter/timeout_html_pipeline_filter_spec.rb b/spec/lib/banzai/filter/timeout_html_pipeline_filter_spec.rb
index cdb40ef5b04..95d2e54459d 100644
--- a/spec/lib/banzai/filter/timeout_html_pipeline_filter_spec.rb
+++ b/spec/lib/banzai/filter/timeout_html_pipeline_filter_spec.rb
@@ -12,23 +12,4 @@ RSpec.describe Banzai::Filter::TimeoutHtmlPipelineFilter do
it 'raises NotImplementedError' do
expect { filter('test') }.to raise_error NotImplementedError
end
-
- context 'when markup_rendering_timeout is disabled' do
- it 'waits until the execution completes' do
- text = '<p>some text</p>'
-
- stub_feature_flags(markup_rendering_timeout: false)
- allow_next_instance_of(described_class) do |instance|
- allow(instance).to receive(:call_with_timeout) do
- text
- end
- end
-
- expect(Gitlab::RenderTimeout).not_to receive(:timeout)
-
- result = filter(text)
-
- expect(result).to eq text
- end
- end
end
diff --git a/spec/lib/gitlab/ci/pipeline/chain/validate/abilities_spec.rb b/spec/lib/gitlab/ci/pipeline/chain/validate/abilities_spec.rb
index 7aaeee32f49..9373888aada 100644
--- a/spec/lib/gitlab/ci/pipeline/chain/validate/abilities_spec.rb
+++ b/spec/lib/gitlab/ci/pipeline/chain/validate/abilities_spec.rb
@@ -2,8 +2,8 @@
require 'spec_helper'
-RSpec.describe Gitlab::Ci::Pipeline::Chain::Validate::Abilities do
- let_it_be(:project, reload: true) { create(:project, :repository) }
+RSpec.describe Gitlab::Ci::Pipeline::Chain::Validate::Abilities, feature_category: :pipeline_execution do
+ let(:project) { create(:project, :test_repo) }
let_it_be(:user) { create(:user) }
let(:pipeline) do
diff --git a/spec/lib/gitlab/other_markup_spec.rb b/spec/lib/gitlab/other_markup_spec.rb
index 142b6f1400d..6b24c8a8710 100644
--- a/spec/lib/gitlab/other_markup_spec.rb
+++ b/spec/lib/gitlab/other_markup_spec.rb
@@ -45,16 +45,6 @@ RSpec.describe Gitlab::OtherMarkup do
expect(render(file_name, text, context)).to eq("<p>#{text}</p>")
end
-
- context 'when markup_rendering_timeout is disabled' do
- it 'waits until the execution completes' do
- stub_feature_flags(markup_rendering_timeout: false)
-
- expect(Gitlab::RenderTimeout).not_to receive(:timeout)
-
- expect(render(file_name, text, context)).to eq(text)
- end
- end
end
def render(*args)
diff --git a/spec/models/appearance_spec.rb b/spec/models/appearance_spec.rb
index 9d84279a75e..289408231a9 100644
--- a/spec/models/appearance_spec.rb
+++ b/spec/models/appearance_spec.rb
@@ -14,6 +14,7 @@ RSpec.describe Appearance do
subject(:appearance) { described_class.new }
it { expect(appearance.title).to eq('') }
+ it { expect(appearance.short_title).to eq('') }
it { expect(appearance.description).to eq('') }
it { expect(appearance.new_project_guidelines).to eq('') }
it { expect(appearance.profile_image_guidelines).to eq('') }
diff --git a/spec/requests/api/appearance_spec.rb b/spec/requests/api/appearance_spec.rb
index 865f391d6dc..84d5b091b8d 100644
--- a/spec/requests/api/appearance_spec.rb
+++ b/spec/requests/api/appearance_spec.rb
@@ -33,6 +33,7 @@ RSpec.describe API::Appearance, 'Appearance', feature_category: :navigation do
expect(json_response['new_project_guidelines']).to eq('')
expect(json_response['profile_image_guidelines']).to eq('')
expect(json_response['title']).to eq('')
+ expect(json_response['short_title']).to eq('')
end
end
end
@@ -51,6 +52,7 @@ RSpec.describe API::Appearance, 'Appearance', feature_category: :navigation do
it "allows updating the settings" do
put api("/application/appearance", admin), params: {
title: "GitLab Test Instance",
+ short_title: "GitLab",
description: "gitlab-test.example.com",
new_project_guidelines: "Please read the FAQs for help.",
profile_image_guidelines: "Custom profile image guidelines"
@@ -70,6 +72,7 @@ RSpec.describe API::Appearance, 'Appearance', feature_category: :navigation do
expect(json_response['new_project_guidelines']).to eq('Please read the FAQs for help.')
expect(json_response['profile_image_guidelines']).to eq('Custom profile image guidelines')
expect(json_response['title']).to eq('GitLab Test Instance')
+ expect(json_response['short_title']).to eq('GitLab')
end
end
diff --git a/spec/support/shared_examples/features/discussion_comments_shared_example.rb b/spec/support/shared_examples/features/discussion_comments_shared_example.rb
index 91e465871a4..d6f1efc09fc 100644
--- a/spec/support/shared_examples/features/discussion_comments_shared_example.rb
+++ b/spec/support/shared_examples/features/discussion_comments_shared_example.rb
@@ -19,6 +19,8 @@ RSpec.shared_examples 'thread comments for commit and snippet' do |resource_name
find('.js-comment-button').click
+ wait_for_all_requests
+
expect(page).to have_content(comment)
new_comment = all(comments_selector).last