Makefile 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159
  1. DOCKER_COMPOSE_FLAGS ?= -f docker-compose.yml --log-level ERROR
  2. BUILD_NUMBER ?= local
  3. BRANCH_NAME ?= $(shell git rev-parse --abbrev-ref HEAD)
  4. PROJECT_NAME = web
  5. BUILD_DIR_NAME = $(shell pwd | xargs basename | tr -cd '[a-zA-Z0-9_.\-]')
  6. DOCKER_COMPOSE := BUILD_NUMBER=$(BUILD_NUMBER) \
  7. BRANCH_NAME=$(BRANCH_NAME) \
  8. PROJECT_NAME=$(PROJECT_NAME) \
  9. MOCHA_GREP=${MOCHA_GREP} \
  10. SHARELATEX_CONFIG=/app/test/acceptance/config/settings.test.coffee \
  11. docker-compose ${DOCKER_COMPOSE_FLAGS}
  12. MODULE_DIRS := $(shell find modules -mindepth 1 -maxdepth 1 -type d -not -name '.git' )
  13. MODULE_MAKEFILES := $(MODULE_DIRS:=/Makefile)
  14. MODULE_NAME=$(shell basename $(MODULE))
  15. $(MODULE_MAKEFILES): Makefile.module
  16. @set -e; \
  17. for makefile in $(MODULE_MAKEFILES); \
  18. do \
  19. cp Makefile.module $$makefile; \
  20. done
  21. #
  22. # Clean
  23. #
  24. clean_ci:
  25. $(DOCKER_COMPOSE) down -v -t 0
  26. docker container list | grep 'days ago' | cut -d ' ' -f 1 - | xargs -r docker container stop
  27. docker image prune -af --filter "until=48h"
  28. docker network prune -f
  29. #
  30. # Tests
  31. #
  32. test: test_unit test_frontend test_acceptance
  33. test_module: test_unit_module test_acceptance_module
  34. #
  35. # Unit tests
  36. #
  37. test_unit: test_unit_app test_unit_modules
  38. test_unit_app:
  39. COMPOSE_PROJECT_NAME=unit_test_$(BUILD_DIR_NAME) $(DOCKER_COMPOSE) down -v -t 0
  40. COMPOSE_PROJECT_NAME=unit_test_$(BUILD_DIR_NAME) $(DOCKER_COMPOSE) run --name unit_test_$(BUILD_DIR_NAME) --rm test_unit
  41. COMPOSE_PROJECT_NAME=unit_test_$(BUILD_DIR_NAME) $(DOCKER_COMPOSE) down -v -t 0
  42. test_unit_modules:
  43. @set -e; \
  44. for dir in $(MODULE_DIRS); \
  45. do \
  46. if [ -e $$dir/test/unit ]; then \
  47. $(MAKE) test_unit_module MODULE=$$dir; \
  48. fi; \
  49. done
  50. test_unit_module: $(MODULE_MAKEFILES)
  51. @if [ -e modules/$(MODULE_NAME)/test/unit ]; then \
  52. COMPOSE_PROJECT_NAME=unit_test_$(BUILD_DIR_NAME)_$(MODULE_NAME) $(DOCKER_COMPOSE) down -v -t 0 \
  53. && cd modules/$(MODULE_NAME) && COMPOSE_PROJECT_NAME=unit_test_$(BUILD_DIR_NAME)_$(MODULE_NAME) $(MAKE) test_unit \
  54. && cd $(CURDIR) && COMPOSE_PROJECT_NAME=unit_test_$(BUILD_DIR_NAME)_$(MODULE_NAME) $(DOCKER_COMPOSE) down -v -t 0; \
  55. fi
  56. #
  57. # Frontend unit tests
  58. #
  59. test_frontend: compile build_test_frontend test_frontend_run
  60. test_frontend_run:
  61. COMPOSE_PROJECT_NAME=frontend_$(BUILD_DIR_NAME) $(DOCKER_COMPOSE) down -v -t 0
  62. COMPOSE_PROJECT_NAME=frontend_$(BUILD_DIR_NAME) $(DOCKER_COMPOSE) run --rm test_frontend
  63. COMPOSE_PROJECT_NAME=frontend_$(BUILD_DIR_NAME) $(DOCKER_COMPOSE) down -v -t 0
  64. test_frontend_build_run: build_test_frontend test_frontend_run
  65. #
  66. # Acceptance tests
  67. #
  68. test_acceptance: test_acceptance_app test_acceptance_modules
  69. test_acceptance_app:
  70. COMPOSE_PROJECT_NAME=acceptance_test_$(BUILD_DIR_NAME) $(DOCKER_COMPOSE) down -v -t 0
  71. COMPOSE_PROJECT_NAME=acceptance_test_$(BUILD_DIR_NAME) $(DOCKER_COMPOSE) run --rm test_acceptance
  72. COMPOSE_PROJECT_NAME=acceptance_test_$(BUILD_DIR_NAME) $(DOCKER_COMPOSE) down -v -t 0
  73. test_acceptance_modules:
  74. @set -e; \
  75. for dir in $(MODULE_DIRS); \
  76. do \
  77. if [ -e $$dir/test/acceptance ]; then \
  78. $(MAKE) test_acceptance_module MODULE=$$dir; \
  79. fi; \
  80. done
  81. test_acceptance_module: $(MODULE_MAKEFILES)
  82. @if [ -e modules/$(MODULE_NAME)/test/acceptance ]; then \
  83. COMPOSE_PROJECT_NAME=acceptance_test_$(BUILD_DIR_NAME)_$(MODULE_NAME) $(DOCKER_COMPOSE) down -v -t 0 \
  84. && cd modules/$(MODULE_NAME) && COMPOSE_PROJECT_NAME=acceptance_test_$(BUILD_DIR_NAME)_$(MODULE_NAME) $(MAKE) test_acceptance \
  85. && cd $(CURDIR) && COMPOSE_PROJECT_NAME=acceptance_test_$(BUILD_DIR_NAME)_$(MODULE_NAME) $(DOCKER_COMPOSE) down -v -t 0; \
  86. fi
  87. #
  88. # CI tests
  89. #
  90. ci:
  91. MOCHA_ARGS="--reporter tap" \
  92. $(MAKE) test
  93. #
  94. # Lint & format
  95. #
  96. format:
  97. npm -q run format
  98. format_fix:
  99. npm -q run format:fix
  100. lint:
  101. npm -q run lint
  102. #
  103. # Build & publish
  104. #
  105. build:
  106. docker build --pull --tag ci/$(PROJECT_NAME):$(BRANCH_NAME)-$(BUILD_NUMBER) \
  107. --tag gcr.io/overleaf-ops/$(PROJECT_NAME):$(BRANCH_NAME)-$(BUILD_NUMBER) \
  108. --build-arg SENTRY_RELEASE=${COMMIT_SHA} \
  109. --build-arg BRANCH_NAME=$(BRANCH_NAME) \
  110. .
  111. build_test_frontend:
  112. COMPOSE_PROJECT_NAME=frontend_$(BUILD_DIR_NAME) $(DOCKER_COMPOSE) build test_frontend
  113. publish:
  114. docker push $(DOCKER_REPO)/$(PROJECT_NAME):$(BRANCH_NAME)-$(BUILD_NUMBER)
  115. tar:
  116. COMPOSE_PROJECT_NAME=tar_$(BUILD_DIR_NAME) $(DOCKER_COMPOSE) run --rm tar
  117. COMPOSE_PROJECT_NAME=tar_$(BUILD_DIR_NAME) $(DOCKER_COMPOSE) down -v -t 0
  118. .PHONY:
  119. compile_modules compile_modules_full clean_ci \
  120. test test_module test_unit test_unit_app \
  121. test_unit_modules test_unit_module test_frontend test_frontend_run \
  122. test_frontend_build_run test_acceptance test_acceptance_app \
  123. test_acceptance_modules test_acceptance_module ci format format_fix lint \
  124. build build_test_frontend publish tar