# 08 — Build & Release ## CLI flags Defined in `cmd/logpile/main.go`: | Flag | Default | Purpose | |------|---------|---------| | `--port` | `8082` | HTTP server port | | `--file` | empty | Preload archive file | | `--version` | `false` | Print version and exit | | `--no-browser` | `false` | Do not auto-open browser | | `--hold-on-crash` | `true` on Windows | Keep console open after fatal crash | ## Common commands ```bash make build make build-all make test make fmt make update-pci-ids ``` Notes: - `make build` outputs `bin/logpile` - `make build-all` builds the supported cross-platform binaries - `make build` and `make build-all` run `scripts/update-pci-ids.sh --best-effort` unless `SKIP_PCI_IDS_UPDATE=1` ## PCI IDs Source submodule: `third_party/pciids` Embedded copy: `internal/parser/vendors/pciids/pci.ids` Typical setup after clone: ```bash git submodule update --init third_party/pciids ``` ## Release script Run: ```bash ./scripts/release.sh ``` Current behavior: 1. Reads version from `git describe --tags` 2. Refuses a dirty tree unless `ALLOW_DIRTY=1` 3. Sets stable Go cache/toolchain environment 4. Creates `releases/{VERSION}/` 5. Creates a release-notes template if missing 6. Builds `darwin-arm64` and `windows-amd64` 7. Packages any already-present binaries from `bin/` 8. Generates `SHA256SUMS.txt` Important limitation: - `scripts/release.sh` does not run `make build-all` for you - if you want Linux or additional macOS archives in the release directory, build them before running the script Toolchain note: - `scripts/release.sh` defaults `GOTOOLCHAIN=local` to use the already installed Go toolchain and avoid implicit network downloads during release builds - if you intentionally want another toolchain, pass it explicitly, for example `GOTOOLCHAIN=go1.24.0 ./scripts/release.sh` ## Run locally ```bash ./bin/logpile ./bin/logpile --port 9090 ./bin/logpile --no-browser ./bin/logpile --version ``` ## macOS Gatekeeper ```bash xattr -d com.apple.quarantine /path/to/logpile-darwin-arm64 ```