Skip to content

Commit 20553d5

Browse files
authored
feat: implement file upload with S3 storage (#2996)
1 parent 0a40585 commit 20553d5

18 files changed

Lines changed: 1602 additions & 3 deletions

File tree

.github/workflows/e2e.yaml

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,12 +20,17 @@ jobs:
2020
EGAPRO_PROCONNECT_CLIENT_SECRET: ${{ secrets.EGAPRO_PROCONNECT_CLIENT_SECRET }}
2121
EGAPRO_PROCONNECT_ISSUER: ${{ secrets.EGAPRO_PROCONNECT_ISSUER }}
2222
EGAPRO_WEEZ_API_URL: ${{ secrets.EGAPRO_WEEZ_API_URL }}
23-
SKIP_ENV_VALIDATION: "1"
23+
EGAPRO_SUIT_API_URL: ${{ secrets.EGAPRO_SUIT_API_URL }}
24+
S3_ENDPOINT: http://localhost:9000
25+
S3_REGION: us-east-1
26+
S3_ACCESS_KEY_ID: minioadmin
27+
S3_SECRET_ACCESS_KEY: minioadmin
28+
S3_BUCKET_NAME: egapro-dev-app
2429
steps:
2530
- name: Checkout repository
2631
uses: actions/checkout@v4
2732
- name: Start services
28-
run: docker compose up -d db
33+
run: docker compose up -d
2934
- uses: pnpm/action-setup@v4
3035
- name: Set up Node
3136
uses: actions/setup-node@v4
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
kind: ConfigMap
2+
apiVersion: v1
3+
metadata:
4+
name: s3
5+
data:
6+
S3_ENDPOINT: "https://s3.gra.io.cloud.ovh.net"
7+
S3_REGION: "gra"
8+
S3_BUCKET_NAME: "egapro-dev-app"
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
apiVersion: bitnami.com/v1alpha1
2+
kind: SealedSecret
3+
metadata:
4+
annotations:
5+
sealedsecrets.bitnami.com/cluster-wide: 'true'
6+
name: s3
7+
spec:
8+
encryptedData:
9+
S3_ACCESS_KEY_ID: AgCvuM12JZFMjJ8KTDIz3IXXeWj99izf3AJDRE7lJZlYQf0QjpgTbggrpxecnf4R7LWfFDWKj3FZXCJuimYXd0D2YvE7Aylpxj/pLC/AlfUX0UGyvBLoOduR8Wy7wExulu4yTmepApcLktFYKySV9YGG+kxPpIqvtK1BJXZWuJ2gNwwvkGXJufrH/BB3cdtYxaEyx4hrYK0TyN88y6xnl95tX63LHv/0aUI3rFYukn44BOjtBVdYEKNWF8le9wcIFYcvrYqvEeKQ/V5GI8WvByhhwcCiVo8uuG4+S//34L5KXKdocsT1dqStkog6EL+URBhys1PqUIvjexjC1YOPMVrSUrRZ0+lYHt3o0bZ1HTtG3gb/sGrVnaM1XdEHkEVNLtvirYTur/KVcjRlJ2pWMFZP18h0Trd0a8RJOvzlgxIKMpMTg8lgdUfFixqQUMl8dWywWT8PIsDdeZyYamHdm1Bh5svU9/qvfcZBzxtivZ4xErcTG09f0EafupocI0mkzhonPLaoDCWsrVsihubVo5z/6KSxRqDd/1xEv8+I+y+3rrPVn8yPZWxFjjfl8TkSx5kp4FlgwpwTK3YhFtBl8JEv5c0D/1yB6SsyPXa2/6olIe8keQI1sH21NeBxJ5WcnMaq95lSz43c9Q4ZY4oj9nAkYuvFprPDF79Lrei1r9UJ6KCBBYwWQmJecLhzx2522AiQf+S6IorprNPJ3OzI6pHrLs6OX50pwh/oVO6IGKK1JA==
10+
S3_SECRET_ACCESS_KEY: AgCmuD8F6sQ3AJJO4L4RybxBULCIst9LJLhK4C1AvOOoqkG+Ub5rkLJncQXpMpJKjJx/pLmHLfCQyVRVBamMbzZ5ll7KxukMacXHvdP5VxQXsAiM6AH61DyYk0PEXqPvG2YsMLPz4o7y6qs0dTZ7AcBwgX0k1t/uruI+BWenmihv09xH/EEUwZNAG6mmpc6Xw93sXiNOiWMxidBdUyWKTK3yJq6zzDWytVejHTwPztjwx4+GQDs11U5SnXKqnuxEkVDTyHMmwgckdKNkNVGIRf5hborklqYipEznt+2SiQiIwczrEeF/U+ybRx7BvWXjmWUkLfZul12cvgRW/5JwRe8RfYs7KT6sVoGue/Us65WtfGsbjPPMK63QA3gIO4UTX5jDpSL0GkwoQs+fDTcTJIIJMcOAeMUV0fsPyjVvl/ug7BCz8NZncsO6DWeO8GOXtrfrnvNkmDIWk3GXKPapXEzf0ptnmXu0PSf/fow266i6oaQN+R0Z9z/RtiDIY2ztNkbSNHk1xHnKWdznWSMNrNgNsrSSteQSUifvbbaZvI3I57SuD734RfEb3/rs6IWC6PKF8oL2kTlw6284CvKX2Qpu7PWZ7m+LxI5O9s1TQ9czsUR9mQE05HYIDmNlC8beD9AkvYRwpaALyXQ1k35L9wLR9MjxBm/YmQ6SENegtEezU4vrdo2OB4IgxmKCoMbdyJMVRq59UdBCdLjSR9Udogbd0ZMDT14f7b7pQXyTOzmHzw==
11+
template:
12+
metadata:
13+
annotations:
14+
sealedsecrets.bitnami.com/cluster-wide: 'true'
15+
name: s3
16+
type: Opaque
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
kind: ConfigMap
2+
apiVersion: v1
3+
metadata:
4+
name: s3
5+
data:
6+
S3_ENDPOINT: "https://s3.gra.io.cloud.ovh.net"
7+
S3_REGION: "gra"
8+
S3_BUCKET_NAME: "egapro-preprod-app"
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
apiVersion: bitnami.com/v1alpha1
2+
kind: SealedSecret
3+
metadata:
4+
annotations:
5+
sealedsecrets.bitnami.com/cluster-wide: 'true'
6+
name: s3
7+
spec:
8+
encryptedData:
9+
S3_ACCESS_KEY_ID: AgCvuM12JZFMjJ8KTDIz3IXXeWj99izf3AJDRE7lJZlYQf0QjpgTbggrpxecnf4R7LWfFDWKj3FZXCJuimYXd0D2YvE7Aylpxj/pLC/AlfUX0UGyvBLoOduR8Wy7wExulu4yTmepApcLktFYKySV9YGG+kxPpIqvtK1BJXZWuJ2gNwwvkGXJufrH/BB3cdtYxaEyx4hrYK0TyN88y6xnl95tX63LHv/0aUI3rFYukn44BOjtBVdYEKNWF8le9wcIFYcvrYqvEeKQ/V5GI8WvByhhwcCiVo8uuG4+S//34L5KXKdocsT1dqStkog6EL+URBhys1PqUIvjexjC1YOPMVrSUrRZ0+lYHt3o0bZ1HTtG3gb/sGrVnaM1XdEHkEVNLtvirYTur/KVcjRlJ2pWMFZP18h0Trd0a8RJOvzlgxIKMpMTg8lgdUfFixqQUMl8dWywWT8PIsDdeZyYamHdm1Bh5svU9/qvfcZBzxtivZ4xErcTG09f0EafupocI0mkzhonPLaoDCWsrVsihubVo5z/6KSxRqDd/1xEv8+I+y+3rrPVn8yPZWxFjjfl8TkSx5kp4FlgwpwTK3YhFtBl8JEv5c0D/1yB6SsyPXa2/6olIe8keQI1sH21NeBxJ5WcnMaq95lSz43c9Q4ZY4oj9nAkYuvFprPDF79Lrei1r9UJ6KCBBYwWQmJecLhzx2522AiQf+S6IorprNPJ3OzI6pHrLs6OX50pwh/oVO6IGKK1JA==
10+
S3_SECRET_ACCESS_KEY: AgCmuD8F6sQ3AJJO4L4RybxBULCIst9LJLhK4C1AvOOoqkG+Ub5rkLJncQXpMpJKjJx/pLmHLfCQyVRVBamMbzZ5ll7KxukMacXHvdP5VxQXsAiM6AH61DyYk0PEXqPvG2YsMLPz4o7y6qs0dTZ7AcBwgX0k1t/uruI+BWenmihv09xH/EEUwZNAG6mmpc6Xw93sXiNOiWMxidBdUyWKTK3yJq6zzDWytVejHTwPztjwx4+GQDs11U5SnXKqnuxEkVDTyHMmwgckdKNkNVGIRf5hborklqYipEznt+2SiQiIwczrEeF/U+ybRx7BvWXjmWUkLfZul12cvgRW/5JwRe8RfYs7KT6sVoGue/Us65WtfGsbjPPMK63QA3gIO4UTX5jDpSL0GkwoQs+fDTcTJIIJMcOAeMUV0fsPyjVvl/ug7BCz8NZncsO6DWeO8GOXtrfrnvNkmDIWk3GXKPapXEzf0ptnmXu0PSf/fow266i6oaQN+R0Z9z/RtiDIY2ztNkbSNHk1xHnKWdznWSMNrNgNsrSSteQSUifvbbaZvI3I57SuD734RfEb3/rs6IWC6PKF8oL2kTlw6284CvKX2Qpu7PWZ7m+LxI5O9s1TQ9czsUR9mQE05HYIDmNlC8beD9AkvYRwpaALyXQ1k35L9wLR9MjxBm/YmQ6SENegtEezU4vrdo2OB4IgxmKCoMbdyJMVRq59UdBCdLjSR9Udogbd0ZMDT14f7b7pQXyTOzmHzw==
11+
template:
12+
metadata:
13+
annotations:
14+
sealedsecrets.bitnami.com/cluster-wide: 'true'
15+
name: s3
16+
type: Opaque
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
kind: ConfigMap
2+
apiVersion: v1
3+
metadata:
4+
name: s3
5+
data:
6+
S3_ENDPOINT: "https://s3.gra.io.cloud.ovh.net"
7+
S3_REGION: "gra"
8+
S3_BUCKET_NAME: "egapro-prod-app"
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
apiVersion: bitnami.com/v1alpha1
2+
kind: SealedSecret
3+
metadata:
4+
annotations:
5+
sealedsecrets.bitnami.com/namespace-wide: 'true'
6+
name: s3
7+
namespace: egapro
8+
spec:
9+
encryptedData:
10+
S3_ACCESS_KEY_ID: AgBK5bokpB3UTuDmFtw8xMdtjF/imLEYpJNhVHLADg/FdGD0xuZHlW8h70+af3aP+3QazEqS8e6AtwbbIkDnoh8LVTld1QZOvGK8RmtM3ie1h1lG2UTwy1QWraRrLsY4jAVBeoS6nHpxgnKA2LW92SaGBsSRANwlEleV3Mtf7cuVk/sa7hroHxDwAApfG5xxEqQR/1yCyWupCJWSaFjN3rlC8qPjZ8PB4hcY92b9By0NvmFBgXEWQqzJdVvghpyHjbe/YUhusLrfJI6xbowJNNl0F7qY8vH0wNlEvePSLPrlZeNvaBjPD2UAW66aGiilOcz98CEATp6/D66HhFCdZ4xVl/SEqLRNcaZrhaX1fJnMybgPI8/SyRPtubwanCIHlQbJZsj3inhnJDgpz8Lg4Gk6mvzzJkbMN/UciAKP3K9RqoX2LUZaambAUO7t1H8J4CdbfVcgl3pr6Id9N015x+wRvJqGxCQA70RcjCE661gOfnUU5xWUjrfn6MD1TcnCRkCv6LqFQWfzTRQUJKnFUcZSem+p1xSUqiMvnGjXWp4g2Vz3lwpuUj74CDwxfU1hYZkyDmtD4ChQOAQRZ8H800e3s9xkQ1LO1vEILoG0EmWe3acZmDpkS/DMvci2Y16m+Y348cKqL2/U9ys+A9s35cWbeXVaVSRbvMWoGKHfYMtvNzfj9GE04X9TMnfJN1Z2Cy58jq3MfUl3GgPfQ4ioRFfKB04L8vO4kvIYAfA3WIBFyQ==
11+
S3_SECRET_ACCESS_KEY: AgAJrEjoz2aTGcXdB41mfk1hj2n6hANrH/tFZ8h3ruCAzKO3HrQn0VzOnafeID0pojFXzKi+I/FdADA6XHzs13VHjv0e9VgvYNxNa+DRpI8WK+8cPlAzyC9+B2FX/gActypBWJWlQfw/L5ZNScDKLW/xKl/7iNRmayNxEW9xaCyQui6kI1juIBmicjx8RDrwhxBe5rSS7wI2gKILb/Lvv+vmpfObnGAmumooyVZPJpnozBaW0mcdfXd3IGCTK+AVz/evv4tadpGBGNy7JVFF3PMuj4ldYbI1xtrpY7j3WL2LaBoX9BsqdyAPaQTvyd7rhLjPUU3AIeCrmUt+yDfmWlOI3ZllaNm3VaVppqL1Q54d5NgCax1k6DteMNGzBtMCvb7mxaqAdeRia0vb+CnFPqPVACmnruUO45YXqMfyli9SNFjm4S/gIP21ZKQJFzO5SrLG3xpFtwnl8L2sBLAzpvs5c7oVpV8GCr8GAnPhs/7CTvj81qilggxvZ7xNzybUWOo/6rsM39ufVHVAKB0ie0qPDZ+Id+RXwd8Mjwi+aPb7KgDyDk9HoIyQCmTSK3OHgxn4+OiNXpmaVCEcPU63sZ54Lo0bVtaNwkEyn9XTjbFWmMrZfQBGvBY7bBTGWCJxuWTN2avKN4AWkITxmD8oMEjJpezLpk0LjaX9ek2hA4ZwuQSWI/vQJJzEiHFoDaCWVaQtPGvWIMaokvBTSRg6VsCBX3Tqjch866Fo+0JKgSz4Hg==
12+
template:
13+
metadata:
14+
annotations:
15+
sealedsecrets.bitnami.com/namespace-wide: 'true'
16+
name: s3
17+
type: Opaque

.kontinuous/values.yaml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,10 @@ app:
2121
name: "suit"
2222
- secretRef:
2323
name: "next-auth"
24+
- configMapRef:
25+
name: "s3"
26+
- secretRef:
27+
name: "s3"
2428
env:
2529
- name: POSTGRES_HOST
2630
valueFrom:

docker-compose.yml

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,5 +30,33 @@ services:
3030
command: >
3131
sh -c "corepack enable && pnpm --filter app db:push"
3232
33+
minio:
34+
image: minio/minio
35+
ports:
36+
- 9000:9000
37+
- 9001:9001
38+
environment:
39+
MINIO_ROOT_USER: minioadmin
40+
MINIO_ROOT_PASSWORD: minioadmin
41+
volumes:
42+
- miniodata:/data
43+
command: server /data --console-address ":9001"
44+
healthcheck:
45+
test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"]
46+
interval: 5s
47+
timeout: 5s
48+
retries: 5
49+
50+
minio-init:
51+
image: minio/mc
52+
depends_on:
53+
minio:
54+
condition: service_healthy
55+
entrypoint: >
56+
sh -c "mc alias set local http://minio:9000 minioadmin minioadmin &&
57+
mc mb --ignore-existing local/egapro-dev-app &&
58+
mc anonymous set none local/egapro-dev-app"
59+
3360
volumes:
3461
pgdata:
62+
miniodata:

packages/app/.env.example

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,4 +9,10 @@ SENTRY_AUTH_TOKEN=""
99
NEXT_PUBLIC_SENTRY_DSN=""
1010
NEXT_PUBLIC_MATOMO_URL=""
1111
NEXT_PUBLIC_MATOMO_SITE_ID=""
12-
NEXT_PUBLIC_EGAPRO_ENV="dev"
12+
NEXT_PUBLIC_EGAPRO_ENV="dev"
13+
EGAPRO_SUIT_API_URL=""
14+
S3_ENDPOINT="http://localhost:9000"
15+
S3_REGION="us-east-1"
16+
S3_ACCESS_KEY_ID="minioadmin"
17+
S3_SECRET_ACCESS_KEY="minioadmin"
18+
S3_BUCKET_NAME="egapro-dev-app"

0 commit comments

Comments
 (0)