Compare commits

..

2 Commits

Author SHA1 Message Date
4ec5683cca fix(deploy): allow public access to /assets path for Next.js Image Optimizer loopback
All checks were successful
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) Successful in 2m9s
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" TARGET="testing"
IMAGE_TAG="main-${SHORT_SHA}" IMAGE_TAG="main-${SHORT_SHA}"
ENV_FILE=".env.testing" ENV_FILE=".env.testing"
TRAEFIK_HOST="test.${DOMAIN}" TRAEFIK_HOST="test.${DOMAIN}, testing.${DOMAIN}"
elif [[ "${{ github.ref_type }}" == "tag" ]]; then elif [[ "${{ github.ref_type }}" == "tag" ]]; then
if [[ "$REF" =~ ^v[0-9]+\.[0-9]+\.[0-9]+$ ]]; then if [[ "$REF" =~ ^v[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
TARGET="production" TARGET="production"

View File

@@ -9,7 +9,7 @@ layout: "fullBleed"
badge="Karriere" badge="Karriere"
title="Zukunft bauen" 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." 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" linkText="Offene Stellen"
linkHref="#stellen" linkHref="#stellen"
/> />

View File

@@ -9,7 +9,7 @@ layout: "fullBleed"
badge="Unsere Leistungen" badge="Unsere Leistungen"
title="Alles aus einer Hand" title="Alles aus einer Hand"
description="Als Full-Service-Partner im Bereich Kabelleitungstiefbau decken wir das gesamte Spektrum moderner Infrastrukturprojekte ab." 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" linkText="Kontakt aufnehmen"
linkHref="/de/kontakt" linkHref="/de/kontakt"
secondaryCtaLabel="Referenzen ansehen" secondaryCtaLabel="Referenzen ansehen"

View File

@@ -9,7 +9,7 @@ layout: "fullBleed"
badge="Events" badge="Events"
title="Treffen Sie uns\nvor Ort" 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." 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" linkText="Zu den Terminen"
linkHref="#termine" linkHref="#termine"
/> />

View File

@@ -9,7 +9,7 @@ layout: "fullBleed"
badge="Careers" badge="Careers"
title="Build the Future\nwith Us" 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." 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" linkText="View Open Positions"
linkHref="#jobs" linkHref="#jobs"
/> />

View File

@@ -9,7 +9,7 @@ layout: "fullBleed"
badge="Competencies" badge="Competencies"
title="Everything from a\nsingle source" 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." 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" linkText="Get in Touch"
linkHref="/en/kontakt" linkHref="/en/kontakt"
/> />

View File

@@ -9,7 +9,7 @@ layout: "fullBleed"
badge="Events" badge="Events"
title="Meet us\nin person" 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." 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" linkText="View dates"
linkHref="#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}" - "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) # 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.entrypoints=${TRAEFIK_ENTRYPOINT:-web}"
- "traefik.http.routers.${PROJECT_NAME:-klz}-public.tls.certresolver=${TRAEFIK_CERT_RESOLVER:-}" - "traefik.http.routers.${PROJECT_NAME:-klz}-public.tls.certresolver=${TRAEFIK_CERT_RESOLVER:-}"
- "traefik.http.routers.${PROJECT_NAME:-klz}-public.tls=${TRAEFIK_TLS:-false}" - "traefik.http.routers.${PROJECT_NAME:-klz}-public.tls=${TRAEFIK_TLS:-false}"
@@ -58,10 +58,9 @@ services:
etib-gatekeeper: etib-gatekeeper:
profiles: [ "gatekeeper" ] profiles: [ "gatekeeper" ]
image: registry.infra.mintel.me/mintel/gatekeeper:latest image: registry.infra.mintel.me/mintel/gatekeeper:testing
restart: unless-stopped restart: unless-stopped
networks: networks:
default:
infra: infra:
aliases: aliases:
- ${PROJECT_NAME:-klz}-gatekeeper - ${PROJECT_NAME:-klz}-gatekeeper
@@ -69,8 +68,6 @@ services:
- ${ENV_FILE:-.env} - ${ENV_FILE:-.env}
environment: environment:
PORT: 3000 PORT: 3000
NODE_TLS_REJECT_UNAUTHORIZED: 0
NODE_ENV: production
labels: labels:
- "traefik.enable=true" - "traefik.enable=true"
- "traefik.http.services.${PROJECT_NAME:-klz}-gatekeeper-svc.loadbalancer.server.port=3000" - "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) { for (const p of pages) {
console.log(`📄 Checking ${p}...`); console.log(`📄 Checking ${p}...`);
const res = await page.goto(`${targetUrl}${p}`, { waitUntil: 'domcontentloaded' }); 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) // 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)); const images = await page.$$eval('img', (imgs) => imgs.map((img) => img.src).filter(Boolean));