Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
58 commits
Select commit Hold shift + click to select a range
f5d9593
chore: add agentic workflow directories to gitignore
AbdelrhmanHamouda Feb 6, 2026
dd58ab4
docs: initialize project
AbdelrhmanHamouda Feb 6, 2026
9d5bc4c
chore: remove tracked planning docs (now gitignored)
AbdelrhmanHamouda Feb 6, 2026
071c10f
test(01-01): add failing tests for extraArgs wiring and conflict dete…
AbdelrhmanHamouda Feb 6, 2026
cae63d3
feat(01-01): implement extraArgs wiring with conflict detection
AbdelrhmanHamouda Feb 6, 2026
2cfd2be
test(01-02): add failing tests for safe resource parsing
AbdelrhmanHamouda Feb 6, 2026
2f35f3d
feat(01-02): implement safe resource parsing and CR precedence
AbdelrhmanHamouda Feb 6, 2026
13fa855
feat(01-03): add Helm masterResources and workerResources fields
AbdelrhmanHamouda Feb 6, 2026
9984ac0
test(01-03): add integration tests for extraArgs and resource precedence
AbdelrhmanHamouda Feb 6, 2026
0efd979
test(01-04): add failing tests for role-specific resource precedence
AbdelrhmanHamouda Feb 6, 2026
ccb274a
feat(01-04): implement role-specific config and 3-level resource prec…
AbdelrhmanHamouda Feb 6, 2026
3fa5c5a
fix(02-01): remove MutatingWebhookConfiguration for CRD conversion
AbdelrhmanHamouda Feb 6, 2026
58fe194
fix(02-01): add emptyDir /tmp volume and fix replicaCount default
AbdelrhmanHamouda Feb 6, 2026
7e87446
feat(02-02): tighten RBAC to least privilege with conditional Leases
AbdelrhmanHamouda Feb 6, 2026
def58fc
feat(02-02): fix backward compatibility helpers to check leaf values
AbdelrhmanHamouda Feb 6, 2026
c4adcfd
feat(02-03): add optional PodDisruptionBudget and remove no-op crd.in…
AbdelrhmanHamouda Feb 6, 2026
47b9953
fix(02-03): replace CRD symlink with actual file for helm package com…
AbdelrhmanHamouda Feb 6, 2026
1096e84
refactor(03-01): unify volume name constant and fix mount path traili…
AbdelrhmanHamouda Feb 6, 2026
cc7b082
feat(03-02): remove generation guard and implement phase-based reconc…
AbdelrhmanHamouda Feb 6, 2026
1c091a0
feat(03-02): suppress Prometheus annotations when OTel is enabled
AbdelrhmanHamouda Feb 6, 2026
e7a2b30
feat(03-03): detect externally deleted resources and self-heal
AbdelrhmanHamouda Feb 6, 2026
a5803b4
test(03-03): add external deletion detection and recovery tests
AbdelrhmanHamouda Feb 6, 2026
ad4da55
fix(04-01): correct publish-image job — ko path, version, permissions…
AbdelrhmanHamouda Feb 6, 2026
c91c247
feat(04-01): enforce release ordering and replace chart-releaser fork
AbdelrhmanHamouda Feb 6, 2026
38d96e5
feat(04-02): parallelize CI jobs, add timeouts, fix ct.yaml timeout
AbdelrhmanHamouda Feb 6, 2026
156ed43
feat(04-02): add artifact uploads on CI job failures
AbdelrhmanHamouda Feb 6, 2026
92ab3de
feat(04-03): overhaul E2E workflow with security and reliability fixes
AbdelrhmanHamouda Feb 6, 2026
c244542
chore(04-03): remove dead nested workflow files
AbdelrhmanHamouda Feb 6, 2026
e22a45e
fix(05-01): fix imagePullSecrets format and reframe Kafka docs
AbdelrhmanHamouda Feb 7, 2026
6f91d04
fix(05-01): fix metrics.secure comment and replace jaeger with otlphttp
AbdelrhmanHamouda Feb 7, 2026
21ec5e5
docs(05-02): fix status example and update copyright/roadmap
AbdelrhmanHamouda Feb 7, 2026
510c467
docs(05-02): fix README framework reference
AbdelrhmanHamouda Feb 7, 2026
30be7ac
docs(05-03): standardize namespaces, add missing image field, fix CPU…
AbdelrhmanHamouda Feb 7, 2026
2550486
docs(05-03): remove subdirectory references and fix working dir instr…
AbdelrhmanHamouda Feb 7, 2026
3549d4a
fix(06-02): remove os.Chdir side effect and fix E2E label selectors
AbdelrhmanHamouda Feb 7, 2026
1165b33
feat(06-01): add typed Phase enum, ObservedGeneration, and phase tran…
AbdelrhmanHamouda Feb 7, 2026
01cf35d
feat(06-04): add Helm chart metadata, schema validation, and NOTES.txt
AbdelrhmanHamouda Feb 7, 2026
887cbb3
feat(06-04): add health probes, Kafka gating, and deployment configur…
AbdelrhmanHamouda Feb 7, 2026
c4e2e43
test(06-02): add webhook update tests, boundary tests, and v2 fixtures
AbdelrhmanHamouda Feb 7, 2026
2c18171
test(06-01): add comprehensive status transition tests and fix Phase …
AbdelrhmanHamouda Feb 7, 2026
3255d2a
test(06-06): remove v1 webhook unused logger and add OTel integration…
AbdelrhmanHamouda Feb 7, 2026
dfc41aa
feat(06-03): add gosec, errorlint, exhaustive linters and wrap reconc…
AbdelrhmanHamouda Feb 7, 2026
c401501
refactor(06-03): move BuildKafkaEnvVars to env.go and replace custom …
AbdelrhmanHamouda Feb 7, 2026
fc8dc35
refactor(06-05): extract main.go helpers and update leader election ID
AbdelrhmanHamouda Feb 7, 2026
f00f680
chore(06-05): update project metadata, dockerfile, build files, and RBAC
AbdelrhmanHamouda Feb 7, 2026
5ae53dd
chore(07-01): remove legacy Java operator code and build files
AbdelrhmanHamouda Feb 7, 2026
f67b7a9
refactor(07-02): move Go operator code from subdirectory to repositor…
AbdelrhmanHamouda Feb 7, 2026
cc1a482
chore(07-03): update CI/CD workflows, Makefile, PROJECT, and gitignor…
AbdelrhmanHamouda Feb 7, 2026
8cf9a4c
chore(07-03): update all config manifests and E2E tests to use locust…
AbdelrhmanHamouda Feb 7, 2026
eb40a06
docs(07-04): add MIGRATION.md, SECURITY.md, .editorconfig, update README
AbdelrhmanHamouda Feb 7, 2026
bee1145
chore: fix struct alignment and update test CRD with observedGeneration
AbdelrhmanHamouda Feb 8, 2026
66c1fca
chore(07-04): remove DevContainer configuration files
AbdelrhmanHamouda Feb 8, 2026
ca3adef
chore(06-05): optimize requeue timing, preallocate slice, and improve…
AbdelrhmanHamouda Feb 9, 2026
0fa30e1
chore(06-05): fix line length formatting in main.go flag parsing and …
AbdelrhmanHamouda Feb 9, 2026
e105484
test(06-05): add nolint directive for intentional type assertion in s…
AbdelrhmanHamouda Feb 9, 2026
69c2a05
chore: exclude goconst linter from test files in golangci-lint config
AbdelrhmanHamouda Feb 9, 2026
cf21f0e
chore: standardize lib volume name and improve status/flag handling
AbdelrhmanHamouda Feb 9, 2026
fe7633b
test(e2e): fix testdata directory path to use relative path
AbdelrhmanHamouda Feb 9, 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
5 changes: 2 additions & 3 deletions .cz.yaml
Original file line number Diff line number Diff line change
@@ -1,12 +1,11 @@
---
commitizen:
annotated_tag: true
bump_message: "bump(release): v$current_version \u2192 v$new_version"
bump_message: "bump(release): v$current_version v$new_version"
name: cz_conventional_commits
tag_format: $major.$minor.$patch$prerelease
update_changelog_on_bump: true
version: 1.1.1
version: 2.0.0
version_files:
- build.gradle:version
- charts/locust-k8s-operator/Chart.yaml:appVersion
- charts/locust-k8s-operator/Chart.yaml:version
34 changes: 34 additions & 0 deletions .dockerignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
# More info: https://docs.docker.com/engine/reference/builder/#dockerignore-file

