Skip to content

Commit 4cf7503

Browse files
committed
Merge remote-tracking branch 'origin/alpha' into feat/issue-3214-admin-stats-declaration-rate
# Conflicts: # packages/app/src/modules/audit/shared/actionKeys.ts # packages/app/src/modules/domain/shared/constants.ts
2 parents 21c36af + 672ac58 commit 4cf7503

128 files changed

Lines changed: 5136 additions & 372 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
kind: ConfigMap
2+
apiVersion: v1
3+
metadata:
4+
name: mail
5+
data:
6+
MAIL_ENABLED: "true"
7+
SMTP_HOST: "maildev"
8+
SMTP_PORT: "1025"
9+
MAIL_FROM: "no-reply@egapro.dev.fabrique.social.gouv.fr"
Lines changed: 94 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,94 @@
1+
apiVersion: apps/v1
2+
kind: Deployment
3+
metadata:
4+
name: maildev
5+
namespace: {{ .Values.global.namespace }}
6+
labels:
7+
app: maildev
8+
spec:
9+
replicas: 1
10+
selector:
11+
matchLabels:
12+
app: maildev
13+
template:
14+
metadata:
15+
labels:
16+
app: maildev
17+
spec:
18+
securityContext:
19+
runAsNonRoot: true
20+
runAsUser: 1000
21+
containers:
22+
- name: maildev
23+
image: maildev/maildev:2.2.1
24+
securityContext:
25+
allowPrivilegeEscalation: false
26+
readOnlyRootFilesystem: true
27+
capabilities:
28+
drop: ["ALL"]
29+
ports:
30+
- name: smtp
31+
containerPort: 1025
32+
- name: web
33+
containerPort: 1080
34+
readinessProbe:
35+
httpGet:
36+
path: /
37+
port: web
38+
initialDelaySeconds: 5
39+
periodSeconds: 10
40+
resources:
41+
requests:
42+
cpu: 10m
43+
memory: 64Mi
44+
limits:
45+
cpu: 200m
46+
memory: 256Mi
47+
volumeMounts:
48+
- name: tmp
49+
mountPath: /tmp
50+
volumes:
51+
- name: tmp
52+
emptyDir: {}
53+
---
54+
apiVersion: v1
55+
kind: Service
56+
metadata:
57+
name: maildev
58+
namespace: {{ .Values.global.namespace }}
59+
spec:
60+
selector:
61+
app: maildev
62+
ports:
63+
- name: smtp
64+
port: 1025
65+
targetPort: smtp
66+
- name: web
67+
port: 1080
68+
targetPort: web
69+
---
70+
apiVersion: networking.k8s.io/v1
71+
kind: Ingress
72+
metadata:
73+
name: maildev
74+
namespace: {{ .Values.global.namespace }}
75+
annotations:
76+
cert-manager.io/cluster-issuer: letsencrypt-prod
77+
nginx.ingress.kubernetes.io/ssl-redirect: "true"
78+
spec:
79+
ingressClassName: nginx
80+
tls:
81+
- hosts:
82+
- maildev-{{ .Values.global.host }}
83+
secretName: maildev-tls
84+
rules:
85+
- host: maildev-{{ .Values.global.host }}
86+
http:
87+
paths:
88+
- path: /
89+
pathType: Prefix
90+
backend:
91+
service:
92+
name: maildev
93+
port:
94+
name: web
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
kind: ConfigMap
2+
apiVersion: v1
3+
metadata:
4+
name: mail
5+
data:
6+
MAIL_ENABLED: "false"
7+
SMTP_HOST: ""
8+
SMTP_PORT: "1025"
9+
MAIL_FROM: "no-reply@egapro.preprod.fabrique.social.gouv.fr"
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
kind: ConfigMap
2+
apiVersion: v1
3+
metadata:
4+
name: mail
5+
data:
6+
MAIL_ENABLED: "false"
7+
SMTP_HOST: ""
8+
SMTP_PORT: "1025"
9+
MAIL_FROM: "no-reply@egapro.travail.gouv.fr"

