Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
30 commits
Select commit Hold shift + click to select a range
220975a
fix(api): gracefully handle missing ApplicationInstall CRD
claude Nov 19, 2025
c987c9c
docs: add k8sClient refactoring analysis documents
claude Nov 19, 2025
5824755
feat(api): add NATS event-driven architecture foundation
claude Nov 19, 2025
296b459
feat(api): update ApplicationHandler to use NATS events
claude Nov 19, 2025
a01976d
feat(api): add NATS events for session and template handlers
claude Nov 19, 2025
8fbb3ee
feat(api): add NATS events for node management handlers
claude Nov 19, 2025
1bae665
feat(api): add NATS events to activity tracker for auto-hibernation
claude Nov 19, 2025
a2153ca
feat(api): add NATS events to connection tracker for auto-wake/hibernate
claude Nov 19, 2025
91784db
feat(controller): add NATS event subscriber for platform-agnostic events
claude Nov 19, 2025
36368c8
feat: add Docker platform controller and JetStream durability
claude Nov 19, 2025
9057cfb
feat(api): add NATS subscriber for status feedback from controllers
claude Nov 19, 2025
c21001c
feat(api): add database-based session queries for multi-platform support
claude Nov 19, 2025
bea86b1
feat(scripts): add Docker Compose development scripts for NATS archit…
claude Nov 19, 2025
3e38486
refactor(controller): rename to kubernetes-controller for multi-platf…
claude Nov 19, 2025
ac8debd
refactor: rename controller directory to k8s-controller
claude Nov 19, 2025
973021f
ci: update workflows for k8s-controller directory and kubernetes-cont…
claude Nov 19, 2025
32a2f6b
docs: update architecture for multi-platform NATS event-driven system
claude Nov 19, 2025
5647b2e
fix: add missing DeepCopy methods for ApplicationInstall types
claude Nov 19, 2025
86fcb60
fix: correct ResourceSpec and IconURL field references in handlers
claude Nov 19, 2025
df69655
fix: correct TemplateDeleteEvent field and remove unused import
claude Nov 19, 2025
5c2eb6e
fix: update docker-controller Dockerfile to generate go.sum
claude Nov 19, 2025
3f19c48
fix: update Docker SDK types for v24.0.7 compatibility
claude Nov 19, 2025
2df7352
fix: include userID in cache key for user-specific endpoints
claude Nov 19, 2025
064441d
fix: convert JSON byte arrays to strings for PostgreSQL JSONB columns
claude Nov 19, 2025
57129bb
fix: exclude security-sensitive headers from cache
claude Nov 19, 2025
55f85ad
fix: handle NULL catalog_template_id in GetApplication
claude Nov 19, 2025
c516f12
feat(auth): implement server-side session tracking in Redis
claude Nov 19, 2025
8ceff35
fix: disable browser caching for user-specific endpoints
claude Nov 19, 2025
9933ce2
fix: improve error messages in GetApplication for debugging
claude Nov 19, 2025
a2bd175
fix: scan JSONB configuration column into sql.NullString
claude Nov 19, 2025
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
38 changes: 19 additions & 19 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -32,14 +32,14 @@ jobs:
with:
node-version: ${{ env.NODE_VERSION }}

- name: Download Controller dependencies
working-directory: ./controller
- name: Download Kubernetes Controller dependencies
working-directory: ./k8s-controller
run: |
go mod tidy
go mod download

- name: Lint Controller
working-directory: ./controller
- name: Lint Kubernetes Controller
working-directory: ./k8s-controller
run: |
go fmt ./...
go vet ./...
Expand Down Expand Up @@ -67,7 +67,7 @@ jobs:
npm run lint

test-controller:
name: Test Controller
name: Test Kubernetes Controller
runs-on: ubuntu-latest
steps:
- name: Checkout code
Expand All @@ -84,28 +84,28 @@ jobs:
path: |
~/.cache/go-build
~/go/pkg/mod
key: ${{ runner.os }}-go-${{ hashFiles('controller/go.sum', 'controller/go.mod') }}
key: ${{ runner.os }}-go-${{ hashFiles('k8s-controller/go.sum', 'k8s-controller/go.mod') }}
restore-keys: |
${{ runner.os }}-go-

