## Summary Closes #35. - **Flip deploy workflows** (mirror `dta_webapp`): push/merge to `master` → auto-deploy **beta**; **Deploy Prod** is `workflow_dispatch` only - **Tianji**: `REACT_APP_TIANJI_WEBSITE_ID` + `REACT_APP_DEPLOY_ENV` in `.env.production` / `.env.beta`; Tracker loads page views always on prod/beta - **Consent policy**: page views always live; custom events / identify gated via `analyticsConsent` + `AnalyticsConsentBanner` + `trackEvent`/`identifyUser` helpers (call sites remain #36) - Remove invalid Tianji `<script>` from `index.tsx` (Tracker component owns injection) - README documents beta auto / prod button + Tianji policy ## Ops note — beta Tianji website ID Prod ID unchanged: `cm7x7m52m03kbddswbswrt17y`. `.env.beta` has `REACT_APP_TIANJI_WEBSITE_ID=` empty until a **Hesychia Beta** website is created in Tianji (workspace `cm7w8087y020lddswyhamadj2`). Paste the new id into `.env.beta` before beta page views show under a distinct site. ## Test plan - [x] `npm run test:ci` (106 tests) - [ ] Create Hesychia Beta Tianji website; set `REACT_APP_TIANJI_WEBSITE_ID` in `.env.beta` - [ ] Merge to master → Deploy Beta runs; prod does **not** auto-deploy - [ ] Manual Run workflow on Deploy Prod still works - [ ] Beta build hits `beta.chatbackend` REST/WS; static root `/var/www/beta.chat.aimloperations/html` (8083) - [ ] Prod/beta: tracker.js loads without accepting consent; banner shows until Accept/Decline; `trackEvent` only fires after AcceptReviewed-on: #42
This commit was merged in pull request #42.
This commit is contained in:
@@ -92,10 +92,12 @@ to be visible in the browser bundle.
|
||||
| File | Used when | Backend (current) |
|
||||
|------|-----------|-------------------|
|
||||
| `.env.development` | `npm start` | `http://127.0.0.1:8001` |
|
||||
| `.env.production` | `npm run build` / `build:prod` | `https://chatbackend.aimloperations.com` |
|
||||
| `.env.beta` | `npm run build:beta` | `https://beta.chatbackend.aimloperations.com` |
|
||||
| `.env.production` | `npm run build` / `build:prod` | `https://chatbackend.aimloperations.com` + prod Tianji ID |
|
||||
| `.env.beta` | `npm run build:beta` | `https://beta.chatbackend.aimloperations.com` + beta Tianji ID |
|
||||
| `.env.mobile` | `npm run build:mobile` | prod by default (override for beta shell) |
|
||||
|
||||
Each committed env sets `REACT_APP_DEPLOY_ENV` (`production` / `beta`) and `REACT_APP_TIANJI_WEBSITE_ID`.
|
||||
|
||||
Required keys (already set in the committed env files):
|
||||
|
||||
```env
|
||||
@@ -184,20 +186,22 @@ npm run test:ci # one-shot (matches Gitea Unit Tests)
|
||||
|
||||
## CI / deployment
|
||||
|
||||
Gitea Actions workflows in `.gitea/workflows/`:
|
||||
Gitea Actions workflows in `.gitea/workflows/` (same pattern as `dta_webapp`):
|
||||
|
||||
| Workflow | Trigger | Behavior |
|
||||
|----------|---------|----------|
|
||||
| `unit-tests.yml` | push/PR to `master` | `npm ci` + `npm run test:ci` in `llm-fe/` |
|
||||
| `deploy-prod.yml` | after green **Unit Tests** on `master` **push** | `server-infra/scripts/deploy.sh --app chat_web_app --env prod --ref <sha>` |
|
||||
| `deploy-beta.yml` | `workflow_dispatch` | tests, then deploy `--env beta` |
|
||||
| `deploy-beta.yml` | **push** to `master` (after unit tests in-workflow) | `server-infra/scripts/deploy.sh --app chat_web_app --env beta --ref <sha>` |
|
||||
| `deploy-prod.yml` | **manual** `workflow_dispatch` only | tests, then deploy `--env prod` |
|
||||
|
||||
Push/merge to `master` auto-deploys **beta** only. Prod requires the Gitea **Run workflow** button on Deploy Prod.
|
||||
|
||||
Deploy flow (on each webserver listed in `host_apps`):
|
||||
|
||||
1. Git checkout at the pinned ref under `/opt/apps/src/chat_web_app_<env>`
|
||||
2. `npm ci` in `llm-fe/`
|
||||
3. `npm run build:<env>` → writes the static tree under `/var/www/...`
|
||||
4. **web-static** nginx serves that root on the host port (prod **8082**, beta **8083** if enabled)
|
||||
4. **web-static** nginx serves that root on the host port (prod **8082**, beta **8083**)
|
||||
|
||||
Manual deploy from the control node:
|
||||
|
||||
@@ -209,9 +213,21 @@ Manual deploy from the control node:
|
||||
NPM (not managed by Ansible) should balance public Hesychia domains to:
|
||||
|
||||
- `adama:8082` + `roslin:8082` + `ai-server-4080:8082` (prod)
|
||||
- beta hosts on **8083** / `beta.chat.aimloperations.com` (see server-infra)
|
||||
|
||||
See [server-infra IMPLEMENTATION.md](https://git.aimloperations.com/ai_ml_operations/server-infra).
|
||||
|
||||
### Tianji analytics
|
||||
|
||||
| Build | Env file | Website ID |
|
||||
|-------|----------|------------|
|
||||
| prod | `.env.production` | `REACT_APP_TIANJI_WEBSITE_ID` (prod site) |
|
||||
| beta | `.env.beta` | distinct beta site ID (set after creating website in Tianji) |
|
||||
|
||||
- Script: `https://tianji.aimloperations.com/tracker.js`
|
||||
- **Page views** always load on prod/beta (no consent gate)
|
||||
- **Custom events / identify** require analytics consent (`AnalyticsConsentBanner` + `trackEvent` / `identifyUser`)
|
||||
|
||||
## Related repos
|
||||
|
||||
- **Backend:** [chat_backend](https://git.aimloperations.com/ai_ml_operations/chat_backend) — Django API + WebSocket
|
||||
|
||||
Reference in New Issue
Block a user