Compare commits

..

2 Commits

Author SHA1 Message Date
4ec5683cca fix(deploy): allow public access to /assets path for Next.js Image Optimizer loopback
Some checks failed
Build & Deploy / 🔍 Prepare (push) Successful in 41s
Build & Deploy / 🧪 QA (push) Successful in 2m6s
Build & Deploy / 🏗️ Build (push) Successful in 3m57s
Build & Deploy / 🚀 Deploy (push) Successful in 48s
Build & Deploy / 🧪 Post-Deploy Verification (push) Has been skipped
Build & Deploy / 🔔 Notify (push) Successful in 3s
Nightly QA / 💨 Smoke & Health (push) Failing after 1m49s
2026-07-06 11:49:58 +02:00
80edaedefc fix(ci): allow cached and redirected statuses (304, 307, 308) in smoke test page check
All checks were successful
Build & Deploy / 🔍 Prepare (push) Successful in 4m39s
Build & Deploy / 🧪 QA (push) Successful in 2m31s
Build & Deploy / 🏗️ Build (push) Successful in 5m23s
Build & Deploy / 🚀 Deploy (push) Successful in 50s
Build & Deploy / 🧪 Post-Deploy Verification (push) Has been skipped
Build & Deploy / 🔔 Notify (push) Successful in 3s
2026-07-06 11:30:57 +02:00
9 changed files with 13 additions and 13 deletions

View File

