From d1f63342cb647a68ea98fcb8b17394d73fabd2c6 Mon Sep 17 00:00:00 2001 From: Snider Date: Wed, 28 Jan 2026 15:35:51 +0000 Subject: [PATCH] fix(ci): track Wails build config files for lthn-desktop and core-demo Add exceptions in .gitignore to track build configuration files (Taskfile.yml, info.json, manifests, etc.) while keeping build outputs (bin/) ignored. Co-Authored-By: Claude Opus 4.5 --- .gitignore | 2 + cmd/core-demo/build/Taskfile.yml | 84 +++++++ cmd/core-demo/build/appicon.png | Bin 0 -> 32181 bytes cmd/core-demo/build/apptray.png | Bin 0 -> 32953 bytes cmd/core-demo/build/config.yml | 43 ++++ cmd/core-demo/build/darwin/Info.dev.plist | 47 ++++ cmd/core-demo/build/darwin/Info.plist | 32 +++ cmd/core-demo/build/darwin/Taskfile.yml | 81 ++++++ cmd/core-demo/build/darwin/icons.icns | Bin 0 -> 98035 bytes cmd/core-demo/build/linux/Taskfile.yml | 81 ++++++ cmd/core-demo/build/linux/appimage/build.sh | 35 +++ cmd/core-demo/build/linux/desktop | 13 + cmd/core-demo/build/linux/nfpm/nfpm.yaml | 67 +++++ .../build/linux/nfpm/scripts/postinstall.sh | 21 ++ .../build/linux/nfpm/scripts/postremove.sh | 1 + .../build/linux/nfpm/scripts/preinstall.sh | 1 + .../build/linux/nfpm/scripts/preremove.sh | 1 + cmd/core-demo/build/windows/Taskfile.yml | 98 ++++++++ cmd/core-demo/build/windows/icon.ico | Bin 0 -> 12683 bytes cmd/core-demo/build/windows/info.json | 15 ++ .../build/windows/msix/app_manifest.xml | 52 ++++ cmd/core-demo/build/windows/msix/template.xml | 54 ++++ cmd/core-demo/build/windows/nsis/project.nsi | 114 +++++++++ .../build/windows/nsis/wails_tools.nsh | 236 ++++++++++++++++++ .../build/windows/wails.exe.manifest | 22 ++ cmd/lthn-desktop/build/Taskfile.yml | 84 +++++++ cmd/lthn-desktop/build/appicon.png | Bin 0 -> 32181 bytes cmd/lthn-desktop/build/apptray.png | Bin 0 -> 32953 bytes cmd/lthn-desktop/build/config.yml | 43 ++++ cmd/lthn-desktop/build/darwin/Info.dev.plist | 47 ++++ cmd/lthn-desktop/build/darwin/Info.plist | 32 +++ cmd/lthn-desktop/build/darwin/Taskfile.yml | 81 ++++++ cmd/lthn-desktop/build/darwin/icons.icns | Bin 0 -> 98035 bytes cmd/lthn-desktop/build/linux/Taskfile.yml | 81 ++++++ .../build/linux/appimage/build.sh | 35 +++ cmd/lthn-desktop/build/linux/desktop | 13 + cmd/lthn-desktop/build/linux/nfpm/nfpm.yaml | 67 +++++ .../build/linux/nfpm/scripts/postinstall.sh | 21 ++ .../build/linux/nfpm/scripts/postremove.sh | 1 + .../build/linux/nfpm/scripts/preinstall.sh | 1 + .../build/linux/nfpm/scripts/preremove.sh | 1 + cmd/lthn-desktop/build/windows/Taskfile.yml | 98 ++++++++ cmd/lthn-desktop/build/windows/icon.ico | Bin 0 -> 12683 bytes cmd/lthn-desktop/build/windows/info.json | 15 ++ .../build/windows/msix/app_manifest.xml | 52 ++++ .../build/windows/msix/template.xml | 54 ++++ .../build/windows/nsis/project.nsi | 114 +++++++++ .../build/windows/nsis/wails_tools.nsh | 236 ++++++++++++++++++ .../build/windows/wails.exe.manifest | 22 ++ 49 files changed, 2198 insertions(+) create mode 100644 cmd/core-demo/build/Taskfile.yml create mode 100644 cmd/core-demo/build/appicon.png create mode 100644 cmd/core-demo/build/apptray.png create mode 100644 cmd/core-demo/build/config.yml create mode 100644 cmd/core-demo/build/darwin/Info.dev.plist create mode 100644 cmd/core-demo/build/darwin/Info.plist create mode 100644 cmd/core-demo/build/darwin/Taskfile.yml create mode 100644 cmd/core-demo/build/darwin/icons.icns create mode 100644 cmd/core-demo/build/linux/Taskfile.yml create mode 100644 cmd/core-demo/build/linux/appimage/build.sh create mode 100644 cmd/core-demo/build/linux/desktop create mode 100644 cmd/core-demo/build/linux/nfpm/nfpm.yaml create mode 100644 cmd/core-demo/build/linux/nfpm/scripts/postinstall.sh create mode 100644 cmd/core-demo/build/linux/nfpm/scripts/postremove.sh create mode 100644 cmd/core-demo/build/linux/nfpm/scripts/preinstall.sh create mode 100644 cmd/core-demo/build/linux/nfpm/scripts/preremove.sh create mode 100644 cmd/core-demo/build/windows/Taskfile.yml create mode 100644 cmd/core-demo/build/windows/icon.ico create mode 100644 cmd/core-demo/build/windows/info.json create mode 100644 cmd/core-demo/build/windows/msix/app_manifest.xml create mode 100644 cmd/core-demo/build/windows/msix/template.xml create mode 100644 cmd/core-demo/build/windows/nsis/project.nsi create mode 100644 cmd/core-demo/build/windows/nsis/wails_tools.nsh create mode 100644 cmd/core-demo/build/windows/wails.exe.manifest create mode 100644 cmd/lthn-desktop/build/Taskfile.yml create mode 100644 cmd/lthn-desktop/build/appicon.png create mode 100644 cmd/lthn-desktop/build/apptray.png create mode 100644 cmd/lthn-desktop/build/config.yml create mode 100644 cmd/lthn-desktop/build/darwin/Info.dev.plist create mode 100644 cmd/lthn-desktop/build/darwin/Info.plist create mode 100644 cmd/lthn-desktop/build/darwin/Taskfile.yml create mode 100644 cmd/lthn-desktop/build/darwin/icons.icns create mode 100644 cmd/lthn-desktop/build/linux/Taskfile.yml create mode 100644 cmd/lthn-desktop/build/linux/appimage/build.sh create mode 100644 cmd/lthn-desktop/build/linux/desktop create mode 100644 cmd/lthn-desktop/build/linux/nfpm/nfpm.yaml create mode 100644 cmd/lthn-desktop/build/linux/nfpm/scripts/postinstall.sh create mode 100644 cmd/lthn-desktop/build/linux/nfpm/scripts/postremove.sh create mode 100644 cmd/lthn-desktop/build/linux/nfpm/scripts/preinstall.sh create mode 100644 cmd/lthn-desktop/build/linux/nfpm/scripts/preremove.sh create mode 100644 cmd/lthn-desktop/build/windows/Taskfile.yml create mode 100644 cmd/lthn-desktop/build/windows/icon.ico create mode 100644 cmd/lthn-desktop/build/windows/info.json create mode 100644 cmd/lthn-desktop/build/windows/msix/app_manifest.xml create mode 100644 cmd/lthn-desktop/build/windows/msix/template.xml create mode 100644 cmd/lthn-desktop/build/windows/nsis/project.nsi create mode 100644 cmd/lthn-desktop/build/windows/nsis/wails_tools.nsh create mode 100644 cmd/lthn-desktop/build/windows/wails.exe.manifest diff --git a/.gitignore b/.gitignore index 7d424d4..b640dfd 100644 --- a/.gitignore +++ b/.gitignore @@ -19,10 +19,12 @@ coverage/ /bin/core # lthn-desktop build artifacts +!cmd/lthn-desktop/build cmd/lthn-desktop/build/bin/ cmd/lthn-desktop/frontend/dist/ cmd/lthn-desktop/frontend.old/dist/ # core-demo build artifacts +!cmd/core-demo/build cmd/core-demo/build/bin/ cmd/core-demo/public/dist/ diff --git a/cmd/core-demo/build/Taskfile.yml b/cmd/core-demo/build/Taskfile.yml new file mode 100644 index 0000000..4fb1eec --- /dev/null +++ b/cmd/core-demo/build/Taskfile.yml @@ -0,0 +1,84 @@ +version: '3' + +tasks: + go:mod:tidy: + summary: Runs `go mod tidy` + internal: true + cmds: + - go mod tidy + + install:public:deps: + summary: Install public dependencies + dir: public + 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 + + build:public: + label: build:public (PRODUCTION={{.PRODUCTION}}) + summary: Build the public folder + dir: public + sources: + - "**/*" + generates: + - dist/**/* + deps: + - task: install:public:deps + - task: generate:bindings + vars: + BUILD_FLAGS: + ref: .BUILD_FLAGS + cmds: + - npm run {{.BUILD_COMMAND}} -q + env: + PRODUCTION: '{{.PRODUCTION | default "false"}}' + vars: + BUILD_COMMAND: '{{if eq .PRODUCTION "true"}}build{{else}}build:dev{{end}}' + + generate:bindings: + label: generate:bindings (BUILD_FLAGS={{.BUILD_FLAGS}}) + summary: Generates bindings + deps: + - task: go:mod:tidy + sources: + - "**/*.[jt]s" + - exclude: public/**/* + - public/bindings/**/* + - "**/*.go" + - go.mod + - go.sum + generates: + - public/bindings/**/* + cmds: + - wails3 generate bindings -d public/bindings -f '{{.BUILD_FLAGS}}' -clean=true -ts + + generate:icons: + summary: Generates Windows `.ico` and Mac `.icns` files from an image + dir: build + sources: + - "appicon.png" + generates: + - "darwin/icons.icns" + - "windows/icon.ico" + cmds: + - wails3 generate icons -input appicon.png -macfilename darwin/icons.icns -windowsfilename windows/icon.ico + + dev:public: + summary: Runs the frontend dev server for live development + dir: public + deps: + - task: install:public:deps + cmds: + - npm start -- --port {{.VITE_PORT | default "4200"}} + + update:build-assets: + summary: Updates the build assets + cmds: + - wails3 update build-assets -name "{{.APP_NAME}}" -binaryname "{{.APP_NAME}}" -config config.yml -dir . diff --git a/cmd/core-demo/build/appicon.png b/cmd/core-demo/build/appicon.png new file mode 100644 index 0000000000000000000000000000000000000000..3a14b0d06bb188dfef4113d7f08302d612713a4a GIT binary patch literal 32181 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 wwhHecO_CP>2BD$qDh? + + + CFBundlePackageType + APPL + CFBundleName + Lethean Desktop + CFBundleExecutable + desktop + CFBundleIdentifier + com.lethean.desktop + CFBundleVersion + 0.1.0 + CFBundleGetInfoString + This is a comment + CFBundleShortVersionString + 0.1.0 + CFBundleIconFile + icons + LSMinimumSystemVersion + 10.15.0 + NSHighResolutionCapable + true + NSHumanReadableCopyright + © EUPL-1.2 Lethean Community + + + NSAppTransportSecurity + + NSAllowsLocalNetworking + + NSAllowsArbitraryLoads + + NSAllowsArbitraryLoadsInWebContent + + + + + NSDownloadsFolderUsageDescription + This app needs access to your Downloads folder to save and load files. + NSDocumentsFolderUsageDescription + This app needs access to your Documents folder to save and load files. + NSDesktopFolderUsageDescription + This app needs access to your Desktop folder to save and load files. + + + diff --git a/cmd/core-demo/build/darwin/Info.plist b/cmd/core-demo/build/darwin/Info.plist new file mode 100644 index 0000000..d4603cd --- /dev/null +++ b/cmd/core-demo/build/darwin/Info.plist @@ -0,0 +1,32 @@ + + + + CFBundlePackageType + APPL + CFBundleName + Lethean Desktop + CFBundleExecutable + desktop + CFBundleIdentifier + com.lethean.desktop + CFBundleVersion + 0.1.0 + CFBundleGetInfoString + This is a comment + CFBundleShortVersionString + 0.1.0 + CFBundleIconFile + icons + LSMinimumSystemVersion + 10.15.0 + NSHighResolutionCapable + true + NSHumanReadableCopyright + © EUPL-1.2 Lethean Community + NSAppTransportSecurity + + NSAllowsLocalNetworking + + + + \ No newline at end of file diff --git a/cmd/core-demo/build/darwin/Taskfile.yml b/cmd/core-demo/build/darwin/Taskfile.yml new file mode 100644 index 0000000..e4ce58e --- /dev/null +++ b/cmd/core-demo/build/darwin/Taskfile.yml @@ -0,0 +1,81 @@ +version: '3' + +includes: + common: ../Taskfile.yml + +tasks: + build: + summary: Creates a production build of the application + deps: + - task: common:go:mod:tidy + - task: common:build:public + vars: + BUILD_FLAGS: + ref: .BUILD_FLAGS + PRODUCTION: + ref: .PRODUCTION + - task: common:generate:icons + cmds: + - go build {{.BUILD_FLAGS}} -o {{.OUTPUT}} + vars: + BUILD_FLAGS: '{{if eq .PRODUCTION "true"}}-tags production -trimpath -buildvcs=false -ldflags="-w -s"{{else}}-buildvcs=false -gcflags=all="-l"{{end}}' + DEFAULT_OUTPUT: '{{.BIN_DIR}}/{{.APP_NAME}}' + OUTPUT: '{{ .OUTPUT | default .DEFAULT_OUTPUT }}' + env: + GOOS: darwin + CGO_ENABLED: 1 + GOARCH: '{{.ARCH | default ARCH}}' + CGO_CFLAGS: "-mmacosx-version-min=26.0" + CGO_LDFLAGS: "-mmacosx-version-min=26.0" + MACOSX_DEPLOYMENT_TARGET: "26.0" + PRODUCTION: '{{.PRODUCTION | default "false"}}' + + build:universal: + summary: Builds darwin universal binary (arm64 + amd64) + deps: + - task: build + vars: + ARCH: amd64 + OUTPUT: "{{.BIN_DIR}}/{{.APP_NAME}}-amd64" + - task: build + vars: + ARCH: arm64 + OUTPUT: "{{.BIN_DIR}}/{{.APP_NAME}}-arm64" + cmds: + - lipo -create -output "{{.BIN_DIR}}/{{.APP_NAME}}" "{{.BIN_DIR}}/{{.APP_NAME}}-amd64" "{{.BIN_DIR}}/{{.APP_NAME}}-arm64" + - rm "{{.BIN_DIR}}/{{.APP_NAME}}-amd64" "{{.BIN_DIR}}/{{.APP_NAME}}-arm64" + + package: + summary: Packages a production build of the application into a `.app` bundle + deps: + - task: build + vars: + PRODUCTION: "true" + cmds: + - task: create:app:bundle + + package:universal: + summary: Packages darwin universal binary (arm64 + amd64) + deps: + - task: build:universal + cmds: + - task: create:app:bundle + + + create:app:bundle: + summary: Creates an `.app` bundle + cmds: + - mkdir -p {{.BIN_DIR}}/{{.APP_NAME}}.app/Contents/{MacOS,Resources} + - cp build/darwin/icons.icns {{.BIN_DIR}}/{{.APP_NAME}}.app/Contents/Resources + - cp {{.BIN_DIR}}/{{.APP_NAME}} {{.BIN_DIR}}/{{.APP_NAME}}.app/Contents/MacOS + - cp build/darwin/Info.plist {{.BIN_DIR}}/{{.APP_NAME}}.app/Contents + - codesign --force --deep --sign - {{.BIN_DIR}}/{{.APP_NAME}}.app + + run: + cmds: + - mkdir -p {{.BIN_DIR}}/{{.APP_NAME}}.dev.app/Contents/{MacOS,Resources} + - cp build/darwin/icons.icns {{.BIN_DIR}}/{{.APP_NAME}}.dev.app/Contents/Resources + - cp {{.BIN_DIR}}/{{.APP_NAME}} {{.BIN_DIR}}/{{.APP_NAME}}.dev.app/Contents/MacOS + - cp build/darwin/Info.dev.plist {{.BIN_DIR}}/{{.APP_NAME}}.dev.app/Contents/Info.plist + - codesign --force --deep --sign - {{.BIN_DIR}}/{{.APP_NAME}}.dev.app + - '{{.BIN_DIR}}/{{.APP_NAME}}.dev.app/Contents/MacOS/{{.APP_NAME}}' diff --git a/cmd/core-demo/build/darwin/icons.icns b/cmd/core-demo/build/darwin/icons.icns new file mode 100644 index 0000000000000000000000000000000000000000..ee075e00e8b51e2473a4995eb92c42f44e031df0 GIT binary patch literal 98035 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 W1M|=u$J0G={VY*Jz54Ht_g?_=bdcKs literal 0 HcmV?d00001 diff --git a/cmd/core-demo/build/linux/Taskfile.yml b/cmd/core-demo/build/linux/Taskfile.yml new file mode 100644 index 0000000..7e78961 --- /dev/null +++ b/cmd/core-demo/build/linux/Taskfile.yml @@ -0,0 +1,81 @@ +version: '3' + +includes: + common: "../Taskfile.yml" + +tasks: + build: + summary: Builds the application for Linux + deps: + - task: common:go:mod:tidy + - task: common:build:public + vars: + BUILD_FLAGS: + ref: .BUILD_FLAGS + PRODUCTION: + ref: .PRODUCTION + - task: common:generate:icons + cmds: + - go build {{.BUILD_FLAGS}} -o bin/{{.APP_NAME}} + vars: + BUILD_FLAGS: '{{if eq .PRODUCTION "true"}}-tags production -trimpath -buildvcs=false -ldflags="-w -s"{{else}}-buildvcs=false -gcflags=all="-l"{{end}}' + env: + GOOS: linux + CGO_ENABLED: 1 + GOARCH: '{{.ARCH | default "amd64"}}' + PRODUCTION: '{{.PRODUCTION | default "false"}}' + + package: + summary: Packages a production build of the application for Linux + deps: + - task: build + vars: + PRODUCTION: "true" + cmds: + - task: create:appimage + - task: create:deb + - task: create:rpm + + create:appimage: + summary: Creates an AppImage + dir: "{{.APP_ROOT}}/build/linux/appimage" + deps: + - task: ":build" + vars: + PRODUCTION: "true" + - task: ":generate:dotdesktop" + cmds: + - cp "{{.APP_ROOT}}/bin/{{.APP_NAME}}" . + - cp "{{.APP_ROOT}}/build/appicon.png" "{{.APP_NAME}}.png" + - wails3 generate appimage -binary "{{.APP_NAME}}" -icon "{{.APP_NAME}}.png" -desktopfile "../{{.APP_NAME}}.desktop" -outputdir "{{.APP_ROOT}}/bin" -builddir build + + create:deb: + summary: Creates a deb package + deps: + - task: build + vars: + PRODUCTION: "true" + cmds: + - task: generate:dotdesktop + - wails3 tool package -name {{.APP_NAME}} -format deb -config build/linux/nfpm/nfpm.yaml -out bin + + create:rpm: + summary: Creates a rpm package + deps: + - task: build + vars: + PRODUCTION: "true" + cmds: + - task: generate:dotdesktop + - wails3 tool package -name {{.APP_NAME}} -format rpm -config build/linux/nfpm/nfpm.yaml -out bin + + generate:dotdesktop: + summary: Generates a `.desktop` file + cmds: + - mkdir -p linux/appimage + - wails3 generate .desktop -name "{{.APP_NAME}}" -exec "{{.APP_NAME}}" -icon "{{.APP_NAME}}" -outputfile "linux/{{.APP_NAME}}.desktop" -categories "Development;" + + run: + dir: "{{.APP_ROOT}}" + cmds: + - "bin/{{.APP_NAME}}" diff --git a/cmd/core-demo/build/linux/appimage/build.sh b/cmd/core-demo/build/linux/appimage/build.sh new file mode 100644 index 0000000..85901c3 --- /dev/null +++ b/cmd/core-demo/build/linux/appimage/build.sh @@ -0,0 +1,35 @@ +#!/usr/bin/env bash +# Copyright (c) 2018-Present Lea Anthony +# SPDX-License-Identifier: MIT + +# Fail script on any error +set -euxo pipefail + +# Define variables +APP_DIR="${APP_NAME}.AppDir" + +# Create AppDir structure +mkdir -p "${APP_DIR}/usr/bin" +cp -r "${APP_BINARY}" "${APP_DIR}/usr/bin/" +cp "${ICON_PATH}" "${APP_DIR}/" +cp "${DESKTOP_FILE}" "${APP_DIR}/" + +if [[ $(uname -m) == *x86_64* ]]; then + # Download linuxdeploy and make it executable + wget -q -4 -N https://github.com/linuxdeploy/linuxdeploy/releases/download/continuous/linuxdeploy-x86_64.AppImage + chmod +x linuxdeploy-x86_64.AppImage + + # Run linuxdeploy to bundle the application + ./linuxdeploy-x86_64.AppImage --appdir "${APP_DIR}" --output appimage +else + # Download linuxdeploy and make it executable (arm64) + wget -q -4 -N https://github.com/linuxdeploy/linuxdeploy/releases/download/continuous/linuxdeploy-aarch64.AppImage + chmod +x linuxdeploy-aarch64.AppImage + + # Run linuxdeploy to bundle the application (arm64) + ./linuxdeploy-aarch64.AppImage --appdir "${APP_DIR}" --output appimage +fi + +# Rename the generated AppImage +mv "${APP_NAME}*.AppImage" "${APP_NAME}.AppImage" + diff --git a/cmd/core-demo/build/linux/desktop b/cmd/core-demo/build/linux/desktop new file mode 100644 index 0000000..62d5b3c --- /dev/null +++ b/cmd/core-demo/build/linux/desktop @@ -0,0 +1,13 @@ +[Desktop Entry] +Version=1.0 +Name=My Product +Comment=My Product Description +# The Exec line includes %u to pass the URL to the application +Exec=/usr/local/bin/desktop %u +Terminal=false +Type=Application +Icon=desktop +Categories=Utility; +StartupWMClass=desktop + + diff --git a/cmd/core-demo/build/linux/nfpm/nfpm.yaml b/cmd/core-demo/build/linux/nfpm/nfpm.yaml new file mode 100644 index 0000000..cd96c38 --- /dev/null +++ b/cmd/core-demo/build/linux/nfpm/nfpm.yaml @@ -0,0 +1,67 @@ +# Feel free to remove those if you don't want/need to use them. +# Make sure to check the documentation at https://nfpm.goreleaser.com +# +# The lines below are called `modelines`. See `:help modeline` + +name: "desktop" +arch: ${GOARCH} +platform: "linux" +version: "0.1.0" +section: "default" +priority: "extra" +maintainer: ${GIT_COMMITTER_NAME} <${GIT_COMMITTER_EMAIL}> +description: "My Product Description" +vendor: "My Company" +homepage: "https://wails.io" +license: "MIT" +release: "1" + +contents: + - src: "./bin/desktop" + dst: "/usr/local/bin/desktop" + - src: "./build/appicon.png" + dst: "/usr/share/icons/hicolor/128x128/apps/desktop.png" + - src: "./build/linux/desktop.desktop" + dst: "/usr/share/applications/desktop.desktop" + +# Default dependencies for Debian 12/Ubuntu 22.04+ with WebKit 4.1 +depends: + - libgtk-3-0 + - libwebkit2gtk-4.1-0 + +# Distribution-specific overrides for different package formats and WebKit versions +overrides: + # RPM packages for RHEL/CentOS/AlmaLinux/Rocky Linux (WebKit 4.0) + rpm: + depends: + - gtk3 + - webkit2gtk4.1 + + # Arch Linux packages (WebKit 4.1) + archlinux: + depends: + - gtk3 + - webkit2gtk-4.1 + +# scripts section to ensure desktop database is updated after install +scripts: + postinstall: "./build/linux/nfpm/scripts/postinstall.sh" + # You can also add preremove, postremove if needed + # preremove: "./build/linux/nfpm/scripts/preremove.sh" + # postremove: "./build/linux/nfpm/scripts/postremove.sh" + +# replaces: +# - foobar +# provides: +# - bar +# depends: +# - gtk3 +# - libwebkit2gtk +# recommends: +# - whatever +# suggests: +# - something-else +# conflicts: +# - not-foo +# - not-bar +# changelog: "changelog.yaml" diff --git a/cmd/core-demo/build/linux/nfpm/scripts/postinstall.sh b/cmd/core-demo/build/linux/nfpm/scripts/postinstall.sh new file mode 100644 index 0000000..4bbb815 --- /dev/null +++ b/cmd/core-demo/build/linux/nfpm/scripts/postinstall.sh @@ -0,0 +1,21 @@ +#!/bin/sh + +# Update desktop database for .desktop file changes +# This makes the application appear in application menus and registers its capabilities. +if command -v update-desktop-database >/dev/null 2>&1; then + echo "Updating desktop database..." + update-desktop-database -q /usr/share/applications +else + echo "Warning: update-desktop-database command not found. Desktop file may not be immediately recognized." >&2 +fi + +# Update MIME database for custom URL schemes (x-scheme-handler) +# This ensures the system knows how to handle your custom protocols. +if command -v update-mime-database >/dev/null 2>&1; then + echo "Updating MIME database..." + update-mime-database -n /usr/share/mime +else + echo "Warning: update-mime-database command not found. Custom URL schemes may not be immediately recognized." >&2 +fi + +exit 0 diff --git a/cmd/core-demo/build/linux/nfpm/scripts/postremove.sh b/cmd/core-demo/build/linux/nfpm/scripts/postremove.sh new file mode 100644 index 0000000..a9bf588 --- /dev/null +++ b/cmd/core-demo/build/linux/nfpm/scripts/postremove.sh @@ -0,0 +1 @@ +#!/bin/bash diff --git a/cmd/core-demo/build/linux/nfpm/scripts/preinstall.sh b/cmd/core-demo/build/linux/nfpm/scripts/preinstall.sh new file mode 100644 index 0000000..a9bf588 --- /dev/null +++ b/cmd/core-demo/build/linux/nfpm/scripts/preinstall.sh @@ -0,0 +1 @@ +#!/bin/bash diff --git a/cmd/core-demo/build/linux/nfpm/scripts/preremove.sh b/cmd/core-demo/build/linux/nfpm/scripts/preremove.sh new file mode 100644 index 0000000..a9bf588 --- /dev/null +++ b/cmd/core-demo/build/linux/nfpm/scripts/preremove.sh @@ -0,0 +1 @@ +#!/bin/bash diff --git a/cmd/core-demo/build/windows/Taskfile.yml b/cmd/core-demo/build/windows/Taskfile.yml new file mode 100644 index 0000000..75c59f5 --- /dev/null +++ b/cmd/core-demo/build/windows/Taskfile.yml @@ -0,0 +1,98 @@ +version: '3' + +includes: + common: ../Taskfile.yml + +tasks: + build: + summary: Builds the application for Windows + deps: + - task: common:go:mod:tidy + - task: common:build:public + vars: + BUILD_FLAGS: + ref: .BUILD_FLAGS + PRODUCTION: + ref: .PRODUCTION + - task: common:generate:icons + cmds: + - task: generate:syso + - go build {{.BUILD_FLAGS}} -o {{.BIN_DIR}}/{{.APP_NAME}}.exe + - cmd: powershell Remove-item *.syso + platforms: [windows] + - cmd: rm -f *.syso + platforms: [linux, darwin] + vars: + BUILD_FLAGS: '{{if eq .PRODUCTION "true"}}-tags production -trimpath -buildvcs=false -ldflags="-w -s -H windowsgui"{{else}}-buildvcs=false -gcflags=all="-l"{{end}}' + env: + GOOS: windows + CGO_ENABLED: 0 + GOARCH: '{{.ARCH | default ARCH}}' + PRODUCTION: '{{.PRODUCTION | default "false"}}' + + package: + summary: Packages a production build of the application + cmds: + - |- + if [ "{{.FORMAT | default "nsis"}}" = "msix" ]; then + task: create:msix:package + else + task: create:nsis:installer + fi + vars: + FORMAT: '{{.FORMAT | default "nsis"}}' + + generate:syso: + summary: Generates Windows `.syso` file + dir: build + cmds: + - wails3 generate syso -arch {{.ARCH}} -icon windows/icon.ico -manifest windows/wails.exe.manifest -info windows/info.json -out ../wails_windows_{{.ARCH}}.syso + vars: + ARCH: '{{.ARCH | default ARCH}}' + + create:nsis:installer: + summary: Creates an NSIS installer + dir: build/windows/nsis + deps: + - task: build + vars: + PRODUCTION: "true" + cmds: + # Create the Microsoft WebView2 bootstrapper if it doesn't exist + - wails3 generate webview2bootstrapper -dir "{{.ROOT_DIR}}/build/windows/nsis" + - makensis -DARG_WAILS_{{.ARG_FLAG}}_BINARY="{{.ROOT_DIR}}/{{.BIN_DIR}}/{{.APP_NAME}}.exe" project.nsi + vars: + ARCH: '{{.ARCH | default ARCH}}' + ARG_FLAG: '{{if eq .ARCH "amd64"}}AMD64{{else}}ARM64{{end}}' + + create:msix:package: + summary: Creates an MSIX package + deps: + - task: build + vars: + PRODUCTION: "true" + cmds: + - |- + wails3 tool msix \ + --config "{{.ROOT_DIR}}/wails.json" \ + --name "{{.APP_NAME}}" \ + --executable "{{.ROOT_DIR}}/{{.BIN_DIR}}/{{.APP_NAME}}.exe" \ + --arch "{{.ARCH}}" \ + --out "{{.ROOT_DIR}}/{{.BIN_DIR}}/{{.APP_NAME}}-{{.ARCH}}.msix" \ + {{if .CERT_PATH}}--cert "{{.CERT_PATH}}"{{end}} \ + {{if .PUBLISHER}}--publisher "{{.PUBLISHER}}"{{end}} \ + {{if .USE_MSIX_TOOL}}--use-msix-tool{{else}}--use-makeappx{{end}} + vars: + ARCH: '{{.ARCH | default ARCH}}' + CERT_PATH: '{{.CERT_PATH | default ""}}' + PUBLISHER: '{{.PUBLISHER | default ""}}' + USE_MSIX_TOOL: '{{.USE_MSIX_TOOL | default "false"}}' + + install:msix:tools: + summary: Installs tools required for MSIX packaging + cmds: + - wails3 tool msix-install-tools + + run: + cmds: + - '{{.BIN_DIR}}/{{.APP_NAME}}.exe' diff --git a/cmd/core-demo/build/windows/icon.ico b/cmd/core-demo/build/windows/icon.ico new file mode 100644 index 0000000000000000000000000000000000000000..83a4f6c867dcc89a41a3b221a3ec62a66574f13e GIT binary patch literal 12683 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 S?y_GEIf!5jE&o5=^}hhrqCNru literal 0 HcmV?d00001 diff --git a/cmd/core-demo/build/windows/info.json b/cmd/core-demo/build/windows/info.json new file mode 100644 index 0000000..850b2b5 --- /dev/null +++ b/cmd/core-demo/build/windows/info.json @@ -0,0 +1,15 @@ +{ + "fixed": { + "file_version": "0.1.0" + }, + "info": { + "0000": { + "ProductVersion": "0.1.0", + "CompanyName": "My Company", + "FileDescription": "My Product Description", + "LegalCopyright": "© now, My Company", + "ProductName": "My Product", + "Comments": "This is a comment" + } + } +} \ No newline at end of file diff --git a/cmd/core-demo/build/windows/msix/app_manifest.xml b/cmd/core-demo/build/windows/msix/app_manifest.xml new file mode 100644 index 0000000..c9b7799 --- /dev/null +++ b/cmd/core-demo/build/windows/msix/app_manifest.xml @@ -0,0 +1,52 @@ + + + + + + + My Product + My Company + My Product Description + Assets\StoreLogo.png + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/cmd/core-demo/build/windows/msix/template.xml b/cmd/core-demo/build/windows/msix/template.xml new file mode 100644 index 0000000..1c005ab --- /dev/null +++ b/cmd/core-demo/build/windows/msix/template.xml @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + + + + + + + + + + false + My Product + My Company + My Product Description + Assets\AppIcon.png + + + + + + + diff --git a/cmd/core-demo/build/windows/nsis/project.nsi b/cmd/core-demo/build/windows/nsis/project.nsi new file mode 100644 index 0000000..d12d8a5 --- /dev/null +++ b/cmd/core-demo/build/windows/nsis/project.nsi @@ -0,0 +1,114 @@ +Unicode true + +#### +## Please note: Template replacements don't work in this file. They are provided with default defines like +## mentioned underneath. +## If the keyword is not defined, "wails_tools.nsh" will populate them. +## If they are defined here, "wails_tools.nsh" will not touch them. This allows you to use this project.nsi manually +## from outside of Wails for debugging and development of the installer. +## +## For development first make a wails nsis build to populate the "wails_tools.nsh": +## > wails build --target windows/amd64 --nsis +## Then you can call makensis on this file with specifying the path to your binary: +## For a AMD64 only installer: +## > makensis -DARG_WAILS_AMD64_BINARY=..\..\bin\app.exe +## For a ARM64 only installer: +## > makensis -DARG_WAILS_ARM64_BINARY=..\..\bin\app.exe +## For a installer with both architectures: +## > makensis -DARG_WAILS_AMD64_BINARY=..\..\bin\app-amd64.exe -DARG_WAILS_ARM64_BINARY=..\..\bin\app-arm64.exe +#### +## The following information is taken from the wails_tools.nsh file, but they can be overwritten here. +#### +## !define INFO_PROJECTNAME "my-project" # Default "desktop" +## !define INFO_COMPANYNAME "My Company" # Default "My Company" +## !define INFO_PRODUCTNAME "My Product Name" # Default "My Product" +## !define INFO_PRODUCTVERSION "1.0.0" # Default "0.1.0" +## !define INFO_COPYRIGHT "(c) Now, My Company" # Default "© now, My Company" +### +## !define PRODUCT_EXECUTABLE "Application.exe" # Default "${INFO_PROJECTNAME}.exe" +## !define UNINST_KEY_NAME "UninstKeyInRegistry" # Default "${INFO_COMPANYNAME}${INFO_PRODUCTNAME}" +#### +## !define REQUEST_EXECUTION_LEVEL "admin" # Default "admin" see also https://nsis.sourceforge.io/Docs/Chapter4.html +#### +## Include the wails tools +#### +!include "wails_tools.nsh" + +# The version information for this two must consist of 4 parts +VIProductVersion "${INFO_PRODUCTVERSION}.0" +VIFileVersion "${INFO_PRODUCTVERSION}.0" + +VIAddVersionKey "CompanyName" "${INFO_COMPANYNAME}" +VIAddVersionKey "FileDescription" "${INFO_PRODUCTNAME} Installer" +VIAddVersionKey "ProductVersion" "${INFO_PRODUCTVERSION}" +VIAddVersionKey "FileVersion" "${INFO_PRODUCTVERSION}" +VIAddVersionKey "LegalCopyright" "${INFO_COPYRIGHT}" +VIAddVersionKey "ProductName" "${INFO_PRODUCTNAME}" + +# Enable HiDPI support. https://nsis.sourceforge.io/Reference/ManifestDPIAware +ManifestDPIAware true + +!include "MUI.nsh" + +!define MUI_ICON "..\icon.ico" +!define MUI_UNICON "..\icon.ico" +# !define MUI_WELCOMEFINISHPAGE_BITMAP "resources\leftimage.bmp" #Include this to add a bitmap on the left side of the Welcome Page. Must be a size of 164x314 +!define MUI_FINISHPAGE_NOAUTOCLOSE # Wait on the INSTFILES page so the user can take a look into the details of the installation steps +!define MUI_ABORTWARNING # This will warn the user if they exit from the installer. + +!insertmacro MUI_PAGE_WELCOME # Welcome to the installer page. +# !insertmacro MUI_PAGE_LICENSE "resources\eula.txt" # Adds a EULA page to the installer +!insertmacro MUI_PAGE_DIRECTORY # In which folder install page. +!insertmacro MUI_PAGE_INSTFILES # Installing page. +!insertmacro MUI_PAGE_FINISH # Finished installation page. + +!insertmacro MUI_UNPAGE_INSTFILES # Uninstalling page + +!insertmacro MUI_LANGUAGE "English" # Set the Language of the installer + +## The following two statements can be used to sign the installer and the uninstaller. The path to the binaries are provided in %1 +#!uninstfinalize 'signtool --file "%1"' +#!finalize 'signtool --file "%1"' + +Name "${INFO_PRODUCTNAME}" +OutFile "..\..\..\bin\${INFO_PROJECTNAME}-${ARCH}-installer.exe" # Name of the installer's file. +InstallDir "$PROGRAMFILES64\${INFO_COMPANYNAME}\${INFO_PRODUCTNAME}" # Default installing folder ($PROGRAMFILES is Program Files folder). +ShowInstDetails show # This will always show the installation details. + +Function .onInit + !insertmacro wails.checkArchitecture +FunctionEnd + +Section + !insertmacro wails.setShellContext + + !insertmacro wails.webview2runtime + + SetOutPath $INSTDIR + + !insertmacro wails.files + + CreateShortcut "$SMPROGRAMS\${INFO_PRODUCTNAME}.lnk" "$INSTDIR\${PRODUCT_EXECUTABLE}" + CreateShortCut "$DESKTOP\${INFO_PRODUCTNAME}.lnk" "$INSTDIR\${PRODUCT_EXECUTABLE}" + + !insertmacro wails.associateFiles + !insertmacro wails.associateCustomProtocols + + !insertmacro wails.writeUninstaller +SectionEnd + +Section "uninstall" + !insertmacro wails.setShellContext + + RMDir /r "$AppData\${PRODUCT_EXECUTABLE}" # Remove the WebView2 DataPath + + RMDir /r $INSTDIR + + Delete "$SMPROGRAMS\${INFO_PRODUCTNAME}.lnk" + Delete "$DESKTOP\${INFO_PRODUCTNAME}.lnk" + + !insertmacro wails.unassociateFiles + !insertmacro wails.unassociateCustomProtocols + + !insertmacro wails.deleteUninstaller +SectionEnd diff --git a/cmd/core-demo/build/windows/nsis/wails_tools.nsh b/cmd/core-demo/build/windows/nsis/wails_tools.nsh new file mode 100644 index 0000000..bcec3d4 --- /dev/null +++ b/cmd/core-demo/build/windows/nsis/wails_tools.nsh @@ -0,0 +1,236 @@ +# DO NOT EDIT - Generated automatically by `wails build` + +!include "x64.nsh" +!include "WinVer.nsh" +!include "FileFunc.nsh" + +!ifndef INFO_PROJECTNAME + !define INFO_PROJECTNAME "desktop" +!endif +!ifndef INFO_COMPANYNAME + !define INFO_COMPANYNAME "My Company" +!endif +!ifndef INFO_PRODUCTNAME + !define INFO_PRODUCTNAME "My Product" +!endif +!ifndef INFO_PRODUCTVERSION + !define INFO_PRODUCTVERSION "0.1.0" +!endif +!ifndef INFO_COPYRIGHT + !define INFO_COPYRIGHT "© now, My Company" +!endif +!ifndef PRODUCT_EXECUTABLE + !define PRODUCT_EXECUTABLE "${INFO_PROJECTNAME}.exe" +!endif +!ifndef UNINST_KEY_NAME + !define UNINST_KEY_NAME "${INFO_COMPANYNAME}${INFO_PRODUCTNAME}" +!endif +!define UNINST_KEY "Software\Microsoft\Windows\CurrentVersion\Uninstall\${UNINST_KEY_NAME}" + +!ifndef REQUEST_EXECUTION_LEVEL + !define REQUEST_EXECUTION_LEVEL "admin" +!endif + +RequestExecutionLevel "${REQUEST_EXECUTION_LEVEL}" + +!ifdef ARG_WAILS_AMD64_BINARY + !define SUPPORTS_AMD64 +!endif + +!ifdef ARG_WAILS_ARM64_BINARY + !define SUPPORTS_ARM64 +!endif + +!ifdef SUPPORTS_AMD64 + !ifdef SUPPORTS_ARM64 + !define ARCH "amd64_arm64" + !else + !define ARCH "amd64" + !endif +!else + !ifdef SUPPORTS_ARM64 + !define ARCH "arm64" + !else + !error "Wails: Undefined ARCH, please provide at least one of ARG_WAILS_AMD64_BINARY or ARG_WAILS_ARM64_BINARY" + !endif +!endif + +!macro wails.checkArchitecture + !ifndef WAILS_WIN10_REQUIRED + !define WAILS_WIN10_REQUIRED "This product is only supported on Windows 10 (Server 2016) and later." + !endif + + !ifndef WAILS_ARCHITECTURE_NOT_SUPPORTED + !define WAILS_ARCHITECTURE_NOT_SUPPORTED "This product can't be installed on the current Windows architecture. Supports: ${ARCH}" + !endif + + ${If} ${AtLeastWin10} + !ifdef SUPPORTS_AMD64 + ${if} ${IsNativeAMD64} + Goto ok + ${EndIf} + !endif + + !ifdef SUPPORTS_ARM64 + ${if} ${IsNativeARM64} + Goto ok + ${EndIf} + !endif + + IfSilent silentArch notSilentArch + silentArch: + SetErrorLevel 65 + Abort + notSilentArch: + MessageBox MB_OK "${WAILS_ARCHITECTURE_NOT_SUPPORTED}" + Quit + ${else} + IfSilent silentWin notSilentWin + silentWin: + SetErrorLevel 64 + Abort + notSilentWin: + MessageBox MB_OK "${WAILS_WIN10_REQUIRED}" + Quit + ${EndIf} + + ok: +!macroend + +!macro wails.files + !ifdef SUPPORTS_AMD64 + ${if} ${IsNativeAMD64} + File "/oname=${PRODUCT_EXECUTABLE}" "${ARG_WAILS_AMD64_BINARY}" + ${EndIf} + !endif + + !ifdef SUPPORTS_ARM64 + ${if} ${IsNativeARM64} + File "/oname=${PRODUCT_EXECUTABLE}" "${ARG_WAILS_ARM64_BINARY}" + ${EndIf} + !endif +!macroend + +!macro wails.writeUninstaller + WriteUninstaller "$INSTDIR\uninstall.exe" + + SetRegView 64 + WriteRegStr HKLM "${UNINST_KEY}" "Publisher" "${INFO_COMPANYNAME}" + WriteRegStr HKLM "${UNINST_KEY}" "DisplayName" "${INFO_PRODUCTNAME}" + WriteRegStr HKLM "${UNINST_KEY}" "DisplayVersion" "${INFO_PRODUCTVERSION}" + WriteRegStr HKLM "${UNINST_KEY}" "DisplayIcon" "$INSTDIR\${PRODUCT_EXECUTABLE}" + WriteRegStr HKLM "${UNINST_KEY}" "UninstallString" "$\"$INSTDIR\uninstall.exe$\"" + WriteRegStr HKLM "${UNINST_KEY}" "QuietUninstallString" "$\"$INSTDIR\uninstall.exe$\" /S" + + ${GetSize} "$INSTDIR" "/S=0K" $0 $1 $2 + IntFmt $0 "0x%08X" $0 + WriteRegDWORD HKLM "${UNINST_KEY}" "EstimatedSize" "$0" +!macroend + +!macro wails.deleteUninstaller + Delete "$INSTDIR\uninstall.exe" + + SetRegView 64 + DeleteRegKey HKLM "${UNINST_KEY}" +!macroend + +!macro wails.setShellContext + ${If} ${REQUEST_EXECUTION_LEVEL} == "admin" + SetShellVarContext all + ${else} + SetShellVarContext current + ${EndIf} +!macroend + +# Install webview2 by launching the bootstrapper +# See https://docs.microsoft.com/en-us/microsoft-edge/webview2/concepts/distribution#online-only-deployment +!macro wails.webview2runtime + !ifndef WAILS_INSTALL_WEBVIEW_DETAILPRINT + !define WAILS_INSTALL_WEBVIEW_DETAILPRINT "Installing: WebView2 Runtime" + !endif + + SetRegView 64 + # If the admin key exists and is not empty then webview2 is already installed + ReadRegStr $0 HKLM "SOFTWARE\WOW6432Node\Microsoft\EdgeUpdate\Clients\{F3017226-FE2A-4295-8BDF-00C3A9A7E4C5}" "pv" + ${If} $0 != "" + Goto ok + ${EndIf} + + ${If} ${REQUEST_EXECUTION_LEVEL} == "user" + # If the installer is run in user level, check the user specific key exists and is not empty then webview2 is already installed + ReadRegStr $0 HKCU "Software\Microsoft\EdgeUpdate\Clients\{F3017226-FE2A-4295-8BDF-00C3A9A7E4C5}" "pv" + ${If} $0 != "" + Goto ok + ${EndIf} + ${EndIf} + + SetDetailsPrint both + DetailPrint "${WAILS_INSTALL_WEBVIEW_DETAILPRINT}" + SetDetailsPrint listonly + + InitPluginsDir + CreateDirectory "$pluginsdir\webview2bootstrapper" + SetOutPath "$pluginsdir\webview2bootstrapper" + File "MicrosoftEdgeWebview2Setup.exe" + ExecWait '"$pluginsdir\webview2bootstrapper\MicrosoftEdgeWebview2Setup.exe" /silent /install' + + SetDetailsPrint both + ok: +!macroend + +# Copy of APP_ASSOCIATE and APP_UNASSOCIATE macros from here https://gist.github.com/nikku/281d0ef126dbc215dd58bfd5b3a5cd5b +!macro APP_ASSOCIATE EXT FILECLASS DESCRIPTION ICON COMMANDTEXT COMMAND + ; Backup the previously associated file class + ReadRegStr $R0 SHELL_CONTEXT "Software\Classes\.${EXT}" "" + WriteRegStr SHELL_CONTEXT "Software\Classes\.${EXT}" "${FILECLASS}_backup" "$R0" + + WriteRegStr SHELL_CONTEXT "Software\Classes\.${EXT}" "" "${FILECLASS}" + + WriteRegStr SHELL_CONTEXT "Software\Classes\${FILECLASS}" "" `${DESCRIPTION}` + WriteRegStr SHELL_CONTEXT "Software\Classes\${FILECLASS}\DefaultIcon" "" `${ICON}` + WriteRegStr SHELL_CONTEXT "Software\Classes\${FILECLASS}\shell" "" "open" + WriteRegStr SHELL_CONTEXT "Software\Classes\${FILECLASS}\shell\open" "" `${COMMANDTEXT}` + WriteRegStr SHELL_CONTEXT "Software\Classes\${FILECLASS}\shell\open\command" "" `${COMMAND}` +!macroend + +!macro APP_UNASSOCIATE EXT FILECLASS + ; Backup the previously associated file class + ReadRegStr $R0 SHELL_CONTEXT "Software\Classes\.${EXT}" `${FILECLASS}_backup` + WriteRegStr SHELL_CONTEXT "Software\Classes\.${EXT}" "" "$R0" + + DeleteRegKey SHELL_CONTEXT `Software\Classes\${FILECLASS}` +!macroend + +!macro wails.associateFiles + ; Create file associations + +!macroend + +!macro wails.unassociateFiles + ; Delete app associations + +!macroend + +!macro CUSTOM_PROTOCOL_ASSOCIATE PROTOCOL DESCRIPTION ICON COMMAND + DeleteRegKey SHELL_CONTEXT "Software\Classes\${PROTOCOL}" + WriteRegStr SHELL_CONTEXT "Software\Classes\${PROTOCOL}" "" "${DESCRIPTION}" + WriteRegStr SHELL_CONTEXT "Software\Classes\${PROTOCOL}" "URL Protocol" "" + WriteRegStr SHELL_CONTEXT "Software\Classes\${PROTOCOL}\DefaultIcon" "" "${ICON}" + WriteRegStr SHELL_CONTEXT "Software\Classes\${PROTOCOL}\shell" "" "" + WriteRegStr SHELL_CONTEXT "Software\Classes\${PROTOCOL}\shell\open" "" "" + WriteRegStr SHELL_CONTEXT "Software\Classes\${PROTOCOL}\shell\open\command" "" "${COMMAND}" +!macroend + +!macro CUSTOM_PROTOCOL_UNASSOCIATE PROTOCOL + DeleteRegKey SHELL_CONTEXT "Software\Classes\${PROTOCOL}" +!macroend + +!macro wails.associateCustomProtocols + ; Create custom protocols associations + +!macroend + +!macro wails.unassociateCustomProtocols + ; Delete app custom protocol associations + +!macroend \ No newline at end of file diff --git a/cmd/core-demo/build/windows/wails.exe.manifest b/cmd/core-demo/build/windows/wails.exe.manifest new file mode 100644 index 0000000..16cd2b0 --- /dev/null +++ b/cmd/core-demo/build/windows/wails.exe.manifest @@ -0,0 +1,22 @@ + + + + + + + + + + + true/pm + permonitorv2,permonitor + + + + + + + + + + \ No newline at end of file diff --git a/cmd/lthn-desktop/build/Taskfile.yml b/cmd/lthn-desktop/build/Taskfile.yml new file mode 100644 index 0000000..aa1e2ca --- /dev/null +++ b/cmd/lthn-desktop/build/Taskfile.yml @@ -0,0 +1,84 @@ +version: '3' + +tasks: + go:mod:tidy: + summary: Runs `go mod tidy` + internal: true + cmds: + - go mod tidy + + install:public:deps: + summary: Install public dependencies + 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 + + build:public: + label: build:public (PRODUCTION={{.PRODUCTION}}) + summary: Build the public folder + dir: frontend + sources: + - "**/*" + generates: + - dist/**/* + deps: + - task: install:public:deps + - task: generate:bindings + vars: + BUILD_FLAGS: + ref: .BUILD_FLAGS + cmds: + - npm run {{.BUILD_COMMAND}} -q + env: + PRODUCTION: '{{.PRODUCTION | default "false"}}' + vars: + BUILD_COMMAND: '{{if eq .PRODUCTION "true"}}build{{else}}build:dev{{end}}' + + generate:bindings: + label: generate:bindings (BUILD_FLAGS={{.BUILD_FLAGS}}) + summary: Generates bindings + deps: + - task: go:mod:tidy + sources: + - "**/*.[jt]s" + - exclude: frontend/**/* + - frontend/bindings/**/* + - "**/*.go" + - go.mod + - go.sum + generates: + - frontend/bindings/**/* + cmds: + - wails3 generate bindings -d frontend/bindings -f '{{.BUILD_FLAGS}}' -clean=true -ts + + generate:icons: + summary: Generates Windows `.ico` and Mac `.icns` files from an image + dir: build + sources: + - "appicon.png" + generates: + - "darwin/icons.icns" + - "windows/icon.ico" + cmds: + - wails3 generate icons -input appicon.png -macfilename darwin/icons.icns -windowsfilename windows/icon.ico + + dev:public: + summary: Runs the frontend dev server for live development + dir: frontend + deps: + - task: install:public:deps + cmds: + - npm start -- --port {{.VITE_PORT | default "4200"}} + + update:build-assets: + summary: Updates the build assets + cmds: + - wails3 update build-assets -name "{{.APP_NAME}}" -binaryname "{{.APP_NAME}}" -config config.yml -dir . diff --git a/cmd/lthn-desktop/build/appicon.png b/cmd/lthn-desktop/build/appicon.png new file mode 100644 index 0000000000000000000000000000000000000000..3a14b0d06bb188dfef4113d7f08302d612713a4a GIT binary patch literal 32181 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 wwhHecO_CP>2BD$qDh? + + + CFBundlePackageType + APPL + CFBundleName + Lethean Desktop + CFBundleExecutable + desktop + CFBundleIdentifier + com.lethean.desktop + CFBundleVersion + 0.1.0 + CFBundleGetInfoString + This is a comment + CFBundleShortVersionString + 0.1.0 + CFBundleIconFile + icons + LSMinimumSystemVersion + 10.15.0 + NSHighResolutionCapable + true + NSHumanReadableCopyright + © EUPL-1.2 Lethean Community + + + NSAppTransportSecurity + + NSAllowsLocalNetworking + + NSAllowsArbitraryLoads + + NSAllowsArbitraryLoadsInWebContent + + + + + NSDownloadsFolderUsageDescription + This app needs access to your Downloads folder to save and load files. + NSDocumentsFolderUsageDescription + This app needs access to your Documents folder to save and load files. + NSDesktopFolderUsageDescription + This app needs access to your Desktop folder to save and load files. + + + diff --git a/cmd/lthn-desktop/build/darwin/Info.plist b/cmd/lthn-desktop/build/darwin/Info.plist new file mode 100644 index 0000000..d4603cd --- /dev/null +++ b/cmd/lthn-desktop/build/darwin/Info.plist @@ -0,0 +1,32 @@ + + + + CFBundlePackageType + APPL + CFBundleName + Lethean Desktop + CFBundleExecutable + desktop + CFBundleIdentifier + com.lethean.desktop + CFBundleVersion + 0.1.0 + CFBundleGetInfoString + This is a comment + CFBundleShortVersionString + 0.1.0 + CFBundleIconFile + icons + LSMinimumSystemVersion + 10.15.0 + NSHighResolutionCapable + true + NSHumanReadableCopyright + © EUPL-1.2 Lethean Community + NSAppTransportSecurity + + NSAllowsLocalNetworking + + + + \ No newline at end of file diff --git a/cmd/lthn-desktop/build/darwin/Taskfile.yml b/cmd/lthn-desktop/build/darwin/Taskfile.yml new file mode 100644 index 0000000..e4ce58e --- /dev/null +++ b/cmd/lthn-desktop/build/darwin/Taskfile.yml @@ -0,0 +1,81 @@ +version: '3' + +includes: + common: ../Taskfile.yml + +tasks: + build: + summary: Creates a production build of the application + deps: + - task: common:go:mod:tidy + - task: common:build:public + vars: + BUILD_FLAGS: + ref: .BUILD_FLAGS + PRODUCTION: + ref: .PRODUCTION + - task: common:generate:icons + cmds: + - go build {{.BUILD_FLAGS}} -o {{.OUTPUT}} + vars: + BUILD_FLAGS: '{{if eq .PRODUCTION "true"}}-tags production -trimpath -buildvcs=false -ldflags="-w -s"{{else}}-buildvcs=false -gcflags=all="-l"{{end}}' + DEFAULT_OUTPUT: '{{.BIN_DIR}}/{{.APP_NAME}}' + OUTPUT: '{{ .OUTPUT | default .DEFAULT_OUTPUT }}' + env: + GOOS: darwin + CGO_ENABLED: 1 + GOARCH: '{{.ARCH | default ARCH}}' + CGO_CFLAGS: "-mmacosx-version-min=26.0" + CGO_LDFLAGS: "-mmacosx-version-min=26.0" + MACOSX_DEPLOYMENT_TARGET: "26.0" + PRODUCTION: '{{.PRODUCTION | default "false"}}' + + build:universal: + summary: Builds darwin universal binary (arm64 + amd64) + deps: + - task: build + vars: + ARCH: amd64 + OUTPUT: "{{.BIN_DIR}}/{{.APP_NAME}}-amd64" + - task: build + vars: + ARCH: arm64 + OUTPUT: "{{.BIN_DIR}}/{{.APP_NAME}}-arm64" + cmds: + - lipo -create -output "{{.BIN_DIR}}/{{.APP_NAME}}" "{{.BIN_DIR}}/{{.APP_NAME}}-amd64" "{{.BIN_DIR}}/{{.APP_NAME}}-arm64" + - rm "{{.BIN_DIR}}/{{.APP_NAME}}-amd64" "{{.BIN_DIR}}/{{.APP_NAME}}-arm64" + + package: + summary: Packages a production build of the application into a `.app` bundle + deps: + - task: build + vars: + PRODUCTION: "true" + cmds: + - task: create:app:bundle + + package:universal: + summary: Packages darwin universal binary (arm64 + amd64) + deps: + - task: build:universal + cmds: + - task: create:app:bundle + + + create:app:bundle: + summary: Creates an `.app` bundle + cmds: + - mkdir -p {{.BIN_DIR}}/{{.APP_NAME}}.app/Contents/{MacOS,Resources} + - cp build/darwin/icons.icns {{.BIN_DIR}}/{{.APP_NAME}}.app/Contents/Resources + - cp {{.BIN_DIR}}/{{.APP_NAME}} {{.BIN_DIR}}/{{.APP_NAME}}.app/Contents/MacOS + - cp build/darwin/Info.plist {{.BIN_DIR}}/{{.APP_NAME}}.app/Contents + - codesign --force --deep --sign - {{.BIN_DIR}}/{{.APP_NAME}}.app + + run: + cmds: + - mkdir -p {{.BIN_DIR}}/{{.APP_NAME}}.dev.app/Contents/{MacOS,Resources} + - cp build/darwin/icons.icns {{.BIN_DIR}}/{{.APP_NAME}}.dev.app/Contents/Resources + - cp {{.BIN_DIR}}/{{.APP_NAME}} {{.BIN_DIR}}/{{.APP_NAME}}.dev.app/Contents/MacOS + - cp build/darwin/Info.dev.plist {{.BIN_DIR}}/{{.APP_NAME}}.dev.app/Contents/Info.plist + - codesign --force --deep --sign - {{.BIN_DIR}}/{{.APP_NAME}}.dev.app + - '{{.BIN_DIR}}/{{.APP_NAME}}.dev.app/Contents/MacOS/{{.APP_NAME}}' diff --git a/cmd/lthn-desktop/build/darwin/icons.icns b/cmd/lthn-desktop/build/darwin/icons.icns new file mode 100644 index 0000000000000000000000000000000000000000..ee075e00e8b51e2473a4995eb92c42f44e031df0 GIT binary patch literal 98035 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 W1M|=u$J0G={VY*Jz54Ht_g?_=bdcKs literal 0 HcmV?d00001 diff --git a/cmd/lthn-desktop/build/linux/Taskfile.yml b/cmd/lthn-desktop/build/linux/Taskfile.yml new file mode 100644 index 0000000..7e78961 --- /dev/null +++ b/cmd/lthn-desktop/build/linux/Taskfile.yml @@ -0,0 +1,81 @@ +version: '3' + +includes: + common: "../Taskfile.yml" + +tasks: + build: + summary: Builds the application for Linux + deps: + - task: common:go:mod:tidy + - task: common:build:public + vars: + BUILD_FLAGS: + ref: .BUILD_FLAGS + PRODUCTION: + ref: .PRODUCTION + - task: common:generate:icons + cmds: + - go build {{.BUILD_FLAGS}} -o bin/{{.APP_NAME}} + vars: + BUILD_FLAGS: '{{if eq .PRODUCTION "true"}}-tags production -trimpath -buildvcs=false -ldflags="-w -s"{{else}}-buildvcs=false -gcflags=all="-l"{{end}}' + env: + GOOS: linux + CGO_ENABLED: 1 + GOARCH: '{{.ARCH | default "amd64"}}' + PRODUCTION: '{{.PRODUCTION | default "false"}}' + + package: + summary: Packages a production build of the application for Linux + deps: + - task: build + vars: + PRODUCTION: "true" + cmds: + - task: create:appimage + - task: create:deb + - task: create:rpm + + create:appimage: + summary: Creates an AppImage + dir: "{{.APP_ROOT}}/build/linux/appimage" + deps: + - task: ":build" + vars: + PRODUCTION: "true" + - task: ":generate:dotdesktop" + cmds: + - cp "{{.APP_ROOT}}/bin/{{.APP_NAME}}" . + - cp "{{.APP_ROOT}}/build/appicon.png" "{{.APP_NAME}}.png" + - wails3 generate appimage -binary "{{.APP_NAME}}" -icon "{{.APP_NAME}}.png" -desktopfile "../{{.APP_NAME}}.desktop" -outputdir "{{.APP_ROOT}}/bin" -builddir build + + create:deb: + summary: Creates a deb package + deps: + - task: build + vars: + PRODUCTION: "true" + cmds: + - task: generate:dotdesktop + - wails3 tool package -name {{.APP_NAME}} -format deb -config build/linux/nfpm/nfpm.yaml -out bin + + create:rpm: + summary: Creates a rpm package + deps: + - task: build + vars: + PRODUCTION: "true" + cmds: + - task: generate:dotdesktop + - wails3 tool package -name {{.APP_NAME}} -format rpm -config build/linux/nfpm/nfpm.yaml -out bin + + generate:dotdesktop: + summary: Generates a `.desktop` file + cmds: + - mkdir -p linux/appimage + - wails3 generate .desktop -name "{{.APP_NAME}}" -exec "{{.APP_NAME}}" -icon "{{.APP_NAME}}" -outputfile "linux/{{.APP_NAME}}.desktop" -categories "Development;" + + run: + dir: "{{.APP_ROOT}}" + cmds: + - "bin/{{.APP_NAME}}" diff --git a/cmd/lthn-desktop/build/linux/appimage/build.sh b/cmd/lthn-desktop/build/linux/appimage/build.sh new file mode 100644 index 0000000..85901c3 --- /dev/null +++ b/cmd/lthn-desktop/build/linux/appimage/build.sh @@ -0,0 +1,35 @@ +#!/usr/bin/env bash +# Copyright (c) 2018-Present Lea Anthony +# SPDX-License-Identifier: MIT + +# Fail script on any error +set -euxo pipefail + +# Define variables +APP_DIR="${APP_NAME}.AppDir" + +# Create AppDir structure +mkdir -p "${APP_DIR}/usr/bin" +cp -r "${APP_BINARY}" "${APP_DIR}/usr/bin/" +cp "${ICON_PATH}" "${APP_DIR}/" +cp "${DESKTOP_FILE}" "${APP_DIR}/" + +if [[ $(uname -m) == *x86_64* ]]; then + # Download linuxdeploy and make it executable + wget -q -4 -N https://github.com/linuxdeploy/linuxdeploy/releases/download/continuous/linuxdeploy-x86_64.AppImage + chmod +x linuxdeploy-x86_64.AppImage + + # Run linuxdeploy to bundle the application + ./linuxdeploy-x86_64.AppImage --appdir "${APP_DIR}" --output appimage +else + # Download linuxdeploy and make it executable (arm64) + wget -q -4 -N https://github.com/linuxdeploy/linuxdeploy/releases/download/continuous/linuxdeploy-aarch64.AppImage + chmod +x linuxdeploy-aarch64.AppImage + + # Run linuxdeploy to bundle the application (arm64) + ./linuxdeploy-aarch64.AppImage --appdir "${APP_DIR}" --output appimage +fi + +# Rename the generated AppImage +mv "${APP_NAME}*.AppImage" "${APP_NAME}.AppImage" + diff --git a/cmd/lthn-desktop/build/linux/desktop b/cmd/lthn-desktop/build/linux/desktop new file mode 100644 index 0000000..62d5b3c --- /dev/null +++ b/cmd/lthn-desktop/build/linux/desktop @@ -0,0 +1,13 @@ +[Desktop Entry] +Version=1.0 +Name=My Product +Comment=My Product Description +# The Exec line includes %u to pass the URL to the application +Exec=/usr/local/bin/desktop %u +Terminal=false +Type=Application +Icon=desktop +Categories=Utility; +StartupWMClass=desktop + + diff --git a/cmd/lthn-desktop/build/linux/nfpm/nfpm.yaml b/cmd/lthn-desktop/build/linux/nfpm/nfpm.yaml new file mode 100644 index 0000000..cd96c38 --- /dev/null +++ b/cmd/lthn-desktop/build/linux/nfpm/nfpm.yaml @@ -0,0 +1,67 @@ +# Feel free to remove those if you don't want/need to use them. +# Make sure to check the documentation at https://nfpm.goreleaser.com +# +# The lines below are called `modelines`. See `:help modeline` + +name: "desktop" +arch: ${GOARCH} +platform: "linux" +version: "0.1.0" +section: "default" +priority: "extra" +maintainer: ${GIT_COMMITTER_NAME} <${GIT_COMMITTER_EMAIL}> +description: "My Product Description" +vendor: "My Company" +homepage: "https://wails.io" +license: "MIT" +release: "1" + +contents: + - src: "./bin/desktop" + dst: "/usr/local/bin/desktop" + - src: "./build/appicon.png" + dst: "/usr/share/icons/hicolor/128x128/apps/desktop.png" + - src: "./build/linux/desktop.desktop" + dst: "/usr/share/applications/desktop.desktop" + +# Default dependencies for Debian 12/Ubuntu 22.04+ with WebKit 4.1 +depends: + - libgtk-3-0 + - libwebkit2gtk-4.1-0 + +# Distribution-specific overrides for different package formats and WebKit versions +overrides: + # RPM packages for RHEL/CentOS/AlmaLinux/Rocky Linux (WebKit 4.0) + rpm: + depends: + - gtk3 + - webkit2gtk4.1 + + # Arch Linux packages (WebKit 4.1) + archlinux: + depends: + - gtk3 + - webkit2gtk-4.1 + +# scripts section to ensure desktop database is updated after install +scripts: + postinstall: "./build/linux/nfpm/scripts/postinstall.sh" + # You can also add preremove, postremove if needed + # preremove: "./build/linux/nfpm/scripts/preremove.sh" + # postremove: "./build/linux/nfpm/scripts/postremove.sh" + +# replaces: +# - foobar +# provides: +# - bar +# depends: +# - gtk3 +# - libwebkit2gtk +# recommends: +# - whatever +# suggests: +# - something-else +# conflicts: +# - not-foo +# - not-bar +# changelog: "changelog.yaml" diff --git a/cmd/lthn-desktop/build/linux/nfpm/scripts/postinstall.sh b/cmd/lthn-desktop/build/linux/nfpm/scripts/postinstall.sh new file mode 100644 index 0000000..4bbb815 --- /dev/null +++ b/cmd/lthn-desktop/build/linux/nfpm/scripts/postinstall.sh @@ -0,0 +1,21 @@ +#!/bin/sh + +# Update desktop database for .desktop file changes +# This makes the application appear in application menus and registers its capabilities. +if command -v update-desktop-database >/dev/null 2>&1; then + echo "Updating desktop database..." + update-desktop-database -q /usr/share/applications +else + echo "Warning: update-desktop-database command not found. Desktop file may not be immediately recognized." >&2 +fi + +# Update MIME database for custom URL schemes (x-scheme-handler) +# This ensures the system knows how to handle your custom protocols. +if command -v update-mime-database >/dev/null 2>&1; then + echo "Updating MIME database..." + update-mime-database -n /usr/share/mime +else + echo "Warning: update-mime-database command not found. Custom URL schemes may not be immediately recognized." >&2 +fi + +exit 0 diff --git a/cmd/lthn-desktop/build/linux/nfpm/scripts/postremove.sh b/cmd/lthn-desktop/build/linux/nfpm/scripts/postremove.sh new file mode 100644 index 0000000..a9bf588 --- /dev/null +++ b/cmd/lthn-desktop/build/linux/nfpm/scripts/postremove.sh @@ -0,0 +1 @@ +#!/bin/bash diff --git a/cmd/lthn-desktop/build/linux/nfpm/scripts/preinstall.sh b/cmd/lthn-desktop/build/linux/nfpm/scripts/preinstall.sh new file mode 100644 index 0000000..a9bf588 --- /dev/null +++ b/cmd/lthn-desktop/build/linux/nfpm/scripts/preinstall.sh @@ -0,0 +1 @@ +#!/bin/bash diff --git a/cmd/lthn-desktop/build/linux/nfpm/scripts/preremove.sh b/cmd/lthn-desktop/build/linux/nfpm/scripts/preremove.sh new file mode 100644 index 0000000..a9bf588 --- /dev/null +++ b/cmd/lthn-desktop/build/linux/nfpm/scripts/preremove.sh @@ -0,0 +1 @@ +#!/bin/bash diff --git a/cmd/lthn-desktop/build/windows/Taskfile.yml b/cmd/lthn-desktop/build/windows/Taskfile.yml new file mode 100644 index 0000000..75c59f5 --- /dev/null +++ b/cmd/lthn-desktop/build/windows/Taskfile.yml @@ -0,0 +1,98 @@ +version: '3' + +includes: + common: ../Taskfile.yml + +tasks: + build: + summary: Builds the application for Windows + deps: + - task: common:go:mod:tidy + - task: common:build:public + vars: + BUILD_FLAGS: + ref: .BUILD_FLAGS + PRODUCTION: + ref: .PRODUCTION + - task: common:generate:icons + cmds: + - task: generate:syso + - go build {{.BUILD_FLAGS}} -o {{.BIN_DIR}}/{{.APP_NAME}}.exe + - cmd: powershell Remove-item *.syso + platforms: [windows] + - cmd: rm -f *.syso + platforms: [linux, darwin] + vars: + BUILD_FLAGS: '{{if eq .PRODUCTION "true"}}-tags production -trimpath -buildvcs=false -ldflags="-w -s -H windowsgui"{{else}}-buildvcs=false -gcflags=all="-l"{{end}}' + env: + GOOS: windows + CGO_ENABLED: 0 + GOARCH: '{{.ARCH | default ARCH}}' + PRODUCTION: '{{.PRODUCTION | default "false"}}' + + package: + summary: Packages a production build of the application + cmds: + - |- + if [ "{{.FORMAT | default "nsis"}}" = "msix" ]; then + task: create:msix:package + else + task: create:nsis:installer + fi + vars: + FORMAT: '{{.FORMAT | default "nsis"}}' + + generate:syso: + summary: Generates Windows `.syso` file + dir: build + cmds: + - wails3 generate syso -arch {{.ARCH}} -icon windows/icon.ico -manifest windows/wails.exe.manifest -info windows/info.json -out ../wails_windows_{{.ARCH}}.syso + vars: + ARCH: '{{.ARCH | default ARCH}}' + + create:nsis:installer: + summary: Creates an NSIS installer + dir: build/windows/nsis + deps: + - task: build + vars: + PRODUCTION: "true" + cmds: + # Create the Microsoft WebView2 bootstrapper if it doesn't exist + - wails3 generate webview2bootstrapper -dir "{{.ROOT_DIR}}/build/windows/nsis" + - makensis -DARG_WAILS_{{.ARG_FLAG}}_BINARY="{{.ROOT_DIR}}/{{.BIN_DIR}}/{{.APP_NAME}}.exe" project.nsi + vars: + ARCH: '{{.ARCH | default ARCH}}' + ARG_FLAG: '{{if eq .ARCH "amd64"}}AMD64{{else}}ARM64{{end}}' + + create:msix:package: + summary: Creates an MSIX package + deps: + - task: build + vars: + PRODUCTION: "true" + cmds: + - |- + wails3 tool msix \ + --config "{{.ROOT_DIR}}/wails.json" \ + --name "{{.APP_NAME}}" \ + --executable "{{.ROOT_DIR}}/{{.BIN_DIR}}/{{.APP_NAME}}.exe" \ + --arch "{{.ARCH}}" \ + --out "{{.ROOT_DIR}}/{{.BIN_DIR}}/{{.APP_NAME}}-{{.ARCH}}.msix" \ + {{if .CERT_PATH}}--cert "{{.CERT_PATH}}"{{end}} \ + {{if .PUBLISHER}}--publisher "{{.PUBLISHER}}"{{end}} \ + {{if .USE_MSIX_TOOL}}--use-msix-tool{{else}}--use-makeappx{{end}} + vars: + ARCH: '{{.ARCH | default ARCH}}' + CERT_PATH: '{{.CERT_PATH | default ""}}' + PUBLISHER: '{{.PUBLISHER | default ""}}' + USE_MSIX_TOOL: '{{.USE_MSIX_TOOL | default "false"}}' + + install:msix:tools: + summary: Installs tools required for MSIX packaging + cmds: + - wails3 tool msix-install-tools + + run: + cmds: + - '{{.BIN_DIR}}/{{.APP_NAME}}.exe' diff --git a/cmd/lthn-desktop/build/windows/icon.ico b/cmd/lthn-desktop/build/windows/icon.ico new file mode 100644 index 0000000000000000000000000000000000000000..83a4f6c867dcc89a41a3b221a3ec62a66574f13e GIT binary patch literal 12683 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 S?y_GEIf!5jE&o5=^}hhrqCNru literal 0 HcmV?d00001 diff --git a/cmd/lthn-desktop/build/windows/info.json b/cmd/lthn-desktop/build/windows/info.json new file mode 100644 index 0000000..850b2b5 --- /dev/null +++ b/cmd/lthn-desktop/build/windows/info.json @@ -0,0 +1,15 @@ +{ + "fixed": { + "file_version": "0.1.0" + }, + "info": { + "0000": { + "ProductVersion": "0.1.0", + "CompanyName": "My Company", + "FileDescription": "My Product Description", + "LegalCopyright": "© now, My Company", + "ProductName": "My Product", + "Comments": "This is a comment" + } + } +} \ No newline at end of file diff --git a/cmd/lthn-desktop/build/windows/msix/app_manifest.xml b/cmd/lthn-desktop/build/windows/msix/app_manifest.xml new file mode 100644 index 0000000..c9b7799 --- /dev/null +++ b/cmd/lthn-desktop/build/windows/msix/app_manifest.xml @@ -0,0 +1,52 @@ + + + + + + + My Product + My Company + My Product Description + Assets\StoreLogo.png + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/cmd/lthn-desktop/build/windows/msix/template.xml b/cmd/lthn-desktop/build/windows/msix/template.xml new file mode 100644 index 0000000..1c005ab --- /dev/null +++ b/cmd/lthn-desktop/build/windows/msix/template.xml @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + + + + + + + + + + false + My Product + My Company + My Product Description + Assets\AppIcon.png + + + + + + + diff --git a/cmd/lthn-desktop/build/windows/nsis/project.nsi b/cmd/lthn-desktop/build/windows/nsis/project.nsi new file mode 100644 index 0000000..d12d8a5 --- /dev/null +++ b/cmd/lthn-desktop/build/windows/nsis/project.nsi @@ -0,0 +1,114 @@ +Unicode true + +#### +## Please note: Template replacements don't work in this file. They are provided with default defines like +## mentioned underneath. +## If the keyword is not defined, "wails_tools.nsh" will populate them. +## If they are defined here, "wails_tools.nsh" will not touch them. This allows you to use this project.nsi manually +## from outside of Wails for debugging and development of the installer. +## +## For development first make a wails nsis build to populate the "wails_tools.nsh": +## > wails build --target windows/amd64 --nsis +## Then you can call makensis on this file with specifying the path to your binary: +## For a AMD64 only installer: +## > makensis -DARG_WAILS_AMD64_BINARY=..\..\bin\app.exe +## For a ARM64 only installer: +## > makensis -DARG_WAILS_ARM64_BINARY=..\..\bin\app.exe +## For a installer with both architectures: +## > makensis -DARG_WAILS_AMD64_BINARY=..\..\bin\app-amd64.exe -DARG_WAILS_ARM64_BINARY=..\..\bin\app-arm64.exe +#### +## The following information is taken from the wails_tools.nsh file, but they can be overwritten here. +#### +## !define INFO_PROJECTNAME "my-project" # Default "desktop" +## !define INFO_COMPANYNAME "My Company" # Default "My Company" +## !define INFO_PRODUCTNAME "My Product Name" # Default "My Product" +## !define INFO_PRODUCTVERSION "1.0.0" # Default "0.1.0" +## !define INFO_COPYRIGHT "(c) Now, My Company" # Default "© now, My Company" +### +## !define PRODUCT_EXECUTABLE "Application.exe" # Default "${INFO_PROJECTNAME}.exe" +## !define UNINST_KEY_NAME "UninstKeyInRegistry" # Default "${INFO_COMPANYNAME}${INFO_PRODUCTNAME}" +#### +## !define REQUEST_EXECUTION_LEVEL "admin" # Default "admin" see also https://nsis.sourceforge.io/Docs/Chapter4.html +#### +## Include the wails tools +#### +!include "wails_tools.nsh" + +# The version information for this two must consist of 4 parts +VIProductVersion "${INFO_PRODUCTVERSION}.0" +VIFileVersion "${INFO_PRODUCTVERSION}.0" + +VIAddVersionKey "CompanyName" "${INFO_COMPANYNAME}" +VIAddVersionKey "FileDescription" "${INFO_PRODUCTNAME} Installer" +VIAddVersionKey "ProductVersion" "${INFO_PRODUCTVERSION}" +VIAddVersionKey "FileVersion" "${INFO_PRODUCTVERSION}" +VIAddVersionKey "LegalCopyright" "${INFO_COPYRIGHT}" +VIAddVersionKey "ProductName" "${INFO_PRODUCTNAME}" + +# Enable HiDPI support. https://nsis.sourceforge.io/Reference/ManifestDPIAware +ManifestDPIAware true + +!include "MUI.nsh" + +!define MUI_ICON "..\icon.ico" +!define MUI_UNICON "..\icon.ico" +# !define MUI_WELCOMEFINISHPAGE_BITMAP "resources\leftimage.bmp" #Include this to add a bitmap on the left side of the Welcome Page. Must be a size of 164x314 +!define MUI_FINISHPAGE_NOAUTOCLOSE # Wait on the INSTFILES page so the user can take a look into the details of the installation steps +!define MUI_ABORTWARNING # This will warn the user if they exit from the installer. + +!insertmacro MUI_PAGE_WELCOME # Welcome to the installer page. +# !insertmacro MUI_PAGE_LICENSE "resources\eula.txt" # Adds a EULA page to the installer +!insertmacro MUI_PAGE_DIRECTORY # In which folder install page. +!insertmacro MUI_PAGE_INSTFILES # Installing page. +!insertmacro MUI_PAGE_FINISH # Finished installation page. + +!insertmacro MUI_UNPAGE_INSTFILES # Uninstalling page + +!insertmacro MUI_LANGUAGE "English" # Set the Language of the installer + +## The following two statements can be used to sign the installer and the uninstaller. The path to the binaries are provided in %1 +#!uninstfinalize 'signtool --file "%1"' +#!finalize 'signtool --file "%1"' + +Name "${INFO_PRODUCTNAME}" +OutFile "..\..\..\bin\${INFO_PROJECTNAME}-${ARCH}-installer.exe" # Name of the installer's file. +InstallDir "$PROGRAMFILES64\${INFO_COMPANYNAME}\${INFO_PRODUCTNAME}" # Default installing folder ($PROGRAMFILES is Program Files folder). +ShowInstDetails show # This will always show the installation details. + +Function .onInit + !insertmacro wails.checkArchitecture +FunctionEnd + +Section + !insertmacro wails.setShellContext + + !insertmacro wails.webview2runtime + + SetOutPath $INSTDIR + + !insertmacro wails.files + + CreateShortcut "$SMPROGRAMS\${INFO_PRODUCTNAME}.lnk" "$INSTDIR\${PRODUCT_EXECUTABLE}" + CreateShortCut "$DESKTOP\${INFO_PRODUCTNAME}.lnk" "$INSTDIR\${PRODUCT_EXECUTABLE}" + + !insertmacro wails.associateFiles + !insertmacro wails.associateCustomProtocols + + !insertmacro wails.writeUninstaller +SectionEnd + +Section "uninstall" + !insertmacro wails.setShellContext + + RMDir /r "$AppData\${PRODUCT_EXECUTABLE}" # Remove the WebView2 DataPath + + RMDir /r $INSTDIR + + Delete "$SMPROGRAMS\${INFO_PRODUCTNAME}.lnk" + Delete "$DESKTOP\${INFO_PRODUCTNAME}.lnk" + + !insertmacro wails.unassociateFiles + !insertmacro wails.unassociateCustomProtocols + + !insertmacro wails.deleteUninstaller +SectionEnd diff --git a/cmd/lthn-desktop/build/windows/nsis/wails_tools.nsh b/cmd/lthn-desktop/build/windows/nsis/wails_tools.nsh new file mode 100644 index 0000000..bcec3d4 --- /dev/null +++ b/cmd/lthn-desktop/build/windows/nsis/wails_tools.nsh @@ -0,0 +1,236 @@ +# DO NOT EDIT - Generated automatically by `wails build` + +!include "x64.nsh" +!include "WinVer.nsh" +!include "FileFunc.nsh" + +!ifndef INFO_PROJECTNAME + !define INFO_PROJECTNAME "desktop" +!endif +!ifndef INFO_COMPANYNAME + !define INFO_COMPANYNAME "My Company" +!endif +!ifndef INFO_PRODUCTNAME + !define INFO_PRODUCTNAME "My Product" +!endif +!ifndef INFO_PRODUCTVERSION + !define INFO_PRODUCTVERSION "0.1.0" +!endif +!ifndef INFO_COPYRIGHT + !define INFO_COPYRIGHT "© now, My Company" +!endif +!ifndef PRODUCT_EXECUTABLE + !define PRODUCT_EXECUTABLE "${INFO_PROJECTNAME}.exe" +!endif +!ifndef UNINST_KEY_NAME + !define UNINST_KEY_NAME "${INFO_COMPANYNAME}${INFO_PRODUCTNAME}" +!endif +!define UNINST_KEY "Software\Microsoft\Windows\CurrentVersion\Uninstall\${UNINST_KEY_NAME}" + +!ifndef REQUEST_EXECUTION_LEVEL + !define REQUEST_EXECUTION_LEVEL "admin" +!endif + +RequestExecutionLevel "${REQUEST_EXECUTION_LEVEL}" + +!ifdef ARG_WAILS_AMD64_BINARY + !define SUPPORTS_AMD64 +!endif + +!ifdef ARG_WAILS_ARM64_BINARY + !define SUPPORTS_ARM64 +!endif + +!ifdef SUPPORTS_AMD64 + !ifdef SUPPORTS_ARM64 + !define ARCH "amd64_arm64" + !else + !define ARCH "amd64" + !endif +!else + !ifdef SUPPORTS_ARM64 + !define ARCH "arm64" + !else + !error "Wails: Undefined ARCH, please provide at least one of ARG_WAILS_AMD64_BINARY or ARG_WAILS_ARM64_BINARY" + !endif +!endif + +!macro wails.checkArchitecture + !ifndef WAILS_WIN10_REQUIRED + !define WAILS_WIN10_REQUIRED "This product is only supported on Windows 10 (Server 2016) and later." + !endif + + !ifndef WAILS_ARCHITECTURE_NOT_SUPPORTED + !define WAILS_ARCHITECTURE_NOT_SUPPORTED "This product can't be installed on the current Windows architecture. Supports: ${ARCH}" + !endif + + ${If} ${AtLeastWin10} + !ifdef SUPPORTS_AMD64 + ${if} ${IsNativeAMD64} + Goto ok + ${EndIf} + !endif + + !ifdef SUPPORTS_ARM64 + ${if} ${IsNativeARM64} + Goto ok + ${EndIf} + !endif + + IfSilent silentArch notSilentArch + silentArch: + SetErrorLevel 65 + Abort + notSilentArch: + MessageBox MB_OK "${WAILS_ARCHITECTURE_NOT_SUPPORTED}" + Quit + ${else} + IfSilent silentWin notSilentWin + silentWin: + SetErrorLevel 64 + Abort + notSilentWin: + MessageBox MB_OK "${WAILS_WIN10_REQUIRED}" + Quit + ${EndIf} + + ok: +!macroend + +!macro wails.files + !ifdef SUPPORTS_AMD64 + ${if} ${IsNativeAMD64} + File "/oname=${PRODUCT_EXECUTABLE}" "${ARG_WAILS_AMD64_BINARY}" + ${EndIf} + !endif + + !ifdef SUPPORTS_ARM64 + ${if} ${IsNativeARM64} + File "/oname=${PRODUCT_EXECUTABLE}" "${ARG_WAILS_ARM64_BINARY}" + ${EndIf} + !endif +!macroend + +!macro wails.writeUninstaller + WriteUninstaller "$INSTDIR\uninstall.exe" + + SetRegView 64 + WriteRegStr HKLM "${UNINST_KEY}" "Publisher" "${INFO_COMPANYNAME}" + WriteRegStr HKLM "${UNINST_KEY}" "DisplayName" "${INFO_PRODUCTNAME}" + WriteRegStr HKLM "${UNINST_KEY}" "DisplayVersion" "${INFO_PRODUCTVERSION}" + WriteRegStr HKLM "${UNINST_KEY}" "DisplayIcon" "$INSTDIR\${PRODUCT_EXECUTABLE}" + WriteRegStr HKLM "${UNINST_KEY}" "UninstallString" "$\"$INSTDIR\uninstall.exe$\"" + WriteRegStr HKLM "${UNINST_KEY}" "QuietUninstallString" "$\"$INSTDIR\uninstall.exe$\" /S" + + ${GetSize} "$INSTDIR" "/S=0K" $0 $1 $2 + IntFmt $0 "0x%08X" $0 + WriteRegDWORD HKLM "${UNINST_KEY}" "EstimatedSize" "$0" +!macroend + +!macro wails.deleteUninstaller + Delete "$INSTDIR\uninstall.exe" + + SetRegView 64 + DeleteRegKey HKLM "${UNINST_KEY}" +!macroend + +!macro wails.setShellContext + ${If} ${REQUEST_EXECUTION_LEVEL} == "admin" + SetShellVarContext all + ${else} + SetShellVarContext current + ${EndIf} +!macroend + +# Install webview2 by launching the bootstrapper +# See https://docs.microsoft.com/en-us/microsoft-edge/webview2/concepts/distribution#online-only-deployment +!macro wails.webview2runtime + !ifndef WAILS_INSTALL_WEBVIEW_DETAILPRINT + !define WAILS_INSTALL_WEBVIEW_DETAILPRINT "Installing: WebView2 Runtime" + !endif + + SetRegView 64 + # If the admin key exists and is not empty then webview2 is already installed + ReadRegStr $0 HKLM "SOFTWARE\WOW6432Node\Microsoft\EdgeUpdate\Clients\{F3017226-FE2A-4295-8BDF-00C3A9A7E4C5}" "pv" + ${If} $0 != "" + Goto ok + ${EndIf} + + ${If} ${REQUEST_EXECUTION_LEVEL} == "user" + # If the installer is run in user level, check the user specific key exists and is not empty then webview2 is already installed + ReadRegStr $0 HKCU "Software\Microsoft\EdgeUpdate\Clients\{F3017226-FE2A-4295-8BDF-00C3A9A7E4C5}" "pv" + ${If} $0 != "" + Goto ok + ${EndIf} + ${EndIf} + + SetDetailsPrint both + DetailPrint "${WAILS_INSTALL_WEBVIEW_DETAILPRINT}" + SetDetailsPrint listonly + + InitPluginsDir + CreateDirectory "$pluginsdir\webview2bootstrapper" + SetOutPath "$pluginsdir\webview2bootstrapper" + File "MicrosoftEdgeWebview2Setup.exe" + ExecWait '"$pluginsdir\webview2bootstrapper\MicrosoftEdgeWebview2Setup.exe" /silent /install' + + SetDetailsPrint both + ok: +!macroend + +# Copy of APP_ASSOCIATE and APP_UNASSOCIATE macros from here https://gist.github.com/nikku/281d0ef126dbc215dd58bfd5b3a5cd5b +!macro APP_ASSOCIATE EXT FILECLASS DESCRIPTION ICON COMMANDTEXT COMMAND + ; Backup the previously associated file class + ReadRegStr $R0 SHELL_CONTEXT "Software\Classes\.${EXT}" "" + WriteRegStr SHELL_CONTEXT "Software\Classes\.${EXT}" "${FILECLASS}_backup" "$R0" + + WriteRegStr SHELL_CONTEXT "Software\Classes\.${EXT}" "" "${FILECLASS}" + + WriteRegStr SHELL_CONTEXT "Software\Classes\${FILECLASS}" "" `${DESCRIPTION}` + WriteRegStr SHELL_CONTEXT "Software\Classes\${FILECLASS}\DefaultIcon" "" `${ICON}` + WriteRegStr SHELL_CONTEXT "Software\Classes\${FILECLASS}\shell" "" "open" + WriteRegStr SHELL_CONTEXT "Software\Classes\${FILECLASS}\shell\open" "" `${COMMANDTEXT}` + WriteRegStr SHELL_CONTEXT "Software\Classes\${FILECLASS}\shell\open\command" "" `${COMMAND}` +!macroend + +!macro APP_UNASSOCIATE EXT FILECLASS + ; Backup the previously associated file class + ReadRegStr $R0 SHELL_CONTEXT "Software\Classes\.${EXT}" `${FILECLASS}_backup` + WriteRegStr SHELL_CONTEXT "Software\Classes\.${EXT}" "" "$R0" + + DeleteRegKey SHELL_CONTEXT `Software\Classes\${FILECLASS}` +!macroend + +!macro wails.associateFiles + ; Create file associations + +!macroend + +!macro wails.unassociateFiles + ; Delete app associations + +!macroend + +!macro CUSTOM_PROTOCOL_ASSOCIATE PROTOCOL DESCRIPTION ICON COMMAND + DeleteRegKey SHELL_CONTEXT "Software\Classes\${PROTOCOL}" + WriteRegStr SHELL_CONTEXT "Software\Classes\${PROTOCOL}" "" "${DESCRIPTION}" + WriteRegStr SHELL_CONTEXT "Software\Classes\${PROTOCOL}" "URL Protocol" "" + WriteRegStr SHELL_CONTEXT "Software\Classes\${PROTOCOL}\DefaultIcon" "" "${ICON}" + WriteRegStr SHELL_CONTEXT "Software\Classes\${PROTOCOL}\shell" "" "" + WriteRegStr SHELL_CONTEXT "Software\Classes\${PROTOCOL}\shell\open" "" "" + WriteRegStr SHELL_CONTEXT "Software\Classes\${PROTOCOL}\shell\open\command" "" "${COMMAND}" +!macroend + +!macro CUSTOM_PROTOCOL_UNASSOCIATE PROTOCOL + DeleteRegKey SHELL_CONTEXT "Software\Classes\${PROTOCOL}" +!macroend + +!macro wails.associateCustomProtocols + ; Create custom protocols associations + +!macroend + +!macro wails.unassociateCustomProtocols + ; Delete app custom protocol associations + +!macroend \ No newline at end of file diff --git a/cmd/lthn-desktop/build/windows/wails.exe.manifest b/cmd/lthn-desktop/build/windows/wails.exe.manifest new file mode 100644 index 0000000..16cd2b0 --- /dev/null +++ b/cmd/lthn-desktop/build/windows/wails.exe.manifest @@ -0,0 +1,22 @@ + + + + + + + + + + + true/pm + permonitorv2,permonitor + + + + + + + + + + \ No newline at end of file