docker-compose.ci.yml 7.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223
  1. # This file was auto-generated, do not edit it directly.
  2. # Instead run bin/update_build_scripts from
  3. # https://github.com/overleaf/internal/
  4. volumes:
  5. minio-certs:
  6. services:
  7. test_unit:
  8. image: ci/$PROJECT_NAME:$BRANCH_NAME-$BUILD_NUMBER
  9. user: node
  10. volumes:
  11. - ./reports:/overleaf/services/filestore/reports
  12. command: npm run test:unit:_run
  13. environment:
  14. CI:
  15. MONGO_CONNECTION_STRING: mongodb://mongo/test-overleaf
  16. NODE_ENV: test
  17. NODE_OPTIONS: "--unhandled-rejections=strict"
  18. test_acceptance:
  19. build: .
  20. image: ci/$PROJECT_NAME:$BRANCH_NAME-$BUILD_NUMBER
  21. environment:
  22. CI:
  23. ELASTIC_SEARCH_DSN: es:9200
  24. MONGO_HOST: mongo
  25. POSTGRES_HOST: postgres
  26. AWS_S3_ENDPOINT: https://minio:9000
  27. AWS_S3_PATH_STYLE: 'true'
  28. DELETE_OBJECTS_MD5_FALLBACK: true
  29. AWS_ACCESS_KEY_ID: OVERLEAF_FILESTORE_S3_ACCESS_KEY_ID
  30. AWS_SECRET_ACCESS_KEY: OVERLEAF_FILESTORE_S3_SECRET_ACCESS_KEY
  31. MINIO_ROOT_USER: MINIO_ROOT_USER
  32. MINIO_ROOT_PASSWORD: MINIO_ROOT_PASSWORD
  33. GCS_API_ENDPOINT: http://gcs:9090
  34. GCS_PROJECT_ID: fake
  35. STORAGE_EMULATOR_HOST: http://gcs:9090/storage/v1
  36. MOCHA_GREP: ${MOCHA_GREP}
  37. NODE_ENV: test
  38. NODE_OPTIONS: "--unhandled-rejections=strict"
  39. ENABLE_CONVERSIONS: "true"
  40. USE_PROM_METRICS: "true"
  41. AWS_S3_USER_FILES_STORAGE_CLASS: REDUCED_REDUNDANCY
  42. AWS_S3_USER_FILES_BUCKET_NAME: fake-user-files
  43. AWS_S3_USER_FILES_DEK_BUCKET_NAME: fake-user-files-dek
  44. AWS_S3_TEMPLATE_FILES_BUCKET_NAME: fake-template-files
  45. GCS_USER_FILES_BUCKET_NAME: fake-gcs-user-files
  46. GCS_TEMPLATE_FILES_BUCKET_NAME: fake-gcs-template-files
  47. volumes:
  48. - ./reports:/overleaf/services/filestore/reports
  49. - minio-certs:/certs
  50. depends_on:
  51. certs:
  52. condition: service_completed_successfully
  53. minio:
  54. condition: service_started
  55. minio_setup:
  56. condition: service_completed_successfully
  57. gcs:
  58. condition: service_healthy
  59. user: node
  60. command: npm run test:acceptance
  61. tar:
  62. build: .
  63. image: ci/$PROJECT_NAME:$BRANCH_NAME-$BUILD_NUMBER
  64. volumes:
  65. - ./:/tmp/build/
  66. command: tar -czf /tmp/build/build.tar.gz --exclude=build.tar.gz --exclude-vcs .
  67. user: root
  68. certs:
  69. build:
  70. dockerfile_inline: |
  71. FROM node:22.18.0
  72. RUN wget -O /certgen "https://github.com/minio/certgen/releases/download/v1.3.0/certgen-linux-"`dpkg --print-architecture`
  73. RUN chmod +x /certgen
  74. volumes:
  75. - minio-certs:/certs
  76. working_dir: /certs
  77. entrypoint: sh
  78. command:
  79. - '-cex'
  80. - |
  81. if [ ! -f private.key ] || [ ! -f public.crt ]; then
  82. /certgen -host minio
  83. fi
  84. minio:
  85. image: minio/minio:RELEASE.2024-10-13T13-34-11Z
  86. command: server /data
  87. volumes:
  88. - minio-certs:/root/.minio/certs
  89. environment:
  90. MINIO_ROOT_USER: MINIO_ROOT_USER
  91. MINIO_ROOT_PASSWORD: MINIO_ROOT_PASSWORD
  92. depends_on:
  93. certs:
  94. condition: service_completed_successfully
  95. minio_setup:
  96. depends_on:
  97. certs:
  98. condition: service_completed_successfully
  99. minio:
  100. condition: service_started
  101. image: minio/mc:RELEASE.2024-10-08T09-37-26Z
  102. volumes:
  103. - minio-certs:/root/.mc/certs/CAs
  104. entrypoint: sh
  105. command:
  106. - '-cex'
  107. - |
  108. sleep 1
  109. mc alias set s3 https://minio:9000 MINIO_ROOT_USER MINIO_ROOT_PASSWORD \
  110. || sleep 3 && \
  111. mc alias set s3 https://minio:9000 MINIO_ROOT_USER MINIO_ROOT_PASSWORD \
  112. || sleep 3 && \
  113. mc alias set s3 https://minio:9000 MINIO_ROOT_USER MINIO_ROOT_PASSWORD \
  114. || sleep 3 && \
  115. mc alias set s3 https://minio:9000 MINIO_ROOT_USER MINIO_ROOT_PASSWORD
  116. mc mb --ignore-existing s3/fake-user-files
  117. mc mb --ignore-existing s3/fake-user-files-dek
  118. mc mb --ignore-existing s3/fake-template-files
  119. mc admin user add s3 \
  120. OVERLEAF_FILESTORE_S3_ACCESS_KEY_ID \
  121. OVERLEAF_FILESTORE_S3_SECRET_ACCESS_KEY
  122. echo '
  123. {
  124. "Version": "2012-10-17",
  125. "Statement": [
  126. {
  127. "Effect": "Allow",
  128. "Action": [
  129. "s3:ListBucket"
  130. ],
  131. "Resource": "arn:aws:s3:::fake-user-files"
  132. },
  133. {
  134. "Effect": "Allow",
  135. "Action": [
  136. "s3:PutObject",
  137. "s3:GetObject",
  138. "s3:DeleteObject",
  139. "s3:AbortMultipartUpload",
  140. "s3:ListMultipartUploadParts",
  141. "s3:ListBucketMultipartUploads"
  142. ],
  143. "Resource": "arn:aws:s3:::fake-user-files/*"
  144. },
  145. {
  146. "Effect": "Allow",
  147. "Action": [
  148. "s3:ListBucket"
  149. ],
  150. "Resource": "arn:aws:s3:::fake-user-files-dek"
  151. },
  152. {
  153. "Effect": "Allow",
  154. "Action": [
  155. "s3:PutObject",
  156. "s3:GetObject",
  157. "s3:DeleteObject",
  158. "s3:AbortMultipartUpload",
  159. "s3:ListMultipartUploadParts",
  160. "s3:ListBucketMultipartUploads"
  161. ],
  162. "Resource": "arn:aws:s3:::fake-user-files-dek/*"
  163. },
  164. {
  165. "Effect": "Allow",
  166. "Action": [
  167. "s3:ListBucket"
  168. ],
  169. "Resource": "arn:aws:s3:::fake-template-files"
  170. },
  171. {
  172. "Effect": "Allow",
  173. "Action": [
  174. "s3:PutObject",
  175. "s3:GetObject",
  176. "s3:DeleteObject",
  177. "s3:AbortMultipartUpload",
  178. "s3:ListMultipartUploadParts",
  179. "s3:ListBucketMultipartUploads"
  180. ],
  181. "Resource": "arn:aws:s3:::fake-template-files/*"
  182. },
  183. {
  184. "Effect": "Allow",
  185. "Action": [
  186. "s3:ListBucket"
  187. ],
  188. "Resource": "arn:aws:s3:::random-bucket-*"
  189. },
  190. {
  191. "Effect": "Allow",
  192. "Action": [
  193. "s3:PutObject",
  194. "s3:GetObject",
  195. "s3:DeleteObject",
  196. "s3:AbortMultipartUpload",
  197. "s3:ListMultipartUploadParts",
  198. "s3:ListBucketMultipartUploads"
  199. ],
  200. "Resource": "arn:aws:s3:::random-bucket-*"
  201. }
  202. ]
  203. }' > policy-filestore.json
  204. mc admin policy create s3 overleaf-filestore policy-filestore.json
  205. mc admin policy attach s3 overleaf-filestore \
  206. --user=OVERLEAF_FILESTORE_S3_ACCESS_KEY_ID
  207. gcs:
  208. image: fsouza/fake-gcs-server:1.52.3
  209. command: ["--port=9090", "--scheme=http", "--external-url=http://gcs:9090"]
  210. healthcheck:
  211. test: wget --quiet --output-document=/dev/null http://localhost:9090/storage/v1/b
  212. interval: 1s
  213. retries: 20