.kontinuous/values.yaml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,8 @@ app:
2929
name: "s3"
3030
- configMapRef:
3131
name: "clamav"
32+
- configMapRef:
33+
name: "mail"
3234
- configMapRef:
3335
name: "gip-mds"
3436
optional: true

docker-compose.yml

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,17 @@ services:
5757
mc mb --ignore-existing local/egapro-dev-app &&
5858
mc anonymous set none local/egapro-dev-app"
5959
60+
maildev:
61+
image: maildev/maildev:2.2.1
62+
ports:
63+
- "${MAILDEV_SMTP_PORT:-1025}:1025"
64+
- "${MAILDEV_WEB_PORT:-1080}:1080"
65+
healthcheck:
66+
test: ["CMD", "wget", "--spider", "-q", "http://localhost:1080"]
67+
interval: 10s
68+
timeout: 5s
69+
retries: 5
70+
6071
clamavd:
6172
image: clamav/clamav-debian:1.5.2
6273
ports:

packages/app/.env.example

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,3 +24,7 @@ CLAMAV_HOST="localhost"
2424
CLAMAV_PORT="3310"
2525
ADMIN_EMAILS="test@fia1.fr"
2626
EGAPRO_AUDIT_CLEANUP_TOKEN="change-me-to-a-32-chars-minimum-token"
27+
MAIL_ENABLED="true"
28+
SMTP_HOST="localhost"
29+
SMTP_PORT="1025"
30+
MAIL_FROM="no-reply@egapro.local"
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
-- Add optional campaign milestone dates to the per-year campaign_deadline table.
2+
ALTER TABLE "app_campaign_deadline"
3+
ADD COLUMN IF NOT EXISTS "gip_publication_date" date;
4+
--> statement-breakpoint
5+
ALTER TABLE "app_campaign_deadline"
6+
ADD COLUMN IF NOT EXISTS "campaign_start_date" date;
7+
--> statement-breakpoint
8+
9+
-- Create the singleton global_setting table used for platform-wide variables
10+
-- (currently: the active campaign year). Access is gated by adminProcedure.
11+
CREATE TABLE IF NOT EXISTS "app_global_setting" (
12+
"id" integer PRIMARY KEY DEFAULT 1,
13+
"active_campaign_year" integer,
14+
"updated_at" timestamp with time zone NOT NULL DEFAULT now(),
15+
"updated_by" varchar(255) REFERENCES "app_user"("id") ON DELETE SET NULL
16+
);

packages/app/drizzle/meta/_journal.json

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -190,6 +190,13 @@
190190
"when": 1775800000000,
191191
"tag": "0026_add_referents_table",
192192
"breakpoints": true
193+
},
194+
{
195+
"idx": 27,
196+
"version": "7",
197+
"when": 1775900000000,
198+
"tag": "0027_add_global_settings",
199+
"breakpoints": true
193200
}
194201
]
195202
}

packages/app/package.json

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,8 +45,10 @@
4545
"@trpc/server": "^11.16.0",
4646
"drizzle-orm": "^0.45.2",
4747
"exceljs": "^4.4.0",
48+
"html-to-text": "^9.0.5",
4849
"next": "^16.2.3",
4950
"next-auth": "4.24.13",
51+
"nodemailer": "^7.0.13",
5052
"postgres": "^3.4.9",
5153
"react": "^19.2.5",
5254
"react-dom": "^19.2.5",
@@ -65,7 +67,9 @@
6567
"@testing-library/jest-dom": "^6.9.1",
6668
"@testing-library/react": "^16.3.2",
6769
"@testing-library/user-event": "^14.6.1",
70+
"@types/html-to-text": "^9.0.4",
6871
"@types/node": "^25.6.0",
72+
"@types/nodemailer": "^8.0.0",
6973
"@types/react": "^19.2.14",
7074
"@types/react-dom": "^19.2.3",
7175
"@vitejs/plugin-react": "^5.2.0",

0 commit comments

Comments
 (0)