Skip to content

fix(k8s): remove plaintext backend Secret; wire External Secrets - #624

Open
woahwhattheheck wants to merge 10 commits into
Protocol-Guild:mainfrom
woahwhattheheck:type/payd-560-external-secrets
Open

woahwhattheheck wants to merge 10 commits into
Protocol-Guild:mainfrom
woahwhattheheck:type/payd-560-external-secrets

Conversation

@woahwhattheheck

Copy link
Copy Markdown

Closes #560

Removes the committed CHANGE_ME Kubernetes Secret from k8s/base/ and applies secrets through External Secrets Operator instead (secret-store.yaml + external-secret.yaml → AWS Secrets Manager). Missing provider/config leaves the ExternalSecret unready, so workloads that need payd-backend-secrets fail closed.

An examples-only manifest remains under k8s/examples/ for local kubectl create secret flows. Deployment and k8s README updated to match.

Verify: k8s/base/ has no Secret with stringData credentials; kustomization lists the ESO resources; docs describe the fail-closed path.

woahwhattheheck and others added 4 commits September 24, 2026 15:38
Stop applying CHANGE_ME credentials from git. Base now uses SecretStore +
ExternalSecret against AWS Secrets Manager so missing provider config fails
closed. Keep an examples/ reference for local kubectl create flows.
GitHub Actions does not accept retention-days as a workflow root key.
That made every push parse-fail with zero jobs. Artifact retention stays
on upload-artifact steps; repo retention stays in Settings.
GitHub rejects retention-days on the workflow root (Unexpected value),
so checks completed with 0 jobs. Keep artifact-level retention only.
GitHub Actions rejects retention-days at the workflow root, so these runs failed before any job started. Artifact retention stays on upload-artifact; repo run retention is a settings toggle.
Map JWT_REFRESH_SECRET from payd-production/jwt-refresh-secret and require
that named key in the backend Deployment. An older existing Secret can no
longer launch a new container with the development refresh-signing fallback.
Update the local example and deployment/provisioning instructions.

Kustomize v5.7.1 renders ten resources before and after; only the Deployment
and ExternalSecret differ. The unchanged backend refresh-token generator,
run locally using generated keys resolved from those rendered manifests,
accepts the provider key and rejects the development default after repair.
The existing secret-check script and git diff --check pass.
No Kubernetes deployment or external authentication request was performed.

Operation: PAYD624-REFRESH-SECRET-20261003-4EF9
Attribution: GPT-6 Astra Pro / ASTRA-4EF9 / ChatGPT cloud harness
Add an independent JWT_REFRESH_SECRET value to the existing local Secret
command and explain the Deployment's required-key startup boundary.

Static validation: all eight ExternalSecret keys are represented; the JWT
keys use separate generator expressions; Markdown fences and all unrelated
bytes are preserved. No generator, Kubernetes, Docker or deployment run.

Continuation of existing PR Protocol-Guild#624 / issue Protocol-Guild#560; preserves prior manifest
and runtime work at d91dffd.
Keep commands at the repository root and use the existing backend Docker
build context. Replace the absent frontend Dockerfile recipe with the
published-image prerequisite required by the current port-80 manifests.
Inspect deployed resources explicitly in the payd namespace.

Source and provider readback validation only; no Docker, Kubernetes,
Helm, formatter or deployment execution for this documentation change.
Preserve the prior secret/provisioning/rotation work on existing PR Protocol-Guild#624.
Remove the workflow-root retention-days key that prevents the build
workflow from being accepted, along with the comments claiming a
retention policy that this YAML cannot configure. Keep all triggers,
environment values, the build job and its 17 steps unchanged.

Validated YAML structure and exact preservation of every supported
workflow value; git diff --check passes. Upstream build execution and
maintainer acceptance remain separate.
Select the explicit Bash runner for the existing Scaffold-to-tee step. This enables pipefail so a failed compiler is not hidden by successful log capture.

Reuse workflow blob 4ce301d from commit 50c39f7 (PR629). The recipient blob 68212ca differs by exactly the added shell: bash line. All 17 existing steps, commands, triggers, environment and prior workflow-schema repair are retained.

Validation: parsed both complete workflows with PyYAML 6.0.3; removing only the added shell field makes their trees identical. Executed the exact existing run string using GitHub's documented shell options on Bash 5.2.21, with a controlled Scaffold function. Compiler failure exit 7: default shell returned 0, explicit Bash returned 7. Successful generation returned 0 in both. Captured stdout/stderr logs were identical in both outcomes. No new test file, dependency install, actual compiler run, hosted job, application build or deployment is asserted.

Shell reference: https://docs.github.com/en/actions/reference/workflows-and-actions/workflow-syntax#jobsjob_idstepsshell
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.

Fix k8s Secret manifest with plaintext CHANGE_ME placeholders

1 participant