docker-compose.ci.yml 5.6 KB

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