Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
47 commits
Select commit Hold shift + click to select a range
e8f368f
fix(generate): align manifests target with repo layout
Arsolitt May 15, 2026
a11e842
fix(lint): exclude goconst from test files
Arsolitt May 15, 2026
6fe6400
fix(chart): drop unsupported --namespace and add --metrics-secure flag
Arsolitt May 15, 2026
efd6f1c
fix(ci): pass --verify=false to helm plugin install
Arsolitt May 15, 2026
4276847
feat(ci): publish container image to ghcr.io on push to main
Arsolitt May 15, 2026
203003b
fix(lint): extract Kilo group name to a constant
Arsolitt May 15, 2026
dfd48b9
fix(lint): extract Kilo group version to a constant
Arsolitt May 15, 2026
3d50f78
ci: run CI and publish image on the dev branch
Arsolitt May 15, 2026
fabc3d1
perf(container): build Go binary on the native runner platform
Arsolitt May 15, 2026
4dfa7a0
fix(operator): wire startup bootstrap and migrate to events API
Arsolitt May 18, 2026
441f440
fix(chart): allow SA token automount, inject POD_NAMESPACE and set se…
Arsolitt May 18, 2026
0dd84e6
fix(operator): scope manager cache to operator namespace
Arsolitt May 18, 2026
0965447
fix(operator): accept cozystack-Kilo wireguard-ip annotation format
Arsolitt May 18, 2026
d64cde1
fix(chart): grant operator RBAC on events.k8s.io events
Arsolitt May 18, 2026
14ab2ad
docs(readme): document force-endpoint annotation, manual reconcile an…
Arsolitt May 18, 2026
3b03f8d
docs(kilonode): document both accepted wireguard-ip annotation formats
Arsolitt May 18, 2026
cec6204
fix(restart): guard against nil Cancel in ChangeWatcher.Reconcile
Arsolitt May 18, 2026
79729bc
test(main): add unit tests for mergeClusterSpecs deduplication
Arsolitt May 18, 2026
6fa95c5
fix(containerfile): correct image.source label to cozystack repo
Arsolitt May 18, 2026
c4dfce9
test(peer): cover IPv6 and DNS endpoint parsing
Arsolitt May 18, 2026
13b3ee1
feat(main): declare version/revision build vars and log at startup
Arsolitt May 18, 2026
8e24318
fix(chart): default image.repository to cozystack fork
Arsolitt May 18, 2026
e7a99d8
fix(validation): normalize wireguard-ip before duplicate detection
Arsolitt May 18, 2026
4fbb4cd
ci(workflows): include cmd package in unit test job
Arsolitt May 18, 2026
40eba96
fix(peer): strip brackets from DNS fallback in endpoint parser
Arsolitt May 18, 2026
e6ec13a
docs(api): correct WireguardCIDR comment about accepted annotation fo…
Arsolitt May 18, 2026
2a61688
test(validation): cover ValidateClusterNetworks and ValidateMeshNetworks
Arsolitt May 18, 2026
ebbf384
docs(readme): use non-overlapping CIDRs in Quick Start example
Arsolitt May 18, 2026
2ed7ec6
docs(peer): clarify allowedIPs derivation in BuildPeer comment
Arsolitt May 18, 2026
a85e8bc
feat(api): add wireguardPort field to ClusterEntry
Arsolitt May 19, 2026
17adb6b
feat(annotations): add clustermesh-endpoint node annotation
Arsolitt May 19, 2026
b61417d
test(kilonode): add tests for endpoint resolution chain (Red)
Arsolitt May 19, 2026
206fe46
feat(kilonode): resolve node endpoint via fallback chain
Arsolitt May 19, 2026
8a2bbf8
refactor(peer): pass ClusterEntry through Build{Peer,AnchorPeer}
Arsolitt May 19, 2026
ea47423
feat(peer): wire endpoint resolution chain into peer builders
Arsolitt May 19, 2026
79d2633
test(validation): add endpoint resolution skip cases (Red)
Arsolitt May 19, 2026
56eae99
feat(validation): require resolvable endpoint via kilonode.ResolveEnd…
Arsolitt May 19, 2026
df740bd
chore(crd): regenerate manifests after wireguardPort addition
Arsolitt May 19, 2026
c263fa4
docs(readme): document endpoint resolution chain
Arsolitt May 19, 2026
26977f5
docs: rewrite README and add docs/ tree
Arsolitt May 19, 2026
5ab85de
docs: add known-gaps handoff document
Arsolitt May 19, 2026
4f46bef
test(integration): provide resolvable endpoint for nodes
Arsolitt May 19, 2026
16d684b
ci(workflows): disable checkout credential persistence
Arsolitt May 21, 2026
f0a42a9
docs(installation): set yaml language on RBAC fenced block
Arsolitt May 21, 2026
5d45749
docs(installation): strip prompt prefixes from no-output examples
Arsolitt May 21, 2026
ee95f1a
docs(per-node): set text language on plain fenced blocks
Arsolitt May 21, 2026
168663f
docs(readme): merge adjacent blockquote callouts
Arsolitt May 21, 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
58 changes: 54 additions & 4 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,15 +2,17 @@ name: CI

