diff --git a/.gitea/workflows/deploy.yml b/.gitea/workflows/deploy.yml
index 9423afba..b85a7334 100644
--- a/.gitea/workflows/deploy.yml
+++ b/.gitea/workflows/deploy.yml
@@ -94,6 +94,8 @@ jobs:
TRAEFIK_RULE="Host(\"$TRAEFIK_HOST\")"
PRIMARY_HOST="$TRAEFIK_HOST"
fi
+
+ GATEKEEPER_HOST="gatekeeper.$PRIMARY_HOST"
{
echo "target=$TARGET"
@@ -101,6 +103,7 @@ jobs:
echo "env_file=$ENV_FILE"
echo "traefik_host=$PRIMARY_HOST"
echo "traefik_rule=$TRAEFIK_RULE"
+ echo "gatekeeper_host=$GATEKEEPER_HOST"
echo "next_public_url=https://$PRIMARY_HOST"
if [[ "$TARGET" == "production" ]]; then
echo "project_name=klz-cablescom"
@@ -231,6 +234,7 @@ jobs:
PROJECT_NAME: ${{ needs.prepare.outputs.project_name }}
NEXT_PUBLIC_BASE_URL: ${{ needs.prepare.outputs.next_public_url }}
TRAEFIK_HOST: ${{ needs.prepare.outputs.traefik_host }}
+ GATEKEEPER_HOST: ${{ needs.prepare.outputs.gatekeeper_host }}
# Secrets mapping (Payload CMS)
PAYLOAD_SECRET: ${{ secrets.PAYLOAD_SECRET || vars.PAYLOAD_SECRET || 'you-need-to-set-a-payload-secret' }}
@@ -282,7 +286,7 @@ jobs:
AUTH_MIDDLEWARE_UNPROTECTED="$STD_MW"
# Gatekeeper Origin
- GATEKEEPER_ORIGIN="$NEXT_PUBLIC_BASE_URL/gatekeeper"
+ GATEKEEPER_ORIGIN="https://$GATEKEEPER_HOST"
{
echo "# Generated by CI - $TARGET"
@@ -318,6 +322,7 @@ jobs:
echo "PROJECT_NAME=$PROJECT_NAME"
printf 'TRAEFIK_HOST_RULE=%s\n' "$TRAEFIK_RULE"
echo "TRAEFIK_HOST=$TRAEFIK_HOST"
+ echo "GATEKEEPER_HOST=$GATEKEEPER_HOST"
echo "TRAEFIK_ENTRYPOINT=websecure"
echo "TRAEFIK_TLS=true"
echo "TRAEFIK_CERT_RESOLVER=le"
@@ -431,7 +436,21 @@ jobs:
- name: Install dependencies
id: deps
run: pnpm install --frozen-lockfile
- - name: 🔍 Install Chromium (for Asset Scan)
+ - name: 📦 Cache APT Packages
+ uses: actions/cache@v4
+ with:
+ path: /var/cache/apt/archives
+ key: apt-cache-${{ runner.os }}-${{ runner.arch }}-chromium
+
+ - name: 💾 Cache Chromium
+ id: cache-chromium
+ uses: actions/cache@v4
+ with:
+ path: /usr/bin/chromium
+ key: ${{ runner.os }}-chromium-native-${{ hashFiles('package.json') }}
+
+ - name: 🔍 Install Chromium (Native & ARM64)
+ if: steps.cache-chromium.outputs.cache-hit != 'true'
run: |
rm -f /etc/apt/apt.conf.d/docker-clean
apt-get update
@@ -502,70 +521,9 @@ jobs:
PUPPETEER_EXECUTABLE_PATH: /usr/bin/chromium
CHROME_PATH: /usr/bin/chromium
run: pnpm check:assets
-
- # ──────────────────────────────────────────────────────────────────────────────
- # JOB 6: Performance & Accessibility (Lighthouse + WCAG)
- # ──────────────────────────────────────────────────────────────────────────────
- performance:
- name: ⚡ Performance & Accessibility
- needs: [prepare, post_deploy_checks]
- continue-on-error: true
- if: needs.post_deploy_checks.result == 'success' && needs.prepare.outputs.target != 'branch'
- runs-on: docker
- container:
- image: catthehacker/ubuntu:act-latest
- steps:
- - name: Checkout repository
- uses: actions/checkout@v4
- - name: Setup pnpm
- uses: pnpm/action-setup@v3
- with:
- version: 10
- - name: Setup Node.js
- uses: actions/setup-node@v4
- with:
- node-version: 20
- - name: 🔐 Registry Auth
- run: |
- echo "@mintel:registry=https://${{ vars.REGISTRY_HOST || 'npm.infra.mintel.me' }}" > .npmrc
- echo "//${{ vars.REGISTRY_HOST || 'npm.infra.mintel.me' }}/:_authToken=${{ secrets.REGISTRY_PASS }}" >> .npmrc
- - name: Install dependencies
- run: pnpm install --frozen-lockfile
- - name: 🔍 Install Chromium (Native & ARM64)
- run: |
- rm -f /etc/apt/apt.conf.d/docker-clean
- apt-get update
- apt-get install -y gnupg wget ca-certificates
-
- # Detect OS
- OS_ID=$(. /etc/os-release && echo $ID)
- CODENAME=$(. /etc/os-release && echo $VERSION_CODENAME)
-
- if [ "$OS_ID" = "debian" ]; then
- echo "🎯 Debian detected - installing native chromium"
- apt-get install -y chromium
- else
- echo "🎯 Ubuntu detected - adding xtradeb PPA"
- mkdir -p /etc/apt/keyrings
- KEY_ID="82BB6851C64F6880"
-
- # Fetch PPA key
- wget -qO- "https://keyserver.ubuntu.com/pks/lookup?op=get&search=0x$KEY_ID" | gpg --dearmor > /etc/apt/keyrings/xtradeb.gpg
-
- # Add PPA repository
- echo "deb [signed-by=/etc/apt/keyrings/xtradeb.gpg] http://ppa.launchpad.net/xtradeb/apps/ubuntu $CODENAME main" > /etc/apt/sources.list.d/xtradeb-ppa.list
-
- # PRIORITY PINNING: Force PPA over Snap-dummy
- printf "Package: *\nPin: release o=LP-PPA-xtradeb-apps\nPin-Priority: 1001\n" > /etc/apt/preferences.d/xtradeb
-
- apt-get update
- apt-get install -y --allow-downgrades chromium
- fi
-
- # Standardize binary paths
- [ -f /usr/bin/chromium ] && ln -sf /usr/bin/chromium /usr/bin/google-chrome
- [ -f /usr/bin/chromium ] && ln -sf /usr/bin/chromium /usr/bin/chromium-browser
- name: ⚡ Lighthouse CI
+ if: always() && steps.deps.outcome == 'success'
+ continue-on-error: true
env:
NEXT_PUBLIC_BASE_URL: ${{ needs.prepare.outputs.next_public_url }}
GATEKEEPER_PASSWORD: ${{ secrets.GATEKEEPER_PASSWORD || 'klz2026' }}
@@ -573,6 +531,8 @@ jobs:
PAGESPEED_LIMIT: 8
run: pnpm run pagespeed:test
- name: ♿ WCAG Audit
+ if: always() && steps.deps.outcome == 'success'
+ continue-on-error: true
env:
NEXT_PUBLIC_BASE_URL: ${{ needs.prepare.outputs.next_public_url }}
GATEKEEPER_PASSWORD: ${{ secrets.GATEKEEPER_PASSWORD || 'klz2026' }}
@@ -585,7 +545,7 @@ jobs:
# ──────────────────────────────────────────────────────────────────────────────
notifications:
name: 🔔 Notify
- needs: [prepare, deploy, post_deploy_checks, performance]
+ needs: [prepare, deploy, post_deploy_checks]
if: always()
runs-on: docker
container:
@@ -596,7 +556,7 @@ jobs:
run: |
DEPLOY="${{ needs.deploy.result }}"
SMOKE="${{ needs.post_deploy_checks.result }}"
- PERF="${{ needs.performance.result }}"
+ PERF="${{ needs.post_deploy_checks.result }}"
TARGET="${{ needs.prepare.outputs.target }}"
VERSION="${{ needs.prepare.outputs.image_tag }}"
URL="${{ needs.prepare.outputs.next_public_url }}"
diff --git a/app/[locale]/blog/[slug]/page.tsx b/app/[locale]/blog/[slug]/page.tsx
index 4d4894cf..819a0a19 100644
--- a/app/[locale]/blog/[slug]/page.tsx
+++ b/app/[locale]/blog/[slug]/page.tsx
@@ -105,7 +105,7 @@ export default async function BlogPost({ params }: BlogPostProps) {
{post.frontmatter.title}
-