Jenkinsfile 7.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235
  1. def job_copybara_done = false
  2. def job_npm_install_done = false
  3. def job_prefetch_custom_done = false
  4. def job_prefetch_default_done = false
  5. def job_server_ce_build_done = false
  6. def job_server_pro_build_done = false
  7. pipeline {
  8. agent {
  9. node {
  10. label 'jenkins-agent-web'
  11. customWorkspace '/workspace'
  12. }
  13. }
  14. options {
  15. timestamps()
  16. parallelsAlwaysFailFast()
  17. timeout(time: 15, unit: 'MINUTES')
  18. }
  19. environment {
  20. BRANCH_NAME = "${GIT_BRANCH.replace('origin/', '')}"
  21. COMMIT_SHA = "${GIT_COMMIT}"
  22. SHORT_SHA = "${GIT_COMMIT.take(7)}"
  23. OVERLEAF_BASE_BRANCH = "us-east1-docker.pkg.dev/overleaf-ops/ol-docker/overleaf-base-internal:${BRANCH_NAME}"
  24. OVERLEAF_BASE_LATEST = "us-east1-docker.pkg.dev/overleaf-ops/ol-docker/overleaf-base-internal:main"
  25. OVERLEAF_BASE_TAG = "us-east1-docker.pkg.dev/overleaf-ops/ol-docker/overleaf-base-internal:${BRANCH_NAME}-${SHORT_SHA}_${BUILD_ID}"
  26. OVERLEAF_BRANCH = "us-east1-docker.pkg.dev/overleaf-ops/ol-docker/overleaf-internal:${BRANCH_NAME}"
  27. OVERLEAF_LATEST = "us-east1-docker.pkg.dev/overleaf-ops/ol-docker/overleaf-internal:main"
  28. OVERLEAF_TAG = "us-east1-docker.pkg.dev/overleaf-ops/ol-docker/overleaf-internal:${BRANCH_NAME}-${SHORT_SHA}_${BUILD_ID}"
  29. IMAGE_TAG_CE = "${OVERLEAF_TAG}"
  30. IMAGE_TAG_PRO = "us-east1-docker.pkg.dev/overleaf-ops/ol-docker/pro:main"
  31. }
  32. stages {
  33. stage('Parallel') {
  34. parallel {
  35. stage('Install deps') {
  36. steps {
  37. sh 'make install'
  38. sh 'make -C server-ce/test npm_install_in_docker'
  39. script { job_npm_install_done = true }
  40. }
  41. }
  42. stage('shellcheck') {
  43. steps {
  44. dir('server-ce') {
  45. sh 'make shellcheck'
  46. }
  47. }
  48. }
  49. stage('Format') {
  50. steps {
  51. script { waitUntil { return job_npm_install_done } }
  52. dir('server-ce/test') {
  53. sh 'make format_in_docker'
  54. }
  55. }
  56. }
  57. stage('Copybara') {
  58. steps {
  59. sh 'copybara/bin/sync'
  60. script { job_copybara_done = true }
  61. }
  62. }
  63. stage('Build CE image') {
  64. steps {
  65. script { waitUntil { return job_copybara_done } }
  66. dir('copybara/public/repo/server-ce') {
  67. sh 'make build-base'
  68. sh 'make build-community'
  69. }
  70. script { job_server_ce_build_done = true }
  71. }
  72. }
  73. stage('Push CE to internal') {
  74. steps {
  75. script { waitUntil { return job_server_ce_build_done } }
  76. dir('copybara/public/repo/server-ce') {
  77. sh 'make push'
  78. }
  79. }
  80. }
  81. stage('Build Pro image') {
  82. environment {
  83. OVERLEAF_CE_TAG = "${OVERLEAF_TAG}"
  84. OVERLEAF_PRO_TAG= "${IMAGE_TAG_PRO}"
  85. }
  86. steps {
  87. script { waitUntil { return job_server_ce_build_done } }
  88. dir('server-pro') {
  89. sh 'make build-ci'
  90. }
  91. script { job_server_pro_build_done = true }
  92. }
  93. }
  94. stage('Prefetch default') {
  95. steps {
  96. dir('server-ce/test') {
  97. sh 'make prefetch_default -j4'
  98. }
  99. script { job_prefetch_default_done = true }
  100. }
  101. }
  102. stage('Prefetch custom') {
  103. steps {
  104. dir('server-ce/test') {
  105. sh 'make prefetch_custom -j4'
  106. }
  107. script { job_prefetch_custom_done = true }
  108. }
  109. }
  110. stage('CE default') {
  111. environment {
  112. CYPRESS_SHARD = "CE_DEFAULT"
  113. COMPOSE_PROJECT_NAME = "test-ce-default"
  114. }
  115. steps {
  116. script { waitUntil { return job_npm_install_done && job_server_ce_build_done && job_prefetch_default_done } }
  117. dir('server-ce/test') {
  118. sh 'make test-e2e'
  119. }
  120. }
  121. }
  122. stage('CE custom 1') {
  123. environment {
  124. CYPRESS_SHARD = "CE_CUSTOM_1"
  125. COMPOSE_PROJECT_NAME = "test-ce-custom-1"
  126. }
  127. steps {
  128. script { waitUntil { return job_npm_install_done && job_server_ce_build_done && job_prefetch_default_done && job_prefetch_custom_done } }
  129. dir('server-ce/test') {
  130. sh 'make test-e2e'
  131. }
  132. }
  133. }
  134. stage('PRO default 1') {
  135. environment {
  136. CYPRESS_SHARD = "PRO_DEFAULT_1"
  137. COMPOSE_PROJECT_NAME = "test-pro-default-1"
  138. }
  139. steps {
  140. script { waitUntil { return job_npm_install_done && job_server_pro_build_done && job_prefetch_default_done } }
  141. dir('server-ce/test') {
  142. sh 'make test-e2e'
  143. }
  144. }
  145. }
  146. stage('PRO default 2') {
  147. environment {
  148. CYPRESS_SHARD = "PRO_DEFAULT_2"
  149. COMPOSE_PROJECT_NAME = "test-pro-default-2"
  150. }
  151. steps {
  152. script { waitUntil { return job_npm_install_done && job_server_pro_build_done && job_prefetch_default_done } }
  153. dir('server-ce/test') {
  154. sh 'make test-e2e'
  155. }
  156. }
  157. }
  158. stage('PRO custom 1') {
  159. environment {
  160. CYPRESS_SHARD = "PRO_CUSTOM_1"
  161. COMPOSE_PROJECT_NAME = "test-pro-custom-1"
  162. }
  163. steps {
  164. script { waitUntil { return job_npm_install_done && job_server_pro_build_done && job_prefetch_default_done && job_prefetch_custom_done } }
  165. dir('server-ce/test') {
  166. sh 'make test-e2e'
  167. }
  168. }
  169. }
  170. stage('PRO custom 2') {
  171. environment {
  172. CYPRESS_SHARD = "PRO_CUSTOM_2"
  173. COMPOSE_PROJECT_NAME = "test-pro-custom-2"
  174. }
  175. steps {
  176. script { waitUntil { return job_npm_install_done && job_server_pro_build_done && job_prefetch_default_done && job_prefetch_custom_done } }
  177. dir('server-ce/test') {
  178. sh 'make test-e2e'
  179. }
  180. }
  181. }
  182. stage('PRO custom 3') {
  183. environment {
  184. CYPRESS_SHARD = "PRO_CUSTOM_3"
  185. COMPOSE_PROJECT_NAME = "test-pro-custom-3"
  186. }
  187. steps {
  188. script { waitUntil { return job_npm_install_done && job_server_pro_build_done && job_prefetch_default_done && job_prefetch_custom_done } }
  189. dir('server-ce/test') {
  190. sh 'make test-e2e'
  191. }
  192. }
  193. }
  194. stage('PRO custom 4') {
  195. environment {
  196. CYPRESS_SHARD = "PRO_CUSTOM_4"
  197. COMPOSE_PROJECT_NAME = "test-pro-custom-4"
  198. }
  199. steps {
  200. script { waitUntil { return job_npm_install_done && job_server_pro_build_done && job_prefetch_default_done && job_prefetch_custom_done } }
  201. dir('server-ce/test') {
  202. sh 'make test-e2e'
  203. }
  204. }
  205. }
  206. }
  207. }
  208. }
  209. post {
  210. cleanup {
  211. dir('server-ce/test') {
  212. sh 'make clean'
  213. }
  214. dir('server-ce') {
  215. sh 'make clean'
  216. }
  217. sh 'make clean_jenkins'
  218. }
  219. }
  220. }
  221. // vim: set ft=groovy :