docker-compose.ci.yml 7.0 KB

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