Compare commits

..

9 Commits

Author SHA1 Message Date
d09892595c Merge branch 'main' of https://gitea.innovedus.com/warrenchen/web_academy_prototype 2026-03-09 17:13:46 +08:00
8d14133793 Merge branch 'main' of https://gitea.innovedus.com/warrenchen/web_academy_prototype 2026-03-07 05:40:46 +08:00
5cf9764c4d merge: resolve frontend submodule conflict, keep as normal directory
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-07 05:26:28 +08:00
fbbb8614c0 fix: move CI workflow to repo root and update paths
Gitea Actions requires .gitea/workflows/ at repo root.
Updated all paths to use edge-ai-platform/ prefix.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-07 03:50:14 +08:00
336eba8999 restore: add back local_service_win to repo root
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-07 03:15:45 +08:00
dd8d9b0ce2 refactor: reorganize repo — move edge-ai-platform to subdirectory
- Move all Edge AI Platform code into edge-ai-platform/ subdirectory
- Remove legacy local_service_win/ and relay-server-linux binary
- Keep docs/ and README.md at repo root
- Update docs to latest PRD v3.1 and TDD v2.0

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-07 02:41:24 +08:00
c326e228a1 merge: bring master into main
Merge installer improvements, CI workflow, and full frontend codebase.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

# Conflicts:
#	README.md
2026-03-07 02:28:56 +08:00
bf2f01d2f3 feat: installer improvements + CI workflow
- Auto-generate random relay token during installation
- Pre-fill relay URL and dashboard URL with EC2 defaults
- Fix hardware detection duplicate device parsing
- Add Dashboard URL field to relay config step
- Launch Server now auto-opens dashboard URL with token
- Add ad-hoc codesign to Makefile installer target
- Remove binary from git tracking
- Add Gitea Actions CI workflow for macOS + Windows builds

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-07 02:12:25 +08:00
8e836e6fda initial 2026-03-06 17:33:30 +08:00

View File

@ -200,21 +200,20 @@ func (inst *Installer) StartInstall(config InstallConfig) error {
func (inst *Installer) runInstall(config InstallConfig) {
steps := []struct {
name string
percent float64
critical bool // if true, abort installation on failure
fn func(config InstallConfig) error
name string
percent float64
fn func(config InstallConfig) error
}{
{"Creating installation directory", 5, true, inst.stepCreateDir},
{"Extracting server binary", 10, true, inst.stepExtractBinary},
{"Extracting models and firmware", 30, true, inst.stepExtractData},
{"Extracting scripts", 48, true, inst.stepExtractScripts},
{"Configuring system", 55, false, inst.stepConfigureSystem},
{"Setting up USB driver", 62, false, inst.stepSetupLibusb},
{"Setting up Python environment", 72, false, inst.stepSetupPython},
{"Writing configuration", 85, true, inst.stepWriteConfig},
{"Verifying installation", 90, false, inst.stepVerify},
{"Setting up auto-start launcher", 95, false, inst.stepAutoRestart},
{"Creating installation directory", 5, inst.stepCreateDir},
{"Extracting server binary", 10, inst.stepExtractBinary},
{"Extracting models and firmware", 30, inst.stepExtractData},
{"Extracting scripts", 48, inst.stepExtractScripts},
{"Configuring system", 55, inst.stepConfigureSystem},
{"Setting up USB driver", 62, inst.stepSetupLibusb},
{"Setting up Python environment", 72, inst.stepSetupPython},
{"Writing configuration", 85, inst.stepWriteConfig},
{"Verifying installation", 90, inst.stepVerify},
{"Setting up auto-start launcher", 95, inst.stepAutoRestart},
}
for _, step := range steps {
@ -225,21 +224,13 @@ func (inst *Installer) runInstall(config InstallConfig) {
})
if err := step.fn(config); err != nil {
if step.critical {
inst.emitProgress(ProgressEvent{
Step: step.name,
Message: fmt.Sprintf("Error: %s — %s", step.name, err),
Percent: step.percent,
IsError: true,
})
return // abort installation
}
inst.emitProgress(ProgressEvent{
Step: step.name,
Message: fmt.Sprintf("Warning: %s — %s (skipped)", step.name, err),
Message: fmt.Sprintf("Warning: %s — %s", step.name, err),
Percent: step.percent,
IsError: true,
})
// Non-critical steps continue; critical ones are handled inside
}
}