Skip to content

Commit 1d056d3

Browse files
raballewclaude
andauthored
fix: remove Helm charts and standardize on operator-based deployment (#448)
- Remove all Helm chart files and Helm-based deployment infrastructure from the repository - Update CLI admin commands, Kubernetes cluster operations, and e2e test scripts to use operator-only deployment - Clean up stale references to Helm in Makefiles, CI workflows, and Python packages Closes #445 --------- Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
1 parent 72e0ed8 commit 1d056d3

87 files changed

Lines changed: 1097 additions & 5942 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.cursor/rules/working-with-operator.mdc

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,6 @@ controller/
2525
│ │ ├── bundle/ # OLM bundle manifests
2626
│ │ ├── test/e2e/ # E2E tests
2727
│ │ └── Makefile # Operator-specific make targets
28-
│ └── helm/ # Helm charts (alternative deployment)
2928
├── api/ # Jumpstarter core CRDs (Client, Exporter, Lease, etc.)
3029
├── internal/ # Controller business logic
3130
│ └── config/ # Config structs used by controller

.github/workflows/build-images.yaml

Lines changed: 0 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -273,42 +273,3 @@ jobs:
273273
});
274274
}
275275
276-
publish-helm-charts:
277-
needs: build-and-push-image
278-
if: ${{ github.repository_owner == 'jumpstarter-dev' && (github.ref == 'refs/heads/main' || startsWith(github.ref, 'refs/tags/') || startsWith(github.ref, 'refs/heads/release-')) }}
279-
runs-on: ubuntu-latest
280-
steps:
281-
- uses: actions/checkout@v4
282-
with:
283-
fetch-depth: 0
284-
285-
- name: Get version
286-
run: |
287-
VERSION=$(git describe --tags)
288-
VERSION=${VERSION#v} # remove the leading v prefix for version
289-
echo "VERSION=${VERSION}" >> $GITHUB_ENV
290-
echo "VERSION=${VERSION}"
291-
292-
- name: Build helm charts
293-
run: |
294-
echo packaging ${VERSION}
295-
# patch the sub-chart app-version, because helm package won't do it
296-
sed -i "s/^appVersion:.*/appVersion: $VERSION/" controller/deploy/helm/jumpstarter/charts/jumpstarter-controller/Chart.yaml
297-
helm package ./controller/deploy/helm/jumpstarter --version "${VERSION}" --app-version "${VERSION}"
298-
299-
- name: Login helm
300-
env:
301-
PASSWORD: ${{ secrets.QUAY_TOKEN }}
302-
USER: jumpstarter-dev+jumpstarter_ci
303-
run:
304-
helm registry login quay.io -u ${USER} -p ${PASSWORD}
305-
306-
- name: Push helm charts
307-
run: |
308-
helm push jumpstarter-*.tgz oci://${{ env.QUAY_ORG }}/helm
309-
310-
if [[ "${{ github.ref }}" == "refs/heads/release-*" ]]; then
311-
RELEASE_BRANCH_NAME=$(basename "${{ github.ref }}")
312-
helm chart save jumpstarter-*.tgz ${{ env.QUAY_ORG }}/helm:${RELEASE_BRANCH_NAME}
313-
helm chart push ${{ env.QUAY_ORG }}/helm:${RELEASE_BRANCH_NAME}
314-
fi

.github/workflows/controller-kind.yaml

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -8,23 +8,16 @@ on:
88

99
jobs:
1010
deploy-kind:
11-
strategy:
12-
matrix:
13-
method:
14-
- helm
15-
- operator
1611
runs-on: ubuntu-latest
1712
steps:
1813
- name: Checkout repository
1914
uses: actions/checkout@v4
2015
with:
2116
fetch-depth: 0
2217

23-
- name: Run make deploy (${{ matrix.method }})
18+
- name: Run make deploy
2419
working-directory: controller
2520
run: make deploy
26-
env:
27-
METHOD: ${{ matrix.method }}
2821

2922
e2e-test-operator:
3023
runs-on: ubuntu-latest

.github/workflows/e2e.yaml

Lines changed: 19 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -231,7 +231,6 @@ jobs:
231231
run: make e2e-setup
232232
env:
233233
CI: true
234-
METHOD: operator
235234
SKIP_BUILD: "true"
236235
PREBUILT_WHEELS_DIR: /tmp/python-wheels
237236
OPERATOR_IMG: quay.io/jumpstarter-dev/jumpstarter-operator:latest
@@ -240,15 +239,13 @@ jobs:
240239
run: make e2e-run
241240
env:
242241
CI: true
243-
METHOD: operator
244242

245243
# ============================================================================
246244
# Compatibility tests: cross-version interop between controller and client/exporter
247-
# These jobs can be removed once 0.7.x controller support is no longer needed.
248245
# ============================================================================
249246

250247
e2e-compat-old-controller:
251-
needs: [changes, build-python-wheels]
248+
needs: changes
252249
if: needs.changes.outputs.should_run == 'true' || github.event_name == 'workflow_dispatch'
253250
runs-on: ubuntu-24.04
254251
timeout-minutes: 60
@@ -264,26 +261,19 @@ jobs:
264261
with:
265262
go-version: "1.22"
266263

267-
- name: Download python wheels
268-
uses: actions/download-artifact@v4
269-
with:
270-
name: python-wheels
271-
path: /tmp/python-wheels
272-
273-
- name: Setup compat environment (old controller v0.7.0)
264+
- name: Setup compat environment (old controller v0.8.1)
274265
run: make e2e-compat-setup COMPAT_SCENARIO=old-controller
275266
env:
276267
CI: true
277-
COMPAT_CONTROLLER_TAG: v0.7.0
278-
PREBUILT_WHEELS_DIR: /tmp/python-wheels
268+
COMPAT_CONTROLLER_TAG: v0.8.1
279269

280270
- name: Run compat tests (old controller + new client/exporter)
281271
run: make e2e-compat-run COMPAT_TEST=old-controller
282272
env:
283273
CI: true
284274

285275
e2e-compat-old-client:
286-
needs: [changes, build-controller-image, build-python-wheels]
276+
needs: [changes, build-controller-image, build-operator-image, build-python-wheels]
287277
if: needs.changes.outputs.should_run == 'true' || github.event_name == 'workflow_dispatch'
288278
runs-on: ubuntu-24.04
289279
timeout-minutes: 60
@@ -305,22 +295,33 @@ jobs:
305295
name: controller-image-amd64
306296
path: /tmp/artifacts
307297

298+
- name: Download operator image
299+
uses: actions/download-artifact@v4
300+
with:
301+
name: operator-image-amd64
302+
path: /tmp/artifacts
303+
308304
- name: Download python wheels
309305
uses: actions/download-artifact@v4
310306
with:
311307
name: python-wheels
312308
path: /tmp/python-wheels
313309

314-
- name: Load controller image
315-
run: docker load < /tmp/artifacts/controller-image.tar
310+
- name: Load container images and operator manifest
311+
run: |
312+
docker load < /tmp/artifacts/controller-image.tar
313+
docker load < /tmp/artifacts/operator-image.tar
314+
mkdir -p controller/deploy/operator/dist
315+
cp /tmp/artifacts/operator-install.yaml controller/deploy/operator/dist/install.yaml
316316
317-
- name: Setup compat environment (old client v0.7.0)
317+
- name: Setup compat environment (old client v0.7.4)
318318
run: make e2e-compat-setup COMPAT_SCENARIO=old-client
319319
env:
320320
CI: true
321-
COMPAT_CLIENT_VERSION: "0.7.1"
321+
COMPAT_CLIENT_VERSION: "0.7.4"
322322
SKIP_BUILD: "true"
323323
PREBUILT_WHEELS_DIR: /tmp/python-wheels
324+
OPERATOR_IMG: quay.io/jumpstarter-dev/jumpstarter-operator:latest
324325

325326
- name: Run compat tests (new controller + old client/exporter)
326327
run: make e2e-compat-run COMPAT_TEST=old-client

.github/workflows/lint.yaml

Lines changed: 0 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@ jobs:
1919
runs-on: ubuntu-latest
2020
outputs:
2121
controller: ${{ steps.filter.outputs.controller }}
22-
helm: ${{ steps.filter.outputs.helm }}
2322
protocol: ${{ steps.filter.outputs.protocol }}
2423
python: ${{ steps.filter.outputs.python }}
2524
steps:
@@ -31,9 +30,6 @@ jobs:
3130
controller:
3231
- 'controller/**'
3332
- '.github/workflows/lint.yaml'
34-
helm:
35-
- 'controller/deploy/helm/**'
36-
- '.github/workflow/lint.yaml'
3733
protocol:
3834
- 'protocol/**'
3935
- '.github/workflows/lint.yaml'
@@ -60,20 +56,6 @@ jobs:
6056
working-directory: controller
6157
run: make lint
6258

63-
lint-helm:
64-
needs: changes
65-
if: needs.changes.outputs.helm == 'true'
66-
runs-on: ubuntu-latest
67-
steps:
68-
- name: Checkout repository
69-
uses: actions/checkout@v4
70-
with:
71-
fetch-depth: 0
72-
73-
- name: Run helm linter
74-
working-directory: controller
75-
run: make lint-helm
76-
7759
lint-protobuf:
7860
needs: changes
7961
if: needs.changes.outputs.protocol == 'true'

Makefile

Lines changed: 7 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,6 @@
66
# Subdirectories containing projects
77
SUBDIRS := python protocol controller e2e
88

9-
# Deployment method for e2e tests: operator (default) or helm
10-
METHOD ?= operator
11-
129
# Default target
1310
.PHONY: all
1411
all: build
@@ -33,9 +30,6 @@ help:
3330
@echo " make e2e-full - Full setup + run (for CI or first time)"
3431
@echo " make e2e-clean - Clean up e2e test environment (delete cluster, certs, etc.)"
3532
@echo ""
36-
@echo " Use METHOD=operator (default) or METHOD=helm to select deployment method"
37-
@echo " Example: make e2e-setup METHOD=helm"
38-
@echo ""
3933
@echo "Per-project targets:"
4034
@echo " make build-<project> - Build specific project"
4135
@echo " make test-<project> - Test specific project"
@@ -121,14 +115,14 @@ test-controller:
121115
# Setup e2e testing environment (one-time)
122116
.PHONY: e2e-setup
123117
e2e-setup:
124-
@echo "Setting up e2e test environment (method: $(METHOD))..."
125-
@METHOD=$(METHOD) bash e2e/setup-e2e.sh
118+
@echo "Setting up e2e test environment..."
119+
@bash e2e/setup-e2e.sh
126120

127121
# Run e2e tests
128122
.PHONY: e2e-run
129123
e2e-run:
130-
@echo "Running e2e tests (method: $(METHOD))..."
131-
@METHOD=$(METHOD) bash e2e/run-e2e.sh
124+
@echo "Running e2e tests..."
125+
@bash e2e/run-e2e.sh
132126

133127
# Convenience alias for running e2e tests
134128
.PHONY: e2e
@@ -137,7 +131,7 @@ e2e: e2e-run
137131
# Full e2e setup + run
138132
.PHONY: e2e-full
139133
e2e-full:
140-
@METHOD=$(METHOD) bash e2e/run-e2e.sh --full
134+
@bash e2e/run-e2e.sh --full
141135

142136
# Clean up e2e test environment
143137
.PHONY: e2e-clean
@@ -172,8 +166,8 @@ test-e2e: e2e-run
172166
# Compatibility E2E testing (cross-version tests, separate from main e2e)
173167
COMPAT_SCENARIO ?= old-controller
174168
COMPAT_TEST ?= old-controller
175-
COMPAT_CONTROLLER_TAG ?= v0.7.0
176-
COMPAT_CLIENT_VERSION ?= 0.7.1
169+
COMPAT_CONTROLLER_TAG ?= v0.8.1
170+
COMPAT_CLIENT_VERSION ?= 0.7.4
177171

178172
.PHONY: e2e-compat-setup
179173
e2e-compat-setup:

controller/Makefile

Lines changed: 4 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -30,9 +30,6 @@ endif
3030
# tools. (i.e. podman)
3131
CONTAINER_TOOL ?= podman
3232

33-
# Deployment method: operator (default) or helm
34-
METHOD ?= operator
35-
3633
# Cluster type: kind (default) or k3s
3734
CLUSTER_TYPE ?= kind
3835
export CLUSTER_TYPE
@@ -67,17 +64,8 @@ help: ## Display this help.
6764
.PHONY: manifests
6865
manifests: controller-gen ## Generate WebhookConfiguration, ClusterRole and CustomResourceDefinition objects.
6966
$(CONTROLLER_GEN) rbac:roleName=jumpstarter-manager-role crd webhook paths="./api/..." paths="./internal/..." \
70-
output:crd:artifacts:config=deploy/helm/jumpstarter/charts/jumpstarter-controller/templates/crds/ \
71-
output:rbac:artifacts:config=deploy/helm/jumpstarter/charts/jumpstarter-controller/templates/rbac/
72-
73-
# Add ArgoCD sync-wave annotation to RBAC role for proper deployment ordering (PR #207)
74-
@awk '/^ name: jumpstarter-manager-role$$/{print; print " annotations:"; print " argocd.argoproj.io/sync-wave: \"-1\""; next}1' \
75-
deploy/helm/jumpstarter/charts/jumpstarter-controller/templates/rbac/role.yaml > \
76-
deploy/helm/jumpstarter/charts/jumpstarter-controller/templates/rbac/role.yaml.tmp && \
77-
mv deploy/helm/jumpstarter/charts/jumpstarter-controller/templates/rbac/role.yaml.tmp \
78-
deploy/helm/jumpstarter/charts/jumpstarter-controller/templates/rbac/role.yaml
79-
80-
cp deploy/helm/jumpstarter/charts/jumpstarter-controller/templates/crds/* deploy/operator/config/crd/bases/
67+
output:crd:artifacts:config=deploy/operator/config/crd/bases/ \
68+
output:rbac:artifacts:config=deploy/operator/config/rbac/
8169

8270
# Regenerate operator install.yaml to include updated CRDs
8371
$(MAKE) -C deploy/operator build-installer
@@ -188,25 +176,13 @@ uninstall: manifests kustomize ## Uninstall CRDs from the K8s cluster specified
188176
$(KUSTOMIZE) build config/crd | $(KUBECTL) delete --ignore-not-found=$(ignore-not-found) -f -
189177

190178
.PHONY: deploy
191-
deploy: cluster grpcurl ## Deploy controller using METHOD (operator or helm). Set SKIP_BUILD=1 to skip image builds.
179+
deploy: cluster grpcurl ## Deploy controller using the operator. Set SKIP_BUILD=1 to skip image builds. Set CLUSTER_TYPE=k3s for k3s.
192180
ifeq ($(SKIP_BUILD),)
193181
$(MAKE) docker-build
194-
endif
195-
ifeq ($(METHOD),operator)
196-
ifeq ($(SKIP_BUILD),)
197182
$(MAKE) build-operator
198183
endif
199184
./hack/deploy_with_operator.sh
200-
else ifeq ($(METHOD),helm)
201-
./hack/deploy_with_helm.sh
202-
else
203-
$(error Unknown METHOD=$(METHOD). Use 'operator' or 'helm')
204-
endif
205185

206-
# Backward compatibility alias
207-
.PHONY: deploy-with-operator
208-
deploy-with-operator:
209-
$(MAKE) deploy METHOD=operator
210186

211187
.PHONY: deploy-operator
212188
deploy-operator: docker-build build-operator cluster grpcurl ## Deploy only the operator (without Jumpstarter CR)
@@ -221,17 +197,12 @@ operator-logs:
221197

222198
.PHONY: deploy-with-operator-parallel
223199
deploy-with-operator-parallel:
224-
make deploy METHOD=operator -j5 --output-sync=target
200+
make deploy -j5 --output-sync=target
225201

226202
.PHONY: deploy-exporters
227203
deploy-exporters:
228204
./hack/demoenv/prepare_exporters.sh
229205

230-
.PHONY: lint-helm
231-
lint-helm:
232-
helm lint deploy/helm/jumpstarter
233-
234-
235206
.PHONY: undeploy
236207
undeploy: kustomize ## Undeploy controller from the K8s cluster specified in ~/.kube/config. Call with ignore-not-found=true to ignore resource not found errors during deletion.
237208
$(KUSTOMIZE) build config/default | $(KUBECTL) delete --ignore-not-found=$(ignore-not-found) -f -

controller/deploy/helm/jumpstarter/.helmignore

Lines changed: 0 additions & 23 deletions
This file was deleted.

controller/deploy/helm/jumpstarter/Chart.yaml

Lines changed: 0 additions & 9 deletions
This file was deleted.

controller/deploy/helm/jumpstarter/charts/jumpstarter-controller/Chart.yaml

Lines changed: 0 additions & 7 deletions
This file was deleted.

0 commit comments

Comments
 (0)