- name: Download dependencies
working-directory: ./controller
working-directory: ./k8s-controller
run: |
go mod download
go mod tidy

- name: Run tests
working-directory: ./controller
working-directory: ./k8s-controller
run: |
go test -v -race -coverprofile=coverage.out -covermode=atomic ./...
go tool cover -func=coverage.out

- name: Upload coverage to Codecov
uses: codecov/codecov-action@v4
with:
files: ./controller/coverage.out
flags: controller
name: controller-coverage
files: ./k8s-controller/coverage.out
flags: k8s-controller
name: k8s-controller-coverage

test-api:
name: Test API
Expand Down Expand Up @@ -231,17 +231,17 @@ jobs:
with:
node-version: ${{ env.NODE_VERSION }}

- name: Download Controller dependencies
working-directory: ./controller
- name: Download Kubernetes Controller dependencies
working-directory: ./k8s-controller
run: |
go mod tidy
go mod download

- name: Build Controller
working-directory: ./controller
- name: Build Kubernetes Controller
working-directory: ./k8s-controller
run: |
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -a -o bin/manager cmd/main.go
echo "Controller binary size: $(ls -lh bin/manager | awk '{print $5}')"
echo "Kubernetes Controller binary size: $(ls -lh bin/manager | awk '{print $5}')"

- name: Download API dependencies
working-directory: ./api
Expand All @@ -262,11 +262,11 @@ jobs:
npm run build
echo "UI build size: $(du -sh build | awk '{print $1}')"

- name: Upload Controller artifact
- name: Upload Kubernetes Controller artifact
uses: actions/upload-artifact@v4
with:
name: controller-binary
path: controller/bin/manager
name: k8s-controller-binary
path: k8s-controller/bin/manager

- name: Upload API artifact
uses: actions/upload-artifact@v4
Expand Down
38 changes: 19 additions & 19 deletions .github/workflows/container-images.yml
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ on:
- 'v*'
paths:
- 'api/**'
- 'controller/**'
- 'k8s-controller/**'
- 'ui/**'
- '.github/workflows/container-images.yml'
pull_request:
Expand All @@ -31,7 +31,7 @@ permissions:

jobs:
build-and-sign-controller:
name: Build & Sign Controller
name: Build & Sign Kubernetes Controller
runs-on: ubuntu-latest
steps:
- name: Checkout code
Expand All @@ -58,7 +58,7 @@ jobs:
id: meta
uses: docker/metadata-action@v5
with:
images: ${{ env.IMAGE_PREFIX }}-controller
images: ${{ env.IMAGE_PREFIX }}-kubernetes-controller
tags: |
type=ref,event=branch
type=ref,event=pr
Expand All @@ -75,12 +75,12 @@ jobs:
echo "COMMIT=${{ github.sha }}" >> $GITHUB_OUTPUT
echo "BUILD_DATE=$(date -u +"%Y-%m-%dT%H:%M:%SZ")" >> $GITHUB_OUTPUT

- name: Build and push Controller image
- name: Build and push Kubernetes Controller image
id: build
uses: docker/build-push-action@v5
with:
context: ./controller
file: ./controller/Dockerfile
context: ./k8s-controller
file: ./k8s-controller/Dockerfile
platforms: linux/amd64,linux/arm64
push: ${{ github.event_name != 'pull_request' }}
tags: ${{ steps.meta.outputs.tags }}
Expand Down Expand Up @@ -139,20 +139,20 @@ jobs:
fi
done

IMAGE_REF="${{ env.IMAGE_PREFIX }}-controller@${DIGEST}"
IMAGE_REF="${{ env.IMAGE_PREFIX }}-kubernetes-controller@${DIGEST}"
echo "Image reference for signing: $IMAGE_REF"
cosign sign --yes "$IMAGE_REF"

