Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
64 commits
Select commit Hold shift + click to select a range
3d61e0f
feat: update Operator to the new architecture
albertompe May 12, 2026
27fc8ea
feat: add devcontainer configuration
albertompe May 12, 2026
065b9de
feat: add CI goals to Makefile
albertompe May 12, 2026
91e1ce9
feat: fix linting in integration tests code
albertompe May 12, 2026
b1f2203
feat: add chaos tests
albertompe May 12, 2026
3ccd8f8
feat: add chaos tests goals to Makefile
albertompe May 12, 2026
269e523
feat: remove chaos test for now
albertompe May 12, 2026
c404e61
feat: add license headers
albertompe May 12, 2026
73f3769
feat: docs/images cleanup
albertompe May 12, 2026
019d82f
feat: docs/images cleanup
albertompe May 12, 2026
ccd8fe9
feat: remove generated files from REUSE
albertompe May 12, 2026
4ef5814
feat: add proposal
albertompe May 12, 2026
9cd4a5e
feat: add license headers to proposal
albertompe May 12, 2026
76bcf7b
feat: adding some logging info
albertompe May 12, 2026
902946f
feat: cleanup files not needed
albertompe May 12, 2026
3f4aa5b
feat: show substatus and partition in RedkeyClusterConfiguration CRs
albertompe May 12, 2026
a149bcc
feat: cleanup of superseded configurations modified to keep the last …
albertompe May 12, 2026
d59268f
feat: fix lint
albertompe May 12, 2026
91c630d
feat: add AGENTS.md file
albertompe May 12, 2026
a9000ad
feat: set cluster-name and namespace paramters in Robin deployment
albertompe May 12, 2026
6bbd6d8
feat: add -count=1 flag to integration tests command to force not cac…
albertompe May 13, 2026
d34583a
feat: add -count=1 flag to unit tests command to force not caching te…
albertompe May 13, 2026
dea2c89
feat: add mandatory checks on every change to AGENTS.md file
albertompe May 13, 2026
0477c26
feat: robin config properties cleaunp
albertompe May 14, 2026
4268a98
feat: add authentication and dynamic configuration docs
albertompe May 18, 2026
892f58e
feat: doc typos
albertompe May 18, 2026
efbdf0e
feat: add spec.robin.config.metrics.metricsLabels to RedkeyCluster CRD
albertompe May 18, 2026
972c3c6
feat: add cluster metrics doc
albertompe May 18, 2026
74b7149
feat: added health metrics doc
albertompe May 19, 2026
82cba00
feat: rename kind cluster for operator development
albertompe May 19, 2026
6a22548
feat: rename kind cluster for operator development
albertompe May 19, 2026
777d2ee
feat: renaming dev registry
albertompe May 19, 2026
a1c51ac
feat: added get verb over redkeyclusters to Robin
albertompe May 19, 2026
7a3d063
feat: update go version to 1.26.3
albertompe May 19, 2026
121c944
feat: add redkey keys registry to being able to reset it when adding …
albertompe May 20, 2026
4b8fc01
feat: add intervals to Robin config
albertompe May 20, 2026
d2040ab
feat: add headers
albertompe May 20, 2026
62e53c6
feat: added skipIfSuperseded property to RedkeyCluster CRD and config…
albertompe May 21, 2026
8c6fccc
feat: update docs
albertompe May 21, 2026
633af42
feat: update AGENTS.md file
albertompe May 21, 2026
9fa486d
feat: observability stack, dashboards, labels adjusting and renaming
albertompe May 21, 2026
337a047
feat: add license files
albertompe May 21, 2026
543a94d
feat: update observability dashboards
albertompe May 21, 2026
2362da2
feat: update observability Robin dashboard to include K8s API metrics
albertompe May 21, 2026
c0267ae
feat: reorganize observability dashboards
albertompe May 22, 2026
abcd4f3
feat: fix sample manifest
albertompe May 22, 2026
9446e83
feat: add profiling features to Operator and Robin; update docs
albertompe May 22, 2026
dc3cc51
fix: sample rkcl manifest
albertompe May 22, 2026
34274aa
feat: add new robin config parameters and update docs
albertompe May 26, 2026
20d6a1f
feat: tests E2E
albertompe May 27, 2026
270dbfe
feat: update docs
albertompe May 27, 2026
65d6e9c
feat: tests E2E optimizations
albertompe May 27, 2026
051e934
feat: add robin-ref to e2e tests workflow
albertompe May 27, 2026
ed3d1c5
feat: release workflow publishing multiarch image
albertompe May 27, 2026
99fe3d0
feat: fix tests e2e workflow!
albertompe May 27, 2026
2bbf6c4
feat: remove icons
albertompe May 27, 2026
9c15e4d
feat: update docs
albertompe May 27, 2026
3e5c888
feat: refactor e2e-tests workflow!
albertompe May 27, 2026
eae134f
feat: add different sample types
albertompe May 28, 2026
a0469d2
feat: config changes and status transitions
albertompe May 29, 2026
ff24a50
feat: update README.md
albertompe May 29, 2026
0c18ccd
feat: labels/annotation propagation, new tests E2E
albertompe May 29, 2026
99f4a62
feat: add headers to crd files in operator chart
albertompe May 29, 2026
e2fb148
feat: linting
albertompe May 29, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 14 additions & 0 deletions .devcontainer/devcontainer-lock.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
{
"features": {
"ghcr.io/devcontainers/features/docker-in-docker:2": {
"version": "2.16.1",
"resolved": "ghcr.io/devcontainers/features/docker-in-docker@sha256:ce078b7bf7d9ef3bcb9813b32103795d8d72172446890b64772cbe1dec6baafd",
"integrity": "sha256:ce078b7bf7d9ef3bcb9813b32103795d8d72172446890b64772cbe1dec6baafd"
},
"ghcr.io/devcontainers/features/git:1": {
"version": "1.3.5",
"resolved": "ghcr.io/devcontainers/features/git@sha256:27905dc196c01f77d6ba8709cb82eeaf330b3b108772e2f02d1cd0d826de1251",
"integrity": "sha256:27905dc196c01f77d6ba8709cb82eeaf330b3b108772e2f02d1cd0d826de1251"
}
}
}
3 changes: 3 additions & 0 deletions .devcontainer/devcontainer-lock.json.license
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
SPDX-FileCopyrightText: 2025 INDUSTRIA DE DISEÑO TEXTIL S.A. (INDITEX S.A.)

