mirror of
https://github.com/jjbrunton/Sauci.git
synced 2026-10-31 18:19:43 +00:00
Compare commits
5
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
3a019e62d3 | ||
|
|
84712a950e | ||
|
|
d14869d745 | ||
|
|
f1573f4906 | ||
|
|
83df3b45f8 |
No files matched your search
@@ -39,3 +39,11 @@ terraform
|
|||||||
.claude
|
.claude
|
||||||
.codex
|
.codex
|
||||||
.ralph
|
.ralph
|
||||||
|
|
||||||
|
# The admin app builds from this same monorepo context (apps/admin/Dockerfile).
|
||||||
|
!apps/admin
|
||||||
|
!apps/admin/**
|
||||||
|
|
||||||
|
# Host build artefacts must never leak into any image context.
|
||||||
|
**/node_modules
|
||||||
|
**/dist
|
||||||
@@ -24,9 +24,14 @@ jobs:
|
|||||||
echo "master is frozen; target staging or main" >&2
|
echo "master is frozen; target staging or main" >&2
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
if [ "$BASE_BRANCH" = "main" ] && [ "$HEAD_BRANCH" != "staging" ]; then
|
if [ "$BASE_BRANCH" = "main" ]; then
|
||||||
echo "Only staging may be promoted to main" >&2
|
case "$HEAD_BRANCH" in
|
||||||
|
staging|hotfix/*|release/*) ;;
|
||||||
|
*)
|
||||||
|
echo "main takes staging promotions, or a hotfix/* or release/* branch for direct work" >&2
|
||||||
exit 1
|
exit 1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
fi
|
fi
|
||||||
if [ "$BASE_BRANCH" != "staging" ] && [ "$BASE_BRANCH" != "main" ]; then
|
if [ "$BASE_BRANCH" != "staging" ] && [ "$BASE_BRANCH" != "main" ]; then
|
||||||
echo "Feature pull requests target staging; promotions target main" >&2
|
echo "Feature pull requests target staging; promotions target main" >&2
|
||||||
|
|||||||
@@ -14,10 +14,14 @@ not deploy the retired Supabase data plane.
|
|||||||
| `master` | frozen legacy default | none | none |
|
| `master` | frozen legacy default | none | none |
|
||||||
|
|
||||||
Normal feature pull requests target `staging`. After CI and authenticated staging
|
Normal feature pull requests target `staging`. After CI and authenticated staging
|
||||||
acceptance pass, open a promotion pull request from `staging` to `main`. Do not
|
acceptance pass, open a promotion pull request from `staging` to `main`. Prefer
|
||||||
add production-only commits to `main`: production should run the exact commit
|
that route: production then runs the exact commit already exercised in staging.
|
||||||
already exercised in staging. Direct pushes to either deployment branch are for
|
|
||||||
explicit incident recovery only.
|
When production needs a change that cannot wait for the next promotion, open a
|
||||||
|
pull request into `main` from a `hotfix/*` or `release/*` branch. CI enforces
|
||||||
|
that naming so a direct-to-main change is always deliberate and visible. Land
|
||||||
|
the same commit on `staging` too, or the next promotion will revert it. Direct
|
||||||
|
pushes to either deployment branch remain blocked by branch protection.
|
||||||
|
|
||||||
Each Dokploy Compose application is connected to `jjbrunton/Sauci`, watches its
|
Each Dokploy Compose application is connected to `jjbrunton/Sauci`, watches its
|
||||||
single branch with push-triggered automatic deployment, and uses
|
single branch with push-triggered automatic deployment, and uses
|
||||||
|
|||||||
@@ -87,9 +87,12 @@ Before the first deployment, provide:
|
|||||||
5. A rollback and restore point before any migrated production data is imported.
|
5. A rollback and restore point before any migrated production data is imported.
|
||||||
6. A separately generated `MEDIA_SIGNING_SECRET` (at least 32 characters) and
|
6. A separately generated `MEDIA_SIGNING_SECRET` (at least 32 characters) and
|
||||||
the HTTPS API origin as `MEDIA_PUBLIC_BASE_URL`.
|
the HTTPS API origin as `MEDIA_PUBLIC_BASE_URL`.
|
||||||
7. The public web origin is fixed to `https://sauci.app` by
|
7. Browser origins are fixed by `CORS_ALLOWED_ORIGINS` in the Compose contract:
|
||||||
`CORS_ALLOWED_ORIGINS` in the Compose contract. Do not broaden it without a
|
`https://sauci.app` (public web) and `https://manage.sauci.app` (admin
|
||||||
reviewed browser client requirement.
|
console, which calls `/v1/admin/*` with a bearer token). Do not broaden the
|
||||||
|
list without a reviewed browser client requirement, and add any new admin
|
||||||
|
host here rather than as a Dokploy override, so the allowlist stays
|
||||||
|
reviewable in git.
|
||||||
8. A non-production hosted Auth project and disposable, onboarding-complete test
|
8. A non-production hosted Auth project and disposable, onboarding-complete test
|
||||||
identities mapped into the staging database for authenticated mobile acceptance.
|
identities mapped into the staging database for authenticated mobile acceptance.
|
||||||
|
|
||||||
|
|||||||
@@ -8,7 +8,8 @@ x-common-environment: &common-environment
|
|||||||
x-api-environment: &api-environment
|
x-api-environment: &api-environment
|
||||||
<<: *common-environment
|
<<: *common-environment
|
||||||
PORT: 3003
|
PORT: 3003
|
||||||
CORS_ALLOWED_ORIGINS: https://sauci.app
|
# https://manage.sauci.app is the admin console; it calls /v1/admin/* from the browser.
|
||||||
|
CORS_ALLOWED_ORIGINS: https://sauci.app,https://manage.sauci.app
|
||||||
DATABASE_POOL_MAX: ${API_DATABASE_POOL_MAX:-10}
|
DATABASE_POOL_MAX: ${API_DATABASE_POOL_MAX:-10}
|
||||||
DATABASE_POOL_IDLE_TIMEOUT_MS: ${DATABASE_POOL_IDLE_TIMEOUT_MS:-30000}
|
DATABASE_POOL_IDLE_TIMEOUT_MS: ${DATABASE_POOL_IDLE_TIMEOUT_MS:-30000}
|
||||||
DATABASE_POOL_CONNECTION_TIMEOUT_MS: ${DATABASE_POOL_CONNECTION_TIMEOUT_MS:-10000}
|
DATABASE_POOL_CONNECTION_TIMEOUT_MS: ${DATABASE_POOL_CONNECTION_TIMEOUT_MS:-10000}
|
||||||
|
|||||||
Reference in new issue
Block a user