5 Commits

Author SHA1 Message Date
brasse
45307cd8f5 Don't panic on broken pipe (e.g. npmctl list-hosts | head)
All checks were successful
release / build-release (push) Successful in 11m9s
Reset SIGPIPE to SIG_DFL at startup so writing to a closed stdout
terminates the process quietly like normal Unix tools, instead of
panicking with "failed printing to stdout: Broken pipe".

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011YPrEZVBpPVoCRyJz2exkZ
2026-07-04 16:33:55 +02:00
brasse
1d71265b84 CI: fix release-notes heredoc breaking workflow YAML
All checks were successful
release / build-release (push) Successful in 3m48s
The inline heredoc for the release body put unindented lines (backticks,
fences) at column 1 inside the `run: |` block scalar, which is invalid
YAML — so Gitea silently scheduled no run. Move the release notes to
.gitea/release-notes.md and cat it instead.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011YPrEZVBpPVoCRyJz2exkZ
2026-07-04 14:42:24 +02:00
brasse
e45fb9b4fd Add one-line installer + install.sh, richer release notes
install.sh detects arch, downloads the latest binary and installs it to PATH
(like a `curl … | sh` installer). The release workflow now ships install.sh as
an asset and PATCHes the release body with the one-line install command, so the
release page shows how to install with a single command. README/wiki updated.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011YPrEZVBpPVoCRyJz2exkZ
2026-07-04 14:38:27 +02:00
brasse
35f5a86acd CI: install libc6-dev-amd64-cross for x86_64 ring cross-build
All checks were successful
release / build-release (push) Successful in 3m45s
The x86_64 cross build failed compiling ring's C (curve25519.c): the cross
gcc couldn't find bits/libc-header-start.h because only the compiler
(gcc-x86-64-linux-gnu) was installed, not the amd64 target libc headers.
Add libc6-dev-amd64-cross so the cross sysroot has them.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011YPrEZVBpPVoCRyJz2exkZ
latest
2026-07-04 13:51:11 +02:00
brasse
b1154aea9d Initial npmctl: NPM CLI + generic API client
Some checks failed
release / build-release (push) Failing after 4m23s
Rust CLI for Nginx Proxy Manager via its API, with sudo-like token auth
(login prompts for password, caches only a short-lived token, never the
password) and a generic `api` command to talk to any HTTP API.

Commands: login/logout/status, list-hosts/get-host/find, add-proxy,
enable/disable/delete-host, list-certs/add-cert/renew-cert, dump (JSON
backup), apply (declarative), and generic api (method/url/header/data/
auth-key/insecure).

Includes clap help + help-on-bad-input, Gitea Actions release workflow
(arm64 native + x64 cross), VS Code build task (-> ./build), README and
MIT license.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011YPrEZVBpPVoCRyJz2exkZ
2026-07-04 13:06:35 +02:00