@@ -65,7 +65,7 @@ jobs:
TARGET="testing"
IMAGE_TAG="main-${SHORT_SHA}"
ENV_FILE=".env.testing"
TRAEFIK_HOST="test.${DOMAIN}"
TRAEFIK_HOST="test.${DOMAIN}, testing.${DOMAIN}"
elif [[ "${{ github.ref_type }}" == "tag" ]]; then
if [[ "$REF" =~ ^v[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
TARGET="production"

View File

@@ -9,7 +9,7 @@ layout: "fullBleed"
badge="Karriere"
title="Zukunft bauen"
description="Suchen Sie eine neue Herausforderung in einem zukunftssicheren Markt? Bei E-TIB arbeiten wir täglich daran, Deutschland zu vernetzen und die Energiewende voranzutreiben."
videoUrl="/assets/videos/web/hero-kabelpflug.mp4"
videoUrl="/assets/videos/web/hero-bohrung.mp4"
linkText="Offene Stellen"
linkHref="#stellen"
/>

View File

@@ -9,7 +9,7 @@ layout: "fullBleed"
badge="Unsere Leistungen"
title="Alles aus einer Hand"
description="Als Full-Service-Partner im Bereich Kabelleitungstiefbau decken wir das gesamte Spektrum moderner Infrastrukturprojekte ab."
videoUrl="/assets/videos/web/hero-bohrung.mp4"
videoUrl="/assets/videos/web/hero-kabelpflug.mp4"
linkText="Kontakt aufnehmen"
linkHref="/de/kontakt"
secondaryCtaLabel="Referenzen ansehen"

View File

@@ -9,7 +9,7 @@ layout: "fullBleed"
badge="Events"
title="Treffen Sie uns\nvor Ort"
description="Kommen Sie mit unseren Experten ins Gespräch. Wir sind auf den wichtigsten Branchenmessen vertreten und freuen uns auf den persönlichen Austausch mit Ihnen."
videoUrl="/assets/videos/web/hero-messe.mp4"
videoUrl="/assets/videos/web/hero-bohrung.mp4"
linkText="Zu den Terminen"
linkHref="#termine"
/>

View File

@@ -9,7 +9,7 @@ layout: "fullBleed"
badge="Careers"
title="Build the Future\nwith Us"
description="We are looking for motivated talents who want to shape the digital and energy infrastructure of tomorrow. Join the E-TIB team."
videoUrl="/assets/videos/web/hero-kabelpflug.mp4"
videoUrl="/assets/videos/web/hero-bahnkreuzung.mp4"
linkText="View Open Positions"
linkHref="#jobs"
/>

View File

@@ -9,7 +9,7 @@ layout: "fullBleed"
badge="Competencies"
title="Everything from a\nsingle source"
description="From the first planning sketch to the final documentation we are your reliable partner for complex infrastructure projects."
videoUrl="/assets/videos/web/hero-bohrung.mp4"
videoUrl="/assets/videos/web/hero-bahnkreuzung.mp4"
linkText="Get in Touch"
linkHref="/en/kontakt"
/>

View File

@@ -9,7 +9,7 @@ layout: "fullBleed"
badge="Events"
title="Meet us\nin person"
description="Get in touch with our experts. We are represented at the most important industry trade fairs and look forward to speaking with you personally."
videoUrl="/assets/videos/web/hero-messe.mp4"
videoUrl="/assets/videos/web/hero-bohrung.mp4"
linkText="View dates"
linkHref="#dates"
/>

View File

@@ -27,7 +27,7 @@ services:
- "traefik.http.routers.${PROJECT_NAME:-klz}.middlewares=${AUTH_MIDDLEWARE:-etib-ratelimit,etib-forward,etib-compress}"
# Public Router paths that bypass Gatekeeper auth (health, SEO, static assets, OG images)
- "traefik.http.routers.${PROJECT_NAME:-klz}-public.rule=(${TRAEFIK_HOST_RULE:-Host(`${TRAEFIK_HOST:-e-tib.com}`) || Host(`staging.${TRAEFIK_HOST:-e-tib.com}`) || Host(`testing.${TRAEFIK_HOST:-e-tib.com}`)}) && PathRegexp(`^/([a-z]{2}/)?(health|login|gatekeeper|uploads|media|robots\\.txt|manifest\\.webmanifest|sitemap(-[0-9]+)?\\.xml|(.*/)?api/og(/.*)?|(.*/)?opengraph-image.*)`)"
- "traefik.http.routers.${PROJECT_NAME:-klz}-public.rule=(${TRAEFIK_HOST_RULE:-Host(`${TRAEFIK_HOST:-e-tib.com}`) || Host(`staging.${TRAEFIK_HOST:-e-tib.com}`) || Host(`testing.${TRAEFIK_HOST:-e-tib.com}`)}) && PathRegexp(`^/([a-z]{2}/)?(health|login|gatekeeper|uploads|media|assets|robots\\.txt|manifest\\.webmanifest|sitemap(-[0-9]+)?\\.xml|(.*/)?api/og(/.*)?|(.*/)?opengraph-image.*)`)"
- "traefik.http.routers.${PROJECT_NAME:-klz}-public.entrypoints=${TRAEFIK_ENTRYPOINT:-web}"
- "traefik.http.routers.${PROJECT_NAME:-klz}-public.tls.certresolver=${TRAEFIK_CERT_RESOLVER:-}"
- "traefik.http.routers.${PROJECT_NAME:-klz}-public.tls=${TRAEFIK_TLS:-false}"
@@ -58,10 +58,9 @@ services:
etib-gatekeeper:
profiles: [ "gatekeeper" ]
image: registry.infra.mintel.me/mintel/gatekeeper:latest
image: registry.infra.mintel.me/mintel/gatekeeper:testing
restart: unless-stopped
networks:
default:
infra:
aliases:
- ${PROJECT_NAME:-klz}-gatekeeper
@@ -69,8 +68,6 @@ services:
- ${ENV_FILE:-.env}
environment:
PORT: 3000
NODE_TLS_REJECT_UNAUTHORIZED: 0
NODE_ENV: production
labels:
- "traefik.enable=true"
- "traefik.http.services.${PROJECT_NAME:-klz}-gatekeeper-svc.loadbalancer.server.port=3000"

View File

@@ -32,7 +32,10 @@ async function run() {
for (const p of pages) {
console.log(`📄 Checking ${p}...`);
const res = await page.goto(`${targetUrl}${p}`, { waitUntil: 'domcontentloaded' });
if (res?.status() !== 200) throw new Error(`Page ${p} returned ${res?.status()}`);
const status = res?.status();
if (status !== 200 && status !== 304 && status !== 307 && status !== 308) {
throw new Error(`Page ${p} returned ${status}`);
}
// Check for broken images (using in-page fetch to preserve session and avoid heavy navigation)
const images = await page.$$eval('img', (imgs) => imgs.map((img) => img.src).filter(Boolean));