- name: Generate SBOM for Controller
- name: Generate SBOM for Kubernetes Controller
if: github.event_name != 'pull_request'
uses: anchore/sbom-action@v0
with:
path: ./controller
artifact-name: streamspace-controller-sbom.spdx.json
output-file: sbom-controller.spdx.json
path: ./k8s-controller
artifact-name: streamspace-kubernetes-controller-sbom.spdx.json
output-file: sbom-kubernetes-controller.spdx.json
format: spdx-json

- name: Attest Controller SBOM
- name: Attest Kubernetes Controller SBOM
if: github.event_name != 'pull_request'
env:
COSIGN_EXPERIMENTAL: "true"
Expand Down Expand Up @@ -185,18 +185,18 @@ jobs:
fi
done

IMAGE_REF="${{ env.IMAGE_PREFIX }}-controller@${DIGEST}"
IMAGE_REF="${{ env.IMAGE_PREFIX }}-kubernetes-controller@${DIGEST}"
echo "Using digest for SBOM attestation: $DIGEST"
cosign attest --yes --type spdxjson \
--predicate sbom-controller.spdx.json \
--predicate sbom-kubernetes-controller.spdx.json \
"$IMAGE_REF"

- name: Upload Controller SBOM
- name: Upload Kubernetes Controller SBOM
if: github.event_name != 'pull_request'
uses: actions/upload-artifact@v4
with:
name: sbom-controller
path: sbom-controller.spdx.json
name: sbom-kubernetes-controller
path: sbom-kubernetes-controller.spdx.json
retention-days: 90

build-and-sign-api:
Expand Down Expand Up @@ -544,7 +544,7 @@ jobs:
needs: [build-and-sign-controller, build-and-sign-api, build-and-sign-ui]
strategy:
matrix:
component: [controller, api, ui]
component: [kubernetes-controller, api, ui]
steps:
- name: Install Cosign
uses: sigstore/cosign-installer@v3
Expand Down Expand Up @@ -725,7 +725,7 @@ jobs:
echo "## 🐳 Container Images Built" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
echo "### Images" >> $GITHUB_STEP_SUMMARY
echo "- ✅ \`${{ env.IMAGE_PREFIX }}-controller:latest\`" >> $GITHUB_STEP_SUMMARY
echo "- ✅ \`${{ env.IMAGE_PREFIX }}-kubernetes-controller:latest\`" >> $GITHUB_STEP_SUMMARY
echo "- ✅ \`${{ env.IMAGE_PREFIX }}-api:latest\`" >> $GITHUB_STEP_SUMMARY
echo "- ✅ \`${{ env.IMAGE_PREFIX }}-ui:latest\`" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -87,7 +87,7 @@ jobs:

