From 96c220825f8e737d6ed5f9636b8bdce1427ed786 Mon Sep 17 00:00:00 2001 From: Oleks Date: Sun, 14 Jun 2026 13:59:21 +0300 Subject: [PATCH] fix: seed catalog on boot + emit https canonical/og:url - entrypoint: run 'emdash seed' after 'emdash init' (init no longer loads JSON seeds in newer emdash, so the catalog booted empty). Idempotent onConflict=skip. - Base.astro: derive canonical/og:url base from EMDASH_SITE_URL (per-env https URL the chart injects) instead of Astro.url.origin, which is plain http behind Traefik TLS termination. --- app/src/layouts/Base.astro | 7 ++++++- docker/entrypoint.sh | 20 ++++++++++++-------- 2 files changed, 18 insertions(+), 9 deletions(-) diff --git a/app/src/layouts/Base.astro b/app/src/layouts/Base.astro index 1f28af0..35e32f9 100644 --- a/app/src/layouts/Base.astro +++ b/app/src/layouts/Base.astro @@ -19,7 +19,12 @@ const siteTagline = settings?.tagline ?? "WordPress → Emdash plugin parity cat const fullTitle = title === siteTitle ? siteTitle : `${title} — ${siteTitle}`; const pageDescription = description ?? siteTagline; -const canonicalBase = Astro.site ?? new URL(Astro.url.origin); +// Prefer the per-env site URL the chart injects (EMDASH_SITE_URL, https://) +// over Astro.url.origin: TLS terminates at Traefik, so the pod sees plain http +// and would otherwise emit http:// canonical + og:url. Read at request time via +// process.env (runtime pod env, not a build-time import.meta.env constant). +const siteUrlEnv = process.env.EMDASH_SITE_URL; +const canonicalBase = Astro.site ?? (siteUrlEnv ? new URL(siteUrlEnv) : new URL(Astro.url.origin)); const canonical = new URL(Astro.url.pathname, canonicalBase).href; const pageCtx = createPublicPageContext({ diff --git a/docker/entrypoint.sh b/docker/entrypoint.sh index 14dacf5..7865811 100755 --- a/docker/entrypoint.sh +++ b/docker/entrypoint.sh @@ -4,14 +4,18 @@ set -eu # Ensure persistent state dirs exist (volume may be empty on first boot). mkdir -p /app/state/uploads -# Run emdash init on EVERY boot, before exec'ing the server. It is idempotent: -# runMigrations applies only pending migrations (no-op when all are applied) and -# init skips re-seeding once collections exist. Under `set -e` a non-zero exit -# aborts before `exec "$@"`, so a failed/partial init surfaces as a crash-loop -# with logs instead of a silently half-migrated boot. (Gating on the mere -# presence of data.db would skip pending migrations on image upgrades against an -# existing PVC and never recover a partial first-run init.) -echo "[entrypoint] running emdash init (applies pending migrations, skips re-seed when collections exist)" +# Run emdash init + seed on EVERY boot, before exec'ing the server. Both are +# idempotent: `init` runs only pending migrations (no-op when all applied) and +# `seed` applies seed/seed.json with onConflict=skip (no-op once rows exist). +# `init` does NOT load JSON seeds — that moved to the separate `emdash seed` +# command — so without this seed step the catalog boots empty. Under `set -e` a +# non-zero exit aborts before `exec "$@"`, so a failed/partial init or seed +# surfaces as a crash-loop with logs instead of a silently half-set-up boot. +# (Gating on the mere presence of data.db would skip pending migrations on image +# upgrades against an existing PVC and never recover a partial first-run init.) +echo "[entrypoint] running emdash init (applies pending migrations)" node_modules/.bin/emdash init +echo "[entrypoint] running emdash seed (applies seed/seed.json, onConflict=skip)" +node_modules/.bin/emdash seed exec "$@"