Skip to content

feat(secrets): S4 — Infisical provider via the infisical CLI — M4 COMPLETE - #67

Merged
gustavobertoi merged 1 commit into
mainfrom
nightly/S4-infisical
Jun 29, 2026
Merged

feat(secrets): S4 — Infisical provider via the infisical CLI — M4 COMPLETE#67
gustavobertoi merged 1 commit into
mainfrom
nightly/S4-infisical

Conversation

@gustavobertoi

Copy link
Copy Markdown
Contributor

What

Adds the infisical provider kind. Completes M4 secrets (S1–S6 all in).

How

Mirrors S2/S3: shells to the infisical CLI (not the Go SDK — anti-bloat, DECISIONS) and inherits the user's auth (infisical login / INFISICAL_TOKEN). Exports the environment once (infisical export --format=json, batched) with optional --projectId/--env/--path; extracts each ref's key; #key walks a JSON-valued secret.

Version-drift tolerance: parseInfisicalExport accepts both shapes the CLI has emitted — a flat {KEY:VALUE} object and a list of {key/secretKey, value/secretValue} records.

Tests

Fake-runner: flat-object format (+ projectId/env args), list format + JSON #key, missing-secret error, missing-CLI error, builtin registration. Stdlib-only (no new deps). make ci green.

Scope (decision #3)

Account-gated: logic + fakes here; the exact CLI version/contract is a flagged owner-verify step, not run in the nightly. Tolerant parsing covers the two documented shapes so a real account should "just work"; if a future version changes the format, only parseInfisicalExport needs a tweak.

🤖 Generated with Claude Code

…) — M4 secrets COMPLETE

Adds the `infisical` provider kind, mirroring S2/S3: shells to the `infisical`
CLI (not the Go SDK — anti-bloat, DECISIONS) and inherits the user's auth
(`infisical login` / INFISICAL_TOKEN), so no credential passes through devstack.
The environment is exported ONCE (`infisical export --format=json`, batched) with
optional --projectId/--env/--path, then each ref's key is extracted; a #key walks
a JSON-valued secret.

Export-format drift across Infisical versions is handled by tolerant parsing:
accepts both a flat {KEY:VALUE} object and a list of {key/secretKey,
value/secretValue} records. Fake-runner tested for both shapes + JSON #key +
missing-secret + missing-CLI + builtin registration.

Account-gated (decision #3): logic + fakes here; the exact CLI version/contract is
a flagged owner-verify step, not run in the nightly. Stdlib-only (no new deps).

This completes M4: S1 (core) · S2 (SOPS+age) · S3 (AWS SM/SSM) · S4 (Infisical) ·
S5 (keyring login) · S6 (post-render inject + leak test).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@gustavobertoi
gustavobertoi merged commit ccc0b19 into main Jun 29, 2026
2 checks passed
@gustavobertoi
gustavobertoi deleted the nightly/S4-infisical branch June 29, 2026 19:22
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant