Compare commits
22 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 474672b2a1 | |||
| 7e552bbea5 | |||
| 21886a693c | |||
| 45944cbfa7 | |||
| 761c9c956f | |||
| e18559b83c | |||
| 818ccc8fae | |||
| b64b2ccf25 | |||
| e219b3b818 | |||
| 88628ee663 | |||
| 734dd19725 | |||
| 3175b99177 | |||
| 1986280520 | |||
| d4437f5274 | |||
| f09c338d0d | |||
| 91d6073a58 | |||
| c5f2642d05 | |||
| c2bfdc7e7c | |||
| 5625428113 | |||
| 8f9a37466c | |||
| 803ba997df | |||
| 4985ae0315 |
@@ -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"
|
||||
}
|
||||
@@ -1,6 +1,5 @@
|
||||
'use client';
|
||||
|
||||
import * as Sentry from '@sentry/nextjs';
|
||||
import Error from 'next/error';
|
||||
import { useEffect } from 'react';
|
||||
|
||||
@@ -10,7 +9,9 @@ export default function GlobalError({
|
||||
error: Error & { digest?: string };
|
||||
}) {
|
||||
useEffect(() => {
|
||||
Sentry.captureException(error);
|
||||
import('@sentry/nextjs').then((Sentry) => {
|
||||
Sentry.captureException(error);
|
||||
});
|
||||
}, [error]);
|
||||
|
||||
return (
|
||||
|
||||
48
bundle-stats.json
Normal file
48
bundle-stats.json
Normal file
@@ -0,0 +1,48 @@
|
||||
.next/static/chunks/0b521531212fbb38.js
|
||||
.next/static/chunks/0c4bd4931d57e66a.js
|
||||
.next/static/chunks/114976d6e8233fa6.js
|
||||
.next/static/chunks/163f657a16afbe5e.js
|
||||
.next/static/chunks/1c2f1bc547a6b6db.js
|
||||
.next/static/chunks/2583fa7802927c7b.js
|
||||
.next/static/chunks/30da1bf4e9770388.js
|
||||
.next/static/chunks/38b815a6d50481c3.js
|
||||
.next/static/chunks/3dc2f63532eb2144.js
|
||||
.next/static/chunks/3e327b4e2347bc0f.js
|
||||
.next/static/chunks/3ef3cefd2dae1060.js
|
||||
.next/static/chunks/45499dd88f8aa0be.js
|
||||
.next/static/chunks/4b9828b23c1decfd.js
|
||||
.next/static/chunks/4c801febc70daa53.js
|
||||
.next/static/chunks/4d5ea13dba62fe42.js
|
||||
.next/static/chunks/4dffe404993f353e.js
|
||||
.next/static/chunks/4f185d0c413fdb9e.js
|
||||
.next/static/chunks/4f69e8e09eeae4d6.js
|
||||
.next/static/chunks/4fa8be7f170d31f3.js
|
||||
.next/static/chunks/583b451485662887.js
|
||||
.next/static/chunks/5e1e2d5c357c1b57.js
|
||||
.next/static/chunks/6216b234a7a88a60.js
|
||||
.next/static/chunks/651fbbae0062342b.js
|
||||
.next/static/chunks/66a1b90666fc2830.js
|
||||
.next/static/chunks/6c0ddf2fd63ab912.js
|
||||
.next/static/chunks/72cf73de45fde6cf.js
|
||||
.next/static/chunks/75ea3a278c540e05.js
|
||||
.next/static/chunks/77a84d4dc662b7cf.js
|
||||
.next/static/chunks/7c603cfd5a61abd1.js
|
||||
.next/static/chunks/84ddf763fbc98e13.js
|
||||
.next/static/chunks/885c97d656f95ebd.js
|
||||
.next/static/chunks/8d6ae249fcc5e38f.js
|
||||
.next/static/chunks/920f860e909b2eb8.js
|
||||
.next/static/chunks/951d03271d663d8a.js
|
||||
.next/static/chunks/a094276392fca24a.js
|
||||
.next/static/chunks/a2e7fbe3f294caac.js
|
||||
.next/static/chunks/a6c9d757034eb86a.js
|
||||
.next/static/chunks/a6dc76eec9924929.js
|
||||
.next/static/chunks/c3f21c4df538784a.js
|
||||
.next/static/chunks/c641ee8514fa0552.js
|
||||
.next/static/chunks/d8c0ef20e0ad9790.js
|
||||
.next/static/chunks/e60e6d615bf7d2f5.js
|
||||
.next/static/chunks/e714b6ccaf8d5f12.js
|
||||
.next/static/chunks/eeebcf8c8de1a29a.js
|
||||
.next/static/chunks/f0b47c1f19d25fd2.js
|
||||
.next/static/chunks/f8d5b1a2accefb4c.js
|
||||
.next/static/chunks/fa18a72fd9fb11d5.js
|
||||
.next/static/chunks/turbopack-2aac2a40101e9988.js
|
||||
@@ -3,7 +3,7 @@
|
||||
import React, { useEffect, useState, useCallback, useRef } from 'react';
|
||||
import Image from 'next/image';
|
||||
import { createPortal } from 'react-dom';
|
||||
import { m, LazyMotion, AnimatePresence } from 'framer-motion';
|
||||
import { m, AnimatePresence, LazyMotion } from 'framer-motion';
|
||||
import { useRouter, useSearchParams, usePathname } from 'next/navigation';
|
||||
|
||||
interface LightboxProps {
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import { useState, useEffect, useMemo } from "react";
|
||||
import { AnimatePresence, m, LazyMotion, domAnimation } from 'framer-motion';
|
||||
import { AnimatePresence, m } from 'framer-motion';
|
||||
import { MessageSquare, X, Check, Image as ImageIcon, Type, StickyNote, Download, Trash2, List } from "lucide-react";
|
||||
import { clsx, type ClassValue } from "clsx";
|
||||
import { twMerge } from "tailwind-merge";
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
'use client';
|
||||
|
||||
import * as React from 'react';
|
||||
import { m, LazyMotion, domAnimation, Variants } from 'framer-motion';
|
||||
import { m, Variants } from 'framer-motion';
|
||||
import { HoverShineOverlay } from '@/components/ui/HoverShineOverlay';
|
||||
import { LogoArcs } from '@/components/ui/LogoArcs';
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
'use client';
|
||||
|
||||
import { useState, useEffect } from 'react';
|
||||
import { m, LazyMotion, domAnimation } from 'framer-motion';
|
||||
import { m } from 'framer-motion';
|
||||
import { Container } from '@/components/ui/Container';
|
||||
import { Button } from '@/components/ui/Button';
|
||||
import { HoverShineOverlay } from '@/components/ui/HoverShineOverlay';
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
'use client';
|
||||
|
||||
import * as React from 'react';
|
||||
import { useScroll, useTransform, m, LazyMotion, domAnimation } from 'framer-motion';
|
||||
import { useScroll, useTransform, m } from 'framer-motion';
|
||||
import { Building2, Compass, Layers, ArrowDownToLine, Wrench, Factory, Zap, MapPin, CheckCircle2 } from 'lucide-react';
|
||||
import { useTranslations } from 'next-intl';
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
import Link from 'next/link';
|
||||
import Image from 'next/image';
|
||||
import { m, LazyMotion, domAnimation } from 'framer-motion';
|
||||
import { m } from 'framer-motion';
|
||||
import { useState, useEffect } from 'react';
|
||||
import { Button } from '@/components/ui/Button';
|
||||
import { HoverShineOverlay } from '@/components/ui/HoverShineOverlay';
|
||||
|
||||
@@ -4,7 +4,7 @@ import React, { Suspense } from 'react';
|
||||
import { Section, Container } from '@/components/ui';
|
||||
import { ContactForm } from '@/components/forms/ContactForm';
|
||||
import dynamic from 'next/dynamic';
|
||||
import { m, LazyMotion, domAnimation } from 'framer-motion';
|
||||
import { m } from 'framer-motion';
|
||||
|
||||
const ContactMap = dynamic(() => import('@/components/ContactMap'), {
|
||||
ssr: false,
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
'use client';
|
||||
|
||||
import React from 'react';
|
||||
import { m, LazyMotion, domAnimation } from 'framer-motion';
|
||||
import { m } from 'framer-motion';
|
||||
import { useLocale } from 'next-intl';
|
||||
|
||||
export function DataGridPulse() {
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
'use client';
|
||||
|
||||
import React, { useRef } from 'react';
|
||||
import { useScroll, useTransform, m, LazyMotion, domAnimation } from 'framer-motion';
|
||||
import { useScroll, useTransform, m } from 'framer-motion';
|
||||
import { useLocale } from 'next-intl';
|
||||
|
||||
export function DeepDrillAnimation() {
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
'use client';
|
||||
|
||||
import React from 'react';
|
||||
import { m, LazyMotion, domAnimation } from 'framer-motion';
|
||||
import { m } from 'framer-motion';
|
||||
import { useTranslations } from 'next-intl';
|
||||
|
||||
export function GrowthChart() {
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
import React from 'react';
|
||||
import Image from 'next/image';
|
||||
import { usePathname } from 'next/navigation';
|
||||
import { m, LazyMotion, domAnimation } from 'framer-motion';
|
||||
import { m } from 'framer-motion';
|
||||
import { Badge, Container, Heading } from '@/components/ui';
|
||||
import { Button } from '@/components/ui/Button';
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
'use client';
|
||||
|
||||
import React, { useState, useRef, useCallback, useMemo } from 'react';
|
||||
import { m, LazyMotion, domAnimation, AnimatePresence } from 'framer-motion';
|
||||
import { m, AnimatePresence } from 'framer-motion';
|
||||
import { MapPin, CheckCircle2, ArrowUpRight } from 'lucide-react';
|
||||
import Image from 'next/image';
|
||||
import { usePathname } from 'next/navigation';
|
||||
|
||||
@@ -4,7 +4,7 @@ import React from 'react';
|
||||
import Link from 'next/link';
|
||||
import { Button } from '@/components/ui/Button';
|
||||
import { HoverShineOverlay } from '@/components/ui/HoverShineOverlay';
|
||||
import { m, LazyMotion, domAnimation } from 'framer-motion';
|
||||
import { m } from 'framer-motion';
|
||||
import { useTranslations } from 'next-intl';
|
||||
|
||||
export interface JobListingBlockProps {
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
'use client';
|
||||
|
||||
import * as React from 'react';
|
||||
import { m, LazyMotion, domAnimation } from 'framer-motion';
|
||||
import { m } from 'framer-motion';
|
||||
import Link from 'next/link';
|
||||
import Image from 'next/image';
|
||||
import { HoverShineOverlay } from '@/components/ui/HoverShineOverlay';
|
||||
@@ -127,7 +127,7 @@ export function ReferencesSlider(props: ReferencesSliderProps) {
|
||||
<div className="absolute right-0 top-0 bottom-0 w-16 bg-gradient-to-l from-neutral-dark to-transparent z-20 pointer-events-none" />
|
||||
|
||||
{/* Carousel: centered first card with peek on both sides */}
|
||||
<LazyMotion features={domAnimation}>
|
||||
|
||||
<div
|
||||
ref={containerRef}
|
||||
onMouseDown={onMouseDown}
|
||||
@@ -189,7 +189,7 @@ export function ReferencesSlider(props: ReferencesSliderProps) {
|
||||
})}
|
||||
|
||||
</div>
|
||||
</LazyMotion>
|
||||
|
||||
</div>
|
||||
|
||||
<div className="container relative z-10 mt-4 flex justify-center">
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
'use client';
|
||||
|
||||
import React, { useRef } from 'react';
|
||||
import { useScroll, useTransform, m, LazyMotion, domAnimation } from 'framer-motion';
|
||||
import { useScroll, useTransform, m } from 'framer-motion';
|
||||
import { useLocale } from 'next-intl';
|
||||
|
||||
export function ScaleOfImpact() {
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
'use client';
|
||||
|
||||
import * as React from 'react';
|
||||
import { m, LazyMotion, domAnimation, Variants } from 'framer-motion';
|
||||
import { m, Variants } from 'framer-motion';
|
||||
import { HoverShineOverlay } from '@/components/ui/HoverShineOverlay';
|
||||
|
||||
export interface ServicePanelData {
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
'use client';
|
||||
|
||||
import * as React from 'react';
|
||||
import { m, LazyMotion, domAnimation, Variants } from 'framer-motion';
|
||||
import { m, Variants } from 'framer-motion';
|
||||
import Image from 'next/image';
|
||||
import Link from 'next/link';
|
||||
import { HoverShineOverlay } from '@/components/ui/HoverShineOverlay';
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
import React from 'react';
|
||||
import TrackedLink from '@/components/analytics/TrackedLink';
|
||||
import { getButtonClasses, ButtonOverlay } from '@/components/ui/Button';
|
||||
import { m, LazyMotion, domAnimation } from 'framer-motion';
|
||||
import { m } from 'framer-motion';
|
||||
|
||||
export interface SupportCTAProps {
|
||||
title: string;
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
'use client';
|
||||
|
||||
import * as React from 'react';
|
||||
import { m, LazyMotion, domAnimation } from 'framer-motion';
|
||||
import { m } from 'framer-motion';
|
||||
import Image from 'next/image';
|
||||
import { useTranslations } from 'next-intl';
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
'use client';
|
||||
|
||||
import React, { useRef, useEffect } from 'react';
|
||||
import { useScroll, useTransform, useSpring, m, LazyMotion, domAnimation } from 'framer-motion';
|
||||
import { useScroll, useTransform, useSpring, m } from 'framer-motion';
|
||||
import { LogoArcs } from '@/components/ui/LogoArcs';
|
||||
|
||||
function MagneticRing({
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
'use client';
|
||||
|
||||
import { m, LazyMotion, domAnimation } from 'framer-motion';
|
||||
import { m } from 'framer-motion';
|
||||
import Image from 'next/image';
|
||||
|
||||
export function EUFundingBadge() {
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
'use client';
|
||||
|
||||
import * as React from 'react';
|
||||
import { m, LazyMotion, domAnimation } from 'framer-motion';
|
||||
import { m } from 'framer-motion';
|
||||
import { Button } from '@/components/ui/Button';
|
||||
import { sendContactFormAction } from '@/app/actions/contact';
|
||||
|
||||
|
||||
@@ -4,7 +4,7 @@ import * as React from 'react';
|
||||
import { usePathname } from 'next/navigation';
|
||||
import { TransitionLink } from '@/components/ui/TransitionLink';
|
||||
import { Home, Layers, Star, Mail, Menu } from 'lucide-react';
|
||||
import { m, LazyMotion, domAnimation, AnimatePresence } from 'framer-motion';
|
||||
import { m, AnimatePresence } from 'framer-motion';
|
||||
|
||||
export interface NavLink {
|
||||
label: string;
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
'use client';
|
||||
|
||||
import React, { useEffect, useState } from 'react';
|
||||
import { m, LazyMotion, domAnimation, AnimatePresence } from 'framer-motion';
|
||||
import { m, AnimatePresence } from 'framer-motion';
|
||||
import Image from 'next/image';
|
||||
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
'use client';
|
||||
|
||||
import React from 'react';
|
||||
import { m, LazyMotion, domAnimation, AnimatePresence } from 'framer-motion';
|
||||
import { m, AnimatePresence } from 'framer-motion';
|
||||
import { useTransition } from './TransitionProvider';
|
||||
import Image from 'next/image';
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
'use client';
|
||||
|
||||
import React, { useEffect, useState } from 'react';
|
||||
import { useMotionValue, useTransform, animate, useInView, m, LazyMotion, domAnimation } from 'framer-motion';
|
||||
import { useMotionValue, useTransform, animate, useInView, m } from 'framer-motion';
|
||||
|
||||
interface AnimatedCounterProps {
|
||||
value: number;
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
'use client';
|
||||
|
||||
import { useInView, m, LazyMotion, domAnimation } from 'framer-motion';
|
||||
import { useInView, m } from 'framer-motion';
|
||||
import { useRef } from 'react';
|
||||
|
||||
/**
|
||||
|
||||
@@ -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 {};
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import withMintelConfig from '@mintel/next-config';
|
||||
import { baseNextConfig } from '@mintel/next-config';
|
||||
import withBundleAnalyzer from '@next/bundle-analyzer';
|
||||
import { withSentryConfig } from '@sentry/nextjs';
|
||||
|
||||
@@ -548,14 +548,68 @@ const withAnalyzer = withBundleAnalyzer({
|
||||
enabled: process.env.ANALYZE === 'true',
|
||||
});
|
||||
|
||||
// withMintelConfig internally sets output:'standalone' and wraps with withSentryConfig.
|
||||
// In dev mode, standalone triggers @vercel/nft file tracing on every compile through
|
||||
// VirtioFS, which hammers CPU. Strip it for dev.
|
||||
const withMDX = createMDX({});
|
||||
let resolvedConfig = withMDX(withAnalyzer(withMintelConfig(nextConfig)));
|
||||
let resolvedConfig = withMDX(withAnalyzer(nextConfig));
|
||||
|
||||
// Apply next-intl manually (bypassing withMintelConfig to control Sentry)
|
||||
import createNextIntlPlugin from 'next-intl/plugin';
|
||||
const withNextIntl = createNextIntlPlugin();
|
||||
resolvedConfig = withNextIntl(resolvedConfig);
|
||||
|
||||
resolvedConfig = withSentryConfig(
|
||||
resolvedConfig,
|
||||
{
|
||||
silent: !process.env.CI,
|
||||
treeshake: { removeDebugLogging: true },
|
||||
},
|
||||
{
|
||||
disableClientWebpackPlugin: true,
|
||||
autoInstrumentServerFunctions: false,
|
||||
autoInstrumentMiddleware: false,
|
||||
}
|
||||
);
|
||||
|
||||
// Manually merge baseNextConfig properties
|
||||
const finalConfig = {
|
||||
...baseNextConfig,
|
||||
...resolvedConfig,
|
||||
images: {
|
||||
...baseNextConfig.images,
|
||||
...(resolvedConfig.images || {}),
|
||||
remotePatterns: [
|
||||
...(baseNextConfig.images?.remotePatterns || []),
|
||||
...(resolvedConfig.images?.remotePatterns || [])
|
||||
]
|
||||
},
|
||||
rewrites: async () => {
|
||||
let baseRewrites = [];
|
||||
if (typeof baseNextConfig.rewrites === 'function') {
|
||||
baseRewrites = await baseNextConfig.rewrites();
|
||||
}
|
||||
let configRewrites = { beforeFiles: [], fallback: [], afterFiles: [] };
|
||||
if (typeof resolvedConfig.rewrites === 'function') {
|
||||
const res = await resolvedConfig.rewrites();
|
||||
if (Array.isArray(res)) {
|
||||
configRewrites.fallback = res;
|
||||
} else {
|
||||
configRewrites = res;
|
||||
}
|
||||
}
|
||||
return {
|
||||
beforeFiles: configRewrites.beforeFiles || [],
|
||||
fallback: [
|
||||
...(configRewrites.fallback || []),
|
||||
...baseRewrites
|
||||
],
|
||||
afterFiles: configRewrites.afterFiles || []
|
||||
};
|
||||
}
|
||||
};
|
||||
|
||||
if (!isProd) {
|
||||
delete resolvedConfig.output;
|
||||
delete finalConfig.output;
|
||||
}
|
||||
|
||||
export default resolvedConfig;
|
||||
export default finalConfig;
|
||||
|
||||
@@ -139,7 +139,7 @@
|
||||
"prepare": "husky",
|
||||
"preinstall": "npx only-allow pnpm"
|
||||
},
|
||||
"version": "2.2.56",
|
||||
"version": "2.2.69",
|
||||
"pnpm": {
|
||||
"onlyBuiltDependencies": [
|
||||
"@parcel/watcher",
|
||||
@@ -150,7 +150,8 @@
|
||||
],
|
||||
"overrides": {
|
||||
"next": "16.1.6",
|
||||
"minimatch": ">=10.2.2"
|
||||
"minimatch": ">=10.2.2",
|
||||
"framer-motion": "^12.38.0"
|
||||
}
|
||||
},
|
||||
"browserslist": [
|
||||
|
||||
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