All images are available for both \`linux/amd64\` and \`linux/arm64\` platforms:

- Controller: \`ghcr.io/${{ github.repository_owner }}/streamspace-controller:${{ steps.version.outputs.VERSION }}\`
- Kubernetes Controller: \`ghcr.io/${{ github.repository_owner }}/streamspace-kubernetes-controller:${{ steps.version.outputs.VERSION }}\`
- API: \`ghcr.io/${{ github.repository_owner }}/streamspace-api:${{ steps.version.outputs.VERSION }}\`
- UI: \`ghcr.io/${{ github.repository_owner }}/streamspace-ui:${{ steps.version.outputs.VERSION }}\`

Expand Down Expand Up @@ -171,7 +171,7 @@ jobs:
needs: release
strategy:
matrix:
component: [controller, api, ui]
component: [kubernetes-controller, api, ui]
steps:
- name: Extract version
id: version
Expand Down
10 changes: 5 additions & 5 deletions .github/workflows/security-scan.yml
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ jobs:
runs-on: ubuntu-latest
strategy:
matrix:
component: [api, ui, controller]
component: [api, ui, kubernetes-controller]
steps:
- name: Checkout code
uses: actions/checkout@v4
Expand All @@ -35,8 +35,8 @@ jobs:
docker build -t streamspace-api:scan ./api
elif [ "${{ matrix.component }}" = "ui" ]; then
docker build -t streamspace-ui:scan ./ui
elif [ "${{ matrix.component }}" = "controller" ]; then
docker build -t streamspace-controller:scan ./controller
elif [ "${{ matrix.component }}" = "kubernetes-controller" ]; then
docker build -t streamspace-kubernetes-controller:scan ./k8s-controller
fi

- name: Run Trivy vulnerability scanner
Expand Down Expand Up @@ -77,7 +77,7 @@ jobs:
runs-on: ubuntu-latest
strategy:
matrix:
component: [api, controller]
component: [api, k8s-controller]
steps:
- name: Checkout code
uses: actions/checkout@v4
Expand Down Expand Up @@ -241,7 +241,7 @@ jobs:
runs-on: ubuntu-latest
strategy:
matrix:
component: [api, ui, controller]
component: [api, ui, k8s-controller]
steps:
- name: Checkout code
uses: actions/checkout@v4
Expand Down
4 changes: 2 additions & 2 deletions CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -363,7 +363,7 @@ streamspace/
├── PLUGIN_DEVELOPMENT.md # Plugin development guide
├── controller/ # Go controller using Kubebuilder
├── k8s-controller/ # Go Kubernetes controller using Kubebuilder
│ ├── cmd/ # Main entry point
│ ├── internal/ # Controller logic, reconcilers
│ ├── api/ # CRD type definitions
Expand Down Expand Up @@ -408,7 +408,7 @@ streamspace/

- **`scripts/`**: Automation scripts for template generation and utilities

- **`controller/`**: Go-based Kubernetes controller (Kubebuilder)
- **`k8s-controller/`**: Go-based Kubernetes controller (Kubebuilder)
- Manages Session lifecycle and hibernation
- Reconciles CRD resources with Kubernetes state

Expand Down
8 changes: 4 additions & 4 deletions DEPLOYMENT.md
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ kubectl create namespace streamspace
### 2. Deploy CRDs

```bash
kubectl apply -f controller/config/crd/bases/
kubectl apply -f k8s-controller/config/crd/bases/
```

Verify:
Expand Down Expand Up @@ -93,7 +93,7 @@ Edit the deployment manifests to use your registry:
```bash
# Update controller image
sed -i 's|your-registry/streamspace-controller:v0.2.0|ghcr.io/yourname/streamspace-controller:v0.2.0|' \
controller/config/manager/controller-deployment.yaml
k8s-controller/config/manager/controller-deployment.yaml

# Update API image
sed -i 's|your-registry/streamspace-api:v0.2.0|ghcr.io/yourname/streamspace-api:v0.2.0|' \
Expand Down Expand Up @@ -225,7 +225,7 @@ The controller watches Session and Template CRDs and manages their lifecycle.

**Configuration via Environment Variables:**

Edit `controller/config/manager/controller-deployment.yaml`:
Edit `k8s-controller/config/manager/controller-deployment.yaml`:

```yaml
env:
Expand Down Expand Up @@ -526,7 +526,7 @@ When updating CRDs:
kubectl get sessions -n streamspace -o yaml > sessions-backup.yaml

# Update CRDs
kubectl apply -f controller/config/crd/bases/
kubectl apply -f k8s-controller/config/crd/bases/

# Verify no resources were lost
kubectl get sessions -n streamspace
Expand Down
2 changes: 1 addition & 1 deletion MIGRATION_SUMMARY.md
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ streamspace/
│ ├── config/ # Deployment manifests
│ ├── templates/ # 22 application templates
│ └── monitoring/ # Grafana, Prometheus, Alerts
├── controller/ # Go workspace controller
├── k8s-controller/ # Go Kubernetes controller
├── api/ # API backend (to be built)
├── ui/ # React frontend (to be built)
├── chart/ # Helm chart
Expand Down
Loading
Loading