Makefile 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153
  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. docker-compose ${DOCKER_COMPOSE_FLAGS}
  11. MODULE_DIRS := $(shell find modules -mindepth 1 -maxdepth 1 -type d -not -name '.git' )
  12. MODULE_MAKEFILES := $(MODULE_DIRS:=/Makefile)
  13. MODULE_NAME=$(shell basename $(MODULE))
  14. LESSC := node_modules/.bin/lessc
  15. CLEANCSS := node_modules/.bin/cleancss
  16. LESS_FILES := $(shell find public/stylesheets -name '*.less')
  17. LESSC_COMMON_FLAGS := --source-map --autoprefix="last 2 versions, ie >= 10"
  18. CLEANCSS_FLAGS := --s0 --source-map
  19. LESS_SL_FILE := public/stylesheets/sl-style.less
  20. CSS_SL_FILE := public/stylesheets/sl-style.css
  21. LESS_OL_FILE := public/stylesheets/style.less
  22. CSS_OL_FILE := public/stylesheets/style.css
  23. LESS_OL_LIGHT_FILE := public/stylesheets/light-style.less
  24. CSS_OL_LIGHT_FILE := public/stylesheets/light-style.css
  25. LESS_OL_IEEE_FILE := public/stylesheets/ieee-style.less
  26. CSS_OL_IEEE_FILE := public/stylesheets/ieee-style.css
  27. CSS_FILES := $(CSS_SL_FILE) $(CSS_OL_FILE) $(CSS_OL_LIGHT_FILE) $(CSS_OL_IEEE_FILE)
  28. public/stylesheets/%.css: $(LESS_FILES)
  29. $(LESSC) $(LESSC_COMMON_FLAGS) $(@D)/$*.less $(@D)/$*.css
  30. css_full: $(CSS_FILES)
  31. css: $(CSS_OL_FILE)
  32. minify: $(CSS_FILES)
  33. $(CLEANCSS) $(CLEANCSS_FLAGS) -o $(CSS_SL_FILE) $(CSS_SL_FILE)
  34. $(CLEANCSS) $(CLEANCSS_FLAGS) -o $(CSS_OL_FILE) $(CSS_OL_FILE)
  35. $(CLEANCSS) $(CLEANCSS_FLAGS) -o $(CSS_OL_LIGHT_FILE) $(CSS_OL_LIGHT_FILE)
  36. $(CLEANCSS) $(CLEANCSS_FLAGS) -o $(CSS_OL_IEEE_FILE) $(CSS_OL_IEEE_FILE)
  37. compile: css
  38. compile_full: css_full
  39. $(MODULE_MAKEFILES): Makefile.module
  40. @set -e; \
  41. for makefile in $(MODULE_MAKEFILES); \
  42. do \
  43. cp Makefile.module $$makefile; \
  44. done
  45. clean:
  46. rm -f public/stylesheets/*.css*
  47. clean_ci:
  48. $(DOCKER_COMPOSE) down -v -t 0
  49. docker container list | grep 'days ago' | cut -d ' ' -f 1 - | xargs -r docker container stop
  50. docker image prune -af --filter "until=48h"
  51. docker network prune -f
  52. test: test_unit test_frontend test_acceptance
  53. test_module: test_unit_module_run test_acceptance_module_run
  54. test_unit:
  55. @[ ! -d test/unit ] && echo "web has no unit tests" || COMPOSE_PROJECT_NAME=unit_test_$(BUILD_DIR_NAME) $(DOCKER_COMPOSE) run --name unit_test_$(BUILD_DIR_NAME) --rm test_unit
  56. test_unit_module: test_unit_module_run
  57. test_unit_module_run:
  58. COMPOSE_PROJECT_NAME=unit_test_$(BUILD_DIR_NAME) $(DOCKER_COMPOSE) run --name unit_test_$(BUILD_DIR_NAME) --rm test_unit bin/unit_test_module $(MODULE_NAME) --grep=$(MOCHA_GREP)
  59. test_unit_app:
  60. npm -q run test:unit:app -- ${MOCHA_ARGS}
  61. test_frontend: compile build_test_frontend test_frontend_run
  62. test_frontend_run:
  63. COMPOSE_PROJECT_NAME=frontend_$(BUILD_DIR_NAME) $(DOCKER_COMPOSE) down -v -t 0
  64. COMPOSE_PROJECT_NAME=frontend_$(BUILD_DIR_NAME) $(DOCKER_COMPOSE) run --rm test_frontend
  65. COMPOSE_PROJECT_NAME=frontend_$(BUILD_DIR_NAME) $(DOCKER_COMPOSE) down -v -t 0
  66. test_frontend_build_run: build_test_frontend test_frontend_run
  67. test_acceptance: test_acceptance_app_run test_acceptance_modules_run
  68. test_acceptance_app: test_acceptance_app_run
  69. test_acceptance_module: test_acceptance_module_run
  70. test_acceptance_run: test_acceptance_app_run test_acceptance_modules_run
  71. test_acceptance_app_run:
  72. COMPOSE_PROJECT_NAME=acceptance_test_$(BUILD_DIR_NAME) $(DOCKER_COMPOSE) down -v -t 0
  73. COMPOSE_PROJECT_NAME=acceptance_test_$(BUILD_DIR_NAME) $(DOCKER_COMPOSE) run --rm test_acceptance npm -q run test:acceptance:run_dir test/acceptance/src
  74. COMPOSE_PROJECT_NAME=acceptance_test_$(BUILD_DIR_NAME) $(DOCKER_COMPOSE) down -v -t 0
  75. test_acceptance_modules_run:
  76. @set -e; \
  77. for dir in $(MODULE_DIRS); \
  78. do \
  79. if [ -e $$dir/test/acceptance ]; then \
  80. $(MAKE) test_acceptance_module_run MODULE=$$dir; \
  81. fi; \
  82. done
  83. test_acceptance_module_run: $(MODULE_MAKEFILES)
  84. @if [ -e modules/$(MODULE_NAME)/test/acceptance ]; then \
  85. COMPOSE_PROJECT_NAME=acceptance_test_$(BUILD_DIR_NAME)_$(MODULE_NAME) $(DOCKER_COMPOSE) down -v -t 0 \
  86. && cd modules/$(MODULE_NAME) && COMPOSE_PROJECT_NAME=acceptance_test_$(BUILD_DIR_NAME)_$(MODULE_NAME) $(MAKE) test_acceptance \
  87. && cd $(CURDIR) && COMPOSE_PROJECT_NAME=acceptance_test_$(BUILD_DIR_NAME)_$(MODULE_NAME) $(DOCKER_COMPOSE) down -v -t 0; \
  88. fi
  89. ci:
  90. MOCHA_ARGS="--reporter tap" \
  91. $(MAKE) test
  92. format:
  93. npm -q run format
  94. format_fix:
  95. npm -q run format:fix
  96. lint:
  97. npm -q run lint
  98. build:
  99. docker build --pull --tag ci/$(PROJECT_NAME):$(BRANCH_NAME)-$(BUILD_NUMBER) \
  100. --tag gcr.io/overleaf-ops/$(PROJECT_NAME):$(BRANCH_NAME)-$(BUILD_NUMBER) \
  101. .
  102. build_test_frontend:
  103. COMPOSE_PROJECT_NAME=frontend_$(BUILD_DIR_NAME) $(DOCKER_COMPOSE) build test_frontend
  104. publish:
  105. docker push $(DOCKER_REPO)/$(PROJECT_NAME):$(BRANCH_NAME)-$(BUILD_NUMBER)
  106. tar:
  107. COMPOSE_PROJECT_NAME=tar_$(BUILD_DIR_NAME) $(DOCKER_COMPOSE) run --rm tar
  108. COMPOSE_PROJECT_NAME=tar_$(BUILD_DIR_NAME) $(DOCKER_COMPOSE) down -v -t 0
  109. .PHONY:
  110. all add install update test test_unit test_frontend test_acceptance \
  111. test_acceptance_start_service test_acceptance_stop_service \
  112. test_acceptance_run ci ci_clean compile clean css