From 3e5eafc4799e3cb31394fad8e1784046ce6b1bc2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alberto=20Mart=C3=ADnez=20P=C3=A9rez?= Date: Thu, 5 Feb 2026 16:02:45 +0100 Subject: [PATCH 01/34] Update README.md file adding quich start guide, project detailed info and reorganizing --- README.md | 71 +++++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 69 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 3557b4a..aeffc7f 100644 --- a/README.md +++ b/README.md @@ -3,8 +3,37 @@ SPDX-FileCopyrightText: 2024 INDUSTRIA DE DISEÑO TEXTIL S.A. (INDITEX S.A.) SPDX-License-Identifier: CC-BY-SA-4.0 --> + +
+ +# Redkey Operator + +**Seamless Redkey Cluster Management on Kubernetes** + +[![GitHub License](https://img.shields.io/github/license/InditexTech/redkeyoperator)](LICENSE) +[![GitHub Release](https://img.shields.io/github/v/release/InditexTech/redkeyoperator)](https://github.com/InditexTech/redkeyoperator/releases) +[![Go Version](https://img.shields.io/github/go-mod/go-version/InditexTech/redkeyoperator)](go.mod) +[![Build Status](https://img.shields.io/github/actions/workflow/status/InditexTech/redkeyoperator/ci.yml?branch=main)](https://github.com/InditexTech/redkeyoperator/actions) + +[![Kubernetes](https://img.shields.io/badge/Kubernetes-326CE5?style=flat&logo=kubernetes&logoColor=white)](https://kubernetes.io/) +[![Operator SDK](https://img.shields.io/badge/Operator%20SDK-326CE5?style=flat&logo=kubernetes&logoColor=white)](https://sdk.operatorframework.io/) +[![Go](https://img.shields.io/badge/Go-00ADD8?style=flat&logo=go&logoColor=white)](https://golang.org/) +[![REUSE Compliance](https://img.shields.io/badge/REUSE-compliant-green)](https://reuse.software/) + +[![GitHub Issues](https://img.shields.io/github/issues/InditexTech/redkeyoperator)](https://github.com/InditexTech/redkeyoperator/issues) +[![GitHub Pull Requests](https://img.shields.io/github/issues-pr/InditexTech/redkeyoperator)](https://github.com/InditexTech/redkeyoperator/pulls) +[![GitHub Stars](https://img.shields.io/github/stars/InditexTech/redkeyoperator?style=social)](https://github.com/InditexTech/redkeyoperator/stargazers) +[![GitHub Forks](https://img.shields.io/github/forks/InditexTech/redkeyoperator?style=social)](https://github.com/InditexTech/redkeyoperator/network/members) + +[🚀 Quick Start](#quick-start) • [📖 Documentation](./docs) • [🤝 Contributing](./CONTRIBUTING.md) • [📝 License](./LICENSE) + ![Redkey Operator icon](docs/images/redkey-logo-50.png) -# Redkey Operator for Kubernetes + +
+ +--- + +## Overview A **Redkey Cluster** is a key/value cluster using either [Redis Official Image](https://hub.docker.com/_/redis) or [Valkey Official Image](https://hub.docker.com/r/valkey/valkey/) images to create its nodes (note that all cluster nodes must use the same image). @@ -14,7 +43,7 @@ This operator implements a controller that extends the Kubernetes API allowing t Redkey operator is built using [kubebuilder](https://github.com/kubernetes-sigs/kubebuilder) and [operator-sdk](https://github.com/operator-framework/operator-sdk). -## Features +## Key Features - Redkey Cluster creation - Cluster scaling up and down @@ -27,6 +56,40 @@ Redkey operator is built using [kubebuilder](https://github.com/kubernetes-sigs/ - Ephemeral cluster (pure cache-like behavior) or using persistence - RedisGraph support +## Quick Start + +Prerrequisites: +- A running Kubernetes cluster (v1.24+) +- kubectl (v1.24+) +- Make + +The operator can be installed using the provided Makefile. The following steps will guide you through the installation and deployment of a sample Redkey Cluster. Redkey Operator can be installed in any namespace, but for this quick start we will use the `redkey-operator` namespace. + +1. Clone the repository to your local machine: + +```bash +git clone https://github.com/InditexTech/redkeyoperator.git +cd redkeyoperator +``` + +2. Generate and install the CRDs: + +```bash +make install +``` + +3. Deploy the operator in the cluster (replace `${VERSION}` with the desired version, e.g., `1.0.0`): + +```bash +make deploy IMG=ghcr.io/inditextech/redkey-operator:${VERSION} +``` + +4. Create a Redkey Cluster (replace `${VERSION}` with the desired version, e.g., `1.0.0`): + +```bash +make apply-rkcl IMG_ROBIN=ghcr.io/inditextech/redkey-robin:${VERSION} +``` + ## Documentation Refer to [operator guide](./docs/operator-guide/toc.md) to have an overview of the main Redis configuration and management options, and a troubleshooting guide. @@ -39,6 +102,10 @@ Discover [Redkey Robin](./docs/redkey-robin.md). The importance of the [purgeKeysOnRebalance](./docs/purge-keys-on-rebalance.md) parameter. +## Contributing + +Contributions are welcome! Please read our [contributing guidelines](./CONTRIBUTING.md) to get started. + ## Versions - Go version (https://github.com/golang/go): v1.25.6 From 666c40fc15a5516b5d19d0fd854cbe4ae7fa4db5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alberto=20Mart=C3=ADnez=20P=C3=A9rez?= Date: Thu, 5 Feb 2026 16:05:55 +0100 Subject: [PATCH 02/34] Update license header --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index aeffc7f..73639c1 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@
From 81acf5defe7dbf1b336d3e620e31b3a43aed2320 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alberto=20Mart=C3=ADnez=20P=C3=A9rez?= Date: Thu, 5 Feb 2026 17:01:11 +0100 Subject: [PATCH 03/34] Configure coherent controller-gen version for the operator sdk version used --- Makefile | 2 +- README.md | 2 +- config/crd/bases/redis.inditex.dev_redkeyclusters.yaml | 2 +- go.mod | 3 ++- go.sum | 6 ++++-- 5 files changed, 9 insertions(+), 6 deletions(-) diff --git a/Makefile b/Makefile index f99a435..48a1a5a 100644 --- a/Makefile +++ b/Makefile @@ -13,8 +13,8 @@ package := github.com/inditextech/$(name) ## Tool Versions KUSTOMIZE_VERSION ?= v5.8.0 -CONTROLLER_TOOLS_VERSION ?= v0.20.0 OPERATOR_SDK_VERSION ?= v1.42.0 +CONTROLLER_TOOLS_VERSION ?= v0.18.0 # ............................................................................. # DONT TOUCH THIS SECTION diff --git a/README.md b/README.md index 73639c1..9b9b71b 100644 --- a/README.md +++ b/README.md @@ -110,7 +110,7 @@ Contributions are welcome! Please read our [contributing guidelines](./CONTRIBUT - Go version (https://github.com/golang/go): v1.25.6 - Operator SDK version (https://github.com/operator-framework/operator-sdk): v1.42.0 -- Kubernetes Controller Tools version (https://github.com/kubernetes-sigs/controller-tools): v0.20.0 +- Kubernetes Controller Tools version (https://github.com/kubernetes-sigs/controller-tools): v0.18.0 ## License diff --git a/config/crd/bases/redis.inditex.dev_redkeyclusters.yaml b/config/crd/bases/redis.inditex.dev_redkeyclusters.yaml index bfd7261..ee61958 100644 --- a/config/crd/bases/redis.inditex.dev_redkeyclusters.yaml +++ b/config/crd/bases/redis.inditex.dev_redkeyclusters.yaml @@ -6,7 +6,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.20.0 + controller-gen.kubebuilder.io/version: v0.18.0 name: redkeyclusters.redis.inditex.dev spec: group: redis.inditex.dev diff --git a/go.mod b/go.mod index 938f242..dad0894 100644 --- a/go.mod +++ b/go.mod @@ -17,11 +17,12 @@ require ( k8s.io/apimachinery v0.33.0 k8s.io/client-go v0.33.0 k8s.io/utils v0.0.0-20250321185631-1f6e0b77f77e - sigs.k8s.io/controller-runtime v0.20.4 + sigs.k8s.io/controller-runtime v0.21.0 ) require ( github.com/beorn7/perks v1.0.1 // indirect + github.com/blang/semver/v4 v4.0.0 // indirect github.com/cespare/xxhash/v2 v2.3.0 // indirect github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect github.com/emicklei/go-restful/v3 v3.12.2 // indirect diff --git a/go.sum b/go.sum index efe1835..c966df5 100644 --- a/go.sum +++ b/go.sum @@ -2,6 +2,8 @@ github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5 h1:0CwZNZbxp69SHPd github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5/go.mod h1:wHh0iHkYZB8zMSxRWpUBQtwG5a7fFgvEO+odwuTv2gs= github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= +github.com/blang/semver/v4 v4.0.0 h1:1PFHFE6yCCTv8C1TeyNNarDzntLi7wMI5i/pzqYIsAM= +github.com/blang/semver/v4 v4.0.0/go.mod h1:IbckMUScFkM3pff0VJDNKRiT6TG/YpiHIM2yvyW5YoQ= github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs= github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= @@ -186,8 +188,8 @@ k8s.io/kube-openapi v0.0.0-20250318190949-c8a335a9a2ff h1:/usPimJzUKKu+m+TE36gUy k8s.io/kube-openapi v0.0.0-20250318190949-c8a335a9a2ff/go.mod h1:5jIi+8yX4RIb8wk3XwBo5Pq2ccx4FP10ohkbSKCZoK8= k8s.io/utils v0.0.0-20250321185631-1f6e0b77f77e h1:KqK5c/ghOm8xkHYhlodbp6i6+r+ChV2vuAuVRdFbLro= k8s.io/utils v0.0.0-20250321185631-1f6e0b77f77e/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0= -sigs.k8s.io/controller-runtime v0.20.4 h1:X3c+Odnxz+iPTRobG4tp092+CvBU9UK0t/bRf+n0DGU= -sigs.k8s.io/controller-runtime v0.20.4/go.mod h1:xg2XB0K5ShQzAgsoujxuKN4LNXR2LfwwHsPj7Iaw+XY= +sigs.k8s.io/controller-runtime v0.21.0 h1:CYfjpEuicjUecRk+KAeyYh+ouUBn4llGyDYytIGcJS8= +sigs.k8s.io/controller-runtime v0.21.0/go.mod h1:OSg14+F65eWqIu4DceX7k/+QRAbTTvxeQSNSOQpukWM= sigs.k8s.io/json v0.0.0-20241014173422-cfa47c3a1cc8 h1:gBQPwqORJ8d8/YNZWEjoZs7npUVDpVXUUOFfW6CgAqE= sigs.k8s.io/json v0.0.0-20241014173422-cfa47c3a1cc8/go.mod h1:mdzfpAEoE6DHQEN0uh9ZbOCuHbLK5wOm7dK4ctXE9Tg= sigs.k8s.io/randfill v0.0.0-20250304075658-069ef1bbf016/go.mod h1:XeLlZ/jmk4i1HRopwe7/aU3H5n1zNUcX6TM94b3QxOY= From 8f1721bf994632699677fa88a8ee97aaa6642db6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alberto=20Mart=C3=ADnez=20P=C3=A9rez?= Date: Thu, 5 Feb 2026 17:02:17 +0100 Subject: [PATCH 04/34] Add PROJECT file required by operator sdk to build the bundle --- PROJECT | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 PROJECT diff --git a/PROJECT b/PROJECT new file mode 100644 index 0000000..c134d4f --- /dev/null +++ b/PROJECT @@ -0,0 +1,26 @@ +# SPDX-FileCopyrightText: 2025 INDUSTRIA DE DISEÑO TEXTIL S.A. (INDITEX S.A.) +# SPDX-License-Identifier: Apache-2.0 + +# Code generated by tool. DO NOT EDIT. +# This file is used to track the info used to scaffold your project +# and allow the plugins properly work. +# More info: https://book.kubebuilder.io/reference/project-config.html +domain: inditex.dev +layout: +- go.kubebuilder.io/v4 +plugins: + manifests.sdk.operatorframework.io/v2: {} + scorecard.sdk.operatorframework.io/v2: {} +projectName: redkeyoperator +repo: github.com/InditexTech/redkeyoperator +resources: +- api: + crdVersion: v1 + namespaced: true + controller: true + domain: inditex.dev + group: redis + kind: RedkeyCluster + path: github.com/InditexTech/redkeyoperator/api/v1 + version: v1 +version: "3" From c998bbb447f9a1a66b7e70c6d0621441f57fdd93 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alberto=20Mart=C3=ADnez=20P=C3=A9rez?= Date: Thu, 5 Feb 2026 18:38:25 +0100 Subject: [PATCH 05/34] Add base CSV file --- .../redkeyoperator.clusterserviceversion.yaml | 82 +++++++++++++++++++ 1 file changed, 82 insertions(+) create mode 100644 config/manifests/bases/redkeyoperator.clusterserviceversion.yaml diff --git a/config/manifests/bases/redkeyoperator.clusterserviceversion.yaml b/config/manifests/bases/redkeyoperator.clusterserviceversion.yaml new file mode 100644 index 0000000..ce7b914 --- /dev/null +++ b/config/manifests/bases/redkeyoperator.clusterserviceversion.yaml @@ -0,0 +1,82 @@ +apiVersion: operators.coreos.com/v1alpha1 +kind: ClusterServiceVersion +metadata: + annotations: + alm-examples: |- + [ + { + "apiVersion": "redis.inditex.dev/v1", + "kind": "RedkeyCluster", + "metadata": { + "name": "redis-cluster-example" + }, + "spec": { + "primaries": 3, + "ephemeral": true, + "accessModes": ["ReadWriteOnce"], + "image": "redis:8-bookworm", + "purgeKeysOnRebalance": true, + "resources": { + "limits": { + "cpu": "100m", + "memory": "128Mi" + } + } + } + } + ] + capabilities: Basic Install + name: redkeyoperator.v0.0.0 + namespace: placeholder +spec: + apiservicedefinitions: {} + customresourcedefinitions: + owned: + - description: RedkeyCluster is the Schema for the redkeyclusters API + displayName: Redkey Cluster + kind: RedkeyCluster + name: redkeyclusters.redis.inditex.dev + specDescriptors: + - description: ReplicasPerPrimary specifies how many replicas should be attached + to each Redis Primary node + displayName: Number of replicas per Primary Node + path: replicasPerPrimary + version: v1 + description: Seamless Redkey Cluster Management on Kubernetes + displayName: Redkey Operator + icon: + - base64data: "" + mediatype: "" + install: + spec: + deployments: null + strategy: "" + installModes: + - supported: false + type: OwnNamespace + - supported: false + type: SingleNamespace + - supported: false + type: MultiNamespace + - supported: true + type: AllNamespaces + keywords: + - redis + - valkey + - cluster + - real-time-data + - kubernetes + - k8s + - ocp + links: + - name: redkeyoperator + url: https://redkeyoperator.domain + maintainers: + - email: paasteam@inditex.com + name: PaaSTeam + maturity: alpha + minKubeVersion: 1.24.0 + provider: + name: InditexTech + url: https://github.com/InditexTech + version: 0.0.0 From f691b879d32cf4063710d6dc74b6d396183468f0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alberto=20Mart=C3=ADnez=20P=C3=A9rez?= Date: Fri, 6 Feb 2026 02:41:20 +0100 Subject: [PATCH 06/34] Fix logo size --- docs/images/redkey-logo-50.png | Bin 37093 -> 37107 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/docs/images/redkey-logo-50.png b/docs/images/redkey-logo-50.png index a5ca28f48535252e10d785a6bf20426e441f6e62..7ffc5baa8e40c7199c7bd37cdab5c7424f4cd90e 100644 GIT binary patch literal 37107 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 Date: Fri, 6 Feb 2026 02:41:47 +0100 Subject: [PATCH 07/34] Add Operator icon to CSV base file --- .../manifests/bases/redkeyoperator.clusterserviceversion.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/config/manifests/bases/redkeyoperator.clusterserviceversion.yaml b/config/manifests/bases/redkeyoperator.clusterserviceversion.yaml index ce7b914..e72e88a 100644 --- a/config/manifests/bases/redkeyoperator.clusterserviceversion.yaml +++ b/config/manifests/bases/redkeyoperator.clusterserviceversion.yaml @@ -45,8 +45,8 @@ spec: description: Seamless Redkey Cluster Management on Kubernetes displayName: Redkey Operator icon: - - base64data: "" - mediatype: "" + - base64data: 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 + mediatype: image/png install: spec: deployments: null From b31957da7937e219002b8b4cda4e85b384bb30fa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alberto=20Mart=C3=ADnez=20P=C3=A9rez?= Date: Fri, 6 Feb 2026 09:59:47 +0100 Subject: [PATCH 08/34] Update version and set the CRD annotation version from make --- Makefile | 4 +++- cmd/main.go | 2 +- config/crd/kustomization.yaml | 5 ++--- config/crd/patches/operator-crd-patch.yaml | 9 --------- 4 files changed, 6 insertions(+), 14 deletions(-) delete mode 100644 config/crd/patches/operator-crd-patch.yaml diff --git a/Makefile b/Makefile index 48a1a5a..84e734a 100644 --- a/Makefile +++ b/Makefile @@ -6,7 +6,7 @@ SHELL := /bin/bash name := redkey-cluster-operator -version := 1.3.0 +version := 0.1.0 golang_version := 1.25.6 delve_version := 1.25 package := github.com/inditextech/$(name) @@ -262,6 +262,8 @@ process-manifests: kustomize process-manifests-crd ## Generate the kustomized y process-manifests-crd: kustomize manifests ## Generate the kustomized yamls into the `deployment` directory to deploy the CRD. $(info $(M) generating CRD deploying manifest files) mkdir -p deployment + cd config/crd && \ + $(KUSTOMIZE) edit set annotation inditex.dev/operator-version:${version}; $(KUSTOMIZE) build config/crd > deployment/redis.inditex.dev_redkeyclusters.yaml @echo "CRD manifest generated successfully" diff --git a/cmd/main.go b/cmd/main.go index 69e4499..53ba6cd 100644 --- a/cmd/main.go +++ b/cmd/main.go @@ -32,7 +32,7 @@ import ( const ( USER_AGENT_NAME = "redkey-cluster-operator" - USER_AGENT_VERSION = "1.3.0" + USER_AGENT_VERSION = "0.1.0" ) var ( diff --git a/config/crd/kustomization.yaml b/config/crd/kustomization.yaml index 10a80b0..b8a5efb 100644 --- a/config/crd/kustomization.yaml +++ b/config/crd/kustomization.yaml @@ -6,6 +6,5 @@ kind: Kustomization resources: - bases/redis.inditex.dev_redkeyclusters.yaml - -patches: -- path: ./patches/operator-crd-patch.yaml +commonAnnotations: + inditex.dev/operator-version: 0.1.0 diff --git a/config/crd/patches/operator-crd-patch.yaml b/config/crd/patches/operator-crd-patch.yaml deleted file mode 100644 index 4f97f19..0000000 --- a/config/crd/patches/operator-crd-patch.yaml +++ /dev/null @@ -1,9 +0,0 @@ -# SPDX-FileCopyrightText: 2025 INDUSTRIA DE DISEÑO TEXTIL S.A. (INDITEX S.A.) -# SPDX-License-Identifier: Apache-2.0 - -apiVersion: apiextensions.k8s.io/v1 -kind: CustomResourceDefinition -metadata: - name: redkeyclusters.redis.inditex.dev - annotations: - inditex.dev/operator-version: 0.2.40 From 51476241ca483000ca8b3fbf8efffa5c6b0b7171 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alberto=20Mart=C3=ADnez=20P=C3=A9rez?= Date: Fri, 6 Feb 2026 10:10:48 +0100 Subject: [PATCH 09/34] Update the operator-version when generating the manifests to update bundle and deployment manifests generated --- Makefile | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/Makefile b/Makefile index 84e734a..0c093d4 100644 --- a/Makefile +++ b/Makefile @@ -193,9 +193,12 @@ clean: ## Clean the build artifacts and Go cache $(GO) clean --modcache ##@ Development -manifests: controller-gen ## Generate ClusterRole and CustomResourceDefinition objects. +manifests: kustomize controller-gen ## Generate ClusterRole and CustomResourceDefinition objects. $(info $(M) generating config CRD base manifest files from code) $(CONTROLLER_GEN) rbac:roleName=redkey-operator-role crd:maxDescLen=0 paths="./..." output:crd:artifacts:config=config/crd/bases + $(info $(M) setting operator version annotation in CRD kustomization file) + cd config/crd && \ + $(KUSTOMIZE) edit set annotation inditex.dev/operator-version:${version}; generate: controller-gen ## Generate code containing DeepCopy, DeepCopyInto, and DeepCopyObject method implementations. $(CONTROLLER_GEN) object:headerFile="hack/boilerplate.go.txt" paths="./..." @@ -262,8 +265,6 @@ process-manifests: kustomize process-manifests-crd ## Generate the kustomized y process-manifests-crd: kustomize manifests ## Generate the kustomized yamls into the `deployment` directory to deploy the CRD. $(info $(M) generating CRD deploying manifest files) mkdir -p deployment - cd config/crd && \ - $(KUSTOMIZE) edit set annotation inditex.dev/operator-version:${version}; $(KUSTOMIZE) build config/crd > deployment/redis.inditex.dev_redkeyclusters.yaml @echo "CRD manifest generated successfully" From bc49548ab21c2a9e95351d36c72f0ef64d914795 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alberto=20Mart=C3=ADnez=20P=C3=A9rez?= Date: Fri, 6 Feb 2026 10:12:15 +0100 Subject: [PATCH 10/34] Update logging message --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 0c093d4..4692307 100644 --- a/Makefile +++ b/Makefile @@ -196,7 +196,7 @@ clean: ## Clean the build artifacts and Go cache manifests: kustomize controller-gen ## Generate ClusterRole and CustomResourceDefinition objects. $(info $(M) generating config CRD base manifest files from code) $(CONTROLLER_GEN) rbac:roleName=redkey-operator-role crd:maxDescLen=0 paths="./..." output:crd:artifacts:config=config/crd/bases - $(info $(M) setting operator version annotation in CRD kustomization file) + $(info $(M) setting operator-version annotation in CRD kustomization file) cd config/crd && \ $(KUSTOMIZE) edit set annotation inditex.dev/operator-version:${version}; From f7e0c408de1fd12873fec3eedd160fca4cef9e45 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alberto=20Mart=C3=ADnez=20P=C3=A9rez?= Date: Fri, 6 Feb 2026 10:30:11 +0100 Subject: [PATCH 11/34] Trimming file --- config/manager/kustomization.yaml | 2 -- 1 file changed, 2 deletions(-) diff --git a/config/manager/kustomization.yaml b/config/manager/kustomization.yaml index 7967cf4..634fa18 100644 --- a/config/manager/kustomization.yaml +++ b/config/manager/kustomization.yaml @@ -16,5 +16,3 @@ configMapGenerator: apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization - - From 275cafbc6fa6532605471c88f2a134b21d76dd94 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alberto=20Mart=C3=ADnez=20P=C3=A9rez?= Date: Fri, 6 Feb 2026 10:34:30 +0100 Subject: [PATCH 12/34] Commit generated CRD --- config/crd/bases/redis.inditex.dev_redkeyclusters.yaml | 3 --- 1 file changed, 3 deletions(-) diff --git a/config/crd/bases/redis.inditex.dev_redkeyclusters.yaml b/config/crd/bases/redis.inditex.dev_redkeyclusters.yaml index ee61958..a34234d 100644 --- a/config/crd/bases/redis.inditex.dev_redkeyclusters.yaml +++ b/config/crd/bases/redis.inditex.dev_redkeyclusters.yaml @@ -1,6 +1,3 @@ -# SPDX-FileCopyrightText: 2025 INDUSTRIA DE DISEÑO TEXTIL S.A. (INDITEX S.A.) -# SPDX-License-Identifier: Apache-2.0 - --- apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition From 1ceba5360b2026ebd3978886e18880af1c940be8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alberto=20Mart=C3=ADnez=20P=C3=A9rez?= Date: Fri, 6 Feb 2026 10:35:08 +0100 Subject: [PATCH 13/34] Remove image set by kustomize to not interfere with other goals --- Makefile | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Makefile b/Makefile index 4692307..c750ef8 100644 --- a/Makefile +++ b/Makefile @@ -455,6 +455,8 @@ bundle: kustomize manifests ## Generate the files for bundle. cd config/manager && $(KUSTOMIZE) edit set image redkey-operator=$(IMAGE_REF) $(KUSTOMIZE) build config | $(OPERATOR_SDK) generate bundle -q --overwrite --channels $(CHANNELS) --version $(version) $(BUNDLE_METADATA_OPTS) $(OPERATOR_SDK) bundle validate ./bundle + # Remove the images section from the kustomization.yaml added when kustomizing. + cd config/manager && sed -i '/^images:$$/,/^[^ -]/{ /^images:$$/d; /^- name: redkey-operator$$/,/^ newTag:/d; }' kustomization.yaml && sed -i '/^images:$$/d' kustomization.yaml .PHONY: bundle-build bundle-build: ## Build the bundle image. From a58b70bebd97526ce1d268ab541b693728d56126 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alberto=20Mart=C3=ADnez=20P=C3=A9rez?= Date: Fri, 6 Feb 2026 13:25:22 +0100 Subject: [PATCH 14/34] Update Makefile to build and push the catalog --- .gitignore | 1 + Makefile | 72 +++++++++++++++++++++++++++++++++++++++++++++++------- 2 files changed, 64 insertions(+), 9 deletions(-) diff --git a/.gitignore b/.gitignore index 0c370a8..443478e 100644 --- a/.gitignore +++ b/.gitignore @@ -46,6 +46,7 @@ config/init-test/tests.yaml # Bundle temporary files bundle +bundle_* bundle.Dockerfile # Certificates diff --git a/Makefile b/Makefile index c750ef8..e4f1a10 100644 --- a/Makefile +++ b/Makefile @@ -94,13 +94,27 @@ else GOBIN=$(shell go env GOBIN) endif +# CONTAINER_TOOL defines the container tool to be used for building images. +# Be aware that the target commands are only tested with Docker which is +# scaffolded by default. However, you might want to replace it to use other +# tools. (i.e. podman) +CONTAINER_TOOL ?= docker + +# IMAGE_TAG_BASE defines the docker.io namespace and part of the image name for remote images. +# This variable is used to construct full image tags for bundle and catalog images. +# +# For example, running 'make bundle-build bundle-push catalog-build catalog-push' will build and push both +# inditex.dev/sample-bundle:$VERSION and inditex.dev/sample-catalog:$VERSION. +IMAGE_TAG_BASE ?= localhost:5001/redkey-operator +ROBIN_IMAGE_TAG_BASE ?= localhost:5001/redkey-robin + # Image URL to use for building/pushing image targets -IMG ?= localhost:5001/redkey-operator:$(PROFILE) -IMG_ROBIN ?= localhost:5001/redkey-robin:$(PROFILE_ROBIN) +IMG ?= $(IMAGE_TAG_BASE):$(version) +IMG_ROBIN ?= $(ROBIN_IMAGE_TAG_BASE):$(PROFILE_ROBIN) # BUNDLE_IMG defines the image:tag used for the bundle. # You can use it as an arg. (E.g make bundle-build BUNDLE_IMG=/:) -BUNDLE_IMG ?= controller-bundle:$(version) +BUNDLE_IMG ?= $(IMAGE_TAG_BASE)-bundle:$(version) CHANNELS ?= alpha,beta @@ -232,13 +246,13 @@ run: ## Execute the program locally docker-build: test ## Build operator docker image from source or an empty image to copy the binary if default profile (uses `${IMG}` image name) $(info $(M) building operator docker image) if [ ${PROFILE} != "debug" ]; then \ - docker build -t ${IMG} --build-arg GOLANG_VERSION=${golang_version} . ; \ + $(CONTAINER_TOOL) build -t ${IMG} --build-arg GOLANG_VERSION=${golang_version} . ; \ else \ - docker build -t ${IMG} -f debug.Dockerfile --build-arg GOLANG_VERSION=${golang_version} --build-arg DELVE_VERSION=${delve_version} . ; \ + $(CONTAINER_TOOL) build -t ${IMG} -f debug.Dockerfile --build-arg GOLANG_VERSION=${golang_version} --build-arg DELVE_VERSION=${delve_version} . ; \ fi -docker-push: ## Push operator docker image (uses `${IMG}` image name). +docker-push: ## Push operator $(CONTAINER_TOOL) image (uses `${IMG}` image name). $(info $(M) pushing operator docker image) - docker push ${IMG} + $(CONTAINER_TOOL) push ${IMG} ##@ Deployment install: create-namespace process-manifests-crd ## Install CRD into the K8s cluster specified by kubectl default context (Kustomize is installed if not present). @@ -460,11 +474,51 @@ bundle: kustomize manifests ## Generate the files for bundle. .PHONY: bundle-build bundle-build: ## Build the bundle image. - docker build -f bundle.Dockerfile -t $(BUNDLE_IMG) . + $(CONTAINER_TOOL) build -f bundle.Dockerfile -t $(BUNDLE_IMG) . bundle-push: ## Push the bundle image. - docker push $(BUNDLE_IMG) + $(CONTAINER_TOOL) push $(BUNDLE_IMG) + +.PHONY: opm +OPM = $(LOCALBIN)/opm +opm: ## Download opm locally if necessary. +ifeq (,$(wildcard $(OPM))) +ifeq (,$(shell which opm 2>/dev/null)) + @{ \ + set -e ;\ + mkdir -p $(dir $(OPM)) ;\ + OS=$(shell go env GOOS) && ARCH=$(shell go env GOARCH) && \ + curl -sSLo $(OPM) https://github.com/operator-framework/operator-registry/releases/download/v1.55.0/$${OS}-$${ARCH}-opm ;\ + chmod +x $(OPM) ;\ + } +else +OPM = $(shell which opm) +endif +endif + +# A comma-separated list of bundle images (e.g. make catalog-build BUNDLE_IMGS=example.com/operator-bundle:v0.1.0,example.com/operator-bundle:v0.2.0). +# These images MUST exist in a registry and be pull-able. +BUNDLE_IMGS ?= $(BUNDLE_IMG) + +# The image tag given to the resulting catalog image (e.g. make catalog-build CATALOG_IMG=example.com/operator-catalog:v0.2.0). +CATALOG_IMG ?= $(IMAGE_TAG_BASE)-catalog:v$(version) + +# Set CATALOG_BASE_IMG to an existing catalog image tag to add $BUNDLE_IMGS to that image. +ifneq ($(origin CATALOG_BASE_IMG), undefined) +FROM_INDEX_OPT := --from-index $(CATALOG_BASE_IMG) +endif +# Build a catalog image by adding bundle images to an empty catalog using the operator package manager tool, 'opm'. +# This recipe invokes 'opm' in 'semver' bundle add mode. For more information on add modes, see: +# https://github.com/operator-framework/community-operators/blob/7f1438c/docs/packaging-operator.md#updating-your-existing-operator +.PHONY: catalog-build +catalog-build: opm ## Build a catalog image. + $(OPM) index add --container-tool $(CONTAINER_TOOL) --mode semver --tag $(CATALOG_IMG) --bundles $(BUNDLE_IMGS) $(FROM_INDEX_OPT) + +# Push the catalog image. +.PHONY: catalog-push +catalog-push: ## Push a catalog image. + $(MAKE) docker-push IMG=$(CATALOG_IMG) ##@ Test From cd9f349122afe9e1b195aafd3b314387cbbd3daf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alberto=20Mart=C3=ADnez=20P=C3=A9rez?= Date: Fri, 6 Feb 2026 22:42:50 +0100 Subject: [PATCH 15/34] clean goal removes .local directory --- Makefile | 1 + 1 file changed, 1 insertion(+) diff --git a/Makefile b/Makefile index e4f1a10..be9dce2 100644 --- a/Makefile +++ b/Makefile @@ -204,6 +204,7 @@ clean: ## Clean the build artifacts and Go cache rm -f bundle.Dockerfile rm -rf ./deployment rm -rf ./certs + rm -rf .local $(GO) clean --modcache ##@ Development From 2ae1282d1e2fb16c586032b5dbe34346aca35a3b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alberto=20Mart=C3=ADnez=20P=C3=A9rez?= Date: Fri, 6 Feb 2026 22:46:05 +0100 Subject: [PATCH 16/34] Updating development guide --- docs/developer-guide/development-guide.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/developer-guide/development-guide.md b/docs/developer-guide/development-guide.md index b8b1f63..e74020e 100644 --- a/docs/developer-guide/development-guide.md +++ b/docs/developer-guide/development-guide.md @@ -59,7 +59,7 @@ make install make deploy ``` -3. Deploy an example Redkey Cluster from `config/examples` folder. Just so you know, a Redkey Robin image is required; for example, see [Redkey Robin](https://github.com/InditexTech/redkeyrobin). +3. Deploy an example Redkey Cluster from `config/examples` folder. Just so you know, a Redkey Robin image is required; to know how it can be built, see [Redkey Robin](https://github.com/InditexTech/redkeyrobin). ```shell # Create a rkcl/redis-cluster-ephemeral: 3 nodes, ephemeral: true and purgeKeysOnRebalance: true. From 44173c91366411528eae70cd9fc98bca3aa6e231 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alberto=20Mart=C3=ADnez=20P=C3=A9rez?= Date: Sat, 7 Feb 2026 01:21:03 +0100 Subject: [PATCH 17/34] Rename variables --- Makefile | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/Makefile b/Makefile index be9dce2..418d246 100644 --- a/Makefile +++ b/Makefile @@ -5,11 +5,11 @@ .DEFAULT_GOAL := help SHELL := /bin/bash -name := redkey-cluster-operator -version := 0.1.0 -golang_version := 1.25.6 -delve_version := 1.25 -package := github.com/inditextech/$(name) +NAME := redkey-cluster-operator +VERSION := 0.1.0 +GOLANG_VERSION := 1.25.6 +DELVE_VERSION := 1.25 +PACKAGE := github.com/inditextech/$(NAME) ## Tool Versions KUSTOMIZE_VERSION ?= v5.8.0 @@ -33,7 +33,7 @@ SRC = $(shell find . -path ./vendor -prune -o -name '*.go' -print) M = $(shell printf "\033[34;1m▶\033[0m") MODULE=$(shell go list -m) -GO_COMPILE_FLAGS='-X $(MODULE)/cmd/server.GitCommit=$(COMMIT) -X $(MODULE)/cmd/server.BuildDate=$(DATE) -X $(MODULE)/cmd/server.VersionBuild=$(version)' +GO_COMPILE_FLAGS='-X $(MODULE)/cmd/server.GitCommit=$(COMMIT) -X $(MODULE)/cmd/server.BuildDate=$(DATE) -X $(MODULE)/cmd/server.VersionBuild=$(VERSION)' # Auxiliar programs SED = sed @@ -109,12 +109,12 @@ IMAGE_TAG_BASE ?= localhost:5001/redkey-operator ROBIN_IMAGE_TAG_BASE ?= localhost:5001/redkey-robin # Image URL to use for building/pushing image targets -IMG ?= $(IMAGE_TAG_BASE):$(version) +IMG ?= $(IMAGE_TAG_BASE):$(VERSION) IMG_ROBIN ?= $(ROBIN_IMAGE_TAG_BASE):$(PROFILE_ROBIN) # BUNDLE_IMG defines the image:tag used for the bundle. # You can use it as an arg. (E.g make bundle-build BUNDLE_IMG=/:) -BUNDLE_IMG ?= $(IMAGE_TAG_BASE)-bundle:$(version) +BUNDLE_IMG ?= $(IMAGE_TAG_BASE)-bundle:$(VERSION) CHANNELS ?= alpha,beta @@ -158,7 +158,7 @@ deps: ## Installs dependencies .PHONY: version version:: ## Print the current version of the project. - @echo "$(version)" + @echo "$(VERSION)" .PHONY: version-next version-next:: ## Bump to next development version @@ -213,7 +213,7 @@ manifests: kustomize controller-gen ## Generate ClusterRole and CustomResourceDe $(CONTROLLER_GEN) rbac:roleName=redkey-operator-role crd:maxDescLen=0 paths="./..." output:crd:artifacts:config=config/crd/bases $(info $(M) setting operator-version annotation in CRD kustomization file) cd config/crd && \ - $(KUSTOMIZE) edit set annotation inditex.dev/operator-version:${version}; + $(KUSTOMIZE) edit set annotation inditex.dev/operator-version:$(VERSION); generate: controller-gen ## Generate code containing DeepCopy, DeepCopyInto, and DeepCopyObject method implementations. $(CONTROLLER_GEN) object:headerFile="hack/boilerplate.go.txt" paths="./..." @@ -247,9 +247,9 @@ run: ## Execute the program locally docker-build: test ## Build operator docker image from source or an empty image to copy the binary if default profile (uses `${IMG}` image name) $(info $(M) building operator docker image) if [ ${PROFILE} != "debug" ]; then \ - $(CONTAINER_TOOL) build -t ${IMG} --build-arg GOLANG_VERSION=${golang_version} . ; \ + $(CONTAINER_TOOL) build -t ${IMG} --build-arg GOLANG_VERSION=$(GOLANG_VERSION) . ; \ else \ - $(CONTAINER_TOOL) build -t ${IMG} -f debug.Dockerfile --build-arg GOLANG_VERSION=${golang_version} --build-arg DELVE_VERSION=${delve_version} . ; \ + $(CONTAINER_TOOL) build -t ${IMG} -f debug.Dockerfile --build-arg GOLANG_VERSION=$(GOLANG_VERSION) --build-arg DELVE_VERSION=$(DELVE_VERSION) . ; \ fi docker-push: ## Push operator $(CONTAINER_TOOL) image (uses `${IMG}` image name). $(info $(M) pushing operator docker image) @@ -468,7 +468,7 @@ bundle: kustomize manifests ## Generate the files for bundle. rm -rf bundle/metadata/* $(OPERATOR_SDK) generate kustomize manifests -q cd config/manager && $(KUSTOMIZE) edit set image redkey-operator=$(IMAGE_REF) - $(KUSTOMIZE) build config | $(OPERATOR_SDK) generate bundle -q --overwrite --channels $(CHANNELS) --version $(version) $(BUNDLE_METADATA_OPTS) + $(KUSTOMIZE) build config | $(OPERATOR_SDK) generate bundle -q --overwrite --channels $(CHANNELS) --version $(VERSION) $(BUNDLE_METADATA_OPTS) $(OPERATOR_SDK) bundle validate ./bundle # Remove the images section from the kustomization.yaml added when kustomizing. cd config/manager && sed -i '/^images:$$/,/^[^ -]/{ /^images:$$/d; /^- name: redkey-operator$$/,/^ newTag:/d; }' kustomization.yaml && sed -i '/^images:$$/d' kustomization.yaml @@ -502,7 +502,7 @@ endif BUNDLE_IMGS ?= $(BUNDLE_IMG) # The image tag given to the resulting catalog image (e.g. make catalog-build CATALOG_IMG=example.com/operator-catalog:v0.2.0). -CATALOG_IMG ?= $(IMAGE_TAG_BASE)-catalog:v$(version) +CATALOG_IMG ?= $(IMAGE_TAG_BASE)-catalog:v$(VERSION) # Set CATALOG_BASE_IMG to an existing catalog image tag to add $BUNDLE_IMGS to that image. ifneq ($(origin CATALOG_BASE_IMG), undefined) From e445afd2fb6d4d96b949f30811f2d8096d383c8d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alberto=20Mart=C3=ADnez=20P=C3=A9rez?= Date: Sat, 7 Feb 2026 04:07:52 +0100 Subject: [PATCH 18/34] Update Go version to 1.25.7 --- .tool-versions | 2 +- Dockerfile | 2 +- Makefile | 2 +- README.md | 2 +- debug.Dockerfile | 2 +- go.mod | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/.tool-versions b/.tool-versions index ad00fe8..de62786 100644 --- a/.tool-versions +++ b/.tool-versions @@ -1,3 +1,3 @@ # SPDX-FileCopyrightText: 2025 INDUSTRIA DE DISEÑO TEXTIL S.A. (INDITEX S.A.) # SPDX-License-Identifier: Apache-2.0 -golang 1.25.6 +golang 1.25.7 diff --git a/Dockerfile b/Dockerfile index fc73a27..8ec5e5b 100644 --- a/Dockerfile +++ b/Dockerfile @@ -5,7 +5,7 @@ ### Build stage # Define the desired Golang version -ARG GOLANG_VERSION=1.25.6 +ARG GOLANG_VERSION=1.25.7 # Use an official Golang image with a specific version based on Debian FROM golang:${GOLANG_VERSION}-trixie AS builder diff --git a/Makefile b/Makefile index 418d246..69e5e4e 100644 --- a/Makefile +++ b/Makefile @@ -7,7 +7,7 @@ SHELL := /bin/bash NAME := redkey-cluster-operator VERSION := 0.1.0 -GOLANG_VERSION := 1.25.6 +GOLANG_VERSION := 1.25.7 DELVE_VERSION := 1.25 PACKAGE := github.com/inditextech/$(NAME) diff --git a/README.md b/README.md index 9b9b71b..bb5dc99 100644 --- a/README.md +++ b/README.md @@ -108,7 +108,7 @@ Contributions are welcome! Please read our [contributing guidelines](./CONTRIBUT ## Versions -- Go version (https://github.com/golang/go): v1.25.6 +- Go version (https://github.com/golang/go): v1.25.7 - Operator SDK version (https://github.com/operator-framework/operator-sdk): v1.42.0 - Kubernetes Controller Tools version (https://github.com/kubernetes-sigs/controller-tools): v0.18.0 diff --git a/debug.Dockerfile b/debug.Dockerfile index 7ccad12..3a8e1c2 100644 --- a/debug.Dockerfile +++ b/debug.Dockerfile @@ -3,7 +3,7 @@ # SPDX-License-Identifier: Apache-2.0 # Define the desired Golang version -ARG GOLANG_VERSION=1.25.6 +ARG GOLANG_VERSION=1.25.7 # Use an official Golang image with a specific version based on Debian FROM golang:${GOLANG_VERSION}-trixie diff --git a/go.mod b/go.mod index dad0894..8546886 100644 --- a/go.mod +++ b/go.mod @@ -3,7 +3,7 @@ // SPDX-License-Identifier: Apache-2.0 module github.com/inditextech/redkeyoperator -go 1.25.6 +go 1.25.7 require ( github.com/go-logr/logr v1.4.2 From b68a75b385b00346d162a5636fb7072e2d865fe1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alberto=20Mart=C3=ADnez=20P=C3=A9rez?= Date: Mon, 9 Feb 2026 09:21:47 +0100 Subject: [PATCH 19/34] Use profile as IMG version --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 69e5e4e..fd4dd21 100644 --- a/Makefile +++ b/Makefile @@ -109,7 +109,7 @@ IMAGE_TAG_BASE ?= localhost:5001/redkey-operator ROBIN_IMAGE_TAG_BASE ?= localhost:5001/redkey-robin # Image URL to use for building/pushing image targets -IMG ?= $(IMAGE_TAG_BASE):$(VERSION) +IMG ?= $(IMAGE_TAG_BASE):$(PROFILE) IMG_ROBIN ?= $(ROBIN_IMAGE_TAG_BASE):$(PROFILE_ROBIN) # BUNDLE_IMG defines the image:tag used for the bundle. From 67fc684db9426ef524b8e388f6fa1daa4527af53 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alberto=20Mart=C3=ADnez=20P=C3=A9rez?= Date: Mon, 9 Feb 2026 09:54:27 +0100 Subject: [PATCH 20/34] Use version to tag IMG for coherence with the other release goals --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index fd4dd21..69e5e4e 100644 --- a/Makefile +++ b/Makefile @@ -109,7 +109,7 @@ IMAGE_TAG_BASE ?= localhost:5001/redkey-operator ROBIN_IMAGE_TAG_BASE ?= localhost:5001/redkey-robin # Image URL to use for building/pushing image targets -IMG ?= $(IMAGE_TAG_BASE):$(PROFILE) +IMG ?= $(IMAGE_TAG_BASE):$(VERSION) IMG_ROBIN ?= $(ROBIN_IMAGE_TAG_BASE):$(PROFILE_ROBIN) # BUNDLE_IMG defines the image:tag used for the bundle. From 070d7ff82f520d53f7f1b7ba3b6540b0e143e3fc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alberto=20Mart=C3=ADnez=20P=C3=A9rez?= Date: Mon, 9 Feb 2026 09:55:14 +0100 Subject: [PATCH 21/34] release.yml workflow updated to build and push operator, bundle and catalog images --- .github/workflows/release.yml | 128 ++++++++++++++++++++-------------- 1 file changed, 74 insertions(+), 54 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index b6e6ef6..a210716 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -1,72 +1,92 @@ # SPDX-FileCopyrightText: 2025 INDUSTRIA DE DISEÑO TEXTIL S.A. (INDITEX S.A.) # SPDX-License-Identifier: Apache-2.0 -name: Release and publish a new version +name: 🚀 Release +permissions: read-all on: - pull_request: - types: [closed] - branches: ['main', 'hotfix/*'] + release: + types: + - created env: REGISTRY: ghcr.io - OWNER: InditexTech - OPERATOR_NAME: redkey-operator + IMAGE_NAME: inditextech/redkeyoperator jobs: - create-release: - name: Create release + release: + name: 🏷️ Release runs-on: ubuntu-latest - permissions: - contents: write + outputs: + version: ${{ steps.version.outputs.version }} + user_agent_version: ${{ steps.version.outputs.user_agent_version }} steps: - - name: Checkout code - uses: actions/checkout@v4 - - name: Get version from Makefile - id: makefile_version - uses: ./.github/workflows/actions/get-version-from-makefile - - name: Check version - uses: ./.github/workflows/actions/check-version + - name: 🛎️ Checkout + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4 with: - new_version: ${{ steps.makefile_version.outputs.version }} - - name: Create release - uses: ncipollo/release-action@v1.16.0 - id: github-release - continue-on-error: true - with: - tag: v${{ steps.makefile_version.outputs.version }} - commit: main - body: | - Check out the [changelog](CHANGELOG.md) for version v${{ steps.makefile_version.outputs.version }} - publish-operator-image: - name: Publish Redkey Operator image to the registry - needs: create-release + fetch-depth: 0 + - name: Check bundle generation 🧪 + run: | + make bundle + git diff --ignore-matching-lines='.*createdAt:.*' --exit-code + + - name: 📝 Load Operator version + id: version + run: | + echo "version=$(make version)" >> $GITHUB_OUTPUT + echo "user_agent_version=$(cat cmd/main.go | grep 'USER_AGENT_VERSION =' | cut -d'=' -f2 | cut -d'"' -f2)" >> $GITHUB_OUTPUT + echo $GITHUB_OUTPUT + + check: + name: 🔎 Check versions + needs: release + runs-on: ubuntu-latest + steps: + - name: 🔎 Check versions + run: | + echo "version: ${{ needs.release.outputs.version }}" + echo "user_agent_version: ${{ needs.release.outputs.user_agent_version }}" + echo "tag_name: ${{ github.event.release.tag_name }}" + + if [ "${{ github.event.release.tag_name }}" != "${{ needs.release.outputs.version }}" ]; then + echo "Version in Makefile does not match release tag" + exit 1 + fi + + if [ "${{ github.event.release.tag_name }}" != "${{ needs.release.outputs.user_agent_version }}" ]; then + echo "Version in main.go/USER_AGENT_VERSION does not match release tag" + exit 1 + fi + + build: + name: 🛠️ Build Operator images + needs: check runs-on: ubuntu-latest + permissions: + contents: write + packages: write steps: - - name: Checkout code - uses: actions/checkout@v4 - - name: Get version from Makefile - id: makefile_version - uses: ./.github/workflows/actions/get-version-from-makefile - - name: Login to registry ${{ env.REGISTRY }} - uses: docker/login-action@v3 + - name: 🛎️ Checkout + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4 + with: + fetch-depth: 0 + + - name: 🔐 Login into ${{ env.REGISTRY }} + uses: docker/login-action@74a5d142397b4f367a81961eba4e8cd7edddf772 # v3 with: registry: ${{ env.REGISTRY }} username: ${{ github.actor }} password: ${{ secrets.GITHUB_TOKEN }} - - name: Set up QEMU - uses: docker/setup-qemu-action@v3 - - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v3 - - name: Build and push - uses: docker/build-push-action@v6 - with: - context: . - push: true - tags: ${{ env.REGISTRY }}/${{ env.OWNER }}/${{ env.OPERATOR_NAME }}:${{ steps.makefile_version.outputs.version }} -# publish-operator: -# name: Publish Redkey Operator to OperatorHub.io -# needs: [create-release, publish-operator-image] -# runs-on: ubuntu-latest -# steps: -# - name: checkout code -# uses: actions/checkout@v4 + + - name: 🏗️ Build and push Operator image + run: | + make docker-build IMAGE_TAG_BASE=${{ env.REGISTRY }}/${{ env.IMAGE_NAME }} + make docker-push IMAGE_TAG_BASE=${{ env.REGISTRY }}/${{ env.IMAGE_NAME }} + - name: 🏗️ Build and push Operator bundle + run: | + make bundle IMAGE_TAG_BASE=${{ env.REGISTRY }}/${{ env.IMAGE_NAME }} + make bundle-build IMAGE_TAG_BASE=${{ env.REGISTRY }}/${{ env.IMAGE_NAME }} + make bundle-push IMAGE_TAG_BASE=${{ env.REGISTRY }}/${{ env.IMAGE_NAME }} + - name: 🏗️ Build and push Operator catalog + run: | + make catalog-build IMAGE_TAG_BASE=${{ env.REGISTRY }}/${{ env.IMAGE_NAME }} + make catalog-push IMAGE_TAG_BASE=${{ env.REGISTRY }}/${{ env.IMAGE_NAME }} From f3bdfc5481279dd5e69686d462f3095295714aaa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alberto=20Mart=C3=ADnez=20P=C3=A9rez?= Date: Mon, 9 Feb 2026 10:02:35 +0100 Subject: [PATCH 22/34] Update maintainers email address in CSV base file --- .../manifests/bases/redkeyoperator.clusterserviceversion.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/manifests/bases/redkeyoperator.clusterserviceversion.yaml b/config/manifests/bases/redkeyoperator.clusterserviceversion.yaml index e72e88a..65b8a97 100644 --- a/config/manifests/bases/redkeyoperator.clusterserviceversion.yaml +++ b/config/manifests/bases/redkeyoperator.clusterserviceversion.yaml @@ -72,7 +72,7 @@ spec: - name: redkeyoperator url: https://redkeyoperator.domain maintainers: - - email: paasteam@inditex.com + - email: lddpaas@inditex.com name: PaaSTeam maturity: alpha minKubeVersion: 1.24.0 From 90594c7e038d382fd028e27d077c521de92d5974 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alberto=20Mart=C3=ADnez=20P=C3=A9rez?= Date: Mon, 9 Feb 2026 10:12:15 +0100 Subject: [PATCH 23/34] Add copyright info --- config/crd/bases/redis.inditex.dev_redkeyclusters.yaml | 3 +++ .../manifests/bases/redkeyoperator.clusterserviceversion.yaml | 3 +++ 2 files changed, 6 insertions(+) diff --git a/config/crd/bases/redis.inditex.dev_redkeyclusters.yaml b/config/crd/bases/redis.inditex.dev_redkeyclusters.yaml index a34234d..ee61958 100644 --- a/config/crd/bases/redis.inditex.dev_redkeyclusters.yaml +++ b/config/crd/bases/redis.inditex.dev_redkeyclusters.yaml @@ -1,3 +1,6 @@ +# SPDX-FileCopyrightText: 2025 INDUSTRIA DE DISEÑO TEXTIL S.A. (INDITEX S.A.) +# SPDX-License-Identifier: Apache-2.0 + --- apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition diff --git a/config/manifests/bases/redkeyoperator.clusterserviceversion.yaml b/config/manifests/bases/redkeyoperator.clusterserviceversion.yaml index 65b8a97..4daf2ea 100644 --- a/config/manifests/bases/redkeyoperator.clusterserviceversion.yaml +++ b/config/manifests/bases/redkeyoperator.clusterserviceversion.yaml @@ -1,3 +1,6 @@ +# SPDX-FileCopyrightText: 2025 INDUSTRIA DE DISEÑO TEXTIL S.A. (INDITEX S.A.) +# SPDX-License-Identifier: Apache-2.0 + apiVersion: operators.coreos.com/v1alpha1 kind: ClusterServiceVersion metadata: From 619a57f7b63fcb64f2d255945aa15eacbdc453ef Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alberto=20Mart=C3=ADnez=20P=C3=A9rez?= Date: Mon, 9 Feb 2026 10:39:55 +0100 Subject: [PATCH 24/34] Update version in Quick Start guide --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index bb5dc99..8edd554 100644 --- a/README.md +++ b/README.md @@ -78,13 +78,13 @@ cd redkeyoperator make install ``` -3. Deploy the operator in the cluster (replace `${VERSION}` with the desired version, e.g., `1.0.0`): +3. Deploy the operator in the cluster (replace `${VERSION}` with the desired version, e.g., `0.1.0`): ```bash make deploy IMG=ghcr.io/inditextech/redkey-operator:${VERSION} ``` -4. Create a Redkey Cluster (replace `${VERSION}` with the desired version, e.g., `1.0.0`): +4. Create a Redkey Cluster (replace `${VERSION}` with the desired version, e.g., `0.1.0`): ```bash make apply-rkcl IMG_ROBIN=ghcr.io/inditextech/redkey-robin:${VERSION} From 982a3b9271659f98442bf097b0d65e266d12c36f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alberto=20Mart=C3=ADnez=20P=C3=A9rez?= Date: Mon, 9 Feb 2026 10:52:35 +0100 Subject: [PATCH 25/34] Reference repo releases to get the available versions --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 8edd554..d2d4117 100644 --- a/README.md +++ b/README.md @@ -78,13 +78,13 @@ cd redkeyoperator make install ``` -3. Deploy the operator in the cluster (replace `${VERSION}` with the desired version, e.g., `0.1.0`): +3. Deploy the operator in the cluster (replace `${VERSION}` with the desired version, e.g., `0.1.0`; check the repo releases for available versions): ```bash make deploy IMG=ghcr.io/inditextech/redkey-operator:${VERSION} ``` -4. Create a Redkey Cluster (replace `${VERSION}` with the desired version, e.g., `0.1.0`): +4. Create a Redkey Cluster (replace `${VERSION}` with the desired version, e.g., `0.1.0`; check the [Redkey Robin](https://github.com/InditexTech/redkeyrobin) repo releases for available versions): ```bash make apply-rkcl IMG_ROBIN=ghcr.io/inditextech/redkey-robin:${VERSION} From a33a142dad55078f9e03041d0e963644e5057478 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alberto=20Mart=C3=ADnez=20P=C3=A9rez?= Date: Mon, 9 Feb 2026 12:25:38 +0100 Subject: [PATCH 26/34] Fixing image name in release workflow --- .github/workflows/release.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index a210716..ce58fc5 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -10,7 +10,7 @@ on: env: REGISTRY: ghcr.io - IMAGE_NAME: inditextech/redkeyoperator + IMAGE_NAME: inditextech/redkey-operator jobs: release: From 749e2237ea4503dd091ee75b5b6357e6f02b75c1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alberto=20Mart=C3=ADnez=20P=C3=A9rez?= Date: Mon, 9 Feb 2026 16:15:53 +0100 Subject: [PATCH 27/34] Update operator info in base csv file --- .../redkeyoperator.clusterserviceversion.yaml | 20 ++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/config/manifests/bases/redkeyoperator.clusterserviceversion.yaml b/config/manifests/bases/redkeyoperator.clusterserviceversion.yaml index 4daf2ea..0a27239 100644 --- a/config/manifests/bases/redkeyoperator.clusterserviceversion.yaml +++ b/config/manifests/bases/redkeyoperator.clusterserviceversion.yaml @@ -28,7 +28,8 @@ metadata: } } ] - capabilities: Basic Install + capabilities: Full Lifecycle + categories: Database name: redkeyoperator.v0.0.0 namespace: placeholder spec: @@ -45,7 +46,10 @@ spec: displayName: Number of replicas per Primary Node path: replicasPerPrimary version: v1 - description: Seamless Redkey Cluster Management on Kubernetes + description: | + Seamless Redkey Cluster Management on Kubernetes. + + The Redkey Operator simplifies the deployment and management of Redis/Valkey clusters on Kubernetes. It automates tasks such as scaling, failover, and configuration management, allowing you to focus on your applications while ensuring high availability and performance for your Redis instances. displayName: Redkey Operator icon: - base64data: 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 @@ -72,11 +76,17 @@ spec: - k8s - ocp links: - - name: redkeyoperator - url: https://redkeyoperator.domain + - name: Redkey Operator Documentation + url: https://github.com/InditexTech/redkeyoperator/tree/main/docs + - name: Redkey Operator Source Code + url: https://github.com/InditexTech/redkeyoperator + - name: Redkey Robin Documentation + url: https://github.com/InditexTech/redkeyrobin/tree/main/docs + - name: Redkey Robin Source Code + url: https://github.com/InditexTech/redkeyrobin maintainers: - email: lddpaas@inditex.com - name: PaaSTeam + name: Inditex PaaS Team maturity: alpha minKubeVersion: 1.24.0 provider: From 9c75877a0bc78157baeaa9ea1caa5766d259fdc2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alberto=20Mart=C3=ADnez=20P=C3=A9rez?= Date: Mon, 9 Feb 2026 16:25:16 +0100 Subject: [PATCH 28/34] Adjust channels in Makefile --- Makefile | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/Makefile b/Makefile index 69e5e4e..0992f0a 100644 --- a/Makefile +++ b/Makefile @@ -68,6 +68,8 @@ ifeq ($(filter $(PROFILE_ROBIN),$(PROFILES_ROBIN)), ) $(error The PROFILE_ROBIN specified ($(PROFILE)) is not supported) endif +CHANNELS ?= alpha,beta,stable + # CHANNELS define the bundle channels used in the bundle. # Add a new line here if you would like to change its default config. (E.g CHANNELS = "preview,fast,stable") # To re-generate a bundle for other specific channels without changing the standard setup, you can: @@ -82,6 +84,7 @@ endif # To re-generate a bundle for any other default channel without changing the default setup, you can: # - use the DEFAULT_CHANNEL as arg of the bundle target (e.g make bundle DEFAULT_CHANNEL=stable) # - use environment variables to overwrite this value (e.g export DEFAULT_CHANNEL="stable") +DEFAULT_CHANNEL ?= stable ifneq ($(origin DEFAULT_CHANNEL), undefined) BUNDLE_DEFAULT_CHANNEL := --default-channel=$(DEFAULT_CHANNEL) endif @@ -116,8 +119,6 @@ IMG_ROBIN ?= $(ROBIN_IMAGE_TAG_BASE):$(PROFILE_ROBIN) # You can use it as an arg. (E.g make bundle-build BUNDLE_IMG=/:) BUNDLE_IMG ?= $(IMAGE_TAG_BASE)-bundle:$(VERSION) -CHANNELS ?= alpha,beta - # Image REF in bundle image # Can be overwritten with make bundle IMAGE_REF=/: IMAGE_REF ?= $(IMG) From 31a38f56b9cde223b6a420c296c1cda5ef10b528 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alberto=20Mart=C3=ADnez=20P=C3=A9rez?= Date: Mon, 9 Feb 2026 16:57:40 +0100 Subject: [PATCH 29/34] Update CSV base adding operator info --- .../redkeyoperator.clusterserviceversion.yaml | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/config/manifests/bases/redkeyoperator.clusterserviceversion.yaml b/config/manifests/bases/redkeyoperator.clusterserviceversion.yaml index 0a27239..21b9db5 100644 --- a/config/manifests/bases/redkeyoperator.clusterserviceversion.yaml +++ b/config/manifests/bases/redkeyoperator.clusterserviceversion.yaml @@ -50,6 +50,22 @@ spec: Seamless Redkey Cluster Management on Kubernetes. The Redkey Operator simplifies the deployment and management of Redis/Valkey clusters on Kubernetes. It automates tasks such as scaling, failover, and configuration management, allowing you to focus on your applications while ensuring high availability and performance for your Redis instances. + + ### Documentation + + [Quick Start](https://github.com/InditexTech/redkeyoperator/tree/main?tab=readme-ov-file#quick-start) + + Refer to the [operator guide](https://github.com/InditexTech/redkeyoperator/blob/main/docs/operator-guide/toc.md) to have an overview of the main Redis configuration and management options, and a troubleshooting guide. + + If you are a developer, you'll find interesting information in the [developer guide](https://github.com/InditexTech/redkeyoperator/blob/main/docs/developer-guide/toc.md). + + ### Contributing + + Contributions are welcome! Please read our [contributing guidelines](https://github.com/InditexTech/redkeyoperator/blob/main/CONTRIBUTING.md) to get started. + + ### License + + This project is licensed under the Apache License 2.0 - see the [LICENSE](https://github.com/InditexTech/redkeyoperator/blob/main/LICENSE) file for details. displayName: Redkey Operator icon: - base64data: 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 From 7fcb0802323013bdf7e55c0a009de830f8ab5bbe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alberto=20Mart=C3=ADnez=20P=C3=A9rez?= Date: Mon, 9 Feb 2026 17:05:42 +0100 Subject: [PATCH 30/34] Update CSV base -> capability level set to Auto Pilot --- .../manifests/bases/redkeyoperator.clusterserviceversion.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/manifests/bases/redkeyoperator.clusterserviceversion.yaml b/config/manifests/bases/redkeyoperator.clusterserviceversion.yaml index 21b9db5..db94036 100644 --- a/config/manifests/bases/redkeyoperator.clusterserviceversion.yaml +++ b/config/manifests/bases/redkeyoperator.clusterserviceversion.yaml @@ -28,7 +28,7 @@ metadata: } } ] - capabilities: Full Lifecycle + capabilities: Auto Pilot categories: Database name: redkeyoperator.v0.0.0 namespace: placeholder From c586b0f0d811fd82770a78dca964eef11f05ea19 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alberto=20Mart=C3=ADnez=20P=C3=A9rez?= Date: Mon, 9 Feb 2026 18:02:24 +0100 Subject: [PATCH 31/34] Fix copyright headers --- CHANGELOG.md | 2 +- CLA.md | 2 +- CODE-OF-CONDUCT.md | 2 +- CONTRIBUTING.md | 2 +- MANIFESTO.md | 2 +- README.md | 4 ++-- SECURITY.md | 2 +- SUPPORT.md | 2 +- docs/developer-guide/development-guide.md | 2 +- docs/developer-guide/profiling-guide.md | 2 +- docs/developer-guide/toc.md | 2 +- docs/operator-guide/backup-configuration.md | 2 +- docs/operator-guide/delete-pvc.md | 2 +- docs/operator-guide/ephemeral-cluster.md | 2 +- docs/operator-guide/operator-deployment.md | 2 +- docs/operator-guide/primary-replica-cluster.md | 2 +- docs/operator-guide/redis-deployment.md | 2 +- docs/operator-guide/robin.md | 2 +- docs/operator-guide/toc.md | 2 +- docs/operator-guide/troubleshooting.md | 2 +- docs/purge-keys-on-rebalance.md | 2 +- docs/redkey-cluster-status.md | 2 +- docs/redkey-robin.md | 2 +- 23 files changed, 24 insertions(+), 24 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7d21dc8..59f60e2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,5 @@ diff --git a/CLA.md b/CLA.md index b103962..5d0f883 100644 --- a/CLA.md +++ b/CLA.md @@ -1,5 +1,5 @@ diff --git a/CODE-OF-CONDUCT.md b/CODE-OF-CONDUCT.md index 1b90f7c..075fa14 100644 --- a/CODE-OF-CONDUCT.md +++ b/CODE-OF-CONDUCT.md @@ -1,5 +1,5 @@ diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 51daf31..1023753 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -1,5 +1,5 @@ diff --git a/MANIFESTO.md b/MANIFESTO.md index 4113da5..1417b0d 100644 --- a/MANIFESTO.md +++ b/MANIFESTO.md @@ -1,5 +1,5 @@ diff --git a/README.md b/README.md index d2d4117..d24ac35 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@
diff --git a/SECURITY.md b/SECURITY.md index 4227d89..d768edb 100644 --- a/SECURITY.md +++ b/SECURITY.md @@ -1,5 +1,5 @@ diff --git a/SUPPORT.md b/SUPPORT.md index 0dbba46..0dc0ca8 100644 --- a/SUPPORT.md +++ b/SUPPORT.md @@ -1,5 +1,5 @@ diff --git a/docs/developer-guide/development-guide.md b/docs/developer-guide/development-guide.md index e74020e..5da7a9d 100644 --- a/docs/developer-guide/development-guide.md +++ b/docs/developer-guide/development-guide.md @@ -1,5 +1,5 @@ diff --git a/docs/developer-guide/profiling-guide.md b/docs/developer-guide/profiling-guide.md index db29ea3..3625677 100644 --- a/docs/developer-guide/profiling-guide.md +++ b/docs/developer-guide/profiling-guide.md @@ -1,5 +1,5 @@ diff --git a/docs/developer-guide/toc.md b/docs/developer-guide/toc.md index fd506ec..52fbfae 100644 --- a/docs/developer-guide/toc.md +++ b/docs/developer-guide/toc.md @@ -1,5 +1,5 @@ diff --git a/docs/operator-guide/backup-configuration.md b/docs/operator-guide/backup-configuration.md index 522c5d1..fc533a1 100644 --- a/docs/operator-guide/backup-configuration.md +++ b/docs/operator-guide/backup-configuration.md @@ -1,5 +1,5 @@ diff --git a/docs/operator-guide/delete-pvc.md b/docs/operator-guide/delete-pvc.md index 647f76d..00536d2 100644 --- a/docs/operator-guide/delete-pvc.md +++ b/docs/operator-guide/delete-pvc.md @@ -1,5 +1,5 @@ diff --git a/docs/operator-guide/ephemeral-cluster.md b/docs/operator-guide/ephemeral-cluster.md index c4bd716..c470029 100644 --- a/docs/operator-guide/ephemeral-cluster.md +++ b/docs/operator-guide/ephemeral-cluster.md @@ -1,5 +1,5 @@ diff --git a/docs/operator-guide/operator-deployment.md b/docs/operator-guide/operator-deployment.md index 8d1efc0..f550f33 100644 --- a/docs/operator-guide/operator-deployment.md +++ b/docs/operator-guide/operator-deployment.md @@ -1,5 +1,5 @@ diff --git a/docs/operator-guide/primary-replica-cluster.md b/docs/operator-guide/primary-replica-cluster.md index 78afee0..371c739 100644 --- a/docs/operator-guide/primary-replica-cluster.md +++ b/docs/operator-guide/primary-replica-cluster.md @@ -1,5 +1,5 @@ diff --git a/docs/operator-guide/redis-deployment.md b/docs/operator-guide/redis-deployment.md index 6634fdc..7d09392 100644 --- a/docs/operator-guide/redis-deployment.md +++ b/docs/operator-guide/redis-deployment.md @@ -1,5 +1,5 @@ diff --git a/docs/operator-guide/robin.md b/docs/operator-guide/robin.md index bf65b44..32e2517 100644 --- a/docs/operator-guide/robin.md +++ b/docs/operator-guide/robin.md @@ -1,5 +1,5 @@ diff --git a/docs/operator-guide/toc.md b/docs/operator-guide/toc.md index 14b8bc2..a796ab7 100644 --- a/docs/operator-guide/toc.md +++ b/docs/operator-guide/toc.md @@ -1,5 +1,5 @@ diff --git a/docs/operator-guide/troubleshooting.md b/docs/operator-guide/troubleshooting.md index 48a7612..871100e 100644 --- a/docs/operator-guide/troubleshooting.md +++ b/docs/operator-guide/troubleshooting.md @@ -1,5 +1,5 @@ diff --git a/docs/purge-keys-on-rebalance.md b/docs/purge-keys-on-rebalance.md index 4ac186e..71e3590 100644 --- a/docs/purge-keys-on-rebalance.md +++ b/docs/purge-keys-on-rebalance.md @@ -1,5 +1,5 @@ diff --git a/docs/redkey-cluster-status.md b/docs/redkey-cluster-status.md index d39c8da..eefcec6 100644 --- a/docs/redkey-cluster-status.md +++ b/docs/redkey-cluster-status.md @@ -1,5 +1,5 @@ diff --git a/docs/redkey-robin.md b/docs/redkey-robin.md index facc854..5dfb8f7 100644 --- a/docs/redkey-robin.md +++ b/docs/redkey-robin.md @@ -1,5 +1,5 @@ From 4063470c661c92c451358c632f997b1d401aeef4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alberto=20Mart=C3=ADnez=20P=C3=A9rez?= Date: Tue, 10 Feb 2026 09:29:12 +0100 Subject: [PATCH 32/34] Check bundle generation using IMAGE_TAG_BASE --- .github/workflows/release.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index ce58fc5..5d05554 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -26,7 +26,7 @@ jobs: fetch-depth: 0 - name: Check bundle generation 🧪 run: | - make bundle + make bundle IMAGE_TAG_BASE=${{ env.REGISTRY }}/${{ env.IMAGE_NAME }} git diff --ignore-matching-lines='.*createdAt:.*' --exit-code - name: 📝 Load Operator version From bc2d8b6edad7907e504b3ccd51041b263bc902b7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alberto=20Mart=C3=ADnez=20P=C3=A9rez?= Date: Tue, 10 Feb 2026 12:27:11 +0100 Subject: [PATCH 33/34] Use redkey.inditex.dev group --- Makefile | 6 +++--- api/v1/groupversion_info.go | 6 +++--- ...ml => redkey.inditex.dev_redkeyclusters.yaml} | 7 ++----- config/crd/kustomization.yaml | 2 +- .../ephemeral-robin-debug/kustomization.yml | 2 +- ...ml => redkey_v1_redkeycluster-ephemeral.yaml} | 2 +- .../ephemeral-robin-dev/kustomization.yaml | 2 +- ...ml => redkey_v1_redkeycluster-ephemeral.yaml} | 2 +- .../redkeyoperator.clusterserviceversion.yaml | 7 ++----- config/rbac/bases/clusterrole.yaml | 6 +++--- config/rbac/bases/redkeycluster_editor_role.yaml | 4 ++-- config/rbac/bases/redkeycluster_viewer_role.yaml | 4 ++-- config/rbac/bases/role.yaml | 6 +++--- config/rbac/rediscluster_editor_role.yaml | 2 +- config/rbac/rediscluster_viewer_role.yaml | 4 ++-- controllers/redkeycluster_reconciler.go | 6 +++--- controllers/suite_test.go | 2 +- docs/operator-guide/delete-pvc.md | 2 +- docs/operator-guide/ephemeral-cluster.md | 2 +- docs/operator-guide/primary-replica-cluster.md | 12 ++++++------ docs/operator-guide/redis-deployment.md | 2 +- docs/operator-guide/robin.md | 4 ++-- internal/finalizers/backup.go | 2 +- internal/finalizers/configmap.go | 2 +- internal/finalizers/delete_pvc.go | 2 +- .../deployment-operator-local.yaml | 16 ++++++++-------- test/cmd/manifests/rdcl-test-local.yml | 2 +- test/cmd/manifests/rdcl-test-loki-local.yml | 2 +- test/cmd/manifests/rdcl-test-size-local.yml | 2 +- test/e2e/framework/redisclient.go | 2 +- test/e2e/operator_test.go | 6 +++--- v1client/client.go | 6 +++--- 32 files changed, 64 insertions(+), 70 deletions(-) rename config/crd/bases/{redis.inditex.dev_redkeyclusters.yaml => redkey.inditex.dev_redkeyclusters.yaml} (99%) rename config/examples/ephemeral-robin-debug/{redis_v1_redkeycluster-ephemeral.yaml => redkey_v1_redkeycluster-ephemeral.yaml} (99%) rename config/examples/ephemeral-robin-dev/{redis_v1_redkeycluster-ephemeral.yaml => redkey_v1_redkeycluster-ephemeral.yaml} (99%) diff --git a/Makefile b/Makefile index 0992f0a..913a511 100644 --- a/Makefile +++ b/Makefile @@ -259,11 +259,11 @@ docker-push: ## Push operator $(CONTAINER_TOOL) image (uses `${IMG}` image name) ##@ Deployment install: create-namespace process-manifests-crd ## Install CRD into the K8s cluster specified by kubectl default context (Kustomize is installed if not present). $(info $(M) applying CRD manifest file) - kubectl apply -f deployment/redis.inditex.dev_redkeyclusters.yaml + kubectl apply -f deployment/redkey.inditex.dev_redkeyclusters.yaml uninstall: process-manifests-crd ## Uninstall CRD from the K8s cluster specified by kubectl default context (Kustomize is installed if not present). $(info $(M) deleting CRD) - kubectl delete -f deployment/redis.inditex.dev_redkeyclusters.yaml + kubectl delete -f deployment/redkey.inditex.dev_redkeyclusters.yaml process-manifests: kustomize process-manifests-crd ## Generate the kustomized yamls into the `deployment` directory to deploy the manager. $(info $(M) generating Manager deploying manifest files using ${PROFILE} profile) @@ -281,7 +281,7 @@ process-manifests: kustomize process-manifests-crd ## Generate the kustomized y process-manifests-crd: kustomize manifests ## Generate the kustomized yamls into the `deployment` directory to deploy the CRD. $(info $(M) generating CRD deploying manifest files) mkdir -p deployment - $(KUSTOMIZE) build config/crd > deployment/redis.inditex.dev_redkeyclusters.yaml + $(KUSTOMIZE) build config/crd > deployment/redkey.inditex.dev_redkeyclusters.yaml @echo "CRD manifest generated successfully" deploy: deploy-manager ## Deploy the manager into the K8s cluster specified by kubectl default context. diff --git a/api/v1/groupversion_info.go b/api/v1/groupversion_info.go index da666ce..38bb147 100644 --- a/api/v1/groupversion_info.go +++ b/api/v1/groupversion_info.go @@ -2,9 +2,9 @@ // // SPDX-License-Identifier: Apache-2.0 -// Package v1 contains API Schema definitions for the redis v1 API group. +// Package v1 contains API Schema definitions for the redkey v1 API group. // +kubebuilder:object:generate=true -// +groupName=redis.inditex.dev +// +groupName=redkey.inditex.dev package v1 import ( @@ -14,7 +14,7 @@ import ( var ( // GroupVersion is group version used to register these objects. - GroupVersion = schema.GroupVersion{Group: "redis.inditex.dev", Version: "v1"} + GroupVersion = schema.GroupVersion{Group: "redkey.inditex.dev", Version: "v1"} // SchemeBuilder is used to add go types to the GroupVersionKind scheme. SchemeBuilder = &scheme.Builder{GroupVersion: GroupVersion} diff --git a/config/crd/bases/redis.inditex.dev_redkeyclusters.yaml b/config/crd/bases/redkey.inditex.dev_redkeyclusters.yaml similarity index 99% rename from config/crd/bases/redis.inditex.dev_redkeyclusters.yaml rename to config/crd/bases/redkey.inditex.dev_redkeyclusters.yaml index ee61958..36d269a 100644 --- a/config/crd/bases/redis.inditex.dev_redkeyclusters.yaml +++ b/config/crd/bases/redkey.inditex.dev_redkeyclusters.yaml @@ -1,15 +1,12 @@ -# SPDX-FileCopyrightText: 2025 INDUSTRIA DE DISEÑO TEXTIL S.A. (INDITEX S.A.) -# SPDX-License-Identifier: Apache-2.0 - --- apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: controller-gen.kubebuilder.io/version: v0.18.0 - name: redkeyclusters.redis.inditex.dev + name: redkeyclusters.redkey.inditex.dev spec: - group: redis.inditex.dev + group: redkey.inditex.dev names: kind: RedkeyCluster listKind: RedkeyClusterList diff --git a/config/crd/kustomization.yaml b/config/crd/kustomization.yaml index b8a5efb..e36cead 100644 --- a/config/crd/kustomization.yaml +++ b/config/crd/kustomization.yaml @@ -5,6 +5,6 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- bases/redis.inditex.dev_redkeyclusters.yaml +- bases/redkey.inditex.dev_redkeyclusters.yaml commonAnnotations: inditex.dev/operator-version: 0.1.0 diff --git a/config/examples/ephemeral-robin-debug/kustomization.yml b/config/examples/ephemeral-robin-debug/kustomization.yml index fee4200..3e0bd87 100644 --- a/config/examples/ephemeral-robin-debug/kustomization.yml +++ b/config/examples/ephemeral-robin-debug/kustomization.yml @@ -11,6 +11,6 @@ patches: name: redis-cluster-ephemeral resources: - - redis_v1_redkeycluster-ephemeral.yaml + - redkey_v1_redkeycluster-ephemeral.yaml namespace: redkey-operator \ No newline at end of file diff --git a/config/examples/ephemeral-robin-debug/redis_v1_redkeycluster-ephemeral.yaml b/config/examples/ephemeral-robin-debug/redkey_v1_redkeycluster-ephemeral.yaml similarity index 99% rename from config/examples/ephemeral-robin-debug/redis_v1_redkeycluster-ephemeral.yaml rename to config/examples/ephemeral-robin-debug/redkey_v1_redkeycluster-ephemeral.yaml index e4ff76d..8de6916 100644 --- a/config/examples/ephemeral-robin-debug/redis_v1_redkeycluster-ephemeral.yaml +++ b/config/examples/ephemeral-robin-debug/redkey_v1_redkeycluster-ephemeral.yaml @@ -1,7 +1,7 @@ # SPDX-FileCopyrightText: 2025 INDUSTRIA DE DISEÑO TEXTIL S.A. (INDITEX S.A.) # SPDX-License-Identifier: Apache-2.0 -apiVersion: redis.inditex.dev/v1 +apiVersion: redkey.inditex.dev/v1 kind: RedkeyCluster metadata: labels: diff --git a/config/examples/ephemeral-robin-dev/kustomization.yaml b/config/examples/ephemeral-robin-dev/kustomization.yaml index af66cdd..41d4bc6 100644 --- a/config/examples/ephemeral-robin-dev/kustomization.yaml +++ b/config/examples/ephemeral-robin-dev/kustomization.yaml @@ -5,6 +5,6 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: - - redis_v1_redkeycluster-ephemeral.yaml + - redkey_v1_redkeycluster-ephemeral.yaml namespace: redkey-operator diff --git a/config/examples/ephemeral-robin-dev/redis_v1_redkeycluster-ephemeral.yaml b/config/examples/ephemeral-robin-dev/redkey_v1_redkeycluster-ephemeral.yaml similarity index 99% rename from config/examples/ephemeral-robin-dev/redis_v1_redkeycluster-ephemeral.yaml rename to config/examples/ephemeral-robin-dev/redkey_v1_redkeycluster-ephemeral.yaml index e4ff76d..8de6916 100644 --- a/config/examples/ephemeral-robin-dev/redis_v1_redkeycluster-ephemeral.yaml +++ b/config/examples/ephemeral-robin-dev/redkey_v1_redkeycluster-ephemeral.yaml @@ -1,7 +1,7 @@ # SPDX-FileCopyrightText: 2025 INDUSTRIA DE DISEÑO TEXTIL S.A. (INDITEX S.A.) # SPDX-License-Identifier: Apache-2.0 -apiVersion: redis.inditex.dev/v1 +apiVersion: redkey.inditex.dev/v1 kind: RedkeyCluster metadata: labels: diff --git a/config/manifests/bases/redkeyoperator.clusterserviceversion.yaml b/config/manifests/bases/redkeyoperator.clusterserviceversion.yaml index db94036..dd6355a 100644 --- a/config/manifests/bases/redkeyoperator.clusterserviceversion.yaml +++ b/config/manifests/bases/redkeyoperator.clusterserviceversion.yaml @@ -1,6 +1,3 @@ -# SPDX-FileCopyrightText: 2025 INDUSTRIA DE DISEÑO TEXTIL S.A. (INDITEX S.A.) -# SPDX-License-Identifier: Apache-2.0 - apiVersion: operators.coreos.com/v1alpha1 kind: ClusterServiceVersion metadata: @@ -8,7 +5,7 @@ metadata: alm-examples: |- [ { - "apiVersion": "redis.inditex.dev/v1", + "apiVersion": "redkey.inditex.dev/v1", "kind": "RedkeyCluster", "metadata": { "name": "redis-cluster-example" @@ -39,7 +36,7 @@ spec: - description: RedkeyCluster is the Schema for the redkeyclusters API displayName: Redkey Cluster kind: RedkeyCluster - name: redkeyclusters.redis.inditex.dev + name: redkeyclusters.redkey.inditex.dev specDescriptors: - description: ReplicasPerPrimary specifies how many replicas should be attached to each Redis Primary node diff --git a/config/rbac/bases/clusterrole.yaml b/config/rbac/bases/clusterrole.yaml index 50e28a3..3699d26 100644 --- a/config/rbac/bases/clusterrole.yaml +++ b/config/rbac/bases/clusterrole.yaml @@ -68,7 +68,7 @@ rules: - update - watch - apiGroups: - - redis.inditex.dev + - redkey.inditex.dev resources: - redkeyclusters verbs: @@ -80,13 +80,13 @@ rules: - update - watch - apiGroups: - - redis.inditex.dev + - redkey.inditex.dev resources: - redkeyclusters/finalizers verbs: - update - apiGroups: - - redis.inditex.dev + - redkey.inditex.dev resources: - redkeyclusters/status verbs: diff --git a/config/rbac/bases/redkeycluster_editor_role.yaml b/config/rbac/bases/redkeycluster_editor_role.yaml index f88a210..d35bc4f 100644 --- a/config/rbac/bases/redkeycluster_editor_role.yaml +++ b/config/rbac/bases/redkeycluster_editor_role.yaml @@ -10,7 +10,7 @@ metadata: rbac.authorization.k8s.io/aggregate-to-admin: "true" rules: - apiGroups: - - redis.inditex.dev + - redkey.inditex.dev resources: - redkeyclusters verbs: @@ -22,7 +22,7 @@ rules: - update - watch - apiGroups: - - redis.inditex.dev + - redkey.inditex.dev resources: - redkeyclusters/status verbs: diff --git a/config/rbac/bases/redkeycluster_viewer_role.yaml b/config/rbac/bases/redkeycluster_viewer_role.yaml index 406ff6c..08d4860 100644 --- a/config/rbac/bases/redkeycluster_viewer_role.yaml +++ b/config/rbac/bases/redkeycluster_viewer_role.yaml @@ -10,7 +10,7 @@ metadata: rbac.authorization.k8s.io/aggregate-to-admin: "true" rules: - apiGroups: - - redis.inditex.dev + - redkey.inditex.dev resources: - redkeyclusters verbs: @@ -18,7 +18,7 @@ rules: - list - watch - apiGroups: - - redis.inditex.dev + - redkey.inditex.dev resources: - redkeyclusters/status verbs: diff --git a/config/rbac/bases/role.yaml b/config/rbac/bases/role.yaml index 5098924..c4a2281 100644 --- a/config/rbac/bases/role.yaml +++ b/config/rbac/bases/role.yaml @@ -77,7 +77,7 @@ rules: - update - watch - apiGroups: - - redis.inditex.dev + - redkey.inditex.dev resources: - redkeyclusters verbs: @@ -89,13 +89,13 @@ rules: - update - watch - apiGroups: - - redis.inditex.dev + - redkey.inditex.dev resources: - redkeyclusters/finalizers verbs: - update - apiGroups: - - redis.inditex.dev + - redkey.inditex.dev resources: - redkeyclusters/status verbs: diff --git a/config/rbac/rediscluster_editor_role.yaml b/config/rbac/rediscluster_editor_role.yaml index 6fa86af..51caf4f 100644 --- a/config/rbac/rediscluster_editor_role.yaml +++ b/config/rbac/rediscluster_editor_role.yaml @@ -23,7 +23,7 @@ rules: - update - watch - apiGroups: - - redis.inditex.dev + - redkey.inditex.dev resources: - redkeyclusters/status verbs: diff --git a/config/rbac/rediscluster_viewer_role.yaml b/config/rbac/rediscluster_viewer_role.yaml index 56a0ea3..428b6e9 100644 --- a/config/rbac/rediscluster_viewer_role.yaml +++ b/config/rbac/rediscluster_viewer_role.yaml @@ -11,7 +11,7 @@ metadata: name: redkeycluster-viewer-role rules: - apiGroups: - - redis.inditex.dev + - redkey.inditex.dev resources: - redkeyclusters verbs: @@ -19,7 +19,7 @@ rules: - list - watch - apiGroups: - - redis.inditex.dev + - redkey.inditex.dev resources: - redkeyclusters/status verbs: diff --git a/controllers/redkeycluster_reconciler.go b/controllers/redkeycluster_reconciler.go index 634514f..32b3d83 100644 --- a/controllers/redkeycluster_reconciler.go +++ b/controllers/redkeycluster_reconciler.go @@ -46,9 +46,9 @@ type RedkeyClusterReconciler struct { FindExistingPodDisruptionBudgetFunc func(ctx context.Context, req ctrl.Request) (*pv1.PodDisruptionBudget, error) } -// +kubebuilder:rbac:groups=redis.inditex.dev,resources=redkeyclusters,verbs=get;list;watch;create;update;patch;delete -// +kubebuilder:rbac:groups=redis.inditex.dev,resources=redkeyclusters/status,verbs=get;update;patch -// +kubebuilder:rbac:groups=redis.inditex.dev,resources=redkeyclusters/finalizers,verbs=update +// +kubebuilder:rbac:groups=redkey.inditex.dev,resources=redkeyclusters,verbs=get;list;watch;create;update;patch;delete +// +kubebuilder:rbac:groups=redkey.inditex.dev,resources=redkeyclusters/status,verbs=get;update;patch +// +kubebuilder:rbac:groups=redkey.inditex.dev,resources=redkeyclusters/finalizers,verbs=update // +kubebuilder:rbac:groups="",resources=events,verbs=create;patch // +kubebuilder:rbac:groups="",resources=secrets,verbs=get // +kubebuilder:rbac:groups=apps,resources=statefulsets;deployments,verbs=get;list;watch diff --git a/controllers/suite_test.go b/controllers/suite_test.go index 8a5447c..9b4d1df 100644 --- a/controllers/suite_test.go +++ b/controllers/suite_test.go @@ -233,7 +233,7 @@ func CreateRedkeyCluster() *redkeyv1.RedkeyCluster { cluster := &redkeyv1.RedkeyCluster{ TypeMeta: metav1.TypeMeta{ Kind: "RedkeyCluster", - APIVersion: "redis.inditex.dev/redisv1", + APIVersion: "redkey.inditex.dev/redisv1", }, ObjectMeta: metav1.ObjectMeta{ Name: "redkeycluster-sample", diff --git a/docs/operator-guide/delete-pvc.md b/docs/operator-guide/delete-pvc.md index 00536d2..d3c3015 100644 --- a/docs/operator-guide/delete-pvc.md +++ b/docs/operator-guide/delete-pvc.md @@ -21,7 +21,7 @@ Starting with Redkey Operator release 0.2.33, Redkey Operator supports deletion ## Example ```yaml -apiVersion: redis.inditex.dev/v1 +apiVersion: redkey.inditex.dev/v1 kind: RedkeyCluster ... spec: diff --git a/docs/operator-guide/ephemeral-cluster.md b/docs/operator-guide/ephemeral-cluster.md index c470029..98c28b5 100644 --- a/docs/operator-guide/ephemeral-cluster.md +++ b/docs/operator-guide/ephemeral-cluster.md @@ -13,7 +13,7 @@ Ephemeral mode, also known as Zero Persistent Volume Claims (PVCs), disables per For a new cluster configuration, set the property `ephemeral: true` and apply the configuration. See the following snippet: ```yaml -apiVersion: redis.inditex.dev/v1 +apiVersion: redkey.inditex.dev/v1 kind: RedkeyCluster metadata: name: redis-cluster diff --git a/docs/operator-guide/primary-replica-cluster.md b/docs/operator-guide/primary-replica-cluster.md index 371c739..f4ed706 100644 --- a/docs/operator-guide/primary-replica-cluster.md +++ b/docs/operator-guide/primary-replica-cluster.md @@ -13,7 +13,7 @@ Clusters with primary-replica architecture can be created by adding `replciasPer The minimum configuration for the correct operation of this function is: ```yaml -apiVersion: redis.inditex.dev/v1 +apiVersion: redkey.inditex.dev/v1 kind: RedkeyCluster ... spec: @@ -27,7 +27,7 @@ The `primaries` definition is the total number of Redis primary nodes in the clu If this feature is enabled, this additional configuration should be added to `redis.conf` to improve efficiency. ```yaml -apiVersion: redis.inditex.dev/v1 +apiVersion: redkey.inditex.dev/v1 kind: RedkeyCluster ... spec: @@ -48,7 +48,7 @@ spec: ## Examples ```yaml -apiVersion: redis.inditex.dev/v1 +apiVersion: redkey.inditex.dev/v1 kind: RedkeyCluster ... spec: @@ -61,7 +61,7 @@ spec: Redkey Operator will create 6 pods, 3 primaries and 3 replicas (one for each primary). ```yaml -apiVersion: redis.inditex.dev/v1 +apiVersion: redkey.inditex.dev/v1 kind: RedkeyCluster ... spec: @@ -73,7 +73,7 @@ spec: Redkey Operator will create 15 pods, 5 primaries and 10 replicas (two for each primary). ```yaml -apiVersion: redis.inditex.dev/v1 +apiVersion: redkey.inditex.dev/v1 kind: RedkeyCluster ... spec: @@ -85,7 +85,7 @@ spec: Redkey Operator will create 5 pods, 5 primaries and no replicas. ```yaml -apiVersion: redis.inditex.dev/v1 +apiVersion: redkey.inditex.dev/v1 kind: RedkeyCluster ... spec: diff --git a/docs/operator-guide/redis-deployment.md b/docs/operator-guide/redis-deployment.md index 7d09392..7910950 100644 --- a/docs/operator-guide/redis-deployment.md +++ b/docs/operator-guide/redis-deployment.md @@ -13,7 +13,7 @@ Redkey operator CRD defines a new resource type `RedkeyCluster`. Below you'll find an example of manifest conforming to the resource definition that will deploy a Redkey cluster: ```yaml -apiVersion: redis.inditex.dev/v1 +apiVersion: redkey.inditex.dev/v1 kind: RedkeyCluster metadata: name: redkeycluster-sample diff --git a/docs/operator-guide/robin.md b/docs/operator-guide/robin.md index 32e2517..1c00ab8 100644 --- a/docs/operator-guide/robin.md +++ b/docs/operator-guide/robin.md @@ -25,7 +25,7 @@ to the Pod IP is needed for Robin to work. ### Example ```yaml -apiVersion: redis.inditex.dev/v1 +apiVersion: redkey.inditex.dev/v1 kind: RedkeyCluster ... spec: @@ -83,7 +83,7 @@ The expected fields of the `spec.robin.config` YAML are: ### Example ```yaml -apiVersion: redis.inditex.dev/v1 +apiVersion: redkey.inditex.dev/v1 kind: RedkeyCluster ... spec: diff --git a/internal/finalizers/backup.go b/internal/finalizers/backup.go index ccf8209..b7412ca 100644 --- a/internal/finalizers/backup.go +++ b/internal/finalizers/backup.go @@ -20,5 +20,5 @@ func (ef *BackupFinalizer) DeleteMethod(ctx context.Context, redis *redkeyv1.Red } func (ef *BackupFinalizer) GetId() string { - return "redis.inditex.dev/rdb-backup" + return "redkey.inditex.dev/rdb-backup" } diff --git a/internal/finalizers/configmap.go b/internal/finalizers/configmap.go index 9a89786..1668e64 100644 --- a/internal/finalizers/configmap.go +++ b/internal/finalizers/configmap.go @@ -25,5 +25,5 @@ func (ef *ConfigMapCleanupFinalizer) DeleteMethod(ctx context.Context, redis *re } func (ef *ConfigMapCleanupFinalizer) GetId() string { - return "redis.inditex.dev/configmap-cleanup" + return "redkey.inditex.dev/configmap-cleanup" } diff --git a/internal/finalizers/delete_pvc.go b/internal/finalizers/delete_pvc.go index 852dfc0..31e4bc6 100644 --- a/internal/finalizers/delete_pvc.go +++ b/internal/finalizers/delete_pvc.go @@ -22,5 +22,5 @@ func (ef *DeletePVCFinalizer) DeleteMethod(ctx context.Context, redis *redkeyv1. } func (ef *DeletePVCFinalizer) GetId() string { - return "redis.inditex.dev/delete-pvc" + return "redkey.inditex.dev/delete-pvc" } diff --git a/test/cmd/manifests/deployment-test-local/deployment-operator-local.yaml b/test/cmd/manifests/deployment-test-local/deployment-operator-local.yaml index 5a221ac..b12ba26 100644 --- a/test/cmd/manifests/deployment-test-local/deployment-operator-local.yaml +++ b/test/cmd/manifests/deployment-test-local/deployment-operator-local.yaml @@ -109,7 +109,7 @@ rules: - update - watch - apiGroups: - - redis.inditex.dev + - redkey.inditex.dev resources: - redkeyclusters verbs: @@ -121,13 +121,13 @@ rules: - update - watch - apiGroups: - - redis.inditex.dev + - redkey.inditex.dev resources: - redkeyclusters/finalizers verbs: - update - apiGroups: - - redis.inditex.dev + - redkey.inditex.dev resources: - redkeyclusters/status verbs: @@ -201,7 +201,7 @@ rules: - update - watch - apiGroups: - - redis.inditex.dev + - redkey.inditex.dev resources: - redkeyclusters verbs: @@ -213,13 +213,13 @@ rules: - update - watch - apiGroups: - - redis.inditex.dev + - redkey.inditex.dev resources: - redkeyclusters/finalizers verbs: - update - apiGroups: - - redis.inditex.dev + - redkey.inditex.dev resources: - redkeyclusters/status verbs: @@ -235,7 +235,7 @@ metadata: name: redkeycluster-editor-role rules: - apiGroups: - - redis.inditex.dev + - redkey.inditex.dev resources: - redkeyclusters verbs: @@ -247,7 +247,7 @@ rules: - update - watch - apiGroups: - - redis.inditex.dev + - redkey.inditex.dev resources: - redkeyclusters/status verbs: diff --git a/test/cmd/manifests/rdcl-test-local.yml b/test/cmd/manifests/rdcl-test-local.yml index a3fb0ad..0798842 100644 --- a/test/cmd/manifests/rdcl-test-local.yml +++ b/test/cmd/manifests/rdcl-test-local.yml @@ -2,7 +2,7 @@ # # SPDX-License-Identifier: Apache-2.0 -apiVersion: redis.inditex.dev/v1 +apiVersion: redkey.inditex.dev/v1 kind: RedkeyCluster metadata: annotations: diff --git a/test/cmd/manifests/rdcl-test-loki-local.yml b/test/cmd/manifests/rdcl-test-loki-local.yml index 543e5cc..4891bd0 100644 --- a/test/cmd/manifests/rdcl-test-loki-local.yml +++ b/test/cmd/manifests/rdcl-test-loki-local.yml @@ -2,7 +2,7 @@ # # SPDX-License-Identifier: Apache-2.0 -apiVersion: redis.inditex.dev/v1 +apiVersion: redkey.inditex.dev/v1 kind: RedkeyCluster metadata: annotations: diff --git a/test/cmd/manifests/rdcl-test-size-local.yml b/test/cmd/manifests/rdcl-test-size-local.yml index d4bd1f4..3f65a9e 100644 --- a/test/cmd/manifests/rdcl-test-size-local.yml +++ b/test/cmd/manifests/rdcl-test-size-local.yml @@ -2,7 +2,7 @@ # # SPDX-License-Identifier: Apache-2.0 -apiVersion: redis.inditex.dev/v1 +apiVersion: redkey.inditex.dev/v1 kind: RedkeyCluster metadata: annotations: diff --git a/test/e2e/framework/redisclient.go b/test/e2e/framework/redisclient.go index e374a74..5acfb0b 100644 --- a/test/e2e/framework/redisclient.go +++ b/test/e2e/framework/redisclient.go @@ -45,7 +45,7 @@ const ( defaultConfig = `save "" appendonly no maxmemory 70mb` - finalizerName = "redis.inditex.dev/configmap-cleanup" + finalizerName = "redkey.inditex.dev/configmap-cleanup" pollInterval = 5 * time.Second defaultTimeout = 60 * time.Minute diff --git a/test/e2e/operator_test.go b/test/e2e/operator_test.go index 9f326c3..aa728b3 100644 --- a/test/e2e/operator_test.go +++ b/test/e2e/operator_test.go @@ -207,17 +207,17 @@ func operatorPolicyRules() []rbacv1.PolicyRule { Verbs: []string{"create", "delete", "get", "list", "patch", "update", "watch"}, }, { - APIGroups: []string{"redis.inditex.dev"}, + APIGroups: []string{"redkey.inditex.dev"}, Resources: []string{"redkeyclusters"}, Verbs: []string{"create", "delete", "get", "list", "patch", "update", "watch"}, }, { - APIGroups: []string{"redis.inditex.dev"}, + APIGroups: []string{"redkey.inditex.dev"}, Resources: []string{"redkeyclusters/finalizers"}, Verbs: []string{"update"}, }, { - APIGroups: []string{"redis.inditex.dev"}, + APIGroups: []string{"redkey.inditex.dev"}, Resources: []string{"redkeyclusters/status"}, Verbs: []string{"get", "patch", "update"}, }, diff --git a/v1client/client.go b/v1client/client.go index d93a53b..eb733f2 100644 --- a/v1client/client.go +++ b/v1client/client.go @@ -31,7 +31,7 @@ func (c *rkclClient) List(ctx context.Context, opts metav1.ListOptions) (*redkey result := redkeyv1.RedkeyClusterList{} err := c.restClient. Get(). - AbsPath("/apis/redis.inditex.dev/redisv1"). + AbsPath("/apis/redkey.inditex.dev/redisv1"). Namespace(c.ns). Resource("redkeyclusters"). VersionedParams(&opts, scheme.ParameterCodec). @@ -45,7 +45,7 @@ func (c *rkclClient) Get(ctx context.Context, name string, opts metav1.GetOption result := redkeyv1.RedkeyCluster{} err := c.restClient. Get(). - AbsPath("/apis/redis.inditex.dev/v1"). + AbsPath("/apis/redkey.inditex.dev/v1"). Namespace(c.ns). Resource("redkeyclusters"). Name(name). @@ -58,7 +58,7 @@ func (c *rkclClient) Get(ctx context.Context, name string, opts metav1.GetOption func (c *rkclClient) Watch(ctx context.Context, opts metav1.ListOptions) (watch.Interface, error) { opts.Watch = true return c.restClient.Get(). - AbsPath("/apis/redis.inditex.dev/v1"). + AbsPath("/apis/redkey.inditex.dev/v1"). Namespace(c.ns). Resource("redkeyclusters"). VersionedParams(&opts, scheme.ParameterCodec). From d7516d7b901dbaec07601e0e1f76d4699dfc67de Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alberto=20Mart=C3=ADnez=20P=C3=A9rez?= Date: Tue, 10 Feb 2026 12:31:16 +0100 Subject: [PATCH 34/34] Add required copyright headers to generated files --- config/crd/bases/redkey.inditex.dev_redkeyclusters.yaml | 3 +++ .../manifests/bases/redkeyoperator.clusterserviceversion.yaml | 3 +++ 2 files changed, 6 insertions(+) diff --git a/config/crd/bases/redkey.inditex.dev_redkeyclusters.yaml b/config/crd/bases/redkey.inditex.dev_redkeyclusters.yaml index 36d269a..a709b2e 100644 --- a/config/crd/bases/redkey.inditex.dev_redkeyclusters.yaml +++ b/config/crd/bases/redkey.inditex.dev_redkeyclusters.yaml @@ -1,3 +1,6 @@ +# SPDX-FileCopyrightText: 2025 INDUSTRIA DE DISEÑO TEXTIL S.A. (INDITEX S.A.) +# SPDX-License-Identifier: Apache-2.0 + --- apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition diff --git a/config/manifests/bases/redkeyoperator.clusterserviceversion.yaml b/config/manifests/bases/redkeyoperator.clusterserviceversion.yaml index dd6355a..cb2af29 100644 --- a/config/manifests/bases/redkeyoperator.clusterserviceversion.yaml +++ b/config/manifests/bases/redkeyoperator.clusterserviceversion.yaml @@ -1,3 +1,6 @@ +# SPDX-FileCopyrightText: 2025 INDUSTRIA DE DISEÑO TEXTIL S.A. (INDITEX S.A.) +# SPDX-License-Identifier: Apache-2.0 + apiVersion: operators.coreos.com/v1alpha1 kind: ClusterServiceVersion metadata: