diff --git a/.gitlab/ci/docs.gitlab-ci.yml b/.gitlab/ci/docs.gitlab-ci.yml
index c78f243ff62..c7b9c56c1a5 100644
--- a/.gitlab/ci/docs.gitlab-ci.yml
+++ b/.gitlab/ci/docs.gitlab-ci.yml
@@ -39,6 +39,41 @@ review-docs-cleanup:
script:
- ./scripts/trigger-build.rb docs cleanup
+.review-docs-hugo:
+ extends:
+ - .default-retry
+ - .docs:rules:review-docs
+ image: ${GITLAB_DEPENDENCY_PROXY_ADDRESS}ruby:${RUBY_VERSION}-alpine
+ stage: review
+ needs: []
+ variables:
+ GIT_DEPTH: 1
+ # By default, deploy the Review App using the `main` branch of the `gitlab-org/technical-writing-group/gitlab-docs-hugo` project
+ DOCS_BRANCH: main
+ environment:
+ name: review-docs/mr-${CI_MERGE_REQUEST_IID}-hugo
+ auto_stop_in: 2 weeks
+ url: https://new.docs.gitlab.com/upstream-review-mr-${DOCS_GITLAB_REPO_SUFFIX}-${CI_MERGE_REQUEST_IID}
+ on_stop: review-docs-hugo-cleanup
+ before_script:
+ - source ./scripts/utils.sh
+ - install_gitlab_gem
+
+# Deploy documentation review app by using GitLab Docs Hugo project (gitlab-org/technical-writing-group/gitlab-docs-hugo)
+review-docs-hugo-deploy:
+ extends: .review-docs-hugo
+ script:
+ - ./scripts/trigger-build.rb docs-hugo deploy
+
+# Cleanup remote environment of gitlab-org/technical-writing-group/gitlab-docs-hugo
+review-docs-hugo-cleanup:
+ extends: .review-docs-hugo
+ environment:
+ name: review-docs/mr-${CI_MERGE_REQUEST_IID}-hugo
+ action: stop
+ script:
+ - ./scripts/trigger-build.rb docs-hugo cleanup
+
.docs-markdown-lint-image:
# When updating the image version here, update it in /scripts/lint-doc.sh too.
image: ${REGISTRY_HOST}/${REGISTRY_GROUP}/gitlab-docs/lint-markdown:alpine-3.20-vale-3.7.1-markdownlint2-0.14.0-lychee-0.15.1
diff --git a/.rubocop_todo/layout/argument_alignment.yml b/.rubocop_todo/layout/argument_alignment.yml
index ff92e46df6d..e294578b4ec 100644
--- a/.rubocop_todo/layout/argument_alignment.yml
+++ b/.rubocop_todo/layout/argument_alignment.yml
@@ -2,7 +2,6 @@
# Cop supports --autocorrect.
Layout/ArgumentAlignment:
Exclude:
- - 'ee/app/services/ee/issues/clone_service.rb'
- 'ee/app/services/ee/keys/create_service.rb'
- 'ee/app/services/ee/projects/create_from_template_service.rb'
- 'ee/app/services/ee/projects/gitlab_projects_import_service.rb'
diff --git a/app/assets/javascripts/custom_emoji/components/list.vue b/app/assets/javascripts/custom_emoji/components/list.vue
index a41d1bc30f3..cd8b5493ca1 100644
--- a/app/assets/javascripts/custom_emoji/components/list.vue
+++ b/app/assets/javascripts/custom_emoji/components/list.vue
@@ -45,7 +45,7 @@ export default {
return {
text: __('New custom emoji'),
attributes: {
- variant: 'info',
+ variant: 'confirm',
to: '/new',
},
};
diff --git a/app/assets/javascripts/environments/components/stop_stale_environments_modal.vue b/app/assets/javascripts/environments/components/stop_stale_environments_modal.vue
index 57873b28d37..9d5680f6f95 100644
--- a/app/assets/javascripts/environments/components/stop_stale_environments_modal.vue
+++ b/app/assets/javascripts/environments/components/stop_stale_environments_modal.vue
@@ -39,7 +39,6 @@ export default {
modalProps: {
primary: {
text: s__('Environments|Clean up'),
- attributes: [{ variant: 'info' }],
},
cancel: {
text: __('Cancel'),
diff --git a/app/assets/javascripts/projects/settings/repository/branch_rules/components/branch_rule.vue b/app/assets/javascripts/projects/settings/repository/branch_rules/components/branch_rule.vue
index ad77e97794c..7f94fd486e5 100644
--- a/app/assets/javascripts/projects/settings/repository/branch_rules/components/branch_rule.vue
+++ b/app/assets/javascripts/projects/settings/repository/branch_rules/components/branch_rule.vue
@@ -1,5 +1,6 @@
@@ -382,31 +353,8 @@ export default {
data-testid="dashboard-description"
>
-
-
-
- {{ content }}
-
-
-
- {{ content }}
-
-
-
- {{ dashboardDescription }}
-
-
-
- {{ content }}
-
-
-
+ {{ dashboardDescription }}
+
diff --git a/app/assets/javascripts/work_items/components/create_work_item_modal.vue b/app/assets/javascripts/work_items/components/create_work_item_modal.vue
index d332f1e356e..1383bf70a87 100644
--- a/app/assets/javascripts/work_items/components/create_work_item_modal.vue
+++ b/app/assets/javascripts/work_items/components/create_work_item_modal.vue
@@ -11,6 +11,7 @@ import {
sprintfWorkItem,
I18N_WORK_ITEM_ERROR_FETCHING_TYPES,
ROUTES,
+ RELATED_ITEM_ID_URL_QUERY_PARAM,
} from '../constants';
import namespaceWorkItemTypesQuery from '../graphql/namespace_work_item_types.query.graphql';
import CreateWorkItem from './create_work_item.vue';
@@ -134,6 +135,7 @@ export default {
fullPath: this.fullPath,
isGroup: this.isGroup,
workItemTypeName: this.workItemTypeName,
+ query: this.relatedItem ? `?${RELATED_ITEM_ID_URL_QUERY_PARAM}=${this.relatedItem.id}` : '',
});
},
newWorkItemText() {
@@ -202,7 +204,10 @@ export default {
event.preventDefault();
if (this.useVueRouter) {
- this.$router.push({ name: ROUTES.new });
+ this.$router.push({
+ name: ROUTES.new,
+ query: { [RELATED_ITEM_ID_URL_QUERY_PARAM]: this.relatedItem?.id },
+ });
} else {
visitUrl(this.newWorkItemPath);
}
diff --git a/app/assets/javascripts/work_items/components/work_item_actions.vue b/app/assets/javascripts/work_items/components/work_item_actions.vue
index e0182c773c9..def6a7a5f9b 100644
--- a/app/assets/javascripts/work_items/components/work_item_actions.vue
+++ b/app/assets/javascripts/work_items/components/work_item_actions.vue
@@ -188,6 +188,10 @@ export default {
required: false,
default: false,
},
+ isGroup: {
+ type: Boolean,
+ required: true,
+ },
},
data() {
return {
@@ -551,6 +555,7 @@ export default {
:related-item="relatedItemData"
:work-item-type-name="workItemType.toUpperCase()"
:show-project-selector="!isEpic"
+ :is-group="isGroup"
hide-button
@workItemCreated="$emit('workItemCreated')"
@hideModal="isCreateWorkItemModalVisible = false"
diff --git a/app/assets/javascripts/work_items/components/work_item_detail.vue b/app/assets/javascripts/work_items/components/work_item_detail.vue
index 2ba539f6722..33387062895 100644
--- a/app/assets/javascripts/work_items/components/work_item_detail.vue
+++ b/app/assets/javascripts/work_items/components/work_item_detail.vue
@@ -676,6 +676,7 @@ export default {
:is-sticky-header-showing="isStickyHeaderShowing"
:work-item-notifications-subscribed="workItemNotificationsSubscribed"
:work-item-author-id="workItemAuthorId"
+ :is-group="isGroupWorkItem"
@hideStickyHeader="hideStickyHeader"
@showStickyHeader="showStickyHeader"
@deleteWorkItem="$emit('deleteWorkItem', { workItemType, workItemId: workItem.id })"
@@ -773,6 +774,7 @@ export default {
:has-children="hasChildren"
:work-item-author-id="workItemAuthorId"
:can-create-related-item="workItemLinkedItems !== undefined"
+ :is-group="isGroupWorkItem"
@deleteWorkItem="$emit('deleteWorkItem', { workItemType, workItemId: workItem.id })"
@toggleWorkItemConfidentiality="toggleConfidentiality"
@error="updateError = $event"
diff --git a/app/assets/javascripts/work_items/components/work_item_sticky_header.vue b/app/assets/javascripts/work_items/components/work_item_sticky_header.vue
index 3421792259e..12f619e7b86 100644
--- a/app/assets/javascripts/work_items/components/work_item_sticky_header.vue
+++ b/app/assets/javascripts/work_items/components/work_item_sticky_header.vue
@@ -71,6 +71,10 @@ export default {
required: false,
default: 0,
},
+ isGroup: {
+ type: Boolean,
+ required: true,
+ },
},
computed: {
canUpdate() {
@@ -175,6 +179,7 @@ export default {
:work-item-state="workItem.state"
:is-modal="isModal"
:work-item-author-id="workItemAuthorId"
+ :is-group="isGroup"
@deleteWorkItem="$emit('deleteWorkItem')"
@toggleWorkItemConfidentiality="
$emit('toggleWorkItemConfidentiality', !workItem.confidential)
diff --git a/app/assets/javascripts/work_items/constants.js b/app/assets/javascripts/work_items/constants.js
index a424d2847b4..be29637931c 100644
--- a/app/assets/javascripts/work_items/constants.js
+++ b/app/assets/javascripts/work_items/constants.js
@@ -344,6 +344,7 @@ export const DEFAULT_EPIC_COLORS = '#1068bf';
export const MAX_FREQUENT_PROJECTS = 3;
export const CREATE_NEW_WORK_ITEM_MODAL = 'create_new_work_item_modal';
+export const RELATED_ITEM_ID_URL_QUERY_PARAM = 'related_item_id';
export const WORK_ITEM_REFERENCE_CHAR = '#';
diff --git a/app/assets/javascripts/work_items/graphql/work_item_related_item.query.graphql b/app/assets/javascripts/work_items/graphql/work_item_related_item.query.graphql
new file mode 100644
index 00000000000..c820a825a7d
--- /dev/null
+++ b/app/assets/javascripts/work_items/graphql/work_item_related_item.query.graphql
@@ -0,0 +1,10 @@
+query workItemRelatedItem($id: WorkItemID!) {
+ workItem(id: $id) {
+ id
+ reference
+ workItemType {
+ id
+ name
+ }
+ }
+}
diff --git a/app/assets/javascripts/work_items/pages/create_work_item.vue b/app/assets/javascripts/work_items/pages/create_work_item.vue
index 206cc819574..331e8637b3e 100644
--- a/app/assets/javascripts/work_items/pages/create_work_item.vue
+++ b/app/assets/javascripts/work_items/pages/create_work_item.vue
@@ -1,7 +1,8 @@