diff --git a/.gitlab/ci/qa-common/variables.gitlab-ci.yml b/.gitlab/ci/qa-common/variables.gitlab-ci.yml
index beca8e636df..317f3e5635e 100644
--- a/.gitlab/ci/qa-common/variables.gitlab-ci.yml
+++ b/.gitlab/ci/qa-common/variables.gitlab-ci.yml
@@ -18,7 +18,7 @@ variables:
# Helm chart ref used by test-on-cng pipeline
GITLAB_HELM_CHART_REF: "be52d36697ab1513512670a5f1456e294d15dbcd"
# Specific ref for cng-mirror project to trigger builds for
- GITLAB_CNG_MIRROR_REF: "41602cd52fec706fecb9df273016b2ea6236ee8a"
+ GITLAB_CNG_MIRROR_REF: "4893053f6121ca32c87d7d28a7f76479cce58a72"
# Makes sure some of the common scripts from pipeline-common use bundler to execute commands
RUN_WITH_BUNDLE: "true"
# Makes sure reporting script defined in .gitlab-qa-report from pipeline-common is executed from correct folder
diff --git a/.rubocop.yml b/.rubocop.yml
index a6ac3c2f019..1cb36cf5e90 100644
--- a/.rubocop.yml
+++ b/.rubocop.yml
@@ -643,6 +643,9 @@ Cop/ActiveModelErrorsDirectManipulation:
Gitlab/AvoidFeatureGet:
Enabled: true
+Gitlab/FeatureFlagKeyDynamic:
+ Enabled: true
+
RSpec/WebMockEnable:
Enabled: true
Include:
diff --git a/.rubocop_todo/gitlab/feature_flag_key_dynamic.yml b/.rubocop_todo/gitlab/feature_flag_key_dynamic.yml
new file mode 100644
index 00000000000..e56cffff60c
--- /dev/null
+++ b/.rubocop_todo/gitlab/feature_flag_key_dynamic.yml
@@ -0,0 +1,32 @@
+---
+# Cop supports --autocorrect.
+Gitlab/FeatureFlagKeyDynamic:
+ Details: grace period
+ Exclude:
+ - 'app/graphql/resolvers/app_config/gitlab_instance_feature_flags_resolver.rb'
+ - 'app/graphql/resolvers/feature_flag_resolver.rb'
+ - 'app/services/concerns/measurable.rb'
+ - 'app/services/service_desk_settings/update_service.rb'
+ - 'app/workers/concerns/worker_attributes.rb'
+ - 'app/workers/loose_foreign_keys/cleanup_worker.rb'
+ - 'ee/app/controllers/remote_development/workspaces_feature_flag_controller.rb'
+ - 'ee/app/graphql/resolvers/ai/user_available_features_resolver.rb'
+ - 'ee/app/graphql/resolvers/ai/user_code_suggestions_contexts_resolver.rb'
+ - 'ee/app/models/concerns/geo/verifiable_replicator.rb'
+ - 'ee/app/services/search/zoekt/info_service.rb'
+ - 'ee/lib/gitlab/ai_gateway.rb'
+ - 'ee/lib/gitlab/geo/replicator.rb'
+ - 'ee/lib/gitlab/llm/chain/concerns/use_ai_gateway_agent_prompt.rb'
+ - 'ee/lib/gitlab/llm/completions_factory.rb'
+ - 'ee/lib/tasks/gitlab/nav/variant_generator.rb'
+ - 'ee/spec/graphql/resolvers/ai/user_available_features_resolver_spec.rb'
+ - 'ee/spec/models/gitlab_subscriptions/features_spec.rb'
+ - 'lib/feature/gitaly.rb'
+ - 'lib/gitlab/gon_helper.rb'
+ - 'lib/gitlab/redis/multi_store.rb'
+ - 'lib/gitlab/sidekiq_middleware/skip_jobs.rb'
+ - 'lib/gitlab/sidekiq_sharding/router.rb'
+ - 'lib/web_ide/extension_marketplace.rb'
+ - 'spec/lib/feature_spec.rb'
+ - 'spec/requests/api/features_spec.rb'
+ - 'spec/support_specs/helpers/stub_feature_flags_spec.rb'
diff --git a/app/assets/javascripts/pages/projects/show/index.js b/app/assets/javascripts/pages/projects/show/index.js
index 16956a51b0e..594356fa661 100644
--- a/app/assets/javascripts/pages/projects/show/index.js
+++ b/app/assets/javascripts/pages/projects/show/index.js
@@ -13,7 +13,8 @@ import initSourceCodeDropdowns from '~/vue_shared/components/download_dropdown/i
import EmptyProject from '~/pages/projects/show/empty_project';
import initHeaderApp from '~/repository/init_header_app';
import initWebIdeLink from '~/pages/projects/shared/web_ide_link';
-import CompactCodeDropdown from '~/repository/components/code_dropdown/compact_code_dropdown.vue';
+import CompactCodeDropdown from 'ee_else_ce/repository/components/code_dropdown/compact_code_dropdown.vue';
+import apolloProvider from '~/repository/graphql';
import { initHomePanel } from '../home_panel';
// Project show page loads different overview content based on user preferences
@@ -70,7 +71,8 @@ const initCodeDropdown = () => {
if (!codeDropdownEl) return false;
- const { sshUrl, httpUrl, kerberosUrl } = codeDropdownEl.dataset;
+ const { sshUrl, httpUrl, kerberosUrl, newWorkspacePath, projectId, projectPath } =
+ codeDropdownEl.dataset;
const CodeDropdownComponent =
gon.features.directoryCodeDropdownUpdates && gon.features.blobRepositoryVueHeaderApp
@@ -79,12 +81,16 @@ const initCodeDropdown = () => {
return new Vue({
el: codeDropdownEl,
+ apolloProvider,
render(createElement) {
return createElement(CodeDropdownComponent, {
props: {
sshUrl,
httpUrl,
kerberosUrl,
+ projectId,
+ projectPath,
+ newWorkspacePath,
},
});
},
diff --git a/app/assets/javascripts/repository/components/code_dropdown/compact_code_dropdown.vue b/app/assets/javascripts/repository/components/code_dropdown/compact_code_dropdown.vue
index 70ceb15a27e..8c65b89a535 100644
--- a/app/assets/javascripts/repository/components/code_dropdown/compact_code_dropdown.vue
+++ b/app/assets/javascripts/repository/components/code_dropdown/compact_code_dropdown.vue
@@ -9,6 +9,7 @@ import CodeDropdownIdeItem from './code_dropdown_ide_item.vue';
import { VSCODE_BASE_URL, JETBRAINS_BASE_URL } from './constants';
export default {
+ name: 'CECompactCodeDropdown',
components: {
GlDisclosureDropdown,
GlDisclosureDropdownGroup,
@@ -241,6 +242,7 @@ export default {
@close-dropdown="closeDropdown"
/>
+