chore: add wails.json, remove wails3 artifacts, rebuild binaries
- Add wails.json for Wails v2 build - Remove wails3 boilerplate (build/Taskfile.yml, build/config.yml, etc.) - Add server-data/ to .gitignore - Rebuild frontend-dist and GUI binary
This commit is contained in:
parent
7b2a1da529
commit
49c0fda61c
|
|
@ -41,3 +41,4 @@ Thumbs.db
|
||||||
|
|
||||||
# Vault test data
|
# Vault test data
|
||||||
test-vault/
|
test-vault/
|
||||||
|
server-data/
|
||||||
|
|
|
||||||
|
|
@ -1,355 +0,0 @@
|
||||||
version: '3'
|
|
||||||
|
|
||||||
tasks:
|
|
||||||
go:mod:tidy:
|
|
||||||
summary: Runs `go mod tidy`
|
|
||||||
internal: true
|
|
||||||
cmds:
|
|
||||||
- go mod tidy
|
|
||||||
|
|
||||||
install:frontend:deps:
|
|
||||||
summary: Install frontend dependencies
|
|
||||||
cmds:
|
|
||||||
- task: install:frontend:deps:{{.PACKAGE_MANAGER}}
|
|
||||||
|
|
||||||
install:frontend:deps:npm:
|
|
||||||
dir: frontend
|
|
||||||
sources:
|
|
||||||
- package.json
|
|
||||||
- package-lock.json
|
|
||||||
generates:
|
|
||||||
- node_modules
|
|
||||||
preconditions:
|
|
||||||
- sh: npm version
|
|
||||||
msg: "Looks like npm isn't installed. Npm is part of the Node installer: https://nodejs.org/en/download/"
|
|
||||||
cmds:
|
|
||||||
- npm install
|
|
||||||
|
|
||||||
install:frontend:deps:bun:
|
|
||||||
dir: frontend
|
|
||||||
sources:
|
|
||||||
- package.json
|
|
||||||
- bun.lock
|
|
||||||
- bun.lockb
|
|
||||||
generates:
|
|
||||||
- node_modules
|
|
||||||
preconditions:
|
|
||||||
- sh: bun --version
|
|
||||||
msg: "bun not found"
|
|
||||||
cmds:
|
|
||||||
- bun install
|
|
||||||
|
|
||||||
install:frontend:deps:pnpm:
|
|
||||||
dir: frontend
|
|
||||||
sources:
|
|
||||||
- package.json
|
|
||||||
- pnpm-lock.yaml
|
|
||||||
generates:
|
|
||||||
- node_modules
|
|
||||||
preconditions:
|
|
||||||
- sh: pnpm --version
|
|
||||||
msg: "pnpm not found"
|
|
||||||
cmds:
|
|
||||||
- pnpm install
|
|
||||||
|
|
||||||
install:frontend:deps:yarn:
|
|
||||||
dir: frontend
|
|
||||||
sources:
|
|
||||||
- package.json
|
|
||||||
- yarn.lock
|
|
||||||
status:
|
|
||||||
- test -d node_modules || test -f .pnp.cjs
|
|
||||||
preconditions:
|
|
||||||
- sh: yarn --version
|
|
||||||
msg: "yarn not found"
|
|
||||||
cmds:
|
|
||||||
- yarn install
|
|
||||||
|
|
||||||
build:frontend:
|
|
||||||
label: build:frontend (DEV={{.DEV}} RUNNER={{.PACKAGE_MANAGER}})
|
|
||||||
summary: Build the frontend project
|
|
||||||
dir: frontend
|
|
||||||
sources:
|
|
||||||
- "**/*"
|
|
||||||
- exclude: node_modules/**/*
|
|
||||||
generates:
|
|
||||||
- dist/**/*
|
|
||||||
deps:
|
|
||||||
- task: install:frontend:deps
|
|
||||||
- task: generate:bindings
|
|
||||||
vars:
|
|
||||||
BUILD_FLAGS:
|
|
||||||
ref: .BUILD_FLAGS
|
|
||||||
OBFUSCATED:
|
|
||||||
ref: .OBFUSCATED
|
|
||||||
cmds:
|
|
||||||
- task: frontend:run
|
|
||||||
vars:
|
|
||||||
SCRIPT: '{{if eq .DEV "true"}}build:dev{{else}}build{{end}}'
|
|
||||||
env:
|
|
||||||
PRODUCTION: '{{if eq .DEV "true"}}false{{else}}true{{end}}'
|
|
||||||
|
|
||||||
frontend:run:
|
|
||||||
summary: Run a frontend script with selected runner
|
|
||||||
cmds:
|
|
||||||
- task: frontend:run:{{.PACKAGE_MANAGER}}
|
|
||||||
vars:
|
|
||||||
SCRIPT: "{{.SCRIPT}}"
|
|
||||||
vars:
|
|
||||||
SCRIPT: "{{.SCRIPT}}"
|
|
||||||
|
|
||||||
frontend:run:npm:
|
|
||||||
dir: frontend
|
|
||||||
cmds:
|
|
||||||
- npm run {{.SCRIPT}} -q
|
|
||||||
vars:
|
|
||||||
SCRIPT: "{{.SCRIPT}}"
|
|
||||||
|
|
||||||
frontend:run:yarn:
|
|
||||||
dir: frontend
|
|
||||||
cmds:
|
|
||||||
- yarn {{.SCRIPT}}
|
|
||||||
vars:
|
|
||||||
SCRIPT: "{{.SCRIPT}}"
|
|
||||||
|
|
||||||
frontend:run:pnpm:
|
|
||||||
dir: frontend
|
|
||||||
cmds:
|
|
||||||
- pnpm run {{.SCRIPT}}
|
|
||||||
vars:
|
|
||||||
SCRIPT: "{{.SCRIPT}}"
|
|
||||||
|
|
||||||
frontend:run:bun:
|
|
||||||
dir: frontend
|
|
||||||
cmds:
|
|
||||||
- bun run {{.SCRIPT}}
|
|
||||||
vars:
|
|
||||||
SCRIPT: "{{.SCRIPT}}"
|
|
||||||
|
|
||||||
frontend:vendor:puppertino:
|
|
||||||
summary: Fetches Puppertino CSS into frontend/public for consistent mobile styling
|
|
||||||
sources:
|
|
||||||
- frontend/public/puppertino/puppertino.css
|
|
||||||
generates:
|
|
||||||
- frontend/public/puppertino/puppertino.css
|
|
||||||
cmds:
|
|
||||||
- |
|
|
||||||
set -euo pipefail
|
|
||||||
mkdir -p frontend/public/puppertino
|
|
||||||
# If bundled Puppertino exists, prefer it. Otherwise, try to fetch, but don't fail build on error.
|
|
||||||
if [ ! -f frontend/public/puppertino/puppertino.css ]; then
|
|
||||||
echo "No bundled Puppertino found. Attempting to fetch from GitHub..."
|
|
||||||
if curl -fsSL https://raw.githubusercontent.com/codedgar/Puppertino/main/dist/css/full.css -o frontend/public/puppertino/puppertino.css; then
|
|
||||||
curl -fsSL https://raw.githubusercontent.com/codedgar/Puppertino/main/LICENSE -o frontend/public/puppertino/LICENSE || true
|
|
||||||
echo "Puppertino CSS downloaded to frontend/public/puppertino/puppertino.css"
|
|
||||||
else
|
|
||||||
echo "Warning: Could not fetch Puppertino CSS. Proceeding without download since template may bundle it."
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
echo "Using bundled Puppertino at frontend/public/puppertino/puppertino.css"
|
|
||||||
fi
|
|
||||||
# Ensure index.html includes Puppertino CSS and button classes
|
|
||||||
INDEX_HTML=frontend/index.html
|
|
||||||
if [ -f "$INDEX_HTML" ]; then
|
|
||||||
if ! grep -q 'href="/puppertino/puppertino.css"' "$INDEX_HTML"; then
|
|
||||||
# Insert Puppertino link tag after style.css link
|
|
||||||
awk '
|
|
||||||
/href="\/style.css"\/?/ && !x { print; print " <link rel=\"stylesheet\" href=\"/puppertino/puppertino.css\"/>"; x=1; next }1
|
|
||||||
' "$INDEX_HTML" > "$INDEX_HTML.tmp" && mv "$INDEX_HTML.tmp" "$INDEX_HTML"
|
|
||||||
fi
|
|
||||||
# Replace default .btn with Puppertino primary button classes if present
|
|
||||||
sed -E -i'' 's/class=\"btn\"/class=\"p-btn p-prim-col\"/g' "$INDEX_HTML" || true
|
|
||||||
fi
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
generate:bindings:
|
|
||||||
label: generate:bindings (BUILD_FLAGS={{.BUILD_FLAGS}})
|
|
||||||
summary: Generates bindings for the frontend
|
|
||||||
deps:
|
|
||||||
- task: go:mod:tidy
|
|
||||||
sources:
|
|
||||||
- "**/*.[jt]s"
|
|
||||||
- exclude: frontend/**/*
|
|
||||||
- frontend/bindings/**/* # Rerun when switching between dev/production mode causes changes in output
|
|
||||||
- "**/*.go"
|
|
||||||
- go.mod
|
|
||||||
- go.sum
|
|
||||||
generates:
|
|
||||||
- frontend/bindings/**/*
|
|
||||||
cmds:
|
|
||||||
- wails3 generate bindings -f '{{.BUILD_FLAGS}}' -clean=true{{if eq .OBFUSCATED "true"}} -obfuscated{{end}}
|
|
||||||
|
|
||||||
generate:icons:
|
|
||||||
summary: Generates Windows `.ico` and Mac `.icns` from an image; on macOS, `-iconcomposerinput appicon.icon -macassetdir darwin` also produces `Assets.car` from a `.icon` file (skipped on other platforms).
|
|
||||||
dir: build
|
|
||||||
sources:
|
|
||||||
- "appicon.png"
|
|
||||||
- "appicon.icon"
|
|
||||||
generates:
|
|
||||||
- "darwin/icons.icns"
|
|
||||||
- "windows/icon.ico"
|
|
||||||
cmds:
|
|
||||||
- wails3 generate icons -input appicon.png -macfilename darwin/icons.icns -windowsfilename windows/icon.ico -iconcomposerinput appicon.icon -macassetdir darwin
|
|
||||||
|
|
||||||
dev:frontend:
|
|
||||||
summary: Runs the frontend in development mode
|
|
||||||
deps:
|
|
||||||
- task: install:frontend:deps
|
|
||||||
cmds:
|
|
||||||
- task: frontend:dev:{{.PACKAGE_MANAGER}}
|
|
||||||
|
|
||||||
frontend:dev:npm:
|
|
||||||
dir: frontend
|
|
||||||
cmds:
|
|
||||||
- npm run dev -- --port {{.VITE_PORT}} --strictPort
|
|
||||||
|
|
||||||
frontend:dev:yarn:
|
|
||||||
dir: frontend
|
|
||||||
cmds:
|
|
||||||
- yarn dev --port {{.VITE_PORT}} --strictPort
|
|
||||||
|
|
||||||
frontend:dev:pnpm:
|
|
||||||
dir: frontend
|
|
||||||
cmds:
|
|
||||||
- pnpm dev --port {{.VITE_PORT}} --strictPort
|
|
||||||
|
|
||||||
frontend:dev:bun:
|
|
||||||
dir: frontend
|
|
||||||
cmds:
|
|
||||||
- bun run dev --port {{.VITE_PORT}} --strictPort
|
|
||||||
|
|
||||||
update:build-assets:
|
|
||||||
summary: Updates the build assets
|
|
||||||
dir: build
|
|
||||||
cmds:
|
|
||||||
- wails3 update build-assets -name "{{.APP_NAME}}" -binaryname "{{.APP_NAME}}" -config config.yml -dir .
|
|
||||||
|
|
||||||
build:server:
|
|
||||||
summary: Builds the application in server mode (no GUI, HTTP server only)
|
|
||||||
desc: |
|
|
||||||
Builds the application with the server build tag enabled.
|
|
||||||
Server mode runs as a pure HTTP server without native GUI dependencies.
|
|
||||||
Usage: task build:server
|
|
||||||
deps:
|
|
||||||
- task: build:frontend
|
|
||||||
vars:
|
|
||||||
BUILD_FLAGS:
|
|
||||||
ref: .BUILD_FLAGS
|
|
||||||
cmds:
|
|
||||||
- go build -tags server {{.BUILD_FLAGS}} -o {{.BIN_DIR}}/{{.APP_NAME}}-server{{exeExt}}
|
|
||||||
vars:
|
|
||||||
BUILD_FLAGS: "{{.BUILD_FLAGS}}"
|
|
||||||
|
|
||||||
run:server:
|
|
||||||
summary: Builds and runs the application in server mode
|
|
||||||
deps:
|
|
||||||
- task: build:server
|
|
||||||
cmds:
|
|
||||||
- ./{{.BIN_DIR}}/{{.APP_NAME}}-server{{exeExt}}
|
|
||||||
|
|
||||||
build:docker:
|
|
||||||
summary: Builds a Docker image for server mode deployment
|
|
||||||
desc: |
|
|
||||||
Creates a minimal Docker image containing the server mode binary.
|
|
||||||
The image is based on distroless for security and small size.
|
|
||||||
Usage: task build:docker [TAG=myapp:latest]
|
|
||||||
cmds:
|
|
||||||
- docker build -t {{.TAG | default (printf "%s:latest" .APP_NAME)}} -f build/docker/Dockerfile.server .
|
|
||||||
vars:
|
|
||||||
TAG: "{{.TAG}}"
|
|
||||||
preconditions:
|
|
||||||
- sh: docker info > /dev/null 2>&1
|
|
||||||
msg: "Docker is required. Please install Docker first."
|
|
||||||
- sh: test -f build/docker/Dockerfile.server
|
|
||||||
msg: "Dockerfile.server not found. Run 'wails3 update build-assets' to generate it."
|
|
||||||
|
|
||||||
run:docker:
|
|
||||||
summary: Builds and runs the Docker image
|
|
||||||
desc: |
|
|
||||||
Builds the Docker image and runs it, exposing port 8080.
|
|
||||||
Usage: task run:docker [TAG=myapp:latest] [PORT=8080]
|
|
||||||
Note: The internal container port is always 8080. The PORT variable
|
|
||||||
only changes the host port mapping. Ensure your app uses port 8080
|
|
||||||
or modify the Dockerfile to match your ServerOptions.Port setting.
|
|
||||||
deps:
|
|
||||||
- task: build:docker
|
|
||||||
vars:
|
|
||||||
TAG:
|
|
||||||
ref: .TAG
|
|
||||||
cmds:
|
|
||||||
- docker run --rm -p {{.PORT | default "8080"}}:8080 {{.TAG | default (printf "%s:latest" .APP_NAME)}}
|
|
||||||
vars:
|
|
||||||
TAG: "{{.TAG}}"
|
|
||||||
PORT: "{{.PORT}}"
|
|
||||||
|
|
||||||
setup:docker:
|
|
||||||
summary: Builds Docker image for cross-compilation (~800MB download)
|
|
||||||
desc: |
|
|
||||||
Builds the Docker image needed for cross-compiling to any platform.
|
|
||||||
Run this once to enable cross-platform builds from any OS.
|
|
||||||
cmds:
|
|
||||||
- docker build -t wails-cross -f build/docker/Dockerfile.cross build/docker/
|
|
||||||
preconditions:
|
|
||||||
- sh: docker info > /dev/null 2>&1
|
|
||||||
msg: "Docker is required. Please install Docker first."
|
|
||||||
|
|
||||||
ios:device:list:
|
|
||||||
summary: Lists connected iOS devices (UDIDs)
|
|
||||||
cmds:
|
|
||||||
- xcrun xcdevice list
|
|
||||||
|
|
||||||
ios:run:device:
|
|
||||||
summary: Build, install, and launch on a physical iPhone using Apple tools (xcodebuild/devicectl)
|
|
||||||
vars:
|
|
||||||
PROJECT: '{{.PROJECT}}' # e.g., build/ios/xcode/<YourProject>.xcodeproj
|
|
||||||
SCHEME: '{{.SCHEME}}' # e.g., ios.dev
|
|
||||||
CONFIG: '{{.CONFIG | default "Debug"}}'
|
|
||||||
DERIVED: '{{.DERIVED | default "build/ios/DerivedData"}}'
|
|
||||||
UDID: '{{.UDID}}' # from `task ios:device:list`
|
|
||||||
BUNDLE_ID: '{{.BUNDLE_ID}}' # e.g., com.yourco.wails.ios.dev
|
|
||||||
TEAM_ID: '{{.TEAM_ID}}' # optional, if your project is not already set up for signing
|
|
||||||
preconditions:
|
|
||||||
- sh: xcrun -f xcodebuild
|
|
||||||
msg: "xcodebuild not found. Please install Xcode."
|
|
||||||
- sh: xcrun -f devicectl
|
|
||||||
msg: "devicectl not found. Please update to Xcode 15+ (which includes devicectl)."
|
|
||||||
- sh: test -n '{{.PROJECT}}'
|
|
||||||
msg: "Set PROJECT to your .xcodeproj path (e.g., PROJECT=build/ios/xcode/App.xcodeproj)."
|
|
||||||
- sh: test -n '{{.SCHEME}}'
|
|
||||||
msg: "Set SCHEME to your app scheme (e.g., SCHEME=ios.dev)."
|
|
||||||
- sh: test -n '{{.UDID}}'
|
|
||||||
msg: "Set UDID to your device UDID (see: task ios:device:list)."
|
|
||||||
- sh: test -n '{{.BUNDLE_ID}}'
|
|
||||||
msg: "Set BUNDLE_ID to your app's bundle identifier (e.g., com.yourco.wails.ios.dev)."
|
|
||||||
cmds:
|
|
||||||
- |
|
|
||||||
set -euo pipefail
|
|
||||||
echo "Building for device: UDID={{.UDID}} SCHEME={{.SCHEME}} PROJECT={{.PROJECT}}"
|
|
||||||
XCB_ARGS=(
|
|
||||||
-project "{{.PROJECT}}"
|
|
||||||
-scheme "{{.SCHEME}}"
|
|
||||||
-configuration "{{.CONFIG}}"
|
|
||||||
-destination "id={{.UDID}}"
|
|
||||||
-derivedDataPath "{{.DERIVED}}"
|
|
||||||
-allowProvisioningUpdates
|
|
||||||
-allowProvisioningDeviceRegistration
|
|
||||||
)
|
|
||||||
# Optionally inject signing identifiers if provided
|
|
||||||
if [ -n '{{.TEAM_ID}}' ]; then XCB_ARGS+=(DEVELOPMENT_TEAM={{.TEAM_ID}}); fi
|
|
||||||
if [ -n '{{.BUNDLE_ID}}' ]; then XCB_ARGS+=(PRODUCT_BUNDLE_IDENTIFIER={{.BUNDLE_ID}}); fi
|
|
||||||
xcodebuild "${XCB_ARGS[@]}" build | xcpretty || true
|
|
||||||
# If xcpretty isn't installed, run without it
|
|
||||||
if [ "${PIPESTATUS[0]}" -ne 0 ]; then
|
|
||||||
xcodebuild "${XCB_ARGS[@]}" build
|
|
||||||
fi
|
|
||||||
# Find built .app
|
|
||||||
APP_PATH=$(find "{{.DERIVED}}/Build/Products" -type d -name "*.app" -maxdepth 3 | head -n 1)
|
|
||||||
if [ -z "$APP_PATH" ]; then
|
|
||||||
echo "Could not locate built .app under {{.DERIVED}}/Build/Products" >&2
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
echo "Installing: $APP_PATH"
|
|
||||||
xcrun devicectl device install app --device "{{.UDID}}" "$APP_PATH"
|
|
||||||
echo "Launching: {{.BUNDLE_ID}}"
|
|
||||||
xcrun devicectl device process launch --device "{{.UDID}}" --stderr console --stdout console "{{.BUNDLE_ID}}"
|
|
||||||
|
|
@ -1,9 +0,0 @@
|
||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
|
||||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
|
||||||
<svg width="100%" height="100%" viewBox="0 0 583 533" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;">
|
|
||||||
<g transform="matrix(1,0,0,1,-246,-251)">
|
|
||||||
<g id="Ebene1">
|
|
||||||
<path d="M246,251L265,784L401,784L506,450L507,450L505,784L641,784L829,251L682,251L596,567L595,567L596,251L478,251L378,568L391,251L246,251Z"/>
|
|
||||||
</g>
|
|
||||||
</g>
|
|
||||||
</svg>
|
|
||||||
|
Before Width: | Height: | Size: 698 B |
|
|
@ -1,51 +0,0 @@
|
||||||
{
|
|
||||||
"fill" : {
|
|
||||||
"automatic-gradient" : "extended-gray:1.00000,1.00000"
|
|
||||||
},
|
|
||||||
"groups" : [
|
|
||||||
{
|
|
||||||
"layers" : [
|
|
||||||
{
|
|
||||||
"fill-specializations" : [
|
|
||||||
{
|
|
||||||
"appearance" : "dark",
|
|
||||||
"value" : {
|
|
||||||
"solid" : "srgb:0.92143,0.92145,0.92144,1.00000"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"appearance" : "tinted",
|
|
||||||
"value" : {
|
|
||||||
"solid" : "srgb:0.83742,0.83744,0.83743,1.00000"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"image-name" : "wails_icon_vector.svg",
|
|
||||||
"name" : "wails_icon_vector",
|
|
||||||
"position" : {
|
|
||||||
"scale" : 1.25,
|
|
||||||
"translation-in-points" : [
|
|
||||||
36.890625,
|
|
||||||
4.96875
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"shadow" : {
|
|
||||||
"kind" : "neutral",
|
|
||||||
"opacity" : 0.5
|
|
||||||
},
|
|
||||||
"specular" : true,
|
|
||||||
"translucency" : {
|
|
||||||
"enabled" : true,
|
|
||||||
"value" : 0.5
|
|
||||||
}
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"supported-platforms" : {
|
|
||||||
"circles" : [
|
|
||||||
"watchOS"
|
|
||||||
],
|
|
||||||
"squares" : "shared"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Binary file not shown.
|
Before Width: | Height: | Size: 130 KiB |
|
|
@ -1,79 +0,0 @@
|
||||||
# This file contains the configuration for this project.
|
|
||||||
# When you update `info` or `fileAssociations`, run `wails3 task common:update:build-assets` to update the assets.
|
|
||||||
# Note that this will overwrite any changes you have made to the assets.
|
|
||||||
version: '3'
|
|
||||||
|
|
||||||
# This information is used to generate the build assets.
|
|
||||||
info:
|
|
||||||
companyName: "My Company" # The name of the company
|
|
||||||
productName: "My Product" # The name of the application
|
|
||||||
productIdentifier: "com.mycompany.myproduct" # The unique product identifier
|
|
||||||
description: "A program that does X" # The application description
|
|
||||||
copyright: "(c) 2025, My Company" # Copyright text
|
|
||||||
comments: "Some Product Comments" # Comments
|
|
||||||
version: "0.0.1" # The application version
|
|
||||||
# cfBundleIconName: "appicon" # The macOS icon name in Assets.car icon bundles (optional)
|
|
||||||
# # Should match the name of your .icon file without the extension
|
|
||||||
# # If not set and Assets.car exists, defaults to "appicon"
|
|
||||||
|
|
||||||
# iOS build configuration (uncomment to customise iOS project generation)
|
|
||||||
# Note: Keys under `ios` OVERRIDE values under `info` when set.
|
|
||||||
# ios:
|
|
||||||
# # The iOS bundle identifier used in the generated Xcode project (CFBundleIdentifier)
|
|
||||||
# bundleID: "com.mycompany.myproduct"
|
|
||||||
# # The display name shown under the app icon (CFBundleDisplayName/CFBundleName)
|
|
||||||
# displayName: "My Product"
|
|
||||||
# # The app version to embed in Info.plist (CFBundleShortVersionString/CFBundleVersion)
|
|
||||||
# version: "0.0.1"
|
|
||||||
# # The company/organisation name for templates and project settings
|
|
||||||
# company: "My Company"
|
|
||||||
# # Additional comments to embed in Info.plist metadata
|
|
||||||
# comments: "Some Product Comments"
|
|
||||||
|
|
||||||
# Dev mode configuration
|
|
||||||
dev_mode:
|
|
||||||
root_path: .
|
|
||||||
log_level: warn
|
|
||||||
debounce: 1000
|
|
||||||
ignore:
|
|
||||||
dir:
|
|
||||||
- .git
|
|
||||||
- node_modules
|
|
||||||
- frontend
|
|
||||||
- bin
|
|
||||||
file:
|
|
||||||
- .DS_Store
|
|
||||||
- .gitignore
|
|
||||||
- .gitkeep
|
|
||||||
- "*_test.go"
|
|
||||||
watched_extension:
|
|
||||||
- "*.go"
|
|
||||||
- "*.js" # Watch for changes to JS/TS files included using the //wails:include directive.
|
|
||||||
- "*.ts" # The frontend directory will be excluded entirely by the setting above.
|
|
||||||
git_ignore: true
|
|
||||||
executes:
|
|
||||||
- cmd: wails3 build DEV=true
|
|
||||||
type: blocking
|
|
||||||
- cmd: wails3 task common:dev:frontend
|
|
||||||
type: background
|
|
||||||
- cmd: wails3 task run
|
|
||||||
type: primary
|
|
||||||
|
|
||||||
# File Associations
|
|
||||||
# More information at: https://v3.wails.io/noit/done/yet
|
|
||||||
fileAssociations:
|
|
||||||
# - ext: wails
|
|
||||||
# name: Wails
|
|
||||||
# description: Wails Application File
|
|
||||||
# iconName: wailsFileIcon
|
|
||||||
# role: Editor
|
|
||||||
# - ext: jpg
|
|
||||||
# name: JPEG
|
|
||||||
# description: Image File
|
|
||||||
# iconName: jpegFileIcon
|
|
||||||
# role: Editor
|
|
||||||
# mimeType: image/jpeg # (optional)
|
|
||||||
|
|
||||||
# Other data
|
|
||||||
other:
|
|
||||||
- name: My Other Data
|
|
||||||
|
|
@ -1,212 +0,0 @@
|
||||||
# Cross-compile Wails v3 apps to any platform
|
|
||||||
#
|
|
||||||
# Darwin: Zig + macOS SDK
|
|
||||||
# Linux: Native GCC when host matches target, Zig for cross-arch
|
|
||||||
# Windows: Zig + bundled mingw
|
|
||||||
#
|
|
||||||
# Usage:
|
|
||||||
# docker build -t wails-cross -f Dockerfile.cross .
|
|
||||||
# docker run --rm -v $(pwd):/app wails-cross darwin arm64
|
|
||||||
# docker run --rm -v $(pwd):/app wails-cross darwin amd64
|
|
||||||
# docker run --rm -v $(pwd):/app wails-cross linux amd64
|
|
||||||
# docker run --rm -v $(pwd):/app wails-cross linux arm64
|
|
||||||
# docker run --rm -v $(pwd):/app wails-cross windows amd64
|
|
||||||
# docker run --rm -v $(pwd):/app wails-cross windows arm64
|
|
||||||
|
|
||||||
FROM golang:1.26-bookworm
|
|
||||||
|
|
||||||
ARG TARGETARCH
|
|
||||||
ARG GARBLE_VERSION=v0.16.0
|
|
||||||
|
|
||||||
# Install base tools, GCC, and GTK/WebKit dev packages
|
|
||||||
RUN apt-get update && apt-get install -y --no-install-recommends \
|
|
||||||
curl xz-utils nodejs npm pkg-config gcc libc6-dev \
|
|
||||||
libgtk-3-dev libwebkit2gtk-4.1-dev \
|
|
||||||
libgtk-4-dev libwebkitgtk-6.0-dev \
|
|
||||||
&& rm -rf /var/lib/apt/lists/*
|
|
||||||
|
|
||||||
RUN go install mvdan.cc/garble@${GARBLE_VERSION}
|
|
||||||
|
|
||||||
# Install Zig - automatically selects correct binary for host architecture
|
|
||||||
ARG ZIG_VERSION=0.14.0
|
|
||||||
RUN ZIG_ARCH=$(case "${TARGETARCH}" in arm64) echo "aarch64" ;; *) echo "x86_64" ;; esac) && \
|
|
||||||
curl -L "https://ziglang.org/download/${ZIG_VERSION}/zig-linux-${ZIG_ARCH}-${ZIG_VERSION}.tar.xz" \
|
|
||||||
| tar -xJ -C /opt \
|
|
||||||
&& ln -s /opt/zig-linux-${ZIG_ARCH}-${ZIG_VERSION}/zig /usr/local/bin/zig
|
|
||||||
|
|
||||||
# Download macOS SDK (required for darwin targets)
|
|
||||||
ARG MACOS_SDK_VERSION=14.5
|
|
||||||
RUN curl -L "https://github.com/joseluisq/macosx-sdks/releases/download/${MACOS_SDK_VERSION}/MacOSX${MACOS_SDK_VERSION}.sdk.tar.xz" \
|
|
||||||
| tar -xJ -C /opt \
|
|
||||||
&& mv /opt/MacOSX${MACOS_SDK_VERSION}.sdk /opt/macos-sdk
|
|
||||||
|
|
||||||
ENV MACOS_SDK_PATH=/opt/macos-sdk
|
|
||||||
|
|
||||||
# Create Zig CC wrappers for cross-compilation targets
|
|
||||||
# Darwin and Windows use Zig; Linux uses native GCC (run with --platform for cross-arch)
|
|
||||||
|
|
||||||
# Darwin arm64
|
|
||||||
COPY <<'ZIGWRAP' /usr/local/bin/zcc-darwin-arm64
|
|
||||||
#!/bin/sh
|
|
||||||
ARGS=""
|
|
||||||
SKIP_NEXT=0
|
|
||||||
for arg in "$@"; do
|
|
||||||
if [ $SKIP_NEXT -eq 1 ]; then
|
|
||||||
SKIP_NEXT=0
|
|
||||||
continue
|
|
||||||
fi
|
|
||||||
case "$arg" in
|
|
||||||
-target) SKIP_NEXT=1 ;;
|
|
||||||
-mmacosx-version-min=*) ;;
|
|
||||||
*) ARGS="$ARGS $arg" ;;
|
|
||||||
esac
|
|
||||||
done
|
|
||||||
exec zig cc -fno-sanitize=all -target aarch64-macos-none -isysroot /opt/macos-sdk -I/opt/macos-sdk/usr/include -L/opt/macos-sdk/usr/lib -F/opt/macos-sdk/System/Library/Frameworks -w $ARGS
|
|
||||||
ZIGWRAP
|
|
||||||
RUN chmod +x /usr/local/bin/zcc-darwin-arm64
|
|
||||||
|
|
||||||
# Darwin amd64
|
|
||||||
COPY <<'ZIGWRAP' /usr/local/bin/zcc-darwin-amd64
|
|
||||||
#!/bin/sh
|
|
||||||
ARGS=""
|
|
||||||
SKIP_NEXT=0
|
|
||||||
for arg in "$@"; do
|
|
||||||
if [ $SKIP_NEXT -eq 1 ]; then
|
|
||||||
SKIP_NEXT=0
|
|
||||||
continue
|
|
||||||
fi
|
|
||||||
case "$arg" in
|
|
||||||
-target) SKIP_NEXT=1 ;;
|
|
||||||
-mmacosx-version-min=*) ;;
|
|
||||||
*) ARGS="$ARGS $arg" ;;
|
|
||||||
esac
|
|
||||||
done
|
|
||||||
exec zig cc -fno-sanitize=all -target x86_64-macos-none -isysroot /opt/macos-sdk -I/opt/macos-sdk/usr/include -L/opt/macos-sdk/usr/lib -F/opt/macos-sdk/System/Library/Frameworks -w $ARGS
|
|
||||||
ZIGWRAP
|
|
||||||
RUN chmod +x /usr/local/bin/zcc-darwin-amd64
|
|
||||||
|
|
||||||
# Windows amd64 - uses Zig's bundled mingw
|
|
||||||
COPY <<'ZIGWRAP' /usr/local/bin/zcc-windows-amd64
|
|
||||||
#!/bin/sh
|
|
||||||
ARGS=""
|
|
||||||
SKIP_NEXT=0
|
|
||||||
for arg in "$@"; do
|
|
||||||
if [ $SKIP_NEXT -eq 1 ]; then
|
|
||||||
SKIP_NEXT=0
|
|
||||||
continue
|
|
||||||
fi
|
|
||||||
case "$arg" in
|
|
||||||
-target) SKIP_NEXT=1 ;;
|
|
||||||
-Wl,*) ;;
|
|
||||||
*) ARGS="$ARGS $arg" ;;
|
|
||||||
esac
|
|
||||||
done
|
|
||||||
exec zig cc -target x86_64-windows-gnu $ARGS
|
|
||||||
ZIGWRAP
|
|
||||||
RUN chmod +x /usr/local/bin/zcc-windows-amd64
|
|
||||||
|
|
||||||
# Windows arm64 - uses Zig's bundled mingw
|
|
||||||
COPY <<'ZIGWRAP' /usr/local/bin/zcc-windows-arm64
|
|
||||||
#!/bin/sh
|
|
||||||
ARGS=""
|
|
||||||
SKIP_NEXT=0
|
|
||||||
for arg in "$@"; do
|
|
||||||
if [ $SKIP_NEXT -eq 1 ]; then
|
|
||||||
SKIP_NEXT=0
|
|
||||||
continue
|
|
||||||
fi
|
|
||||||
case "$arg" in
|
|
||||||
-target) SKIP_NEXT=1 ;;
|
|
||||||
-Wl,*) ;;
|
|
||||||
*) ARGS="$ARGS $arg" ;;
|
|
||||||
esac
|
|
||||||
done
|
|
||||||
exec zig cc -target aarch64-windows-gnu $ARGS
|
|
||||||
ZIGWRAP
|
|
||||||
RUN chmod +x /usr/local/bin/zcc-windows-arm64
|
|
||||||
|
|
||||||
# Build script
|
|
||||||
COPY <<'SCRIPT' /usr/local/bin/build.sh
|
|
||||||
#!/bin/sh
|
|
||||||
set -e
|
|
||||||
|
|
||||||
OS=${1:-darwin}
|
|
||||||
ARCH=${2:-arm64}
|
|
||||||
|
|
||||||
case "${OS}-${ARCH}" in
|
|
||||||
darwin-arm64|darwin-aarch64)
|
|
||||||
export CC=zcc-darwin-arm64
|
|
||||||
export GOARCH=arm64
|
|
||||||
export GOOS=darwin
|
|
||||||
;;
|
|
||||||
darwin-amd64|darwin-x86_64)
|
|
||||||
export CC=zcc-darwin-amd64
|
|
||||||
export GOARCH=amd64
|
|
||||||
export GOOS=darwin
|
|
||||||
;;
|
|
||||||
linux-arm64|linux-aarch64)
|
|
||||||
export CC=gcc
|
|
||||||
export GOARCH=arm64
|
|
||||||
export GOOS=linux
|
|
||||||
;;
|
|
||||||
linux-amd64|linux-x86_64)
|
|
||||||
export CC=gcc
|
|
||||||
export GOARCH=amd64
|
|
||||||
export GOOS=linux
|
|
||||||
;;
|
|
||||||
windows-arm64|windows-aarch64)
|
|
||||||
export CC=zcc-windows-arm64
|
|
||||||
export GOARCH=arm64
|
|
||||||
export GOOS=windows
|
|
||||||
;;
|
|
||||||
windows-amd64|windows-x86_64)
|
|
||||||
export CC=zcc-windows-amd64
|
|
||||||
export GOARCH=amd64
|
|
||||||
export GOOS=windows
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
echo "Usage: <os> <arch>"
|
|
||||||
echo " os: darwin, linux, windows"
|
|
||||||
echo " arch: amd64, arm64"
|
|
||||||
exit 1
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
export CGO_ENABLED=1
|
|
||||||
export CGO_CFLAGS="-w"
|
|
||||||
|
|
||||||
# Build frontend if exists and not already built (host may have built it)
|
|
||||||
if [ -d "frontend" ] && [ -f "frontend/package.json" ] && [ ! -d "frontend/dist" ]; then
|
|
||||||
(cd frontend && npm install --silent && npm run build --silent)
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Build
|
|
||||||
APP=${APP_NAME:-$(basename $(pwd))}
|
|
||||||
mkdir -p bin
|
|
||||||
|
|
||||||
EXT=""
|
|
||||||
LDFLAGS="-s -w"
|
|
||||||
if [ "$GOOS" = "windows" ]; then
|
|
||||||
EXT=".exe"
|
|
||||||
LDFLAGS="-s -w -H windowsgui"
|
|
||||||
fi
|
|
||||||
|
|
||||||
TAGS="production"
|
|
||||||
if [ -n "$EXTRA_TAGS" ]; then
|
|
||||||
TAGS="${TAGS},${EXTRA_TAGS}"
|
|
||||||
fi
|
|
||||||
|
|
||||||
COMPILER="go build"
|
|
||||||
if [ "$OBFUSCATED" = "true" ]; then
|
|
||||||
COMPILER="garble ${GARBLE_ARGS} build"
|
|
||||||
TAGS="${TAGS},wails_obfuscated"
|
|
||||||
fi
|
|
||||||
|
|
||||||
${COMPILER} -tags "$TAGS" -trimpath -buildvcs=false -ldflags="$LDFLAGS" -o bin/${APP}-${GOOS}-${GOARCH}${EXT} .
|
|
||||||
echo "Built: bin/${APP}-${GOOS}-${GOARCH}${EXT}"
|
|
||||||
SCRIPT
|
|
||||||
RUN chmod +x /usr/local/bin/build.sh
|
|
||||||
|
|
||||||
WORKDIR /app
|
|
||||||
ENTRYPOINT ["/usr/local/bin/build.sh"]
|
|
||||||
CMD ["darwin", "arm64"]
|
|
||||||
|
|
@ -1,41 +0,0 @@
|
||||||
# Wails Server Mode Dockerfile
|
|
||||||
# Multi-stage build for minimal image size
|
|
||||||
|
|
||||||
# Build stage
|
|
||||||
FROM golang:alpine AS builder
|
|
||||||
|
|
||||||
WORKDIR /app
|
|
||||||
|
|
||||||
# Install build dependencies
|
|
||||||
RUN apk add --no-cache git
|
|
||||||
|
|
||||||
# Copy source code
|
|
||||||
COPY . .
|
|
||||||
|
|
||||||
# Remove local replace directive if present (for production builds)
|
|
||||||
RUN sed -i '/^replace/d' go.mod || true
|
|
||||||
|
|
||||||
# Download dependencies
|
|
||||||
RUN go mod tidy
|
|
||||||
|
|
||||||
# Build the server binary
|
|
||||||
RUN go build -tags server -ldflags="-s -w" -o server .
|
|
||||||
|
|
||||||
# Runtime stage - minimal image
|
|
||||||
FROM gcr.io/distroless/static-debian12
|
|
||||||
|
|
||||||
# Copy the binary
|
|
||||||
COPY --from=builder /app/server /server
|
|
||||||
|
|
||||||
# Copy frontend assets
|
|
||||||
COPY --from=builder /app/frontend/dist /frontend/dist
|
|
||||||
|
|
||||||
# Expose the default port
|
|
||||||
EXPOSE 8080
|
|
||||||
|
|
||||||
# Bind to all interfaces (required for Docker)
|
|
||||||
# Can be overridden at runtime with -e WAILS_SERVER_HOST=...
|
|
||||||
ENV WAILS_SERVER_HOST=0.0.0.0
|
|
||||||
|
|
||||||
# Run the server
|
|
||||||
ENTRYPOINT ["/server"]
|
|
||||||
|
|
@ -1,224 +0,0 @@
|
||||||
version: '3'
|
|
||||||
|
|
||||||
includes:
|
|
||||||
common: ../Taskfile.yml
|
|
||||||
|
|
||||||
vars:
|
|
||||||
# Signing configuration - edit these values for your project
|
|
||||||
# PGP_KEY: "path/to/signing-key.asc"
|
|
||||||
# SIGN_ROLE: "builder" # Options: origin, maint, archive, builder
|
|
||||||
#
|
|
||||||
# Password is stored securely in system keychain. Run: wails3 setup signing
|
|
||||||
|
|
||||||
# Docker image for cross-compilation (used when building on non-Linux or no CC available)
|
|
||||||
CROSS_IMAGE: wails-cross
|
|
||||||
|
|
||||||
tasks:
|
|
||||||
build:
|
|
||||||
summary: Builds the application for Linux
|
|
||||||
cmds:
|
|
||||||
# Linux requires CGO - use Docker when:
|
|
||||||
# 1. Cross-compiling from non-Linux, OR
|
|
||||||
# 2. No C compiler is available, OR
|
|
||||||
# 3. Target architecture differs from host architecture (cross-arch compilation)
|
|
||||||
- task: '{{if and (eq OS "linux") (eq .HAS_CC "true") (eq .TARGET_ARCH ARCH)}}build:native{{else}}build:docker{{end}}'
|
|
||||||
vars:
|
|
||||||
ARCH: '{{.ARCH}}'
|
|
||||||
DEV: '{{.DEV}}'
|
|
||||||
OUTPUT: '{{.OUTPUT}}'
|
|
||||||
EXTRA_TAGS: '{{.EXTRA_TAGS}}'
|
|
||||||
OBFUSCATED: '{{.OBFUSCATED}}'
|
|
||||||
GARBLE_ARGS: '{{.GARBLE_ARGS}}'
|
|
||||||
vars:
|
|
||||||
DEFAULT_OUTPUT: '{{.BIN_DIR}}/{{.APP_NAME}}'
|
|
||||||
OUTPUT: '{{ .OUTPUT | default .DEFAULT_OUTPUT }}'
|
|
||||||
# Determine target architecture (defaults to host ARCH if not specified)
|
|
||||||
TARGET_ARCH: '{{.ARCH | default ARCH}}'
|
|
||||||
# Check if a C compiler is available (gcc or clang) — cross-platform via wails3 tool
|
|
||||||
HAS_CC:
|
|
||||||
sh: 'wails3 tool has-cc'
|
|
||||||
|
|
||||||
build:native:
|
|
||||||
summary: Builds the application natively on Linux
|
|
||||||
internal: true
|
|
||||||
deps:
|
|
||||||
- task: common:go:mod:tidy
|
|
||||||
- task: common:build:frontend
|
|
||||||
vars:
|
|
||||||
BUILD_FLAGS:
|
|
||||||
ref: .BUILD_FLAGS
|
|
||||||
OBFUSCATED:
|
|
||||||
ref: .OBFUSCATED
|
|
||||||
DEV:
|
|
||||||
ref: .DEV
|
|
||||||
- task: common:generate:icons
|
|
||||||
- task: generate:dotdesktop
|
|
||||||
preconditions:
|
|
||||||
- sh: '{{if eq .OBFUSCATED "true"}}command -v garble >/dev/null 2>&1{{else}}true{{end}}'
|
|
||||||
msg: "garble is required for obfuscated builds. Install it with: go install mvdan.cc/garble@v0.16.0 (requires Go 1.24+). See https://github.com/burrowers/garble/releases for version/toolchain compatibility."
|
|
||||||
cmds:
|
|
||||||
- '{{if eq .OBFUSCATED "true"}}garble {{.GARBLE_ARGS}} build{{else}}go build{{end}} {{.BUILD_FLAGS}} -o {{.OUTPUT}}'
|
|
||||||
vars:
|
|
||||||
BUILD_FLAGS: '{{if eq .DEV "true"}}{{if or .EXTRA_TAGS (eq .OBFUSCATED "true")}}-tags {{if eq .OBFUSCATED "true"}}wails_obfuscated{{if .EXTRA_TAGS}},{{end}}{{end}}{{.EXTRA_TAGS}} {{end}}-buildvcs=false -gcflags=all="-l"{{else}}-tags production{{if eq .OBFUSCATED "true"}},wails_obfuscated{{end}}{{if .EXTRA_TAGS}},{{.EXTRA_TAGS}}{{end}} -trimpath -buildvcs=false -ldflags="-w -s"{{end}}'
|
|
||||||
DEFAULT_OUTPUT: '{{.BIN_DIR}}/{{.APP_NAME}}'
|
|
||||||
OUTPUT: '{{ .OUTPUT | default .DEFAULT_OUTPUT }}'
|
|
||||||
env:
|
|
||||||
GOOS: linux
|
|
||||||
CGO_ENABLED: 1
|
|
||||||
GOARCH: '{{.ARCH | default ARCH}}'
|
|
||||||
|
|
||||||
build:docker:
|
|
||||||
summary: Builds for Linux using Docker (for non-Linux hosts or when no C compiler available)
|
|
||||||
internal: true
|
|
||||||
deps:
|
|
||||||
- task: common:build:frontend
|
|
||||||
vars:
|
|
||||||
OBFUSCATED:
|
|
||||||
ref: .OBFUSCATED
|
|
||||||
- task: common:generate:icons
|
|
||||||
- task: generate:dotdesktop
|
|
||||||
preconditions:
|
|
||||||
- sh: docker info > /dev/null 2>&1
|
|
||||||
msg: "Docker is required for cross-compilation to Linux. Please install Docker."
|
|
||||||
- sh: docker image inspect {{.CROSS_IMAGE}} > /dev/null 2>&1
|
|
||||||
msg: |
|
|
||||||
Docker image '{{.CROSS_IMAGE}}' not found.
|
|
||||||
Build it first: wails3 task setup:docker
|
|
||||||
cmds:
|
|
||||||
- docker run --rm -v "{{.ROOT_DIR}}:/app" {{.DOCKER_MOUNTS}} -e APP_NAME="{{.APP_NAME}}" {{if .EXTRA_TAGS}}-e EXTRA_TAGS="{{.EXTRA_TAGS}}"{{end}} {{if eq .OBFUSCATED "true"}}-e OBFUSCATED=true{{end}} {{if .GARBLE_ARGS}}-e GARBLE_ARGS="{{.GARBLE_ARGS}}"{{end}} "{{.CROSS_IMAGE}}" linux {{.DOCKER_ARCH}}
|
|
||||||
- cmd: docker run --rm -v "{{.ROOT_DIR}}:/app" alpine chown -R $(id -u):$(id -g) /app/bin
|
|
||||||
platforms: [linux, darwin]
|
|
||||||
- mkdir -p {{.BIN_DIR}}
|
|
||||||
- mv "bin/{{.APP_NAME}}-linux-{{.DOCKER_ARCH}}" "{{.OUTPUT}}"
|
|
||||||
vars:
|
|
||||||
DOCKER_ARCH: '{{.ARCH | default "amd64"}}'
|
|
||||||
DEFAULT_OUTPUT: '{{.BIN_DIR}}/{{.APP_NAME}}'
|
|
||||||
OUTPUT: '{{ .OUTPUT | default .DEFAULT_OUTPUT }}'
|
|
||||||
# Generate Docker volume mounts: Go module cache + go.mod replace directives
|
|
||||||
# Uses wails3 tool docker-mounts for cross-platform compatibility (Windows/Linux/macOS)
|
|
||||||
DOCKER_MOUNTS:
|
|
||||||
sh: 'wails3 tool docker-mounts'
|
|
||||||
|
|
||||||
package:
|
|
||||||
summary: Packages the application for Linux
|
|
||||||
deps:
|
|
||||||
- task: build
|
|
||||||
cmds:
|
|
||||||
- task: create:appimage
|
|
||||||
- task: create:deb
|
|
||||||
- task: create:rpm
|
|
||||||
- task: create:aur
|
|
||||||
|
|
||||||
create:appimage:
|
|
||||||
summary: Creates an AppImage
|
|
||||||
dir: build/linux/appimage
|
|
||||||
deps:
|
|
||||||
- task: build
|
|
||||||
- task: generate:dotdesktop
|
|
||||||
cmds:
|
|
||||||
- cp "{{.APP_BINARY}}" "{{.APP_NAME}}"
|
|
||||||
- cp ../../appicon.png "{{.APP_NAME}}.png"
|
|
||||||
- wails3 generate appimage -binary "{{.APP_NAME}}" -icon {{.ICON}} -desktopfile {{.DESKTOP_FILE}} -outputdir {{.OUTPUT_DIR}} -builddir {{.ROOT_DIR}}/build/linux/appimage/build
|
|
||||||
vars:
|
|
||||||
APP_NAME: '{{.APP_NAME}}'
|
|
||||||
APP_BINARY: '../../../bin/{{.APP_NAME}}'
|
|
||||||
ICON: '{{.APP_NAME}}.png'
|
|
||||||
DESKTOP_FILE: '../{{.APP_NAME}}.desktop'
|
|
||||||
OUTPUT_DIR: '../../../bin'
|
|
||||||
|
|
||||||
create:deb:
|
|
||||||
summary: Creates a deb package
|
|
||||||
deps:
|
|
||||||
- task: build
|
|
||||||
cmds:
|
|
||||||
- task: generate:dotdesktop
|
|
||||||
- task: generate:deb
|
|
||||||
|
|
||||||
create:rpm:
|
|
||||||
summary: Creates a rpm package
|
|
||||||
deps:
|
|
||||||
- task: build
|
|
||||||
cmds:
|
|
||||||
- task: generate:dotdesktop
|
|
||||||
- task: generate:rpm
|
|
||||||
|
|
||||||
create:aur:
|
|
||||||
summary: Creates a arch linux packager package
|
|
||||||
deps:
|
|
||||||
- task: build
|
|
||||||
cmds:
|
|
||||||
- task: generate:dotdesktop
|
|
||||||
- task: generate:aur
|
|
||||||
|
|
||||||
generate:deb:
|
|
||||||
summary: Creates a deb package
|
|
||||||
cmds:
|
|
||||||
- wails3 tool package -name "{{.APP_NAME}}" -format deb -config ./build/linux/nfpm/nfpm.yaml -out {{.ROOT_DIR}}/bin
|
|
||||||
|
|
||||||
generate:rpm:
|
|
||||||
summary: Creates a rpm package
|
|
||||||
cmds:
|
|
||||||
- wails3 tool package -name "{{.APP_NAME}}" -format rpm -config ./build/linux/nfpm/nfpm.yaml -out {{.ROOT_DIR}}/bin
|
|
||||||
|
|
||||||
generate:aur:
|
|
||||||
summary: Creates a arch linux packager package
|
|
||||||
cmds:
|
|
||||||
- wails3 tool package -name "{{.APP_NAME}}" -format archlinux -config ./build/linux/nfpm/nfpm.yaml -out {{.ROOT_DIR}}/bin
|
|
||||||
|
|
||||||
generate:dotdesktop:
|
|
||||||
summary: Generates a `.desktop` file
|
|
||||||
dir: build
|
|
||||||
cmds:
|
|
||||||
- mkdir -p {{.ROOT_DIR}}/build/linux/appimage
|
|
||||||
- wails3 generate .desktop -name "{{.APP_NAME}}" -exec "{{.EXEC}}" -icon "{{.ICON}}" -outputfile "{{.ROOT_DIR}}/build/linux/{{.APP_NAME}}.desktop" -categories "{{.CATEGORIES}}"
|
|
||||||
vars:
|
|
||||||
APP_NAME: '{{.APP_NAME}}'
|
|
||||||
EXEC: '{{.APP_NAME}}'
|
|
||||||
ICON: '{{.APP_NAME}}'
|
|
||||||
CATEGORIES: 'Development;'
|
|
||||||
OUTPUTFILE: '{{.ROOT_DIR}}/build/linux/{{.APP_NAME}}.desktop'
|
|
||||||
|
|
||||||
run:
|
|
||||||
cmds:
|
|
||||||
- '{{.BIN_DIR}}/{{.APP_NAME}}'
|
|
||||||
|
|
||||||
sign:deb:
|
|
||||||
summary: Signs the DEB package
|
|
||||||
desc: |
|
|
||||||
Signs the .deb package with a PGP key.
|
|
||||||
Configure PGP_KEY in the vars section at the top of this file.
|
|
||||||
Password is retrieved from system keychain (run: wails3 setup signing)
|
|
||||||
deps:
|
|
||||||
- task: create:deb
|
|
||||||
cmds:
|
|
||||||
- wails3 tool sign --input "{{.BIN_DIR}}/{{.APP_NAME}}*.deb" --pgp-key {{.PGP_KEY}} {{if .SIGN_ROLE}}--role {{.SIGN_ROLE}}{{end}}
|
|
||||||
preconditions:
|
|
||||||
- sh: '[ -n "{{.PGP_KEY}}" ]'
|
|
||||||
msg: "PGP_KEY is required. Set it in the vars section at the top of build/linux/Taskfile.yml"
|
|
||||||
|
|
||||||
sign:rpm:
|
|
||||||
summary: Signs the RPM package
|
|
||||||
desc: |
|
|
||||||
Signs the .rpm package with a PGP key.
|
|
||||||
Configure PGP_KEY in the vars section at the top of this file.
|
|
||||||
Password is retrieved from system keychain (run: wails3 setup signing)
|
|
||||||
deps:
|
|
||||||
- task: create:rpm
|
|
||||||
cmds:
|
|
||||||
- wails3 tool sign --input "{{.BIN_DIR}}/{{.APP_NAME}}*.rpm" --pgp-key {{.PGP_KEY}}
|
|
||||||
preconditions:
|
|
||||||
- sh: '[ -n "{{.PGP_KEY}}" ]'
|
|
||||||
msg: "PGP_KEY is required. Set it in the vars section at the top of build/linux/Taskfile.yml"
|
|
||||||
|
|
||||||
sign:packages:
|
|
||||||
summary: Signs all Linux packages (DEB and RPM)
|
|
||||||
desc: |
|
|
||||||
Signs both .deb and .rpm packages with a PGP key.
|
|
||||||
Configure PGP_KEY in the vars section at the top of this file.
|
|
||||||
Password is retrieved from system keychain (run: wails3 setup signing)
|
|
||||||
cmds:
|
|
||||||
- task: sign:deb
|
|
||||||
- task: sign:rpm
|
|
||||||
preconditions:
|
|
||||||
- sh: '[ -n "{{.PGP_KEY}}" ]'
|
|
||||||
msg: "PGP_KEY is required. Set it in the vars section at the top of build/linux/Taskfile.yml"
|
|
||||||
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
|
|
@ -16,8 +16,8 @@
|
||||||
background: #13131f;
|
background: #13131f;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
<script type="module" crossorigin src="/assets/main-CvznySlT.js"></script>
|
<script type="module" crossorigin src="/assets/main-DyAxVBm-.js"></script>
|
||||||
<link rel="stylesheet" crossorigin href="/assets/main-Bkv7FuGB.css">
|
<link rel="stylesheet" crossorigin href="/assets/main-B6Dq2iD8.css">
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<div id="app"></div>
|
<div id="app"></div>
|
||||||
|
|
|
||||||
|
|
@ -1,157 +0,0 @@
|
||||||
:root {
|
|
||||||
font-family: "Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto",
|
|
||||||
"Oxygen", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue",
|
|
||||||
sans-serif;
|
|
||||||
font-size: 16px;
|
|
||||||
line-height: 24px;
|
|
||||||
font-weight: 400;
|
|
||||||
color-scheme: light dark;
|
|
||||||
color: rgba(255, 255, 255, 0.87);
|
|
||||||
background-color: rgba(27, 38, 54, 1);
|
|
||||||
font-synthesis: none;
|
|
||||||
text-rendering: optimizeLegibility;
|
|
||||||
-webkit-font-smoothing: antialiased;
|
|
||||||
-moz-osx-font-smoothing: grayscale;
|
|
||||||
-webkit-text-size-adjust: 100%;
|
|
||||||
user-select: none;
|
|
||||||
-webkit-user-select: none;
|
|
||||||
-moz-user-select: none;
|
|
||||||
-ms-user-select: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
@font-face {
|
|
||||||
font-family: "Inter";
|
|
||||||
font-style: normal;
|
|
||||||
font-weight: 400;
|
|
||||||
src: local(""),
|
|
||||||
url("./Inter-Medium.ttf") format("truetype");
|
|
||||||
}
|
|
||||||
|
|
||||||
h3 {
|
|
||||||
font-size: 3em;
|
|
||||||
line-height: 1.1;
|
|
||||||
}
|
|
||||||
|
|
||||||
a {
|
|
||||||
font-weight: 500;
|
|
||||||
color: #646cff;
|
|
||||||
text-decoration: inherit;
|
|
||||||
}
|
|
||||||
|
|
||||||
a:hover {
|
|
||||||
color: #535bf2;
|
|
||||||
}
|
|
||||||
|
|
||||||
button {
|
|
||||||
width: 60px;
|
|
||||||
height: 30px;
|
|
||||||
line-height: 30px;
|
|
||||||
border-radius: 3px;
|
|
||||||
border: none;
|
|
||||||
margin: 0 0 0 20px;
|
|
||||||
padding: 0 8px;
|
|
||||||
cursor: pointer;
|
|
||||||
}
|
|
||||||
|
|
||||||
.result {
|
|
||||||
height: 20px;
|
|
||||||
line-height: 20px;
|
|
||||||
}
|
|
||||||
|
|
||||||
body {
|
|
||||||
margin: 0;
|
|
||||||
display: flex;
|
|
||||||
place-items: center;
|
|
||||||
place-content: center;
|
|
||||||
min-width: 320px;
|
|
||||||
min-height: 100vh;
|
|
||||||
}
|
|
||||||
|
|
||||||
.container {
|
|
||||||
display: flex;
|
|
||||||
flex-direction: column;
|
|
||||||
align-items: center;
|
|
||||||
justify-content: center;
|
|
||||||
}
|
|
||||||
|
|
||||||
h1 {
|
|
||||||
font-size: 3.2em;
|
|
||||||
line-height: 1.1;
|
|
||||||
}
|
|
||||||
|
|
||||||
#app {
|
|
||||||
max-width: 1280px;
|
|
||||||
margin: 0 auto;
|
|
||||||
padding: 2rem;
|
|
||||||
text-align: center;
|
|
||||||
}
|
|
||||||
|
|
||||||
.logo {
|
|
||||||
height: 6em;
|
|
||||||
padding: 1.5em;
|
|
||||||
will-change: filter;
|
|
||||||
}
|
|
||||||
|
|
||||||
.logo:hover {
|
|
||||||
filter: drop-shadow(0 0 2em #e80000aa);
|
|
||||||
}
|
|
||||||
|
|
||||||
.logo.vanilla:hover {
|
|
||||||
filter: drop-shadow(0 0 2em #f7df1eaa);
|
|
||||||
}
|
|
||||||
|
|
||||||
.result {
|
|
||||||
height: 20px;
|
|
||||||
line-height: 20px;
|
|
||||||
margin: 1.5rem auto;
|
|
||||||
text-align: center;
|
|
||||||
}
|
|
||||||
|
|
||||||
.footer {
|
|
||||||
margin-top: 1rem;
|
|
||||||
align-content: center;
|
|
||||||
text-align: center;
|
|
||||||
}
|
|
||||||
|
|
||||||
@media (prefers-color-scheme: light) {
|
|
||||||
:root {
|
|
||||||
color: #213547;
|
|
||||||
background-color: #ffffff;
|
|
||||||
}
|
|
||||||
|
|
||||||
a:hover {
|
|
||||||
color: #747bff;
|
|
||||||
}
|
|
||||||
|
|
||||||
button {
|
|
||||||
background-color: #f9f9f9;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
.input-box .btn:hover {
|
|
||||||
background-image: linear-gradient(to top, #cfd9df 0%, #e2ebf0 100%);
|
|
||||||
color: #333333;
|
|
||||||
}
|
|
||||||
|
|
||||||
.input-box .input {
|
|
||||||
border: none;
|
|
||||||
border-radius: 3px;
|
|
||||||
outline: none;
|
|
||||||
height: 30px;
|
|
||||||
line-height: 30px;
|
|
||||||
padding: 0 10px;
|
|
||||||
color: black;
|
|
||||||
background-color: rgba(240, 240, 240, 1);
|
|
||||||
-webkit-font-smoothing: antialiased;
|
|
||||||
}
|
|
||||||
|
|
||||||
.input-box .input:hover {
|
|
||||||
border: none;
|
|
||||||
background-color: rgba(255, 255, 255, 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
.input-box .input:focus {
|
|
||||||
border: none;
|
|
||||||
background-color: rgba(255, 255, 255, 1);
|
|
||||||
}
|
|
||||||
|
|
@ -0,0 +1,12 @@
|
||||||
|
{
|
||||||
|
"name": "verstak-gui",
|
||||||
|
"assetdir": "frontend/dist",
|
||||||
|
"frontend:install": "npm install",
|
||||||
|
"frontend:build": "npm run build",
|
||||||
|
"frontend:dev:watcher": "npm run dev",
|
||||||
|
"frontend:dev:serverUrl": "http://localhost:5173",
|
||||||
|
"wailsjsdir": "frontend/wailsjs",
|
||||||
|
"version": "2",
|
||||||
|
"outputfilename": "verstak-gui",
|
||||||
|
"projectdir": "cmd/verstak-gui"
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,12 @@
|
||||||
|
{
|
||||||
|
"name": "verstak-gui",
|
||||||
|
"assetdir": "frontend/dist",
|
||||||
|
"frontend:install": "npm install",
|
||||||
|
"frontend:build": "npm run build",
|
||||||
|
"frontend:dev:watcher": "npm run dev",
|
||||||
|
"frontend:dev:serverUrl": "http://localhost:5173",
|
||||||
|
"wailsjsdir": "frontend/wailsjs",
|
||||||
|
"version": "2",
|
||||||
|
"outputfilename": "verstak-gui",
|
||||||
|
"projectdir": "cmd/verstak-gui"
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue