ci(drone): lint/typecheck/test/build + api & web image publish #21

Merged
admin-mrrm merged 1 commit from feat/drone-ci into main 2026-04-15 23:43:12 +02:00
Owner

Summary

  • .drone.yml with three pipelines: ci (pr + push), publish-api + publish-web (main push only, depend on ci)
  • CI steps: install → typecheck (all workspaces) + lint (api + shared-types, parallel) → test (api) → build (turbo filter api + web)
  • apps/api/Dockerfile — multi-stage using turbo prune --docker, pnpm deploy --prod --legacy for flat runtime, node:24-alpine runner
  • apps/web/Dockerfile — same pruner pattern, builds Vite with VITE_API_BASE_URL build-arg, serves static dist via nginx:1.27-alpine with SPA fallback in nginx.conf
  • .dockerignore at root to keep build context lean
  • Fix 4 pre-existing @typescript-eslint/consistent-type-imports errors in apps/api (autofixed)
  • Add --passWithNoTests to apps/api vitest script (no tests yet, don't fail CI)
  • Registry pushes use git.mrrm.de/admin-mrrm/mrrmlabapp/{api,web}, tagged latest + short sha; require registry_username + registry_password secrets in Drone

Test plan

  • pnpm --filter @mrrmlab/api lint — pass
  • pnpm --filter @mrrmlab/api typecheck — pass
  • pnpm --filter @mrrmlab/api test — pass (no test files)
  • pnpm --filter @mrrmlab/api build — dist/ produced
  • pnpm --filter @mrrmlab/shared-types build — dist/ produced
  • Drone picks up .drone.yml and ci pipeline turns green on this PR
  • After merge to main, publish-api + publish-web push images to Gitea registry

Follow-ups

  • Turbo remote cache (currently local-only in container)
  • apps/mobile EAS Build job (needs EXPO_TOKEN secret; deferred — Termux host can't run bundles through EAS anyway)
  • Vitest suites for api modules

Closes #13

## Summary - `.drone.yml` with three pipelines: `ci` (pr + push), `publish-api` + `publish-web` (main push only, depend on ci) - CI steps: install → typecheck (all workspaces) + lint (api + shared-types, parallel) → test (api) → build (turbo filter api + web) - `apps/api/Dockerfile` — multi-stage using `turbo prune --docker`, `pnpm deploy --prod --legacy` for flat runtime, node:24-alpine runner - `apps/web/Dockerfile` — same pruner pattern, builds Vite with `VITE_API_BASE_URL` build-arg, serves static dist via `nginx:1.27-alpine` with SPA fallback in `nginx.conf` - `.dockerignore` at root to keep build context lean - Fix 4 pre-existing `@typescript-eslint/consistent-type-imports` errors in `apps/api` (autofixed) - Add `--passWithNoTests` to `apps/api` vitest script (no tests yet, don't fail CI) - Registry pushes use `git.mrrm.de/admin-mrrm/mrrmlabapp/{api,web}`, tagged `latest` + short sha; require `registry_username` + `registry_password` secrets in Drone ## Test plan - [x] `pnpm --filter @mrrmlab/api lint` — pass - [x] `pnpm --filter @mrrmlab/api typecheck` — pass - [x] `pnpm --filter @mrrmlab/api test` — pass (no test files) - [x] `pnpm --filter @mrrmlab/api build` — dist/ produced - [x] `pnpm --filter @mrrmlab/shared-types build` — dist/ produced - [ ] Drone picks up `.drone.yml` and ci pipeline turns green on this PR - [ ] After merge to main, publish-api + publish-web push images to Gitea registry ## Follow-ups - Turbo remote cache (currently local-only in container) - apps/mobile EAS Build job (needs EXPO_TOKEN secret; deferred — Termux host can't run bundles through EAS anyway) - Vitest suites for api modules Closes #13
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
admin-mrrm/mrrmlabapp!21
No description provided.