diff --git a/.rubocop_todo/gitlab/strong_memoize_attr.yml b/.rubocop_todo/gitlab/strong_memoize_attr.yml
index e61e1cff8af..e2924bdfffc 100644
--- a/.rubocop_todo/gitlab/strong_memoize_attr.yml
+++ b/.rubocop_todo/gitlab/strong_memoize_attr.yml
@@ -526,7 +526,6 @@ Gitlab/StrongMemoizeAttr:
- 'lib/gitlab/kubernetes/rollout_instances.rb'
- 'lib/gitlab/language_data.rb'
- 'lib/gitlab/lets_encrypt/client.rb'
- - 'lib/gitlab/metrics/prometheus.rb'
- 'lib/gitlab/prometheus_client.rb'
- 'lib/gitlab/rack_attack/request.rb'
- 'lib/gitlab/redis/multi_store.rb'
diff --git a/.rubocop_todo/layout/line_continuation_spacing.yml b/.rubocop_todo/layout/line_continuation_spacing.yml
index 7b2c125ac62..fa649521005 100644
--- a/.rubocop_todo/layout/line_continuation_spacing.yml
+++ b/.rubocop_todo/layout/line_continuation_spacing.yml
@@ -2,7 +2,6 @@
# Cop supports --autocorrect.
Layout/LineContinuationSpacing:
Exclude:
- - 'app/helpers/projects_helper.rb'
- 'app/helpers/tags_helper.rb'
- 'app/helpers/tree_helper.rb'
- 'app/models/concerns/spammable.rb'
diff --git a/GITLAB_KAS_VERSION b/GITLAB_KAS_VERSION
index a9bf7da17b7..02ad143ea51 100644
--- a/GITLAB_KAS_VERSION
+++ b/GITLAB_KAS_VERSION
@@ -1 +1 @@
-403b947e4d6bcaa170535e7972a536a2ab21b5d4
+09aa77d55b90fa51939ea12867eb2aaf43c61ee2
diff --git a/app/assets/javascripts/boards/components/board_list_header.vue b/app/assets/javascripts/boards/components/board_list_header.vue
index 6846363939a..9fa941853f5 100644
--- a/app/assets/javascripts/boards/components/board_list_header.vue
+++ b/app/assets/javascripts/boards/components/board_list_header.vue
@@ -213,6 +213,9 @@ export default {
filters: this.filterParams,
};
},
+ showStatusIcon() {
+ return this.listType === 'status' && (!this.isSwimlanesHeader || !this.list.collapsed);
+ },
},
apollo: {
// eslint-disable-next-line @gitlab/vue-no-undef-apollo-properties
@@ -387,7 +390,7 @@ export default {
/>
diff --git a/app/assets/javascripts/ci/runner/admin_new_runner/index.js b/app/assets/javascripts/ci/runner/admin_new_runner/index.js
index 434c1197f71..a603589f0b2 100644
--- a/app/assets/javascripts/ci/runner/admin_new_runner/index.js
+++ b/app/assets/javascripts/ci/runner/admin_new_runner/index.js
@@ -12,6 +12,8 @@ export const initAdminNewRunner = (selector = '#js-admin-new-runner') => {
return null;
}
+ const { runnersPath } = el.dataset;
+
const apolloProvider = new VueApollo({
defaultClient: createDefaultClient(),
});
@@ -20,7 +22,11 @@ export const initAdminNewRunner = (selector = '#js-admin-new-runner') => {
el,
apolloProvider,
render(h) {
- return h(AdminNewRunnerApp);
+ return h(AdminNewRunnerApp, {
+ props: {
+ runnersPath,
+ },
+ });
},
});
};
diff --git a/app/assets/javascripts/ci/runner/components/runner_create_wizard.vue b/app/assets/javascripts/ci/runner/components/runner_create_wizard.vue
index 2eeece2b639..8da6238d062 100644
--- a/app/assets/javascripts/ci/runner/components/runner_create_wizard.vue
+++ b/app/assets/javascripts/ci/runner/components/runner_create_wizard.vue
@@ -17,12 +17,17 @@ export default {
required: true,
validator: (t) => RUNNER_TYPES.includes(t),
},
+ runnersPath: {
+ type: String,
+ required: true,
+ },
},
data() {
return {
currentStep: 1,
tags: '',
runUntagged: false,
+ newRunnerId: null,
};
},
methods: {
@@ -36,6 +41,9 @@ export default {
this.tags = requiredFields.tags;
this.runUntagged = requiredFields.runUntagged;
},
+ onGetNewRunnerId(runnerId) {
+ this.newRunnerId = runnerId;
+ },
},
stepsTotal: 3,
};
@@ -59,10 +67,13 @@ export default {
:runner-type="runnerType"
@next="onNext"
@back="onBack"
+ @onGetNewRunnerId="onGetNewRunnerId"
/>
diff --git a/app/assets/javascripts/ci/runner/components/runner_create_wizard_optional_fields.vue b/app/assets/javascripts/ci/runner/components/runner_create_wizard_optional_fields.vue
index aa797e9e14e..fc9df49e1aa 100644
--- a/app/assets/javascripts/ci/runner/components/runner_create_wizard_optional_fields.vue
+++ b/app/assets/javascripts/ci/runner/components/runner_create_wizard_optional_fields.vue
@@ -120,6 +120,7 @@ export default {
return;
}
+ this.$emit('onGetNewRunnerId', runner.id);
this.$emit('next');
// destroy the alert
createAlert({ message: null }).dismiss();
diff --git a/app/assets/javascripts/ci/runner/components/runner_create_wizard_registration.vue b/app/assets/javascripts/ci/runner/components/runner_create_wizard_registration.vue
index fea81a4a068..7841d364609 100644
--- a/app/assets/javascripts/ci/runner/components/runner_create_wizard_registration.vue
+++ b/app/assets/javascripts/ci/runner/components/runner_create_wizard_registration.vue
@@ -1,11 +1,31 @@
@@ -26,10 +90,79 @@ export default {
:steps-total="stepsTotal"
>
-
+
+
+
+ {{ s__('Runners|Loading') }}
+
+
+
+
+
+
+
+ {{ content }}
+
+
+ {{ content }}
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ content }}
+
+
+ {{ content }}
+
+
+
+
+
+
-
-
+
+
{{ s__('Runners|View runners') }}
diff --git a/app/assets/javascripts/graphql_shared/possible_types.json b/app/assets/javascripts/graphql_shared/possible_types.json
index 5ba89554dbf..4e70f78fa9c 100644
--- a/app/assets/javascripts/graphql_shared/possible_types.json
+++ b/app/assets/javascripts/graphql_shared/possible_types.json
@@ -170,6 +170,7 @@
"EpicIssue",
"Issue",
"MergeRequest",
+ "ProjectComplianceViolation",
"Snippet",
"Vulnerability",
"WikiPage"
diff --git a/app/assets/javascripts/issues/list/components/issue_card_statistics.vue b/app/assets/javascripts/issues/list/components/issue_card_statistics.vue
index 2cc022a7f03..d558b08d4d4 100644
--- a/app/assets/javascripts/issues/list/components/issue_card_statistics.vue
+++ b/app/assets/javascripts/issues/list/components/issue_card_statistics.vue
@@ -33,42 +33,25 @@ export default {
-
-
- -
-
-
- {{ upvotes }}
-
-
- -
-
-
- {{ downvotes }}
-
-
- -
-
-
- {{ closingMergeRequestsCount }}
-
-
-
-
-
+
+ -
+
+
+ {{ upvotes }}
+
+
+ -
+
+
+ {{ downvotes }}
+
+
+ -
+
+
+ {{ closingMergeRequestsCount }}
+
+
+
+
diff --git a/app/assets/javascripts/members/placeholders/components/placeholder_actions.vue b/app/assets/javascripts/members/placeholders/components/placeholder_actions.vue
index d3bea19a63b..8a71444e87c 100644
--- a/app/assets/javascripts/members/placeholders/components/placeholder_actions.vue
+++ b/app/assets/javascripts/members/placeholders/components/placeholder_actions.vue
@@ -419,13 +419,13 @@ export default {
-
-
+
+
-
+
@@ -231,40 +229,35 @@ export default {
-
-
- {{ item.sourceHostname }}
-
- {{ item.sourceName }}
-
-
@{{ item.sourceUsername }}
-
- {{ item.sourceHostname }}
+ {{ item.sourceName }}
+ @{{ item.sourceUsername }}
+
+
+
-
-
- {{ content }}
-
-
-
- {{ s__('UserMapping|User ID') }}: {{ item.sourceUserIdentifier }}
-
-
+
+ {{ content }}
+
+
+
+ {{ s__('UserMapping|User ID') }}: {{ item.sourceUserIdentifier }}
+
diff --git a/app/assets/javascripts/settings_panels.js b/app/assets/javascripts/settings_panels.js
index e6f3f2d268e..6feb4738f1b 100644
--- a/app/assets/javascripts/settings_panels.js
+++ b/app/assets/javascripts/settings_panels.js
@@ -19,9 +19,10 @@ export function isExpanded(sectionArg) {
export function expandSection(sectionArg) {
const $section = $(sectionArg);
const title = $section.find('.js-settings-toggle-trigger-only').text();
+ const chevron = $section.find('.js-settings-icon');
$section
- .find('.js-settings-toggle:not(.js-settings-toggle-trigger-only) .gl-button-text')
+ .find('.js-settings-toggle:not(.js-settings-toggle-trigger-only) .gl-sr-only')
.text(__('Collapse'));
$section
.find('.js-settings-toggle:not(.js-settings-toggle-trigger-only)')
@@ -32,6 +33,7 @@ export function expandSection(sectionArg) {
.addClass('animating')
.one('animationend.animateSection', () => $section.removeClass('animating'));
}
+ chevron.addClass('gl-animated-icon-on').removeClass('gl-animated-icon-off');
InternalEvents.trackEvent('click_expand_panel_on_settings', {
label: $section.find('[data-settings-block-title]').text(),
@@ -41,9 +43,10 @@ export function expandSection(sectionArg) {
export function closeSection(sectionArg) {
const $section = $(sectionArg);
const title = $section.find('.js-settings-toggle-trigger-only').text();
+ const chevron = $section.find('.js-settings-icon');
$section
- .find('.js-settings-toggle:not(.js-settings-toggle-trigger-only) .gl-button-text')
+ .find('.js-settings-toggle:not(.js-settings-toggle-trigger-only) .gl-sr-only')
.text(__('Expand'));
$section
.find('.js-settings-toggle:not(.js-settings-toggle-trigger-only)')
@@ -55,6 +58,7 @@ export function closeSection(sectionArg) {
.addClass('animating')
.one('animationend.animateSection', () => $section.removeClass('animating'));
}
+ chevron.addClass('gl-animated-icon-off').removeClass('gl-animated-icon-on');
}
export function toggleSection($section) {
diff --git a/app/assets/javascripts/vue_shared/components/settings/settings_block.vue b/app/assets/javascripts/vue_shared/components/settings/settings_block.vue
index 7760a4abc4c..a1f382d833e 100644
--- a/app/assets/javascripts/vue_shared/components/settings/settings_block.vue
+++ b/app/assets/javascripts/vue_shared/components/settings/settings_block.vue
@@ -1,11 +1,11 @@