From 4b1fa408f28f701e7a97a330888c5c3f6d0cfdd3 Mon Sep 17 00:00:00 2001 From: Patrick Lee Scott Date: Sat, 29 Aug 2026 15:54:58 -0500 Subject: [PATCH 1/7] fix: automate tested dependency updates --- .github/workflows/on-pr.yaml | 2 +- apis/celldstacks/definition.yaml | 1 + functions/render/000-state-init.yaml.gotmpl | 5 +- renovate.json | 96 ++++++++++++++++----- tests/test-render/main.k | 2 +- upbound.yaml | 4 +- 6 files changed, 85 insertions(+), 25 deletions(-) diff --git a/.github/workflows/on-pr.yaml b/.github/workflows/on-pr.yaml index 04b127d..986a77d 100644 --- a/.github/workflows/on-pr.yaml +++ b/.github/workflows/on-pr.yaml @@ -10,7 +10,7 @@ on: - reopened - synchronize paths: - - ".github/workflows/on-pr.yaml" + - ".github/workflows/**" - "apis/**" - "examples/**" - "tests/**" diff --git a/apis/celldstacks/definition.yaml b/apis/celldstacks/definition.yaml index 6229aa4..125f645 100644 --- a/apis/celldstacks/definition.yaml +++ b/apis/celldstacks/definition.yaml @@ -199,6 +199,7 @@ spec: default: ghcr.io/denoland/celld tag: type: string + # renovate: datasource=docker depName=denoland/celld registryUrl=https://ghcr.io default: v0.3.0 pullPolicy: type: string diff --git a/functions/render/000-state-init.yaml.gotmpl b/functions/render/000-state-init.yaml.gotmpl index 5d13133..800a1a1 100644 --- a/functions/render/000-state-init.yaml.gotmpl +++ b/functions/render/000-state-init.yaml.gotmpl @@ -10,6 +10,7 @@ {{- $clusterName := $spec.clusterName | default $name }} {{- $namespace := $spec.namespace | default "celld" }} {{- $releaseName := $spec.releaseName | default $name }} +# renovate: datasource=github-releases depName=hops-ops/celld-chart {{- $chartVersion := $spec.chartVersion | default "0.4.0" }} {{- $chartRepository := $spec.chartRepository | default "https://hops-ops.github.io/celld-chart" }} {{- $chartUrl := $spec.chartUrl | default "" }} @@ -43,6 +44,8 @@ }} {{- $image := $spec.image | default dict }} +# renovate: datasource=docker depName=denoland/celld registryUrl=https://ghcr.io +{{- $imageTag := $image.tag | default "v0.3.0" }} {{- $persistence := $spec.persistence | default dict }} {{- $credentials := $spec.credentials | default dict }} {{- $azurite := $spec.azurite | default dict }} @@ -154,7 +157,7 @@ ) "image" (dict "repository" ($image.repository | default "ghcr.io/denoland/celld") - "tag" ($image.tag | default "v0.3.0") + "tag" $imageTag "pullPolicy" ($image.pullPolicy | default "IfNotPresent") ) "persistence" (dict diff --git a/renovate.json b/renovate.json index 4cc9fcf..042d105 100644 --- a/renovate.json +++ b/renovate.json @@ -12,43 +12,62 @@ }, "packageRules": [ { - "description": "Automerge minor and patch updates that pass all checks", - "matchUpdateTypes": ["minor", "patch"], + "description": "Automerge minor and patch updates after all checks pass", + "matchUpdateTypes": [ + "minor", + "patch" + ], "automerge": true }, + { + "description": "Require manual review for major updates", + "matchUpdateTypes": [ + "major" + ], + "automerge": false + }, { "description": "Disable automatic updates for all hops-ops Docker images", - "matchDatasources": ["docker"], + "matchDatasources": [ + "docker" + ], "enabled": false, - "matchPackageNames": ["/^hops-ops//"] + "matchPackageNames": [ + "/^hops-ops//" + ] + }, + { + "description": "Group AWS provider-family packages", + "matchPackageNames": [ + "/provider-family-aws/", + "/provider-aws-.*/" + ], + "groupName": "aws-providers" }, { "description": "Use feat(deps): commit prefix for hops-ops Crossplane packages (github-releases datasource)", - "matchManagers": ["custom.regex"], - "matchDatasources": ["github-releases"], + "matchManagers": [ + "custom.regex" + ], + "matchDatasources": [ + "github-releases" + ], "semanticCommitType": "feat", "semanticCommitScope": "deps" }, { "description": "Use feat(deps): commit prefix for other Crossplane packages from Docker registries", - "matchManagers": ["custom.regex"], - "matchDatasources": ["docker"], + "matchManagers": [ + "custom.regex" + ], + "matchDatasources": [ + "docker" + ], "semanticCommitType": "feat", "semanticCommitScope": "deps" } ], "customManagers": [ - { - "customType": "regex", - "description": "Helm charts in go-templates", - "managerFilePatterns": [ - "/\\.yaml\\.gotmpl$/" - ], - "matchStrings": [ - "\\s*chart:\\s*name:\\s+(?.*?)\\s*.*?repository:\\s*(?.*?)\\s*version:\\s*\"?(?.*?)\"?\\s" - ], - "datasourceTemplate": "helm" - }, { "customType": "regex", "description": "hops-ops Crossplane configurations (tracked via GitHub Releases)", @@ -76,6 +95,43 @@ "registryUrlTemplate": "https://{{registryUrl}}", "depNameTemplate": "{{orgName}}/{{repoName}}", "packageNameTemplate": "{{orgName}}/{{repoName}}" + }, + { + "customType": "regex", + "description": "Annotated runtime dependencies in schemas, templates, examples, and tests", + "managerFilePatterns": [ + "apis/**/*.yaml", + "examples/**/*.yaml", + "functions/**/*.yaml.gotmpl", + "tests/**/*.k" + ], + "matchStrings": [ + "# renovate: datasource=(?\\S+) depName=(?\\S+)(?: registryUrl=(?\\S+))?\\s+[^\\n]*?(?:default\\s+|:=\\s*|[\"']?(?:version|chartVersion|tag|default)[\"']?\\s*(?:[=:]\\s*|\\s+))[\"']?(?v?[0-9][^\\s\"'}]*)", + "# renovate: datasource=(?\\S+) depName=(?\\S+)(?: registryUrl=(?\\S+))?\\s+[^\\n]*?(?:default\\s+|[\"']?image[\"']?\\s*[=:]\\s*)[\"']?[A-Za-z0-9._/-]+:(?v?[A-Za-z0-9][^\\s\"'}]*)", + "# renovate: datasource=(?\\S+) depName=(?\\S+)(?: registryUrl=(?\\S+))?\\s+[^\\n]*?package\\s*=\\s*\"[^\"]+:(?[^\"]+)\"" + ] + }, + { + "customType": "regex", + "description": "Helm charts in go-templates", + "managerFilePatterns": [ + "/\\.yaml\\.gotmpl$/" + ], + "matchStrings": [ + "\\s*chart:\\s*name:\\s+(?.*?)\\s*.*?repository:\\s*(?.*?)\\s*version:\\s*\"?(?.*?)\"?\\s" + ], + "datasourceTemplate": "helm" } - ] + ], + "ignorePaths": [ + "**/node_modules/**", + "**/bower_components/**", + "**/vendor/**", + "**/__tests__/**", + "**/test/**", + "**/__fixtures__/**" + ], + "automergeType": "pr", + "platformAutomerge": false, + "ignoreTests": false } diff --git a/tests/test-render/main.k b/tests/test-render/main.k index af85367..da8c549 100644 --- a/tests/test-render/main.k +++ b/tests/test-render/main.k @@ -41,6 +41,7 @@ _items = [ chart = { name = "celld" repository = "https://hops-ops.github.io/celld-chart" + # renovate: datasource=github-releases depName=hops-ops/celld-chart version = "0.4.0" } namespace = "celld" @@ -388,4 +389,3 @@ _items = [ ] items = _items - diff --git a/upbound.yaml b/upbound.yaml index cab868e..8749fb6 100644 --- a/upbound.yaml +++ b/upbound.yaml @@ -7,7 +7,7 @@ spec: - apiVersion: pkg.crossplane.io/v1 kind: Function package: xpkg.crossplane.io/crossplane-contrib/function-auto-ready - version: '>=v0.6.4' + version: '>=v0' - apiVersion: pkg.crossplane.io/v1 kind: Provider package: xpkg.crossplane.io/crossplane-contrib/provider-helm @@ -23,7 +23,7 @@ spec: - apiVersion: pkg.crossplane.io/v1 kind: Configuration package: ghcr.io/hops-ops/aws-pod-identity - version: '>=v0.13.0' + version: '>=v0' description: Installs celld, Deno's self-hosted Durable Objects runtime, as a Helm release. Fleet nodes coordinate through an object-storage bucket you own. license: Apache-2.0 From c13fb5615f1ae477a9d4d5ca75781eab6f42d4f0 Mon Sep 17 00:00:00 2001 From: Patrick Lee Scott Date: Sat, 29 Aug 2026 16:59:08 -0500 Subject: [PATCH 2/7] fix: bound dependencies below next major --- renovate.json | 16 ++++++++++++---- upbound.yaml | 10 +++++----- 2 files changed, 17 insertions(+), 9 deletions(-) diff --git a/renovate.json b/renovate.json index 042d105..1253997 100644 --- a/renovate.json +++ b/renovate.json @@ -71,30 +71,38 @@ { "customType": "regex", "description": "hops-ops Crossplane configurations (tracked via GitHub Releases)", + "matchStringsStrategy": "recursive", "managerFilePatterns": [ "apis/**/configuration.yaml", "upbound.yaml" ], "matchStrings": [ - "\\s*(configuration|function|package|provider):\\s*ghcr\\.io/hops-ops/(?.*?)\\s*version:\\s*(\"|')>=(?.*?)(\"|')\\s*" + "\\s*(configuration|function|package|provider):\\s*ghcr\\.io/hops-ops/(?.*?)\\s*version:\\s*(\"|')>=v?[0-9]+(?:\\.[0-9]+){0,2}(?:\\s*>=v?[0-9]+(?:\\.[0-9]+){0,2}(?:\\s*=v{{{newMajor}}} [^/]+)\\/(?[^/]+)\\/(?[^/\\s]+)\\s*version:\\s*(\"|')>=(?.*?)(\"|')\\s*" + "\\s*(configuration|function|package|provider):\\s*(?[^/]+)\\/(?[^/]+)\\/(?[^/\\s]+)\\s*version:\\s*(\"|')>=v?[0-9]+(?:\\.[0-9]+){0,2}(?:\\s*>=v?[0-9]+(?:\\.[0-9]+){0,2}(?:\\s*=v{{{newMajor}}} =v0' + version: '>=v0 =v1' + version: '>=v1 =v1' + version: '>=v1 =v2' + version: '>=v2 =v0' + version: '>=v0 Date: Sat, 29 Aug 2026 17:10:42 -0500 Subject: [PATCH 3/7] fix: avoid overlapping Renovate extraction --- renovate.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/renovate.json b/renovate.json index 1253997..573b502 100644 --- a/renovate.json +++ b/renovate.json @@ -87,14 +87,14 @@ }, { "customType": "regex", - "description": "Crossplane packages from other registries (tracked via Docker tags)", + "description": "Crossplane packages from xpkg registries (tracked via Docker tags)", "matchStringsStrategy": "recursive", "managerFilePatterns": [ "apis/**/configuration.yaml", "upbound.yaml" ], "matchStrings": [ - "\\s*(configuration|function|package|provider):\\s*(?[^/]+)\\/(?[^/]+)\\/(?[^/\\s]+)\\s*version:\\s*(\"|')>=v?[0-9]+(?:\\.[0-9]+){0,2}(?:\\s*xpkg\\.[^/]+)\\/(?[^/]+)\\/(?[^/\\s]+)\\s*version:\\s*(\"|')>=v?[0-9]+(?:\\.[0-9]+){0,2}(?:\\s*>=v?[0-9]+(?:\\.[0-9]+){0,2}(?:\\s*\\S+) depName=(?\\S+)(?: registryUrl=(?\\S+))?\\s+[^\\n]*?(?:default\\s+|:=\\s*|[\"']?(?:version|chartVersion|tag|default)[\"']?\\s*(?:[=:]\\s*|\\s+))[\"']?(?v?[0-9][^\\s\"'}]*)", - "# renovate: datasource=(?\\S+) depName=(?\\S+)(?: registryUrl=(?\\S+))?\\s+[^\\n]*?(?:default\\s+|[\"']?image[\"']?\\s*[=:]\\s*)[\"']?[A-Za-z0-9._/-]+:(?v?[A-Za-z0-9][^\\s\"'}]*)", + "# renovate: datasource=(?\\S+) depName=(?\\S+)(?: registryUrl=(?\\S+))?\\s+[^\\n]*?[\"']?image[\"']?\\s*[=:]\\s*[\"']?[A-Za-z0-9._/-]+:(?v?[A-Za-z0-9][^\\s\"'}]*)", "# renovate: datasource=(?\\S+) depName=(?\\S+)(?: registryUrl=(?\\S+))?\\s+[^\\n]*?package\\s*=\\s*\"[^\"]+:(?[^\"]+)\"" ] }, From e06581f552bcb30d1eb484483e62cf9013d2f556 Mon Sep 17 00:00:00 2001 From: Patrick Lee Scott Date: Sat, 29 Aug 2026 17:24:37 -0500 Subject: [PATCH 4/7] fix: address dependency review findings --- renovate.json | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/renovate.json b/renovate.json index 573b502..49db07b 100644 --- a/renovate.json +++ b/renovate.json @@ -115,7 +115,7 @@ ], "matchStrings": [ "# renovate: datasource=(?\\S+) depName=(?\\S+)(?: registryUrl=(?\\S+))?\\s+[^\\n]*?(?:default\\s+|:=\\s*|[\"']?(?:version|chartVersion|tag|default)[\"']?\\s*(?:[=:]\\s*|\\s+))[\"']?(?v?[0-9][^\\s\"'}]*)", - "# renovate: datasource=(?\\S+) depName=(?\\S+)(?: registryUrl=(?\\S+))?\\s+[^\\n]*?[\"']?image[\"']?\\s*[=:]\\s*[\"']?[A-Za-z0-9._/-]+:(?v?[A-Za-z0-9][^\\s\"'}]*)", + "# renovate: datasource=(?\\S+) depName=(?\\S+)(?: registryUrl=(?\\S+))?\\s+[^\\n]*?(?:default\\s*:\\s*|[\"']?image[\"']?\\s*[=:]\\s*)[\"']?[A-Za-z0-9._/-]+:(?v?[A-Za-z0-9][^\\s\"'}]*)", "# renovate: datasource=(?\\S+) depName=(?\\S+)(?: registryUrl=(?\\S+))?\\s+[^\\n]*?package\\s*=\\s*\"[^\"]+:(?[^\"]+)\"" ] }, @@ -137,7 +137,8 @@ "**/vendor/**", "**/__tests__/**", "**/test/**", - "**/__fixtures__/**" + "**/__fixtures__/**", + "**/fixtures/**" ], "automergeType": "pr", "platformAutomerge": false, From 55f71ccd622b2e393009a9f503526024ecfc3c22 Mon Sep 17 00:00:00 2001 From: Patrick Lee Scott Date: Sat, 29 Aug 2026 17:25:56 -0500 Subject: [PATCH 5/7] fix: scope package dependency extraction --- renovate.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/renovate.json b/renovate.json index 49db07b..ce90741 100644 --- a/renovate.json +++ b/renovate.json @@ -116,7 +116,7 @@ "matchStrings": [ "# renovate: datasource=(?\\S+) depName=(?\\S+)(?: registryUrl=(?\\S+))?\\s+[^\\n]*?(?:default\\s+|:=\\s*|[\"']?(?:version|chartVersion|tag|default)[\"']?\\s*(?:[=:]\\s*|\\s+))[\"']?(?v?[0-9][^\\s\"'}]*)", "# renovate: datasource=(?\\S+) depName=(?\\S+)(?: registryUrl=(?\\S+))?\\s+[^\\n]*?(?:default\\s*:\\s*|[\"']?image[\"']?\\s*[=:]\\s*)[\"']?[A-Za-z0-9._/-]+:(?v?[A-Za-z0-9][^\\s\"'}]*)", - "# renovate: datasource=(?\\S+) depName=(?\\S+)(?: registryUrl=(?\\S+))?\\s+[^\\n]*?package\\s*=\\s*\"[^\"]+:(?[^\"]+)\"" + "# renovate: datasource=(?\\S+) depName=(?\\S+)(?: registryUrl=(?\\S+))?\\s+[^\\n]*?package\\s*=\\s*\"xpkg\\.[^/]+/[^\"]+:(?[^\"]+)\"" ] }, { From 2672e914dad97a5a412b1e0a5faa6755df085728 Mon Sep 17 00:00:00 2001 From: Patrick Lee Scott Date: Sat, 29 Aug 2026 17:30:11 -0500 Subject: [PATCH 6/7] fix: validate Renovate configuration changes --- .github/workflows/on-pr.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/on-pr.yaml b/.github/workflows/on-pr.yaml index 986a77d..4cb4fb2 100644 --- a/.github/workflows/on-pr.yaml +++ b/.github/workflows/on-pr.yaml @@ -10,6 +10,7 @@ on: - reopened - synchronize paths: + - 'renovate.json' - ".github/workflows/**" - "apis/**" - "examples/**" From e6809ffa3af1907482faa9c0dbd62547244f6eb2 Mon Sep 17 00:00:00 2001 From: Patrick Lee Scott Date: Sat, 29 Aug 2026 18:00:16 -0500 Subject: [PATCH 7/7] fix: use compatible major dependency ranges --- renovate.json | 12 ++++++------ upbound.yaml | 10 +++++----- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/renovate.json b/renovate.json index ce90741..9a66e29 100644 --- a/renovate.json +++ b/renovate.json @@ -77,13 +77,13 @@ "upbound.yaml" ], "matchStrings": [ - "\\s*(configuration|function|package|provider):\\s*ghcr\\.io/hops-ops/(?.*?)\\s*version:\\s*(\"|')>=v?[0-9]+(?:\\.[0-9]+){0,2}(?:\\s*>=v?[0-9]+(?:\\.[0-9]+){0,2}(?:\\s*.*?)\\s*version:\\s*(\"|')\\^v?[0-9]+(\"|')\\s*", + "(?\\^v?[0-9]+)" ], "datasourceTemplate": "github-releases", "versioningTemplate": "npm", "packageNameTemplate": "hops-ops/{{depName}}", - "autoReplaceStringTemplate": ">=v{{{newMajor}}} xpkg\\.[^/]+)\\/(?[^/]+)\\/(?[^/\\s]+)\\s*version:\\s*(\"|')>=v?[0-9]+(?:\\.[0-9]+){0,2}(?:\\s*>=v?[0-9]+(?:\\.[0-9]+){0,2}(?:\\s*xpkg\\.[^/]+)\\/(?[^/]+)\\/(?[^/\\s]+)\\s*version:\\s*(\"|')\\^v?[0-9]+(\"|')\\s*", + "(?\\^v?[0-9]+)" ], "datasourceTemplate": "docker", "versioningTemplate": "npm", "registryUrlTemplate": "https://{{registryUrl}}", "depNameTemplate": "{{orgName}}/{{repoName}}", "packageNameTemplate": "{{orgName}}/{{repoName}}", - "autoReplaceStringTemplate": ">=v{{{newMajor}}} =v0 =v1 =v1 =v2 =v0