diff --git a/gdk.example.yml b/gdk.example.yml index b86e0ec1c884f4374fa5c506c6b99e29e6968626..a23b39b727ee0280e907477a0f9cfe2789802f90 100644 --- a/gdk.example.yml +++ b/gdk.example.yml @@ -446,6 +446,7 @@ vault: port: 8200 vite: enabled: false + hot_module_reloading: true port: 3038 webpack: allowed_hosts: [] diff --git a/lib/gdk/config.rb b/lib/gdk/config.rb index 1462e8489dd78ebfb6cd047cf9f97617cbad8521..ab653fcb1438929f09e5a57f12b53b596455737c 100644 --- a/lib/gdk/config.rb +++ b/lib/gdk/config.rb @@ -165,6 +165,7 @@ class Config < ConfigSettings settings :vite do bool(:enabled) { false } port(:port, 'vite') + bool(:hot_module_reloading) { true } bool(:__safe_enabled) do if config.vite? diff --git a/spec/lib/gdk/config_spec.rb b/spec/lib/gdk/config_spec.rb index f88166c4ac88a8cda0a7a1ff41c55b129a253534..ebbbc27c8b219f06adb9203d7410a6f4cf4ce3dd 100644 --- a/spec/lib/gdk/config_spec.rb +++ b/spec/lib/gdk/config_spec.rb @@ -1966,6 +1966,12 @@ end end + describe '#hot_module_reloading' do + it 'is enabled by default' do + expect(config.vite.hot_module_reloading?).to be true + end + end + describe '#__safe_enabled?' do it 'is false by default' do expect(config.vite.__safe_enabled?).to be false diff --git a/spec/support/templates/gitlab/config/vite.gdk.json.erb_spec.rb b/spec/support/templates/gitlab/config/vite.gdk.json.erb_spec.rb new file mode 100644 index 0000000000000000000000000000000000000000..7acf16c380f3c93f86d4802b2ddebcf978853c35 --- /dev/null +++ b/spec/support/templates/gitlab/config/vite.gdk.json.erb_spec.rb @@ -0,0 +1,89 @@ +# frozen_string_literal: true + +RSpec.describe 'support/templates/gitlab/config/vite.gdk.json.erb' do + let(:vite_settings) { {} } + let(:nginx_settings) { {} } + let(:yaml) do + { + 'hostname' => 'gdk.test', + 'vite' => vite_settings, + 'nginx' => nginx_settings, + 'webpack' => { + 'enabled' => false + } + } + end + + let(:source) { |example| example.example_group.top_level_description } + + before do + config = GDK::Config.new(yaml: yaml) + allow(GDK).to receive(:config).and_return(config) + end + + subject(:output) do + renderer = GDK::Templates::ErbRenderer.new(source) + JSON.parse(renderer.render_to_string) + end + + context 'with defaults' do + let(:vite_settings) { {} } + + it do + expect(output).to eq({ + 'enabled' => false, + 'host' => '127.0.0.1', + 'port' => 3038, + 'hmr' => { + 'clientPort' => 3038, + 'hostname' => 'gdk.test' + } + }) + end + end + + context 'with hot module reloading disabled' do + let(:vite_settings) { { 'enabled' => true, 'port' => 3011, 'hot_module_reloading' => false } } + + it 'sets hmr to nil' do + expect(output).to eq({ + 'enabled' => true, + 'host' => '127.0.0.1', + 'port' => 3011, + 'hmr' => nil + }) + end + end + + context 'when vite is enabled' do + let(:vite_settings) { { 'enabled' => true, 'port' => 3011 } } + + it do + expect(output).to eq({ + 'enabled' => true, + 'host' => '127.0.0.1', + 'port' => 3011, + 'hmr' => { + 'clientPort' => 3011, + 'hostname' => 'gdk.test' + } + }) + end + + context 'and nginx is enabled' do + let(:nginx_settings) { { 'enabled' => true } } + + it 'sets the nginx port in hash' do + expect(output).to eq({ + 'enabled' => true, + 'host' => '127.0.0.1', + 'port' => 3011, + 'hmr' => { + 'clientPort' => 3000, + 'hostname' => 'gdk.test' + } + }) + end + end + end +end diff --git a/support/templates/gitlab/config/vite.gdk.json.erb b/support/templates/gitlab/config/vite.gdk.json.erb index 8900b2f188abf0b7c4722e80e6cf26692ce37726..593bc179f612864a7f74acaf0e3785ad95a22b95 100644 --- a/support/templates/gitlab/config/vite.gdk.json.erb +++ b/support/templates/gitlab/config/vite.gdk.json.erb @@ -1 +1,19 @@ -<%= JSON.pretty_generate({ enabled: config.vite.__safe_enabled?, port: config.vite.port }) %> +<% hmr = + ( + if config.vite.hot_module_reloading? + { + clientPort: (config.nginx? ? config.port : config.vite.port), + hostname: config.hostname, + } + else + nil + end + ) -%> +<%= JSON.pretty_generate( + { + enabled: config.vite.__safe_enabled?, + host: config.listen_address, + port: config.vite.port, + hmr: hmr, + }, +) %> diff --git a/support/templates/nginx/conf/nginx.conf.erb b/support/templates/nginx/conf/nginx.conf.erb index 5b34997fdc67ccd0556a78415b02adf2a0a78d3c..e5a35217fe5e999c22d094dfd1e62ea744dd6b2a 100644 --- a/support/templates/nginx/conf/nginx.conf.erb +++ b/support/templates/nginx/conf/nginx.conf.erb @@ -90,12 +90,16 @@ http { proxy_request_buffering off; } -<%- if config.webpack.live_reload? -%> - +<%- if config.webpack? && config.webpack.live_reload? -%> location /_hmr/ { proxy_pass http://<%= config.webpack.host %>:<%= config.webpack.port %>/ws; } +<%- end -%> +<%- if config.vite? && config.vite.hot_module_reloading? -%> + location /vite-dev/ { + proxy_pass http://<%= config.listen_address %>:<%= config.vite.port %>/vite-dev/; + } <%- end -%> location / {