diff --git a/.gitlab/ci/frontend.gitlab-ci.yml b/.gitlab/ci/frontend.gitlab-ci.yml index 5d4521b3f36..6e84d4f3914 100644 --- a/.gitlab/ci/frontend.gitlab-ci.yml +++ b/.gitlab/ci/frontend.gitlab-ci.yml @@ -293,14 +293,14 @@ coverage-frontend: - *yarn-install - run_timed_command "retry yarn run webpack-prod" -qa-frontend-node:12: - extends: .qa-frontend-node - image: ${GITLAB_DEPENDENCY_PROXY}node:12 - qa-frontend-node:14: extends: .qa-frontend-node image: ${GITLAB_DEPENDENCY_PROXY}node:14 +qa-frontend-node:16: + extends: .qa-frontend-node + image: ${GITLAB_DEPENDENCY_PROXY}node:16 + qa-frontend-node:latest: extends: - .qa-frontend-node diff --git a/Gemfile.lock b/Gemfile.lock index c4b952d8216..7fc00cd0004 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -1252,7 +1252,7 @@ GEM actionpack (>= 4.0) activesupport (>= 4.0) sprockets (>= 3.0.0) - sqlite3 (1.3.13) + sqlite3 (1.4.2) ssh_data (1.2.0) ssrf_filter (1.0.7) stackprof (0.2.15) diff --git a/app/assets/javascripts/persistent_user_callouts.js b/app/assets/javascripts/persistent_user_callouts.js index f6de21ec0c5..dee832c01d5 100644 --- a/app/assets/javascripts/persistent_user_callouts.js +++ b/app/assets/javascripts/persistent_user_callouts.js @@ -12,6 +12,7 @@ const PERSISTENT_USER_CALLOUTS = [ '.js-security-newsletter-callout', '.js-approaching-seats-count-threshold', '.js-storage-enforcement-banner', + '.js-user-over-limit-free-plan-alert', ]; const initCallouts = () => { diff --git a/app/assets/javascripts/runner/admin_runners/admin_runners_app.vue b/app/assets/javascripts/runner/admin_runners/admin_runners_app.vue index 9abd45424e7..3853a7d8666 100644 --- a/app/assets/javascripts/runner/admin_runners/admin_runners_app.vue +++ b/app/assets/javascripts/runner/admin_runners/admin_runners_app.vue @@ -4,9 +4,11 @@ import { createAlert } from '~/flash'; import { updateHistory } from '~/lib/utils/url_utility'; import { formatNumber } from '~/locale'; import { fetchPolicies } from '~/lib/graphql'; +import glFeatureFlagMixin from '~/vue_shared/mixins/gl_feature_flags_mixin'; import RegistrationDropdown from '../components/registration/registration_dropdown.vue'; import RunnerFilteredSearchBar from '../components/runner_filtered_search_bar.vue'; +import RunnerBulkDelete from '../components/runner_bulk_delete.vue'; import RunnerList from '../components/runner_list.vue'; import RunnerName from '../components/runner_name.vue'; import RunnerStats from '../components/stat/runner_stats.vue'; @@ -53,6 +55,7 @@ export default { GlLink, RegistrationDropdown, RunnerFilteredSearchBar, + RunnerBulkDelete, RunnerList, RunnerName, RunnerStats, @@ -60,6 +63,8 @@ export default { RunnerTypeTabs, RunnerActionsCell, }, + mixins: [glFeatureFlagMixin()], + inject: ['localMutations'], props: { registrationToken: { type: String, @@ -180,6 +185,11 @@ export default { }, ]; }, + isBulkDeleteEnabled() { + // Feature flag: admin_runners_bulk_delete + // Rollout issue: https://gitlab.com/gitlab-org/gitlab/-/issues/353981 + return this.glFeatures.adminRunnersBulkDelete; + }, }, watch: { search: { @@ -238,6 +248,12 @@ export default { reportToSentry(error) { captureException({ error, component: this.$options.name }); }, + onChecked({ runner, isChecked }) { + this.localMutations.setRunnerChecked({ + runner, + isChecked, + }); + }, }, filteredSearchNamespace: ADMIN_FILTERED_SEARCH_NAMESPACE, INSTANCE_TYPE, @@ -286,7 +302,13 @@ export default { {{ __('No runners found') }}