Skip to content

chore: remove pnpm-workspace.yaml configuration file and setup docker for entire project - #2

Merged
itsSauraj merged 1 commit into
sandboxfrom
sy/feat/dev-repo-setup
Jul 28, 2026
Merged

chore: remove pnpm-workspace.yaml configuration file and setup docker for entire project#2
itsSauraj merged 1 commit into
sandboxfrom
sy/feat/dev-repo-setup

Conversation

@itsSauraj

Copy link
Copy Markdown
Member

No description provided.

@itsSauraj itsSauraj self-assigned this Jul 28, 2026
Copilot AI review requested due to automatic review settings July 28, 2026 10:42

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot was unable to review this pull request because the user who requested the review has reached their quota limit.

@itsSauraj
itsSauraj changed the base branch from develop to sandbox July 28, 2026 10:42
@itsSauraj
itsSauraj merged commit d7e8587 into sandbox Jul 28, 2026
4 of 5 checks passed
Comment thread .github/workflows/ci.yml
Comment on lines +63 to +121
name: Docker prod smoke
runs-on: ubuntu-latest
# Fail fast rather than sitting until GitHub's 6h default if something hangs.
timeout-minutes: 25

steps:
- uses: actions/checkout@v4

# ../velobits-infra owns velobits-net and does not exist in CI. api-prod
# joins it as external, so it must exist or `up` errors out. No Keycloak is
# needed here: /health sits outside the /v1/ auth hook and jose's
# createRemoteJWKSet fetches lazily — only an authenticated request would
# try to reach it.
- name: Create the external network the compose file expects
run: docker network create velobits-net || true

- name: Start the prod stack
run: docker compose --profile prod up --build -d

- name: Wait for the router
run: |
for i in $(seq 1 60); do
if curl -sf -o /dev/null http://localhost:3200/healthz; then
echo "router up after ${i} attempts"; exit 0
fi
sleep 5
done
echo "router did not become ready" >&2
exit 1

- name: Smoke — the stack through one origin
run: |
set -euo pipefail
# Dashboard: nginx serves the built SPA at the webroot.
curl -sf http://localhost:3200/ | grep -q '<div id="root"'
# SPA history fallback — react-router-dom owns /tools client-side, so a
# deep link must return the app shell rather than a 404.
curl -sf -o /dev/null http://localhost:3200/tools
# Control plane, through the /api prefix strip.
curl -sf http://localhost:3200/api/health | grep -q '"status":"ok"'
# Migrations actually ran (api-prod gates on service_completed_successfully).
docker compose --profile prod exec -T postgres \
psql -U toggleflow -d toggleflow -c '\dt' | grep -q ' tools '
# Unauthenticated /v1/* is rejected — proves the auth hook is wired.
test "$(curl -s -o /dev/null -w '%{http_code}' http://localhost:3200/api/v1/me)" = 401
# The delivery plane is Cloudflare-only in prod, so /edge/* must 404
# rather than fall through to the SPA fallback and return HTML with a 200.
test "$(curl -s -o /dev/null -w '%{http_code}' http://localhost:3200/edge/health)" = 404
# Exactly one of each security header — the router hides the static
# image's duplicates.
test "$(curl -sI http://localhost:3200/ | grep -ci '^x-frame-options:')" = 1

- name: Dump logs
if: always()
run: docker compose --profile prod logs --no-color | tail -200

- name: Tear down
if: always()
run: docker compose --profile prod down -v
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants