From b256a77d0c46a28f942aa0e9941ad7994e564729 Mon Sep 17 00:00:00 2001 From: Joe Julian Date: Wed, 8 Apr 2026 23:36:22 -0700 Subject: [PATCH] Split command entrypoint from app package --- .gitea/workflows/ci.yml | 2 +- .gitignore | 2 +- APK.md | 2 +- Makefile | 4 ++-- README.md | 6 +++--- android_share_android.go | 2 +- android_share_stub.go | 2 +- main.go => app.go | 4 ++-- buildapk/config.go | 4 ++-- buildapk/config_test.go | 2 +- clipboard_gio.go | 2 +- clipboard_gio_test.go | 2 +- cmd/keepassgo/main.go | 7 +++++++ main_test.go | 2 +- packaging/archlinux/keepassgo-git/PKGBUILD.tmpl | 2 +- ui_accessibility.go | 2 +- ui_api.go | 2 +- ui_branding.go | 2 +- ui_editor.go | 2 +- ui_forms.go | 2 +- ui_header_dropdown.go | 2 +- ui_keyboard.go | 2 +- ui_layout_header.go | 2 +- ui_layout_lifecycle.go | 2 +- ui_preferences.go | 2 +- ui_shortcuts.go | 2 +- ui_sync_dialog.go | 2 +- ui_sync_menu_model.go | 2 +- 28 files changed, 39 insertions(+), 32 deletions(-) rename main.go => app.go (99%) create mode 100644 cmd/keepassgo/main.go diff --git a/.gitea/workflows/ci.yml b/.gitea/workflows/ci.yml index 8eb6b95..1f6e61d 100644 --- a/.gitea/workflows/ci.yml +++ b/.gitea/workflows/ci.yml @@ -128,7 +128,7 @@ jobs: fi out="${DIST_DIR}/keepassgo-${goos}-${goarch}${ext}" GOOS="${goos}" GOARCH="${goarch}" CGO_ENABLED="${cgo_enabled}" \ - go build -ldflags "-X main.appVersion=${app_version}" -o "${out}" . + go build -ldflags "-X git.julianfamily.org/keepassgo.appVersion=${app_version}" -o "${out}" ./cmd/keepassgo done - name: Build APK diff --git a/.gitignore b/.gitignore index c7b1e68..17e2268 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,6 @@ build/ *.apk -keepassgo +/keepassgo android/keepassgo-android.jar packaging/archlinux/keepassgo-git/*.pkg.tar.zst packaging/archlinux/keepassgo-git/PKGBUILD diff --git a/APK.md b/APK.md index c6bf885..6cb6606 100644 --- a/APK.md +++ b/APK.md @@ -29,7 +29,7 @@ Installed machine prerequisites expected by this repo: The repo tracks `gogio` as a Go tool, so the build runs through: ```sh -go tool gogio -target android ... +go tool gogio -target android ./cmd/keepassgo ... ``` The Android build uses the branded icon asset at: diff --git a/Makefile b/Makefile index 53ecf78..2473faf 100644 --- a/Makefile +++ b/Makefile @@ -6,7 +6,7 @@ APP_ID ?= org.julianfamily.keepassgo APK_OUT ?= build/keepassgo.apk APK_VERSION ?= 0.1.0.1 APP_VERSION ?= $(shell git describe --tags --always --dirty 2>/dev/null || echo dev) -GO_LDFLAGS ?= -X main.appVersion=$(APP_VERSION) +GO_LDFLAGS ?= -X git.julianfamily.org/keepassgo.appVersion=$(APP_VERSION) ANDROID_MIN_SDK ?= 28 ANDROID_TARGET_SDK ?= 35 SIGNKEY ?= @@ -48,7 +48,7 @@ apk: android/keepassgo-android.jar -minsdk $(ANDROID_MIN_SDK) \ -targetsdk $(ANDROID_TARGET_SDK) \ -icon assets/keepassgo-icon.png \ - . + ./cmd/keepassgo android/keepassgo-android.jar: $(shell find androidsrc -type f | sort) @test -x "$(JAVA_HOME)/bin/javac" || { echo "JAVA_HOME must point to a working JDK install"; exit 1; } diff --git a/README.md b/README.md index e6e5c99..0691450 100644 --- a/README.md +++ b/README.md @@ -38,14 +38,14 @@ KDBX security and KDF compatibility notes are documented in [`docs/kdbx-compatib Desktop build: ```bash -go build ./... +go build ./cmd/keepassgo ``` By default, build outputs stamp the app version from `git describe --tags --always --dirty`. You can override the version shown in KeePassGO with: ```bash -go build -ldflags "-X main.appVersion=v0.0.1" ./... +go build -ldflags "-X git.julianfamily.org/keepassgo.appVersion=v0.0.1" ./cmd/keepassgo ``` ## Arch Linux Package @@ -89,7 +89,7 @@ go get -tool gioui.org/cmd/gogio@latest Package: ```bash -go tool gogio -target android -icon assets/keepassgo-icon.png . +go tool gogio -target android -icon assets/keepassgo-icon.png ./cmd/keepassgo ``` You will need the Android SDK and NDK installed and configured for real device or release packaging. diff --git a/android_share_android.go b/android_share_android.go index 865520e..56022b7 100644 --- a/android_share_android.go +++ b/android_share_android.go @@ -1,6 +1,6 @@ //go:build android -package main +package keepassgo /* #cgo CFLAGS: -Werror diff --git a/android_share_stub.go b/android_share_stub.go index 80a101f..a57b5e7 100644 --- a/android_share_stub.go +++ b/android_share_stub.go @@ -1,6 +1,6 @@ //go:build !android -package main +package keepassgo func newPlatformVaultSharer(goos string) vaultSharer { return nil diff --git a/main.go b/app.go similarity index 99% rename from main.go rename to app.go index fbe0339..1f70b59 100644 --- a/main.go +++ b/app.go @@ -1,4 +1,4 @@ -package main +package keepassgo import ( "crypto/sha256" @@ -6917,7 +6917,7 @@ func fill(c color.NRGBA) layout.Widget { } } -func main() { +func Main() { mode := flag.String("mode", "", "window mode: desktop or phone") stateDir := flag.String("state-dir", "", "directory for KeePassGO state such as recent-vault history and default save targets") grpcAddr := flag.String("grpc-addr", "", "address for the local gRPC API listener; use 'off' to disable") diff --git a/buildapk/config.go b/buildapk/config.go index 310bf47..6658884 100644 --- a/buildapk/config.go +++ b/buildapk/config.go @@ -13,7 +13,7 @@ const ( DefaultAppID = "org.julianfamily.keepassgo" DefaultAPKOut = "build/keepassgo.apk" DefaultVersion = "0.1.0.1" - DefaultLdflags = "-X main.appVersion=dev" + DefaultLdflags = "-X git.julianfamily.org/keepassgo.appVersion=dev" DefaultMinSDK = "28" DefaultTargetSDK = "35" DefaultIconPath = "assets/keepassgo-icon.png" @@ -58,7 +58,7 @@ func (c Config) GogioArgs() []string { "-minsdk", c.MinSDK, "-targetsdk", c.TargetSDK, "-icon", c.IconPath, - ".", + "./cmd/keepassgo", } } diff --git a/buildapk/config_test.go b/buildapk/config_test.go index 7d6d6b1..f36c791 100644 --- a/buildapk/config_test.go +++ b/buildapk/config_test.go @@ -21,7 +21,7 @@ func TestDefaultConfigGogioArgs(t *testing.T) { "-minsdk", DefaultMinSDK, "-targetsdk", DefaultTargetSDK, "-icon", DefaultIconPath, - ".", + "./cmd/keepassgo", } if got := cfg.GogioArgs(); !slices.Equal(got, want) { diff --git a/clipboard_gio.go b/clipboard_gio.go index 08a1c37..fd2c1fb 100644 --- a/clipboard_gio.go +++ b/clipboard_gio.go @@ -1,4 +1,4 @@ -package main +package keepassgo import ( "io" diff --git a/clipboard_gio_test.go b/clipboard_gio_test.go index aa4dcff..800e88a 100644 --- a/clipboard_gio_test.go +++ b/clipboard_gio_test.go @@ -1,4 +1,4 @@ -package main +package keepassgo import ( "slices" diff --git a/cmd/keepassgo/main.go b/cmd/keepassgo/main.go new file mode 100644 index 0000000..c0387a2 --- /dev/null +++ b/cmd/keepassgo/main.go @@ -0,0 +1,7 @@ +package main + +import keepassgo "git.julianfamily.org/keepassgo" + +func main() { + keepassgo.Main() +} diff --git a/main_test.go b/main_test.go index 002d28b..a8427a7 100644 --- a/main_test.go +++ b/main_test.go @@ -1,4 +1,4 @@ -package main +package keepassgo import ( "bytes" diff --git a/packaging/archlinux/keepassgo-git/PKGBUILD.tmpl b/packaging/archlinux/keepassgo-git/PKGBUILD.tmpl index 358b845..83624c3 100644 --- a/packaging/archlinux/keepassgo-git/PKGBUILD.tmpl +++ b/packaging/archlinux/keepassgo-git/PKGBUILD.tmpl @@ -41,7 +41,7 @@ build() { export GOFLAGS="-trimpath" local app_version app_version="$(git describe --tags --always --dirty)" - go build -ldflags "-X main.appVersion=${app_version}" -o keepassgo . + go build -ldflags "-X git.julianfamily.org/keepassgo.appVersion=${app_version}" -o keepassgo ./cmd/keepassgo } package() { diff --git a/ui_accessibility.go b/ui_accessibility.go index 4165fdf..625eef0 100644 --- a/ui_accessibility.go +++ b/ui_accessibility.go @@ -1,4 +1,4 @@ -package main +package keepassgo import ( "fmt" diff --git a/ui_api.go b/ui_api.go index 178bb53..1ea02fb 100644 --- a/ui_api.go +++ b/ui_api.go @@ -1,4 +1,4 @@ -package main +package keepassgo import ( "fmt" diff --git a/ui_branding.go b/ui_branding.go index 379d418..6ab5804 100644 --- a/ui_branding.go +++ b/ui_branding.go @@ -1,4 +1,4 @@ -package main +package keepassgo import ( "image" diff --git a/ui_editor.go b/ui_editor.go index 9083869..f7d8a00 100644 --- a/ui_editor.go +++ b/ui_editor.go @@ -1,4 +1,4 @@ -package main +package keepassgo import ( "fmt" diff --git a/ui_forms.go b/ui_forms.go index 28be39e..b057199 100644 --- a/ui_forms.go +++ b/ui_forms.go @@ -1,4 +1,4 @@ -package main +package keepassgo import ( "fmt" diff --git a/ui_header_dropdown.go b/ui_header_dropdown.go index 4e1bbe2..94c6c00 100644 --- a/ui_header_dropdown.go +++ b/ui_header_dropdown.go @@ -1,4 +1,4 @@ -package main +package keepassgo import ( "image" diff --git a/ui_keyboard.go b/ui_keyboard.go index 9dfdc26..1af147d 100644 --- a/ui_keyboard.go +++ b/ui_keyboard.go @@ -1,4 +1,4 @@ -package main +package keepassgo import ( "fmt" diff --git a/ui_layout_header.go b/ui_layout_header.go index 8961231..8becd22 100644 --- a/ui_layout_header.go +++ b/ui_layout_header.go @@ -1,4 +1,4 @@ -package main +package keepassgo import ( "image" diff --git a/ui_layout_lifecycle.go b/ui_layout_lifecycle.go index 25b67ac..f21f680 100644 --- a/ui_layout_lifecycle.go +++ b/ui_layout_lifecycle.go @@ -1,4 +1,4 @@ -package main +package keepassgo import ( "gioui.org/layout" diff --git a/ui_preferences.go b/ui_preferences.go index e1715ca..13324f8 100644 --- a/ui_preferences.go +++ b/ui_preferences.go @@ -1,4 +1,4 @@ -package main +package keepassgo import ( "encoding/json" diff --git a/ui_shortcuts.go b/ui_shortcuts.go index 9d8e304..fb4554d 100644 --- a/ui_shortcuts.go +++ b/ui_shortcuts.go @@ -1,4 +1,4 @@ -package main +package keepassgo import ( "strings" diff --git a/ui_sync_dialog.go b/ui_sync_dialog.go index bb794fd..bf847a1 100644 --- a/ui_sync_dialog.go +++ b/ui_sync_dialog.go @@ -1,4 +1,4 @@ -package main +package keepassgo import ( "image/color" diff --git a/ui_sync_menu_model.go b/ui_sync_menu_model.go index 34893be..8ccc03c 100644 --- a/ui_sync_menu_model.go +++ b/ui_sync_menu_model.go @@ -1,4 +1,4 @@ -package main +package keepassgo import ( "runtime"