Compare commits
2 Commits
eeb0920afd
...
v1.15.17
| Author | SHA1 | Date | |
|---|---|---|---|
| 7d6d34dd7b | |||
| 1f0de18755 |
@@ -154,6 +154,16 @@ jobs:
|
|||||||
run: |
|
run: |
|
||||||
echo "${{ secrets.REGISTRY_PASS }}" | docker login registry.infra.mintel.me -u "${{ secrets.REGISTRY_USER }}" --password-stdin
|
echo "${{ secrets.REGISTRY_PASS }}" | docker login registry.infra.mintel.me -u "${{ secrets.REGISTRY_USER }}" --password-stdin
|
||||||
|
|
||||||
|
- name: Clean runner
|
||||||
|
run: |
|
||||||
|
echo "Disk space before prune:"
|
||||||
|
df -h
|
||||||
|
docker system prune -af --volumes
|
||||||
|
docker builder prune -af
|
||||||
|
echo "Disk space after prune:"
|
||||||
|
df -h
|
||||||
|
continue-on-error: true
|
||||||
|
|
||||||
- name: 🏗️ Build and Push
|
- name: 🏗️ Build and Push
|
||||||
uses: docker/build-push-action@v5
|
uses: docker/build-push-action@v5
|
||||||
with:
|
with:
|
||||||
|
|||||||
11
Dockerfile
11
Dockerfile
@@ -72,17 +72,14 @@ WORKDIR /app
|
|||||||
|
|
||||||
# Copy standalone output and static files (Monorepo paths)
|
# Copy standalone output and static files (Monorepo paths)
|
||||||
# Note: Base image already handles the non-root user and basic env
|
# Note: Base image already handles the non-root user and basic env
|
||||||
COPY --from=builder /app/apps/web/public ./apps/web/public
|
COPY --from=builder --chown=1001:65533 /app/apps/web/public ./apps/web/public
|
||||||
COPY --from=builder /app/apps/web/.next/standalone ./
|
COPY --from=builder --chown=1001:65533 /app/apps/web/.next/standalone ./
|
||||||
COPY --from=builder /app/apps/web/.next/static ./apps/web/.next/static
|
COPY --from=builder --chown=1001:65533 /app/apps/web/.next/static ./apps/web/.next/static
|
||||||
|
|
||||||
# Explicitly copy Payload dynamically generated importMap.js excluded by Standalone tracing
|
# Explicitly copy Payload dynamically generated importMap.js excluded by Standalone tracing
|
||||||
COPY --from=builder /app/apps/web/app/(payload)/admin/importMap.js ./apps/web/app/(payload)/admin/importMap.js
|
COPY --from=builder --chown=1001:65533 /app/apps/web/app/(payload)/admin/importMap.js ./apps/web/app/(payload)/admin/importMap.js
|
||||||
|
|
||||||
# Fix permissions for the non-root user (Standard uid/gid from base image)
|
# Fix permissions for the non-root user (Standard uid/gid from base image)
|
||||||
# We do this as root before switching users
|
|
||||||
USER root
|
|
||||||
RUN chown -R 1001:65533 /app
|
|
||||||
USER nextjs
|
USER nextjs
|
||||||
|
|
||||||
# Start from the app directory to ensure references solve correctly
|
# Start from the app directory to ensure references solve correctly
|
||||||
|
|||||||
@@ -246,6 +246,7 @@ export function ContactForm({
|
|||||||
onBack={() => setFlow("discovery")} // Can keep, but won't be seen if we hide button
|
onBack={() => setFlow("discovery")} // Can keep, but won't be seen if we hide button
|
||||||
onSubmit={() => handleSubmit()}
|
onSubmit={() => handleSubmit()}
|
||||||
isSubmitting={isSubmitting}
|
isSubmitting={isSubmitting}
|
||||||
|
error={error}
|
||||||
/>
|
/>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -35,6 +35,7 @@ interface DirectMessageFlowProps {
|
|||||||
onBack: () => void;
|
onBack: () => void;
|
||||||
onSubmit: () => void;
|
onSubmit: () => void;
|
||||||
isSubmitting: boolean;
|
isSubmitting: boolean;
|
||||||
|
error?: string | null;
|
||||||
}
|
}
|
||||||
|
|
||||||
export const DirectMessageFlow = ({
|
export const DirectMessageFlow = ({
|
||||||
@@ -57,10 +58,32 @@ export const DirectMessageFlow = ({
|
|||||||
onBack,
|
onBack,
|
||||||
onSubmit,
|
onSubmit,
|
||||||
isSubmitting,
|
isSubmitting,
|
||||||
|
error,
|
||||||
}: DirectMessageFlowProps) => {
|
}: DirectMessageFlowProps) => {
|
||||||
return (
|
return (
|
||||||
<div className="w-full max-w-3xl mx-auto px-4 py-12">
|
<div className="w-full max-w-3xl mx-auto px-4 py-12">
|
||||||
<div className="space-y-12">
|
<div className="space-y-12">
|
||||||
|
{error && (
|
||||||
|
<Reveal width="100%" delay={0.1}>
|
||||||
|
<div className="bg-red-50 border border-red-100 rounded-2xl p-6 flex items-start gap-4 mb-8">
|
||||||
|
<div className="p-2 bg-red-100 rounded-lg text-red-600">
|
||||||
|
<Mail size={20} className="animate-pulse" />
|
||||||
|
</div>
|
||||||
|
<div className="space-y-1">
|
||||||
|
<h3 className="text-red-900 font-bold text-sm uppercase tracking-wider">
|
||||||
|
Übertragungsfehler
|
||||||
|
</h3>
|
||||||
|
<p className="text-red-700/80 font-medium text-base">
|
||||||
|
{error}
|
||||||
|
</p>
|
||||||
|
<div className="mt-2 text-[10px] font-mono text-red-400 uppercase tracking-widest">
|
||||||
|
Status: FEHLER_BEI_SEQUENZ_INIT
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</Reveal>
|
||||||
|
)}
|
||||||
|
|
||||||
<Reveal width="100%" delay={0.2}>
|
<Reveal width="100%" delay={0.2}>
|
||||||
<div className="space-y-4">
|
<div className="space-y-4">
|
||||||
<span className="text-[10px] font-mono text-green-600 uppercase tracking-[0.3em] font-bold">
|
<span className="text-[10px] font-mono text-green-600 uppercase tracking-[0.3em] font-bold">
|
||||||
|
|||||||
@@ -45,11 +45,23 @@ export async function sendEmail({
|
|||||||
subject,
|
subject,
|
||||||
html,
|
html,
|
||||||
}: SendEmailOptions) {
|
}: SendEmailOptions) {
|
||||||
const recipients = to || env.MAIL_RECIPIENTS;
|
let recipients = to || env.MAIL_RECIPIENTS;
|
||||||
|
let from = env.MAIL_FROM;
|
||||||
|
|
||||||
|
if (!from) {
|
||||||
|
from = "info@mintel.me";
|
||||||
|
console.warn("MAIL_FROM is empty. Using fallback: info@mintel.me");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!recipients) {
|
||||||
|
recipients = "marc@mintel.me";
|
||||||
|
console.warn("MAIL_RECIPIENTS is empty. Using fallback: marc@mintel.me");
|
||||||
|
}
|
||||||
|
|
||||||
const transporter = getTransporter();
|
const transporter = getTransporter();
|
||||||
|
|
||||||
const mailOptions = {
|
const mailOptions = {
|
||||||
from: env.MAIL_FROM,
|
from,
|
||||||
to: recipients,
|
to: recipients,
|
||||||
replyTo,
|
replyTo,
|
||||||
subject,
|
subject,
|
||||||
|
|||||||
Reference in New Issue
Block a user