Skip to content

Scaffold react-platform — GitOps multi-tenant frontend#2

Open
MWest2020 wants to merge 2 commits into
developmentfrom
feat/bootstrap-react-platform
Open

Scaffold react-platform — GitOps multi-tenant frontend#2
MWest2020 wants to merge 2 commits into
developmentfrom
feat/bootstrap-react-platform

Conversation

@MWest2020

Copy link
Copy Markdown
Member

Summary

Mirror Nextcloud-base GitOps shape voor de WOO PWA. Twee canary-tenants draaien live op canary.openwoo.app en canary.accept.openwoo.app.

Architectuur: ApplicationSet + AppProject + App-of-Apps bootstrap, vendored woo-website chart, pod-label-scoped NetworkPolicies.

Conventies: filename `tenant--.yaml`, namespace `-` (paired met Nextcloud co-tenant), Application `--reactfront` (matcht oude toolchain naam).

Image strategy: `common.yaml` pin op `development-V1.0.260422`. Bestaande 44 toolchain-managed reactfront Apps blijven `:latest`. Per-tenant override-pattern voor migratie.

Live verificatie

  • canary.openwoo.app HTTP/2 200
  • canary.accept.openwoo.app live
  • DNS auto-create (Cloudflare via external-dns)
  • TLS via cert-manager HTTP-01
  • HPA actief (2/5)
  • NetworkPolicies raken Nextcloud co-tenant niet
  • smoke-checks: 9/10 resources clean per tenant

Test plan na merge naar development

  • Argo blijft naar feat/bootstrap-react-platform kijken (geen drift)
  • PR development -> main aanmaken
  • Na main-merge: aparte PR die 4 refs van feat -> HEAD swapt
  • Daarna: feat-branch verwijderen

🤖 Generated with Claude Code

@MWest2020
MWest2020 requested review from remko48 and rjzondervan May 4, 2026 07:46
Mirror Nextcloud-base GitOps shape voor de WOO PWA. Twee canary-tenants
draaien live op canary.openwoo.app en canary.accept.openwoo.app.

## Architectuur

- ApplicationSet `react-tenants` genereert één Argo Application per
  `tenant-<name>-<env>.yaml`. Tenants worden automatisch geadopteerd na
  PR-merge — geen kubectl, geen Cloudflare, geen TLS-handelingen.
- AppProject `react-platform` met sync windows (Mon-Vr 07:00-17:00 deny)
  voor platform-changes; tenant-additions altijd toegestaan.
- App-of-Apps bootstrap: één root Application beheert AppProject +
  ApplicationSet. Eenmalig `./react-platform/scripts/bootstrap.sh`,
  daarna alles GitOps.
- Vendored woo-website chart op upstream b1ac4e89 (refactor branch).
  Toegevoegd: pod-label-scoped NetworkPolicies (default-deny + ingress
  vanuit ingress-nginx + egress 443 met RFC1918 block).

## Conventies

- Filename: `tenant-<name>-<env>.yaml` — uniek per (org, env)
- Namespace: `<name>-<env>` — paired met Nextcloud co-tenant
- Application: `<name>-<env>-reactfront` — matcht oude toolchain naam
- Hostname: `<name>.openwoo.app` (prod) / `<name>.accept.openwoo.app` (accept)
- Upstream: `<name>.commonground.nu` / `<name>.accept.commonground.nu`
- TLS secret: `<name>-<env>-tls` (één cert per tenant)

## Image strategy

- common.yaml pin: `development-V1.0.260422`
  (digest sha256:fb21855fd19fea835109c35237483c513f4fe417ed93e9b8b80e5e3d58e70ceb)
- 44 bestaande toolchain-managed `*-reactfront` Applications draaien
  `:latest` en BLIJVEN `:latest` totdat ze expliciet gemigreerd worden.
- Migratie-pad: per-tenant override `pwa.image.tag: latest` tijdens
  cut-over, in aparte sync window verwijderen voor upgrade naar pin.
  Gedocumenteerd in tenant-template.yaml + docs/MIGRATION.md.

## CI (.github/workflows/validate.yaml)

Vijf jobs, alle blocking:
- yamllint (config in .yamllint.yaml; charts/ uitgesloten ivm helm templates)
- validate-values (vereiste velden + filename-conventie per tenant)
- smoke-checks (helm template + kubeconform op elke tenant)
- trivy config scan (charts/ + react-platform/, severity CRITICAL+HIGH)
- trivy fs secret scan (hele repo, blocking op elk gevonden secret)

## Live test

- canary.openwoo.app live (HTTP/2 200)
- canary.accept.openwoo.app live
- DNS auto-create via cluster-infra/external-dns + Cloudflare
- TLS via cert-manager HTTP-01
- HPA actief (2-5 replicas, 80% CPU target)
- Co-tenancy met Nextcloud werkt — pod-label scoped NetworkPolicies
  raken Nextcloud-policies niet

## Inhoud

- charts/woo-website/  — vendored Helm chart + UPSTREAM divergence-tracking
- react-platform/argo/applications/root.yaml  — App-of-Apps root
- react-platform/argo/projects/react-platform.yaml  — AppProject
- react-platform/argo/applicationsets/react-tenants.yaml  — generator
- react-platform/values/{common,env/{accept,prod},templates,tenants}/
- react-platform/platform/policies/README.md  — verwijst naar chart-templates
- react-platform/scripts/{bootstrap,validate-values,smoke-checks}.sh
- react-platform/docs/{ADDING-TENANT,ROLLOUTS,MIGRATION,BOOTSTRAP}.md (NL)
- .github/workflows/validate.yaml + .yamllint.yaml
- CLAUDE.md, README.md update, CHANGELOG entries

## Tijdelijk: feature-branch refs

ApplicationSet en root Application wijzen nu naar
`feat/bootstrap-react-platform` (4 plekken, alle gemarkeerd
`TODO(post-canary)`). Eén follow-up PR op main zet ze naar `HEAD`
zodra de canary stabiel is.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@MWest2020
MWest2020 force-pushed the feat/bootstrap-react-platform branch from c1fde76 to a0da604 Compare May 4, 2026 10:04
GitHub org ConductionNL shadowbanned; react-platform + canary reactfront apps
SYNC=Unknown. Repoint React-base repoURL github -> codeberg (public HTTPS) in
the react-platform AppProject, react-tenants ApplicationSet, and root app.
GitHub kept for rollback.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant