Skip to content

Publish bundle sources

A bundle source is a Git repository or OCI artifact containing a Varroa bundle directory.

Every bundle requires bundle.yaml and at least one JCasC file.

team-bundle/
|-- bundle.yaml
|-- jenkins.yaml
|-- plugins.yaml
|-- items.yaml
`-- variables.yaml
id: team-platform
version: "1"
apiVersion: "2"
jcasc:
- jenkins.yaml
plugins:
- plugins.yaml
items:
- items.yaml
variables:
- variables.yaml
jcascMergeStrategy: errorOnConflict
itemRemoveStrategy:
items: none
rbac: sync
FieldContract
id, version, apiVersionRequired; apiVersion is 1 or 2
jcascOne or more JCasC files
plugins, items, rbac, variablesOptional file lists
jcascMergeStrategyerrorOnConflict or override
itemRemoveStrategy.itemsnone, sync, remove-supported, or remove-all
itemRemoveStrategy.rbacsync or update

Use plugin pinning and jobs and items for those file formats. Configure authorization through Jenkins RBAC, not JCasC.

apiVersion: varroa.dev/v1alpha1
kind: ComposedBundle
metadata:
name: platform-baseline
namespace: teams-platform
spec:
inputs:
- gitSource:
repoURL: https://github.com/example/casc-bundles.git
path: bundles/team-platform
revision: main

The URL must use HTTPS, SSH, or scp-style git@host:path. Pin a tag or commit when publication must not move without a spec change.

For private HTTPS Git, create a same-namespace Secret with username and password, annotate it with the allowed hosts, and set secretRef:

Terminal window
kubectl create secret generic bundle-git -n teams-platform \
--from-literal=username=git \
--from-literal=password='<token>'
kubectl annotate secret bundle-git -n teams-platform \
varroa.dev/allowed-hosts=github.com

The comma-separated varroa.dev/allowed-hosts annotation is required for username and password credentials. SSH private-key Secrets do not use it.

spec:
inputs:
- ociSource:
ref: ghcr.io/varroaci/casc-bundles:v1
path: bundles/team-platform
secretRef: oci-pull-creds

path and secretRef are optional. The same-namespace pull Secret must contain .dockerconfigjson or username and password.

operator:
gitCache:
enabled: true
maxRepos: 50
maxSizeMiB: 2048
volumeSizeLimit: 3Gi

The cache is per operator replica and uses emptyDir. Size it for active repository count and checkout size. Eviction is automatic.

SymptomCheck
Missing bundle.yamlInput path points to the bundle directory
Authentication failureSecret keys, namespace, and allowed host
Git change is absentrevision and status.observedRevisions
OCI change is absentTag or digest and status.observedRevisions