Add Renovate bot to automate dependency updates#5004
Merged
Conversation
Mirror projectcalico/calico's Renovate setup, adapted to the operator's file layout: a renovate.json config plus a .semaphore/renovate.yml pipeline run on a Semaphore schedule. Tracks the same safe, patch-focused dependency classes as calico: - Go modules: k8s.io/** (patch), golang.org/x/** (patch + minor), all other modules disabled; go mod tidy after each update. - Go language version: the "go x.y.z" directive in go.mod (golang-version). - calico/base: CALICO_BASE_VER in the Makefile (docker datasource, ubiN-<serial> versioning), tolerant of ?=. Updates are grouped into a single dependency-updates PR, minor/major/digest blocked globally, vulnerability alerts enabled. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…SION Mirror projectcalico/calico's split of the monolithic go-build toolchain version into individually-addressable parts, so each can be tracked/bumped on its own. GO_BUILD_VER is rebuilt as a composite of the parts and resolves to the identical value (1.26.4-llvm21.1.8-k8s1.36.2); K8S_VERSION carries a leading "v" that is stripped on interpolation via $(K8S_VERSION:v%=%). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Now that GO_BUILD_VER is decomposed, add custom regex managers mirroring calico's: GO_VERSION -> golang (golang-version) and K8S_VERSION -> kubernetes/kubernetes (github-releases, v-prefix extract). Both are patch-only under the existing global minor/major/digest block and fold into the dependency-updates group. Managers point at the Makefile and tolerate ?=. Also updates the Semaphore secret to marvin-renovate-token-enterprise. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Sync the bundled calico/enterprise CRDs with upstream master to clear a pre-existing dirty-check failure: eck bundle version label 3.4.0 -> 3.4.1, plus felixconfigurations (v1 + v3) and wafpolicies content updates. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
MichalFupso
approved these changes
Jul 13, 2026
Match the machine type used by every other operator pipeline (the f1-standard-4 was inherited from calico's heavier monorepo). Start small; bump back up if Renovate hits memory limits. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Brian-McM
approved these changes
Jul 13, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Description
Enables a Renovate bot for
tigera/operator, bringing it to parity with the coredependency automation that already runs in
projectcalico/calico. Until now theoperator's Go modules, Go toolchain, and
calico/baseimage have been bumped by hand.Type of change: new feature / CI tooling (no product code changes).
This mirrors calico's setup — a
renovate.jsonconfig plus a.semaphore/renovate.ymlpipeline run on a Semaphore schedule — adapted to the operator's file layout. Like
calico's, it is deliberately not a blanket dependency bumper: it tracks a small,
safe, patch-focused set and groups everything into a single PR.
What it tracks
k8s.io/**→ patch;golang.org/x/**→ patch + minor;all other Go modules disabled.
go mod tidyruns after each update(
postUpdateOptions: ["gomodTidy"]).go x.y.zdirective ingo.mod(golang-versiondatasource), patch-only.
calico/baseimage:CALICO_BASE_VERin the Makefile (dockerdatasource,ubiN-<serial>regex versioning), tolerant of?=.GO_VERSION→golang(golang-version) andK8S_VERSION→kubernetes/kubernetes(github-releases,v-prefix extract),both patch-only. See the
GO_BUILD_VERdecomposition below.GO_BUILD_VERdecomposition (Makefile)GO_BUILD_VERwas a single opaque string. Mirroring calico, it is now composed fromindividually-addressable parts so each can be tracked/bumped on its own:
This resolves to the identical value (
1.26.4-llvm21.1.8-k8s1.36.2);K8S_VERSIONcarries a leading
vstripped on interpolation via$(K8S_VERSION:v%=%).LLVM_VERSIONis decomposed for clarity but not Renovate-tracked (no datasource), same as calico.
Note: Renovate only edits the version text; the resulting
calico/go-build:<tag>is adownstream image built by
projectcalico/toolchain. If a matching tag isn't publishedyet, CI simply fails and the PR stays unmerged — master is never broken (same model as
calico).
Global behaviour (mirrored from calico)
groupName: dependency-updates).golang.org/xminor exception above).baseBranchPatterns:release-v1.40,release-v1.42,release-v1.43,master.vulnerabilityAlertsenabled,rebaseWhen: behind-base-branch, PR limits 20/20.Semaphore job
.semaphore/renovate.yml: ubuntu2204 VM,nvm install 24,renovate@43,renovate --platform=github --autodiscover=false,RENOVATE_REPOSITORIES=tigera/operator,RENOVATE_GIT_AUTHOR=marvin-tigera. Reuses the org secretsmarvin-renovate-token-enterprise(GitHub PAT) and
private-repo(SSH key for privatetigera/*module fetches,ssh-addin the prologue). The cron schedule is configured as a Semaphore scheduled Task in
project settings — it is not committed here, same as calico.
Bundled: imported-CRD regeneration
This branch also includes a
make gen-versionsregeneration of the bundledcalico/enterprise CRDs (eck bundle
3.4.0 → 3.4.1, plusfelixconfigurationsv1/v3 andwafpoliciescontent). This clears a pre-existing, Renovate-unrelateddirty-checkfailure caused by upstream
masterdrift (the CRDs are pinned atversion: master).Included here to keep this PR's CI green; re-run
make gen-versionsbefore merge ifupstream drifts again.
Differences from the calico base config (intentionally dropped / adapted)
skip-bot-cherry-picklabel — dropped. No such label exists intigera/operator.Kept labels the operator actually has:
docs-not-required,release-note-not-required,dependencies.merge-when-ready/delete-branchlabels — dropped for now. These driveauto-merge and branch cleanup. Omitted for the initial runs so we can build confidence
with PRs that stop at "opened"; they can be added back later.
npmmanager — dropped. The operator has nopackage.json.metadata.mkmanagers — adapted. The operator has nometadata.mk; calico'sGO_VERSION/K8S_VERSION/CALICO_BASE_VERregex managers (which point atmetadata.mk) are re-pointed at the operator'sMakefile, and tolerate?=.make gen-deps-filespostUpgradeTasks+RENOVATE_ALLOWED_COMMANDS— dropped.The operator has no
deps.txtgeneration step; it relies ongomodTidyinstead.baseBranchPatterns— adapted to the operator's active release branches(
release-v1.40/-v1.42/-v1.43+master) instead of calico'srelease-v3.31/-v3.32.Note:
release-v1.40's Makefile uses a different base-image scheme (noCALICO_BASE_VER),so
calico/baseis not tracked on that branch — Go modules and the go directive still are.Testing
Validated locally against the real repos before/while iterating on this PR:
renovate-config-validator— config passes schema validation.renovate --dry-runagainsttigera/operator— extraction succeeds on all basebranches;
golang(go directive) andcalico/base(with?=) both extract; scoping iscorrect; updates group into
renovate/<branch>-dependency-updates;vulnerabilityAlertscorrectly opens security PRs that bypass the block rules.
renovate --dry-runagainst the decomposed Makefile (fork branch) — the newGO_VERSION→
golangandK8S_VERSION→kubernetes/kubernetesmanagers both extract and arepatch-only.
make gen-versionsre-run is idempotent (clean tree) after the CRD regeneration commit.Release Note
For PR author
make gen-files(N/A)make gen-versions(done — see CRD regeneration commit)For PR reviewers
A note for code reviewers - all pull requests must have the following:
kind/bugif this is a bugfix.kind/enhancementif this is a a new feature.enterpriseif this PR applies to Calico Enterprise only.