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
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
4.5 KiB
4.5 KiB
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.yamlneeds zero changes. It never hardcodes an entry-point.dllname anywhere — it uploads whatever the publish artifact contains and restarts aservice_nameinput (a plain string). The cutover is invisible to this file.continuous_integration.yamlhardcodesSlpModularCms.Apiin exactly 6 lines, all insidepublish-test/publish-production(3 each): the "Build admin frontend" step'smkdir -p ../src/SlpModularCms.Api/wwwroot/admin+cp -r dist/. ../src/SlpModularCms.Api/wwwroot/admin/, and the "Publish" step'sworking-directory: src/SlpModularCms.Api. Every otherSlpModularCms.Apireference in the file isSlpModularCms.Api.Tests(thebackend-testjob) — Unit 1's own pipeline regression suite, deliberately scoped toApionly (NFR-CS-01), and correctly untouched here:Apikeeps 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 unitExecStartlines referenceSlpModularCms.Api.dllexplicitly — this is host configuration, per the doc's own framing ("everything here is host configuration the workflow assumes already exists —deploy-scp.yamlnever 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
.dllis 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 othervars.*/secrets.*already describe the target (paths, service names, domains), none of which change in a same-host, same-service-name cutover. rollback-plan.mdneeds zero changes — it operates entirely at the release-directory/symlink level (current→releases/<timestamp>), never referencing a specific.dllname.
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
- Update
continuous_integration.yaml:SlpModularCms.Api→SlpModularCms.Api.SlpSoftwarein the 6 identified lines (3 inpublish-test, 3 inpublish-production) — nowhere else - Update
gitea-deployment-workflow/operations/deployment/deployment-instructions.md§ 1.6: systemd unitExecStartlines →SlpModularCms.Api.SlpSoftware.dll, with an explicit note that this is a cutover the user must apply by hand to the Pi's already-existingslpsoftware-test.service/slpsoftware-production.serviceunit files (this session cannot reach the Pi) — directly answering the user's earlier question about whether those two unit files need editing - Create
aidlc-docs/features/slpsoftware-api/operations/deployment/deployment-instructions.mdas a short feature-local pointer document: this feature does not own a separate deployment pipeline, it extendsgitea-deployment-workflow's — record that relationship plus exactly what changed and why, rather than duplicating the full instructions - Verify no other file in the repo hardcodes
SlpModularCms.Apiin a way that's actually about this pipeline's deploy target (as opposed toApi's own continued existence as local dev host, orApi.Tests, both of which are correctly unaffected)