Skip to content

ci: pin GitHub Actions to commit SHAs + add Dependabot#1

Open
allenfbyrd wants to merge 1 commit into
mainfrom
harden/pin-action-shas
Open

ci: pin GitHub Actions to commit SHAs + add Dependabot#1
allenfbyrd wants to merge 1 commit into
mainfrom
harden/pin-action-shas

Conversation

@allenfbyrd

Copy link
Copy Markdown
Contributor

What

Pin all GitHub Actions in this repo to immutable commit SHAs (with # vX comments) and add/extend a github-actions Dependabot config.

Why

Tag refs like @v4 are mutable: a compromised or re-pointed tag silently changes what runs in CI (the top GitHub Actions supply-chain vector). Pinning to an immutable commit SHA removes that risk; Dependabot keeps the pins current via reviewed update PRs. Part of an org-wide move toward enabling sha_pinning_required.

Pin actions to immutable commit SHAs (with # vX comments) to defend against
mutable-tag supply-chain attacks; add/extend a github-actions Dependabot
config so the pins still receive reviewed update PRs.
allenfbyrd added a commit that referenced this pull request Jun 29, 2026
…lution + fold-in #6 stderr surfacing at the gate seam

Fold-in #1 (Resolve-PythonExe):
  Hard `& python3` breaks Windows hosts — the Windows Python installer provides `python`
  not `python3`. Resolve-PythonExe probes python3 first (Linux/macOS), then python
  (Windows/cross-platform); throws fail-closed naming both if neither resolves.
  Defined in Invoke-Voidseal.ps1 (before Resolve-DeployProfile); BuilderVM.ps1 reuses
  it via the dot-source chain rather than duplicating it.

  Changed in Invoke-Voidseal.ps1 seam-#2 gate (line ~548):
    - was: `& python $readScript ...`
    + now: `$pyExe = Resolve-PythonExe; $pyOut = & $pyExe $readScript ...`

Fold-in #6 (stderr surfacing):
  The original `2>&1 | Out-Null` swallowed read_outbox.py diagnostics.  stderr is now
  captured and appended to the throw message on non-zero exit so the operator sees the
  actual OutboxError / parse-failure rather than a bare exit-code.

  Example (now visible in the InvokeVoidseal test WARNING line):
    "...releasing nothing. stderr: read_outbox: FAIL-CLOSED: OutboxError: sha256
     mismatch for '...' (tamper)"

  Cross-reference comments added at the seam listing the outbox container constants
  (MAGIC=VSOUTBX1, 24-byte header, 104-byte record) pointing to guest/outbox.py as
  the single source of truth (consistent with the existing reference in host/read_outbox.py).

Test floor: 564/566 Pester green (0 new failures, 2 pre-existing skips); 20/20 pytest.
allenfbyrd added a commit that referenced this pull request Jun 29, 2026
…image-hash match; fail-closed on mismatch/absence; deps.vhdx stays builder-owned)
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