From c19a1c755ee7e731071932c8884c2f48ecf3e432 Mon Sep 17 00:00:00 2001 From: Haitao Pan Date: Mon, 8 Jun 2026 15:52:21 +0800 Subject: [PATCH] Harden workspace prechecks --- .../workspace_provision_controller.dart | 6 ++++ .../workspace_management_unit_test.dart | 28 +++++++++++++++++++ 2 files changed, 34 insertions(+) diff --git a/lib/features/workspace_management/workspace_provision_controller.dart b/lib/features/workspace_management/workspace_provision_controller.dart index 4daced08..6d13c318 100644 --- a/lib/features/workspace_management/workspace_provision_controller.dart +++ b/lib/features/workspace_management/workspace_provision_controller.dart @@ -265,6 +265,12 @@ class WorkspaceProvisionController extends ChangeNotifier { if (info == null) { return null; } + if (!info.os.toLowerCase().contains('ubuntu')) { + return appText( + '当前仅支持 Ubuntu 20.04 / 22.04 / 24.04,检测到 ${info.os}。', + 'Only Ubuntu 20.04 / 22.04 / 24.04 is supported. Detected: ${info.os}.', + ); + } if (!info.dnsResolved) { return appText( '部署前需要先把 ${workspaceDomain.trim()} 做好 DNS 解析。', diff --git a/test/features/workspace_management/workspace_management_unit_test.dart b/test/features/workspace_management/workspace_management_unit_test.dart index c04054e9..d7dbb36b 100644 --- a/test/features/workspace_management/workspace_management_unit_test.dart +++ b/test/features/workspace_management/workspace_management_unit_test.dart @@ -190,6 +190,34 @@ PORT_443_OPEN=yes contains('443'), ); }); + + test('precheck blocks unsupported non-Ubuntu systems', () async { + final controller = WorkspaceProvisionController(executor: _FakeSshExecutor()); + addTearDown(controller.dispose); + controller.updateForm( + serverAddress: '203.0.113.10', + workspaceDomain: 'xworkmate-bridge.example.com', + sshKeyContent: 'key', + ); + controller.serverInfo = const ServerInfo( + os: 'Debian GNU/Linux 11 (bullseye)', + arch: 'x86_64', + sudoAvailable: true, + dockerVersion: 'missing', + systemdVersion: 'systemd 249', + caddyVersion: 'missing', + ansibleVersion: 'ansible [core 2.14]', + gitVersion: 'git version 2.34.1', + dnsAddressCount: 1, + port443ListenerCount: 0, + port443Open: true, + ); + + expect( + controller.validatePrecheckBlockingIssue(), + contains('Ubuntu'), + ); + }); }); }