# Test files
test/
*_test.go

# Documentation
docs/
*.md
LICENSE

# Git
.git/
.gitignore

# IDE
.idea/
.vscode/

# CI
.github/
.golangci.yml

# Build artifacts
bin/
cover.out
coverage.out

# Planning
.planning/

# Python
venv/
__pycache__/
29 changes: 29 additions & 0 deletions .editorconfig
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
root = true

[*]
end_of_line = lf
insert_final_newline = true
charset = utf-8
trim_trailing_whitespace = true

[*.go]
indent_style = tab
indent_size = 4

[*.{yaml,yml}]
indent_style = space
indent_size = 2

[*.{md,markdown}]
trim_trailing_whitespace = false

[Makefile]
indent_style = tab

[Dockerfile]
indent_style = space
indent_size = 4

[*.sh]
indent_style = space
indent_size = 2
2 changes: 1 addition & 1 deletion .github/ct.yaml
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
debug: true
validate-maintainers: false
helm-extra-args: --timeout 120s
helm-extra-args: --timeout 300s
51 changes: 38 additions & 13 deletions .github/workflows/ci.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -20,9 +20,7 @@ jobs:
build-go:
name: 🏗️ Build Go Operator
runs-on: ubuntu-latest
defaults:
run:
working-directory: locust-k8s-operator-go
timeout-minutes: 30
steps:
- name: 📂 Checkout repo
uses: actions/checkout@v4
Expand All @@ -33,7 +31,7 @@ jobs:
- name: 🔧 Setup Go
uses: actions/setup-go@v5
with:
go-version-file: locust-k8s-operator-go/go.mod
go-version-file: go.mod

