Compare commits

...
4 Commits
Author SHA1 Message Date
mmintel ad3708e29e fix: switch to node:20-slim for runner to fix persistent image optimization 400 errors
Build & Deploy / 🔍 Prepare (push) Successful in 11s
Build & Deploy / 🧪 QA (push) Successful in 1m16s
Build & Deploy / 🏗️ Build (push) Successful in 2m57s
Build & Deploy / 🚀 Deploy (push) Successful in 15s
Build & Deploy / 🧪 Post-Deploy Verification (push) Failing after 58s
Build & Deploy / 🔔 Notify (push) Successful in 2s
2026-05-06 16:11:49 +02:00
mmintel 8b0cd6028b fix: add libc6-compat to runner stage and optimize image sizes to fix 400 errors
Build & Deploy / 🔍 Prepare (push) Successful in 8s
Build & Deploy / 🧪 QA (push) Successful in 1m13s
Build & Deploy / 🏗️ Build (push) Successful in 2m47s
Build & Deploy / 🚀 Deploy (push) Successful in 13s
Build & Deploy / 🧪 Post-Deploy Verification (push) Failing after 47s
Build & Deploy / 🔔 Notify (push) Successful in 1s
2026-05-06 15:24:57 +02:00
mmintel 94627ba20e chore: add diagnostic logs to smoke test and bump to rc.14
Build & Deploy / 🔍 Prepare (push) Successful in 8s
Build & Deploy / 🧪 QA (push) Successful in 1m14s
Build & Deploy / 🏗️ Build (push) Successful in 2m57s
Build & Deploy / 🚀 Deploy (push) Successful in 16s
Build & Deploy / 🧪 Post-Deploy Verification (push) Failing after 1m1s
Build & Deploy / 🔔 Notify (push) Successful in 1s
2026-05-06 15:09:37 +02:00
mmintel a782fdfe53 chore: fix middleware bypass for media and bump to rc.13
Build & Deploy / 🔍 Prepare (push) Successful in 8s
Build & Deploy / 🧪 QA (push) Successful in 1m14s
Build & Deploy / 🏗️ Build (push) Successful in 2m48s
Build & Deploy / 🚀 Deploy (push) Successful in 15s
Build & Deploy / 🧪 Post-Deploy Verification (push) Failing after 49s
Build & Deploy / 🔔 Notify (push) Successful in 2s
2026-05-06 13:49:05 +02:00
5 changed files with 32 additions and 13 deletions
+14 -9
View File
@@ -56,15 +56,16 @@ ENV UV_THREADPOOL_SIZE=3
RUN pnpm build RUN pnpm build
# Stage 2: Runner # Stage 2: Runner
FROM node:20-alpine AS runner FROM node:20-slim AS runner
WORKDIR /app WORKDIR /app
# Install curl for health checks # Install curl for health checks and procps
RUN apk add --no-cache curl RUN apt-get update && apt-get install -y curl procps && rm -rf /var/lib/apt/lists/*
# Create nextjs user and group (standardized in runtime image but ensuring local ownership) # Create nextjs user and group
RUN addgroup --system --gid 1001 nodejs && \ RUN groupadd --system --gid 1001 nodejs && \
adduser --system --uid 1001 nextjs && \ useradd --system --uid 1001 nextjs && \
mkdir -p .next/cache/images && \
chown -R nextjs:nodejs /app chown -R nextjs:nodejs /app
USER nextjs USER nextjs
@@ -72,11 +73,15 @@ USER nextjs
ENV HOSTNAME="0.0.0.0" ENV HOSTNAME="0.0.0.0"
ENV PORT=3000 ENV PORT=3000
ENV NODE_ENV=production ENV NODE_ENV=production
ENV NEXT_SHARP_PATH=/app/node_modules/sharp
# Copy standalone output and static files # Copy standalone output
COPY --from=builder --chown=nextjs:nodejs /app/public ./public
COPY --from=builder --chown=nextjs:nodejs /app/.next/standalone ./ COPY --from=builder --chown=nextjs:nodejs /app/.next/standalone ./
# Copy public and static files - standalone expects them in specific locations
COPY --from=builder --chown=nextjs:nodejs /app/public ./public
COPY --from=builder --chown=nextjs:nodejs /app/.next/static ./.next/static COPY --from=builder --chown=nextjs:nodejs /app/.next/static ./.next/static
COPY --from=builder --chown=nextjs:nodejs /app/.next/cache ./.next/cache
# Ensure cache directory is writable for the nextjs user
# (Already handled by chown -R above, but explicit is better)
CMD ["node", "server.js"] CMD ["node", "server.js"]
+2
View File
@@ -26,6 +26,8 @@ export default async function middleware(request: NextRequest) {
pathname.startsWith('/errors') || pathname.startsWith('/errors') ||
pathname.startsWith('/health') || pathname.startsWith('/health') ||
pathname.startsWith('/uploads') || pathname.startsWith('/uploads') ||
pathname.startsWith('/media') ||
pathname.startsWith('/_next/image') ||
pathname.includes('/api/og') || pathname.includes('/api/og') ||
pathname.includes('opengraph-image') || pathname.includes('opengraph-image') ||
pathname.endsWith('sitemap.xml') || pathname.endsWith('sitemap.xml') ||
+1 -1
View File
@@ -403,7 +403,7 @@ const nextConfig = {
}, },
images: { images: {
formats: ['image/webp'], formats: ['image/webp'],
deviceSizes: [640, 750, 828, 1080, 1200, 1920, 2048, 3840], deviceSizes: [640, 750, 828, 1080, 1200, 1920, 2048],
remotePatterns: [ remotePatterns: [
{ {
protocol: 'https', protocol: 'https',
+1 -1
View File
@@ -113,7 +113,7 @@
"prepare": "husky", "prepare": "husky",
"preinstall": "npx only-allow pnpm" "preinstall": "npx only-allow pnpm"
}, },
"version": "2.3.22-rc.12", "version": "2.3.22-rc.16",
"pnpm": { "pnpm": {
"onlyBuiltDependencies": [ "onlyBuiltDependencies": [
"@parcel/watcher", "@parcel/watcher",
+13 -1
View File
@@ -44,7 +44,19 @@ async function run() {
urls.map(async (url) => { urls.map(async (url) => {
try { try {
const res = await fetch(url, { method: 'HEAD' }); const res = await fetch(url, { method: 'HEAD' });
if (res.status >= 400) broken.push(`${url} (Status: ${res.status})`); if (res.status >= 400) {
// Diagnostic: check if the raw source is available
const rawUrlMatch = url.match(/[?&]url=([^&]+)/);
if (rawUrlMatch) {
const rawPath = decodeURIComponent(rawUrlMatch[1]);
const baseUrl = new URL(url).origin;
const rawUrl = `${baseUrl}${rawPath}`;
const rawRes = await fetch(rawUrl, { method: 'HEAD' });
broken.push(`${url} (Status: ${res.status}, Raw Status: ${rawRes.status})`);
} else {
broken.push(`${url} (Status: ${res.status})`);
}
}
} catch (e) { } catch (e) {
broken.push(`${url} (Fetch failed)`); broken.push(`${url} (Fetch failed)`);
} }