SPDX-License-Identifier: Apache-2.0
41 changes: 41 additions & 0 deletions .devcontainer/devcontainer.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
// SPDX-FileCopyrightText: 2025 INDUSTRIA DE DISEÑO TEXTIL S.A. (INDITEX S.A.)
//
// SPDX-License-Identifier: Apache-2.0

{
"name": "Redkey Operator DevContainer",
"image": "golang:1.26.3-trixie",
"features": {
"ghcr.io/devcontainers/features/docker-in-docker:2": {
"moby": false,
},
"ghcr.io/devcontainers/features/git:1": {},
},

"containerEnv": {
"GOROOT": "/usr/local/go",
"GOPATH": "/go",
},

"remoteEnv": {
"PATH": "/usr/local/go/bin:/go/bin:${containerEnv:PATH}",
},

"runArgs": ["--network=host"],

"customizations": {
"vscode": {
"settings": {
"terminal.integrated.shell.linux": "/bin/bash",
},
"extensions": [
"golang.Go",
"ms-kubernetes-tools.vscode-kubernetes-tools",
"ms-azuretools.vscode-docker",
"redhat.vscode-yaml",
],
},
},

"onCreateCommand": "bash .devcontainer/post-install.sh",
}
86 changes: 86 additions & 0 deletions .devcontainer/post-install.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,86 @@
# SPDX-FileCopyrightText: 2025 INDUSTRIA DE DISEÑO TEXTIL S.A. (INDITEX S.A.)
# SPDX-License-Identifier: Apache-2.0

#!/usr/bin/env bash
set -euxo pipefail

KIND_VERSION="v0.22.0"
KUBECTL_CHANNEL="stable-1.33"

export GOROOT="${GOROOT:-/usr/local/go}"
export GOPATH="${GOPATH:-/go}"
export PATH="${GOROOT}/bin:${GOPATH}/bin:${PATH}"

OS="$(uname -s | tr '[:upper:]' '[:lower:]')"
ARCH="$(uname -m)"

case "$ARCH" in
x86_64)
ARCH="amd64"
;;
aarch64|arm64)
ARCH="arm64"
;;
*)
echo "Unsupported architecture: $ARCH" >&2
exit 1
;;
esac

