d9cc539481ff866488d08ddcd6cc395029452fd9
115
Commits
| Author | SHA1 | Message | Date | |
|---|---|---|---|---|
|
|
d9cc539481
|
Merge pull request 'Voeg leesbare slug toe aan Offering naast het GUID-ID' (#10) from feature/offering-slug into master
Continuous Integration / config (push) Successful in 11s
Continuous Integration / changes (push) Successful in 22s
Continuous Integration / backend-build (push) Successful in 4m34s
Continuous Integration / vulnerability-scan (push) Successful in 4m3s
Continuous Integration / frontend-prepare (push) Successful in 1m35s
Continuous Integration / backend-test (push) Successful in 6m14s
Continuous Integration / frontend-build (push) Successful in 2m10s
Continuous Integration / frontend-test (push) Successful in 4m52s
Continuous Integration / frontend-lint (push) Successful in 2m5s
Continuous Integration / publish-production (push) Skipped
Continuous Integration / deploy-production (push) Skipped
Continuous Integration / publish-test (push) Successful in 6m7s
Deploy (SCP) / deploy (push) Successful in 1m20s
Continuous Integration / deploy-test (push) Successful in 1m20s
Reviewed-on: #10 |
||
|
|
927957f04f |
Herstel potlood-icoon voor de aanpassen-knop bij slug
Continuous Integration / config (pull_request) Successful in 12s
Continuous Integration / changes (pull_request) Successful in 21s
Continuous Integration / backend-build (pull_request) Successful in 4m24s
Continuous Integration / vulnerability-scan (pull_request) Successful in 4m2s
Continuous Integration / frontend-prepare (pull_request) Successful in 1m38s
Continuous Integration / backend-test (pull_request) Successful in 6m24s
Continuous Integration / frontend-build (pull_request) Successful in 2m9s
Continuous Integration / frontend-test (pull_request) Successful in 4m57s
Continuous Integration / frontend-lint (pull_request) Successful in 2m0s
Continuous Integration / publish-production (pull_request) Skipped
Continuous Integration / deploy-production (pull_request) Skipped
Continuous Integration / publish-test (pull_request) Successful in 6m2s
Continuous Integration / deploy-test (pull_request) Skipped
Consistent met de confirm/cancel-knoppen ernaast (ghost icon buttons) in plaats van de tekst-linkknop. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> |
||
|
|
d09b3196d8 |
Toon live slug-preview inline naast titel in plaats van los blok
Op verzoek: "Slug: gegenereerde-slug [Aanpassen]" direct onder het titelveld, waarbij de preview meebeweegt met wat je typt in Titel (client-side mirror van de backend Slugifier) zolang de slug niet handmatig is overschreven. Zodra de admin 'm expliciet aanpast en niet leeg laat, stopt het meebewegen met de titel — consistent met hoe OfferingsService.UpdateAsync de slug al behandelde. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> |
||
|
|
1b974696bf |
Maak slug in CMS zichtbaar en inline aanpasbaar
De CMS-admin toonde het nieuwe Slug-veld nog niet — dat bestond alleen in de API-respons. Voegt een read-only slugweergave onder het titelveld toe met een potlood-icoon om 'm inline te bewerken. Backend: Create/UpdateOfferingRequest accepteren nu een optionele Slug-override. Zonder expliciete waarde blijft het bestaande gedrag (auto-genereren uit titel, regenereren bij titelwijziging). Met een expliciete waarde wordt die genormaliseerd en op uniekheid gecontroleerd; een botsing geeft 409 Conflict (RFC 9457 ProblemDetails, naar het patroon van MasterControlledAvailabilityException). Frontend: de slug wordt alleen meegestuurd als de admin 'm daadwerkelijk bewerkt heeft (dirtyFields.slug), zodat een ongemoeide slug bij een titelwijziging gewoon blijft auto-regenereren. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> |
||
|
|
cc09b46cfb |
Voeg leesbare slug toe aan Offering naast het GUID-ID
Continuous Integration / config (pull_request) Successful in 12s
Continuous Integration / changes (pull_request) Successful in 21s
Continuous Integration / frontend-prepare (pull_request) Skipped
Continuous Integration / frontend-build (pull_request) Skipped
Continuous Integration / frontend-test (pull_request) Skipped
Continuous Integration / frontend-lint (pull_request) Skipped
Continuous Integration / backend-build (pull_request) Successful in 4m31s
Continuous Integration / vulnerability-scan (pull_request) Successful in 3m57s
Continuous Integration / backend-test (pull_request) Successful in 6m11s
Continuous Integration / publish-production (pull_request) Skipped
Continuous Integration / deploy-production (pull_request) Skipped
Continuous Integration / publish-test (pull_request) Successful in 5m51s
Continuous Integration / deploy-test (pull_request) Skipped
Het Offering-ID is een GUID en niet geschikt om aan gebruikers te tonen. Voeg een op de titel gebaseerde, unieke slug toe die via de public en admin API wordt meegegeven, zodat de frontend iets leesbaars kan tonen in plaats van het ruwe ID. Het ID blijft ongewijzigd de echte identifier. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> |
||
|
|
1ba945fa45
|
Merge pull request 'Adds SlpModularCms.Api.SlpSoftware and extracts shared CmsHost composition' (#9) from feature/slpsoftware-api into master
Continuous Integration / config (push) Successful in 11s
Continuous Integration / changes (push) Successful in 20s
Continuous Integration / backend-build (push) Successful in 6m1s
Continuous Integration / vulnerability-scan (push) Successful in 5m18s
Continuous Integration / frontend-prepare (push) Successful in 1m52s
Continuous Integration / backend-test (push) Successful in 7m36s
Continuous Integration / frontend-build (push) Successful in 2m16s
Continuous Integration / frontend-test (push) Successful in 4m50s
Continuous Integration / frontend-lint (push) Successful in 2m9s
Continuous Integration / publish-production (push) Skipped
Continuous Integration / deploy-production (push) Skipped
Continuous Integration / publish-test (push) Successful in 6m53s
Deploy (SCP) / deploy (push) Successful in 1m26s
Continuous Integration / deploy-test (push) Successful in 1m26s
Reviewed-on: #9 |
||
|
|
c43528b7b2 |
Cancels superseded PR CI runs on a new push, never during a live deploy
Continuous Integration / config (pull_request) Successful in 11s
Continuous Integration / changes (pull_request) Successful in 22s
Continuous Integration / backend-build (pull_request) Successful in 5m33s
Continuous Integration / vulnerability-scan (pull_request) Successful in 4m50s
Continuous Integration / frontend-prepare (pull_request) Successful in 2m0s
Continuous Integration / backend-test (pull_request) Successful in 7m54s
Continuous Integration / frontend-build (pull_request) Successful in 2m9s
Continuous Integration / frontend-test (pull_request) Successful in 5m4s
Continuous Integration / frontend-lint (pull_request) Successful in 1m56s
Continuous Integration / publish-production (pull_request) Skipped
Continuous Integration / deploy-production (pull_request) Skipped
Continuous Integration / publish-test (pull_request) Successful in 7m14s
Continuous Integration / deploy-test (pull_request) Skipped
A new push to a PR previously left the prior CI attempt running independently instead of superseding it. Scoped strictly to pull_request events, since deploy-test/deploy-production only ever run on a push to master or a manual workflow_dispatch. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01FWyStNL2ZsjrS7FLd7xvvN |
||
|
|
81af6cd151 |
Completes Operations phase: Monitoring Setup and Production Readiness Validation
Confirms existing tag-based Sentry alerting and domain-based UptimeRobot/ Umami monitoring already cover the Offerings module and the Api.SlpSoftware cutover with no new configuration. Closes the SECURITY-13 audit-trail open item and records the final production-readiness traceability, completing the slpsoftware-api feature's AI-DLC lifecycle. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01FWyStNL2ZsjrS7FLd7xvvN |
||
|
|
cfb06b28b6 |
Adds the Offerings module and retargets the CI/CD pipeline to Api.SlpSoftware
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 |
||
|
|
b6e9c07c06 |
Replaces the backend-test MariaDB service with an explicit docker run
Continuous Integration / config (pull_request) Successful in 12s
Continuous Integration / changes (pull_request) Successful in 22s
Continuous Integration / backend-build (pull_request) Successful in 5m41s
Continuous Integration / vulnerability-scan (pull_request) Successful in 5m8s
Continuous Integration / frontend-prepare (pull_request) Successful in 1m52s
Continuous Integration / backend-test (pull_request) Successful in 7m35s
Continuous Integration / frontend-build (pull_request) Successful in 2m18s
Continuous Integration / frontend-test (pull_request) Successful in 4m43s
Continuous Integration / frontend-lint (pull_request) Successful in 2m15s
Continuous Integration / publish-production (pull_request) Skipped
Continuous Integration / deploy-production (pull_request) Skipped
Continuous Integration / publish-test (pull_request) Successful in 7m7s
Continuous Integration / deploy-test (pull_request) Skipped
The services: block was silently broken on this runner: job and service containers both use host networking here, so the ports: mapping was ignored and the mariadb:11 service ended up sharing the host's own port 3306 -- which something else on this runner already answers on (root auth was rejected with a password nothing but this job ever set). Replaced with an explicit `docker run` on host port 3307, bypassing that collision, plus a readiness loop. Also fixes the readiness command itself: mariadb:11 does not provide a `mysqladmin` alias, the correct binary is `mariadb-admin` (verified locally against the exact image before pushing this). Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01FWyStNL2ZsjrS7FLd7xvvN |
||
|
|
0feedf9c01 |
Adds a MariaDB service to backend-test for SlpModularCms.Api.Tests
Continuous Integration / config (pull_request) Successful in 12s
Continuous Integration / changes (pull_request) Successful in 22s
Continuous Integration / backend-build (pull_request) Successful in 5m52s
Continuous Integration / vulnerability-scan (pull_request) Successful in 5m6s
Continuous Integration / frontend-prepare (pull_request) Successful in 1m24s
Continuous Integration / backend-test (pull_request) Failing after 8m24s
Continuous Integration / frontend-build (pull_request) Successful in 2m14s
Continuous Integration / frontend-test (pull_request) Successful in 4m28s
Continuous Integration / frontend-lint (pull_request) Successful in 2m5s
Continuous Integration / publish-test (pull_request) Skipped
Continuous Integration / publish-production (pull_request) Skipped
Continuous Integration / deploy-test (pull_request) Skipped
Continuous Integration / deploy-production (pull_request) Skipped
The new pipeline regression tests boot the real Api host via WebApplicationFactory, which unconditionally runs the startup database migration -- unlike every other test project here, which mocks or uses EF Core InMemory. CI had no MariaDB service at all, so those tests failed on the connection itself. Adds a mariadb service container to the backend-test job plus a ConnectionStrings__DefaultConnection override for that step, which overrides the appsettings.Development.json placeholder via standard config layering without touching any committed appsettings file or affecting local test runs. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01FWyStNL2ZsjrS7FLd7xvvN |
||
|
|
fa389e42ee |
Adds SlpModularCms.Api.SlpSoftware and extracts shared CmsHost composition
Continuous Integration / config (pull_request) Successful in 11s
Continuous Integration / changes (pull_request) Successful in 21s
Continuous Integration / backend-build (pull_request) Successful in 6m10s
Continuous Integration / vulnerability-scan (pull_request) Successful in 4m59s
Continuous Integration / frontend-prepare (pull_request) Successful in 1m27s
Continuous Integration / backend-test (pull_request) Failing after 7m48s
Continuous Integration / frontend-build (pull_request) Successful in 2m5s
Continuous Integration / frontend-test (pull_request) Successful in 4m24s
Continuous Integration / frontend-lint (pull_request) Successful in 2m0s
Continuous Integration / publish-test (pull_request) Skipped
Continuous Integration / publish-production (pull_request) Skipped
Continuous Integration / deploy-test (pull_request) Skipped
Continuous Integration / deploy-production (pull_request) Skipped
Unit 1 of the slpsoftware-api feature (FR-1/FR-2/FR-3): a new Client project in the Clients solution folder, intended to eventually become the deployed API for test.slpsoftware.nl/slpsoftware.nl, hosting the same four modules as SlpModularCms.Api plus a future Offerings module. - Extracts SlpModularCms.Api/Program.cs's hosting-pipeline composition into SlpModularCms.Core.Hosting.CmsHost (ConfigureServices/ConfigurePipeline), shared by both Client projects so they cannot drift apart - Moves StaticContentExtensions.cs + WebsitePlaceholder.html from Api into Core, since CmsHost cannot live in Api but Core cannot depend on Api - Adds SlpModularCms.Api.SlpSoftware with its own isolated local dev database and dev ports (5286/7223, distinct from Api's and Api.Slave's) - Adds SlpModularCms.Api.Tests with WebApplicationFactory-based pipeline regression tests (security headers, health check, SPA fallback, rate limiting), scoped to Api per NFR Design - Adds a frontend dev:slpsoftware pnpm script mirroring dev:slave - Fixes GlobalExceptionHandler logging routine 401s (e.g. an expired/missing refresh token) as unhandled errors -- pre-existing, unrelated to this feature's own scope, found while testing the new instance Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01FWyStNL2ZsjrS7FLd7xvvN |
||
|
|
dcc82cdf62
|
Merge pull request 'Restructure frontend' (#8) from feature/frontend-feature-based-structure into master
Continuous Integration / config (push) Successful in 11s
Continuous Integration / changes (push) Successful in 21s
Continuous Integration / backend-build (push) Skipped
Continuous Integration / backend-test (push) Skipped
Continuous Integration / vulnerability-scan (push) Skipped
Continuous Integration / frontend-prepare (push) Successful in 1m42s
Continuous Integration / frontend-build (push) Successful in 2m8s
Continuous Integration / frontend-test (push) Successful in 4m37s
Continuous Integration / frontend-lint (push) Successful in 1m58s
Continuous Integration / publish-production (push) Skipped
Continuous Integration / deploy-production (push) Skipped
Continuous Integration / publish-test (push) Successful in 6m50s
Deploy (SCP) / deploy (push) Successful in 1m31s
Continuous Integration / deploy-test (push) Successful in 1m32s
Reviewed-on: #8 |
||
|
|
11ec08aac3 |
Restructures frontend to a feature-based folder layout
Continuous Integration / config (pull_request) Successful in 11s
Continuous Integration / changes (pull_request) Successful in 21s
Continuous Integration / backend-build (pull_request) Skipped
Continuous Integration / backend-test (pull_request) Skipped
Continuous Integration / vulnerability-scan (pull_request) Skipped
Continuous Integration / frontend-prepare (pull_request) Successful in 1m37s
Continuous Integration / frontend-build (pull_request) Successful in 2m12s
Continuous Integration / frontend-test (pull_request) Successful in 4m42s
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 6m51s
Continuous Integration / deploy-test (pull_request) Skipped
Groups auth, setup, invitation, profile, users, cms, availability and system code (services/hooks, components, schemas, mocks, pages) under src/features/<name> instead of splitting by technical layer (api/, components/, lib/schemas/, mocks/, pages/). Renames the old connection-oriented `api` layer to `services` per feature, and splits the monolithic api/types.ts into per-feature types.ts files (with ProblemDetails/ApiResult merged into lib/api-client.ts as shared infra). Layout-agnostic code (ui primitives, app shell, i18n, test utils, lib) stays at the top level. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> |
||
|
|
650cf09cfa
|
Merge pull request 'Replaces unsupported failure()/cancelled() with explicit needs.<job>.result checks in publish gates' (#7) from feature/gitea-workflow-optimizations into master
Continuous Integration / config (push) Successful in 12s
Continuous Integration / changes (push) Successful in 20s
Continuous Integration / backend-build (push) Successful in 4m55s
Continuous Integration / vulnerability-scan (push) Successful in 4m48s
Continuous Integration / frontend-prepare (push) Successful in 1m56s
Continuous Integration / backend-test (push) Successful in 5m37s
Continuous Integration / config (pull_request) Successful in 11s
Continuous Integration / changes (pull_request) Successful in 21s
Continuous Integration / backend-build (pull_request) Skipped
Continuous Integration / backend-test (pull_request) Skipped
Continuous Integration / vulnerability-scan (pull_request) Skipped
Continuous Integration / frontend-prepare (pull_request) Skipped
Continuous Integration / frontend-build (pull_request) Skipped
Continuous Integration / frontend-test (pull_request) Skipped
Continuous Integration / frontend-lint (pull_request) Skipped
Continuous Integration / publish-test (pull_request) Skipped
Continuous Integration / publish-production (pull_request) Skipped
Continuous Integration / deploy-test (pull_request) Skipped
Continuous Integration / deploy-production (pull_request) Skipped
Continuous Integration / frontend-build (push) Successful in 2m18s
Continuous Integration / frontend-test (push) Failing after 45s
Continuous Integration / frontend-lint (push) Successful in 1m56s
Continuous Integration / publish-test (push) Skipped
Continuous Integration / publish-production (push) Skipped
Continuous Integration / deploy-test (push) Skipped
Continuous Integration / deploy-production (push) Skipped
Reviewed-on: #7 |
||
|
|
de06578444 |
Logs workflow_dispatch input values and skips publish-test on a manual run without deploy_test checked
Continuous Integration / config (pull_request) Successful in 12s
Continuous Integration / changes (pull_request) Successful in 30s
Continuous Integration / backend-build (pull_request) Successful in 4m52s
Continuous Integration / vulnerability-scan (pull_request) Successful in 4m45s
Continuous Integration / frontend-prepare (pull_request) Successful in 1m28s
Continuous Integration / backend-test (pull_request) Successful in 5m52s
Continuous Integration / frontend-build (pull_request) Successful in 2m16s
Continuous Integration / frontend-test (pull_request) Successful in 4m23s
Continuous Integration / frontend-lint (pull_request) Successful in 1m58s
Continuous Integration / publish-production (pull_request) Skipped
Continuous Integration / deploy-production (pull_request) Skipped
Continuous Integration / publish-test (pull_request) Successful in 6m31s
Continuous Integration / deploy-test (pull_request) Skipped
Gitea's UI has no reliable way to see a past run's dispatch input values, so the config job now echoes them into the log. publish-test previously always built and uploaded the test artifact regardless of the deploy_test/deploy_production selection, wasting a build on manual runs that were never going to deploy to test; it now mirrors publish-production by skipping when workflow_dispatch didn't check deploy_test. Push and pull_request runs are unaffected. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01VhySVFARKAP89WqQ3Kff8M |
||
|
|
12b1df6ede |
Replaces unsupported failure()/cancelled() with explicit needs.<job>.result checks in publish gates
Continuous Integration / config (pull_request) Successful in 10s
Continuous Integration / changes (pull_request) Successful in 20s
Continuous Integration / backend-build (pull_request) Successful in 5m23s
Continuous Integration / vulnerability-scan (pull_request) Successful in 4m28s
Continuous Integration / frontend-prepare (pull_request) Successful in 1m47s
Continuous Integration / backend-test (pull_request) Successful in 5m56s
Continuous Integration / frontend-build (pull_request) Successful in 2m11s
Continuous Integration / frontend-test (pull_request) Successful in 4m43s
Continuous Integration / frontend-lint (pull_request) Successful in 1m54s
Continuous Integration / publish-production (pull_request) Skipped
Continuous Integration / deploy-production (pull_request) Skipped
Continuous Integration / publish-test (pull_request) Successful in 6m49s
Continuous Integration / deploy-test (pull_request) Skipped
Gitea Actions only implements always() from GitHub Actions' status-check functions; success(), failure(), and cancelled() aren't supported. publish-test/publish-production relied on !failure() && !cancelled() to let a run through when an unaffected gate job was skipped by the path filter while still blocking on an actual failure — rewritten to check needs.<job>.result explicitly instead, which Gitea does support. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01VhySVFARKAP89WqQ3Kff8M |
||
|
|
5a44d76ccc |
Merge pull request 'Shortens deploy label, adds manual test-deploy toggle, skips unaffected backend/frontend gates' (#4) from feature/gitea-workflow-optimizations into master
Continuous Integration / config (push) Successful in 10s
Continuous Integration / changes (push) Successful in 21s
Continuous Integration / backend-build (push) Successful in 4m54s
Continuous Integration / vulnerability-scan (push) Successful in 4m39s
Continuous Integration / frontend-prepare (push) Successful in 1m46s
Continuous Integration / backend-test (push) Successful in 5m47s
Continuous Integration / frontend-build (push) Successful in 2m13s
Continuous Integration / frontend-test (push) Successful in 4m32s
Continuous Integration / frontend-lint (push) Successful in 2m10s
Continuous Integration / publish-test (push) Canceled after 0s
Continuous Integration / publish-production (push) Canceled after 0s
Continuous Integration / deploy-test (push) Canceled after 0s
Continuous Integration / deploy-production (push) Canceled after 0s
Reviewed-on: #4 |
||
|
|
dfc27fd5a2 |
Shortens deploy_production label, adds a deploy_test toggle for manual runs, and skips backend/frontend gates when that side of the repo has no changes
Continuous Integration / config (pull_request) Successful in 10s
Continuous Integration / changes (pull_request) Successful in 21s
Continuous Integration / backend-build (pull_request) Successful in 5m17s
Continuous Integration / vulnerability-scan (pull_request) Successful in 4m30s
Continuous Integration / frontend-prepare (pull_request) Successful in 1m32s
Continuous Integration / backend-test (pull_request) Successful in 5m31s
Continuous Integration / frontend-build (pull_request) Successful in 2m10s
Continuous Integration / frontend-test (pull_request) Successful in 4m26s
Continuous Integration / frontend-lint (pull_request) Successful in 2m12s
Continuous Integration / publish-test (pull_request) Canceled after 0s
Continuous Integration / publish-production (pull_request) Canceled after 0s
Continuous Integration / deploy-test (pull_request) Canceled after 0s
Continuous Integration / deploy-production (pull_request) Canceled after 0s
Push-to-master keeps auto-deploying to test unchanged. A new deploy_test input (default false) lets a manual workflow_dispatch run opt into a test deploy instead of it firing by default. A new changes job (dorny/paths-filter) gates the backend and frontend build/test/lint jobs on whether their side of the repo actually changed, shortening runs that only touch one side; publish jobs still run whenever either side changed, and manual runs always run everything since there's no commit to diff against. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01VhySVFARKAP89WqQ3Kff8M |
||
|
|
66c0d768cf |
Merge pull request 'Fixes mobile sidebar collapsing to content height instead of filling the overlay' (#3) from fix/mobile-sidebar-height into master
Continuous Integration / config (push) Successful in 10s
Continuous Integration / backend-build (push) Successful in 4m56s
Continuous Integration / vulnerability-scan (push) Successful in 4m23s
Continuous Integration / frontend-prepare (push) Successful in 1m51s
Continuous Integration / backend-test (push) Successful in 5m23s
Continuous Integration / frontend-build (push) Successful in 2m20s
Continuous Integration / frontend-test (push) Successful in 4m24s
Continuous Integration / frontend-lint (push) Successful in 2m6s
Continuous Integration / publish-production (push) Skipped
Continuous Integration / deploy-production (push) Skipped
Continuous Integration / publish-test (push) Successful in 6m45s
Deploy (SCP) / deploy (push) Successful in 1m22s
Continuous Integration / deploy-test (push) Successful in 1m24s
Reviewed-on: #3 |
||
|
|
bc4de27b97 |
Fixes mobile sidebar collapsing to content height instead of filling the overlay
Continuous Integration / config (pull_request) Successful in 9s
Continuous Integration / backend-build (pull_request) Successful in 5m9s
Continuous Integration / vulnerability-scan (pull_request) Successful in 4m28s
Continuous Integration / frontend-prepare (pull_request) Successful in 1m53s
Continuous Integration / backend-test (pull_request) Successful in 5m29s
Continuous Integration / frontend-build (pull_request) Successful in 2m16s
Continuous Integration / frontend-test (pull_request) Successful in 4m42s
Continuous Integration / frontend-lint (pull_request) Successful in 1m54s
Continuous Integration / publish-production (pull_request) Skipped
Continuous Integration / deploy-production (pull_request) Skipped
Continuous Integration / publish-test (pull_request) Successful in 6m37s
Continuous Integration / deploy-test (pull_request) Skipped
The aside had no explicit height, so it stretched to full height on desktop only because its flex-row parent applies align-items:stretch. In the mobile SidebarOverlay it sits in a plain (non-flex) h-full div, so it shrank to fit its nav items, pushing settings/profile up under the nav instead of staying pinned to the bottom. |
||
|
|
5dfe92b61c |
Merge pull request 'Adds Monitoring Setup docs and deploy-scp troubleshooting/debug fixes' (#2) from feature/gitea-deployment-workflow into master
Continuous Integration / config (push) Successful in 10s
Continuous Integration / backend-build (push) Successful in 5m6s
Continuous Integration / vulnerability-scan (push) Successful in 4m40s
Continuous Integration / frontend-prepare (push) Successful in 1m51s
Continuous Integration / backend-test (push) Successful in 5m33s
Continuous Integration / frontend-build (push) Successful in 2m8s
Continuous Integration / frontend-test (push) Successful in 4m26s
Continuous Integration / frontend-lint (push) Successful in 1m58s
Continuous Integration / publish-production (push) Skipped
Continuous Integration / deploy-production (push) Skipped
Continuous Integration / publish-test (push) Successful in 6m27s
Deploy (SCP) / deploy (push) Successful in 1m24s
Continuous Integration / deploy-test (push) Successful in 1m25s
Reviewed-on: #2 |
||
|
|
084b941204 |
Pins actions/setup-node to v3, skips DB backup when no database exists yet
Continuous Integration / config (pull_request) Successful in 10s
Continuous Integration / backend-build (pull_request) Successful in 4m57s
Continuous Integration / vulnerability-scan (pull_request) Successful in 4m47s
Continuous Integration / frontend-prepare (pull_request) Successful in 1m51s
Continuous Integration / backend-test (pull_request) Successful in 5m17s
Continuous Integration / frontend-build (pull_request) Successful in 2m15s
Continuous Integration / frontend-test (pull_request) Successful in 4m24s
Continuous Integration / frontend-lint (pull_request) Successful in 2m10s
Continuous Integration / publish-production (pull_request) Skipped
Continuous Integration / deploy-production (pull_request) Skipped
Continuous Integration / publish-test (pull_request) Successful in 6m19s
Continuous Integration / deploy-test (pull_request) Skipped
actions/setup-node@v4's Post step attempts a cache-save that fails hard on this self-hosted Gitea Actions runner (no GHES cache API support), marking frontend-prepare as failed and blocking its dependents even though the actual install/build work succeeds. v3's older cache implementation doesn't hit this. Also cleans up two stale comments left over from the /admin MSBuild-target removal. Also updates the documented backup script to skip cleanly (exit 0) when the target database doesn't exist yet (MariaDB error 1049) rather than failing the whole deploy - expected on a brand-new environment's first production run, before migrations have ever had a chance to create it. Still fails hard on any other error, so a real backup failure against an existing database still blocks the deploy as intended. |
||
|
|
f10d7b983e |
Reverts deploy-test to push/workflow_dispatch only, drops the pull_request trigger
Continuous Integration / config (pull_request) Successful in 9s
Continuous Integration / backend-build (pull_request) Successful in 5m22s
Continuous Integration / vulnerability-scan (pull_request) Successful in 4m44s
Continuous Integration / frontend-prepare (pull_request) Successful in 1m39s
Continuous Integration / backend-test (pull_request) Successful in 5m11s
Continuous Integration / frontend-build (pull_request) Successful in 2m10s
Continuous Integration / frontend-test (pull_request) Successful in 4m27s
Continuous Integration / frontend-lint (pull_request) Successful in 1m56s
Continuous Integration / publish-production (pull_request) Skipped
Continuous Integration / deploy-production (pull_request) Skipped
Continuous Integration / publish-test (pull_request) Successful in 6m24s
Continuous Integration / deploy-test (pull_request) Skipped
The pull_request trigger was a temporary convenience to test the deploy pipeline itself against the real test environment on every PR push. Now that the pipeline is verified working end to end, going back to only deploying on a master push or manual dispatch avoids concurrent PRs silently overwriting the single shared test environment. |
||
|
|
22bc5c5cde |
Doubles frontend test findBy* timeouts to reduce CI flakiness
Continuous Integration / config (pull_request) Successful in 10s
Continuous Integration / backend-build (pull_request) Successful in 4m48s
Continuous Integration / vulnerability-scan (pull_request) Successful in 4m33s
Continuous Integration / frontend-prepare (pull_request) Successful in 1m47s
Continuous Integration / backend-test (pull_request) Successful in 5m17s
Continuous Integration / frontend-build (pull_request) Successful in 2m13s
Continuous Integration / frontend-test (pull_request) Successful in 4m22s
Continuous Integration / frontend-lint (pull_request) Successful in 2m0s
Continuous Integration / publish-production (pull_request) Skipped
Continuous Integration / deploy-production (pull_request) Skipped
Continuous Integration / publish-test (pull_request) Successful in 6m18s
Deploy (SCP) / deploy (pull_request) Successful in 1m28s
Continuous Integration / deploy-test (pull_request) Successful in 1m29s
5000ms was occasionally too tight on the self-hosted Actions runner for lazy-loaded routes gated behind an async setup-status check (observed on SettingsPage.test.tsx, passed reliably locally). Bumps to 10000ms across all nine test files using that pattern, and raises vite.config.ts's global testTimeout from 15000 to 20000 to keep headroom above it. |
||
|
|
7c1d2aa520 |
Fixes /admin 404 by building the admin SPA before dotnet publish, not via an MSBuild target
Continuous Integration / config (pull_request) Successful in 10s
Continuous Integration / backend-build (pull_request) Successful in 4m52s
Continuous Integration / vulnerability-scan (pull_request) Successful in 4m50s
Continuous Integration / frontend-prepare (pull_request) Successful in 1m44s
Continuous Integration / backend-test (pull_request) Successful in 5m37s
Continuous Integration / frontend-build (pull_request) Successful in 2m11s
Continuous Integration / frontend-test (pull_request) Successful in 4m33s
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 6m14s
Deploy (SCP) / deploy (pull_request) Successful in 1m20s
Continuous Integration / deploy-test (pull_request) Successful in 1m21s
The BuildAndCopyAdminFrontend MSBuild target (BeforeTargets=Publish) never actually worked: files it created after project evaluation were silently absent from the publish output, and forcing them in via an explicit Content item collided with the SDK's own static-web-asset resolution. Verified locally with a clean obj/bin and a fresh node_modules - every deploy so far genuinely shipped without wwwroot/admin. Moves the frontend build + copy into its own CI step ahead of dotnet publish, so the SDK's ordinary wwwroot handling picks it up with no custom MSBuild involved. Also fixes unreadable <code> badges on the website placeholder page (no explicit text color, relying on inherited body color pairing unreliably with the badge background). |
||
|
|
9b44a5e85e |
Adds a shared/modules symlink mechanism for optional plugin modules
Continuous Integration / config (pull_request) Successful in 9s
Continuous Integration / backend-build (pull_request) Successful in 5m4s
Continuous Integration / vulnerability-scan (pull_request) Successful in 4m23s
Continuous Integration / frontend-prepare (pull_request) Successful in 1m40s
Continuous Integration / backend-test (pull_request) Successful in 5m46s
Continuous Integration / frontend-build (pull_request) Successful in 2m18s
Continuous Integration / frontend-test (pull_request) Successful in 4m33s
Continuous Integration / frontend-lint (pull_request) Successful in 2m0s
Continuous Integration / publish-production (pull_request) Skipped
Continuous Integration / deploy-production (pull_request) Skipped
Continuous Integration / publish-test (pull_request) Successful in 6m11s
Deploy (SCP) / deploy (pull_request) Successful in 1m25s
Continuous Integration / deploy-test (pull_request) Successful in 1m25s
ModuleOrchestrator already discovers SlpModularCms.Modules.*.dll from disk at startup via reflection, so this needed no code change — only a persistent location (mirroring shared/wwwroot-web) that survives release swaps, and a deploy-scp.yaml step to symlink its contents into each new release before restart. |
||
|
|
d51285d9dd |
Removes the secret-diagnosis debug step, fixes wwwroot symlink parent dir
Continuous Integration / config (pull_request) Successful in 10s
Continuous Integration / backend-build (pull_request) Successful in 4m34s
Continuous Integration / vulnerability-scan (pull_request) Successful in 4m39s
Continuous Integration / frontend-prepare (pull_request) Successful in 1m45s
Continuous Integration / backend-test (pull_request) Successful in 5m15s
Continuous Integration / frontend-build (pull_request) Successful in 2m14s
Continuous Integration / frontend-test (pull_request) Successful in 4m27s
Continuous Integration / frontend-lint (pull_request) Successful in 1m57s
Continuous Integration / publish-production (pull_request) Skipped
Continuous Integration / deploy-production (pull_request) Skipped
Continuous Integration / publish-test (pull_request) Successful in 5m51s
Deploy (SCP) / deploy (pull_request) Failing after 11m46s
Continuous Integration / deploy-test (pull_request) Failing after 11m47s
The PI_MAIN_USERNAME/PASSWORD debug step served its purpose (found the
shell-metacharacter password bug fixed in
|
||
|
|
51488d6d94 |
Routes PI_MAIN_* secrets through env vars instead of inline interpolation
Continuous Integration / config (pull_request) Successful in 9s
Continuous Integration / backend-build (pull_request) Successful in 4m57s
Continuous Integration / vulnerability-scan (pull_request) Successful in 4m21s
Continuous Integration / frontend-prepare (pull_request) Successful in 1m28s
Continuous Integration / backend-test (pull_request) Successful in 5m3s
Continuous Integration / frontend-build (pull_request) Successful in 2m10s
Continuous Integration / frontend-test (pull_request) Successful in 4m42s
Continuous Integration / frontend-lint (pull_request) Successful in 1m56s
Continuous Integration / publish-production (pull_request) Skipped
Continuous Integration / deploy-production (pull_request) Skipped
Continuous Integration / publish-test (pull_request) Successful in 6m30s
Deploy (SCP) / deploy (pull_request) Failing after 57s
Continuous Integration / deploy-test (pull_request) Failing after 58s
Every ssh/scp step interpolated ${{ secrets.PI_MAIN_PASSWORD }} and
${{ secrets.PI_MAIN_USERNAME }} directly into the run: shell text.
Gitea/GitHub Actions substitutes that as literal text before bash ever
sees it, so any shell-metacharacter in the password ($, `, ", \) gets
re-interpreted by bash instead of passed through - silently changing
what sshpass actually receives. This plausibly explains a persistent
"Permission denied" even after the username and password length were
both confirmed correct via the debug step (which used env: and so
never hit this).
All five steps now receive SSH_USER/SSH_PASS/SSH_PORT/SSH_HOST via
env:, which bash treats as opaque values with no re-parsing.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015FffvxxJp5wG34Ru48GBig
|
||
|
|
3776c0f27b |
Adds a trimmed-length check to the PI_MAIN_PASSWORD debug step
Continuous Integration / config (pull_request) Successful in 9s
Continuous Integration / backend-build (pull_request) Successful in 4m39s
Continuous Integration / vulnerability-scan (pull_request) Successful in 4m15s
Continuous Integration / frontend-prepare (pull_request) Successful in 1m47s
Continuous Integration / backend-test (pull_request) Successful in 5m15s
Continuous Integration / frontend-build (pull_request) Successful in 2m11s
Continuous Integration / frontend-test (pull_request) Successful in 4m40s
Continuous Integration / frontend-lint (pull_request) Successful in 1m58s
Continuous Integration / publish-production (pull_request) Skipped
Continuous Integration / deploy-production (pull_request) Skipped
Continuous Integration / publish-test (pull_request) Successful in 6m25s
Deploy (SCP) / deploy (pull_request) Failing after 56s
Continuous Integration / deploy-test (pull_request) Failing after 57s
Username is now confirmed correct (14 chars, exact match). This checks whether the password secret carries leading/trailing whitespace or a stray newline picked up when it was pasted into Gitea - the length differs from the trimmed length if so, without ever logging the password's actual characters. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_015FffvxxJp5wG34Ru48GBig |
||
|
|
c3070b4bfb |
Merge branch 'master' into feature/gitea-deployment-workflow
Continuous Integration / config (pull_request) Successful in 10s
Continuous Integration / backend-build (pull_request) Successful in 4m19s
Continuous Integration / vulnerability-scan (pull_request) Successful in 4m0s
Continuous Integration / frontend-prepare (pull_request) Successful in 1m39s
Continuous Integration / backend-test (pull_request) Successful in 5m1s
Continuous Integration / frontend-build (pull_request) Successful in 2m9s
Continuous Integration / frontend-test (pull_request) Successful in 4m41s
Continuous Integration / frontend-lint (pull_request) Successful in 2m0s
Continuous Integration / publish-production (pull_request) Skipped
Continuous Integration / deploy-production (pull_request) Skipped
Continuous Integration / publish-test (pull_request) Successful in 6m16s
Deploy (SCP) / deploy (pull_request) Failing after 56s
Continuous Integration / deploy-test (pull_request) Failing after 57s
|
||
|
|
92547efd47 |
Allows deploy-test to run on pull_request events too
Continuous Integration / config (pull_request) Canceled after 0s
Continuous Integration / backend-build (pull_request) Canceled after 0s
Continuous Integration / backend-test (pull_request) Canceled after 0s
Continuous Integration / vulnerability-scan (pull_request) Canceled after 0s
Continuous Integration / frontend-prepare (pull_request) Canceled after 0s
Continuous Integration / frontend-build (pull_request) Canceled after 0s
Continuous Integration / frontend-test (pull_request) Canceled after 0s
Continuous Integration / frontend-lint (pull_request) Canceled after 0s
Continuous Integration / publish-test (pull_request) Canceled after 0s
Continuous Integration / publish-production (pull_request) Canceled after 0s
Continuous Integration / deploy-test (pull_request) Canceled after 0s
Continuous Integration / deploy-production (pull_request) Canceled after 0s
So PR pushes deploy straight to the test environment, without a manual workflow_dispatch each time. Only one test environment exists, so this means concurrent PRs would overwrite each other's deploy - acceptable with a single active PR, worth revisiting once that's no longer true. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_015FffvxxJp5wG34Ru48GBig |
||
|
|
56f4f6fe0f |
Adds Monitoring Setup docs and deploy-scp troubleshooting/debug fixes
Continuous Integration / config (pull_request) Successful in 9s
Continuous Integration / backend-build (pull_request) Successful in 4m27s
Continuous Integration / vulnerability-scan (pull_request) Successful in 4m10s
Continuous Integration / backend-test (pull_request) Canceled after 0s
Continuous Integration / frontend-build (pull_request) Canceled after 0s
Continuous Integration / frontend-test (pull_request) Canceled after 0s
Continuous Integration / frontend-lint (pull_request) Canceled after 0s
Continuous Integration / publish-test (pull_request) Canceled after 0s
Continuous Integration / publish-production (pull_request) Canceled after 0s
Continuous Integration / deploy-test (pull_request) Canceled after 0s
Continuous Integration / deploy-production (pull_request) Canceled after 0s
Continuous Integration / frontend-prepare (pull_request) Canceled after 50s
Monitoring Setup: operations/plans/monitoring-setup-plan.md and
operations/monitoring/monitoring-instructions.md, covering Sentry alert
rules on the security_event tag, UptimeRobot's 6 liveness monitors, and
the two new Umami website entries for the admin SPA.
deployment-instructions.md gains a missing Observability__Environment
host var (without it, both environments would tag Sentry events as
"Production"), the nginx client_max_body_size fix for the 413 seen on
publish-test/production artifact uploads, and two troubleshooting notes
on Gitea Actions re-run behaviour: re-running deploy-test/production
alone loses the run's uploaded artifact, and re-running all jobs on an
existing (rather than a brand new) run can replay stale secrets.
deploy-scp.yaml: step names no longer show literal unresolved
${{ inputs.* }} text (Gitea doesn't interpolate that context in step
names), and a temporary debug step logs PI_MAIN_USERNAME/PASSWORD
length plus a username equality check to diagnose a persistent
Permission denied during the SSH steps, without ever logging the
secret values themselves.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015FffvxxJp5wG34Ru48GBig
|
||
|
|
2d0372ad78 |
Merge pull request 'Feature/gitea deployment workflow' (#1) from feature/gitea-deployment-workflow into master
Continuous Integration / config (push) Successful in 9s
Continuous Integration / backend-build (push) Successful in 4m20s
Continuous Integration / vulnerability-scan (push) Successful in 4m24s
Continuous Integration / frontend-prepare (push) Successful in 1m34s
Continuous Integration / backend-test (push) Successful in 5m0s
Continuous Integration / frontend-build (push) Successful in 2m7s
Continuous Integration / frontend-test (push) Successful in 4m28s
Continuous Integration / frontend-lint (push) Successful in 1m53s
Continuous Integration / publish-production (push) Skipped
Continuous Integration / deploy-production (push) Skipped
Continuous Integration / publish-test (push) Successful in 5m50s
Deploy (SCP) / deploy (push) Failing after 54s
Continuous Integration / deploy-test (push) Failing after 55s
Reviewed-on: #1 |
||
|
|
d81168b7a9 |
Aligns mock API_BASE with the real ApiClient's origin fallback
Continuous Integration / config (pull_request) Successful in 9s
Continuous Integration / backend-build (pull_request) Successful in 4m2s
Continuous Integration / backend-test (pull_request) Successful in 4m35s
Continuous Integration / vulnerability-scan (pull_request) Successful in 3m41s
Continuous Integration / frontend-prepare (pull_request) Successful in 1m35s
Continuous Integration / frontend-build (pull_request) Successful in 2m7s
Continuous Integration / frontend-test (pull_request) Successful in 4m22s
Continuous Integration / frontend-lint (pull_request) Successful in 1m51s
Continuous Integration / publish-production (pull_request) Skipped
Continuous Integration / deploy-production (pull_request) Skipped
Continuous Integration / publish-test (pull_request) Successful in 5m17s
Continuous Integration / deploy-test (pull_request) Skipped
The mocks re-derived VITE_API_BASE_URL with their own fallback instead of reusing getAppConfig().apiBaseUrl, so the two silently diverged whenever the env var was unset (as in CI, where no local .env.local is present) — every MSW-intercepted request then had no matching handler. |
||
|
|
ff0fc66b10 |
Adds the missing packages field to pnpm-workspace.yaml
Continuous Integration / config (pull_request) Successful in 10s
Continuous Integration / backend-build (pull_request) Successful in 4m1s
Continuous Integration / vulnerability-scan (pull_request) Successful in 3m38s
Continuous Integration / frontend-prepare (pull_request) Successful in 1m22s
Continuous Integration / backend-test (pull_request) Successful in 4m39s
Continuous Integration / frontend-build (pull_request) Successful in 2m6s
Continuous Integration / frontend-test (pull_request) Failing after 6m22s
Continuous Integration / frontend-lint (pull_request) Successful in 1m58s
Continuous Integration / publish-test (pull_request) Skipped
Continuous Integration / publish-production (pull_request) Skipped
Continuous Integration / deploy-test (pull_request) Skipped
Continuous Integration / deploy-production (pull_request) Skipped
Pre-existing file from the original frontend setup - had allowBuilds and confirmModulesPurge but no packages list, which pnpm 9+ requires the moment a workspace file exists at all, even for a single package. Surfaced by the first real pipeline run (frontend-prepare failed with "packages field missing or empty"). |
||
|
|
2cd8c4aa88 |
Renames the backup script to match the instance, not the software
Continuous Integration / config (pull_request) Successful in 10s
Continuous Integration / backend-build (pull_request) Successful in 4m6s
Continuous Integration / vulnerability-scan (pull_request) Successful in 3m39s
Continuous Integration / frontend-prepare (pull_request) Failing after 58s
Continuous Integration / frontend-build (pull_request) Skipped
Continuous Integration / frontend-test (pull_request) Skipped
Continuous Integration / frontend-lint (pull_request) Skipped
Continuous Integration / backend-test (pull_request) Successful in 4m26s
Continuous Integration / publish-test (pull_request) Skipped
Continuous Integration / publish-production (pull_request) Skipped
Continuous Integration / deploy-test (pull_request) Skipped
Continuous Integration / deploy-production (pull_request) Skipped
backup-slpmodularcms-db.sh named the CMS; this backs up slpsoftware specifically, same as every other instance-scoped path already does. Hardcoded in deploy-scp.yaml itself, so this is the actual pipeline code, not just docs describing it. |
||
|
|
459c347c12 |
Labels every command with who runs it and where
Four contexts got tangled together across the doc as it grew: pi-main as root, pi-main as gitea-workflow, the separate proxy Pi, and Gitea's own web UI. Added a legend up front and tagged every single command block so it's no longer something the reader has to infer. |
||
|
|
c438ec8b1d |
Warns against copying the reference project's nginx Sentry tunnel
The backend already serves /sentry-tunnel itself with its own rate limit, payload cap, and DSN-derived destination - exactly what that nginx block exists to avoid needing. Proxying the same path at nginx intercepts it first and silently drops all three protections. |
||
|
|
50c1a5106d |
Fixes deployment docs to reverse-proxy on a separate Pi, not pi-main
nginx and certbot were designed assuming they lived on the same host as the app. They don't - a dedicated proxy Pi terminates TLS and forwards plain HTTP over the LAN. Kestrel now binds 0.0.0.0 instead of localhost, the whole certbot procedure moved to the proxy Pi's side, and pi-main gets a firewall rule restricting the backend ports to just the proxy Pi's address - otherwise binding all interfaces would let anything on the LAN skip the proxy's TLS entirely. |
||
|
|
d1b0d06568 |
Splits nginx routing into a from-scratch procedure plus the example
New section walks through adding any domain from nothing - plain HTTP block first (certbot's nginx plugin needs one to validate against), then the certbot command, then a verification step. The existing slpsoftware.nl blocks stay as the worked result of that procedure rather than a separate one-off. |
||
|
|
743c173257 |
Names su - specifically as a confirmed cause, not just sudo -u
Traced live on the actual Pi: su - gitea-workflow left XDG_RUNTIME_DIR unset even with the user manager already running and the bus socket already there. None of su/sudo -i/sudo -u reliably go through pam_systemd on Debian - only a real SSH login or sshd itself does, which is what the deploy workflow already uses. |
||
|
|
6882eda03f |
Adds systemd --user bus-connection troubleshooting
Enabling lingering doesn't start the user manager retroactively, and sudo -u often drops XDG_RUNTIME_DIR - both produce the same "Failed to connect to bus" error when setting this up by hand. |
||
|
|
33d18ebbf8 |
Switches the database from SQL Server to MariaDB
The target Pi only has MariaDB, and SQL Server has no ARM64 build at all - not a config problem, a real gap discovered during deployment setup. Swapped the EF Core provider, regenerated every migration, updated connection strings and the backup script everywhere they appear. Took two tries to land on a provider that actually works: Pomelo builds fine against this project's EF Core 10 packages but fails at runtime (it's compiled against 9's internal API surface, which moved in 10 wherever Identity/DataProtection force the newer packages). Oracle's official provider builds and migrates fine but has a real MariaDB bug in its own migration-lock code, reproduced against a live database. Kept Oracle's provider and worked around just that one broken method - everything else it does is correct - rather than give up more of the stack to chase a workaround. Verified against a real local MariaDB end to end: all three migrations applied, both hosts start clean, full suite still green. |
||
|
|
579e0ceaac |
Fixes a wrong placeholder and explains the optional env fields
AllowedConnectOrigins had a sentry-ingest-origin placeholder that was simply incorrect - the Sentry tunnel exists precisely so that exception is never needed. Both SecurityHeaders fields are Umami-only now, with inline comments on when to set them versus leave them out, and a note that MasterModule__MasterUrl degrades to a warning rather than a startup failure when unset. |
||
|
|
97f18d00e5 |
Names the deployed instance slpsoftware, not the software itself
SlpModularCms is the product; slpsoftware.nl is the customer running it - the first one, and a fine stand-in for what a real deployment looks like. Renamed the directories, systemd units, and backup paths accordingly. Left the backup script's own filename alone since the already-committed deploy-scp.yaml calls it by that exact name. |
||
|
|
843253888e |
Nests environments under one slpmodularcms folder instead of siblings
Applies to both the app's own release tree and the website upload path - slpmodularcms/test and slpmodularcms/production side by side under one parent, not two separately-named directories. Service unit names stay hyphenated; those aren't folders. |
||
|
|
25a3de0f1f |
Stops mixing gitea-workflow with the generic deploy-user placeholder
Same account, one name throughout instead of switching partway in. |
||
|
|
366e912e73 |
Renames the example deploy account to gitea-workflow
pi-deploy restated the obvious (it's on the Pi) without saying what the account is actually for. |
||
|
|
960760c24e |
Makes the deploy account generic instead of per-project
No reason to mint a new system account for every project on the same Pi - one shared, host-wide account works, namespaced by directory per project underneath it. |