From 2f2ca1779478f47bb164e4f3c46bc33981628681 Mon Sep 17 00:00:00 2001 From: Patrick Lee Scott Date: Sat, 29 Aug 2026 15:54:58 -0500 Subject: [PATCH 1/8] fix: automate tested dependency updates --- renovate.json | 104 +++++++++++++++++++++------ tests/e2etest-efsstoragestack/main.k | 2 + upbound.yaml | 10 +-- 3 files changed, 88 insertions(+), 28 deletions(-) diff --git a/renovate.json b/renovate.json index a92fb2e..acdbd6c 100644 --- a/renovate.json +++ b/renovate.json @@ -12,35 +12,62 @@ }, "packageRules": [ { - "description": "Automerge minor and patch updates that pass all checks", - "matchUpdateTypes": ["minor", "patch"], - "automerge": true + "description": "Require manual merge until an e2e suite exists", + "matchUpdateTypes": [ + "major", + "minor", + "patch" + ], + "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 all AWS provider packages together for batched updates", + "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" + ], + "semanticCommitType": "feat", + "semanticCommitScope": "deps" + }, { "description": "Use feat(deps): commit prefix for hops-ops Crossplane packages", - "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", - "matchManagers": ["custom.regex"], - "matchDatasources": ["docker"], + "matchManagers": [ + "custom.regex" + ], + "matchDatasources": [ + "docker" + ], "semanticCommitType": "feat", "semanticCommitScope": "deps" } @@ -48,8 +75,11 @@ "customManagers": [ { "customType": "regex", - "description": "hops-ops Crossplane configurations", - "managerFilePatterns": ["upbound.yaml"], + "description": "hops-ops Crossplane configurations (tracked via GitHub Releases)", + "managerFilePatterns": [ + "apis/**/configuration.yaml", + "upbound.yaml" + ], "matchStrings": [ "\\s*(configuration|function|package|provider):\\s*ghcr\\.io/hops-ops/(?.*?)\\s*version:\\s*(\"|')>=(?.*?)(\"|')\\s*" ], @@ -58,18 +88,11 @@ }, { "customType": "regex", - "description": "hops-ops packages in E2E tests", - "managerFilePatterns": ["tests/**/main.k"], - "matchStrings": [ - "package\\s*=\\s*\"ghcr\\.io/(?hops-ops/[^:]+):v?(?[^\"]+)\"" + "description": "Crossplane packages from other registries (tracked via Docker tags)", + "managerFilePatterns": [ + "apis/**/configuration.yaml", + "upbound.yaml" ], - "datasourceTemplate": "github-releases", - "packageNameTemplate": "{{depName}}" - }, - { - "customType": "regex", - "description": "Crossplane packages from other registries", - "managerFilePatterns": ["upbound.yaml"], "matchStrings": [ "\\s*(configuration|function|package|provider):\\s*(?[^/]+)\\/(?[^/]+)\\/(?[^/\\s]+)\\s*version:\\s*(\"|')>=(?.*?)(\"|')\\s*" ], @@ -77,6 +100,41 @@ "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": "hops-ops packages in E2E tests", + "managerFilePatterns": [ + "tests/**/main.k" + ], + "matchStrings": [ + "package\\s*=\\s*\"ghcr\\.io/(?hops-ops/[^:]+):v?(?[^\"]+)\"" + ], + "datasourceTemplate": "github-releases", + "packageNameTemplate": "{{depName}}" } + ], + "ignorePaths": [ + "**/node_modules/**", + "**/bower_components/**", + "**/vendor/**", + "**/__tests__/**", + "**/test/**", + "**/__fixtures__/**" ] } diff --git a/tests/e2etest-efsstoragestack/main.k b/tests/e2etest-efsstoragestack/main.k index 832955f..4424426 100644 --- a/tests/e2etest-efsstoragestack/main.k +++ b/tests/e2etest-efsstoragestack/main.k @@ -218,6 +218,7 @@ _items = [ containers = [ { name = "writer" + # renovate: datasource=docker depName=library/busybox registryUrl=https://index.docker.io image = "busybox:1.37.0" command = ["sh", "-c", "echo " + _probe + " > /data/probe.txt && sync"] volumeMounts = [ @@ -277,6 +278,7 @@ _items = [ containers = [ { name = "reader" + # renovate: datasource=docker depName=library/busybox registryUrl=https://index.docker.io image = "busybox:1.37.0" command = [ "sh" diff --git a/upbound.yaml b/upbound.yaml index aced6de..fc9e02b 100644 --- a/upbound.yaml +++ b/upbound.yaml @@ -7,19 +7,19 @@ 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-aws-efs - version: '>=v2.5.0' + version: '>=v2' - apiVersion: pkg.crossplane.io/v1 kind: Provider package: xpkg.crossplane.io/crossplane-contrib/provider-aws-ec2 - version: '>=v2.5.0' + version: '>=v2' - apiVersion: pkg.crossplane.io/v1 kind: Provider package: xpkg.crossplane.io/crossplane-contrib/provider-aws-eks - version: '>=v2.5.0' + version: '>=v2' - apiVersion: pkg.crossplane.io/v1 kind: Provider package: xpkg.crossplane.io/crossplane-contrib/provider-kubernetes @@ -27,7 +27,7 @@ spec: - apiVersion: pkg.crossplane.io/v1 kind: Configuration package: ghcr.io/hops-ops/aws-pod-identity - version: '>=v0.12.0' + version: '>=v0' description: EFS shared file storage, EKS CSI integration, and RWX StorageClasses. license: Apache-2.0 maintainer: Patrick Lee Scott From 72f84f23afb475dbe7fa2b4b571234c56434a50b Mon Sep 17 00:00:00 2001 From: Patrick Lee Scott Date: Sat, 29 Aug 2026 16:59:08 -0500 Subject: [PATCH 2/8] fix: bound dependencies below next major --- renovate.json | 16 ++++++++++++---- upbound.yaml | 12 ++++++------ 2 files changed, 18 insertions(+), 10 deletions(-) diff --git a/renovate.json b/renovate.json index acdbd6c..42e6399 100644 --- a/renovate.json +++ b/renovate.json @@ -76,30 +76,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 =v2' + version: '>=v2 =v2' + version: '>=v2 =v2' + version: '>=v2 =v1' + version: '>=v1 =v0' + version: '>=v0 From bafe8b5b948c177d304a302b8aebc642ebd03e3c Mon Sep 17 00:00:00 2001 From: Patrick Lee Scott Date: Sat, 29 Aug 2026 17:10:42 -0500 Subject: [PATCH 3/8] fix: avoid overlapping Renovate extraction --- renovate.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/renovate.json b/renovate.json index 42e6399..571a908 100644 --- a/renovate.json +++ b/renovate.json @@ -92,14 +92,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 f4552fe51419050ce64548757531cd9826aa88f8 Mon Sep 17 00:00:00 2001 From: Patrick Lee Scott Date: Sat, 29 Aug 2026 17:24:37 -0500 Subject: [PATCH 4/8] fix: address dependency review findings --- renovate.json | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/renovate.json b/renovate.json index 571a908..8a4491f 100644 --- a/renovate.json +++ b/renovate.json @@ -120,7 +120,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*\"[^\"]+:(?[^\"]+)\"" ] }, @@ -143,6 +143,7 @@ "**/vendor/**", "**/__tests__/**", "**/test/**", - "**/__fixtures__/**" + "**/__fixtures__/**", + "**/fixtures/**" ] } From 1a1875bd09511b167b827c32eeafcae99fdfab7b Mon Sep 17 00:00:00 2001 From: Patrick Lee Scott Date: Sat, 29 Aug 2026 17:25:56 -0500 Subject: [PATCH 5/8] fix: scope package dependency extraction --- renovate.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/renovate.json b/renovate.json index 8a4491f..24f0d85 100644 --- a/renovate.json +++ b/renovate.json @@ -121,7 +121,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 4faeb8bbd5aa56f58956bde62c204f3a067688a6 Mon Sep 17 00:00:00 2001 From: Patrick Lee Scott Date: Sat, 29 Aug 2026 17:30:11 -0500 Subject: [PATCH 6/8] 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 048b835..4bbf259 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/on-pr.yaml' - '.gitops/**' - 'apis/**' From 9caee54449b1939de921806f29406e3e4a80f3d7 Mon Sep 17 00:00:00 2001 From: Patrick Lee Scott Date: Sat, 29 Aug 2026 18:00:16 -0500 Subject: [PATCH 7/8] fix: use compatible major dependency ranges --- renovate.json | 12 ++++++------ upbound.yaml | 12 ++++++------ 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/renovate.json b/renovate.json index 24f0d85..598e169 100644 --- a/renovate.json +++ b/renovate.json @@ -82,13 +82,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 =v2 =v2 =v2 =v1 =v0 From e84a4c898af7e4c5599d15367e751ad3fb988f86 Mon Sep 17 00:00:00 2001 From: Patrick Lee Scott Date: Sat, 29 Aug 2026 18:14:33 -0500 Subject: [PATCH 8/8] fix: namespace observed EFS test resources --- tests/test-render/main.k | 3 +++ 1 file changed, 3 insertions(+) diff --git a/tests/test-render/main.k b/tests/test-render/main.k index 9cb9404..2f7cdaf 100644 --- a/tests/test-render/main.k +++ b/tests/test-render/main.k @@ -11,6 +11,7 @@ _observed_file_system = { kind = "FileSystem" metadata = { name = "gitkb" + namespace = "default" annotations = {"crossplane.io/composition-resource-name" = "file-system"} } status = { @@ -29,6 +30,7 @@ _observed_security_group = { kind = "SecurityGroup" metadata = { name = "gitkb-mt" + namespace = "default" annotations = {"crossplane.io/composition-resource-name" = "security-group"} } status = { @@ -45,6 +47,7 @@ _observed_pod_identity = { kind = "PodIdentity" metadata = { name = "gitkb-efs-csi" + namespace = "default" annotations = {"crossplane.io/composition-resource-name" = "csi-pod-identity"} } status = {