chore: drop deprecated Woodpecker references

Woodpecker CI is gone from the runtime; this purges the stale
mentions in env/dev scripts, dashboards, homepages, CSS comments,
and READMEs. Renames the SSO admin env var WOODPECKER_ADMIN to
GITEA_ADMIN to match where the admin actually lives.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
kert
2026-05-06 16:56:34 -04:00
parent e81213c80c
commit 5aa043daea
13 changed files with 36 additions and 59 deletions

View File

@@ -8,10 +8,6 @@ GITEA_S3_ACCESS_KEY=changeme
GITEA_S3_SECRET_KEY=changeme
GITEA_DB_PASSWORD=changeme
GITEA_TOKEN=changeme
WOODPECKER_DB_PASSWORD=changeme
WOODPECKER_AGENT_SECRET=changeme
WOODPECKER_GITEA_CLIENT=changeme
WOODPECKER_GITEA_SECRET=changeme
# Nessie Data Lake
NESSIE_DB_PASSWORD=changeme
@@ -49,8 +45,8 @@ S3_WAREHOUSE=s3://lakehouse/
# ── Grafana ─────────────────────────────────────────
GF_ADMIN_PASSWORD=admin
# ── Woodpecker ──────────────────────────────────────
WOODPECKER_ADMIN=kert
# ── Gitea SSO ───────────────────────────────────────
GITEA_ADMIN=kert
# ── PRISMA / LLM ───────────────────────────────────
# Model-agnostic by design. Flip PRISMA_LLM_PROVIDER to "openai-compat"

View File