- name: 📥 Download dependencies
run: go mod download
Expand All @@ -42,7 +40,6 @@ jobs:
uses: golangci/golangci-lint-action@v8
with:
version: v2.1.0
working-directory: locust-k8s-operator-go

- name: 🛠️ Build
run: make build
Expand All @@ -54,19 +51,27 @@ jobs:
if: always()
uses: codecov/codecov-action@v5
with:
files: locust-k8s-operator-go/cover.out
files: cover.out
flags: go-unit-tests
name: go-coverage
fail_ci_if_error: false

- name: 📦 Upload Go test artifacts on failure
if: failure()
uses: actions/upload-artifact@v4
with:
name: go-test-artifacts
path: |
cover.out
retention-days: 7

# ============================================
# Helm Chart Lint & Test
# ============================================
lint-test-helm:
name: 🌊 Lint & Test chart
runs-on: ubuntu-latest
needs:
- build-go
timeout-minutes: 30
steps:
- name: 📂 Checkout
uses: actions/checkout@v4
Expand Down Expand Up @@ -108,19 +113,18 @@ jobs:
if: steps.list-changed.outputs.changed == 'true'
uses: actions/setup-go@v5
with:
go-version-file: locust-k8s-operator-go/go.mod
go-version-file: go.mod

- name: 🛠️ Install ko
if: steps.list-changed.outputs.changed == 'true'
uses: ko-build/setup-ko@v0.7

- name: 🐳 Build operator image with ko
if: steps.list-changed.outputs.changed == 'true'
working-directory: locust-k8s-operator-go
env:
KO_DOCKER_REPO: lotest/locust-k8s-operator
run: |
CHART_VERSION=$(grep '^appVersion:' ../charts/locust-k8s-operator/Chart.yaml | awk '{print $2}' | tr -d '"')
CHART_VERSION=$(grep '^appVersion:' charts/locust-k8s-operator/Chart.yaml | awk '{print $2}' | tr -d '"')
ko build ./cmd --local --bare --tags=${CHART_VERSION}

- name: 📦 Load image into kind cluster
Expand All @@ -132,11 +136,23 @@ jobs:
- name: 🚀 Run chart-testing (install)
run: ct install --target-branch ${{ github.event.repository.default_branch }} --config .github/ct.yaml --helm-extra-set-args "--set=image.pullPolicy=Never"

- name: 📦 Collect kind cluster logs on failure
if: failure() && steps.list-changed.outputs.changed == 'true'
run: kind export logs kind-logs --name chart-testing

- name: 📦 Upload Helm test artifacts on failure
if: failure() && steps.list-changed.outputs.changed == 'true'
uses: actions/upload-artifact@v4
with:
name: helm-test-artifacts
path: |
kind-logs/
retention-days: 7

docs-test:
name: 📚 Test documentation
runs-on: ubuntu-latest
needs:
- lint-test-helm
timeout-minutes: 15
steps:
- name: 📂 Checkout
uses: actions/checkout@v4
Expand All @@ -161,3 +177,12 @@ jobs:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
python -m mkdocs build

