Skip to content

Commit 5bc006b

Browse files
authored
ci(e2e): pin emulator versions and fix Azurite compatibility (#725)
Pin all e2e test emulator images to specific SHA256 digests to ensure immutability and prevent unexpected breakage from upstream changes. The three emulators (Azurite for Azure, MinIO for S3, and fake-gcs-server for GCS) were previously using the :latest tag, which could cause test failures when new versions with breaking changes or bugs were released. Using SHA256 digests instead of version tags provides immutability (ensures we always pull the exact same image), transparency (easy to verify what's running via digest comparison), and Renovate compatibility (can still track and propose updates). All pinned SHAs match the current :latest tag, confirming we're using the same images that were previously tested. Updated Renovate configuration to track digest-based updates while preserving version information in comments for human readability. Fixed Renovate to scan test directories and handle multi-line regex patterns for .go files. Also fixed Azurite compatibility issue by adding the --skipApiVersionCheck flag. Tests were failing because the PostgreSQL container images install Python dependencies without version pinning, which resulted in azure-storage-blob 12.28.0 (released January 6, 2026) being installed. This version uses API version 2026-02-06 which Azurite 3.35.0 doesn't support yet. The flag allows Azurite to accept any API version in the test environment. Note that MinIO is now in maintenance mode and will not receive further updates, but it has been included for completeness. Signed-off-by: Marco Nenciarini <[email protected]>
1 parent 4f5b407 commit 5bc006b

File tree

4 files changed

+37
-7
lines changed

4 files changed

+37
-7
lines changed

renovate.json5

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,17 @@
1111
],
1212
rebaseWhen: 'never',
1313
prConcurrentLimit: 5,
14+
// Override default ignorePaths to scan test/e2e for emulator image dependencies
15+
// Removed: '**/test/**'
16+
ignorePaths: [
17+
'**/node_modules/**',
18+
'**/bower_components/**',
19+
'**/vendor/**',
20+
'**/examples/**',
21+
'**/__tests__/**',
22+
'**/tests/**',
23+
'**/__fixtures__/**',
24+
],
1425
lockFileMaintenance: {
1526
enabled: true,
1627
},
@@ -28,7 +39,7 @@
2839
{
2940
customType: 'regex',
3041
managerFilePatterns: [
31-
'/(^Taskfile\\.yml$)/',
42+
'/(^|/)Taskfile\\.yml$/',
3243
],
3344
matchStrings: [
3445
'# renovate: datasource=(?<datasource>[a-z-.]+?) depName=(?<depName>[^\\s]+?)(?: (?:lookupName|packageName)=(?<packageName>[^\\s]+?))?(?: versioning=(?<versioning>[^\\s]+?))?(?: extractVersion=(?<extractVersion>[^\\s]+?))?(?: currentValue=(?<currentValue>[^\\s]+?))?\\s+[A-Za-z0-9_]+?_SHA\\s*:\\s*["\']?(?<currentDigest>[a-f0-9]+?)["\']?\\s',
@@ -38,7 +49,16 @@
3849
{
3950
customType: 'regex',
4051
managerFilePatterns: [
41-
'/(^docs/config\\.yaml$)/',
52+
'/\\.go$/',
53+
],
54+
matchStrings: [
55+
'//\\s*renovate:\\s*datasource=(?<datasource>[a-z-.]+?)\\s+depName=(?<depName>[^\\s]+?)(?:\\s+versioning=(?<versioning>[^\\s]+?))?\\s*\\n\\s*//\\s*Version:\\s*(?<currentValue>[^\\s]+?)\\s*\\n\\s*Image:\\s*"[^@]+@(?<currentDigest>sha256:[a-f0-9]+)"',
56+
],
57+
},
58+
{
59+
customType: 'regex',
60+
managerFilePatterns: [
61+
'/(^|/)docs/config\\.yaml$/',
4262
],
4363
matchStrings: [
4464
'# renovate: datasource=(?<datasource>[a-z-.]+?) depName=(?<depName>[^\\s]+?)(?: (?:lookupName|packageName)=(?<packageName>[^\\s]+?))?(?: versioning=(?<versioning>[^\\s]+?))?(?: extractVersion=(?<extractVersion>[^\\s]+?))?\\s+kubernetesVersion:\\s*["\']?(?<currentValue>.+?)["\']?\\s',

test/e2e/internal/objectstore/azurite.go

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -71,8 +71,15 @@ func newAzuriteDeployment(namespace, name string) *appsv1.Deployment {
7171
Containers: []corev1.Container{
7272
{
7373
Name: name,
74-
// TODO: renovate the image
75-
Image: "mcr.microsoft.com/azure-storage/azurite",
74+
// renovate: datasource=docker depName=mcr.microsoft.com/azure-storage/azurite versioning=docker
75+
// Version: 3.35.0
76+
Image: "mcr.microsoft.com/azure-storage/azurite@sha256:647c63a91102a9d8e8000aab803436e1fc85fbb285e7ce830a82ee5d6661cf37",
77+
Args: []string{
78+
"azurite-blob",
79+
"--blobHost",
80+
"0.0.0.0",
81+
"--skipApiVersionCheck",
82+
},
7683
Ports: []corev1.ContainerPort{
7784
{
7885
ContainerPort: 10000,

test/e2e/internal/objectstore/fakegcsserver.go

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,9 @@ func newGCSDeployment(namespace, name string) *appsv1.Deployment {
7171
Containers: []corev1.Container{
7272
{
7373
Name: name,
74-
Image: "fsouza/fake-gcs-server:latest",
74+
// renovate: datasource=docker depName=fsouza/fake-gcs-server versioning=docker
75+
// Version: 1.52.3
76+
Image: "fsouza/fake-gcs-server@sha256:666f86b873120818b10a5e68d99401422fcf8b00c1f27fe89599c35236f48b4c",
7577
Ports: []corev1.ContainerPort{
7678
{
7779
ContainerPort: 4443,

test/e2e/internal/objectstore/minio.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -71,8 +71,9 @@ func newMinioDeployment(namespace, name string) *appsv1.Deployment {
7171
Containers: []corev1.Container{
7272
{
7373
Name: name,
74-
// TODO: renovate the image
75-
Image: "minio/minio:latest",
74+
// renovate: datasource=docker depName=minio/minio versioning=docker
75+
// Version: RELEASE.2025-09-07T16-13-09Z
76+
Image: "minio/minio@sha256:14cea493d9a34af32f524e538b8346cf79f3321eff8e708c1e2960462bd8936e",
7677
Args: []string{"server", "/data"},
7778
Ports: []corev1.ContainerPort{
7879
{

0 commit comments

Comments
 (0)