fix(ci+chat): drop docker buildx flags + style chat code blocks
Deploy marketing to Cloud Run / deploy (push) Failing after 2m27s

CI: gitea runner ships docker without the buildx plugin, so
`docker buildx build --platform linux/amd64 --load` exits 125
("unknown flag: --platform") in both the full build (build-stage.sh)
and the asset-only fast path (deploy.yaml). Runner host is already
linux/amd64, so explicit --platform is redundant. Switch both call
sites to plain `docker build`. This unblocks the pipeline — every
run since the workflow was added (~26 runs) has failed at this
exact step.

Chat: the live chat bubble renders marked.parse() output via
innerHTML, but .demo-msg-ai .demo-msg-bubble only had CSS rules
for p/ul/ol/li/strong. Fenced code blocks rendered as <pre><code>
with no styling — they appeared as wrapped plaintext, hard to
distinguish from prose. Add rules for code (inline and block),
pre, blockquote, em, h1-h4, and a, mirroring the share-card
styling (which always had them) so chat code blocks finally get
the monospace + tinted-background treatment users expect.
This commit is contained in:
Will Anderson
2026-05-03 10:15:24 -05:00
parent 8cd07b9107
commit 254afd2fb2
3 changed files with 60 additions and 3 deletions
+5 -1
View File
@@ -146,7 +146,11 @@ jobs:
COPY src/assets /srv/landing/assets
COPY src/shares /srv/landing/shares
EOF
docker buildx build --platform linux/amd64 --load \
# Plain `docker build` — the gitea runner ships docker without
# the buildx plugin, so `docker buildx build --platform ...`
# exits 125 ("unknown flag: --platform"). The runner host is
# already linux/amd64 so cross-platform isn't needed here.
docker build \
--build-arg BASE="$LATEST" \
-f /tmp/Dockerfile.assets \
-t "marketing:${{ steps.tag.outputs.tag }}" \
+8 -2
View File
@@ -87,8 +87,14 @@ sed "${SED_INPLACE[@]}" \
's|#include "el_runtime.h"|#include "el_runtime.h"\nel_val_t http_get_auth(el_val_t url, el_val_t tok);\nel_val_t http_post_auth(el_val_t url, el_val_t tok, el_val_t body);\nel_val_t http_post_auth_json(el_val_t url, el_val_t tok, el_val_t body);\nel_val_t http_delete_auth(el_val_t url, el_val_t bearer_tok, el_val_t apikey);\nel_val_t cwd(void);\nel_val_t color_bold(el_val_t s);\nel_val_t unix_timestamp(void);\nel_val_t gcs_write(el_val_t bucket, el_val_t object_name, el_val_t content);\nel_val_t gcs_read(el_val_t bucket, el_val_t object_name);\nel_val_t supabase_insert(el_val_t project_url, el_val_t service_key, el_val_t table, el_val_t row_json);\nel_val_t supabase_get(el_val_t project_url, el_val_t service_key, el_val_t table_and_query);\nel_val_t supabase_auth_user(el_val_t project_url, el_val_t anon_key, el_val_t user_jwt);\nel_val_t supabase_admin_invite(el_val_t project_url, el_val_t service_key, el_val_t body_json);\nel_val_t supabase_upsert_user(el_val_t project_url, el_val_t anon_key, el_val_t user_jwt, el_val_t table_and_query, el_val_t row_json);|' \
dist/main.c
echo "==> Building Docker image marketing:${TAG} for linux/amd64"
docker buildx build --platform linux/amd64 --load \
echo "==> Building Docker image marketing:${TAG}"
# Plain `docker build` — the gitea runner doesn't ship buildx, so
# `docker buildx build --platform ...` exits 125 ("unknown flag:
# --platform"). The runner host is already linux/amd64 so the
# explicit --platform is redundant. BUILDKIT_INLINE_CACHE works with
# plain docker as long as DOCKER_BUILDKIT=1 is set (default on the
# runner).
docker build \
--build-arg BUILDKIT_INLINE_CACHE=1 \
--cache-from us-central1-docker.pkg.dev/neuron-785695/neuron-marketing/marketing:latest \
-f Dockerfile.stage \
+47
View File
@@ -1603,6 +1603,53 @@ fn page_open() -> String {
.demo-msg-ai .demo-msg-bubble ul, .demo-msg-ai .demo-msg-bubble ol { margin: 0.5rem 0 0.5rem 1.25rem; }
.demo-msg-ai .demo-msg-bubble li + li { margin-top: 0.25rem; }
.demo-msg-ai .demo-msg-bubble strong { font-weight: 600; }
.demo-msg-ai .demo-msg-bubble em { font-style: italic; }
.demo-msg-ai .demo-msg-bubble a { color: var(--navy); text-decoration: underline; }
/* Code: marked.js emits <code> for inline backticks and <pre><code> for
fenced blocks. Without these rules they render as unstyled inline
text and the user can't tell where the code starts and stops. */
.demo-msg-ai .demo-msg-bubble code {
font-family: 'IBM Plex Mono', Menlo, Consolas, monospace;
font-size: 0.85em;
background: rgba(0, 0, 0, 0.06);
padding: 1px 4px;
border-radius: 3px;
word-break: break-word;
}
.demo-msg-ai .demo-msg-bubble pre {
background: rgba(0, 0, 0, 0.06);
padding: 0.75rem;
border-radius: 6px;
overflow-x: auto;
font-size: 0.85em;
line-height: 1.5;
margin: 0.5rem 0;
max-width: 100%;
white-space: pre;
}
.demo-msg-ai .demo-msg-bubble pre code {
background: none;
padding: 0;
font-size: inherit;
word-break: normal;
}
.demo-msg-ai .demo-msg-bubble blockquote {
border-left: 3px solid var(--border);
margin: 0.5rem 0;
padding: 0.25rem 0 0.25rem 0.75rem;
color: var(--t2);
}
.demo-msg-ai .demo-msg-bubble h1,
.demo-msg-ai .demo-msg-bubble h2,
.demo-msg-ai .demo-msg-bubble h3,
.demo-msg-ai .demo-msg-bubble h4 {
font-weight: 600;
margin: 0.5rem 0 0.25rem;
}
.demo-msg-ai .demo-msg-bubble h1 { font-size: 1.05em; }
.demo-msg-ai .demo-msg-bubble h2 { font-size: 1em; }
.demo-msg-ai .demo-msg-bubble h3 { font-size: 0.95em; }
.demo-msg-ai .demo-msg-bubble h4 { font-size: 0.9em; }
.demo-msg-share {
position: relative;
margin-top: 0.375rem;