Skip to content

fix(bootstrap): use valid SSO credential names and fail closed #87

Closed

Description

@devantler

🤖 Generated by the Daily AI Engineer (Codex instance)

Evidence

At cde05878304d77df263679ca17653dc25ff7573b, actionlint reports four findings in .github/workflows/bootstrap.yaml:

  • vars.GITHUB_APP_CLIENT_ID uses the reserved GITHUB_ prefix.
  • The three generated-secret assignments mask openssl failures behind export (SC2155).

The bootstrap contract also requires secrets.GITHUB_APP_CLIENT_SECRET. GitHub forbids the GITHUB_ prefix for both configuration variables and Actions secrets, so neither documented SSO credential can be created as named.

GitHub resolves unset vars and secrets references to empty strings. The workflow then writes those empty values into both local and production bootstrap payloads, leaving Dex without usable GitHub connector credentials.

A Bash negative control replacing openssl with a command that exits 7 still continued under set -euo pipefail and produced three zero-length secret values, confirming that the current export VAR="$(openssl ...)" form fails open.

The Bootstrap workflow has no recorded runs, so this is static analysis plus an executed negative control rather than an observed live failure. No matching report exists among the repository's issues or pull requests.

Impact

A new template consumer cannot configure bootstrap as documented. Dispatch may proceed with empty SSO credentials, potentially provisioning infrastructure before authentication fails and leaving a partial or unusable platform.

Expected behavior

Bootstrap accepts valid, documented SSO credential names and stops before rendering, encryption, commit-back, or provisioning whenever a required credential or generated secret is missing.

Acceptance criteria

  • Replace both user-facing SSO names with non-reserved names consistently across the workflow and documentation.
  • Validate every required bootstrap variable and secret as non-empty before mutating files or provisioning infrastructure.
  • Generate each internal secret in a separate assignment before export so an openssl failure terminates the step.
  • Add negative controls proving a missing SSO credential and a failed secret generator both stop before cluster creation.
  • Make all workflows actionlint-clean and add regression coverage for reserved variable and secret names; actionlint alone does not catch the invalid secret name.
  • Keep the rendered Kubernetes keys github_app_client_id and github_app_client_secret unchanged.

Rough size: S.

Activity

  1. added theissue type on Jul 19, 2026
  2. moved this to 📥 Backlog in 🌊 Project Boardon Jul 19, 2026
  3. self-assigned this
    on Sep 14, 2026
  4. added a commit that references this issue on Sep 14, 2026
  5. moved this from 📥 Backlog to 👀 In Review in 🌊 Project Boardon Sep 14, 2026
  6. moved this from 👀 In Review to 🏃🏻‍♂️ In Progress in 🌊 Project Boardon Sep 14, 2026
  7. moved this from 🏃🏻‍♂️ In Progress to ✅ Done in 🌊 Project Boardon Sep 14, 2026
  8. moved this from ✅ Done to 📊 Verifying in 🌊 Project Boardon Sep 14, 2026
  9. devantler commented on Oct 11, 2026

    @devantler
    ContributorAuthor

    🤖 Generated by the Agentic Engineer

    Verification, 2026-10-11: reached

    Linted the bootstrap workflow as it is on main today. All four findings this issue listed are gone: the sign-in app's client ID and secret now use names GitHub accepts (SSO_GITHUB_APP_CLIENT_ID, SSO_GITHUB_APP_CLIENT_SECRET), and no generated secret hides a failed command behind export any more.

    Two notes:

    • The linter on this machine reports one unrelated line (queue: max under concurrency). It was not part of this issue, and I have not checked whether that is a real problem or only an older linter that does not know the key.
    • The bootstrap workflow has not been run on the template itself since the fix (it is meant to run in repositories created from it), so this is a static check, not a live bootstrap.

    Outcome: kept. Moving the card to Done.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Type

Fields

Priority

None yet

Effort

None yet

Projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions