E2E CI pipeline mit ephemerer Infrastruktur
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:
2026-02-27 19:35:06 +01:00
parent f25feb97da
commit 641ecebf5a
4 changed files with 488 additions and 95 deletions

View File

@@ -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