Project updates from Template
This commit contains the latest updates from the generic Website template, which move the toolchain to Swift 6.4, gate analytics and structured data behind traits, and rework page routing: - Updated the Swift toolchain for all the package dependencies and the Website service to version 6.4. (345b305) - Adapted all the existing middlewares in the Infrastructure package to Swift 6.4. (26008df) - Moved test resource teardown in the Persistence and the Website library into defer blocks. (27984a9) - Gated analytics behind a trait and reworked structured data in the Infrastructure package. (c7d4769) - Enabled the Analytics trait in the Website service. (f6a6bbd) - Reworked page routing in the Website service. (d1cb2c1) - Gated the structured data features in the Infrastructure package behind a trait. (f0a8791) - Enabled the StructuredData trait of the Infrastructure package in the Website service. (bbfdeb3) - Fixed the asset pin and a build warning in the Dockerfile of the Website service. (6ed0f9b) The root README change in 345b305 was left out, as this project no longer carries that file. From d1cb2c1, the RootController rework was left out, as the prototype serves a session-aware landing page and routes its other pages through their own controllers; the view-event reporter was appended to the prototype's shared script instead. The prototype code was adapted to the stricter Swift 6.4 settings: `String(format:)` was swapped for safe formatting, the NoIndex middleware takes a `@concurrent` next handler, and the tests flagged by warnings-as-errors were tightened. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
326299fc35
commit
911424de24
57 files changed
+864
-273
No files matched your search
+12
-12
@@ -4,12 +4,11 @@
|
||||
FROM node:22-alpine AS assets
|
||||
|
||||
ARG ESBUILD_VERSION=0.28.1
|
||||
ARG OXIPNG_VERSION=9.1.5
|
||||
ARG OXIPNG_VERSION=9.1
|
||||
ARG SVGO_VERSION=4.0.2
|
||||
|
||||
# Install the minifiers in their own layer, so they are cached across asset changes.
|
||||
# The oxipng pin is fuzzy (=~) so Alpine package revision bumps (-r0, -r1, ...) do not break the build when the base
|
||||
# image advances.
|
||||
# The oxipng pin stops at major.minor: Alpine drops a package's old builds, so a patch pin fails on its next release.
|
||||
RUN apk add --no-cache "oxipng=~${OXIPNG_VERSION}" \
|
||||
&& npm install --global "esbuild@${ESBUILD_VERSION}" "svgo@${SVGO_VERSION}"
|
||||
|
||||
@@ -30,7 +29,7 @@ COPY --from=assets /static /
|
||||
# ================================
|
||||
# Build image
|
||||
# ================================
|
||||
FROM swift:6.3-noble AS build
|
||||
FROM swift:6.4-noble AS build
|
||||
|
||||
# Install OS updates
|
||||
RUN export DEBIAN_FRONTEND=noninteractive DEBCONF_NONINTERACTIVE_SEEN=true \
|
||||
@@ -66,12 +65,13 @@ COPY ./Services/Website/Sources ./Services/Website/Sources
|
||||
|
||||
# Build the application, with optimizations, with static linking, and using jemalloc.
|
||||
#
|
||||
# SPM validates the path of every target in the root package — including the test targets — even when only the
|
||||
# executable product is built, so those directories have to exist. They are created empty instead of copied: the test
|
||||
# sources are not needed to compile the product, keeping them out means editing a test never invalidates this layer,
|
||||
# and it keeps the local database bind mount under Tests/DB out of the image entirely.
|
||||
RUN mkdir -p ./Services/Website/Tests/App ./Services/Website/Tests/Library \
|
||||
&& swift build --package-path ./Services/Website -c release \
|
||||
# SPM validates every target path, test targets and their resources included, so those directories must exist. They are
|
||||
# created empty, not copied, so an edited test does not invalidate this layer and the Tests/DB bind mount stays out.
|
||||
#
|
||||
# The native build system works around https://github.com/swiftlang/swift-package-manager/issues/10592: Swift 6.4's
|
||||
# default one fails to link a static Foundation.
|
||||
RUN mkdir -p ./Services/Website/Tests/App/Static ./Services/Website/Tests/Library \
|
||||
&& swift build --package-path ./Services/Website -c release --build-system native \
|
||||
--product "Website" \
|
||||
--static-swift-stdlib \
|
||||
-Xlinker -ljemalloc
|
||||
@@ -80,14 +80,14 @@ RUN mkdir -p ./Services/Website/Tests/App ./Services/Website/Tests/Library \
|
||||
WORKDIR /staging
|
||||
|
||||
# Copy main executable to staging area, without its debug sections
|
||||
RUN cp "$(swift build --package-path /build/Services/Website -c release --show-bin-path)/Website" ./ \
|
||||
RUN cp "$(swift build --package-path /build/Services/Website -c release --build-system native --show-bin-path)/Website" ./ \
|
||||
&& strip --strip-debug ./Website
|
||||
|
||||
# Copy static swift backtracer binary to staging area
|
||||
RUN cp "/usr/libexec/swift/linux/swift-backtrace-static" ./
|
||||
|
||||
# Copy resources bundled by SPM to staging area
|
||||
RUN find -L "$(swift build --package-path /build/Services/Website -c release --show-bin-path)/" -regex '.*\.resources$' -exec cp -Ra {} ./ \;
|
||||
RUN find -L "$(swift build --package-path /build/Services/Website -c release --build-system native --show-bin-path)/" -regex '.*\.resources$' -exec cp -Ra {} ./ \;
|
||||
|
||||
# Create the static files directory (served by FileMiddleware) and fill it with the minified copies from the assets stage
|
||||
RUN mkdir -p ./Resources/Static
|
||||
|
||||
Reference in new issue
Block a user