mirror of
https://github.com/diegosouzapw/OmniRoute.git
synced 2026-07-26 09:52:11 +03:00
build(layer2+3): propagate .build/+dist/ to Docker/Electron/CI; codify light deploy; docs
Layer 3: Dockerfile COPY .next/standalone -> .build/next/standalone (+cache mount); electron stage -> .build/electron-standalone + extraResources; CI asserts dist/server.js; eslint ignores .build/**+dist/**. Layer 2: deploy-vps-* skills use build:release + rsync(dist) -> remote app/ + pm2 restart + BUILD_SHA verify (drop npm-i-g/legacy-peer-deps/manual-wreq). Docs (RELEASE_CHECKLIST/CONTRIBUTING/AGENTS/CHANGELOG) describe src/+.build/+dist/ layout. Verified: docker build exit 0 + health 200; electron stage OK; no stale build-output refs.
This commit is contained in:
@@ -147,11 +147,38 @@ If `electron/` changed:
|
||||
- [ ] `electron/package.json` version matches root `package.json`
|
||||
- [ ] Auto-update channel pointer updated if releasing to `stable`
|
||||
|
||||
### Build Layout
|
||||
|
||||
The repository uses three distinct output directories — never mix them up:
|
||||
|
||||
| Directory | Purpose | Tracked? |
|
||||
| ------------- | ------------------------------------------------------------- | -------- |
|
||||
| `src/` | Application source (TypeScript / TSX) | Yes |
|
||||
| `.build/` | Build intermediates — `next build` output (`distDir`) | No (gitignored) |
|
||||
| `dist/` | Shippable npm bundle — assembled by `assembleStandalone` | No (gitignored) |
|
||||
|
||||
> **Operator note:** the remote VPS image directory remains `/usr/lib/node_modules/omniroute/app/`.
|
||||
> Only the **in-repo** build output moved (`app/` → `dist/`). The deploy skills rsync
|
||||
> `dist/` contents into the remote `app/` dir — no VPS path changes required.
|
||||
|
||||
**Single-build flow:**
|
||||
|
||||
```
|
||||
npm run build:release
|
||||
└─ rm -rf .build dist (clean)
|
||||
└─ next build → .build/next/ (intermediates)
|
||||
└─ assembleStandalone (copies standalone + static + public + natives → dist/)
|
||||
└─ writes dist/BUILD_SHA (HEAD sentinel)
|
||||
```
|
||||
|
||||
Do NOT run `npm run build` followed by a separate `npm run build:cli` for deploy — use
|
||||
`npm run build:release` which does a clean rebuild + sentinel in one command.
|
||||
|
||||
### Artifact Validation
|
||||
|
||||
- [ ] `npm run build:cli` succeeds
|
||||
- [ ] `npm run build:release` succeeds and `dist/BUILD_SHA` == `git rev-parse --short HEAD`
|
||||
- [ ] `npm run check:pack-artifact` clean — no `app.__qa_backup`, `scripts/scratch`, `package-lock.json`, or other local residue
|
||||
- [ ] `npm run build` produces a working standalone Next.js bundle
|
||||
- [ ] `dist/server.js` exists after build
|
||||
|
||||
### Tagging & Release
|
||||
|
||||
@@ -169,10 +196,14 @@ If `electron/` changed:
|
||||
|
||||
### Deploy
|
||||
|
||||
Deploy skills use the light rsync flow — no `npm pack`, no `npm i -g`:
|
||||
|
||||
- [ ] Use deploy skill that matches target:
|
||||
- `/deploy-vps-local-cc` — local VPS (192.168.0.15)
|
||||
- `/deploy-vps-akamai-cc` — Akamai VPS (69.164.221.35)
|
||||
- `/deploy-vps-both-cc` — both
|
||||
- [ ] Before deploying, confirm `dist/BUILD_SHA` == `git rev-parse --short HEAD`
|
||||
- [ ] Build must run where `node_modules` is real (main checkout or `npm ci`'d worktree — NOT a symlinked worktree)
|
||||
- [ ] Smoke test deployed instance:
|
||||
- Open `/dashboard/health` → check version string matches release
|
||||
- Run a `/v1/chat/completions` request against a known provider
|
||||
|
||||
Reference in New Issue
Block a user