25 lines
1.5 KiB
Markdown
25 lines
1.5 KiB
Markdown
# Contract: Application Binary
|
|
|
|
Version: 1.0
|
|
|
|
## Purpose
|
|
|
|
Правила сборки, упаковки ресурсов и первого запуска Go-приложений.
|
|
|
|
See `README.md` for deployment examples and a sample config template.
|
|
|
|
## Rules
|
|
|
|
- When the agent deploys or runs commands on a host, the application lives in `/appdata/<appname>/`.
|
|
- Do not suggest alternate default install paths such as `/opt`, `/usr/local/bin`, or `~/`.
|
|
- The binary must be self-contained. Templates, static assets, config templates, and DB migrations are embedded with `//go:embed` or an equivalent application-owned mechanism.
|
|
- The application creates its config automatically on first run if it does not exist yet.
|
|
- Default config path:
|
|
- single-user mode: `~/.config/<appname>/config.yaml`
|
|
- server or multi-user mode: `/etc/<appname>/config.yaml` or next to the binary
|
|
- Config stores application settings and centralized DB credentials only. It must not store user data, cache/state, or SQLite path configuration.
|
|
- For local SQLite mode, the database file lives next to the config and its path is derived by the application, not configured separately.
|
|
- On first run with no config, the application must create the config, print its path, exit 0, and stop. It must not continue startup with a fresh placeholder config.
|
|
- The binary must not depend on the caller's working directory.
|
|
- Build with `CGO_ENABLED=0` when possible. Enable CGO only when the chosen storage/runtime actually requires it, such as SQLite drivers that need CGO.
|