E2E CI pipeline mit ephemerer Infrastruktur
Some checks failed
continuous-integration/drone/push Build is failing
Some checks failed
continuous-integration/drone/push Build is failing
- drone.yml: deploy_latest Pipeline mit k3s test-backend, OpenTofu E2E-VMs, E2E-Test-Ausführung, Email-Notification und Cleanup - Alte tag/promote Pipelines auskommentiert - APK build/upload vorerst auskommentiert - E2E test runner script (scripts/e2e-test.sh) - tsconfig: expo/tsconfig.base Extension - CLAUDE.md an neue CI/CD-Struktur angepasst
This commit is contained in:
38
CLAUDE.md
38
CLAUDE.md
@@ -65,7 +65,9 @@ npm run test -w @calchat/server # Run Jest unit tests
|
||||
| | WebdriverIO + Appium | E2E tests (Android) |
|
||||
| | UiAutomator2 | Android UI automation driver |
|
||||
| Deployment | Docker | Server containerization (multi-stage build) |
|
||||
| | Drone CI | CI/CD pipelines (build, test, format check, deploy, APK build + Gitea release) |
|
||||
| | Drone CI | CI/CD pipelines (build, test, format check, deploy, E2E) |
|
||||
| | OpenTofu | Infrastructure as Code for ephemeral E2E VMs (Proxmox) |
|
||||
| | Kubernetes (k3s) | Test backend deployments for E2E |
|
||||
| Planned | iCalendar | Event export/import |
|
||||
|
||||
## Architecture
|
||||
@@ -75,6 +77,9 @@ npm run test -w @calchat/server # Run Jest unit tests
|
||||
apps/client - @calchat/client - Expo React Native app
|
||||
apps/server - @calchat/server - Express.js backend
|
||||
packages/shared - @calchat/shared - Shared TypeScript types and models
|
||||
scripts/ - CI/E2E helper scripts
|
||||
tofu/e2e/ - OpenTofu config for ephemeral E2E VMs (Proxmox)
|
||||
kubernetes/ - k3s manifest templates for test deployments
|
||||
```
|
||||
|
||||
### Frontend Architecture (apps/client)
|
||||
@@ -722,18 +727,33 @@ This uses the `preview` profile from `eas.json` which builds an APK with:
|
||||
|
||||
## CI/CD (Drone)
|
||||
|
||||
The project uses Drone CI (`.drone.yml`) with five pipelines:
|
||||
The project uses Drone CI (`.drone.yml`). Note: `server_build_and_test` and `check_for_formatting` pipelines are currently commented out.
|
||||
|
||||
**On push to main:**
|
||||
1. **`server_build_and_test`**: Builds the server (`npm ci` + `npm run build`) and runs Jest tests (`npm run test`)
|
||||
2. **`check_for_formatting`**: Checks Prettier formatting across all workspaces (`npm run check_format`)
|
||||
3. **`deploy_latest`**: Builds Docker image, pushes to Gitea Container Registry (`gitea.gilmour109.de/gilmour109/calchat-server:latest`), then SSHs into VPS (`10.0.0.1`) to pull and restart via `docker compose`. Builds APK via `eas-build` Docker image and creates a Gitea release (title "latest") with the APK. Depends on both pipelines above passing first.
|
||||
1. **`deploy_latest`**: Runs E2E testing pipeline with ephemeral infrastructure:
|
||||
- **`deploy_test_backend`**: Deploys server to k3s cluster (`192.168.178.201`) using `kubernetes/manifest.yml` with commit-based naming (`e2e<sha8>`)
|
||||
- **`create_e2e_vm`**: Provisions ephemeral Android emulator VM on Proxmox via OpenTofu (`tofu/e2e/`)
|
||||
- **`run_e2e_tests`**: SSHs into VM, runs `scripts/e2e-test.sh` (clones repo, starts emulator + Expo + Appium, executes E2E tests). VM IP derived from build number: `192.168.178.$((211 + BUILD_NUMBER % 44))`
|
||||
- **`notify_failure`**: Sends email notification on E2E failure
|
||||
- **`destroy_e2e_vm`**: Tears down VM via `tofu destroy` (runs on success and failure)
|
||||
- **`cleanup_k3s`**: Deletes test backend resources from k3s (runs on success and failure)
|
||||
- Docker image build/push and APK build/upload are currently commented out
|
||||
- Uses `e2e-tools` Docker image (`gitea.gilmour109.de/gilmour109/e2e-tools:latest`)
|
||||
|
||||
**On tag:**
|
||||
4. **`upload_tag`**: Builds Docker image tagged with the git tag (`${DRONE_TAG}`), pushes to registry, then deploys to k3s cluster (`192.168.178.201`) via SSH using `envsubst` with a Kubernetes manifest template. Builds APK and creates a Gitea release tagged with `${DRONE_TAG}`.
|
||||
**On tag** (`upload_tag`) and **on promote** (`upload_commit`): Currently commented out. Previously deployed to k3s and built APK releases.
|
||||
|
||||
**On promote:**
|
||||
5. **`upload_commit`**: Builds Docker image tagged with short commit SHA (first 8 chars), pushes to registry, then deploys to k3s cluster (`192.168.178.201`) via SSH using `envsubst` with a Kubernetes manifest template. Builds APK and creates a Gitea release tagged with the short commit SHA.
|
||||
### E2E CI Infrastructure
|
||||
|
||||
```
|
||||
scripts/
|
||||
└── e2e-test.sh # E2E test runner script (emulator + Expo + Appium)
|
||||
tofu/e2e/ # OpenTofu config for ephemeral Proxmox VMs
|
||||
kubernetes/manifest.yml # k3s manifest template for test backend (uses envsubst: $NAME, $TAG, $COMMIT)
|
||||
```
|
||||
|
||||
**`scripts/e2e-test.sh`**: Orchestrates E2E test execution inside an ephemeral VM. Supports two modes:
|
||||
- **CI mode**: Clones repo, installs deps, starts Android emulator, Expo, Appium, runs tests
|
||||
- **Local mode** (`--local`): Uses existing repo checkout, optional `--api-url` override
|
||||
|
||||
## Testing
|
||||
|
||||
|
||||
Reference in New Issue
Block a user