feat(setup): add imageBuilt status to Docker dependency check

Add imageBuilt field to DependencyStatus struct to track whether the
wails-cross Docker image exists. This allows the OOBE flow to properly
detect when Docker is installed but the cross-compilation image hasn't
been built yet, and prompt users to set up cross-platform builds.

Also moves the Docker build progress indicator to the center of the
footer for better visual placement.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
Lea Anthony 2025-12-10 16:20:10 +11:00
commit ee6530e48b
12 changed files with 1037 additions and 1110 deletions

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -7,8 +7,8 @@
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700;800&display=swap" rel="stylesheet">
<script type="module" crossorigin src="/assets/index-CZ5wFxc6.js"></script>
<link rel="stylesheet" crossorigin href="/assets/index-Bmci9vCI.css">
<script type="module" crossorigin src="/assets/index-B3e89ulo.js"></script>
<link rel="stylesheet" crossorigin href="/assets/index-uKyTD00T.css">
</head>
<body>
<div id="root"></div>

File diff suppressed because one or more lines are too long

View file

@ -134,9 +134,9 @@ html, body, #root {
animation: scrollBackground 60s linear infinite;
}
/* Reduced motion support */
/* Reduced motion support - but preserve loading spinners */
@media (prefers-reduced-motion: reduce) {
*, *::before, *::after {
*:not(.animate-spin):not(.spinner), *:not(.animate-spin):not(.spinner)::before, *:not(.animate-spin):not(.spinner)::after {
animation-duration: 0.01ms !important;
animation-iteration-count: 1 !important;
transition-duration: 0.01ms !important;

View file

@ -8,6 +8,7 @@ export interface DependencyStatus {
message?: string;
installCommand?: string;
helpUrl?: string;
imageBuilt?: boolean; // For Docker: whether wails-cross image exists
}
export interface DockerStatus {

View file

@ -38,6 +38,7 @@ type DependencyStatus struct {
Message string `json:"message,omitempty"`
InstallCommand string `json:"installCommand,omitempty"`
HelpURL string `json:"helpUrl,omitempty"`
ImageBuilt bool `json:"imageBuilt"` // For Docker: whether wails-cross image exists
}
// DockerStatus represents Docker installation and image status

View file

@ -120,14 +120,17 @@ func checkDocker() DependencyStatus {
}
// Check for wails-cross image
// docker image inspect returns "[]" (empty JSON array) on stdout when image doesn't exist
imageCheck, _ := execCommand("docker", "image", "inspect", "wails-cross")
if imageCheck == "" || strings.Contains(imageCheck, "Error") {
if imageCheck == "" || imageCheck == "[]" || strings.Contains(imageCheck, "Error") {
dep.Installed = true
dep.Status = "installed"
dep.ImageBuilt = false
dep.Message = "wails-cross image not built"
} else {
dep.Installed = true
dep.Status = "installed"
dep.ImageBuilt = true
dep.Message = "Cross-compilation ready"
}

View file

@ -124,14 +124,17 @@ func checkDocker() DependencyStatus {
}
// Check for wails-cross image
// docker image inspect returns "[]" (empty JSON array) on stdout when image doesn't exist
imageCheck, _ := execCommand("docker", "image", "inspect", "wails-cross")
if imageCheck == "" || strings.Contains(imageCheck, "Error") {
if imageCheck == "" || imageCheck == "[]" || strings.Contains(imageCheck, "Error") {
dep.Installed = true
dep.Status = "installed"
dep.ImageBuilt = false
dep.Message = "Run 'wails3 task setup:docker' to build cross-compilation image"
} else {
dep.Installed = true
dep.Status = "installed"
dep.ImageBuilt = true
dep.Message = "Cross-compilation ready"
}

View file

@ -127,14 +127,17 @@ func checkDocker() DependencyStatus {
}
// Check for wails-cross image
// docker image inspect returns "[]" (empty JSON array) on stdout when image doesn't exist
imageCheck, _ := execCommand("docker", "image", "inspect", "wails-cross")
if imageCheck == "" || strings.Contains(imageCheck, "Error") {
if imageCheck == "" || imageCheck == "[]" || strings.Contains(imageCheck, "Error") {
dep.Installed = true
dep.Status = "installed"
dep.ImageBuilt = false
dep.Message = "wails-cross image not built"
} else {
dep.Installed = true
dep.Status = "installed"
dep.ImageBuilt = true
dep.Message = "Cross-compilation ready"
}