Compare commits
26 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 7e552bbea5 | |||
| 21886a693c | |||
| 45944cbfa7 | |||
| 761c9c956f | |||
| e18559b83c | |||
| 818ccc8fae | |||
| b64b2ccf25 | |||
| e219b3b818 | |||
| 88628ee663 | |||
| 734dd19725 | |||
| 3175b99177 | |||
| 1986280520 | |||
| d4437f5274 | |||
| f09c338d0d | |||
| 91d6073a58 | |||
| c5f2642d05 | |||
| c2bfdc7e7c | |||
| 5625428113 | |||
| 8f9a37466c | |||
| 803ba997df | |||
| 4985ae0315 | |||
| 5c93a51db9 | |||
| 70a312052c | |||
| 0ccc408a8d | |||
| f9f0970f3f | |||
| f463e854fd |
@@ -20,6 +20,7 @@ concurrency:
|
||||
env:
|
||||
PUPPETEER_SKIP_DOWNLOAD: "true"
|
||||
COREPACK_NPM_REGISTRY: "https://registry.npmmirror.com"
|
||||
GIT_HTTP_VERSION: HTTP/1.1
|
||||
|
||||
|
||||
jobs:
|
||||
@@ -49,9 +50,7 @@ jobs:
|
||||
echo "=== Tool Cache Usage ==="
|
||||
du -sh /opt/hostedtoolcache/* || true
|
||||
du -sh /opt/hostedtoolcache/.[!.]* || true
|
||||
echo "Purging old tool caches..."
|
||||
rm -rf /opt/hostedtoolcache/* || true
|
||||
rm -rf /opt/hostedtoolcache/.[!.]* || true
|
||||
echo "Purging old tool caches skipped to prevent runner corruption."
|
||||
echo "=== Host Disk Usage ==="
|
||||
docker run --rm -v /:/host-root alpine df -h || true
|
||||
echo "=== Host Inode Usage ==="
|
||||
@@ -60,23 +59,7 @@ jobs:
|
||||
docker ps --format "table {{.Names}}\t{{.Status}}\t{{.Image}}" || true
|
||||
echo "=== Host Docker Info ==="
|
||||
docker info || true
|
||||
echo "Pruning host Buildkit builder caches aggressively..."
|
||||
for container in $(docker ps --filter "name=buildx_buildkit_builder" --format "{{.Names}}"); do
|
||||
echo "Pruning Buildkit inside container: $container"
|
||||
docker exec -i "$container" buildctl prune --all || true
|
||||
done
|
||||
echo "Removing buildkit builder containers to clear overlay storage..."
|
||||
containers=$(docker ps -a --filter "name=buildx_buildkit_builder" -q)
|
||||
if [ -n "$containers" ]; then
|
||||
docker rm -f $containers || true
|
||||
fi
|
||||
echo "=== Truncating host Docker container log files ==="
|
||||
docker run --rm -v /:/host-root alpine sh -c "truncate -s 0 /host-root/mnt/HC_Volume_104796416/docker/containers/*/*.log" || true
|
||||
echo "Purging old build layers, unused volumes and images..."
|
||||
docker builder prune -a -f || true
|
||||
docker volume prune -f || true
|
||||
docker system prune -a -f --volumes || true
|
||||
echo "=== System Disk Usage After Prune ==="
|
||||
echo "=== System Disk Usage After Check ==="
|
||||
df -h || true
|
||||
|
||||
- name: Checkout repository
|
||||
@@ -112,6 +95,15 @@ jobs:
|
||||
fi
|
||||
else
|
||||
TARGET="branch"
|
||||
|
||||
# Check if this exact commit has a tag. If so, skip the branch deploy
|
||||
# because the tag pipeline will handle the production/staging deploy.
|
||||
git fetch --tags --quiet || true
|
||||
if git describe --tags --exact-match HEAD >/dev/null 2>&1; then
|
||||
echo "Commit has a tag. Skipping branch deployment to favor tag deployment."
|
||||
TARGET="skip"
|
||||
fi
|
||||
|
||||
SLUG=$(echo "$REF" | tr '[:upper:]' '[:lower:]' | sed 's/[^a-z0-9]/-/g' | sed 's/--*/-/g' | sed 's/^-//;s/-$//')
|
||||
IMAGE_TAG="branch-${SLUG}-${SHORT_SHA}"
|
||||
ENV_FILE=".env.branch-${SLUG}"
|
||||
@@ -218,6 +210,13 @@ jobs:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: 🚦 Priority Gate Check
|
||||
env:
|
||||
GITEA_PAT: ${{ secrets.GITEA_PAT }}
|
||||
CURRENT_RUN_ID: ${{ github.run_id }}
|
||||
CURRENT_TARGET: ${{ needs.prepare.outputs.target }}
|
||||
run: bash scripts/priority-gate.sh
|
||||
|
||||
- name: 🔐 Registry Auth
|
||||
id: auth
|
||||
env:
|
||||
@@ -297,6 +296,13 @@ jobs:
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: 🚦 Priority Gate Check
|
||||
env:
|
||||
GITEA_PAT: ${{ secrets.GITEA_PAT }}
|
||||
CURRENT_RUN_ID: ${{ github.run_id }}
|
||||
CURRENT_TARGET: ${{ needs.prepare.outputs.target }}
|
||||
run: bash scripts/priority-gate.sh
|
||||
- name: 📝 Generate Environment
|
||||
shell: bash
|
||||
env:
|
||||
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
2895
.lighthouseci/lhr-1782417685112.html
Normal file
2895
.lighthouseci/lhr-1782417685112.html
Normal file
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
3
.lighthouseci/links.json
Normal file
3
.lighthouseci/links.json
Normal file
@@ -0,0 +1,3 @@
|
||||
{
|
||||
"http://localhost:3000/de": "https://storage.googleapis.com/lighthouse-infrastructure.appspot.com/reports/1782417688223-28941.report.html"
|
||||
}
|
||||
@@ -17,9 +17,10 @@ import { mapFileSlugToTranslated } from '@/lib/slugs';
|
||||
import { cookies } from 'next/headers';
|
||||
|
||||
import { TransitionProvider } from '@/components/providers/TransitionProvider';
|
||||
import { PageTransitionShutter } from '@/components/providers/PageTransitionShutter';
|
||||
import { InitialLoader } from '@/components/providers/InitialLoader';
|
||||
import { CorporateBackground } from '@/components/decorations/CorporateBackground';
|
||||
import { DynamicCorporateBackground as CorporateBackground } from '@/components/decorations/DynamicCorporateBackground';
|
||||
import { DynamicPageTransitionShutter as PageTransitionShutter } from '@/components/providers/DynamicPageTransitionShutter';
|
||||
|
||||
const inter = Inter({
|
||||
subsets: ['latin'],
|
||||
display: 'swap',
|
||||
|
||||
@@ -88,8 +88,9 @@ export function HeroVideo(props: HeroVideoProps) {
|
||||
fill
|
||||
className="object-cover z-[1] pointer-events-none filter contrast-125 saturate-110 brightness-90"
|
||||
sizes="100vw"
|
||||
quality={50}
|
||||
quality={25}
|
||||
priority
|
||||
fetchPriority="high"
|
||||
/>
|
||||
|
||||
{/* Render video on top if available, but defer src to avoid blocking LCP */}
|
||||
|
||||
7
components/decorations/DynamicCorporateBackground.tsx
Normal file
7
components/decorations/DynamicCorporateBackground.tsx
Normal file
@@ -0,0 +1,7 @@
|
||||
'use client';
|
||||
import dynamic from 'next/dynamic';
|
||||
|
||||
export const DynamicCorporateBackground = dynamic(
|
||||
() => import('./CorporateBackground').then(mod => mod.CorporateBackground),
|
||||
{ ssr: false }
|
||||
);
|
||||
7
components/providers/DynamicPageTransitionShutter.tsx
Normal file
7
components/providers/DynamicPageTransitionShutter.tsx
Normal file
@@ -0,0 +1,7 @@
|
||||
'use client';
|
||||
import dynamic from 'next/dynamic';
|
||||
|
||||
export const DynamicPageTransitionShutter = dynamic(
|
||||
() => import('./PageTransitionShutter').then(mod => mod.PageTransitionShutter),
|
||||
{ ssr: false }
|
||||
);
|
||||
@@ -2,7 +2,9 @@
|
||||
|
||||
import React, { createContext, useContext, useState, useCallback, ReactNode, useEffect } from 'react';
|
||||
import { useRouter, usePathname, useSearchParams } from 'next/navigation';
|
||||
import { LazyMotion, domAnimation } from 'framer-motion';
|
||||
import { LazyMotion } from 'framer-motion';
|
||||
|
||||
const loadFeatures = () => import('@/lib/framer-features').then(res => res.default);
|
||||
|
||||
interface TransitionContextType {
|
||||
isTransitioning: boolean;
|
||||
@@ -69,7 +71,7 @@ export function TransitionProvider({ children }: { children: ReactNode }) {
|
||||
setTransitionMessage={setTransitionMessage}
|
||||
/>
|
||||
</React.Suspense>
|
||||
<LazyMotion features={domAnimation}>
|
||||
<LazyMotion features={loadFeatures}>
|
||||
{children}
|
||||
</LazyMotion>
|
||||
</TransitionContext.Provider>
|
||||
|
||||
1
dummy-polyfill.js
Normal file
1
dummy-polyfill.js
Normal file
@@ -0,0 +1 @@
|
||||
export default {};
|
||||
@@ -1,5 +1,5 @@
|
||||
// Sentry initialization move to GlitchtipErrorReportingService to allow lazy-loading
|
||||
// for PageSpeed 100 optimizations. This file is now empty to prevent the SDK
|
||||
// from being included in the initial JS bundle.
|
||||
import * as Sentry from '@sentry/nextjs';
|
||||
export const onRouterTransitionStart = Sentry.captureRouterTransitionStart;
|
||||
|
||||
export {};
|
||||
|
||||
2
lib/empty-polyfill.js
Normal file
2
lib/empty-polyfill.js
Normal file
@@ -0,0 +1,2 @@
|
||||
// Empty polyfill to trick Next.js into not loading legacy polyfills
|
||||
export default {};
|
||||
@@ -139,7 +139,7 @@
|
||||
"prepare": "husky",
|
||||
"preinstall": "npx only-allow pnpm"
|
||||
},
|
||||
"version": "2.2.53",
|
||||
"version": "2.2.68",
|
||||
"pnpm": {
|
||||
"onlyBuiltDependencies": [
|
||||
"@parcel/watcher",
|
||||
@@ -150,15 +150,15 @@
|
||||
],
|
||||
"overrides": {
|
||||
"next": "16.1.6",
|
||||
"minimatch": ">=10.2.2"
|
||||
"minimatch": ">=10.2.2",
|
||||
"framer-motion": "^12.38.0"
|
||||
}
|
||||
},
|
||||
"browserslist": [
|
||||
"last 2 chrome versions",
|
||||
"last 2 firefox versions",
|
||||
"last 2 edge versions",
|
||||
"safari >= 15.4",
|
||||
"not dead"
|
||||
"safari >= 15.4"
|
||||
],
|
||||
"peerDependencies": {
|
||||
"lucide-react": "^0.563.0"
|
||||
|
||||
40
pnpm-lock.yaml
generated
40
pnpm-lock.yaml
generated
@@ -7,6 +7,7 @@ settings:
|
||||
overrides:
|
||||
next: 16.1.6
|
||||
minimatch: '>=10.2.2'
|
||||
framer-motion: ^12.38.0
|
||||
|
||||
importers:
|
||||
|
||||
@@ -52,7 +53,7 @@ importers:
|
||||
specifier: ^2.1.1
|
||||
version: 2.1.1
|
||||
framer-motion:
|
||||
specifier: ^12.34.0
|
||||
specifier: ^12.38.0
|
||||
version: 12.38.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
|
||||
graphql:
|
||||
specifier: ^16.12.0
|
||||
@@ -4843,20 +4844,6 @@ packages:
|
||||
fraction.js@5.3.4:
|
||||
resolution: {integrity: sha512-1X1NTtiJphryn/uLQz3whtY6jK3fTqoE3ohKs0tT+Ujr1W59oopxmoEh7Lu5p6vBaPbgoM0bzveAW4Qi5RyWDQ==}
|
||||
|
||||
framer-motion@11.18.2:
|
||||
resolution: {integrity: sha512-5F5Och7wrvtLVElIpclDT0CBzMVg3dL22B64aZwHtsIY8RB4mXICLrkajK4G9R+ieSAGcgrLeae2SeUTg2pr6w==}
|
||||
peerDependencies:
|
||||
'@emotion/is-prop-valid': '*'
|
||||
react: ^18.0.0 || ^19.0.0
|
||||
react-dom: ^18.0.0 || ^19.0.0
|
||||
peerDependenciesMeta:
|
||||
'@emotion/is-prop-valid':
|
||||
optional: true
|
||||
react:
|
||||
optional: true
|
||||
react-dom:
|
||||
optional: true
|
||||
|
||||
framer-motion@12.38.0:
|
||||
resolution: {integrity: sha512-rFYkY/pigbcswl1XQSb7q424kSTQ8q6eAC+YUsSKooHQYuLdzdHjrt6uxUC+PRAO++q5IS7+TamgIw1AphxR+g==}
|
||||
peerDependencies:
|
||||
@@ -6142,15 +6129,9 @@ packages:
|
||||
module-details-from-path@1.0.4:
|
||||
resolution: {integrity: sha512-EGWKgxALGMgzvxYF1UyGTy0HXX/2vHLkw6+NvDKW2jypWbHpjQuj4UMcqQWXHERJhVGKikolT06G3bcKe4fi7w==}
|
||||
|
||||
motion-dom@11.18.1:
|
||||
resolution: {integrity: sha512-g76KvA001z+atjfxczdRtw/RXOM3OMSdd1f4DL77qCTF/+avrRJiawSG4yDibEQ215sr9kpinSlX2pCTJ9zbhw==}
|
||||
|
||||
motion-dom@12.38.0:
|
||||
resolution: {integrity: sha512-pdkHLD8QYRp8VfiNLb8xIBJis1byQ9gPT3Jnh2jqfFtAsWUA3dEepDlsWe/xMpO8McV+VdpKVcp+E+TGJEtOoA==}
|
||||
|
||||
motion-utils@11.18.1:
|
||||
resolution: {integrity: sha512-49Kt+HKjtbJKLtgO/LKj9Ld+6vw9BjH5d9sc40R/kVyH8GLAXgT42M2NnuPcJNuA3s9ZfZBUcwIgpmZWGEE+hA==}
|
||||
|
||||
motion-utils@12.36.0:
|
||||
resolution: {integrity: sha512-eHWisygbiwVvf6PZ1vhaHCLamvkSbPIeAYxWUuL3a2PD/TROgE7FvfHWTIH4vMl798QLfMw15nRqIaRDXTlYRg==}
|
||||
|
||||
@@ -9246,7 +9227,7 @@ snapshots:
|
||||
dependencies:
|
||||
'@medv/finder': 4.0.2
|
||||
clsx: 2.1.1
|
||||
framer-motion: 11.18.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
|
||||
framer-motion: 12.38.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
|
||||
html2canvas: 1.4.1
|
||||
lucide-react: 0.441.0(react@19.2.4)
|
||||
next: 16.1.6(@babel/core@7.29.0)(@opentelemetry/api@1.9.1)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.98.0)
|
||||
@@ -12941,15 +12922,6 @@ snapshots:
|
||||
|
||||
fraction.js@5.3.4: {}
|
||||
|
||||
framer-motion@11.18.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4):
|
||||
dependencies:
|
||||
motion-dom: 11.18.1
|
||||
motion-utils: 11.18.1
|
||||
tslib: 2.8.1
|
||||
optionalDependencies:
|
||||
react: 19.2.4
|
||||
react-dom: 19.2.4(react@19.2.4)
|
||||
|
||||
framer-motion@12.38.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4):
|
||||
dependencies:
|
||||
motion-dom: 12.38.0
|
||||
@@ -14577,16 +14549,10 @@ snapshots:
|
||||
|
||||
module-details-from-path@1.0.4: {}
|
||||
|
||||
motion-dom@11.18.1:
|
||||
dependencies:
|
||||
motion-utils: 11.18.1
|
||||
|
||||
motion-dom@12.38.0:
|
||||
dependencies:
|
||||
motion-utils: 12.36.0
|
||||
|
||||
motion-utils@11.18.1: {}
|
||||
|
||||
motion-utils@12.36.0: {}
|
||||
|
||||
mri@1.2.0: {}
|
||||
|
||||
@@ -70,7 +70,9 @@ while IFS= read -r run; do
|
||||
elif [ "$CURRENT_PRIO" -lt "$RUN_PRIO" ]; then
|
||||
echo "Current workflow has LOWER priority ($CURRENT_PRIO < $RUN_PRIO). Aborting self."
|
||||
curl -s -X POST -H "Authorization: token $GITEA_PAT" "$API_BASE/$CURRENT_RUN_ID/cancel"
|
||||
exit 1
|
||||
echo "Waiting for Gitea to process cancellation..."
|
||||
sleep 15
|
||||
exit 0
|
||||
else
|
||||
# Equal priority: Newer wins
|
||||
if [ "$CURRENT_RUN_ID" -gt "$RUN_ID" ]; then
|
||||
@@ -79,7 +81,9 @@ while IFS= read -r run; do
|
||||
else
|
||||
echo "Equal priority, but current is older. Aborting self."
|
||||
curl -s -X POST -H "Authorization: token $GITEA_PAT" "$API_BASE/$CURRENT_RUN_ID/cancel"
|
||||
exit 1
|
||||
echo "Waiting for Gitea to process cancellation..."
|
||||
sleep 15
|
||||
exit 0
|
||||
fi
|
||||
fi
|
||||
done <<< "$RUNS"
|
||||
|
||||
9
skip_branch_script.sh
Normal file
9
skip_branch_script.sh
Normal file
@@ -0,0 +1,9 @@
|
||||
if [[ "${{ github.ref_type }}" == "branch" && "${{ github.ref_name }}" != "main" && "${{ github.ref_name }}" != "master" ]]; then
|
||||
# Fetch tags from remote for this specific commit to check if it's being tagged simultaneously
|
||||
TAGS=$(git ls-remote --tags origin | grep "${{ github.sha }}" || true)
|
||||
if [[ -n "$TAGS" ]]; then
|
||||
echo "Dieser Commit hat einen Tag! Überspringe Preview-Deployment, damit der Tag-Deploy Vorrang hat."
|
||||
echo "target=skip" >> $GITHUB_OUTPUT
|
||||
exit 0
|
||||
fi
|
||||
fi
|
||||
Reference in New Issue
Block a user