Skip to content

Run release process in-cluster (automated signing) #122

Description

@vdemeester

Summary

Move the release process (hack/release.sh) to run in-cluster (e.g. as a GitHub Actions workflow or Tekton Pipeline) so that the signing key doesn't need to be stored locally.

Current state

Today, releases are done locally:

./hack/release.sh v1.5.0 --llm

This requires the developer to run the script locally. For task signing (TEP-0091 / tekton.dev/signature), this would also require an ECDSA private key on the developer's machine.

The script:

  1. Bumps versions and changelog
  2. Commits, tags, and pushes
  3. The tag triggers the release workflow which publishes bundles to ghcr.io, signs them with cosign, and builds the git-init image with goreleaser

Goal

Move the full release process (including Tekton Trusted Resources signing) to CI so that:

  • No developer needs the private key locally
  • Signing is automated and auditable
  • The release is fully reproducible

Options

Option A: GitHub Actions release workflow

  • Store the signing key as a GitHub secret (SIGNING_KEY)
  • A workflow triggered by a tag (or manual dispatch with version input) runs the full release:
    version bump → tkn task sign → commit → bundle push → cosign sign → goreleaser
  • Requires tkn CLI in the workflow (already have setup-tektoncd-cli action)

Option B: Tekton Pipeline (dogfooding)

  • Run the release as a Tekton PipelineRun on a cluster
  • Signing key stored as a Kubernetes Secret
  • Uses tkn CLI task for signing
  • True dogfooding of the catalog

Option C: KMS-based signing

  • Use a cloud KMS (GCP, AWS, Azure, Vault) instead of a file-based key
  • tkn task sign supports KMS via the -m flag:
    tkn task sign task.yaml -m=gcpkms://projects/PROJECT/locations/LOCATION/keyRings/KEYRING/cryptoKeys/KEY
  • Most secure, no key material to manage

Recommendation

Start with Option A (simplest, already have the workflow infrastructure), with a path to Option C for production use.

Related

Checklist

  • Add tkn task sign to the release process
  • Choose key storage approach
  • Update release workflow to handle full release (not just bundle publish)
  • Store public key in repo for user verification
  • Document the new release process

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions