From 39b8dcbf8e3f7d7af93cf0002a307a71bb0acc08 Mon Sep 17 00:00:00 2001 From: Chad Woolley Date: Fri, 17 Nov 2023 22:47:03 -0800 Subject: [PATCH 01/16] UI for Remote Dev Workspaces Agent Admin - Minimal first iteration to allow agent cluster admins to view and administer workspaces --- .../clusters/agents/components/show.vue | 7 + .../clusters/agents/components/show.vue | 8 + .../agent_admin_ui/agent_workspaces_tab.vue | 23 +++ .../agent_admin_ui/workspaces_list.vue | 169 ++++++++++++++++++ .../agent_workspaces_list.query.graphql | 41 +++++ .../ee/projects/cluster_agents_controller.rb | 1 + locale/gitlab.pot | 3 + 7 files changed, 252 insertions(+) create mode 100644 ee/app/assets/javascripts/remote_development/components/agent_admin_ui/agent_workspaces_tab.vue create mode 100644 ee/app/assets/javascripts/remote_development/components/agent_admin_ui/workspaces_list.vue create mode 100644 ee/app/assets/javascripts/remote_development/graphql/queries/agent_workspaces_list.query.graphql diff --git a/app/assets/javascripts/clusters/agents/components/show.vue b/app/assets/javascripts/clusters/agents/components/show.vue index 9d7d68ee31c428..6c35948c8e20c4 100644 --- a/app/assets/javascripts/clusters/agents/components/show.vue +++ b/app/assets/javascripts/clusters/agents/components/show.vue @@ -161,6 +161,13 @@ export default { + + diff --git a/ee/app/assets/javascripts/clusters/agents/components/show.vue b/ee/app/assets/javascripts/clusters/agents/components/show.vue index fe31d0f5025168..d25ae7d35c5761 100644 --- a/ee/app/assets/javascripts/clusters/agents/components/show.vue +++ b/ee/app/assets/javascripts/clusters/agents/components/show.vue @@ -5,6 +5,7 @@ import { s__ } from '~/locale'; import glFeatureFlagMixin from '~/vue_shared/mixins/gl_feature_flags_mixin'; import AgentShowPage from '~/clusters/agents/components/show.vue'; import AgentVulnerabilityReport from 'ee/security_dashboard/components/agent/agent_vulnerability_report.vue'; +import AgentWorkspacesTab from 'ee/remote_development/components/agent_admin_ui/agent_workspaces_tab.vue'; export default { i18n: { @@ -14,12 +15,16 @@ export default { AgentShowPage, GlTab, AgentVulnerabilityReport, + AgentWorkspacesTab, }, mixins: [glFeatureFlagMixin()], computed: { showSecurityTab() { return this.glFeatures.kubernetesClusterVulnerabilities; }, + showAgentWorkspacesTab() { + return this.glFeatures.remoteDevelopment; + }, }, }; @@ -31,5 +36,8 @@ export default { + diff --git a/ee/app/assets/javascripts/remote_development/components/agent_admin_ui/agent_workspaces_tab.vue b/ee/app/assets/javascripts/remote_development/components/agent_admin_ui/agent_workspaces_tab.vue new file mode 100644 index 00000000000000..799f13478de7ef --- /dev/null +++ b/ee/app/assets/javascripts/remote_development/components/agent_admin_ui/agent_workspaces_tab.vue @@ -0,0 +1,23 @@ + + + diff --git a/ee/app/assets/javascripts/remote_development/components/agent_admin_ui/workspaces_list.vue b/ee/app/assets/javascripts/remote_development/components/agent_admin_ui/workspaces_list.vue new file mode 100644 index 00000000000000..e7e47cc79aa7a6 --- /dev/null +++ b/ee/app/assets/javascripts/remote_development/components/agent_admin_ui/workspaces_list.vue @@ -0,0 +1,169 @@ + + + diff --git a/ee/app/assets/javascripts/remote_development/graphql/queries/agent_workspaces_list.query.graphql b/ee/app/assets/javascripts/remote_development/graphql/queries/agent_workspaces_list.query.graphql new file mode 100644 index 00000000000000..41af54a3248e39 --- /dev/null +++ b/ee/app/assets/javascripts/remote_development/graphql/queries/agent_workspaces_list.query.graphql @@ -0,0 +1,41 @@ +#import "~/graphql_shared/fragments/page_info.fragment.graphql" + +query agentWorkspaces( + $first: Int + $before: String + $after: String + $agentName: String! + $projectPath: ID! + $actualStates: [String!] + $projectIds: [ProjectID!] +) { + project(fullPath: $projectPath) { + id + clusterAgent(name: $agentName) { + id + workspaces( + first: $first + before: $before + after: $after + actualStates: $actualStates + projectIds: $projectIds + ) { + nodes { + id + name + namespace + projectId + desiredState + actualState + url + devfileRef + devfilePath + createdAt + } + pageInfo { + ...PageInfo + } + } + } + } +} diff --git a/ee/app/controllers/ee/projects/cluster_agents_controller.rb b/ee/app/controllers/ee/projects/cluster_agents_controller.rb index 0f4234b5e84c9f..4fe724cfcd76ce 100644 --- a/ee/app/controllers/ee/projects/cluster_agents_controller.rb +++ b/ee/app/controllers/ee/projects/cluster_agents_controller.rb @@ -9,6 +9,7 @@ module ClusterAgentsController before_action do push_licensed_feature(:kubernetes_cluster_vulnerabilities, project) push_licensed_feature(:cluster_agents_ci_impersonation, project) + push_licensed_feature(:remote_development, project) end end end diff --git a/locale/gitlab.pot b/locale/gitlab.pot index f66d21bc1ad4bc..2f95310299c3c9 100644 --- a/locale/gitlab.pot +++ b/locale/gitlab.pot @@ -40272,6 +40272,9 @@ msgstr "" msgid "Remote object has no absolute path." msgstr "" +msgid "RemoteDevelopment|Workspaces" +msgstr "" + msgid "Remove" msgstr "" -- GitLab From d1a94138502d6fa3708c4104347923e1fce5dbe0 Mon Sep 17 00:00:00 2001 From: Chad Woolley Date: Tue, 12 Dec 2023 15:54:06 -0800 Subject: [PATCH 02/16] WIP - refactoring from pairing with Paul and Enrique. TODO: - Finish abstracting agent_workspaces_list - Update tests --- ...ces_list.vue => agent_workspaces_list.vue} | 0 .../agent_admin_ui/agent_workspaces_tab.vue | 6 +- .../components/common/workspaces_list.vue | 105 ++++++++++++++++++ .../remote_development/pages/list.vue | 78 ++++--------- 4 files changed, 127 insertions(+), 62 deletions(-) rename ee/app/assets/javascripts/remote_development/components/agent_admin_ui/{workspaces_list.vue => agent_workspaces_list.vue} (100%) create mode 100644 ee/app/assets/javascripts/remote_development/components/common/workspaces_list.vue diff --git a/ee/app/assets/javascripts/remote_development/components/agent_admin_ui/workspaces_list.vue b/ee/app/assets/javascripts/remote_development/components/agent_admin_ui/agent_workspaces_list.vue similarity index 100% rename from ee/app/assets/javascripts/remote_development/components/agent_admin_ui/workspaces_list.vue rename to ee/app/assets/javascripts/remote_development/components/agent_admin_ui/agent_workspaces_list.vue diff --git a/ee/app/assets/javascripts/remote_development/components/agent_admin_ui/agent_workspaces_tab.vue b/ee/app/assets/javascripts/remote_development/components/agent_admin_ui/agent_workspaces_tab.vue index 799f13478de7ef..6f694c3a6136cf 100644 --- a/ee/app/assets/javascripts/remote_development/components/agent_admin_ui/agent_workspaces_tab.vue +++ b/ee/app/assets/javascripts/remote_development/components/agent_admin_ui/agent_workspaces_tab.vue @@ -2,7 +2,7 @@ import { GlTab } from '@gitlab/ui'; import { s__ } from '~/locale'; -import WorkspacesList from './workspaces_list.vue'; +import AgentWorkspacesList from './agent_workspaces_list.vue'; export default { i18n: { @@ -10,7 +10,7 @@ export default { }, components: { GlTab, - WorkspacesList, + AgentWorkspacesList, }, inject: ['agentName', 'projectPath'], }; @@ -18,6 +18,6 @@ export default { diff --git a/ee/app/assets/javascripts/remote_development/components/common/workspaces_list.vue b/ee/app/assets/javascripts/remote_development/components/common/workspaces_list.vue new file mode 100644 index 00000000000000..b189152062c1b4 --- /dev/null +++ b/ee/app/assets/javascripts/remote_development/components/common/workspaces_list.vue @@ -0,0 +1,105 @@ + + + diff --git a/ee/app/assets/javascripts/remote_development/pages/list.vue b/ee/app/assets/javascripts/remote_development/pages/list.vue index c562aed9195462..fbe576b0caf4d3 100644 --- a/ee/app/assets/javascripts/remote_development/pages/list.vue +++ b/ee/app/assets/javascripts/remote_development/pages/list.vue @@ -1,38 +1,25 @@