apt-get update
apt-get install -y --no-install-recommends ca-certificates curl gzip make tar
rm -rf /var/lib/apt/lists/*

install_binary() {
local url="$1"
local destination="$2"

curl -fsSL "$url" -o "$destination"
chmod +x "$destination"
}

install_kind() {
install_binary "https://kind.sigs.k8s.io/dl/${KIND_VERSION}/kind-${OS}-${ARCH}" /usr/local/bin/kind
}

install_kubebuilder() {
install_binary "https://go.kubebuilder.io/dl/latest/${OS}/${ARCH}" /usr/local/bin/kubebuilder
}

install_kubectl() {
local kubectl_version
kubectl_version="$(curl -fsSL "https://dl.k8s.io/release/${KUBECTL_CHANNEL}.txt")"
install_binary "https://dl.k8s.io/release/${kubectl_version}/bin/${OS}/${ARCH}/kubectl" /usr/local/bin/kubectl
}

install_helm() {
local helm_version
local helm_archive
local temp_dir

helm_version="$(curl -fsSL https://api.github.com/repos/helm/helm/releases/latest | grep '"tag_name":' | head -n1 | cut -d '"' -f4)"
helm_archive="/tmp/helm-${helm_version}-${OS}-${ARCH}.tar.gz"
temp_dir="$(mktemp -d)"

curl -fsSL "https://get.helm.sh/helm-${helm_version}-${OS}-${ARCH}.tar.gz" -o "$helm_archive"
tar -C "$temp_dir" -xzf "$helm_archive"
install -m 0755 "$temp_dir/${OS}-${ARCH}/helm" /usr/local/bin/helm

rm -rf "$temp_dir" "$helm_archive"
}

install_kind
install_kubebuilder
install_kubectl
install_helm

if ! docker network inspect kind >/dev/null 2>&1; then
docker network create -d=bridge --subnet=172.19.0.0/24 kind
fi

kind version
kubebuilder version
helm version --short
docker --version
go version
kubectl version --client=true
6 changes: 0 additions & 6 deletions .dockerignore

This file was deleted.

84 changes: 58 additions & 26 deletions .github/workflows/e2e-tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -16,18 +16,19 @@ on:
description: Number of parallel processes for the E2E test suite
default: '2'
required: false
robin_ref:
description: Branch, tag or SHA to checkout from the Robin repository
default: main
required: false

concurrency:
group: e2e-${{ github.event.pull_request.number || github.sha }}
cancel-in-progress: true

env:
OPERATOR_NAME: redkey-operator
OPERATOR_VERSION: test-e2e
KUBECONFIG: ${{ github.workspace }}/.kube/config
KUBECONFIG: ${{ github.workspace }}/redkeyoperator/.kube/config
LOCAL_CLUSTER_NAME: test-e2e-cluster
LOCAL_REGISTRY: test-e2e-registry
LOCAL_REGISTRY_PORT: 5001

jobs:
e2e-tests:
Expand All @@ -38,50 +39,81 @@ jobs:
shell: bash -eu -o pipefail {0}

steps:
- name: 📥 Checkout code
- name: Checkout operator code
uses: actions/checkout@v4
with:
path: redkeyoperator

- name: Resolve Robin ref
id: robin-ref
env:
INPUT_ROBIN_REF: ${{ github.event.inputs.robin_ref || '' }}
PR_HEAD_REF: ${{ github.head_ref || '' }}
PR_BODY: ${{ github.event.pull_request.body || '' }}
run: |
robin_ref="${INPUT_ROBIN_REF}"

if [[ -z "${robin_ref}" && -n "${PR_BODY}" ]]; then
robin_ref="$(printf '%s\n' "${PR_BODY}" | sed -nE 's/^robin-ref:[[:space:]]*(.+)$/\1/p' | head -n1)"
fi

if [[ -z "${robin_ref}" && -n "${PR_HEAD_REF}" ]]; then
if git ls-remote --exit-code --heads https://github.com/InditexTech/redkeyrobin.git "${PR_HEAD_REF}" >/dev/null 2>&1; then
robin_ref="${PR_HEAD_REF}"
fi
fi

robin_ref="${robin_ref:-main}"
echo "ref=${robin_ref}" >> "$GITHUB_OUTPUT"

- name: Checkout Robin code
uses: actions/checkout@v4
with:
repository: InditexTech/redkeyrobin
ref: ${{ steps.robin-ref.outputs.ref }}
path: redkeyrobin

- name: 🏗️ Set up Go
- name: Set up Go
uses: actions/setup-go@v5
with:
go-version-file: go.mod
go-version-file: redkeyoperator/go.mod
cache: true

- name: 🔧 Install kubectl
- name: Install kubectl
uses: azure/setup-kubectl@v3
with:
version: v1.30.0

- name: 🌱 Kubernetes KinD Cluster
id: kind
- name: Create Kind cluster
uses: helm/kind-action@v1
with:
cluster_name: ${{ env.LOCAL_CLUSTER_NAME }}
registry: true
registry_name: ${{ env.LOCAL_REGISTRY }}
registry_port: ${{ env.LOCAL_REGISTRY_PORT }}

- name: 🏗️ Build operator image
run: make docker-build IMG=${{ steps.kind.outputs.LOCAL_REGISTRY }}/redkey-operator:${{ env.OPERATOR_VERSION }}

- name: 📥 Push operator image
run: make docker-push IMG=${{ steps.kind.outputs.LOCAL_REGISTRY }}/redkey-operator:${{ env.OPERATOR_VERSION }}
- name: Build operator image
working-directory: redkeyoperator
run: make docker-build IMG=redkey-operator:${{ env.OPERATOR_VERSION }}

- name: Build Robin image
working-directory: redkeyrobin
run: make docker-build IMG=redkey-robin:${{ env.OPERATOR_VERSION }} OPERATOR_DIR=../redkeyoperator

- name: 📚 Install Ginkgo CLI
- name: Install Ginkgo CLI
run: go install github.com/onsi/ginkgo/v2/ginkgo@latest

- name: 📚 Install CRD
run: make install

- name: ✅ Run E2E test suite
- name: Run E2E test suite
working-directory: redkeyoperator
env:
TEST_PARALLEL_PROCESSES: ${{ github.event.inputs.test_parallel_process || 2 }}
run: |
make test-e2e \
IMG=${{ steps.kind.outputs.LOCAL_REGISTRY }}/redkey-operator:${{ env.OPERATOR_VERSION }} \
IMAGE_OPERATOR=redkey-operator:${{ env.OPERATOR_VERSION }} \
IMAGE_ROBIN=redkey-robin:${{ env.OPERATOR_VERSION }} \
TEST_PARALLEL_PROCESS=${{ env.TEST_PARALLEL_PROCESSES }} \
GOMAXPROCS=${{ env.TEST_PARALLEL_PROCESSES }}
GOMAXPROCS=${{ env.TEST_PARALLEL_PROCESSES }} \
E2E_RECONCILE_INTERVAL=5 \
E2E_POLL_INTERVAL=3 \
E2E_CREATION_TIMEOUT=180

- name: 🧹 Delete KinD cluster (always)
- name: Delete Kind cluster
if: always()
run: kind delete cluster --name ${{ env.LOCAL_CLUSTER_NAME }}
35 changes: 20 additions & 15 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# SPDX-FileCopyrightText: 2025 INDUSTRIA DE DISEÑO TEXTIL S.A. (INDITEX S.A.)
# SPDX-License-Identifier: Apache-2.0
name: 🚀 Release
name: Release
permissions: read-all

on:
Expand All @@ -14,33 +14,33 @@ env:

jobs:
release:
name: 🏷️ Release
name: Release
runs-on: ubuntu-latest
outputs:
version: ${{ steps.version.outputs.version }}
user_agent_version: ${{ steps.version.outputs.user_agent_version }}
steps:
- name: 🛎️ Checkout
- name: Checkout
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
with:
fetch-depth: 0
- name: 🧪 Check bundle generation
- name: Check bundle generation
run: |
make bundle IMAGE_TAG_BASE=${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}

- name: 📝 Load Operator version
- 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
name: Check versions
needs: release
runs-on: ubuntu-latest
steps:
- name: 🔎 Check versions
- name: Check versions
run: |
echo "version: ${{ needs.release.outputs.version }}"
echo "user_agent_version: ${{ needs.release.outputs.user_agent_version }}"
Expand All @@ -57,35 +57,40 @@ jobs:
fi

build:
name: 🛠️ Build Operator images
name: Build Operator images
needs: check
runs-on: ubuntu-latest
permissions:
contents: write
packages: write
steps:
- name: 🛎️ Checkout
- name: Checkout
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
with:
fetch-depth: 0

- name: 🔐 Login into ${{ env.REGISTRY }}
- name: Login into ${{ env.REGISTRY }}
uses: docker/login-action@74a5d142397b4f367a81961eba4e8cd7edddf772 # v3
with:
registry: ${{ env.REGISTRY }}
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}

- name: 🏗️ Build and push Operator image
- name: Set up QEMU
uses: docker/setup-qemu-action@c7c53464625b32c7a7e944ae62b3e17d2b600130 # v3

- name: Set up Docker Buildx
uses: docker/setup-buildx-action@8d2750c68a42422c14e847fe6c8ac0403b4cbd6f # v3

- name: Build and push multi-arch 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
make docker-buildx 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
- 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 }}
Loading
Loading