Files
cms-plugins/README.md
T
Oleks 67b07634ae initial scaffold: emdash catalog, helm chart, woodpecker pipeline, ddev
- app/: Emdash scaffold (Astro 6, node target) with cmses/plugins/pages collections
- app/seed/seed.json: WordPress→Emdash parity for kotkanagrilli.fi (~30 entries)
- Dockerfile + docker/entrypoint.sh: multi-stage build, single PVC at /app/state
- deploy/helm/: chart mirroring emdash-kotkanagrilli (single-replica, sqlite, kotkan)
- deploy/fleet-overlay/: HelmRelease/source/image-automation templates for
  anton-helm-workloads (staging + production)
- .woodpecker/container.yaml: arm64 build, three OCI tags per push
  (immutable 0.1.<pipeline> + floating <branch> + <branch>-latest)
- .ddev/: local dev with nginx proxy to emdash on :4321
- README/DEPLOYMENT/ARCHITECTURE/CLAUDE: docs covering the three-repo
  pipeline (cms-plugins + anton-helm-workloads + Gitea OCI registry)
2026-05-20 11:19:00 +03:00

81 lines
3.2 KiB
Markdown

# cms-plugins
A browseable catalog of CMS plugins and how they map across platforms,
built on [Emdash](https://github.com/emdash-cms/emdash) (Astro 6 +
TypeScript + SQLite). The seed dataset is the WordPress → Emdash plugin
parity matrix from `kotkanagrilli.fi`; new entries can be added through
the Emdash admin.
| Repo | URL | Role |
|---|---|---|
| **cms-plugins** (this repo) | `git@git.oleks.space:oleks/cms-plugins.git` | App, Dockerfile, Helm chart, Woodpecker pipeline |
| **emdash.kotkanagrilli.fi** | `git@git.oleks.space:oleks/emdash-kotkanagrilli.git` | Reference Emdash deployment whose pattern this repo mirrors |
| **kotkanagrilli.fi** (WordPress) | `git@git.oleks.space:oleks/kotkanagrilli.fi.git` (+ `github.com:retif/kotkanagrilli.fi.git`) | Source of the seeded plugin entries (parity matrix) |
| **anton-helm-workloads** | `https://git.oleks.space/anton/helm-workloads` | Houses the FluxCD `HelmRelease`s for each environment (kotkanagrilli.fi subdomains) |
## Status
Phase 0 — Emdash scaffold + Helm chart + Woodpecker pipeline. No content
beyond the seeded WordPress plugin entries. Not yet running anywhere.
## What's in here
- `app/` — Emdash scaffold (Astro 6, node target). Three collections: `cmses`,
`plugins`, `pages`. Seed at `app/seed/seed.json`.
- `Dockerfile` + `docker/entrypoint.sh` — production image. Single PVC at
`/app/state` holds `data.db` and `uploads/`.
- `deploy/helm/` — the Helm chart that runs the pod in k3s. Same shape as
`~/projects/emdash.kotkanagrilli.fi/deploy/helm/`.
- `deploy/fleet-overlay/``HelmRelease` + `GitRepository` + image-automation
templates ready to drop into the `anton-helm-workloads` repo. Not consumed
from this repo directly.
- `.woodpecker/container.yaml` — build + push pipeline (develop / staging /
production branches).
- `.ddev/` — DDEV setup for local development (`https://cms-plugins.ddev.site/`).
- `DEPLOYMENT.md` — full pipeline from `git push` to a running pod, plus
the first-time setup checklist.
- `ARCHITECTURE.md` — chart / image / Flux contracts.
- `docs/` — additional notes.
## Quickstart (local)
```bash
cd ~/projects/cms-plugins
ddev start
# → https://cms-plugins.ddev.site/ (admin at /_emdash/admin)
```
Or without DDEV:
```bash
cd app
npm install
npm run bootstrap # emdash init: migrations + seed
npx emdash dev # http://localhost:4321/
```
Reset to a blank state:
```bash
rm -f app/data.db app/data.db-shm app/data.db-wal
rm -rf app/uploads
```
## Deploying
Push to the matching branch:
| Branch | Environment | URL |
|---|---|---|
| `develop` | dev (local DDEV only) | `https://cms-plugins.ddev.site/` |
| `staging` | staging | `https://cms-plugins-staging.kotkanagrilli.fi/` |
| `production` | production | `https://cms-plugins-production.kotkanagrilli.fi/` |
Woodpecker builds + pushes the image to `git.oleks.space/oleks/cms-plugins`,
FluxCD reconciles the chart from `deploy/helm/` against the matching
`HelmRelease` in `anton-helm-workloads/cms-plugins-{staging,production}/`.
See **[DEPLOYMENT.md](./DEPLOYMENT.md)** for the full flow, the relationship
between this repo and `anton-helm-workloads`, the first-time setup
checklist, and how rollbacks work.