@@ -128,12 +128,58 @@ This uses:
128128- ` docker-compose.yml ` + ` docker-compose.prod.yml `
129129- published images from GHCR (` pull_policy ` defaults to ` missing ` )
130130
131+ GHCR tag policy (from publish workflows):
132+
133+ - ` master ` branch -> ` ghcr.io/cenit-io/cenit:latest ` and ` ghcr.io/cenit-io/ui:latest `
134+ - ` develop ` branch -> ` ghcr.io/cenit-io/cenit:develop ` and ` ghcr.io/cenit-io/ui:develop `
135+ - release tags ` v*.*.* ` -> semver tags
136+ - every publish -> immutable ` sha-<gitsha> ` tag
137+
138+ Run prod-like using ` develop ` images:
139+
140+ ``` bash
141+ CENIT_SERVER_IMAGE=ghcr.io/cenit-io/cenit:develop \
142+ CENIT_UI_IMAGE=ghcr.io/cenit-io/ui:develop \
143+ scripts/compose-prod.sh up -d
144+ ```
145+
146+ Run prod-like pinned to immutable SHA tags:
147+
148+ ``` bash
149+ CENIT_SERVER_IMAGE=ghcr.io/cenit-io/cenit:sha-< server_sha> \
150+ CENIT_UI_IMAGE=ghcr.io/cenit-io/ui:sha-< ui_sha> \
151+ scripts/compose-prod.sh up -d
152+ ```
153+
131154For strict refresh from registry each run:
132155
133156``` bash
134157CENIT_PULL_POLICY=always scripts/compose-prod.sh up -d
135158```
136159
160+ ### 2.3) Repro mode with non-default host ports (redirect/debug)
161+
162+ Use this to reproduce host/port redirect issues (for example, verify UI does not fall back to ` localhost:3000 ` ).
163+
164+ ``` bash
165+ cd /path/to/cenit
166+ REPRO_SERVER_PORT=13000 REPRO_UI_PORT=13002 scripts/compose-repro.sh up -d
167+ REPRO_SERVER_PORT=13000 REPRO_UI_PORT=13002 scripts/smoke/repro_runtime_ports.sh
168+ ```
169+
170+ Default repro port mapping:
171+
172+ - Backend host port: ` 13000 -> container 8080 `
173+ - UI host port: ` 13002 -> container 80 `
174+
175+ Optional public URL overrides (if not using localhost):
176+
177+ ``` bash
178+ REPRO_SERVER_PUBLIC_URL=http://127.0.0.1:13000 \
179+ REPRO_UI_PUBLIC_URL=http://127.0.0.1:13002 \
180+ scripts/smoke/repro_runtime_ports.sh
181+ ```
182+
137183### 3) Verify services
138184
139185``` bash
@@ -183,11 +229,16 @@ Important environment knobs used by local scripts:
183229- ` CENIT_BASE_COMPOSE_FILE ` (helper override for base file)
184230- ` CENIT_DEV_COMPOSE_FILE ` (helper override for dev file)
185231- ` CENIT_PROD_COMPOSE_FILE ` (helper override for prod-like file)
232+ - ` CENIT_REPRO_COMPOSE_FILE ` (helper override for repro file)
186233- ` CENIT_E2E_AUTOSTART ` (` 1 ` to auto-start stack in E2E scripts)
187234- ` CENIT_E2E_RESET_STACK ` (` 1 ` to reset containers/volumes before E2E)
188235- ` CENIT_E2E_BUILD_STACK ` (` 1 ` to rebuild images before E2E, default ` 0 ` )
189236- ` CENIT_E2E_HEADED ` (` 1 ` for headed browser runs)
190237
238+ Image labels:
239+
240+ - GHCR images are published with OCI metadata labels (source/revision/created) via ` docker/metadata-action ` .
241+
191242## Testing and quality checks
192243
193244### Login E2E smoke
@@ -196,6 +247,26 @@ Important environment knobs used by local scripts:
196247scripts/e2e/cenit_ui_login.sh
197248```
198249
250+ ### Browser smoke: no localhost redirect during auth bootstrap
251+
252+ ``` bash
253+ # Default URL
254+ scripts/smoke/cenit_ui_no_localhost_redirect.sh
255+
256+ # Repro stack URL
257+ CENIT_UI_URL=http://localhost:13002 scripts/smoke/cenit_ui_no_localhost_redirect.sh
258+ ```
259+
260+ This smoke fails if any browser request hits ` http://localhost:3000 ` during initial auth flow.
261+
262+ ### Pre-apply repro gate (runtime + browser checks)
263+
264+ ``` bash
265+ REPRO_SERVER_PORT=13000 REPRO_UI_PORT=13002 scripts/smoke/repro_preapply_gate.sh
266+ ```
267+
268+ Use this as the required gate before Terraform apply or other deploy steps when validating the localhost redirect fix path.
269+
199270### Contact data type + records E2E
200271
201272``` bash
0 commit comments