mirror of
https://github.com/yu-i-i/overleaf-cep.git
synced 2026-05-23 09:09:36 +02:00
* [monorepo] enable caching for eslint/prettier/stylelint * [monorepo] speed up prettier by swapping --list-different for --check --list-different will print each file that it processes. We have a lot of files in the monorepo. Using --check only prints mismatching files. Co-authored-by: Rebeka <rebeka.dekany@overleaf.com> * [monorepo] explicitly configure prettier cache-location This is the default location. Prettier will only discover that location if the top level node_modules folder is writable, which is not the case in CI. We create the .cache folder outside of docker, writable to node inside docker. The proper fix would be in prettier, to only check for write access in the cache folder. Something to raise/upstream another day. * [monorepo] run top-level format/format_fix in a single container With the cache in place, it is much faster to use a single container. As there is a single shared cache file, concurrent processes may see a partially (re-)written cache file and bail out. - all in a single container: 24s - previous with -j4: 41s - previous with -j8: failed due to corrupted cache file --------- Co-authored-by: Rebeka <rebeka.dekany@overleaf.com> GitOrigin-RevId: 7850a3a980ae6c836393d97fe56a6316ffc3fa18
193 lines
7.1 KiB
Makefile
193 lines
7.1 KiB
Makefile
# This file was auto-generated, do not edit it directly.
|
|
# Instead run bin/update_build_scripts from
|
|
# https://github.com/overleaf/internal/
|
|
|
|
BUILD_NUMBER ?= local
|
|
BRANCH_NAME ?= $(shell git rev-parse --abbrev-ref HEAD)
|
|
BRANCH_NAME_TAG_SAFE = $(shell echo $(BRANCH_NAME) | sed 's/\//\-\-/g')
|
|
PROJECT_NAME = filestore
|
|
BUILD_DIR_NAME = $(shell pwd | xargs basename | tr -cd '[a-zA-Z0-9_.\-]')
|
|
HERE=$(shell pwd)
|
|
export MONOREPO ?= $(shell cd ../../ && pwd)
|
|
IMAGE_CI ?= ci/$(PROJECT_NAME):$(BRANCH_NAME_TAG_SAFE)-$(BUILD_NUMBER)
|
|
IMAGE_REPO ?= us-east1-docker.pkg.dev/overleaf-ops/ol-docker/$(PROJECT_NAME)
|
|
IMAGE_REPO_FINAL ?= $(IMAGE_REPO):$(BRANCH_NAME_TAG_SAFE)-$(BUILD_NUMBER)
|
|
IMAGE_CACHE ?= $(IMAGE_REPO):cache-$(shell cat \
|
|
$(MONOREPO)/package.json \
|
|
$(MONOREPO)/package-lock.json \
|
|
$(MONOREPO)/libraries/fetch-utils/package.json \
|
|
$(MONOREPO)/libraries/logger/package.json \
|
|
$(MONOREPO)/libraries/metrics/package.json \
|
|
$(MONOREPO)/libraries/o-error/package.json \
|
|
$(MONOREPO)/libraries/object-persistor/package.json \
|
|
$(MONOREPO)/libraries/settings/package.json \
|
|
$(MONOREPO)/libraries/stream-utils/package.json \
|
|
$(MONOREPO)/services/filestore/package.json \
|
|
$(MONOREPO)/patches/* \
|
|
| sha256sum | cut -d '-' -f1)
|
|
|
|
DOCKER_COMPOSE_FLAGS ?= -f docker-compose.yml
|
|
DOCKER_COMPOSE := BUILD_NUMBER=$(BUILD_NUMBER) \
|
|
BRANCH_NAME=$(BRANCH_NAME_TAG_SAFE) \
|
|
PROJECT_NAME=$(PROJECT_NAME) \
|
|
MOCHA_GREP=${MOCHA_GREP} \
|
|
docker compose ${DOCKER_COMPOSE_FLAGS}
|
|
|
|
COMPOSE_PROJECT_NAME_TEST_ACCEPTANCE ?= test_acceptance_$(BUILD_DIR_NAME)
|
|
DOCKER_COMPOSE_TEST_ACCEPTANCE = \
|
|
COMPOSE_PROJECT_NAME=$(COMPOSE_PROJECT_NAME_TEST_ACCEPTANCE) $(DOCKER_COMPOSE)
|
|
|
|
COMPOSE_PROJECT_NAME_TEST_UNIT ?= test_unit_$(BUILD_DIR_NAME)
|
|
DOCKER_COMPOSE_TEST_UNIT = \
|
|
COMPOSE_PROJECT_NAME=$(COMPOSE_PROJECT_NAME_TEST_UNIT) $(DOCKER_COMPOSE)
|
|
|
|
clean:
|
|
-docker rmi $(IMAGE_CI)
|
|
-docker rmi $(IMAGE_REPO_FINAL)
|
|
-$(DOCKER_COMPOSE_TEST_UNIT) down --remove-orphans --rmi local --timeout 0 --volumes
|
|
-$(DOCKER_COMPOSE_TEST_ACCEPTANCE) down --remove-orphans --rmi local --timeout 0 --volumes
|
|
-rm -rf reports/
|
|
-git clean -dfX uploads template_files
|
|
|
|
# Run the linting commands in the scope of the monorepo.
|
|
# Eslint and prettier (plus some configs) are on the root.
|
|
RUN_LINTING = docker run --rm -v $(MONOREPO):$(MONOREPO) -w $(HERE) --user node node:24.13.0 npm run --silent
|
|
RUN_LINTING_MONOREPO = docker run --rm -v $(MONOREPO):$(MONOREPO) -w $(MONOREPO) --user node node:24.13.0 npm run --silent
|
|
|
|
RUN_LINTING_CI = docker run --rm --volume $(MONOREPO)/.editorconfig:/overleaf/.editorconfig --volume $(MONOREPO)/.eslintignore:/overleaf/.eslintignore --volume $(MONOREPO)/.eslintrc:/overleaf/.eslintrc --volume $(MONOREPO)/.prettierignore:/overleaf/.prettierignore --volume $(MONOREPO)/.prettierrc:/overleaf/.prettierrc --volume $(MONOREPO)/tsconfig.backend.json:/overleaf/tsconfig.backend.json --volume $(MONOREPO)/services/filestore/reports:/overleaf/services/filestore/reports --volume $(MONOREPO)/node_modules/.cache:/overleaf/node_modules/.cache $(IMAGE_CI) npm run --silent
|
|
RUN_LINTING_CI_MONOREPO = docker run --rm --volume $(MONOREPO)/.editorconfig:/overleaf/.editorconfig --volume $(MONOREPO)/.eslintignore:/overleaf/.eslintignore --volume $(MONOREPO)/.eslintrc:/overleaf/.eslintrc --volume $(MONOREPO)/.prettierignore:/overleaf/.prettierignore --volume $(MONOREPO)/.prettierrc:/overleaf/.prettierrc --volume $(MONOREPO)/tsconfig.backend.json:/overleaf/tsconfig.backend.json --volume $(MONOREPO)/services/filestore/reports:/overleaf/services/filestore/reports --volume $(MONOREPO)/node_modules/.cache:/overleaf/node_modules/.cache -w /overleaf $(IMAGE_CI) npm run --silent
|
|
|
|
SHELLCHECK_OPTS = \
|
|
--shell=bash \
|
|
--external-sources
|
|
SHELLCHECK_COLOR := $(if $(CI),--color=never,--color)
|
|
SHELLCHECK_FILES := { git ls-files "*.sh" -z; git grep -Plz "\A\#\!.*bash"; } | sort -zu
|
|
|
|
shellcheck:
|
|
@$(SHELLCHECK_FILES) | xargs -0 -r docker run --rm -v $(HERE):/mnt -w /mnt \
|
|
koalaman/shellcheck:stable $(SHELLCHECK_OPTS) $(SHELLCHECK_COLOR)
|
|
|
|
shellcheck_fix:
|
|
@$(SHELLCHECK_FILES) | while IFS= read -r -d '' file; do \
|
|
diff=$$(docker run --rm -v $(HERE):/mnt -w /mnt koalaman/shellcheck:stable $(SHELLCHECK_OPTS) --format=diff "$$file" 2>/dev/null); \
|
|
if [ -n "$$diff" ] && ! echo "$$diff" | patch -p1 >/dev/null 2>&1; then echo "\033[31m$$file\033[0m"; \
|
|
elif [ -n "$$diff" ]; then echo "$$file"; \
|
|
else echo "\033[2m$$file\033[0m"; fi \
|
|
done
|
|
|
|
WITH_CACHE_FOLDER = \
|
|
lint \
|
|
lint_ci \
|
|
lint_fix \
|
|
format \
|
|
format_ci \
|
|
format_fix \
|
|
typecheck \
|
|
typecheck_ci \
|
|
|
|
$(WITH_CACHE_FOLDER): ../../node_modules/.cache/prettier/
|
|
../../node_modules/.cache/prettier/:
|
|
mkdir -p $@
|
|
|
|
$(WITH_CACHE_FOLDER): ../../node_modules/.cache/eslint/
|
|
../../node_modules/.cache/eslint/:
|
|
mkdir -p $@
|
|
|
|
format:
|
|
$(RUN_LINTING_MONOREPO) format -- services/filestore
|
|
|
|
format_ci:
|
|
$(RUN_LINTING_CI_MONOREPO) format -- services/filestore
|
|
|
|
format_fix:
|
|
$(RUN_LINTING_MONOREPO) format:fix -- services/filestore
|
|
|
|
lint:
|
|
$(RUN_LINTING) lint
|
|
|
|
lint_ci:
|
|
-$(RUN_LINTING_CI) lint -- --format json --output-file reports/eslint.json
|
|
sed -i 's_"filePath":"/overleaf_"filePath":"$(MONOREPO)_g' reports/eslint.json
|
|
|
|
lint_fix:
|
|
$(RUN_LINTING) lint:fix
|
|
|
|
typecheck:
|
|
$(RUN_LINTING) types:check
|
|
|
|
typecheck_ci:
|
|
$(RUN_LINTING_CI) types:check
|
|
|
|
test: format lint typecheck shellcheck test_unit test_acceptance
|
|
|
|
test_unit:
|
|
ifneq (,$(wildcard test/unit))
|
|
$(DOCKER_COMPOSE_TEST_UNIT) run --rm test_unit
|
|
endif
|
|
|
|
test_clean: test_unit_clean
|
|
test_unit_clean:
|
|
ifneq (,$(wildcard test/unit))
|
|
$(DOCKER_COMPOSE_TEST_UNIT) down -v -t 0
|
|
endif
|
|
|
|
test_acceptance: test_acceptance_clean test_acceptance_pre_run test_acceptance_run
|
|
$(MAKE) test_acceptance_clean
|
|
|
|
test_acceptance_debug: test_acceptance_clean test_acceptance_pre_run test_acceptance_run_debug
|
|
$(MAKE) test_acceptance_clean
|
|
|
|
test_acceptance_run:
|
|
ifneq (,$(wildcard test/acceptance))
|
|
$(DOCKER_COMPOSE_TEST_ACCEPTANCE) run --rm test_acceptance
|
|
endif
|
|
|
|
test_acceptance_run_debug:
|
|
ifneq (,$(wildcard test/acceptance))
|
|
$(DOCKER_COMPOSE_TEST_ACCEPTANCE) run -p 127.0.0.9:19999:19999 --rm test_acceptance npm run test:acceptance -- --inspect=0.0.0.0:19999 --inspect-brk
|
|
endif
|
|
|
|
test_clean: test_acceptance_clean
|
|
test_acceptance_clean:
|
|
$(DOCKER_COMPOSE_TEST_ACCEPTANCE) down -v -t 0
|
|
|
|
test_acceptance_pre_run:
|
|
ifneq (,$(wildcard test/acceptance/js/scripts/pre-run))
|
|
$(DOCKER_COMPOSE_TEST_ACCEPTANCE) run --rm test_acceptance test/acceptance/js/scripts/pre-run
|
|
endif
|
|
|
|
benchmarks:
|
|
$(DOCKER_COMPOSE_TEST_ACCEPTANCE) run --rm test_acceptance npm run benchmarks
|
|
|
|
build:
|
|
docker build \
|
|
--pull \
|
|
--build-arg BUILDKIT_INLINE_CACHE=1 \
|
|
--tag $(IMAGE_CI) \
|
|
--tag $(IMAGE_CACHE) \
|
|
--tag $(IMAGE_REPO_FINAL) \
|
|
--cache-from $(IMAGE_CACHE) \
|
|
--file Dockerfile \
|
|
../..
|
|
|
|
tar:
|
|
$(DOCKER_COMPOSE) up tar
|
|
|
|
push:
|
|
docker push $(IMAGE_REPO_FINAL)
|
|
|
|
push_branch:
|
|
docker push $(IMAGE_CACHE)
|
|
|
|
.PHONY: clean \
|
|
format format_fix \
|
|
lint lint_fix \
|
|
build_types typecheck \
|
|
lint_ci format_ci typecheck_ci \
|
|
shellcheck shellcheck_fix \
|
|
test test_clean test_unit test_unit_clean \
|
|
test_acceptance test_acceptance_debug test_acceptance_pre_run \
|
|
test_acceptance_run test_acceptance_run_debug test_acceptance_clean \
|
|
benchmarks \
|
|
build tar publish \
|