on:
push:
branches: [main]
branches: [main, dev]
pull_request:
branches: [main]
branches: [main, dev]

jobs:
lint:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
persist-credentials: false
- uses: actions/setup-go@v5
with:
go-version: "1.26.3"
Expand All @@ -22,10 +24,12 @@ jobs:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
persist-credentials: false
- uses: actions/setup-go@v5
with:
go-version: "1.26.3"
- run: go test ./api/... ./pkg/... ./internal/... -race -coverprofile=coverage.out
- run: go test ./api/... ./cmd/... ./pkg/... ./internal/... -race -coverprofile=coverage.out
- uses: actions/upload-artifact@v4
with:
name: coverage
Expand All @@ -35,6 +39,8 @@ jobs:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
persist-credentials: false
- uses: actions/setup-go@v5
with:
go-version: "1.26.3"
Expand All @@ -47,6 +53,8 @@ jobs:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
persist-credentials: false
- uses: actions/setup-go@v5
with:
go-version: "1.26.3"
Expand All @@ -56,17 +64,59 @@ jobs:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
persist-credentials: false
- uses: azure/setup-helm@v4
- run: helm plugin install https://github.com/helm-unittest/helm-unittest
- run: helm plugin install --verify=false https://github.com/helm-unittest/helm-unittest
- run: helm lint charts/kilo-clustermesh-operator --strict
- run: helm unittest charts/kilo-clustermesh-operator

generate:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
persist-credentials: false
- uses: actions/setup-go@v5
with:
go-version: "1.26.3"
- run: make manifests generate
- run: git diff --exit-code

image:
if: github.event_name == 'push' && (github.ref == 'refs/heads/main' || github.ref == 'refs/heads/dev')
needs: [lint, test, build, helm, generate, integration]
runs-on: ubuntu-latest
permissions:
contents: read
packages: write
steps:
- uses: actions/checkout@v4
with:
persist-credentials: false
- uses: docker/login-action@v3
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- uses: docker/setup-buildx-action@v3
- uses: docker/metadata-action@v5
id: meta
with:
images: ghcr.io/${{ github.repository }}
tags: |
type=ref,event=branch
type=sha,prefix=sha-,format=long
- uses: docker/build-push-action@v6
Comment thread
coderabbitai[bot] marked this conversation as resolved.
with:
context: .
file: Containerfile
push: true
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}
platforms: linux/amd64,linux/arm64
build-args: |
VERSION=${{ github.ref_name }}
REVISION=${{ github.sha }}
cache-from: type=gha
cache-to: type=gha,mode=max
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -42,3 +42,6 @@ Thumbs.db

# Internal planning docs (not for public history)
PLAN.md

# Cluster-specific deployment manifests (kept local; not part of the project)
deploy/
1 change: 1 addition & 0 deletions .golangci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -140,6 +140,7 @@ linters:
- revive
- gochecknoglobals
- noinlineerr
- goconst
path: _test\.go
- linters:
- err113
Expand Down
4 changes: 2 additions & 2 deletions Containerfile
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
FROM docker.io/library/golang:1.26@sha256:313faae491b410a35402c05d35e7518ae99103d957308e940e1ae2cfa0aac29b AS builder
FROM --platform=$BUILDPLATFORM docker.io/library/golang:1.26@sha256:313faae491b410a35402c05d35e7518ae99103d957308e940e1ae2cfa0aac29b AS builder
ARG TARGETOS TARGETARCH
ARG VERSION=dev
ARG REVISION=unknown
Expand All @@ -16,7 +16,7 @@ RUN CGO_ENABLED=0 GOOS=${TARGETOS:-linux} GOARCH=${TARGETARCH} \

FROM gcr.io/distroless/static:nonroot@sha256:e3f945647ffb95b5839c07038d64f9811adf17308b9121d8a2b87b6a22a80a39

LABEL org.opencontainers.image.source="https://github.com/squat/kilo-clustermesh-operator"
LABEL org.opencontainers.image.source="https://github.com/cozystack/kilo-clustermesh-operator"
LABEL org.opencontainers.image.description="Kubernetes ClusterMesh operator for Kilo"
LABEL org.opencontainers.image.licenses="Apache-2.0"
LABEL org.opencontainers.image.title="kilo-clustermesh-operator"
Expand Down
3 changes: 2 additions & 1 deletion Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,8 @@ help: ## Display this help.

.PHONY: manifests
manifests: controller-gen ## Generate WebhookConfiguration, ClusterRole and CustomResourceDefinition objects.
"$(CONTROLLER_GEN)" rbac:roleName=manager-role crd webhook paths="./..." output:crd:artifacts:config=config/crd/bases
"$(CONTROLLER_GEN)" rbac:roleName=manager-role webhook paths="./..."
"$(CONTROLLER_GEN)" crd paths="./api/..." output:crd:artifacts:config=config/crd/bases

.PHONY: generate
generate: controller-gen ## Generate code containing DeepCopy, DeepCopyInto, and DeepCopyObject method implementations.
Expand Down
Loading
Loading