diff --git a/.gitea/workflows/continuous_integration.yaml b/.gitea/workflows/continuous_integration.yaml
index 21f0e2e..bf0eb15 100644
--- a/.gitea/workflows/continuous_integration.yaml
+++ b/.gitea/workflows/continuous_integration.yaml
@@ -253,13 +253,29 @@ jobs:
exit 1
fi
- - name: Publish (test)
- working-directory: src/SlpModularCms.Api
+ # Builds the admin SPA and lands it in wwwroot/admin *before* dotnet publish runs, as its own
+ # step rather than an MSBuild target hooked to Build/Publish. That was tried and reliably
+ # failed two different ways (see SlpModularCms.Api.csproj's comment on the topic): the SDK's
+ # wwwroot static-web-asset item set is fixed at project evaluation time, before any target
+ # runs, so files a target creates afterward never make it into the publish output; and forcing
+ # them in as an explicit Content item collided with the SDK's own static-web-asset resolution.
+ # Physically existing on disk before dotnet publish/build ever runs is the only thing that
+ # worked, verified locally against a clean obj/bin and a fresh node_modules.
+ - name: Build admin frontend
+ working-directory: frontend
env:
VITE_APP_ENV: test
VITE_UMAMI_SCRIPT_URL: ${{ vars.VITE_UMAMI_SCRIPT_URL }}
VITE_UMAMI_WEBSITE_ID: ${{ vars.VITE_UMAMI_WEBSITE_ID_TEST }}
VITE_SENTRY_DSN: ${{ vars.VITE_SENTRY_DSN }}
+ run: |
+ pnpm install --frozen-lockfile
+ pnpm build
+ mkdir -p ../src/SlpModularCms.Api/wwwroot/admin
+ cp -r dist/. ../src/SlpModularCms.Api/wwwroot/admin/
+
+ - name: Publish (test)
+ working-directory: src/SlpModularCms.Api
run: >
dotnet publish -c Release -r ${{ env.PUBLISH_RID }} --self-contained false
-o ${{ github.workspace }}/${{ env.ARTIFACT_NAME_TEST }}
@@ -300,13 +316,23 @@ jobs:
exit 1
fi
- - name: Publish (production)
- working-directory: src/SlpModularCms.Api
+ # See publish-test's "Build admin frontend" step for why this runs as its own step ahead of
+ # dotnet publish rather than an MSBuild target.
+ - name: Build admin frontend
+ working-directory: frontend
env:
VITE_APP_ENV: production
VITE_UMAMI_SCRIPT_URL: ${{ vars.VITE_UMAMI_SCRIPT_URL }}
VITE_UMAMI_WEBSITE_ID: ${{ vars.VITE_UMAMI_WEBSITE_ID_PRODUCTION }}
VITE_SENTRY_DSN: ${{ vars.VITE_SENTRY_DSN }}
+ run: |
+ pnpm install --frozen-lockfile
+ pnpm build
+ mkdir -p ../src/SlpModularCms.Api/wwwroot/admin
+ cp -r dist/. ../src/SlpModularCms.Api/wwwroot/admin/
+
+ - name: Publish (production)
+ working-directory: src/SlpModularCms.Api
run: >
dotnet publish -c Release -r ${{ env.PUBLISH_RID }} --self-contained false
-o ${{ github.workspace }}/${{ env.ARTIFACT_NAME_PRODUCTION }}
diff --git a/src/SlpModularCms.Api/Extensions/WebsitePlaceholder.html b/src/SlpModularCms.Api/Extensions/WebsitePlaceholder.html
index 2b8abf8..ff261f7 100644
--- a/src/SlpModularCms.Api/Extensions/WebsitePlaceholder.html
+++ b/src/SlpModularCms.Api/Extensions/WebsitePlaceholder.html
@@ -20,7 +20,7 @@
}
@media (prefers-color-scheme: dark) {
body { background: #141414; color: #ededed; }
- code { background: #262626; }
+ code { background: #262626; color: #141414; }
a { color: #ff6b6b; }
}
main { max-width: 34rem; }
@@ -28,6 +28,7 @@
p { margin: 0 0 1rem; }
code {
background: #ececec;
+ color: #1a1a1a;
padding: 0.15em 0.4em;
border-radius: 4px;
font-family: ui-monospace, "Cascadia Code", Consolas, monospace;
diff --git a/src/SlpModularCms.Api/SlpModularCms.Api.csproj b/src/SlpModularCms.Api/SlpModularCms.Api.csproj
index 85c0df0..03b7bc8 100644
--- a/src/SlpModularCms.Api/SlpModularCms.Api.csproj
+++ b/src/SlpModularCms.Api/SlpModularCms.Api.csproj
@@ -35,22 +35,21 @@
-
- $(MSBuildProjectDirectory)/../../frontend
-
-
-
-
-
-
-
-
-
-
-