- name: 📦 Upload docs build artifacts on failure
if: failure()
uses: actions/upload-artifact@v4
with:
name: docs-build-artifacts
path: |
site/
retention-days: 7
52 changes: 36 additions & 16 deletions .github/workflows/go-test-e2e.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,38 +4,58 @@ on:
push:
branches: [main, master]
paths:
- 'locust-k8s-operator-go/**'
- 'cmd/**'
- 'api/**'
- 'internal/**'
- 'test/**'
- 'go.mod'
- 'go.sum'
- 'Makefile'
pull_request:
paths:
- 'locust-k8s-operator-go/**'
- 'cmd/**'
- 'api/**'
- 'internal/**'
- 'test/**'
- 'go.mod'
- 'go.sum'
- 'Makefile'

defaults:
run:
working-directory: locust-k8s-operator-go
permissions: read-all

jobs:
test-e2e:
name: 🎯 Run E2E Tests
runs-on: ubuntu-latest
timeout-minutes: 30
steps:
- name: 📥 Clone the code
uses: actions/checkout@v4

- name: 🔧 Setup Go
uses: actions/setup-go@v5
with:
go-version-file: locust-k8s-operator-go/go.mod
go-version-file: go.mod

- name: ☸️ Install the latest version of kind
run: |
curl -Lo ./kind https://kind.sigs.k8s.io/dl/latest/kind-linux-amd64
chmod +x ./kind
sudo mv ./kind /usr/local/bin/kind

- name: ✔️ Verify kind installation
run: kind version
- name: ☸️ Create Kind cluster
uses: helm/kind-action@v1.12.0
with:
cluster_name: locust-k8s-operator-test-e2e
wait: 120s

- name: 🎯 Running Test e2e
- name: 🔍 Verify go mod tidy
run: |
go mod tidy
make test-e2e
git diff --exit-code -- go.mod go.sum

- name: 🎯 Run E2E tests
run: make test-e2e

- name: 📦 Upload E2E test artifacts on failure
if: failure()
uses: actions/upload-artifact@v4
with:
name: e2e-test-artifacts
path: |
cover.out
retention-days: 7
16 changes: 8 additions & 8 deletions .github/workflows/release.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -14,9 +14,9 @@ jobs:
publish-image:
name: 🐳 Publish image
runs-on: ubuntu-latest
timeout-minutes: 30
permissions:
contents: read
packages: write
env:
DOCKER_IMAGE: lotest/locust-k8s-operator
steps:
Expand All @@ -26,10 +26,10 @@ jobs:
- name: 🔧 Setup Go
uses: actions/setup-go@v5
with:
go-version-file: locust-k8s-operator-go/go.mod
go-version-file: go.mod

- name: 🔧 Setup ko
uses: ko-build/setup-ko@v0.6
uses: ko-build/setup-ko@v0.7

- name: 🔐 Login to Docker Hub
uses: docker/login-action@v3
Expand All @@ -38,18 +38,19 @@ jobs:
password: ${{ secrets.DOCKERHUB_TOKEN }}

- name: 📦 Build and push with ko
working-directory: locust-k8s-operator-go
env:
KO_DOCKER_REPO: ${{ env.DOCKER_IMAGE }}
run: |
ko build ./cmd/main.go \
ko build ./cmd \
--platform=linux/amd64,linux/arm64 \
--bare \
--tags=${{ github.ref_name }},latest,${{ github.sha }}

helm-chart-release:
name: 🌊 Publish Helm chart
runs-on: ubuntu-latest
timeout-minutes: 15
needs: [publish-image]
permissions:
contents: write
steps:
Expand All @@ -76,9 +77,7 @@ jobs:
helm package charts/locust-k8s-operator --app-version=${VERSION} --version=${VERSION} --destination=.cr-release-packages

- name: 🎉 Run chart-releaser
# switch back to helm/chart-releaser-action when https://github.com/helm/chart-releaser-action/pull/109 is merged
# Waiting for a new release to include changes coming from https://github.com/helm/chart-releaser-action/commit/38cfeacdbbd62d13ec773fcdee1435ff5846c554
uses: askcloudarchitech/chart-releaser-action@skip-packaging-option
uses: helm/chart-releaser-action@v1
with:
skip_packaging: true
env:
Expand All @@ -87,6 +86,7 @@ jobs:
docs-release:
name: 📚 Publish documentation
runs-on: ubuntu-latest
timeout-minutes: 15
permissions:
contents: write
steps:
Expand Down
Loading
Loading