@@ -2,7 +2,7 @@
![coverage](assets/icons/coverage.svg)
Healthcare analytics platform on self-hosted infrastructure. Replaces dbt SQL models with narwhals DataFrame-agnostic expression functions, backed by DuckDB locally and Iceberg/Trino in the lakehouse. 28 services, 14 data pipelines, 12,634 tests at 99% coverage.
Healthcare analytics platform on self-hosted infrastructure. Replaces dbt SQL models with narwhals DataFrame-agnostic expression functions, backed by DuckDB locally and Iceberg/Trino in the lakehouse. 29 services, 14 data pipelines, 13,844 tests at 99% coverage.
## Quick start
@@ -37,7 +37,7 @@ pip install stack[all] # everything
pip install stack[aco,aws] # ACO analytics with AWS storage
```
14 modules available as optional extras: `aco`, `api`, `bcda`, `bib`, `bls`, `ccw`, `cli`, `cms`, `conf`, `opps`, `perf`, `pfs`, `rex`, `sem`. Cloud providers: `aws`, `azure`, `gcp`. Aggregates: `all`, `lake`.
17 modules available as optional extras: `aco`, `api`, `bcda`, `bib`, `bls`, `ccw`, `cli`, `cms`, `conf`, `mail`, `opps`, `perf`, `pfs`, `prisma`, `rec`, `rex`, `sem`. Cloud providers: `aws`, `azure`, `gcp`. Aggregates: `all`, `lake`.
## Services
@@ -128,19 +128,18 @@ Override context at runtime: `STACK_CONTEXT=lake` (or `aws`, `gcp`, `azure`).
### Backend switching
CI/CD workflows are auto-generated from `stack.toml` by `gen_config.py`. Three backends are supported:
CI/CD workflows are auto-generated from `stack.toml` by `gen_config.py`. Two backends are supported:
| Backend | Workflows directory | When to use |
|---------|---------------------|-------------|
| `gitea` | `.gitea/workflows/` | Self-hosted Gitea instance (default) |
| `github` | `.github/workflows/` | GitHub repos / GitHub Actions |
| `woodpecker` | `.woodpecker/` | Woodpecker CI server |
Switch backends by editing `stack.toml`:
```toml
[ci]
backend = "gitea" # change to "github" or "woodpecker"
backend = "gitea" # change to "github"
```
Then regenerate:
@@ -155,7 +154,7 @@ The generator reads image definitions from `stack.toml [images]`, dispatches to
### Workflows
7 workflows generated per backend:
8 workflows generated per backend:
| Workflow | Trigger | What it does |
|----------|---------|--------------|
@@ -169,11 +168,11 @@ The generator reads image definitions from `stack.toml [images]`, dispatches to
### Secret mapping
| Secret | Gitea | GitHub | Woodpecker |
|--------|-------|--------|------------|
| Registry auth | `REGISTRY_USER` + `REGISTRY_TOKEN` | `GITHUB_TOKEN` (built-in) | `registry_username` + `registry_password` |
| Gitea API | `GITEA_TOKEN` | N/A | `gitea_token` |
| Vuln reporting | `GITEA_TOKEN` | `GITHUB_TOKEN` | `gitea_token` |
| Secret | Gitea | GitHub |
|--------|-------|--------|
| Registry auth | `REGISTRY_USER` + `REGISTRY_TOKEN` | `GITHUB_TOKEN` (built-in) |
| Gitea API | `GITEA_TOKEN` | N/A |
| Vuln reporting | `GITEA_TOKEN` | `GITHUB_TOKEN` |
### Image tagging
@@ -194,7 +193,7 @@ Daily automated pipeline (`pkg-supply-chain.yml`) that:
## Credential management
All 20 service credentials derive from a single 256-bit root key via HKDF-SHA256. No passwords stored in `.env` — they regenerate deterministically from root key + commit SHA on each deploy.
All 16 service credentials derive from a single 256-bit root key via HKDF-SHA256. No passwords stored in `.env` — they regenerate deterministically from root key + commit SHA on each deploy.
```
ROOT_KEY + commit_sha -> HKDF-SHA256 -> all credentials -> .env + backends
@@ -418,7 +417,7 @@ The hook classifies staged files and runs only what is relevant:
| `src/sem/*.py` | `tests/sem/` + `test_ast_coverage.py` | Module tests + structural invariants |
| `src/aco/*.py` + `src/sem/*.py` | `tests/aco/` + `tests/sem/` + structural | Both module test dirs |
| `tests/bib/test_sync.py` | `tests/bib/` | Changed test dir |
| `pyproject.toml` or `conftest.py` | Full suite (12,634+ tests) | Infrastructure change |
| `pyproject.toml` or `conftest.py` | Full suite (13,844+ tests) | Infrastructure change |
| `notebooks/pfs_calcs.py` | `marimo check` + notebook execution | Notebook validation only |
| `README.md` only | Nothing | No testable changes |
@@ -470,7 +469,7 @@ Dynamic values pulled from: `compose.yml` (services), `pyproject.toml` (modules)
```
stack/
├── compose.yml Docker Compose (28 services)
├── compose.yml Docker Compose (29 services)
├── stack.toml Centralised configuration
├── pyproject.toml Python project (uv, optional deps per module)
├── src/
@@ -483,9 +482,12 @@ stack/
│ ├── cli/ CLI entry point (typer)
│ ├── cms/ CMS public data tables
│ ├── conf/ Config loader, storage abstraction, table base
│ ├── mail/
│ ├── opps/ Outpatient Prospective Payment System
│ ├── perf/ Pipeline telemetry (OpenTelemetry)
│ ├── pfs/ Physician Fee Schedule
│ ├── prisma/
│ ├── rec/
│ ├── rex/ REX fixed-width file processing
│ ├── sem/ Semantic coverage orchestration
│ └── zot/
@@ -497,7 +499,7 @@ stack/
│ ├── loki/ Log aggregation
│ └── ... coredns, nginx, trino, polaris, rustfs, act-runner, gitea
├── assets/ Branding, styles, generated artifacts
│ ├── css/ Per-service CSS (dashboard, gitea, marimo, woodpecker)
│ ├── css/ Per-service CSS (dashboard, grafana, marimo)
│ ├── icons/ Favicons, logos, coverage badge
│ └── fhirworx.py fhirworx chart palette and Altair theme
├── cloud/ Cloud provider deployment guides
@@ -510,7 +512,7 @@ stack/
│ ├── hooks/ Git hooks (tracked, core.hooksPath = dev/hooks)
│ ├── seeds/ Reference data (BCDA samples, CMS docs)
│ └── pipelines/ CI-agnostic pipeline specs
├── tests/ 12,634 tests at 99% coverage
├── tests/ 13,844 tests at 99% coverage
├── notebooks/ Marimo notebooks
├── docs/ Docusaurus site
├── data/ DuckDB, bib.sqlite, BCDA/CMS data, zotero (gitignored)

View File

@@ -121,19 +121,18 @@ Override context at runtime: `STACK_CONTEXT=lake` (or `aws`, `gcp`, `azure`).
### Backend switching
CI/CD workflows are auto-generated from `stack.toml` by `gen_config.py`. Three backends are supported:
CI/CD workflows are auto-generated from `stack.toml` by `gen_config.py`. Two backends are supported:
| Backend | Workflows directory | When to use |
|---------|---------------------|-------------|
| `gitea` | `.gitea/workflows/` | Self-hosted Gitea instance (default) |
| `github` | `.github/workflows/` | GitHub repos / GitHub Actions |
| `woodpecker` | `.woodpecker/` | Woodpecker CI server |
Switch backends by editing `stack.toml`:
```toml
[ci]
backend = "gitea" # change to "github" or "woodpecker"
backend = "gitea" # change to "github"
```
Then regenerate:
@@ -162,11 +161,11 @@ The generator reads image definitions from `stack.toml [images]`, dispatches to
### Secret mapping
| Secret | Gitea | GitHub | Woodpecker |
|--------|-------|--------|------------|
| Registry auth | `REGISTRY_USER` + `REGISTRY_TOKEN` | `GITHUB_TOKEN` (built-in) | `registry_username` + `registry_password` |
| Gitea API | `GITEA_TOKEN` | N/A | `gitea_token` |
| Vuln reporting | `GITEA_TOKEN` | `GITHUB_TOKEN` | `gitea_token` |
| Secret | Gitea | GitHub |
|--------|-------|--------|
| Registry auth | `REGISTRY_USER` + `REGISTRY_TOKEN` | `GITHUB_TOKEN` (built-in) |
| Gitea API | `GITEA_TOKEN` | N/A |
| Vuln reporting | `GITEA_TOKEN` | `GITHUB_TOKEN` |
### Image tagging
@@ -478,7 +477,7 @@ stack/
│ ├── loki/ Log aggregation
│ └── ... coredns, nginx, trino, polaris, rustfs, act-runner, gitea
├── assets/ Branding, styles, generated artifacts
│ ├── css/ Per-service CSS (dashboard, gitea, marimo, woodpecker)
│ ├── css/ Per-service CSS (dashboard, grafana, marimo)
│ ├── icons/ Favicons, logos, coverage badge
│ └── fhirworx.py fhirworx chart palette and Altair theme
├── cloud/ Cloud provider deployment guides

View File

@@ -4,7 +4,7 @@
Inspired by ProPublica, The Marshall Project, and the Federal Register
When changing a token here, propagate to the service-specific files:
inject.css, dashboard.css, gitea.css, woodpecker.css, marimo.css */
inject.css, dashboard.css, grafana.css, marimo.css */
@import url('https://fonts.googleapis.com/css2?family=Playfair+Display:wght@400;600;700&family=Source+Serif+4:ital,wght@0,300;0,400;0,600;1,400&family=JetBrains+Mono:wght@400;500;600&display=swap');

View File

@@ -2,7 +2,7 @@
Universal injectable CSS.
Injected via Traefik rewrite-body plugin into:
Grafana, Traefik Dashboard, RustFS/MinIO, Jaeger, Prometheus, Trino
Palette matches: Gitea, Woodpecker, Marimo, nginx dashboard themes */
Palette matches: Gitea, Marimo, nginx dashboard themes */
@import url('https://fonts.googleapis.com/css2?family=Playfair+Display:wght@400;600;700&family=Source+Serif+4:ital,wght@0,300;0,400;0,600;1,400&family=JetBrains+Mono:wght@400;500;600&display=swap');

View File

@@ -11,7 +11,7 @@ Docker Compose on a single node with Traefik ingress.
| Iceberg Catalog | Nessie / Polaris | `[lake.nessie]`, `[lake.polaris]` |
| Query Engine | Trino | `[lake.trino]` |
| Ingress | Traefik | infra/traefik/ |
| CI/CD | Gitea Actions + Woodpecker| `[ci]` in stack.toml |
| CI/CD | Gitea Actions | `[ci]` in stack.toml |
| Observability | Grafana + Prometheus + Loki + Jaeger | compose.yml |
| DNS | CoreDNS | infra/coredns/ |

View File

@@ -1,6 +1,6 @@
# CI-agnostic pipeline definition for package supply chain management.
# This is the abstract spec — use gen_config.py to emit concrete workflow
# files for Gitea Actions, Woodpecker, and GitHub Actions.
# files for Gitea Actions and GitHub Actions.
#
# Pipeline: inventory → mirror-sync → drift-check → vuln-scan → issue-create

View File

@@ -1,7 +1,7 @@
"""GitHub Actions workflow emitter.
Generates .github/workflows/*.yml from the same image definitions
used by the Woodpecker backend. All output is valid GitHub Actions YAML.
used by the Gitea Actions backend. All output is valid GitHub Actions YAML.
Usage (called by gen_config.py)::

View File

@@ -27,7 +27,7 @@ GRAFANA_ENV = STATE / "grafana.env"
DOMAIN = os.environ.get("DOMAIN", "fhirworx.io")
GITEA_API = os.environ.get("GITEA_API", "http://git:3000/api/v1")
ADMIN_USER = os.environ.get("WOODPECKER_ADMIN", "kert")
ADMIN_USER = os.environ.get("GITEA_ADMIN", "kert")
ADMIN_PASS = os.environ.get("GITEA_ADMIN_PASSWORD", "")

View File

@@ -74,7 +74,7 @@
"uid": "loki"
},
"editorMode": "code",
"expr": "{container_name=~\"gitea|woodpecker.*\"} |= ``",
"expr": "{container_name=~\"gitea.*\"} |= ``",
"queryType": "range",
"refId": "A"
}

View File

@@ -294,16 +294,6 @@
<div class="stripe"></div>
</a>
<a data-subdomain="ci" target="_blank" class="tile ci">
<span class="status-dot"></span>
<span class="icon">&#128296;</span>
<div class="tile-eyebrow">CI/CD</div>
<div class="tile-title">Woodpecker</div>
<p class="tile-desc">Simple yet powerful CI/CD engine</p>
<span class="tile-port"></span>
<div class="stripe"></div>
</a>
<a data-subdomain="notebooks" target="_blank" class="tile notebook">
<span class="tile-badge gpu">GPU</span>
<span class="status-dot"></span>

View File

@@ -61,16 +61,6 @@
<div class="stripe"></div>
</a>
<a data-subdomain="ci" target="_blank" class="tile ci">
<span class="status"></span>
<span class="icon">&#128296;</span>
<div class="tile-eyebrow">CI/CD</div>
<div class="tile-title">Woodpecker</div>
<p class="tile-desc">Simple yet powerful CI/CD engine</p>
<span class="tile-port"></span>
<div class="stripe"></div>
</a>
<a data-subdomain="notebooks" target="_blank" class="tile notebook">
<span class="badge gpu">GPU</span>
<span class="status"></span>

View File

@@ -1,7 +1,7 @@
"""Backend-agnostic CI failure reporter.
Files a Gitea issue when any CI workflow step fails, regardless of
whether the CI backend is Gitea Actions, GitHub Actions, or Woodpecker.
whether the CI backend is Gitea Actions or GitHub Actions.
Usage from workflow YAML::