Compare commits

...

4 Commits

Author SHA1 Message Date
ede34ab7ce fix(prod): auto-reload on ChunkLoadError or Server Action mismatch
All checks were successful
Build & Deploy / 🔍 Prepare (push) Successful in 12s
Build & Deploy / 🏗️ Build (push) Successful in 10m30s
Build & Deploy / 🚀 Deploy (push) Successful in 27s
Build & Deploy / 🩺 Smoke Test (push) Successful in 7s
Build & Deploy / 🔔 Notify (push) Successful in 4s
2026-06-10 11:11:54 +02:00
3fac158185 fix(contact): correct canvas-confetti import to avoid TypeError on success animation
All checks were successful
Build & Deploy / 🔍 Prepare (push) Successful in 27s
Build & Deploy / 🏗️ Build (push) Successful in 18m45s
Build & Deploy / 🚀 Deploy (push) Successful in 40s
Build & Deploy / 🩺 Smoke Test (push) Successful in 6s
Build & Deploy / 🔔 Notify (push) Successful in 5s
2026-06-03 17:12:08 +02:00
001c8514b5 fix(ci): violently purge buildx containers to avoid overlayfs corruption
Some checks failed
Build & Deploy / 🔍 Prepare (push) Successful in 30s
Build & Deploy / 🏗️ Build (push) Failing after 40m17s
Build & Deploy / 🚀 Deploy (push) Has been skipped
Build & Deploy / 🩺 Smoke Test (push) Has been skipped
Build & Deploy / 🔔 Notify (push) Successful in 4s
2026-06-03 16:55:00 +02:00
00a8e3248f chore: retry pipeline 2934 due to runner docker crash
Some checks failed
Build & Deploy / 🔍 Prepare (push) Successful in 11s
Build & Deploy / 🏗️ Build (push) Failing after 16m17s
Build & Deploy / 🚀 Deploy (push) Has been skipped
Build & Deploy / 🩺 Smoke Test (push) Has been skipped
Build & Deploy / 🔔 Notify (push) Successful in 2m48s
2026-06-03 16:34:54 +02:00
4 changed files with 46 additions and 14 deletions

View File

@@ -167,6 +167,9 @@ jobs:
sudo rm -rf /opt/hostedtoolcache/CodeQL || true sudo rm -rf /opt/hostedtoolcache/CodeQL || true
# Comprehensive Docker purge # Comprehensive Docker purge
docker buildx stop || true
docker buildx rm -a || true
docker rm -fv $(docker ps -aq --filter "ancestor=moby/buildkit") || true
docker system prune -af --volumes docker system prune -af --volumes
docker builder prune -af docker builder prune -af
docker buildx prune -af docker buildx prune -af
@@ -241,8 +244,6 @@ jobs:
DIRECTUS_URL: ${{ needs.prepare.outputs.directus_url }} DIRECTUS_URL: ${{ needs.prepare.outputs.directus_url }}
DIRECTUS_HOST: cms.${{ needs.prepare.outputs.traefik_host }} DIRECTUS_HOST: cms.${{ needs.prepare.outputs.traefik_host }}
# Mail # Mail
MAIL_HOST: ${{ secrets.SMTP_HOST || vars.SMTP_HOST }} MAIL_HOST: ${{ secrets.SMTP_HOST || vars.SMTP_HOST }}
MAIL_PORT: ${{ secrets.SMTP_PORT || vars.SMTP_PORT || '587' }} MAIL_PORT: ${{ secrets.SMTP_PORT || vars.SMTP_PORT || '587' }}

View File

@@ -15,6 +15,22 @@ export default function Error({
// Log the error to Sentry/GlitchTip // Log the error to Sentry/GlitchTip
Sentry.captureException(error); Sentry.captureException(error);
console.error("Caught in error.tsx:", error); console.error("Caught in error.tsx:", error);
// Auto-reload on ChunkLoadError or Server Action errors to fetch the new deployment assets
const isChunkLoadError =
error.message &&
(error.message.includes("ChunkLoadError") ||
error.message.includes("Loading chunk") ||
error.message.includes("Failed to find Server Action"));
if (isChunkLoadError) {
const lastReload = sessionStorage.getItem("last-chunk-reload");
const now = Date.now();
if (!lastReload || now - parseInt(lastReload) > 10000) {
sessionStorage.setItem("last-chunk-reload", now.toString());
window.location.reload();
}
}
}, [error]); }, [error]);
return ( return (

View File

@@ -1,7 +1,6 @@
"use client"; "use client";
import * as Sentry from "@sentry/nextjs"; import * as Sentry from "@sentry/nextjs";
import Error from "next/error";
import { useEffect } from "react"; import { useEffect } from "react";
import { Inter, Newsreader } from "next/font/google"; import { Inter, Newsreader } from "next/font/google";
import "./globals.css"; import "./globals.css";
@@ -23,6 +22,22 @@ export default function GlobalError({
}) { }) {
useEffect(() => { useEffect(() => {
Sentry.captureException(error); Sentry.captureException(error);
// Auto-reload on ChunkLoadError or Server Action errors to fetch the new deployment assets
const isChunkLoadError =
error.message &&
(error.message.includes("ChunkLoadError") ||
error.message.includes("Loading chunk") ||
error.message.includes("Failed to find Server Action"));
if (isChunkLoadError) {
const lastReload = sessionStorage.getItem("last-chunk-reload");
const now = Date.now();
if (!lastReload || now - parseInt(lastReload) > 10000) {
sessionStorage.setItem("last-chunk-reload", now.toString());
window.location.reload();
}
}
}, [error]); }, [error]);
return ( return (

View File

@@ -3,7 +3,7 @@
import * as React from "react"; import * as React from "react";
import { useState, useMemo, useEffect, useRef } from "react"; import { useState, useMemo, useEffect, useRef } from "react";
import { motion } from "framer-motion"; import { motion } from "framer-motion";
import * as confetti from "canvas-confetti"; import confetti from "canvas-confetti";
import { import {
Layers, Layers,
BrainCircuit, BrainCircuit,