Two deploys failed building the images (4 Nov 2026): first the dictionaries' image lacked third_party/ (pub refuses an override whose path is missing, exit 66), then, with it copied, pub refused the overrides themselves, as the three plugins depend on the Flutter SDK, which the dart image doesn't have (exit 69); every image would have. No image's package uses them, so tool/workspace_only.sh, which already narrows the root pubspec for an image, drops the overrides naming third_party/, and no Dockerfile copies it. Each image's build stage replayed from this commit with a standalone Dart 3.13.4, a fresh pub cache, dash and mawk: all four build, and the commit deployed before fails as the deploy did. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
52 lines
2.6 KiB
Docker
52 lines
2.6 KiB
Docker
# The dictionaries' image: the curator, keeping a server's dictionary files current
|
|
# from EDRDG's files of the day (`curate update`, the README). Built from the
|
|
# repository root (the build context), where the workspace's root pubspec and lockfile
|
|
# live:
|
|
#
|
|
# docker build -f apps/learn/halkyon_learn_curator/Dockerfile .
|
|
#
|
|
# A container of its own beside the server (deploy/compose.learn.yaml, decided 2026-10-09):
|
|
# the curator (AGPL) never enters the server's image or process, and a conversion
|
|
# that fails can't touch the server. They share only the folder of files.
|
|
|
|
# ── Build stage: compile the curator to a native executable ───────────────────────
|
|
FROM dart:3.13.4 AS build
|
|
WORKDIR /app
|
|
COPY pubspec.yaml pubspec.lock ./
|
|
COPY tool/workspace_only.sh tool/
|
|
COPY apps/learn/halkyon_learn_curator apps/learn/halkyon_learn_curator
|
|
|
|
# The workspace root with only the curator package, as the server's Dockerfile does it
|
|
# with the server's.
|
|
RUN sh tool/workspace_only.sh apps/learn/halkyon_learn_curator
|
|
RUN dart pub get
|
|
WORKDIR /app/apps/learn/halkyon_learn_curator
|
|
RUN dart build cli --target bin/curate.dart --output build
|
|
|
|
# ── Runtime stage ─────────────────────────────────────────────────────────────────
|
|
# Ubuntu 24.04 as the server's, with CA certificates for EDRDG's HTTPS, and MeCab's
|
|
# IPADIC, which the package compiles as it is installed: the curator packs it for the
|
|
# app's devices (ADR 0012). Its sources go once it is compiled.
|
|
FROM ubuntu:24.04
|
|
RUN apt-get update \
|
|
&& DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \
|
|
ca-certificates mecab-ipadic-utf8 \
|
|
&& test -s /var/lib/mecab/dic/ipadic-utf8/sys.dic \
|
|
&& rm -rf /usr/share/mecab/dic/ipadic /var/lib/apt/lists/*
|
|
WORKDIR /app
|
|
|
|
COPY --from=build /app/apps/learn/halkyon_learn_curator/build/bundle/ ./
|
|
COPY --from=build /app/apps/learn/halkyon_learn_curator/data/ data/
|
|
|
|
# An unprivileged user of its own: user ID 10001, shared with neither the containers
|
|
# of PostgreSQL and the server (999) nor the CI runner on the host (61000). The folder
|
|
# it writes into belongs to it, which a new volume mounted there takes over.
|
|
RUN useradd --system --uid 10001 --no-create-home --shell /usr/sbin/nologin curator \
|
|
&& mkdir /dictionaries \
|
|
&& chown curator /dictionaries
|
|
USER curator
|
|
|
|
# Updates the files whenever they are a week old (EDRDG's licence asks at least
|
|
# monthly), and sleeps in between.
|
|
ENTRYPOINT ["./bin/curate", "update", "--into", "/dictionaries", "--data", "data"]
|
|
CMD ["--every", "7"]
|