Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -122,16 +122,16 @@ jobs:

- uses: oven-sh/setup-bun@v2

- name: Install Wails CLI
run: go install github.com/wailsapp/wails/v2/cmd/wails@latest
- name: Install Wails v3 CLI
run: go install github.com/wailsapp/wails/v3/cmd/wails3@latest

- name: Install frontend dependencies
working-directory: gui
run: bun install --cwd frontend

- name: Build GUI
working-directory: gui
run: wails build -nsis -o Skell-windows-amd64.exe
run: wails3 build

- name: Upload GUI artifact
uses: actions/upload-artifact@v7
Expand Down
12 changes: 6 additions & 6 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -50,16 +50,16 @@ jobs:

- uses: oven-sh/setup-bun@v2

- name: Install Wails CLI
run: go install github.com/wailsapp/wails/v2/cmd/wails@latest
- name: Install Wails v3 CLI
run: go install github.com/wailsapp/wails/v3/cmd/wails3@latest

- name: Install frontend dependencies
working-directory: gui
run: bun install --cwd frontend

- name: Build GUI
working-directory: gui
run: wails build -o Skell-windows-amd64.exe
run: wails3 build -o Skell-windows-amd64.exe

- name: Build bundled Windows package
shell: pwsh
Expand Down Expand Up @@ -117,16 +117,16 @@ jobs:

- uses: oven-sh/setup-bun@v2

- name: Install Wails CLI
run: go install github.com/wailsapp/wails/v2/cmd/wails@latest
- name: Install Wails v3 CLI
run: go install github.com/wailsapp/wails/v3/cmd/wails3@latest

- name: Install frontend dependencies
working-directory: gui
run: bun install --cwd frontend

- name: Build GUI
working-directory: gui
run: wails build -platform darwin/${{ matrix.arch }}
run: wails3 build -platform darwin/${{ matrix.arch }}

- name: Zip Skell.app
id: zipapp
Expand Down
11 changes: 11 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -58,8 +58,19 @@ gui/frontend/.playwright/

# Wails build outputs
gui/build/bin/
gui/build/appicon.icon/
gui/build/docker/
gui/build/darwin/Assets.car
gui/build/darwin/icons.icns
gui/build/windows/msix/
gui/build/windows/nsis/
gui/build/windows/icon.ico
gui/frontend/wailsjs/

# Wails dev artifacts
gui/node_modules/
gui/.task/

# Bun
# bun.lock is intentionally committed (lockfile)

Expand Down
63 changes: 63 additions & 0 deletions gui/Taskfile.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
version: '3'

vars:
APP_NAME: "tempapp"
BIN_DIR: "bin"
PACKAGE_MANAGER: '{{.PACKAGE_MANAGER | default "npm"}}'
VITE_PORT: '{{.WAILS_VITE_PORT | default 9245}}'
# Target OS for build/package/run. Defaults to the host OS, and is overridden
# by `wails3 build GOOS=...` (or the GOOS env var) for cross-compilation. The
# tasks below dispatch to the matching platform Taskfile via this variable.
GOOS: '{{.GOOS | default OS}}'

includes:
common: ./build/Taskfile.yml
windows: ./build/windows/Taskfile.yml
darwin: ./build/darwin/Taskfile.yml
linux: ./build/linux/Taskfile.yml

tasks:
build:
summary: Builds the application
cmds:
- task: "{{.GOOS}}:build"

package:
summary: Packages a production build of the application
cmds:
- task: "{{.GOOS}}:package"

run:
summary: Runs the application
cmds:
- task: "{{.GOOS}}:run"

dev:
summary: Runs the application in development mode
cmds:
- wails3 dev -config ./build/config.yml -port {{.VITE_PORT}}

setup:docker:
summary: Builds Docker image for cross-compilation (~800MB download)
cmds:
- task: common:setup:docker

build:server:
summary: Builds the application in server mode (no GUI, HTTP server only)
cmds:
- task: common:build:server

run:server:
summary: Runs the application in server mode
cmds:
- task: common:run:server

build:docker:
summary: Builds a Docker image for server mode deployment
cmds:
- task: common:build:docker

run:docker:
summary: Builds and runs the Docker image
cmds:
- task: common:run:docker
15 changes: 14 additions & 1 deletion gui/app.go
Original file line number Diff line number Diff line change
Expand Up @@ -309,13 +309,26 @@ func (a *App) RunSkell(args []string) SkellResult {
}
}

cmd := exec.Command(bin, args...) //nolint:gosec // args come from trusted frontend
// Each skell invocation is given a generous timeout to prevent a hung CLI
// process from blocking the GUI event loop indefinitely. The timeout is
// chosen to accommodate slow network operations (git clone, large syncs)
// while still providing a safety net.
ctx, cancel := context.WithTimeout(context.Background(), 5*time.Minute)
defer cancel()

cmd := exec.CommandContext(ctx, bin, args...) //nolint:gosec // args come from trusted frontend
hideConsoleWindow(cmd)
var stdout, stderr strings.Builder
cmd.Stdout = &stdout
cmd.Stderr = &stderr

err = cmd.Run()
if ctx.Err() != nil {
return SkellResult{
Stderr: fmt.Sprintf("skell command timed out after %v: %s", 5*time.Minute, ctx.Err()),
Success: false,
}
}
return SkellResult{
Stdout: stdout.String(),
Stderr: stderr.String(),
Expand Down
Loading
Loading