Skip to content

feat: sign uds core zarf packages - #2945

Open
joelmccoy wants to merge 10 commits into
mainfrom
joel/core-41
Open

feat: sign uds core zarf packages#2945
joelmccoy wants to merge 10 commits into
mainfrom
joel/core-41

Conversation

@joelmccoy

@joelmccoy joelmccoy commented Sep 8, 2026

Copy link
Copy Markdown
Member

Description

Implements signing of UDS Core zarf packages (standard and functional layers). This uses a keyless signature with GitHub's token as agreed upon in: https://app.notion.com/p/defense-unicorns/UDS-Package-Signing-38ee512f24fc8026aa5fdc81b38d1e0e?source=copy_link.

In order to implement tag based provenance like zarf, we will need to update our release workflows to be triggered on a tag push instead of a merge to main. This has some consequences:

  1. We need a github app for release-please in order to push tags and trigger this workflow
  2. We will need to add tag protection rules to ensure only release-please github app can push these tags and trigger the release.

Note: Downstream consumers will need to update their package references to include the keyless verification spec or decide to skip package signature with UDS CLI.

Related Issue

Fixes CORE-41

Type of change

  • Bug fix (non-breaking change which fixes an issue)
  • New feature (non-breaking change which adds functionality)
  • Other (security config, docs update, etc)

Checklist before merging

@joelmccoy

joelmccoy commented Sep 8, 2026

Copy link
Copy Markdown
Member Author

@greptileai @codex review

@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Sep 8, 2026

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review Completed 2026-09-09T20:48:05.075688Z fa3f75a Draft marked ready
ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@greptile-apps

greptile-apps Bot commented Sep 8, 2026

Copy link
Copy Markdown
Contributor

Greptile Summary

This PR adds keyless signing and verification for standard and functional-layer UDS Core Zarf packages and restructures releases around tag-based provenance.

  • Splits release-please tag creation from the tag-triggered publishing workflow.
  • Signs and verifies packages against the expected GitHub Actions OIDC identity before publication.
  • Adds keyless verification metadata to documentation examples.
  • Documents the GitHub App, protected environment, and semver tag-ruleset requirements.
  • The changes since the previous review align the release workflow with the uds-release GitHub Environment and its documented credential names.

Confidence Score: 5/5

The PR appears safe to merge, with no outstanding correctness or repository-rule findings.

The previously reported signer regex is now fully anchored, release-branch creation again waits for successful publication and checkpointing, and the projected package-version concern was explicitly accepted and conceded in its resolved thread. The latest environment and credential-name changes are internally consistent with the ADR.

Important Files Changed

Filename Overview
.github/workflows/release-please.yaml Creates releases and tags with a GitHub App token sourced from the protected uds-release environment while retaining release-PR updates on GITHUB_TOKEN.
.github/workflows/release.yaml Publishes on semver tag pushes, gates checkpoint and release-branch creation on successful publication, and derives minor release branches from validated tags.
tasks/publish.yaml Signs and verifies standard and functional-layer packages against release-tag or snapshot-branch OIDC identities before publishing.
adrs/0011-keyless-sign-uds-core-packages.md Documents the signing model, external GitHub configuration requirements, verification identities, and operational tradeoffs.
docs/concepts/configuration-and-packaging/bundles.mdx Adds the anchored keyless-verification identity and GitHub Actions OIDC issuer to the bundle example.

Flowchart

%%{init: {'theme': 'neutral'}}%%
flowchart LR
    A[Push to main or release branch] --> B[Release Please]
    B --> C[GitHub App creates semver tag]
    C --> D[Tag triggers release.yaml]
    D --> E[Build and validate packages]
    E --> F[Keyless sign packages]
    F --> G[Verify OIDC identity]
    G --> H[Publish packages]
    H --> I[Run checkpoint]
    I --> J{Minor release tag?}
    J -->|Yes| K[Create release/X.Y branch]
    J -->|No| L[Release complete]
Loading

Reviews (6): Last reviewed commit: "chore: align github env and secret names" | Re-trigger Greptile

Comment thread docs/concepts/configuration-and-packaging/bundles.mdx Outdated

@chatgpt-codex-connector chatgpt-codex-connector Bot 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.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 7f78a378ab

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread docs/getting-started/production/build-your-bundle.mdx Outdated
Comment thread docs/how-to-guides/networking/configure-l7-load-balancer.mdx
Comment thread docs/concepts/configuration-and-packaging/bundles.mdx Outdated
@joelmccoy

Copy link
Copy Markdown
Member Author

@greptileai @codex review

Comment thread .github/workflows/tag-and-release.yaml Outdated

@chatgpt-codex-connector chatgpt-codex-connector Bot 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.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: bf65e43f45

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread docs/getting-started/production/build-your-bundle.mdx Outdated
Comment thread .github/workflows/publish-release.yaml Outdated
Comment thread .github/workflows/tag-and-release.yaml Outdated
Comment thread .agents/skills/documentation-authoring/references/how-to-guide-template.md Outdated
@joelmccoy

Copy link
Copy Markdown
Member Author

@greptileai @codex review

Comment thread .github/workflows/release-please.yaml Outdated
Comment on lines +24 to +29
- name: Create GitHub App token
id: app-token
uses: actions/create-github-app-token@bcd2ba49218906704ab6c1aa796996da409d3eb1 # v3.2.0
with:
app-id: ${{ secrets.UDS_RELEASE_PLEASE_APP_ID }}
private-key: ${{ secrets.UDS_RELEASE_PLEASE_APP_PRIVATE_KEY }}

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Tracking the need to use an app here so that tag triggered workflows kick off, but this also has the side effect of automatically triggering the workflows on the release PR. That's probably not desirable since those run lengthy CI including IaC tests (and would get run/re-run on every commit to main)?

Likely could add some sort of label/other mechanism gate on the PR before running other checks...

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

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

Yeah this is a very good callout here... I think i found a way with release please to create the PRs with a github token but do the actual tagging with the github app token. Essentially skip creating the pull request when running with the github app token, and then create the pull request with the github token. Two different steps. I pushed up these changes to show what that would look like.

Release package verification will use this certificate identity regex:

```text
^https://github\.com/defenseunicorns/uds-core/\.github/workflows/publish\.yaml@refs/tags/v[0-9]+\.[0-9]+\.[0-9]+$

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

The one thing we might want to look into as well is adding a renovate for these strings to lock them version to version so that when a consumer updates core it updates these versions as well - that way we have more specificity with what we expect ideally mostly "for free".

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

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

yea totally agree. i updated the adr to call out what the exact match could look like and call out that these strings can be updated with something like renovate. it would be very easy for us to have a standard rule in uds-common once we start signing packages: fc3342d

@joelmccoy

Copy link
Copy Markdown
Member Author

@greptileai @codex review

Comment thread docs/getting-started/production/build-your-bundle.mdx

@chatgpt-codex-connector chatgpt-codex-connector Bot 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.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: fc3342d730

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread .github/workflows/release.yaml
@joelmccoy

Copy link
Copy Markdown
Member Author

@greptileai review

@joelmccoy
joelmccoy marked this pull request as ready for review September 9, 2026 20:39
@joelmccoy
joelmccoy requested a review from a team as a code owner September 9, 2026 20:39

@chatgpt-codex-connector chatgpt-codex-connector Bot 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.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: fa3f75a420

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread tasks/publish.yaml
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.

3 participants