Make the Vault gitea creds path selectable
agentpr always read gitea/creds/unkin-agent from a bare const, so a service like repospawner could not run it as its own Gitea identity. - Replace the GiteaCredsPath const with a function: GITEA_CREDS_PATH when set, otherwise gitea/creds/<AGENT_LOGIN>. Unset env still resolves to gitea/creds/unkin-agent, so existing callers are unchanged. - Thread the creds path through fetchGiteaToken/readGiteaCreds instead of reading a package-level const, and report it in the error messages. - Make agentpr's help text login-agnostic and document both variables.
This commit is contained in:
@@ -3,8 +3,10 @@
|
||||
## Project Overview
|
||||
|
||||
This repo ships several Gitea-automation CLIs in one RPM (`agent-tools`). They
|
||||
act as the `unkin-agent` user by minting a scoped Gitea token from Vault, so
|
||||
actions are attributed to the agent rather than to whoever runs the tool.
|
||||
act as an agent user (`unkin-agent` by default) by minting a scoped Gitea token
|
||||
from Vault, so actions are attributed to the agent rather than to whoever runs
|
||||
the tool. Setting `AGENT_LOGIN` selects a different agent identity, so a service
|
||||
like repospawner can run these tools as itself.
|
||||
|
||||
- **`agentpr`** — create pull requests and post PR comments as `unkin-agent`
|
||||
(fixes the "tea posts as Ben" attribution problem). Subcommands:
|
||||
@@ -32,7 +34,7 @@ cmd/agentws/main.go # agentws CLI (new / list / rm / clean / token / creden
|
||||
cmd/agentvault/main.go # agentvault CLI (seed-outpost)
|
||||
internal/agent/ # shared plumbing:
|
||||
token.go # env config + in-process Gitea-token cache
|
||||
vault.go # AppRole login + read gitea/creds/unkin-agent
|
||||
vault.go # AppRole login + read the gitea creds path
|
||||
gitea.go # Gitea REST client (PR create/get, comments, status, whoami)
|
||||
parse.go # owner/repo#N and owner/repo parsing
|
||||
watch.go # PRState snapshot + MeaningfulChange comparison
|
||||
@@ -57,7 +59,9 @@ All tools call `agent.GiteaToken()`, which (once per process):
|
||||
|
||||
1. AppRole login: `POST $VAULT_ADDR/v1/auth/approle/login` with `role_id` only
|
||||
(no `secret_id`) → `client_token`.
|
||||
2. `GET $VAULT_ADDR/v1/gitea/creds/unkin-agent` with `X-Vault-Token` → `.data.token`.
|
||||
2. `GET $VAULT_ADDR/v1/<creds path>` with `X-Vault-Token` → `.data.token`, where
|
||||
the creds path is `GITEA_CREDS_PATH` if set, else `gitea/creds/$AGENT_LOGIN`
|
||||
(so unset env still reads `gitea/creds/unkin-agent`).
|
||||
|
||||
Config via env (all have defaults):
|
||||
|
||||
@@ -66,7 +70,8 @@ Config via env (all have defaults):
|
||||
| `VAULT_ADDR` | `https://vault.service.consul:8200` | Vault/OpenBao address |
|
||||
| `AGENT_APPROLE_ROLE_ID` | built-in default | AppRole role_id (overridable) |
|
||||
| `GITEA_URL` | `https://git.unkin.net` | Gitea base URL |
|
||||
| `AGENT_LOGIN` | `unkin-agent` | login whose comments watchpr ignores; agentws git identity |
|
||||
| `AGENT_LOGIN` | `unkin-agent` | agent identity: selects `gitea/creds/<login>`; login whose comments watchpr ignores; agentws git identity |
|
||||
| `GITEA_CREDS_PATH` | `gitea/creds/$AGENT_LOGIN` | Vault path minting the Gitea token (wins over `AGENT_LOGIN`) |
|
||||
| `AGENTWS_SRC_ROOT` | `~/src/prodenv` | agentws source-of-truth checkout root |
|
||||
| `AGENTWS_ROOT` | `~/.cache/agentws` | agentws worktree root |
|
||||
| `AGENTWS_OWNER` | `unkin` | Gitea org that owns agentws-managed repos |
|
||||
@@ -77,7 +82,7 @@ Config via env (all have defaults):
|
||||
Gitea tokens are ~1h ephemeral, so `agentws` never bakes one into a remote URL
|
||||
or config. `agentws token` prints a fresh token; `agentws credential get`
|
||||
implements the git credential protocol (reads the key=value request on stdin,
|
||||
and for the configured Gitea host only emits `username=unkin-agent` +
|
||||
and for the configured Gitea host only emits `username=$AGENT_LOGIN` +
|
||||
`password=<fresh token>`). `agentws new` wires this per worktree — it enables
|
||||
`extensions.worktreeConfig` on the repo once, then writes `user.name`,
|
||||
`user.email` and `credential.helper = !<agentws> credential` to the
|
||||
|
||||
Reference in New Issue
Block a user