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:
authorGitLab Bot <gitlab-bot@gitlab.com>2021-05-21 09:11:06 +0300
committerGitLab Bot <gitlab-bot@gitlab.com>2021-05-21 09:11:06 +0300
commit1cf90c700837637f7989bda8fe81c616f19e8150 (patch)
treeb8f4bc0f93b8480b209154c079b3565980b71d96
parentfc5e0c4d0d11592d6cbc420158dd0c470eb236a5 (diff)
Add latest changes from gitlab-org/gitlab@master
-rw-r--r--app/assets/javascripts/boards/components/board_card.vue11
-rw-r--r--app/assets/javascripts/boards/components/board_card_inner.vue14
-rw-r--r--app/assets/javascripts/boards/components/board_list.vue4
-rw-r--r--app/assets/javascripts/boards/components/board_new_issue.vue2
-rw-r--r--app/assets/javascripts/boards/stores/actions.js13
-rw-r--r--app/assets/javascripts/boards/stores/mutations.js3
-rw-r--r--app/assets/stylesheets/page_bundles/group.scss107
-rw-r--r--app/assets/stylesheets/page_bundles/project.scss82
-rw-r--r--app/assets/stylesheets/pages/groups.scss211
-rw-r--r--app/assets/stylesheets/pages/projects.scss91
-rw-r--r--app/views/groups/show.html.haml1
-rw-r--r--app/views/projects/show.html.haml1
-rw-r--r--changelogs/unreleased/326963-lock-a-newly-created-item-card-in-boards.yml5
-rw-r--r--config/application.rb2
-rw-r--r--doc/administration/auth/okta.md1
-rw-r--r--doc/administration/geo/replication/remove_geo_node.md1
-rw-r--r--doc/administration/geo/replication/using_a_geo_server.md1
-rw-r--r--doc/administration/git_annex.md1
-rw-r--r--doc/api/dora4_group_analytics.md1
-rw-r--r--doc/ci/chatops/README.md1
-rw-r--r--doc/ci/docker/README.md1
-rw-r--r--doc/ci/examples/test-and-deploy-python-application-to-heroku.md1
-rw-r--r--doc/ci/examples/test-and-deploy-ruby-application-to-heroku.md1
-rw-r--r--doc/ci/examples/test-clojure-application.md1
-rw-r--r--doc/ci/quick_start/README.md1
-rw-r--r--doc/ci/services/README.md1
-rw-r--r--doc/ci/ssh_keys/README.md1
-rw-r--r--doc/development/documentation/site_architecture/release_process.md1
-rw-r--r--doc/development/event_tracking/backend.md3
-rw-r--r--doc/development/event_tracking/frontend.md3
-rw-r--r--doc/development/event_tracking/index.md3
-rw-r--r--doc/development/fe_guide/event_tracking.md3
-rw-r--r--doc/development/feature_flags/development.md2
-rw-r--r--doc/development/feature_flags/process.md1
-rw-r--r--doc/development/new_fe_guide/dependencies.md1
-rw-r--r--doc/development/product_analytics/event_dictionary.md3
-rw-r--r--doc/development/product_analytics/index.md3
-rw-r--r--doc/development/snowplow.md2
-rw-r--r--doc/development/usage_ping.md2
-rw-r--r--doc/development/what_requires_downtime.md1
-rw-r--r--doc/downgrade_ee_to_ce/README.md1
-rw-r--r--doc/gitlab-basics/README.md1
-rw-r--r--doc/gitlab-basics/create-project.md1
-rw-r--r--doc/gitlab-basics/create-your-ssh-keys.md1
-rw-r--r--doc/gitlab-basics/fork-project.md1
-rw-r--r--doc/install/README.md1
-rw-r--r--doc/integration/README.md1
-rw-r--r--doc/integration/google_workspace_saml.md1
-rw-r--r--doc/integration/jira_development_panel.md1
-rw-r--r--doc/intro/README.md1
-rw-r--r--doc/legal/README.md1
-rw-r--r--doc/operations/incident_management/alert_integrations.md1
-rw-r--r--doc/raketasks/README.md1
-rw-r--r--doc/security/cicd_environment_variables.md1
-rw-r--r--doc/topics/git/lfs/migrate_from_git_annex_to_git_lfs.md1
-rw-r--r--doc/topics/git/merge_requests.md1
-rw-r--r--doc/university/README.md1
-rw-r--r--doc/university/index.md1
-rw-r--r--doc/university/training/gitlab_flow.md1
-rw-r--r--doc/university/training/index.md1
-rw-r--r--doc/university/training/topics/agile_git.md1
-rw-r--r--doc/university/training/topics/bisect.md1
-rw-r--r--doc/university/training/topics/cherry_picking.md1
-rw-r--r--doc/university/training/topics/env_setup.md1
-rw-r--r--doc/university/training/topics/feature_branching.md1
-rw-r--r--doc/university/training/topics/getting_started.md1
-rw-r--r--doc/university/training/topics/git_add.md1
-rw-r--r--doc/university/training/topics/git_intro.md1
-rw-r--r--doc/university/training/topics/git_log.md1
-rw-r--r--doc/university/training/topics/merge_conflicts.md1
-rw-r--r--doc/university/training/topics/merge_requests.md1
-rw-r--r--doc/university/training/topics/rollback_commits.md1
-rw-r--r--doc/university/training/topics/stash.md1
-rw-r--r--doc/university/training/topics/subtree.md1
-rw-r--r--doc/university/training/topics/tags.md1
-rw-r--r--doc/university/training/topics/unstage.md1
-rw-r--r--doc/university/training/user_training.md1
-rw-r--r--doc/update/README.md1
-rw-r--r--doc/user/abuse_reports.md1
-rw-r--r--doc/user/admin_area/abuse_reports.md1
-rw-r--r--doc/user/admin_area/activating_deactivating_users.md1
-rw-r--r--doc/user/admin_area/analytics/user_cohorts.md1
-rw-r--r--doc/user/admin_area/blocking_unblocking_users.md1
-rw-r--r--doc/user/clusters/agent/runner.md1
-rw-r--r--doc/user/group/bulk_editing/index.md1
-rw-r--r--doc/user/project/bulk_editing.md1
-rw-r--r--doc/user/project/import/gemnasium.md1
-rw-r--r--doc/user/project/integrations/hipchat.md2
-rw-r--r--doc/user/project/integrations/jira.md1
-rw-r--r--doc/user/project/integrations/jira_cloud_configuration.md1
-rw-r--r--doc/user/project/integrations/jira_integrations.md1
-rw-r--r--doc/user/project/integrations/jira_server_configuration.md1
-rw-r--r--doc/user/project/merge_requests/merge_request_approvals.md1
-rw-r--r--doc/user/project/merge_requests/reviewing_and_managing_merge_requests.md1
-rw-r--r--doc/user/project/merge_requests/work_in_progress_merge_requests.md1
-rw-r--r--doc/user/project/new_ci_build_permissions_model.md1
-rw-r--r--lib/gitlab/ci/templates/Security/Coverage-Fuzzing.gitlab-ci.yml4
-rw-r--r--qa/Dockerfile12
-rw-r--r--qa/tls_certificates/client/client.crt30
-rw-r--r--qa/tls_certificates/client/client.csr27
-rw-r--r--qa/tls_certificates/client/client.key51
-rw-r--r--qa/tls_certificates/client/client.pem113
-rw-r--r--qa/tls_certificates/client/client.pfxbin0 -> 7021 bytes
-rw-r--r--spec/frontend/boards/board_card_inner_spec.js20
-rw-r--r--spec/frontend/boards/components/board_card_spec.js30
-rw-r--r--spec/frontend/boards/stores/actions_spec.js7
106 files changed, 611 insertions, 328 deletions
diff --git a/app/assets/javascripts/boards/components/board_card.vue b/app/assets/javascripts/boards/components/board_card.vue
index 2821b799cef..795db42d1e3 100644
--- a/app/assets/javascripts/boards/components/board_card.vue
+++ b/app/assets/javascripts/boards/components/board_card.vue
@@ -40,6 +40,12 @@ export default {
this.selectedBoardItems.findIndex((boardItem) => boardItem.id === this.item.id) > -1
);
},
+ isDisabled() {
+ return this.disabled || !this.item.id || this.item.isLoading;
+ },
+ isDraggable() {
+ return !this.disabled && this.item.id && !this.item.isLoading;
+ },
},
methods: {
...mapActions(['toggleBoardItemMultiSelection', 'toggleBoardItem']),
@@ -63,9 +69,10 @@ export default {
data-qa-selector="board_card"
:class="{
'multi-select': multiSelectVisible,
- 'user-can-drag': !disabled && item.id,
- 'is-disabled': disabled || !item.id,
+ 'user-can-drag': isDraggable,
+ 'is-disabled': isDisabled,
'is-active': isActive,
+ 'gl-cursor-not-allowed gl-bg-gray-10': item.isLoading,
}"
:index="index"
:data-item-id="item.id"
diff --git a/app/assets/javascripts/boards/components/board_card_inner.vue b/app/assets/javascripts/boards/components/board_card_inner.vue
index 0cb2e64042e..2f4e9044b9e 100644
--- a/app/assets/javascripts/boards/components/board_card_inner.vue
+++ b/app/assets/javascripts/boards/components/board_card_inner.vue
@@ -1,5 +1,5 @@
<script>
-import { GlLabel, GlTooltipDirective, GlIcon } from '@gitlab/ui';
+import { GlLabel, GlTooltipDirective, GlIcon, GlLoadingIcon } from '@gitlab/ui';
import { sortBy } from 'lodash';
import { mapActions, mapGetters, mapState } from 'vuex';
import boardCardInner from 'ee_else_ce/boards/mixins/board_card_inner';
@@ -17,6 +17,7 @@ import IssueTimeEstimate from './issue_time_estimate.vue';
export default {
components: {
GlLabel,
+ GlLoadingIcon,
GlIcon,
UserAvatarLink,
TooltipOnTruncate,
@@ -181,9 +182,13 @@ export default {
class="confidential-icon gl-mr-2"
:aria-label="__('Confidential')"
/>
- <a :href="item.path || item.webUrl || ''" :title="item.title" @mousemove.stop>{{
- item.title
- }}</a>
+ <a
+ :href="item.path || item.webUrl || ''"
+ :title="item.title"
+ :class="{ 'gl-text-gray-400!': item.isLoading }"
+ @mousemove.stop
+ >{{ item.title }}</a
+ >
</h4>
</div>
<div v-if="showLabelFooter" class="board-card-labels gl-mt-2 gl-display-flex gl-flex-wrap">
@@ -206,6 +211,7 @@ export default {
<div
class="gl-display-flex align-items-start flex-wrap-reverse board-card-number-container gl-overflow-hidden js-board-card-number-container"
>
+ <gl-loading-icon v-if="item.isLoading" size="md" class="mt-3" />
<span
v-if="item.referencePath"
class="board-card-number gl-overflow-hidden gl-display-flex gl-mr-3 gl-mt-3"
diff --git a/app/assets/javascripts/boards/components/board_list.vue b/app/assets/javascripts/boards/components/board_list.vue
index 94e29f3ad86..f42e5ff6b57 100644
--- a/app/assets/javascripts/boards/components/board_list.vue
+++ b/app/assets/javascripts/boards/components/board_list.vue
@@ -86,7 +86,9 @@ export default {
: this.$options.i18n.showingAllIssues;
},
treeRootWrapper() {
- return this.canAdminList ? Draggable : 'ul';
+ return this.canAdminList && !this.listsFlags[this.list.id]?.addItemToListInProgress
+ ? Draggable
+ : 'ul';
},
treeRootOptions() {
const options = {
diff --git a/app/assets/javascripts/boards/components/board_new_issue.vue b/app/assets/javascripts/boards/components/board_new_issue.vue
index 144cae15ab3..a63b49f9508 100644
--- a/app/assets/javascripts/boards/components/board_new_issue.vue
+++ b/app/assets/javascripts/boards/components/board_new_issue.vue
@@ -102,7 +102,7 @@ export default {
ref="submitButton"
:disabled="disabled"
class="float-left js-no-auto-disable"
- variant="success"
+ variant="confirm"
category="primary"
type="submit"
>
diff --git a/app/assets/javascripts/boards/stores/actions.js b/app/assets/javascripts/boards/stores/actions.js
index 5158e82c320..3701e115c44 100644
--- a/app/assets/javascripts/boards/stores/actions.js
+++ b/app/assets/javascripts/boards/stores/actions.js
@@ -489,8 +489,13 @@ export default {
});
},
- addListItem: ({ commit }, { list, item, position }) => {
- commit(types.ADD_BOARD_ITEM_TO_LIST, { listId: list.id, itemId: item.id, atIndex: position });
+ addListItem: ({ commit }, { list, item, position, inProgress = false }) => {
+ commit(types.ADD_BOARD_ITEM_TO_LIST, {
+ listId: list.id,
+ itemId: item.id,
+ atIndex: position,
+ inProgress,
+ });
commit(types.UPDATE_BOARD_ITEM, item);
},
@@ -509,8 +514,8 @@ export default {
input.projectPath = fullPath;
}
- const placeholderIssue = formatIssue({ ...issueInput, id: placeholderId });
- dispatch('addListItem', { list, item: placeholderIssue, position: 0 });
+ const placeholderIssue = formatIssue({ ...issueInput, id: placeholderId, isLoading: true });
+ dispatch('addListItem', { list, item: placeholderIssue, position: 0, inProgress: true });
gqlClient
.mutate({
diff --git a/app/assets/javascripts/boards/stores/mutations.js b/app/assets/javascripts/boards/stores/mutations.js
index 667628b2998..269357b14b5 100644
--- a/app/assets/javascripts/boards/stores/mutations.js
+++ b/app/assets/javascripts/boards/stores/mutations.js
@@ -166,8 +166,9 @@ export default {
[mutationTypes.ADD_BOARD_ITEM_TO_LIST]: (
state,
- { itemId, listId, moveBeforeId, moveAfterId, atIndex },
+ { itemId, listId, moveBeforeId, moveAfterId, atIndex, inProgress = false },
) => {
+ Vue.set(state.listsFlags, listId, { ...state.listsFlags, addItemToListInProgress: inProgress });
addItemToList({ state, listId, itemId, moveBeforeId, moveAfterId, atIndex });
},
diff --git a/app/assets/stylesheets/page_bundles/group.scss b/app/assets/stylesheets/page_bundles/group.scss
new file mode 100644
index 00000000000..38dd07f617c
--- /dev/null
+++ b/app/assets/stylesheets/page_bundles/group.scss
@@ -0,0 +1,107 @@
+@import 'page_bundles/mixins_and_variables_and_functions';
+
+.group-home-panel {
+ margin-top: $gl-padding;
+ margin-bottom: $gl-padding;
+
+ .home-panel-avatar {
+ width: $home-panel-title-row-height;
+ height: $home-panel-title-row-height;
+ flex-shrink: 0;
+ flex-basis: $home-panel-title-row-height;
+ }
+
+ .home-panel-title {
+ font-size: 20px;
+ line-height: $gl-line-height-24;
+ font-weight: bold;
+
+ .icon {
+ vertical-align: -1px;
+ }
+
+ .home-panel-topic-list {
+ font-size: $gl-font-size;
+ font-weight: $gl-font-weight-normal;
+
+ .icon {
+ position: relative;
+ top: 3px;
+ margin-right: $gl-padding-4;
+ }
+ }
+ }
+
+ .home-panel-title-row {
+ @include media-breakpoint-down(sm) {
+ .home-panel-avatar {
+ width: $home-panel-avatar-mobile-size;
+ height: $home-panel-avatar-mobile-size;
+ flex-basis: $home-panel-avatar-mobile-size;
+
+ .avatar {
+ font-size: 20px;
+ line-height: 46px;
+ }
+ }
+
+ .home-panel-title {
+ margin-top: 4px;
+ margin-bottom: 2px;
+ font-size: $gl-font-size;
+ line-height: $gl-font-size-large;
+ }
+
+ .home-panel-topic-list,
+ .home-panel-metadata {
+ font-size: $gl-font-size-small;
+ }
+ }
+ }
+
+ .home-panel-metadata {
+ font-weight: normal;
+ font-size: 14px;
+ line-height: $gl-btn-line-height;
+ }
+
+ .home-panel-description {
+ @include media-breakpoint-up(md) {
+ font-size: $gl-font-size-large;
+ }
+ }
+}
+
+.group-nav-container .nav-controls {
+ .group-filter-form {
+ flex: 1 1 auto;
+ margin-right: $gl-padding-8;
+ }
+
+ .dropdown-menu-right {
+ margin-top: 0;
+ }
+
+ @include media-breakpoint-down(sm) {
+ .dropdown,
+ .dropdown .dropdown-toggle,
+ .btn-success {
+ display: block;
+ }
+
+ .group-filter-form,
+ .dropdown {
+ margin-bottom: 10px;
+ margin-right: 0;
+ }
+
+ &,
+ .group-filter-form,
+ .group-filter-form-field,
+ .dropdown,
+ .dropdown .dropdown-toggle,
+ .btn-success {
+ width: 100%;
+ }
+ }
+}
diff --git a/app/assets/stylesheets/page_bundles/project.scss b/app/assets/stylesheets/page_bundles/project.scss
new file mode 100644
index 00000000000..7f044f081d4
--- /dev/null
+++ b/app/assets/stylesheets/page_bundles/project.scss
@@ -0,0 +1,82 @@
+@import 'page_bundles/mixins_and_variables_and_functions';
+
+.project-home-panel {
+ .home-panel-avatar {
+ flex-basis: $home-panel-title-row-height;
+ }
+
+ .home-panel-title {
+ .icon {
+ vertical-align: -1px;
+ }
+
+ .home-panel-topic-list {
+ .icon {
+ top: 3px;
+ }
+ }
+ }
+
+ .home-panel-title-row {
+ @include media-breakpoint-down(sm) {
+ .home-panel-avatar {
+ width: $home-panel-avatar-mobile-size;
+ height: $home-panel-avatar-mobile-size;
+ flex-basis: $home-panel-avatar-mobile-size;
+
+ .avatar {
+ font-size: 20px;
+ line-height: 46px;
+ }
+ }
+
+ .home-panel-title {
+ margin-top: 4px;
+ margin-bottom: 2px;
+ font-size: $gl-font-size;
+ line-height: $gl-font-size-large;
+ }
+ }
+ }
+
+ .home-panel-description {
+ @include media-breakpoint-up(md) {
+ font-size: $gl-font-size-large;
+ }
+ }
+}
+
+.project-repo-buttons {
+ .btn {
+ svg {
+ fill: $gray-500;
+ }
+ }
+
+ .download-button {
+ @include media-breakpoint-down(md) {
+ margin-left: 0;
+ }
+ }
+
+ .project-clone-holder {
+ display: inline-block;
+ margin: $gl-padding 0 0;
+
+ input {
+ height: $input-height;
+ }
+ }
+
+ .clone-options-dropdown {
+ min-width: 240px;
+
+ .dropdown-menu-inner-content {
+ min-width: 320px;
+ }
+ }
+
+ .mobile-git-clone {
+ margin-top: $gl-padding-8;
+ }
+}
diff --git a/app/assets/stylesheets/pages/groups.scss b/app/assets/stylesheets/pages/groups.scss
index 2ec2da9241b..ca6c9b9a073 100644
--- a/app/assets/stylesheets/pages/groups.scss
+++ b/app/assets/stylesheets/pages/groups.scss
@@ -1,7 +1,3 @@
-.milestone-row {
- @include str-truncated(90%);
-}
-
.dashboard .side .card .card-header .input-group {
.form-control {
height: 42px;
@@ -49,195 +45,6 @@
color: $gray-700;
}
-.group-nav-container .nav-controls {
- .group-filter-form {
- flex: 1 1 auto;
- margin-right: $gl-padding-8;
- }
-
- .dropdown-menu-right {
- margin-top: 0;
- }
-
- @include media-breakpoint-down(sm) {
- .dropdown,
- .dropdown .dropdown-toggle,
- .btn-success {
- display: block;
- }
-
- .group-filter-form,
- .dropdown {
- margin-bottom: 10px;
- margin-right: 0;
- }
-
- &,
- .group-filter-form,
- .group-filter-form-field,
- .dropdown,
- .dropdown .dropdown-toggle,
- .btn-success {
- width: 100%;
- }
- }
-}
-
-.group-home-panel {
- margin-top: $gl-padding;
- margin-bottom: $gl-padding;
-
- .home-panel-avatar {
- width: $home-panel-title-row-height;
- height: $home-panel-title-row-height;
- flex-shrink: 0;
- flex-basis: $home-panel-title-row-height;
- }
-
- .home-panel-title {
- font-size: 20px;
- line-height: $gl-line-height-24;
- font-weight: bold;
-
- .icon {
- vertical-align: -1px;
- }
-
- .home-panel-topic-list {
- font-size: $gl-font-size;
- font-weight: $gl-font-weight-normal;
-
- .icon {
- position: relative;
- top: 3px;
- margin-right: $gl-padding-4;
- }
- }
- }
-
- .home-panel-title-row {
- @include media-breakpoint-down(sm) {
- .home-panel-avatar {
- width: $home-panel-avatar-mobile-size;
- height: $home-panel-avatar-mobile-size;
- flex-basis: $home-panel-avatar-mobile-size;
-
- .avatar {
- font-size: 20px;
- line-height: 46px;
- }
- }
-
- .home-panel-title {
- margin-top: 4px;
- margin-bottom: 2px;
- font-size: $gl-font-size;
- line-height: $gl-font-size-large;
- }
-
- .home-panel-topic-list,
- .home-panel-metadata {
- font-size: $gl-font-size-small;
- }
- }
- }
-
- .home-panel-metadata {
- font-weight: normal;
- font-size: 14px;
- line-height: $gl-btn-line-height;
- }
-
- .home-panel-description {
- @include media-breakpoint-up(md) {
- font-size: $gl-font-size-large;
- }
- }
-}
-
-.home-panel-buttons {
- .home-panel-action-button {
- vertical-align: top;
- }
-
- .new-project-subgroup {
- .dropdown-primary {
- min-width: 115px;
- }
-
- .dropdown-toggle {
- .dropdown-btn-icon {
- pointer-events: none;
- color: inherit;
- margin-left: 0;
- }
- }
-
- .dropdown-menu {
- min-width: 280px;
- margin-top: 2px;
- }
-
- li:not(.divider) {
- padding: 0;
-
- &.droplab-item-selected {
- .icon-container {
- .list-item-checkmark {
- visibility: visible;
- }
- }
- }
-
- .menu-item {
- padding: 8px 4px;
-
- &:hover {
- background-color: $gray-darker;
- color: $gray-900;
- }
- }
-
- .icon-container {
- float: left;
- padding-left: 6px;
-
- .list-item-checkmark {
- visibility: hidden;
- }
- }
-
- .description {
- font-size: 14px;
-
- strong {
- display: block;
- font-weight: $gl-font-weight-bold;
- }
- }
-
- @include media-breakpoint-down(sm) {
- display: flex;
- align-items: flex-start;
-
- .dropdown-primary {
- flex: 1;
- }
-
- .dropdown-toggle {
- width: auto;
- }
-
- .dropdown-menu {
- width: 100%;
- max-width: inherit;
- min-width: inherit;
- }
- }
- }
- }
-}
-
.card {
.shared_runners_limit_under_quota {
color: $green-500;
@@ -269,28 +76,10 @@
}
}
-.user-settings-pipeline-quota {
- margin-top: $gl-padding;
-
- .pipeline-quota {
- border-top: 0;
- }
-}
-
table.pipeline-project-metrics tr td {
padding: $gl-padding;
}
-.mattermost-team-name {
- color: $gl-text-color-secondary;
-}
-
-.mattermost-info {
- display: block;
- color: $gl-text-color-secondary;
- margin-top: 10px;
-}
-
.explore-groups.landing {
.inner-content {
padding: 0;
diff --git a/app/assets/stylesheets/pages/projects.scss b/app/assets/stylesheets/pages/projects.scss
index dfd64d0773c..c330e0709a6 100644
--- a/app/assets/stylesheets/pages/projects.scss
+++ b/app/assets/stylesheets/pages/projects.scss
@@ -79,91 +79,10 @@
}
}
-.project-home-panel {
- .home-panel-avatar {
- flex-basis: $home-panel-title-row-height;
- }
-
- .home-panel-title {
- .icon {
- vertical-align: -1px;
- }
-
- .home-panel-topic-list {
- .icon {
- top: 3px;
- }
- }
- }
-
- .home-panel-title-row {
- @include media-breakpoint-down(sm) {
- .home-panel-avatar {
- width: $home-panel-avatar-mobile-size;
- height: $home-panel-avatar-mobile-size;
- flex-basis: $home-panel-avatar-mobile-size;
-
- .avatar {
- font-size: 20px;
- line-height: 46px;
- }
- }
-
- .home-panel-title {
- margin-top: 4px;
- margin-bottom: 2px;
- font-size: $gl-font-size;
- line-height: $gl-font-size-large;
- }
- }
- }
-
- .home-panel-description {
- @include media-breakpoint-up(md) {
- font-size: $gl-font-size-large;
- }
- }
-}
-
.nav > .project-buttons {
margin-top: 0;
}
-.project-repo-buttons {
- .btn {
- svg {
- fill: $gray-500;
- }
- }
-
- .download-button {
- @include media-breakpoint-down(md) {
- margin-left: 0;
- }
- }
-
- .project-clone-holder {
- display: inline-block;
- margin: $gl-padding 0 0;
-
- input {
- height: $input-height;
- }
- }
-
- .clone-options-dropdown {
- min-width: 240px;
-
- .dropdown-menu-inner-content {
- min-width: 320px;
- }
- }
-
- .mobile-git-clone {
- margin-top: $gl-padding-8;
- }
-}
-
.save-project-loader {
margin-top: 50px;
margin-bottom: 50px;
@@ -855,13 +774,6 @@ pre.light-well {
}
}
-.project-tip-command {
- > .input-group-prepend:first-child,
- > .input-group-append:first-child {
- width: auto;
- }
-}
-
.protected-branches-list,
.protected-tags-list {
margin-bottom: 30px;
@@ -887,8 +799,7 @@ pre.light-well {
}
}
-.project-refs-form .dropdown-menu,
-.dropdown-menu-projects {
+.project-refs-form .dropdown-menu {
width: 300px;
@include media-breakpoint-up(sm) {
diff --git a/app/views/groups/show.html.haml b/app/views/groups/show.html.haml
index 9f7f0a08df5..628425bf463 100644
--- a/app/views/groups/show.html.haml
+++ b/app/views/groups/show.html.haml
@@ -1,6 +1,7 @@
- @content_class = "limit-container-width" unless fluid_layout
- page_itemtype 'https://schema.org/Organization'
- @skip_current_level_breadcrumb = true
+- add_page_specific_style 'page_bundles/group'
- if show_thanks_for_purchase_banner?
= render_if_exists 'shared/thanks_for_purchase_banner', plan_title: plan_title, quantity: params[:purchased_quantity].to_i
diff --git a/app/views/projects/show.html.haml b/app/views/projects/show.html.haml
index 90b79fddff1..4757f50739b 100644
--- a/app/views/projects/show.html.haml
+++ b/app/views/projects/show.html.haml
@@ -2,6 +2,7 @@
- add_page_startup_graphql_call('repository/path_last_commit', { projectPath: @project.full_path, ref: current_ref, path: current_route_path || "" })
- @content_class = "limit-container-width" unless fluid_layout
- @skip_current_level_breadcrumb = true
+- add_page_specific_style 'page_bundles/project'
= content_for :meta_tags do
= auto_discovery_link_tag(:atom, project_path(@project, rss_url_options), title: "#{@project.name} activity")
diff --git a/changelogs/unreleased/326963-lock-a-newly-created-item-card-in-boards.yml b/changelogs/unreleased/326963-lock-a-newly-created-item-card-in-boards.yml
new file mode 100644
index 00000000000..be40ccd657e
--- /dev/null
+++ b/changelogs/unreleased/326963-lock-a-newly-created-item-card-in-boards.yml
@@ -0,0 +1,5 @@
+---
+title: Lock a newly created item card in boards
+merge_request: 61958
+author:
+type: changed
diff --git a/config/application.rb b/config/application.rb
index dddd4ecac5e..f5ed25b1f86 100644
--- a/config/application.rb
+++ b/config/application.rb
@@ -200,6 +200,7 @@ module Gitlab
config.assets.precompile << "page_bundles/epics.css"
config.assets.precompile << "page_bundles/error_tracking_details.css"
config.assets.precompile << "page_bundles/error_tracking_index.css"
+ config.assets.precompile << "page_bundles/group.css"
config.assets.precompile << "page_bundles/ide.css"
config.assets.precompile << "page_bundles/import.css"
config.assets.precompile << "page_bundles/incident_management_list.css"
@@ -218,6 +219,7 @@ module Gitlab
config.assets.precompile << "page_bundles/pipelines.css"
config.assets.precompile << "page_bundles/productivity_analytics.css"
config.assets.precompile << "page_bundles/profile_two_factor_auth.css"
+ config.assets.precompile << "page_bundles/project.css"
config.assets.precompile << "page_bundles/reports.css"
config.assets.precompile << "page_bundles/roadmap.css"
config.assets.precompile << "page_bundles/security_dashboard.css"
diff --git a/doc/administration/auth/okta.md b/doc/administration/auth/okta.md
index 88e9180b103..64b42339d19 100644
--- a/doc/administration/auth/okta.md
+++ b/doc/administration/auth/okta.md
@@ -1,5 +1,6 @@
---
redirect_to: '../../integration/saml.md'
+remove_date: '2021-06-15'
---
This document was moved to [another location](../../integration/saml.md).
diff --git a/doc/administration/geo/replication/remove_geo_node.md b/doc/administration/geo/replication/remove_geo_node.md
index 697d8c6ae38..b72cd3cbb95 100644
--- a/doc/administration/geo/replication/remove_geo_node.md
+++ b/doc/administration/geo/replication/remove_geo_node.md
@@ -1,5 +1,6 @@
---
redirect_to: '../../geo/replication/remove_geo_site.md'
+remove_date: '2021-06-01'
---
This document was moved to [another location](../../geo/replication/remove_geo_site.md).
diff --git a/doc/administration/geo/replication/using_a_geo_server.md b/doc/administration/geo/replication/using_a_geo_server.md
index f8ce72ac3f8..04c30514a89 100644
--- a/doc/administration/geo/replication/using_a_geo_server.md
+++ b/doc/administration/geo/replication/using_a_geo_server.md
@@ -1,5 +1,6 @@
---
redirect_to: '../../geo/replication/usage.md'
+remove_date: '2022-06-01'
---
This document was moved to [another location](../../geo/replication/usage.md).
diff --git a/doc/administration/git_annex.md b/doc/administration/git_annex.md
index 741b2a78b85..d7fb8a37b9c 100644
--- a/doc/administration/git_annex.md
+++ b/doc/administration/git_annex.md
@@ -1,5 +1,6 @@
---
redirect_to: 'index.md'
+remove_date: '2021-07-22'
---
This document was moved to [another location](index.md).
diff --git a/doc/api/dora4_group_analytics.md b/doc/api/dora4_group_analytics.md
index 743dcf728a2..501bf824f03 100644
--- a/doc/api/dora4_group_analytics.md
+++ b/doc/api/dora4_group_analytics.md
@@ -1,5 +1,6 @@
---
redirect_to: 'dora/metrics.md'
+remove_date: '2021-07-25'
---
This document was moved to [another location](dora/metrics.md).
diff --git a/doc/ci/chatops/README.md b/doc/ci/chatops/README.md
index c94d6e3ea80..577a80407d7 100644
--- a/doc/ci/chatops/README.md
+++ b/doc/ci/chatops/README.md
@@ -1,5 +1,6 @@
---
redirect_to: 'index.md'
+remove_date: '2021-05-01'
---
This document was moved to [another location](index.md).
diff --git a/doc/ci/docker/README.md b/doc/ci/docker/README.md
index c94d6e3ea80..577a80407d7 100644
--- a/doc/ci/docker/README.md
+++ b/doc/ci/docker/README.md
@@ -1,5 +1,6 @@
---
redirect_to: 'index.md'
+remove_date: '2021-05-01'
---
This document was moved to [another location](index.md).
diff --git a/doc/ci/examples/test-and-deploy-python-application-to-heroku.md b/doc/ci/examples/test-and-deploy-python-application-to-heroku.md
index 4a6555a58a6..94cfb8c1c58 100644
--- a/doc/ci/examples/test-and-deploy-python-application-to-heroku.md
+++ b/doc/ci/examples/test-and-deploy-python-application-to-heroku.md
@@ -1,5 +1,6 @@
---
redirect_to: 'README.md#contributed-examples'
+remove_date: '2021-06-01'
---
This document was moved to [another location](README.md#contributed-examples).
diff --git a/doc/ci/examples/test-and-deploy-ruby-application-to-heroku.md b/doc/ci/examples/test-and-deploy-ruby-application-to-heroku.md
index 4a6555a58a6..94cfb8c1c58 100644
--- a/doc/ci/examples/test-and-deploy-ruby-application-to-heroku.md
+++ b/doc/ci/examples/test-and-deploy-ruby-application-to-heroku.md
@@ -1,5 +1,6 @@
---
redirect_to: 'README.md#contributed-examples'
+remove_date: '2021-06-01'
---
This document was moved to [another location](README.md#contributed-examples).
diff --git a/doc/ci/examples/test-clojure-application.md b/doc/ci/examples/test-clojure-application.md
index 8aa1fb21275..cb4040212ad 100644
--- a/doc/ci/examples/test-clojure-application.md
+++ b/doc/ci/examples/test-clojure-application.md
@@ -1,5 +1,6 @@
---
redirect_to: 'README.md#contributed-examples'
+remove_date: '2021-05-26'
---
This document was moved to [another location](README.md#contributed-examples).
diff --git a/doc/ci/quick_start/README.md b/doc/ci/quick_start/README.md
index c94d6e3ea80..577a80407d7 100644
--- a/doc/ci/quick_start/README.md
+++ b/doc/ci/quick_start/README.md
@@ -1,5 +1,6 @@
---
redirect_to: 'index.md'
+remove_date: '2021-05-01'
---
This document was moved to [another location](index.md).
diff --git a/doc/ci/services/README.md b/doc/ci/services/README.md
index c94d6e3ea80..577a80407d7 100644
--- a/doc/ci/services/README.md
+++ b/doc/ci/services/README.md
@@ -1,5 +1,6 @@
---
redirect_to: 'index.md'
+remove_date: '2021-05-01'
---
This document was moved to [another location](index.md).
diff --git a/doc/ci/ssh_keys/README.md b/doc/ci/ssh_keys/README.md
index c94d6e3ea80..577a80407d7 100644
--- a/doc/ci/ssh_keys/README.md
+++ b/doc/ci/ssh_keys/README.md
@@ -1,5 +1,6 @@
---
redirect_to: 'index.md'
+remove_date: '2021-05-01'
---
This document was moved to [another location](index.md).
diff --git a/doc/development/documentation/site_architecture/release_process.md b/doc/development/documentation/site_architecture/release_process.md
index 9329b93bb26..46c74335932 100644
--- a/doc/development/documentation/site_architecture/release_process.md
+++ b/doc/development/documentation/site_architecture/release_process.md
@@ -1,5 +1,6 @@
---
redirect_to: 'https://about.gitlab.com/handbook/engineering/ux/technical-writing/workflow/#monthly-documentation-releases'
+remove_date: '2021-07-12'
---
This file was moved to [another location](https://about.gitlab.com/handbook/engineering/ux/technical-writing/workflow/#monthly-documentation-releases).
diff --git a/doc/development/event_tracking/backend.md b/doc/development/event_tracking/backend.md
index e8b8e0c4885..3931f0b35ab 100644
--- a/doc/development/event_tracking/backend.md
+++ b/doc/development/event_tracking/backend.md
@@ -1,8 +1,9 @@
---
redirect_to: 'https://about.gitlab.com/handbook/product/product-intelligence-guide/'
+remove_date: '2021-12-01'
---
This document was moved to [another location](https://about.gitlab.com/handbook/product/product-intelligence-guide/).
-<!-- This redirect file can be deleted after December 1, 2021. -->
+<!-- This redirect file can be deleted after 2021-12-01. -->
<!-- Before deletion, see: https://docs.gitlab.com/ee/development/documentation/#move-or-rename-a-page -->
diff --git a/doc/development/event_tracking/frontend.md b/doc/development/event_tracking/frontend.md
index e8b8e0c4885..3931f0b35ab 100644
--- a/doc/development/event_tracking/frontend.md
+++ b/doc/development/event_tracking/frontend.md
@@ -1,8 +1,9 @@
---
redirect_to: 'https://about.gitlab.com/handbook/product/product-intelligence-guide/'
+remove_date: '2021-12-01'
---
This document was moved to [another location](https://about.gitlab.com/handbook/product/product-intelligence-guide/).
-<!-- This redirect file can be deleted after December 1, 2021. -->
+<!-- This redirect file can be deleted after 2021-12-01. -->
<!-- Before deletion, see: https://docs.gitlab.com/ee/development/documentation/#move-or-rename-a-page -->
diff --git a/doc/development/event_tracking/index.md b/doc/development/event_tracking/index.md
index e8b8e0c4885..3931f0b35ab 100644
--- a/doc/development/event_tracking/index.md
+++ b/doc/development/event_tracking/index.md
@@ -1,8 +1,9 @@
---
redirect_to: 'https://about.gitlab.com/handbook/product/product-intelligence-guide/'
+remove_date: '2021-12-01'
---
This document was moved to [another location](https://about.gitlab.com/handbook/product/product-intelligence-guide/).
-<!-- This redirect file can be deleted after December 1, 2021. -->
+<!-- This redirect file can be deleted after 2021-12-01. -->
<!-- Before deletion, see: https://docs.gitlab.com/ee/development/documentation/#move-or-rename-a-page -->
diff --git a/doc/development/fe_guide/event_tracking.md b/doc/development/fe_guide/event_tracking.md
index e8b8e0c4885..3931f0b35ab 100644
--- a/doc/development/fe_guide/event_tracking.md
+++ b/doc/development/fe_guide/event_tracking.md
@@ -1,8 +1,9 @@
---
redirect_to: 'https://about.gitlab.com/handbook/product/product-intelligence-guide/'
+remove_date: '2021-12-01'
---
This document was moved to [another location](https://about.gitlab.com/handbook/product/product-intelligence-guide/).
-<!-- This redirect file can be deleted after December 1, 2021. -->
+<!-- This redirect file can be deleted after 2021-12-01. -->
<!-- Before deletion, see: https://docs.gitlab.com/ee/development/documentation/#move-or-rename-a-page -->
diff --git a/doc/development/feature_flags/development.md b/doc/development/feature_flags/development.md
index 79efd6d5502..d7807c6f586 100644
--- a/doc/development/feature_flags/development.md
+++ b/doc/development/feature_flags/development.md
@@ -1,7 +1,9 @@
---
redirect_to: 'index.md'
+remove_date: '2021-06-01'
---
This document was moved to [another location](index.md).
+
<!-- This redirect file can be deleted after 2021-06-01. -->
<!-- Before deletion, see: https://docs.gitlab.com/ee/development/documentation/#move-or-rename-a-page --> \ No newline at end of file
diff --git a/doc/development/feature_flags/process.md b/doc/development/feature_flags/process.md
index 247dafe9f0b..0e962218ab9 100644
--- a/doc/development/feature_flags/process.md
+++ b/doc/development/feature_flags/process.md
@@ -1,5 +1,6 @@
---
redirect_to: 'https://about.gitlab.com/handbook/product-development-flow/feature-flag-lifecycle/'
+remove_date: '2021-06-01'
---
This document was moved to [another location](https://about.gitlab.com/handbook/product-development-flow/feature-flag-lifecycle/).
diff --git a/doc/development/new_fe_guide/dependencies.md b/doc/development/new_fe_guide/dependencies.md
index b58319c15ca..c8bc1b70aa9 100644
--- a/doc/development/new_fe_guide/dependencies.md
+++ b/doc/development/new_fe_guide/dependencies.md
@@ -1,5 +1,6 @@
---
redirect_to: '../fe_guide/dependencies.md'
+remove_date: '2021-05-14'
---
This document was moved to [another location](../fe_guide/dependencies.md).
diff --git a/doc/development/product_analytics/event_dictionary.md b/doc/development/product_analytics/event_dictionary.md
index e8b8e0c4885..3931f0b35ab 100644
--- a/doc/development/product_analytics/event_dictionary.md
+++ b/doc/development/product_analytics/event_dictionary.md
@@ -1,8 +1,9 @@
---
redirect_to: 'https://about.gitlab.com/handbook/product/product-intelligence-guide/'
+remove_date: '2021-12-01'
---
This document was moved to [another location](https://about.gitlab.com/handbook/product/product-intelligence-guide/).
-<!-- This redirect file can be deleted after December 1, 2021. -->
+<!-- This redirect file can be deleted after 2021-12-01. -->
<!-- Before deletion, see: https://docs.gitlab.com/ee/development/documentation/#move-or-rename-a-page -->
diff --git a/doc/development/product_analytics/index.md b/doc/development/product_analytics/index.md
index e8b8e0c4885..3931f0b35ab 100644
--- a/doc/development/product_analytics/index.md
+++ b/doc/development/product_analytics/index.md
@@ -1,8 +1,9 @@
---
redirect_to: 'https://about.gitlab.com/handbook/product/product-intelligence-guide/'
+remove_date: '2021-12-01'
---
This document was moved to [another location](https://about.gitlab.com/handbook/product/product-intelligence-guide/).
-<!-- This redirect file can be deleted after December 1, 2021. -->
+<!-- This redirect file can be deleted after 2021-12-01. -->
<!-- Before deletion, see: https://docs.gitlab.com/ee/development/documentation/#move-or-rename-a-page -->
diff --git a/doc/development/snowplow.md b/doc/development/snowplow.md
index b5d3be5b2dd..59ae1fc0d8c 100644
--- a/doc/development/snowplow.md
+++ b/doc/development/snowplow.md
@@ -1,6 +1,8 @@
---
redirect_to: 'snowplow/index.md'
+remove_date: '2021-06-31'
---
This document was moved to [another location](snowplow/index.md).
+
<!-- This redirect file can be deleted after 2021-06-31. -->
<!-- Before deletion, see: https://docs.gitlab.com/ee/development/documentation/#move-or-rename-a-page -->
diff --git a/doc/development/usage_ping.md b/doc/development/usage_ping.md
index b8f08caaebd..567a2d41c33 100644
--- a/doc/development/usage_ping.md
+++ b/doc/development/usage_ping.md
@@ -1,7 +1,9 @@
---
redirect_to: 'usage_ping/index.md'
+remove_date: '2021-05-23'
---
This document was moved to [another location](usage_ping/index.md).
+
<!-- This redirect file can be deleted after <2021-05-23>. -->
<!-- Before deletion, see: https://docs.gitlab.com/ee/development/documentation/#move-or-rename-a-page --> \ No newline at end of file
diff --git a/doc/development/what_requires_downtime.md b/doc/development/what_requires_downtime.md
index 7d20382973a..abf49d31de2 100644
--- a/doc/development/what_requires_downtime.md
+++ b/doc/development/what_requires_downtime.md
@@ -1,5 +1,6 @@
---
redirect_to: 'avoiding_downtime_in_migrations.md'
+remove_date: '2021-07-01'
---
This document was moved to [another location](avoiding_downtime_in_migrations.md).
diff --git a/doc/downgrade_ee_to_ce/README.md b/doc/downgrade_ee_to_ce/README.md
index c815842480c..488d86f129d 100644
--- a/doc/downgrade_ee_to_ce/README.md
+++ b/doc/downgrade_ee_to_ce/README.md
@@ -1,5 +1,6 @@
---
redirect_to: 'index.md'
+remove_date: '2021-05-11'
---
This document was moved to [another location](index.md).
diff --git a/doc/gitlab-basics/README.md b/doc/gitlab-basics/README.md
index c815842480c..488d86f129d 100644
--- a/doc/gitlab-basics/README.md
+++ b/doc/gitlab-basics/README.md
@@ -1,5 +1,6 @@
---
redirect_to: 'index.md'
+remove_date: '2021-05-11'
---
This document was moved to [another location](index.md).
diff --git a/doc/gitlab-basics/create-project.md b/doc/gitlab-basics/create-project.md
index 18886120c63..2d9e458408a 100644
--- a/doc/gitlab-basics/create-project.md
+++ b/doc/gitlab-basics/create-project.md
@@ -1,5 +1,6 @@
---
redirect_to: '../user/project/working_with_projects.md'
+remove_date: '2021-05-05'
---
This document was moved to [another location](../user/project/working_with_projects.md).
diff --git a/doc/gitlab-basics/create-your-ssh-keys.md b/doc/gitlab-basics/create-your-ssh-keys.md
index 9cbaca91f7d..a99307e6dbf 100644
--- a/doc/gitlab-basics/create-your-ssh-keys.md
+++ b/doc/gitlab-basics/create-your-ssh-keys.md
@@ -1,5 +1,6 @@
---
redirect_to: '../ssh/README.md'
+remove_date: '2021-07-04'
---
This document was moved to [another location](../ssh/README.md).
diff --git a/doc/gitlab-basics/fork-project.md b/doc/gitlab-basics/fork-project.md
index adb49c6970f..f006f8b7ad6 100644
--- a/doc/gitlab-basics/fork-project.md
+++ b/doc/gitlab-basics/fork-project.md
@@ -1,5 +1,6 @@
---
redirect_to: '../user/project/working_with_projects.md'
+remove_date: '2021-05-04'
---
This document was moved to [another location](../user/project/working_with_projects.md).
diff --git a/doc/install/README.md b/doc/install/README.md
index c815842480c..488d86f129d 100644
--- a/doc/install/README.md
+++ b/doc/install/README.md
@@ -1,5 +1,6 @@
---
redirect_to: 'index.md'
+remove_date: '2021-05-11'
---
This document was moved to [another location](index.md).
diff --git a/doc/integration/README.md b/doc/integration/README.md
index c5274535d98..7c03b957686 100644
--- a/doc/integration/README.md
+++ b/doc/integration/README.md
@@ -1,5 +1,6 @@
---
redirect_to: 'index.md'
+remove_date: '2021-07-30'
---
This document was moved to [another location](index.md).
diff --git a/doc/integration/google_workspace_saml.md b/doc/integration/google_workspace_saml.md
index 46a39a2e64b..a02e88cc33f 100644
--- a/doc/integration/google_workspace_saml.md
+++ b/doc/integration/google_workspace_saml.md
@@ -1,5 +1,6 @@
---
redirect_to: 'saml.md'
+remove_date: '2021-06-15'
---
This document was moved to [another location](saml.md).
diff --git a/doc/integration/jira_development_panel.md b/doc/integration/jira_development_panel.md
index 152c1df3538..7bfebc18f47 100644
--- a/doc/integration/jira_development_panel.md
+++ b/doc/integration/jira_development_panel.md
@@ -1,5 +1,6 @@
---
redirect_to: 'jira/index.md'
+remove_date: '2021-06-24'
---
This document was moved to [another location](jira/index.md).
diff --git a/doc/intro/README.md b/doc/intro/README.md
index c815842480c..488d86f129d 100644
--- a/doc/intro/README.md
+++ b/doc/intro/README.md
@@ -1,5 +1,6 @@
---
redirect_to: 'index.md'
+remove_date: '2021-05-11'
---
This document was moved to [another location](index.md).
diff --git a/doc/legal/README.md b/doc/legal/README.md
index c815842480c..488d86f129d 100644
--- a/doc/legal/README.md
+++ b/doc/legal/README.md
@@ -1,5 +1,6 @@
---
redirect_to: 'index.md'
+remove_date: '2021-05-11'
---
This document was moved to [another location](index.md).
diff --git a/doc/operations/incident_management/alert_integrations.md b/doc/operations/incident_management/alert_integrations.md
index bec0653d464..b08ce8a0ad7 100644
--- a/doc/operations/incident_management/alert_integrations.md
+++ b/doc/operations/incident_management/alert_integrations.md
@@ -1,5 +1,6 @@
---
redirect_to: 'integrations.md'
+remove_date: '2021-05-03'
---
This document was moved to [another location](integrations.md).
diff --git a/doc/raketasks/README.md b/doc/raketasks/README.md
index c815842480c..488d86f129d 100644
--- a/doc/raketasks/README.md
+++ b/doc/raketasks/README.md
@@ -1,5 +1,6 @@
---
redirect_to: 'index.md'
+remove_date: '2021-05-11'
---
This document was moved to [another location](index.md).
diff --git a/doc/security/cicd_environment_variables.md b/doc/security/cicd_environment_variables.md
index 7de2e17c0f9..49b10af6c1d 100644
--- a/doc/security/cicd_environment_variables.md
+++ b/doc/security/cicd_environment_variables.md
@@ -1,5 +1,6 @@
---
redirect_to: 'cicd_variables.md'
+remove_date: '2021-05-15'
---
This document was moved to [another location](cicd_variables.md).
diff --git a/doc/topics/git/lfs/migrate_from_git_annex_to_git_lfs.md b/doc/topics/git/lfs/migrate_from_git_annex_to_git_lfs.md
index 741b2a78b85..d7fb8a37b9c 100644
--- a/doc/topics/git/lfs/migrate_from_git_annex_to_git_lfs.md
+++ b/doc/topics/git/lfs/migrate_from_git_annex_to_git_lfs.md
@@ -1,5 +1,6 @@
---
redirect_to: 'index.md'
+remove_date: '2021-07-22'
---
This document was moved to [another location](index.md).
diff --git a/doc/topics/git/merge_requests.md b/doc/topics/git/merge_requests.md
index 751bf8195d0..d889bc8ffe5 100644
--- a/doc/topics/git/merge_requests.md
+++ b/doc/topics/git/merge_requests.md
@@ -1,5 +1,6 @@
---
redirect_to: '../../user/project/merge_requests/index.md'
+remove_date: '2021-08-13'
---
This document was moved to [another location](../../user/project/merge_requests/index.md).
diff --git a/doc/university/README.md b/doc/university/README.md
index bf2e7c91918..573daab2333 100644
--- a/doc/university/README.md
+++ b/doc/university/README.md
@@ -1,5 +1,6 @@
---
redirect_to: '../topics/index.md'
+remove_date: '2021-05-11'
---
This document was moved to [another location](../topics/index.md).
diff --git a/doc/university/index.md b/doc/university/index.md
index 60d012485de..559f836a2a2 100644
--- a/doc/university/index.md
+++ b/doc/university/index.md
@@ -1,5 +1,6 @@
---
redirect_to: '../topics/index.md'
+remove_date: '2021-08-13'
---
This document was removed. See our [topics](../topics/index.md) for similar content.
diff --git a/doc/university/training/gitlab_flow.md b/doc/university/training/gitlab_flow.md
index bdc97ff8d28..d38e39fcfe2 100644
--- a/doc/university/training/gitlab_flow.md
+++ b/doc/university/training/gitlab_flow.md
@@ -1,5 +1,6 @@
---
redirect_to: '../../topics/gitlab_flow.md'
+remove_date: '2021-05-16'
---
This document was moved to [another location](../../topics/gitlab_flow.md).
diff --git a/doc/university/training/index.md b/doc/university/training/index.md
index 02709314708..6d99c750d13 100644
--- a/doc/university/training/index.md
+++ b/doc/university/training/index.md
@@ -1,5 +1,6 @@
---
redirect_to: '../../topics/index.md'
+remove_date: '2021-08-13'
---
This document was moved to [another location](../../topics/index.md).
diff --git a/doc/university/training/topics/agile_git.md b/doc/university/training/topics/agile_git.md
index f912f92fad2..00ff778a241 100644
--- a/doc/university/training/topics/agile_git.md
+++ b/doc/university/training/topics/agile_git.md
@@ -1,5 +1,6 @@
---
redirect_to: '../../../user/project/issue_board.md'
+remove_date: '2021-07-23'
---
Information about using Agile concepts in GitLab can be found in [another location](../../../user/project/issue_board.md).
diff --git a/doc/university/training/topics/bisect.md b/doc/university/training/topics/bisect.md
index 9c06f0b407d..64291a8194b 100644
--- a/doc/university/training/topics/bisect.md
+++ b/doc/university/training/topics/bisect.md
@@ -1,5 +1,6 @@
---
redirect_to: '../../../topics/git/bisect.md'
+remove_date: '2021-08-13'
---
This document was moved to [another location](../../../topics/git/bisect.md).
diff --git a/doc/university/training/topics/cherry_picking.md b/doc/university/training/topics/cherry_picking.md
index f0f815baa94..3e278b2c199 100644
--- a/doc/university/training/topics/cherry_picking.md
+++ b/doc/university/training/topics/cherry_picking.md
@@ -1,5 +1,6 @@
---
redirect_to: '../../../topics/git/cherry_picking.md'
+remove_date: '2021-06-01'
---
This document was moved to [another location](../../../topics/git/cherry_picking.md).
diff --git a/doc/university/training/topics/env_setup.md b/doc/university/training/topics/env_setup.md
index 2fd0a6762e2..4df0556c151 100644
--- a/doc/university/training/topics/env_setup.md
+++ b/doc/university/training/topics/env_setup.md
@@ -1,5 +1,6 @@
---
redirect_to: '../../../topics/index.md'
+remove_date: '2021-08-13'
---
This document was removed. See our [topics](../../../topics/index.md) for similar content.
diff --git a/doc/university/training/topics/feature_branching.md b/doc/university/training/topics/feature_branching.md
index 495462cdd00..94a2d0cdc69 100644
--- a/doc/university/training/topics/feature_branching.md
+++ b/doc/university/training/topics/feature_branching.md
@@ -1,5 +1,6 @@
---
redirect_to: '../../../topics/git/feature_branching.md'
+remove_date: '2021-08-13'
---
This document was moved to [another location](../../../topics/git/feature_branching.md).
diff --git a/doc/university/training/topics/getting_started.md b/doc/university/training/topics/getting_started.md
index 3dc3902c2e3..3e6fab73596 100644
--- a/doc/university/training/topics/getting_started.md
+++ b/doc/university/training/topics/getting_started.md
@@ -1,5 +1,6 @@
---
redirect_to: '../../../topics/git/getting_started.md'
+remove_date: '2021-08-13'
---
This document was moved to [another location](../../../topics/git/getting_started.md).
diff --git a/doc/university/training/topics/git_add.md b/doc/university/training/topics/git_add.md
index aa5e756995f..d7a5ce8dd6a 100644
--- a/doc/university/training/topics/git_add.md
+++ b/doc/university/training/topics/git_add.md
@@ -1,5 +1,6 @@
---
redirect_to: '../../../topics/git/git_add.md'
+remove_date: '2021-08-13'
---
This document was moved to [another location](../../../topics/git/git_add.md).
diff --git a/doc/university/training/topics/git_intro.md b/doc/university/training/topics/git_intro.md
index 2fd0a6762e2..4df0556c151 100644
--- a/doc/university/training/topics/git_intro.md
+++ b/doc/university/training/topics/git_intro.md
@@ -1,5 +1,6 @@
---
redirect_to: '../../../topics/index.md'
+remove_date: '2021-08-13'
---
This document was removed. See our [topics](../../../topics/index.md) for similar content.
diff --git a/doc/university/training/topics/git_log.md b/doc/university/training/topics/git_log.md
index 1af8abb0782..26f02cb8b17 100644
--- a/doc/university/training/topics/git_log.md
+++ b/doc/university/training/topics/git_log.md
@@ -1,5 +1,6 @@
---
redirect_to: '../../../topics/git/git_log.md'
+remove_date: '2021-08-13'
---
This document was moved to [another location](../../../topics/git/git_log.md).
diff --git a/doc/university/training/topics/merge_conflicts.md b/doc/university/training/topics/merge_conflicts.md
index d76d297803f..f4f12a17dbd 100644
--- a/doc/university/training/topics/merge_conflicts.md
+++ b/doc/university/training/topics/merge_conflicts.md
@@ -1,5 +1,6 @@
---
redirect_to: '../../../topics/git/merge_conflicts.md'
+remove_date: '2021-08-13'
---
This document was moved to [another location](../../../topics/git/merge_conflicts.md).
diff --git a/doc/university/training/topics/merge_requests.md b/doc/university/training/topics/merge_requests.md
index 80ead103fdd..1ed6fe6d273 100644
--- a/doc/university/training/topics/merge_requests.md
+++ b/doc/university/training/topics/merge_requests.md
@@ -1,5 +1,6 @@
---
redirect_to: '../../../user/project/merge_requests/index.md'
+remove_date: '2021-08-13'
---
This document was moved to [another location](../../../user/project/merge_requests/index.md).
diff --git a/doc/university/training/topics/rollback_commits.md b/doc/university/training/topics/rollback_commits.md
index b87aa12b834..38d4ac493dd 100644
--- a/doc/university/training/topics/rollback_commits.md
+++ b/doc/university/training/topics/rollback_commits.md
@@ -1,5 +1,6 @@
---
redirect_to: '../../../topics/git/rollback_commits.md'
+remove_date: '2021-08-13'
---
This document was moved to [another location](../../../topics/git/rollback_commits.md).
diff --git a/doc/university/training/topics/stash.md b/doc/university/training/topics/stash.md
index ea9ba6a7bcc..b053c459cb0 100644
--- a/doc/university/training/topics/stash.md
+++ b/doc/university/training/topics/stash.md
@@ -1,5 +1,6 @@
---
redirect_to: '../../../topics/git/stash.md'
+remove_date: '2021-08-13'
---
This document was moved to [another location](../../../topics/git/stash.md).
diff --git a/doc/university/training/topics/subtree.md b/doc/university/training/topics/subtree.md
index 5090ff8ca36..a1c1c00baaa 100644
--- a/doc/university/training/topics/subtree.md
+++ b/doc/university/training/topics/subtree.md
@@ -1,5 +1,6 @@
---
redirect_to: '../../../topics/git/subtree.md'
+remove_date: '2021-08-13'
---
This document was moved to [another location](../../../topics/git/subtree.md).
diff --git a/doc/university/training/topics/tags.md b/doc/university/training/topics/tags.md
index 28fd8400d99..53250e3540a 100644
--- a/doc/university/training/topics/tags.md
+++ b/doc/university/training/topics/tags.md
@@ -1,5 +1,6 @@
---
redirect_to: '../../../topics/git/tags.md'
+remove_date: '2021-06-01'
---
This document was moved to [another location](../../../topics/git/tags.md).
diff --git a/doc/university/training/topics/unstage.md b/doc/university/training/topics/unstage.md
index 13c21f5cbb2..c64f5be96e7 100644
--- a/doc/university/training/topics/unstage.md
+++ b/doc/university/training/topics/unstage.md
@@ -1,5 +1,6 @@
---
redirect_to: '../../../topics/git/unstage.md'
+remove_date: '2021-08-13'
---
This document was moved to [another location](../../../topics/git/unstage.md).
diff --git a/doc/university/training/user_training.md b/doc/university/training/user_training.md
index fa870b151b2..a19f9b6b6b3 100644
--- a/doc/university/training/user_training.md
+++ b/doc/university/training/user_training.md
@@ -1,5 +1,6 @@
---
redirect_to: '../../topics/index.md'
+remove_date: '2021-08-13'
---
This document was removed. See our [topics](../../topics/index.md) for similar content.
diff --git a/doc/update/README.md b/doc/update/README.md
index c815842480c..488d86f129d 100644
--- a/doc/update/README.md
+++ b/doc/update/README.md
@@ -1,5 +1,6 @@
---
redirect_to: 'index.md'
+remove_date: '2021-05-11'
---
This document was moved to [another location](index.md).
diff --git a/doc/user/abuse_reports.md b/doc/user/abuse_reports.md
index 66b7c3c6ac7..c84c3541366 100644
--- a/doc/user/abuse_reports.md
+++ b/doc/user/abuse_reports.md
@@ -1,5 +1,6 @@
---
redirect_to: 'report_abuse.md'
+remove_date: '2021-07-21'
---
This file was moved to [another location](report_abuse.md).
diff --git a/doc/user/admin_area/abuse_reports.md b/doc/user/admin_area/abuse_reports.md
index 5424d4d2cb4..4bfa277fc9f 100644
--- a/doc/user/admin_area/abuse_reports.md
+++ b/doc/user/admin_area/abuse_reports.md
@@ -1,5 +1,6 @@
---
redirect_to: 'review_abuse_reports.md'
+remove_date: '2021-07-21'
---
This file was moved to [another location](review_abuse_reports.md).
diff --git a/doc/user/admin_area/activating_deactivating_users.md b/doc/user/admin_area/activating_deactivating_users.md
index cafc7caf981..e89c42b34ba 100644
--- a/doc/user/admin_area/activating_deactivating_users.md
+++ b/doc/user/admin_area/activating_deactivating_users.md
@@ -1,5 +1,6 @@
---
redirect_to: 'moderate_users.md'
+remove_date: '2021-08-12'
---
This document was moved to [another location](moderate_users.md).
diff --git a/doc/user/admin_area/analytics/user_cohorts.md b/doc/user/admin_area/analytics/user_cohorts.md
index ca5dff85757..b906f9b8fa6 100644
--- a/doc/user/admin_area/analytics/user_cohorts.md
+++ b/doc/user/admin_area/analytics/user_cohorts.md
@@ -1,5 +1,6 @@
---
redirect_to: '../user_cohorts.md'
+remove_date: '2021-06-01'
---
This document was moved to [another location](../user_cohorts.md).
diff --git a/doc/user/admin_area/blocking_unblocking_users.md b/doc/user/admin_area/blocking_unblocking_users.md
index cafc7caf981..e89c42b34ba 100644
--- a/doc/user/admin_area/blocking_unblocking_users.md
+++ b/doc/user/admin_area/blocking_unblocking_users.md
@@ -1,5 +1,6 @@
---
redirect_to: 'moderate_users.md'
+remove_date: '2021-08-12'
---
This document was moved to [another location](moderate_users.md).
diff --git a/doc/user/clusters/agent/runner.md b/doc/user/clusters/agent/runner.md
index bbf07d4ea84..c40733bd7a5 100644
--- a/doc/user/clusters/agent/runner.md
+++ b/doc/user/clusters/agent/runner.md
@@ -1,5 +1,6 @@
---
redirect_to: 'https://docs.gitlab.com/runner/install/kubernetes-agent.html'
+remove_date: '2022-02-01'
---
This document was moved to [another location](https://docs.gitlab.com/runner/install/kubernetes-agent.html).
diff --git a/doc/user/group/bulk_editing/index.md b/doc/user/group/bulk_editing/index.md
index 48644b7427d..feceafd0991 100644
--- a/doc/user/group/bulk_editing/index.md
+++ b/doc/user/group/bulk_editing/index.md
@@ -1,5 +1,6 @@
---
redirect_to: '../../../user/group/index.md'
+remove_date: '2021-08-13'
---
This document was moved to [another location](../../../user/group/index.md).
diff --git a/doc/user/project/bulk_editing.md b/doc/user/project/bulk_editing.md
index d9e268251b7..1ecfb3b7292 100644
--- a/doc/user/project/bulk_editing.md
+++ b/doc/user/project/bulk_editing.md
@@ -1,5 +1,6 @@
---
redirect_to: 'issues/managing_issues.md'
+remove_date: '2021-08-12'
---
This document was moved to [another location](issues/managing_issues.md).
diff --git a/doc/user/project/import/gemnasium.md b/doc/user/project/import/gemnasium.md
index 5a4b16d57f5..37460da1289 100644
--- a/doc/user/project/import/gemnasium.md
+++ b/doc/user/project/import/gemnasium.md
@@ -1,5 +1,6 @@
---
redirect_to: 'index.md'
+remove_date: '2021-08-15'
---
This document was deleted.
diff --git a/doc/user/project/integrations/hipchat.md b/doc/user/project/integrations/hipchat.md
index 63772936fd4..74366ab5ef0 100644
--- a/doc/user/project/integrations/hipchat.md
+++ b/doc/user/project/integrations/hipchat.md
@@ -1,7 +1,9 @@
---
redirect_to: 'index.md'
+remove_date: '2021-06-30'
---
This document was moved to [another location](index.md).
+
<!-- This redirect file can be deleted after 2021-06-30. -->
<!-- Before deletion, see: https://docs.gitlab.com/ee/development/documentation/#move-or-rename-a-page -->
diff --git a/doc/user/project/integrations/jira.md b/doc/user/project/integrations/jira.md
index b91a8a1fb3b..521f15f330e 100644
--- a/doc/user/project/integrations/jira.md
+++ b/doc/user/project/integrations/jira.md
@@ -1,5 +1,6 @@
---
redirect_to: '../../../integration/jira/index.md'
+remove_date: '2021-07-07'
---
This document was moved to [another location](../../../integration/jira/index.md).
diff --git a/doc/user/project/integrations/jira_cloud_configuration.md b/doc/user/project/integrations/jira_cloud_configuration.md
index b3091275835..c9ab4532760 100644
--- a/doc/user/project/integrations/jira_cloud_configuration.md
+++ b/doc/user/project/integrations/jira_cloud_configuration.md
@@ -1,5 +1,6 @@
---
redirect_to: '../../../integration/jira/jira_cloud_configuration.md'
+remove_date: '2021-06-18'
---
This document was moved to [another location](../../../integration/jira/jira_cloud_configuration.md).
diff --git a/doc/user/project/integrations/jira_integrations.md b/doc/user/project/integrations/jira_integrations.md
index 485b48df01b..3aacf051c22 100644
--- a/doc/user/project/integrations/jira_integrations.md
+++ b/doc/user/project/integrations/jira_integrations.md
@@ -1,5 +1,6 @@
---
redirect_to: '../../../integration/jira/index.md'
+remove_date: '2021-07-13'
---
This document was moved to [another location](../../../integration/jira/index.md).
diff --git a/doc/user/project/integrations/jira_server_configuration.md b/doc/user/project/integrations/jira_server_configuration.md
index 191b8f207a1..de6eec62b96 100644
--- a/doc/user/project/integrations/jira_server_configuration.md
+++ b/doc/user/project/integrations/jira_server_configuration.md
@@ -1,5 +1,6 @@
---
redirect_to: '../../../integration/jira/jira_server_configuration.md'
+remove_date: '2021-06-18'
---
This document was moved to [another location](../../../integration/jira/jira_server_configuration.md).
diff --git a/doc/user/project/merge_requests/merge_request_approvals.md b/doc/user/project/merge_requests/merge_request_approvals.md
index 38d6ba062e4..42de04085a9 100644
--- a/doc/user/project/merge_requests/merge_request_approvals.md
+++ b/doc/user/project/merge_requests/merge_request_approvals.md
@@ -1,5 +1,6 @@
---
redirect_to: 'approvals/index.md'
+remove_date: '2021-07-27'
---
This document was moved to [another location](approvals/index.md).
diff --git a/doc/user/project/merge_requests/reviewing_and_managing_merge_requests.md b/doc/user/project/merge_requests/reviewing_and_managing_merge_requests.md
index 0475996cb9b..b32dce0b230 100644
--- a/doc/user/project/merge_requests/reviewing_and_managing_merge_requests.md
+++ b/doc/user/project/merge_requests/reviewing_and_managing_merge_requests.md
@@ -1,5 +1,6 @@
---
redirect_to: 'reviews/index.md'
+remove_date: '2021-08-03'
---
This document was moved to [another location](reviews/index.md).
diff --git a/doc/user/project/merge_requests/work_in_progress_merge_requests.md b/doc/user/project/merge_requests/work_in_progress_merge_requests.md
index 4b854da116e..8b663b8edf8 100644
--- a/doc/user/project/merge_requests/work_in_progress_merge_requests.md
+++ b/doc/user/project/merge_requests/work_in_progress_merge_requests.md
@@ -1,5 +1,6 @@
---
redirect_to: 'drafts.md'
+remove_date: '2021-05-19'
---
This document was moved to [another location](drafts.md).
diff --git a/doc/user/project/new_ci_build_permissions_model.md b/doc/user/project/new_ci_build_permissions_model.md
index f7e8d3d140c..55fde63dd47 100644
--- a/doc/user/project/new_ci_build_permissions_model.md
+++ b/doc/user/project/new_ci_build_permissions_model.md
@@ -1,5 +1,6 @@
---
redirect_to: '../../ci/README.md'
+remove_date: '2021-06-01'
---
This document is deprecated. See the latest [GitLab CI/CD documentation](../../ci/README.md).
diff --git a/lib/gitlab/ci/templates/Security/Coverage-Fuzzing.gitlab-ci.yml b/lib/gitlab/ci/templates/Security/Coverage-Fuzzing.gitlab-ci.yml
index 9d47537c0f0..ab71049bac2 100644
--- a/lib/gitlab/ci/templates/Security/Coverage-Fuzzing.gitlab-ci.yml
+++ b/lib/gitlab/ci/templates/Security/Coverage-Fuzzing.gitlab-ci.yml
@@ -1,5 +1,9 @@
# Read more about this feature https://docs.gitlab.com/ee/user/application_security/coverage_fuzzing
+# Configure the fuzzing tool through the environment variables.
+# List of the variables: https://docs.gitlab.com/ee/user/application_security/coverage_fuzzing/#available-cicd-variables
+# How to set: https://docs.gitlab.com/ee/ci/yaml/#variables
+
variables:
# Which branch we want to run full fledged long running fuzzing jobs.
# All others will run fuzzing regression
diff --git a/qa/Dockerfile b/qa/Dockerfile
index dda882dc5e6..81f207cbab9 100644
--- a/qa/Dockerfile
+++ b/qa/Dockerfile
@@ -38,6 +38,18 @@ RUN unzip chromedriver_linux64.zip -d /usr/local/bin
RUN rm -f chromedriver_linux64.zip
##
+# Install client certificate - Bug in Chrome Headless: https://gitlab.com/gitlab-org/gitlab/-/issues/331492
+#
+# RUN apt install -y libnss3-tools
+# RUN mkdir -p $HOME/.pki/nssdb
+# RUN certutil -N -d sql:$HOME/.pki/nssdb
+# COPY ./qa/tls_certificates/client/client.pfx /tmp/client.pfx
+# RUN pk12util -d sql:$HOME/.pki/nssdb -i /tmp/client.pfx -W ''
+# RUN mkdir -p /etc/opt/chrome/policies/managed
+# RUN echo '{ "AutoSelectCertificateForUrls": ["{\"pattern\":\"*\",\"filter\":{}}"] }' > /etc/opt/chrome/policies/managed/policy.json
+# RUN cat /etc/opt/chrome/policies/managed/policy.json
+
+##
# Install root certificate
#
RUN mkdir -p /usr/share/ca-certificates/gitlab
diff --git a/qa/tls_certificates/client/client.crt b/qa/tls_certificates/client/client.crt
new file mode 100644
index 00000000000..1bbc49e77d5
--- /dev/null
+++ b/qa/tls_certificates/client/client.crt
@@ -0,0 +1,30 @@
+-----BEGIN CERTIFICATE-----
+MIIFLDCCAxQCAQEwDQYJKoZIhvcNAQELBQAwVTELMAkGA1UEBhMCVVMxEzARBgNV
+BAgMCkNhbGlmb3JuaWExFjAUBgNVBAcMDVNhbiBGcmFuY2lzY28xGTAXBgNVBAoM
+EEdpdExhYiBBdXRob3JpdHkwHhcNMjEwMjEyMDc0NTM0WhcNMzEwMjEwMDc0NTM0
+WjBjMQswCQYDVQQGEwJVUzETMBEGA1UECAwKQ2FsaWZvcm5pYTEWMBQGA1UEBwwN
+U2FuIEZyYW5jaXNjbzEWMBQGA1UECgwNR2l0TGFiIENsaWVudDEPMA0GA1UEAwwG
+Q2xpZW50MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAwZHPYiri29q+
+1qDh6ucjKztoZ9I0gqG4skuYs7jxj7jTOG/+rkYUVB+Eltq0m76rWEEA6OFW5Yze
+E+aZOYnLYi31BwhJZI2LHDWUsdDuX936FVr5B7l+nrvARVhhARbfhjFVAljcAmDy
+Q+cSgGxgM5de/KhJ0juU25lhe2rCViuJYUsCWny4pN91KhdLJCoPxQRxFDNKG/+k
+foacxKFwEtgz185xLgNZdydwhiY5yh4+P6rCMYqKAvnl2w6L/dPQmHasWbH4Gdvk
+TGCaxiJ7NBM4Lkv+uZmjHPnBmIdLnt+Yjb/lQmaSPA379yLA4L1n/JucmlUCMpVa
+KcJTPEUzUKM4u705XLqsRVH2YmcWAQH8XPw42Llw5T4fAooR+kyMN/zigPNdw7ZC
+r+2jW5rk95gb8iEbheVaSrGIAWPqcwrSTcna5Khbzy/najf2oAM87h95D2Fhg7eW
+LhoccImcuWEGFrmUGwPwS4Zxr2XeAFim8VVVMx9uGd+5u1AscfZFWKJP3j6FwpDH
+L4I7OXFh34INxluxKQ22+PEcIUkbqpGaLZ5U+ZTw8WOy77oflUkAEu1xoEBah+Nf
+5dr6b+n+8rSddCk3mDsgpDY5E3Uv8/FH2vxRmTpiq8ObdmMbNo9Qf+CpMNg4CG+v
+f96uqj69r3aqG3MEbRdy0UjgdaaeNx0CAwEAATANBgkqhkiG9w0BAQsFAAOCAgEA
+OvEPqiQx5RuiqdVDzNAGGW6SzGoyehwVL0JkYvwHPZ8gOW4XBGl9Dtnkb3M7GeYq
+urZnoplk1uyMnNin2MVA0hRfCwCv7ix56Sh45odpN9scnXsr9I/e6ZfbQB7vFGnV
+NDESsOZKzkydameUBTu9yBk7mlV9jA7LpKipe67doptANURZjF8crmCeTvY3b1cF
+XbFe31FqvKdXeJgZU99kGUSncSS/1dWxbwyZZDBCqWfDlNh7Om+6RB1cMlQfal5z
+hqCYMGBB8YsMY1+l7l8eQDawrZNbs9yE4iqd6FXvss7o02cC1b7moZB+1JhOwwJ1
+wmgXuRiR5ynsb34LjFOicdm4YVmqiqXCW6Pr/DH/pkX8CI3Zu2hjatbgQrkGxXqT
+T1O/o48xwa8MBfviy7gkdCrapBkx0ojNLYNW6NTR3LNT4WYEQWOnqkm73Is9aVCy
+1doL6zG8chvCxLHXtpEMMPkOKpoWjokdCD4K5HAoIqmR904kOM5jCuETTWm0MD0e
+vKeWzck6YDt+zBhCD4k7yqF++d3ufcY2eCmVlwe0wH4srX/e4ni0tBKF25j3xLUA
+U+HI7Wa88zBAp3iN3CD/iWu8LBwTUlmRN8l7bi+O/AaKE08KvtzV5hhZ4c1UJa+N
+d4txM9tqkwMTFTFkRzduwuaIKB3Gaz1IWcOUJe5oO5M=
+-----END CERTIFICATE-----
diff --git a/qa/tls_certificates/client/client.csr b/qa/tls_certificates/client/client.csr
new file mode 100644
index 00000000000..42c868a381c
--- /dev/null
+++ b/qa/tls_certificates/client/client.csr
@@ -0,0 +1,27 @@
+-----BEGIN CERTIFICATE REQUEST-----
+MIIEqDCCApACAQAwYzELMAkGA1UEBhMCVVMxEzARBgNVBAgMCkNhbGlmb3JuaWEx
+FjAUBgNVBAcMDVNhbiBGcmFuY2lzY28xFjAUBgNVBAoMDUdpdExhYiBDbGllbnQx
+DzANBgNVBAMMBkNsaWVudDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIB
+AMGRz2Iq4tvavtag4ernIys7aGfSNIKhuLJLmLO48Y+40zhv/q5GFFQfhJbatJu+
+q1hBAOjhVuWM3hPmmTmJy2It9QcISWSNixw1lLHQ7l/d+hVa+Qe5fp67wEVYYQEW
+34YxVQJY3AJg8kPnEoBsYDOXXvyoSdI7lNuZYXtqwlYriWFLAlp8uKTfdSoXSyQq
+D8UEcRQzShv/pH6GnMShcBLYM9fOcS4DWXcncIYmOcoePj+qwjGKigL55dsOi/3T
+0Jh2rFmx+Bnb5ExgmsYiezQTOC5L/rmZoxz5wZiHS57fmI2/5UJmkjwN+/ciwOC9
+Z/ybnJpVAjKVWinCUzxFM1CjOLu9OVy6rEVR9mJnFgEB/Fz8ONi5cOU+HwKKEfpM
+jDf84oDzXcO2Qq/to1ua5PeYG/IhG4XlWkqxiAFj6nMK0k3J2uSoW88v52o39qAD
+PO4feQ9hYYO3li4aHHCJnLlhBha5lBsD8EuGca9l3gBYpvFVVTMfbhnfubtQLHH2
+RViiT94+hcKQxy+COzlxYd+CDcZbsSkNtvjxHCFJG6qRmi2eVPmU8PFjsu+6H5VJ
+ABLtcaBAWofjX+Xa+m/p/vK0nXQpN5g7IKQ2ORN1L/PxR9r8UZk6YqvDm3ZjGzaP
+UH/gqTDYOAhvr3/erqo+va92qhtzBG0XctFI4HWmnjcdAgMBAAGgADANBgkqhkiG
+9w0BAQsFAAOCAgEAAPvL+5aGluJVNDfTyQMLKFYl7qsF6cNqwzv+Zd9bB9Suznta
+c7pU2EdHO0qsqwpMvRHxdo/2R5gbnAtPLTgQA9I9aL+YjSLH7nZJPieHFt6ffSyz
+rGNwXUBgKwhAoTqQpXHLRSHKsPsK3cuz1Oy5dqg1KsfdMVdkUwlErQb0Igjz2xUV
+qJJ8Pil0Si4eiXvkWzbIWBcGKMiomTTOqAqr2dJ75siX5ZP6l24RqZItn7RQDuhr
+y0KnZgY2SeszQb6u0JETGbKjPmnAeukg35tYFin6Z5dHsO3E9EokOi07bCN5IIw4
+AUNYSKfBIY6HYTVvbm/GsfMSntxO6R0HI6dVQKJRiJ3hrgHduANOJQBHWM7bE24A
+v104OVkZ62rPZ/ypxb2Z+A0IP3ngAv6VY5oGHmOMDXtMQb+CBtmMgggyFT1DZ+Kt
+AA4H3i6LHqYskv21AdPW4f+br2b69a0Y9XcNrLBkiH2j9itk6Ihw6zZD5Jqj9tDv
+ZBMSIIVHlecQND2HFoCM9DCeFFaJlZVNGp9EnERyxIJezcKM0OZ7rFWv7ukbrCov
+CyrK4+JLaaOlrOEXTT2ob7StxdGXQps0rOP7A0cxf3mUqfX2F6VWKslpiAa9quuC
+5Auqh5vAdY4o0NObx50WRPoFSnOEpqa8yj3hAofl66mulB31VORgN6sH8l4=
+-----END CERTIFICATE REQUEST-----
diff --git a/qa/tls_certificates/client/client.key b/qa/tls_certificates/client/client.key
new file mode 100644
index 00000000000..49d7da54058
--- /dev/null
+++ b/qa/tls_certificates/client/client.key
@@ -0,0 +1,51 @@
+-----BEGIN RSA PRIVATE KEY-----
+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
+-----END RSA PRIVATE KEY-----
diff --git a/qa/tls_certificates/client/client.pem b/qa/tls_certificates/client/client.pem
new file mode 100644
index 00000000000..ebca1a9920d
--- /dev/null
+++ b/qa/tls_certificates/client/client.pem
@@ -0,0 +1,113 @@
+-----BEGIN RSA PRIVATE KEY-----
+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
+-----END RSA PRIVATE KEY-----
+-----BEGIN CERTIFICATE-----
+MIIFLDCCAxQCAQEwDQYJKoZIhvcNAQELBQAwVTELMAkGA1UEBhMCVVMxEzARBgNV
+BAgMCkNhbGlmb3JuaWExFjAUBgNVBAcMDVNhbiBGcmFuY2lzY28xGTAXBgNVBAoM
+EEdpdExhYiBBdXRob3JpdHkwHhcNMjEwMjEyMDc0NTM0WhcNMzEwMjEwMDc0NTM0
+WjBjMQswCQYDVQQGEwJVUzETMBEGA1UECAwKQ2FsaWZvcm5pYTEWMBQGA1UEBwwN
+U2FuIEZyYW5jaXNjbzEWMBQGA1UECgwNR2l0TGFiIENsaWVudDEPMA0GA1UEAwwG
+Q2xpZW50MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAwZHPYiri29q+
+1qDh6ucjKztoZ9I0gqG4skuYs7jxj7jTOG/+rkYUVB+Eltq0m76rWEEA6OFW5Yze
+E+aZOYnLYi31BwhJZI2LHDWUsdDuX936FVr5B7l+nrvARVhhARbfhjFVAljcAmDy
+Q+cSgGxgM5de/KhJ0juU25lhe2rCViuJYUsCWny4pN91KhdLJCoPxQRxFDNKG/+k
+foacxKFwEtgz185xLgNZdydwhiY5yh4+P6rCMYqKAvnl2w6L/dPQmHasWbH4Gdvk
+TGCaxiJ7NBM4Lkv+uZmjHPnBmIdLnt+Yjb/lQmaSPA379yLA4L1n/JucmlUCMpVa
+KcJTPEUzUKM4u705XLqsRVH2YmcWAQH8XPw42Llw5T4fAooR+kyMN/zigPNdw7ZC
+r+2jW5rk95gb8iEbheVaSrGIAWPqcwrSTcna5Khbzy/najf2oAM87h95D2Fhg7eW
+LhoccImcuWEGFrmUGwPwS4Zxr2XeAFim8VVVMx9uGd+5u1AscfZFWKJP3j6FwpDH
+L4I7OXFh34INxluxKQ22+PEcIUkbqpGaLZ5U+ZTw8WOy77oflUkAEu1xoEBah+Nf
+5dr6b+n+8rSddCk3mDsgpDY5E3Uv8/FH2vxRmTpiq8ObdmMbNo9Qf+CpMNg4CG+v
+f96uqj69r3aqG3MEbRdy0UjgdaaeNx0CAwEAATANBgkqhkiG9w0BAQsFAAOCAgEA
+OvEPqiQx5RuiqdVDzNAGGW6SzGoyehwVL0JkYvwHPZ8gOW4XBGl9Dtnkb3M7GeYq
+urZnoplk1uyMnNin2MVA0hRfCwCv7ix56Sh45odpN9scnXsr9I/e6ZfbQB7vFGnV
+NDESsOZKzkydameUBTu9yBk7mlV9jA7LpKipe67doptANURZjF8crmCeTvY3b1cF
+XbFe31FqvKdXeJgZU99kGUSncSS/1dWxbwyZZDBCqWfDlNh7Om+6RB1cMlQfal5z
+hqCYMGBB8YsMY1+l7l8eQDawrZNbs9yE4iqd6FXvss7o02cC1b7moZB+1JhOwwJ1
+wmgXuRiR5ynsb34LjFOicdm4YVmqiqXCW6Pr/DH/pkX8CI3Zu2hjatbgQrkGxXqT
+T1O/o48xwa8MBfviy7gkdCrapBkx0ojNLYNW6NTR3LNT4WYEQWOnqkm73Is9aVCy
+1doL6zG8chvCxLHXtpEMMPkOKpoWjokdCD4K5HAoIqmR904kOM5jCuETTWm0MD0e
+vKeWzck6YDt+zBhCD4k7yqF++d3ufcY2eCmVlwe0wH4srX/e4ni0tBKF25j3xLUA
+U+HI7Wa88zBAp3iN3CD/iWu8LBwTUlmRN8l7bi+O/AaKE08KvtzV5hhZ4c1UJa+N
+d4txM9tqkwMTFTFkRzduwuaIKB3Gaz1IWcOUJe5oO5M=
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIFizCCA3OgAwIBAgIUJBX+SiNuqUYjf33EuMObynTcKx0wDQYJKoZIhvcNAQEL
+BQAwVTELMAkGA1UEBhMCVVMxEzARBgNVBAgMCkNhbGlmb3JuaWExFjAUBgNVBAcM
+DVNhbiBGcmFuY2lzY28xGTAXBgNVBAoMEEdpdExhYiBBdXRob3JpdHkwHhcNMjEw
+MjExMDYyMTUzWhcNMzEwMjA5MDYyMTUzWjBVMQswCQYDVQQGEwJVUzETMBEGA1UE
+CAwKQ2FsaWZvcm5pYTEWMBQGA1UEBwwNU2FuIEZyYW5jaXNjbzEZMBcGA1UECgwQ
+R2l0TGFiIEF1dGhvcml0eTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIB
+ALxpL/dfJwhIWGYK93ovIVj+gqvJI58Sga7eWlp2LpuFQZETjJBA79R0gcwr42ph
+ch1BuxoxkYizM8sqIyFa5aW8SCWmO+IQzedKWZv+UWZg6pG+Fzyp6GO1wmXZdeXw
+xRiXp2qV+rqA8DaL2g1c2u6TB/mcfNTrfsSP3045yQW+4mdNx/g4wBf0dMpHe5DJ
+5jIvowa2O0kesq1UQ1eM9IMNSwW8fMQenV+F41LWE1NO726ksglih9TQjAIrlX6I
+XVmw0lgYegt2G+YQJ68nf2UmvK+C0KqzTZgqmzNMQnuSiJXMnlZvlgdLXTyTWCuq
+tyxp3+Z2Wshk/Cghic2MCm2XwWBIqYGu+20qoPM61c3Rk5++2VOcajD1yCYxVtM2
+akVP/e9arlCdi/CtJh3qvOlj9Uhs6a1UR/ZngpPLOa3r4JazZc04pK7q3ZynmoUL
+oDPF9AKOikvhYKxTYsgZ65VhI3myTBjQFk9qX++z2HF9UImGblqUtckn3eIoI8n2
+wd4pO/OFeFSXpR7jMywCwXTpC8yTTbuVzHEz8H83/qtsbjtw961g4kb8Vzh1zy73
+PFiJNI7hZlP1I5dqNTOAv+GnwiSnF28i7xbdkIfmjYqwcwGhAO7rjifq8ygBH3sF
+0I/6dnw4BvNlSgSJlJ1+2eH1uiaikpuOGtQAttz536dNAgMBAAGjUzBRMB0GA1Ud
+DgQWBBQSNZ46Xu4rfGVIPIQJpduWHJ+AQjAfBgNVHSMEGDAWgBQSNZ46Xu4rfGVI
+PIQJpduWHJ+AQjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4ICAQC1
+4REbDKF1tdYeCxpmQHXLHu7OkrgKIea6eKxf8mI+ZsJA4iNr3aiZYU5Wm+uAq3mK
+x6mrQRaqoo6JNbie5Tw8fU2c71EO4t3vwB7YOsBtcV0YrMtg316UE0lk+6kL0TRD
+tV7dAGCB3wXZVLPolC26/kecc258p6h4rCJ8Gi6FsIKGBisTFk3QOdLG3DQNulPF
+2bZaJjs/6HqLL+QMdChUfJP3i71LdNxzwXNPbjJ3fm5f9RNeOcWo6oI2fkQArl2i
+vcP/QtuqeOoJusbeL9zaF/EFlOggjkEtzFWCB05d6J7dMKYp5Lg4eMZQHPw6ycdk
+Ek/XTupvBk+8UiXeHLvX6II9zww9+gm3uycPiO/CSPNw4yQBPPGW+30WznbedsuY
+m79rxuq50KYvseJSPv7lw8v77ajQbRQzFi4frAFR+A1g8FArLxdpIptI9E+ekmaB
+UMhCmi17mEuBtj8Hc3VrokTFtAJV6YNIk1X+Q/zLh4TaR5mm6C/82j/ZvkSm5OX7
+TfaayRWDr7AfDKeG5Amt52BmYncsPUXnOofSz5UkqpeOWr0rKn+A7f2BeUP9R2nY
+6DncxYA+yOgU7RpnMBscsW6SkVIMJKFrfeZ1SbvZGRJd4L1PwfeaU+3yEG6oAfMa
+CFquw23nWhjvUlnCe9BaUiEtOJ2ruGjdu2sdvXPcnw==
+-----END CERTIFICATE-----
diff --git a/qa/tls_certificates/client/client.pfx b/qa/tls_certificates/client/client.pfx
new file mode 100644
index 00000000000..6931cfe659a
--- /dev/null
+++ b/qa/tls_certificates/client/client.pfx
Binary files differ
diff --git a/spec/frontend/boards/board_card_inner_spec.js b/spec/frontend/boards/board_card_inner_spec.js
index 36043b09636..15ea5d4eec4 100644
--- a/spec/frontend/boards/board_card_inner_spec.js
+++ b/spec/frontend/boards/board_card_inner_spec.js
@@ -1,4 +1,4 @@
-import { GlLabel } from '@gitlab/ui';
+import { GlLabel, GlLoadingIcon } from '@gitlab/ui';
import { mount } from '@vue/test-utils';
import { range } from 'lodash';
import Vuex from 'vuex';
@@ -63,6 +63,7 @@ describe('Board card component', () => {
},
stubs: {
GlLabel: true,
+ GlLoadingIcon: true,
},
mocks: {
$apollo: {
@@ -121,6 +122,10 @@ describe('Board card component', () => {
expect(wrapper.find('.board-card-assignee .avatar').exists()).toBe(false);
});
+ it('does not render loading icon', () => {
+ expect(wrapper.findComponent(GlLoadingIcon).exists()).toBe(false);
+ });
+
describe('blocked', () => {
it('renders blocked icon if issue is blocked', async () => {
createWrapper({
@@ -399,4 +404,17 @@ describe('Board card component', () => {
});
});
});
+
+ describe('loading', () => {
+ it('renders loading icon', async () => {
+ createWrapper({
+ item: {
+ ...issue,
+ isLoading: true,
+ },
+ });
+
+ expect(wrapper.findComponent(GlLoadingIcon).exists()).toBe(true);
+ });
+ });
});
diff --git a/spec/frontend/boards/components/board_card_spec.js b/spec/frontend/boards/components/board_card_spec.js
index ceafa6ead94..a35dfcb497e 100644
--- a/spec/frontend/boards/components/board_card_spec.js
+++ b/spec/frontend/boards/components/board_card_spec.js
@@ -1,5 +1,6 @@
import { GlLabel } from '@gitlab/ui';
-import { createLocalVue, shallowMount, mount } from '@vue/test-utils';
+import { shallowMount, mount } from '@vue/test-utils';
+import Vue from 'vue';
import Vuex from 'vuex';
import BoardCard from '~/boards/components/board_card.vue';
@@ -12,8 +13,7 @@ describe('Board card', () => {
let store;
let mockActions;
- const localVue = createLocalVue();
- localVue.use(Vuex);
+ Vue.use(Vuex);
const createStore = ({ initialState = {} } = {}) => {
mockActions = {
@@ -41,14 +41,14 @@ describe('Board card', () => {
provide = {},
mountFn = shallowMount,
stubs = { BoardCardInner },
+ item = mockIssue,
} = {}) => {
wrapper = mountFn(BoardCard, {
- localVue,
stubs,
store,
propsData: {
list: mockLabelList,
- item: mockIssue,
+ item,
disabled: false,
index: 0,
...propsData,
@@ -151,4 +151,24 @@ describe('Board card', () => {
});
});
});
+
+ describe('when card is loading', () => {
+ it('card is disabled and user cannot drag', () => {
+ createStore();
+ mountComponent({ item: { ...mockIssue, isLoading: true } });
+
+ expect(wrapper.classes()).toContain('is-disabled');
+ expect(wrapper.classes()).not.toContain('user-can-drag');
+ });
+ });
+
+ describe('when card is not loading', () => {
+ it('user can drag', () => {
+ createStore();
+ mountComponent();
+
+ expect(wrapper.classes()).not.toContain('is-disabled');
+ expect(wrapper.classes()).toContain('user-can-drag');
+ });
+ });
});
diff --git a/spec/frontend/boards/stores/actions_spec.js b/spec/frontend/boards/stores/actions_spec.js
index 09343b5704f..5c55eb3c0a4 100644
--- a/spec/frontend/boards/stores/actions_spec.js
+++ b/spec/frontend/boards/stores/actions_spec.js
@@ -1114,6 +1114,7 @@ describe('addListItem', () => {
listId: mockLists[0].id,
itemId: mockIssue.id,
atIndex: 0,
+ inProgress: false,
},
},
{ type: types.UPDATE_BOARD_ITEM, payload: mockIssue },
@@ -1244,8 +1245,9 @@ describe('addListNewIssue', () => {
type: 'addListItem',
payload: {
list: fakeList,
- item: formatIssue({ ...mockIssue, id: 'tmp' }),
+ item: formatIssue({ ...mockIssue, id: 'tmp', isLoading: true }),
position: 0,
+ inProgress: true,
},
},
{ type: 'removeListItem', payload: { listId: fakeList.id, itemId: 'tmp' } },
@@ -1286,8 +1288,9 @@ describe('addListNewIssue', () => {
type: 'addListItem',
payload: {
list: fakeList,
- item: formatIssue({ ...mockIssue, id: 'tmp' }),
+ item: formatIssue({ ...mockIssue, id: 'tmp', isLoading: true }),
position: 0,
+ inProgress: true,
},
},
{ type: 'removeListItem', payload: { listId: fakeList.id, itemId: 'tmp' } },