From d663ed58979d34191aafa87116cc9acf0f848ce7 Mon Sep 17 00:00:00 2001 From: Chad Woolley Date: Fri, 3 Jan 2025 14:50:03 -0700 Subject: [PATCH] Refactor MainComponentUpdater --- .../create/main_component_updater.rb | 74 +++++++++++++------ 1 file changed, 50 insertions(+), 24 deletions(-) diff --git a/ee/lib/remote_development/workspace_operations/create/main_component_updater.rb b/ee/lib/remote_development/workspace_operations/create/main_component_updater.rb index 17a9bbc49bbc2a..7996961c61a44c 100644 --- a/ee/lib/remote_development/workspace_operations/create/main_component_updater.rb +++ b/ee/lib/remote_development/workspace_operations/create/main_component_updater.rb @@ -25,43 +25,36 @@ def self.update(context) # validated this in post_flatten_devfile_validator.rb main_component = processed_devfile.fetch(:components).find { |c| c.dig(:attributes, :'gl/inject-editor') } - update_main_container( - main_component: main_component, + container = main_component.fetch(:container) + + update_env_vars( + container: container, tools_dir: tools_dir, editor_port: editor_port, ssh_port: ssh_port, enable_marketplace: vscode_extensions_gallery_metadata.fetch(:enabled) ) + update_endpoints( + container: container, + editor_port: editor_port, + ssh_port: ssh_port + ) + + override_command_and_args( + container: container + ) + context end - # @param [Hash] main_component + # @param [Hash] container # @param [String] tools_dir # @param [Integer] editor_port # @param [Integer] ssh_port # @param [Boolean] enable_marketplace # @return [void] - def self.update_main_container(main_component:, tools_dir:, editor_port:, ssh_port:, enable_marketplace:) - # This overrides the main container's command - # Open issue to support both starting the editor and running the default command: - # https://gitlab.com/gitlab-org/gitlab/-/issues/392853 - container_args = <<~"SH".chomp - sshd_path=$(which sshd) - if [ -x "$sshd_path" ]; then - echo "Starting sshd on port ${GL_SSH_PORT}" - $sshd_path -D -p $GL_SSH_PORT & - else - echo "'sshd' not found in path. Not starting SSH server." - fi - ${GL_TOOLS_DIR}/init_tools.sh - SH - - container = main_component.fetch(:container) - - container[:command] = %w[/bin/sh -c] - container[:args] = [container_args] - + def self.update_env_vars(container:, tools_dir:, editor_port:, ssh_port:, enable_marketplace:) (container[:env] ||= []).append( { name: "GL_TOOLS_DIR", @@ -85,6 +78,14 @@ def self.update_main_container(main_component:, tools_dir:, editor_port:, ssh_po } ) + nil + end + + # @param [Hash] container + # @param [Integer] editor_port + # @param [Integer] ssh_port + # @return [void] + def self.update_endpoints(container:, editor_port:, ssh_port:) (container[:endpoints] ||= []).append( { name: "editor-server", @@ -100,9 +101,34 @@ def self.update_main_container(main_component:, tools_dir:, editor_port:, ssh_po secure: true } ) + + nil + end + + # @param [Hash] container + # @return [void] + def self.override_command_and_args(container:) + # This overrides the main container's command + # Open issue to support both starting the editor and running the default command: + # https://gitlab.com/gitlab-org/gitlab/-/issues/392853 + container_args = <<~"SH".chomp + sshd_path=$(which sshd) + if [ -x "$sshd_path" ]; then + echo "Starting sshd on port ${GL_SSH_PORT}" + $sshd_path -D -p $GL_SSH_PORT & + else + echo "'sshd' not found in path. Not starting SSH server." + fi + ${GL_TOOLS_DIR}/init_tools.sh + SH + + container[:command] = %w[/bin/sh -c] + container[:args] = [container_args] + + nil end - private_class_method :update_main_container + private_class_method :update_env_vars, :update_endpoints, :override_command_and_args end end end -- GitLab