Initial deployment suite for X9.cz MSP Windows 10/11 deployment: - PowerShell scripts 00-11: admin account, bloatware removal, software (winget+Atera), system registry tweaks, default profile, personalization, scheduled tasks, BackInfo desktop info, Windows activation, PC identity/rename, network, Dell Update - Web platform: xetup.x9.cz (nginx), spec/annotation page, /dl shortlink, GitHub mirror - Forgejo Actions CI: auto-build xetup.exe on push, publish to releases/latest - Go xetup.exe: embeds all scripts/assets, per-feature checkboxes, load/save config
63 lines
1.9 KiB
Go
63 lines
1.9 KiB
Go
// Command xetup is the GUI launcher for Windows deployment.
|
||
//
|
||
// All PowerShell scripts and assets are embedded in the binary and extracted
|
||
// to a temp directory at runtime. The GUI collects configuration, streams
|
||
// live log output while the scripts run, and shows a final summary.
|
||
//
|
||
// Cross-compile for Windows (requires MinGW):
|
||
//
|
||
// CGO_ENABLED=1 CC=x86_64-w64-mingw32-gcc \
|
||
// GOOS=windows GOARCH=amd64 \
|
||
// go build -ldflags="-s -w -H windowsgui" -o xetup.exe ./cmd/xetup
|
||
package main
|
||
|
||
import (
|
||
"fmt"
|
||
"log"
|
||
"os"
|
||
"path/filepath"
|
||
|
||
xetupembed "git.xetup.x9.cz/x9/xetup"
|
||
"git.xetup.x9.cz/x9/xetup/internal/config"
|
||
"git.xetup.x9.cz/x9/xetup/internal/gui"
|
||
"git.xetup.x9.cz/x9/xetup/internal/runner"
|
||
)
|
||
|
||
func main() {
|
||
// Load config (falls back to defaults when config.json is missing)
|
||
cfgPath := config.ConfigPath()
|
||
cfg, err := config.Load(cfgPath)
|
||
if err != nil {
|
||
fmt.Fprintf(os.Stderr, "Warning: config load failed (%v), using defaults\n", err)
|
||
}
|
||
|
||
// Temp working directory – cleaned up on exit
|
||
tmpDir, err := os.MkdirTemp("", "xetup-*")
|
||
if err != nil {
|
||
log.Fatalf("Cannot create temp dir: %v", err)
|
||
}
|
||
defer os.RemoveAll(tmpDir)
|
||
|
||
// Extract embedded scripts and assets
|
||
if err := runner.ExtractScripts(xetupembed.Scripts, tmpDir); err != nil {
|
||
log.Fatalf("Failed to extract scripts: %v", err)
|
||
}
|
||
if err := runner.ExtractAssets(xetupembed.Assets, tmpDir); err != nil {
|
||
log.Fatalf("Failed to extract assets: %v", err)
|
||
}
|
||
|
||
// Write runtime config JSON so PowerShell scripts can read it
|
||
cfgRuntimePath, err := runner.WriteConfig(cfg, tmpDir)
|
||
if err != nil {
|
||
log.Fatalf("Failed to write runtime config: %v", err)
|
||
}
|
||
|
||
runCfg := runner.RunConfig{
|
||
ScriptsDir: filepath.Join(tmpDir, "scripts"),
|
||
ConfigPath: cfgRuntimePath,
|
||
LogFile: `C:\Windows\Setup\Scripts\Deploy.log`,
|
||
ProfileType: cfg.Deployment.ProfileType,
|
||
}
|
||
|
||
gui.Run(cfg, runCfg, cfgPath)
|
||
}
|