Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
35 commits
Select commit Hold shift + click to select a range
1651063
Feat/schema (#31)
FayKn Mar 4, 2026
e413a70
Merge branch 'main' into feat/rabbit-mq
FayKn Mar 9, 2026
dbc18b0
Major refactor to allow for code reuse with the rabbitMQ controller
FayKn Mar 9, 2026
e7e8454
RabbitMQ code writen and some refactors
FayKn Mar 10, 2026
f3f62b6
rabbitmq tests and refactor of tests + excluded users in rabbitMQ and…
FayKn Mar 10, 2026
3fa8c7c
requeue interval globalized and added for rmq
FayKn Mar 10, 2026
5b2ed33
refactor of reconciliation logic and sync signal is given off for rbm…
FayKn Mar 16, 2026
8be6ebc
Moved permission granting to reconcile functions to avoid a loop
FayKn Mar 16, 2026
cf7e2ca
added deletion of stale vhosts
FayKn Mar 16, 2026
baf3e19
Moved reasons to a const, condition state in shared logic
FayKn Mar 16, 2026
5afafa1
Added finalizer
FayKn Mar 16, 2026
fafc1df
removed multi group layout from agents.md and tightened up tests from…
FayKn Mar 16, 2026
5cd3da3
tests fixed
FayKn Mar 16, 2026
c2b7a57
workflows updated version
FayKn Mar 16, 2026
3e44e61
Native builds for images
FayKn Mar 16, 2026
2b6ed10
Update build actions to latest
FayKn Mar 16, 2026
cbc3e96
Remove old sample
FayKn Mar 16, 2026
ed02322
fix nitpick from copilot
FayKn Mar 16, 2026
4ce8a32
Potential fix for pull request finding
FayKn Mar 16, 2026
f1330c9
Removed a useless emit function and error on multiple secrets
FayKn Mar 17, 2026
66d2121
don't reque on error and use right priviliege drift interval
FayKn Mar 17, 2026
a6fb362
fmt
FayKn Mar 17, 2026
7660517
Run tests in paralel & cleanup tests (#38)
FayKn Mar 17, 2026
6918785
namespace block operator controller
FayKn Mar 18, 2026
ca2f308
Developer and ops person docs
FayKn Mar 18, 2026
685afb8
Create CONTRIBUTING.md
FayKn Mar 18, 2026
651483f
Use array of digest sources
FayKn Mar 18, 2026
d8ae045
Update README.md
FayKn Mar 23, 2026
9cc4420
Merge branch 'main' into feat/rabbit-mq
FayKn Mar 23, 2026
23a404c
Feat/plugin like refactor (#40)
FayKn Mar 24, 2026
0da2df1
fix lint
FayKn Mar 24, 2026
dc8437d
add Redis sample for readme cluster
FayKn Mar 24, 2026
2ca75d1
Update DEVELOPER.md
FayKn Mar 24, 2026
84c0280
fixed stuck e2e test
FayKn Mar 24, 2026
048a70c
poll later
FayKn Mar 24, 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
119 changes: 98 additions & 21 deletions .github/workflows/docker-publish.yml
Original file line number Diff line number Diff line change
Expand Up @@ -9,26 +9,30 @@ on:
env:
REGISTRY: ghcr.io
IMAGE_NAME: ${{ github.repository }}
PLATFORMS: linux/amd64,linux/arm64

jobs:
build:
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
include:
- platform: linux/amd64
arch: amd64
runner: ubuntu-latest
- platform: linux/arm64
arch: arm64
runner: ubuntu-24.04-arm
runs-on: ${{ matrix.runner }}
permissions:
contents: read
packages: write
id-token: write

steps:
- name: Checkout repository
uses: actions/checkout@v4

- name: Install cosign
if: github.event_name != 'pull_request'
uses: sigstore/cosign-installer@v3.10.0
uses: actions/checkout@v6

- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
uses: docker/setup-buildx-action@v4

- name: Log into registry ${{ env.REGISTRY }}
if: github.event_name != 'pull_request'
Expand All @@ -40,25 +44,98 @@ jobs:

- name: Extract Docker metadata
id: meta
uses: docker/metadata-action@v5
uses: docker/metadata-action@v6
with:
images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}

- name: Build and push Docker image
id: build-and-push
uses: docker/build-push-action@v6
- name: Build Docker image
if: github.event_name == 'pull_request'
uses: docker/build-push-action@v7
with:
context: .
platforms: ${{ env.PLATFORMS }}
push: ${{ github.event_name != 'pull_request' }}
tags: ${{ steps.meta.outputs.tags }}
platforms: ${{ matrix.platform }}
labels: ${{ steps.meta.outputs.labels }}
cache-from: type=gha
cache-to: type=gha,mode=max
cache-from: type=gha,scope=${{ matrix.arch }}
cache-to: type=gha,mode=max,scope=${{ matrix.arch }}

- name: Sign the published Docker image
- name: Build and push Docker image by digest
if: github.event_name != 'pull_request'
id: build
uses: docker/build-push-action@v7
with:
context: .
platforms: ${{ matrix.platform }}
labels: ${{ steps.meta.outputs.labels }}
outputs: type=image,name=${{ env.REGISTRY }}/${{ env.IMAGE_NAME }},push-by-digest=true,name-canonical=true,push=true
cache-from: type=gha,scope=${{ matrix.arch }}
cache-to: type=gha,mode=max,scope=${{ matrix.arch }}

- name: Export image digest
if: github.event_name != 'pull_request'
run: |
mkdir -p "$RUNNER_TEMP/digests"
digest="${{ steps.build.outputs.digest }}"
touch "$RUNNER_TEMP/digests/${digest#sha256:}"

- name: Upload image digest
if: github.event_name != 'pull_request'
uses: actions/upload-artifact@v4
with:
name: digests-${{ matrix.arch }}
path: ${{ runner.temp }}/digests/*
if-no-files-found: error
retention-days: 1

merge:
if: github.event_name != 'pull_request'
needs: build
runs-on: ubuntu-latest
permissions:
contents: read
packages: write
id-token: write

steps:
- name: Install cosign
uses: sigstore/cosign-installer@v3.10.0

- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v4

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

- name: Extract Docker metadata
id: meta
uses: docker/metadata-action@v6
with:
images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}

- name: Download image digests
uses: actions/download-artifact@v4
with:
path: ${{ runner.temp }}/digests
pattern: digests-*
merge-multiple: true

- name: Create multi-arch manifest
working-directory: ${{ runner.temp }}/digests
env:
DOCKER_METADATA_OUTPUT_JSON: ${{ steps.meta.outputs.json }}
run: |
sources=()
for digest_file in *; do
sources+=("${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}@sha256:${digest_file}")
done
docker buildx imagetools create \
$(jq -cr '.tags | map("-t " + .) | join(" ")' <<< "$DOCKER_METADATA_OUTPUT_JSON") \
"${sources[@]}"

- name: Sign the published Docker image
env:
TAGS: ${{ steps.meta.outputs.tags }}
DIGEST: ${{ steps.build-and-push.outputs.digest }}
run: echo "${TAGS}" | xargs -I {} cosign sign --yes {}@${DIGEST}
run: echo "${TAGS}" | xargs -r -I {} cosign sign --yes {}
4 changes: 2 additions & 2 deletions .github/workflows/lint.yml
Original file line number Diff line number Diff line change
Expand Up @@ -10,10 +10,10 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Clone the code
uses: actions/checkout@v4
uses: actions/checkout@v6

- name: Setup Go
uses: actions/setup-go@v5
uses: actions/setup-go@v6
with:
go-version-file: go.mod

Expand Down
91 changes: 77 additions & 14 deletions .github/workflows/release-setup-file.yml
Original file line number Diff line number Diff line change
Expand Up @@ -11,23 +11,74 @@ permissions:
env:
REGISTRY: ghcr.io
IMAGE_NAME: ${{ github.repository }}
PLATFORMS: linux/amd64,linux/arm64

jobs:
build:
strategy:
fail-fast: false
matrix:
include:
- platform: linux/amd64
arch: amd64
runner: ubuntu-latest
- platform: linux/arm64
arch: arm64
runner: ubuntu-24.04-arm
runs-on: ${{ matrix.runner }}

steps:
- name: Checkout
uses: actions/checkout@v6

- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v4

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

- name: Build and push release image by digest
id: build
uses: docker/build-push-action@v7
with:
context: .
platforms: ${{ matrix.platform }}
outputs: type=image,name=${{ env.REGISTRY }}/${{ env.IMAGE_NAME }},push-by-digest=true,name-canonical=true,push=true
cache-from: type=gha,scope=${{ matrix.arch }}
cache-to: type=gha,mode=max,scope=${{ matrix.arch }}

- name: Export image digest
run: |
mkdir -p "$RUNNER_TEMP/digests"
digest="${{ steps.build.outputs.digest }}"
touch "$RUNNER_TEMP/digests/${digest#sha256:}"

- name: Upload image digest
uses: actions/upload-artifact@v4
with:
name: digests-${{ matrix.arch }}
path: ${{ runner.temp }}/digests/*
if-no-files-found: error
retention-days: 1

release:
needs: build
runs-on: ubuntu-latest

steps:
- name: Checkout
uses: actions/checkout@v4
uses: actions/checkout@v6

- name: Setup Go
uses: actions/setup-go@v5
uses: actions/setup-go@v6
with:
go-version-file: go.mod

- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
uses: docker/setup-buildx-action@v4

- name: Log into registry ${{ env.REGISTRY }}
uses: docker/login-action@v3
Expand All @@ -36,20 +87,32 @@ jobs:
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}

- name: Build and push release image
id: build-and-push
uses: docker/build-push-action@v6
- name: Download image digests
uses: actions/download-artifact@v4
with:
context: .
platforms: ${{ env.PLATFORMS }}
push: true
tags: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${{ github.ref_name }}
cache-from: type=gha
cache-to: type=gha,mode=max
path: ${{ runner.temp }}/digests
pattern: digests-*
merge-multiple: true

- name: Create multi-arch release image
id: merge
working-directory: ${{ runner.temp }}/digests
run: |
image="${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}"
tag="${{ github.ref_name }}"
sources=()
for digest_file in *; do
sources+=("${image}@sha256:${digest_file}")
done
docker buildx imagetools create \
-t "${image}:${tag}" \
"${sources[@]}"
digest="$(docker buildx imagetools inspect "${image}:${tag}" --format '{{json .Manifest}}' | jq -r '.digest')"
echo "digest=${digest}" >> "$GITHUB_OUTPUT"

- name: Build installer manifest pinned to release image digest
run: |
make build-installer IMG=${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}@${{ steps.build-and-push.outputs.digest }}
make build-installer IMG=${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}@${{ steps.merge.outputs.digest }}

- name: Publish GitHub release with install.yaml
uses: softprops/action-gh-release@v2
Expand Down
6 changes: 3 additions & 3 deletions .github/workflows/test-e2e.yml
Original file line number Diff line number Diff line change
Expand Up @@ -10,10 +10,10 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Clone the code
uses: actions/checkout@v4
uses: actions/checkout@v6

- name: Setup Go
uses: actions/setup-go@v5
uses: actions/setup-go@v6
with:
go-version-file: go.mod

Expand All @@ -35,4 +35,4 @@ jobs:
POSTGRES_DB: testdb
run: |
go mod tidy
CERT_MANAGER_INSTALL_SKIP=true make test-e2e
make test-e2e
4 changes: 2 additions & 2 deletions .github/workflows/test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -10,10 +10,10 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Clone the code
uses: actions/checkout@v4
uses: actions/checkout@v6

- name: Setup Go
uses: actions/setup-go@v5
uses: actions/setup-go@v6
with:
go-version-file: go.mod

Expand Down
24 changes: 3 additions & 21 deletions AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,24 +16,6 @@ Makefile Build/test/deploy commands
PROJECT Kubebuilder metadata Auto-generated (DO NOT EDIT)
```

**Multi-group layout** (for projects with multiple API groups):
```
api/<group>/<version>/*_types.go CRD schemas by group
internal/controller/<group>/* Controllers by group
internal/webhook/<group>/<version>/* Webhooks by group and version (if present)
```

Multi-group layout organizes APIs by group name (e.g., `batch`, `apps`). Check the `PROJECT` file for `multigroup: true`.

**To convert to multi-group layout:**
1. Run: `kubebuilder edit --multigroup=true`
2. Move APIs: `mkdir -p api/<group> && mv api/<version> api/<group>/`
3. Move controllers: `mkdir -p internal/controller/<group> && mv internal/controller/*.go internal/controller/<group>/`
4. Move webhooks (if present): `mkdir -p internal/webhook/<group> && mv internal/webhook/<version> internal/webhook/<group>/`
5. Update import paths in all files
6. Fix `path` in `PROJECT` file for each resource
7. Update test suite CRD paths (add one more `..` to relative paths)

## Critical Rules

### Never Edit These (Auto-Generated)
Expand All @@ -52,9 +34,9 @@ Do not move files around. The CLI expects files in specific locations.
### Always Use CLI Commands
Always use `kubebuilder create api` and `kubebuilder create webhook` to scaffold. Do NOT create files manually.

### E2E Tests Require an Isolated Kind Cluster
The e2e tests are designed to validate the solution in an isolated environment (similar to GitHub Actions CI).
Ensure you run them against a dedicated [Kind](https://kind.sigs.k8s.io/) cluster (not your “real” dev/prod cluster).
### E2E Tests
- E2E test should be added for most major features, run with `make test-e2e`.
- tests should be run on a kind cluster; this will be created by the test command.

## After Making Changes

Expand Down
41 changes: 41 additions & 0 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
# Contributing

We – [Delta10 B.V.](https://www.delta10.nl/) and the maintainers of this project – know we can only build together with you. Thus we appreciate your input, enjoy feedback and welcome improvements to this project and are very open to collaboration.

By contributing to this project, you accept and agree the the terms and conditions as specified in the [Contributor Licence Agreement](CLA.md).

## Problems, suggestions and questions in Issues

You don't need to change any of our code or documentation to be a contributor. Please help development by reporting problems, suggesting changes and asking questions. To do this, you can [create a GitLab Issue](https://docs.gitlab.com/ee/user/project/issues/index.html#issues) for this project in the [issues section](https://gitlab.com/delta10/project-template/issues).

## Documentation and code in Merge Requests

If you want to add to the documentation or code of one of our projects you should push a branch and make a Merge Request. If you never used GitLab, get up to speed by reading about the [GitLab Flow](https://about.gitlab.com/2014/09/29/gitlab-flow/).

### 1. Make your changes

This project uses the **OneFlow branching model** and workflow. When you've forked this repository, please make sure to create a feature branch following the OneFlow model. Read this [short blogpost](http://endoflineblog.com/oneflow-a-git-branching-model-and-workflow) when you're not yet familiar with OneFlow.

Add your changes in commits [with a message that explains them](https://robots.thoughtbot.com/5-useful-tips-for-a-better-commit-message). Document choices or decisions you make in the commit message, this will enable everyone to be informed of your choices in the future.

If you are adding code, make sure you've added and updated the relevant documentation and tests before you submit your Merge Request. Make sure to write tests that show the behaviour of the newly added or changed code.

### 2. Merge Request

When submitting the Merge Request, please accompany it with a description of the problem you are trying to address and the issue numbers that this Merge Request fixes/addresses.

### 3. Improve

All contributions have to be reviewed by someone.

It could be that your contribution can be merged immediately by a maintainer. However, usually, a new Merge Request needs some improvements before it can be merged. Other contributors (or our automatic testing system) might have feedback. If this is the case the reviewing maintainer will help you improve your documentation and code.

If your documentation and code have passed human review and have passed the automated tests, it is merged.

### 4. Celebrate

Your ideas, documentation and code have become an integral part of this project.

---

For more information on how to use and contribute to this project, please read the [`README`](README.md).
Loading
Loading