Skip to content

build: publish verifiable device-plugin provenance - #16

Merged
simongdavies merged 2 commits into
hyperlight-dev:mainfrom
antsok:build/device-plugin-provenance
Oct 20, 2026
Merged

simongdavies merged 2 commits into
hyperlight-dev:mainfrom
antsok:build/device-plugin-provenance

Conversation

@antsok

@antsok antsok commented Oct 5, 2026 •

Copy link
Copy Markdown
Contributor

The device-plugin publishing workflow currently pushes images without GitHub-signed build provenance, and both Dockerfile base images use floating tags. Consumers cannot authenticate a published digest against the expected source and publishing workflow.

This change pins both base images and configures weekly Dependabot updates, emits max-mode BuildKit provenance and an SBOM, and signs the pushed image-index digest with GitHub OIDC. The workflow stores the attestation in GitHub and GHCR, then verifies the digest against the repository, publishing workflow, source ref and commit. Actions in this publishing workflow are pinned by commit SHA, with Dependabot updates enabled. The README documents consumer verification and the limits of base-image pinning.

Closes #15.

Review .github/workflows/publish-device-plugin.yml first: signing and verification use the digest returned by the build step. Existing published images are not retroactively attested, and deployment manifests are unchanged.

Validation:

  • actionlint v1.7.12 passed for the modified workflow (-shellcheck=; ShellCheck was not run).

  • Workflow and Dependabot YAML parsing and git diff --check passed.

  • A local Linux/amd64 Docker build with --provenance=mode=max --sbom=true exported successfully to an OCI archive.

  • Archive inspection verified the index/attestation digest links, both pinned base-image materials, max-mode build configuration and an SPDX SBOM containing 29 packages.

  • The documented gh attestation verify command against the existing unattested upstream digest failed with HTTP 404 and exit code 1, as expected.

  • Fork publishing run 37351278795 passed on 2026-10-05 at source 930fd70f3a8eb1ae8782dfe63d3059e9d88d58f1. The test differs from this contribution only in its push branch and image namespace. Build/push, GitHub OIDC signing, attestation upload to GitHub and GHCR, and verification against the exact fork repository/workflow/source ref/commit all passed. Published image digest: sha256:d5903214063d3c864b065c0497131ec837f6e4b2332490588b96e612d368deeb; GitHub attestation.

Not yet verified: publication and verification under the upstream repository's identity and package permissions. The fork run establishes the publishing mechanics for its recorded candidate, not upstream acceptance. KIND/AKS deployment, device allocation, guest execution and the unrelated Rust application checks were not run. This change does not configure Kubernetes admission or establish bit-for-bit reproducible builds.
Action refresh (2026-10-19): all six actions in the publishing workflow now use the latest release commits: checkout v7.0.1, setup-buildx v4.4.1, login v4.6.0, metadata v6.2.0, build-push v7.4.0, and attest-build-provenance v4.2.2. Release tags and commit pins, configured inputs and consumed outputs were checked against the action repositories. Actionlint v1.7.12 (-shellcheck=), YAML parsing, and git diff --check passed. Workflow configuration is otherwise unchanged. The fork publishing run above predates this action refresh; publishing and attestation with these updated action versions have not been rerun.

Signed-off-by: Anton Sokolovskyi <anton@sokolit.com>

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot review overview

🔵 Needs a closer look

The security-sensitive publishing flow is sound but still requires upstream package-permission and identity validation.

Review effort: Balanced
Findings: None

What changed in this PR

Adds verifiable supply-chain metadata to published device-plugin images while reducing dependency drift.

Changes:

  • Pins Docker base images and configures weekly Dependabot updates.
  • Publishes provenance/SBOM attestations and verifies pushed digests.
  • Documents consumer-side attestation verification.
File Description
.github/​workflows/​publish-device-plugin.yml Builds, attests, and verifies published images.
.github/​dependabot.yml Updates Docker and GitHub Actions dependencies weekly.
device-plugin/​Dockerfile Pins both base images by digest.
README.md Documents digest and provenance verification.

💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

@jsturtevant

Copy link
Copy Markdown

we discussed at the community meeting https://github.com/hyperlight-dev/hyperlight#community and we think it should be possible to do this and going to look this week

Comment thread .github/workflows/publish-device-plugin.yml Outdated

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🔵 Needs a closer look

The successful fork run validates publishing mechanics, but upstream signing identity and GHCR permissions still require human validation.

No open issues 🎉

Review effort: Balanced

@jsturtevant

Copy link
Copy Markdown

This looks good to me, several of the Github actions are pinned to older versions, should we bump those while we are here?

Signed-off-by: Anton Sokolovskyi <anton@sokolit.com>
@antsok
antsok force-pushed the build/device-plugin-provenance branch from 923eeb4 to 8bac575 Compare October 19, 2026 18:41
@antsok

antsok commented Oct 19, 2026

Copy link
Copy Markdown
Contributor Author

updated versions

@simongdavies
simongdavies merged commit d07c5d8 into hyperlight-dev:main Oct 20, 2026
4 checks passed
@antsok
antsok deleted the build/device-plugin-provenance branch October 20, 2026 12:06
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.

Pin the device-plugin base images by digest and publish build provenance for ghcr.io/hyperlight-dev/hyperlight-device-plugin

4 participants