Files
slp-modular-cms/aidlc-docs/features/slpsoftware-api/operations/plans/deployment-setup-plan.md
T
SluijsensandClaude Sonnet 5 cfb06b28b6
Continuous Integration / config (pull_request) Successful in 12s
Continuous Integration / changes (pull_request) Successful in 22s
Continuous Integration / backend-build (pull_request) Successful in 5m53s
Continuous Integration / vulnerability-scan (pull_request) Successful in 5m46s
Continuous Integration / frontend-prepare (pull_request) Successful in 1m54s
Continuous Integration / backend-test (pull_request) Successful in 7m37s
Continuous Integration / frontend-build (pull_request) Successful in 2m14s
Continuous Integration / frontend-test (pull_request) Successful in 4m59s
Continuous Integration / frontend-lint (pull_request) Successful in 2m2s
Continuous Integration / publish-production (pull_request) Skipped
Continuous Integration / deploy-production (pull_request) Skipped
Continuous Integration / publish-test (pull_request) Successful in 7m34s
Continuous Integration / deploy-test (pull_request) Skipped
Adds the Offerings module and retargets the CI/CD pipeline to Api.SlpSoftware
Implements Unit 2 "Offerings" (backend module, admin CRUD UI with
drag-and-drop reordering, public GET /api/v1/offerings endpoint) and
executes the feature's D-15 CI/CD cutover, switching the deploy
pipeline's build/publish target from SlpModularCms.Api to
SlpModularCms.Api.SlpSoftware.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FWyStNL2ZsjrS7FLd7xvvN
2026-08-02 16:23:09 +02:00

60 lines
4.5 KiB
Markdown

# Deployment Setup Plan — slpsoftware-api (D-15 Cutover)
## Investigation (Before Drafting Anything)
Read `.gitea/workflows/continuous_integration.yaml`, `.gitea/workflows/deploy-scp.yaml`, and
`gitea-deployment-workflow/operations/deployment/{deployment-instructions.md,rollback-plan.md}` in
full before touching anything, per D-7's "extend, don't duplicate" instruction.
- **`deploy-scp.yaml` needs zero changes.** It never hardcodes an entry-point `.dll` name anywhere —
it uploads whatever the publish artifact contains and restarts a `service_name` input (a plain
string). The cutover is invisible to this file.
- **`continuous_integration.yaml` hardcodes `SlpModularCms.Api` in exactly 6 lines**, all inside
`publish-test`/`publish-production` (3 each): the "Build admin frontend" step's
`mkdir -p ../src/SlpModularCms.Api/wwwroot/admin` + `cp -r dist/. ../src/SlpModularCms.Api/wwwroot/admin/`,
and the "Publish" step's `working-directory: src/SlpModularCms.Api`. Every other `SlpModularCms.Api`
reference in the file is `SlpModularCms.Api.Tests` (the `backend-test` job) — Unit 1's own pipeline
regression suite, deliberately scoped to `Api` only (NFR-CS-01), and correctly untouched here: `Api`
keeps existing as the local dev host (D-8), so its own regression tests still make sense to run.
- **`deployment-instructions.md` § 1.6**'s systemd unit `ExecStart` lines reference
`SlpModularCms.Api.dll` explicitly — this is **host configuration**, per the doc's own framing
("everything here is host configuration the workflow assumes already exists — `deploy-scp.yaml`
never creates any of it"). Updating the *documented* command is this feature's job; applying it to
the *actual, already-running* systemd units on the Pi is the user's own manual step, same as every
other host-side item in that document — this session has no access to the Pi.
- **No nginx changes** (D-6, already decided) — the proxy Pi's server blocks point at pi-main's port,
not at a specific executable; whichever `.dll` is running behind that port is invisible to nginx.
- **No database change** — same customer/instance, same domain, same `DB_NAME` (`SlpSoftware<Env>`);
the cutover only changes which project's compiled output the existing systemd units execute.
- **No Gitea Actions variables/secrets change** — `DEPLOY_PATH_*`, `SERVICE_NAME_*`,
`HEALTH_CHECK_URL_*`, and every other `vars.*`/`secrets.*` already describe the *target* (paths,
service names, domains), none of which change in a same-host, same-service-name cutover.
- **`rollback-plan.md` needs zero changes** — it operates entirely at the release-directory/symlink
level (`current``releases/<timestamp>`), never referencing a specific `.dll` name.
## Why No Questions This Time
Every decision this stage would normally ask about is already made and traced in `requirements.md`:
D-6 (no nginx change), D-7 (extend the existing pipeline, don't fork it), D-8 (`Api` stays as local
dev host, unaffected), D-15 (this is a cutover, not side-by-side). This stage is mechanical execution
of already-approved decisions, not new design — flagging that explicitly rather than manufacturing a
question with no real alternative to weigh.
## Checklist
- [x] Update `continuous_integration.yaml`: `SlpModularCms.Api``SlpModularCms.Api.SlpSoftware` in
the 6 identified lines (3 in `publish-test`, 3 in `publish-production`) — nowhere else
- [x] Update `gitea-deployment-workflow/operations/deployment/deployment-instructions.md` § 1.6:
systemd unit `ExecStart` lines → `SlpModularCms.Api.SlpSoftware.dll`, with an explicit note
that this is a **cutover the user must apply by hand** to the Pi's already-existing
`slpsoftware-test.service`/`slpsoftware-production.service` unit files (this session cannot
reach the Pi) — directly answering the user's earlier question about whether those two unit
files need editing
- [x] Create `aidlc-docs/features/slpsoftware-api/operations/deployment/deployment-instructions.md`
as a short feature-local pointer document: this feature does not own a separate deployment
pipeline, it extends `gitea-deployment-workflow`'s — record that relationship plus exactly what
changed and why, rather than duplicating the full instructions
- [x] Verify no other file in the repo hardcodes `SlpModularCms.Api` in a way that's actually about
*this pipeline's deploy target* (as opposed to `Api`'s own continued existence as local dev
host, or `Api.Tests`, both of which are correctly unaffected)