diff --git a/.editorconfig b/.editorconfig index 5438c114ea..eaf034abc8 100644 --- a/.editorconfig +++ b/.editorconfig @@ -19,3 +19,7 @@ indent_style = tab [*.{pug,patch}] trim_trailing_whitespace = false + +[Jenkinsfile] +insert_final_newline = false +max_line_length = off diff --git a/libraries/o-error/.editorconfig b/libraries/o-error/.editorconfig deleted file mode 100644 index 9d08a1a828..0000000000 --- a/libraries/o-error/.editorconfig +++ /dev/null @@ -1,9 +0,0 @@ -root = true - -[*] -charset = utf-8 -indent_style = space -indent_size = 2 -end_of_line = lf -insert_final_newline = true -trim_trailing_whitespace = true diff --git a/libraries/redis-wrapper/.editorconfig b/libraries/redis-wrapper/.editorconfig deleted file mode 100644 index 44f520ec1c..0000000000 --- a/libraries/redis-wrapper/.editorconfig +++ /dev/null @@ -1,11 +0,0 @@ -root = true - -[*] -charset = utf-8 -end_of_line = lf -indent_size = 2 -indent_style = space -insert_final_newline = true -max_line_length = 79 -tab_width = 4 -trim_trailing_whitespace = true diff --git a/libraries/redis-wrapper/index.js b/libraries/redis-wrapper/index.js index ce61f1eea1..57ad9d9891 100644 --- a/libraries/redis-wrapper/index.js +++ b/libraries/redis-wrapper/index.js @@ -95,11 +95,7 @@ async function runCheck(client, uniqueToken, context) { .del(healthCheckKey) .exec() .catch(err => { - throw new RedisHealthCheckVerifyError( - 'read/delete errored', - context, - err - ) + throw new RedisHealthCheckVerifyError('read/delete errored', context, err) }) if (roundTrippedHealthCheckValue !== healthCheckValue) { context.roundTrippedHealthCheckValue = roundTrippedHealthCheckValue diff --git a/package-lock.json b/package-lock.json index 6894e63f3e..6b0743be0b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -56,6 +56,7 @@ "eslint-plugin-promise": "^6.0.0", "eslint-plugin-unicorn": "^56.0.0", "prettier": "3.6.2", + "prettier-plugin-groovy": "0.2.1", "typescript": "^5.8.3" }, "engines": { @@ -41077,6 +41078,19 @@ "node": ">=6.0.0" } }, + "node_modules/prettier-plugin-groovy": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/prettier-plugin-groovy/-/prettier-plugin-groovy-0.2.1.tgz", + "integrity": "sha512-89i4b9nxnQ+KKjl/rSktUA0u1HFCK3HeoqXAaHNpQC8wKjnL/FJ87pRQlDi0nrmGsWRcvGqbD1FaTgSS0EZ44Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=20.0.0 || ^18.12.0" + }, + "peerDependencies": { + "prettier": "^3.3.3" + } + }, "node_modules/pretty-bytes": { "version": "5.6.0", "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.6.0.tgz", diff --git a/package.json b/package.json index 1d52557c87..9b0a015af2 100644 --- a/package.json +++ b/package.json @@ -23,6 +23,7 @@ "eslint-plugin-promise": "^6.0.0", "eslint-plugin-unicorn": "^56.0.0", "prettier": "3.6.2", + "prettier-plugin-groovy": "0.2.1", "typescript": "^5.8.3" }, "engines": { diff --git a/server-ce/.editorconfig b/server-ce/.editorconfig deleted file mode 100644 index 9d08a1a828..0000000000 --- a/server-ce/.editorconfig +++ /dev/null @@ -1,9 +0,0 @@ -root = true - -[*] -charset = utf-8 -indent_style = space -indent_size = 2 -end_of_line = lf -insert_final_newline = true -trim_trailing_whitespace = true diff --git a/server-ce/test/Jenkinsfile b/server-ce/test/Jenkinsfile index cfe96363a7..4c7ccfbd2b 100644 --- a/server-ce/test/Jenkinsfile +++ b/server-ce/test/Jenkinsfile @@ -18,7 +18,6 @@ pipeline { customWorkspace '/workspace' } } - options { // Print timestamp next to each log line. timestamps() @@ -27,12 +26,10 @@ pipeline { retry(3) timeout(time: 15, unit: 'MINUTES') } - environment { BRANCH_NAME = "${GIT_BRANCH.replace('origin/', '')}" COMMIT_SHA = "${GIT_COMMIT}" SHORT_SHA = "${GIT_COMMIT.take(7)}" - OVERLEAF_BASE_BRANCH = "us-east1-docker.pkg.dev/overleaf-ops/ol-docker/overleaf-base-internal:${BRANCH_NAME}" OVERLEAF_BASE_LATEST = "us-east1-docker.pkg.dev/overleaf-ops/ol-docker/overleaf-base-internal:main" OVERLEAF_BASE_TAG = "us-east1-docker.pkg.dev/overleaf-ops/ol-docker/overleaf-base-internal:${BRANCH_NAME}-${SHORT_SHA}_${BUILD_ID}" @@ -42,7 +39,6 @@ pipeline { IMAGE_TAG_CE = "${OVERLEAF_TAG}" IMAGE_TAG_PRO = "us-east1-docker.pkg.dev/overleaf-ops/ol-docker/pro:main" } - stages { // Retries will use the same pipeline instance. Reset the vars. stage('Reset vars') { @@ -63,10 +59,11 @@ pipeline { steps { sh 'make install -j10' sh 'make -C server-ce/test npm_install_in_docker' - script { job_npm_install_done = true } + script { + job_npm_install_done = true + } } } - stage('shellcheck') { steps { dir('server-ce') { @@ -74,62 +71,81 @@ pipeline { } } } - stage('Format') { steps { - script { waitUntil { return job_npm_install_done } } + script { + waitUntil { + return job_npm_install_done + } + } dir('server-ce/test') { sh 'make format_in_docker' } } } - stage('Copybara') { steps { sh 'copybara/bin/sync' - script { job_copybara_done = true } + script { + job_copybara_done = true + } } } - stage('Build CE image') { steps { - script { waitUntil { return job_copybara_done } } + script { + waitUntil { + return job_copybara_done + } + } dir('copybara/public/repo/server-ce') { sh 'make build-base' sh 'make build-community' } - script { job_server_ce_build_done = true } + script { + job_server_ce_build_done = true + } } } stage('Push CE to internal') { steps { - script { waitUntil { return job_server_ce_build_done } } + script { + waitUntil { + return job_server_ce_build_done + } + } dir('copybara/public/repo/server-ce') { sh 'make push' } } } - stage('Build Pro image') { environment { OVERLEAF_CE_TAG = "${OVERLEAF_TAG}" - OVERLEAF_PRO_TAG= "${IMAGE_TAG_PRO}" + OVERLEAF_PRO_TAG = "${IMAGE_TAG_PRO}" } steps { - script { waitUntil { return job_server_ce_build_done } } + script { + waitUntil { + return job_server_ce_build_done + } + } dir('server-pro') { sh 'make build-ci' } - script { job_server_pro_build_done = true } + script { + job_server_pro_build_done = true + } } } - stage('Prefetch default') { steps { dir('server-ce/test') { sh 'make prefetch_default -j4' } - script { job_prefetch_default_done = true } + script { + job_prefetch_default_done = true + } } } stage('Prefetch custom') { @@ -137,17 +153,22 @@ pipeline { dir('server-ce/test') { sh 'make prefetch_custom -j4' } - script { job_prefetch_custom_done = true } + script { + job_prefetch_custom_done = true + } } } - stage('CE default') { environment { CYPRESS_SHARD = "CE_DEFAULT" COMPOSE_PROJECT_NAME = "test-ce-default" } steps { - script { waitUntil { return job_npm_install_done && job_server_ce_build_done && job_prefetch_default_done } } + script { + waitUntil { + return job_npm_install_done && job_server_ce_build_done && job_prefetch_default_done + } + } dir('server-ce/test') { sh 'make test-e2e' } @@ -159,20 +180,27 @@ pipeline { COMPOSE_PROJECT_NAME = "test-ce-custom-1" } steps { - script { waitUntil { return job_npm_install_done && job_server_ce_build_done && job_prefetch_default_done && job_prefetch_custom_done } } + script { + waitUntil { + return job_npm_install_done && job_server_ce_build_done && job_prefetch_default_done && job_prefetch_custom_done + } + } dir('server-ce/test') { sh 'make test-e2e' } } } - stage('PRO default 1') { environment { CYPRESS_SHARD = "PRO_DEFAULT_1" COMPOSE_PROJECT_NAME = "test-pro-default-1" } steps { - script { waitUntil { return job_npm_install_done && job_server_pro_build_done && job_prefetch_default_done } } + script { + waitUntil { + return job_npm_install_done && job_server_pro_build_done && job_prefetch_default_done + } + } dir('server-ce/test') { sh 'make test-e2e' } @@ -184,7 +212,11 @@ pipeline { COMPOSE_PROJECT_NAME = "test-pro-default-2" } steps { - script { waitUntil { return job_npm_install_done && job_server_pro_build_done && job_prefetch_default_done } } + script { + waitUntil { + return job_npm_install_done && job_server_pro_build_done && job_prefetch_default_done + } + } dir('server-ce/test') { sh 'make test-e2e' } @@ -196,7 +228,11 @@ pipeline { COMPOSE_PROJECT_NAME = "test-pro-custom-1" } steps { - script { waitUntil { return job_npm_install_done && job_server_pro_build_done && job_prefetch_default_done && job_prefetch_custom_done } } + script { + waitUntil { + return job_npm_install_done && job_server_pro_build_done && job_prefetch_default_done && job_prefetch_custom_done + } + } dir('server-ce/test') { sh 'make test-e2e' } @@ -208,7 +244,11 @@ pipeline { COMPOSE_PROJECT_NAME = "test-pro-custom-2" } steps { - script { waitUntil { return job_npm_install_done && job_server_pro_build_done && job_prefetch_default_done && job_prefetch_custom_done } } + script { + waitUntil { + return job_npm_install_done && job_server_pro_build_done && job_prefetch_default_done && job_prefetch_custom_done + } + } dir('server-ce/test') { sh 'make test-e2e' } @@ -220,7 +260,11 @@ pipeline { COMPOSE_PROJECT_NAME = "test-pro-custom-3" } steps { - script { waitUntil { return job_npm_install_done && job_server_pro_build_done && job_prefetch_default_done && job_prefetch_custom_done } } + script { + waitUntil { + return job_npm_install_done && job_server_pro_build_done && job_prefetch_default_done && job_prefetch_custom_done + } + } dir('server-ce/test') { sh 'make test-e2e' } @@ -232,7 +276,11 @@ pipeline { COMPOSE_PROJECT_NAME = "test-pro-custom-4" } steps { - script { waitUntil { return job_npm_install_done && job_server_pro_build_done && job_prefetch_default_done && job_prefetch_custom_done } } + script { + waitUntil { + return job_npm_install_done && job_server_pro_build_done && job_prefetch_default_done && job_prefetch_custom_done + } + } dir('server-ce/test') { sh 'make test-e2e' } @@ -255,4 +303,4 @@ pipeline { } } -// vim: set ft=groovy : +// vim: set ft=groovy : \ No newline at end of file diff --git a/server-ce/test/package.json b/server-ce/test/package.json index b29df9c819..52245ec6af 100644 --- a/server-ce/test/package.json +++ b/server-ce/test/package.json @@ -5,8 +5,8 @@ "scripts": { "cypress:open": "cypress open --e2e --browser chrome", "cypress:run": "cypress run --e2e --browser chrome", - "format": "prettier --list-different $PWD/'**/*.{js,mjs,ts,tsx,json}'", - "format:fix": "prettier --write $PWD/'**/*.{js,mjs,ts,tsx,json}'" + "format": "prettier --list-different $PWD/'**/{*.{js,mjs,ts,tsx,json},Jenkinsfile}'", + "format:fix": "prettier --write $PWD/'**/{*.{js,mjs,ts,tsx,json},Jenkinsfile}'" }, "dependencies": { "@isomorphic-git/lightning-fs": "^4.6.0", diff --git a/services/chat/package.json b/services/chat/package.json index e74f09a5d3..35e17a39b6 100644 --- a/services/chat/package.json +++ b/services/chat/package.json @@ -12,8 +12,8 @@ "test:acceptance:_run": "mocha --recursive --reporter spec --timeout 15000 --exit $@ test/acceptance/js", "test:unit:_run": "mocha --recursive --reporter spec --exit $@ test/unit/js", "lint": "eslint --max-warnings 0 --format unix .", - "format": "prettier --list-different $PWD/'**/*.*js'", - "format:fix": "prettier --write $PWD/'**/*.*js'", + "format": "prettier --list-different $PWD/'**/{*.*js,Jenkinsfile}'", + "format:fix": "prettier --write $PWD/'**/{*.*js,Jenkinsfile}'", "lint:fix": "eslint --fix .", "types:check": "tsc --noEmit" }, diff --git a/services/clsi/package.json b/services/clsi/package.json index 4b1db50b0f..d95b65eec9 100644 --- a/services/clsi/package.json +++ b/services/clsi/package.json @@ -11,8 +11,8 @@ "test:unit": "npm run test:unit:_run -- --grep=$MOCHA_GREP", "nodemon": "node --watch app.js", "lint": "eslint --max-warnings 0 --format unix .", - "format": "prettier --list-different $PWD/'**/*.*js'", - "format:fix": "prettier --write $PWD/'**/*.*js'", + "format": "prettier --list-different $PWD/'**/{*.*js,Jenkinsfile}'", + "format:fix": "prettier --write $PWD/'**/{*.*js,Jenkinsfile}'", "lint:fix": "eslint --fix .", "types:check": "tsc --noEmit" }, diff --git a/services/contacts/Jenkinsfile b/services/contacts/Jenkinsfile index 45cdd24f54..70b9885a40 100644 --- a/services/contacts/Jenkinsfile +++ b/services/contacts/Jenkinsfile @@ -1,110 +1,104 @@ pipeline { - - agent { - node { - label 'jenkins-agent-web' - customWorkspace '/workspace' + agent { + node { + label 'jenkins-agent-web' + customWorkspace '/workspace' + } + } + options { + timestamps() + parallelsAlwaysFailFast() + retry(3) + timeout(time: 15, unit: 'MINUTES') + } + environment { + IMAGE_NAME = 'contacts' + PROJECT_NAME = 'contacts' + IMAGE_REPO = 'us-east1-docker.pkg.dev/overleaf-ops/ol-docker/contacts' + AR_REPO_LOCATION = 'us-east1' + AR_URL = 'us-east1-docker.pkg.dev/overleaf-ops/ol-docker' + BRANCH_NAME = "${env.CHANGE_BRANCH ? env.CHANGE_BRANCH : env.BRANCH_NAME}" + JENKINS_BUILD_NUMBER = "${BUILD_NUMBER}" + BUILD_NUMBER = "${SHORT_SHA}_${BUILD_NUMBER}" + DOCKER_COMPOSE_FLAGS = '-f docker-compose.ci.yml' + COMMIT_SHA = "${GIT_COMMIT}" + SHORT_SHA = "${GIT_COMMIT.take(7)}" + } + stages { + stage ('Build') { + steps { + dir ('services/contacts') { + sh 'make build' + } } } - - options { - timestamps() - parallelsAlwaysFailFast() - retry(3) - timeout(time: 15, unit: 'MINUTES') - } - - environment { - IMAGE_NAME = 'contacts' - PROJECT_NAME = 'contacts' - IMAGE_REPO = 'us-east1-docker.pkg.dev/overleaf-ops/ol-docker/contacts' - AR_REPO_LOCATION = 'us-east1' - AR_URL = 'us-east1-docker.pkg.dev/overleaf-ops/ol-docker' - BRANCH_NAME = "${env.CHANGE_BRANCH ? env.CHANGE_BRANCH : env.BRANCH_NAME}" - JENKINS_BUILD_NUMBER = "${BUILD_NUMBER}" - BUILD_NUMBER = "${SHORT_SHA}_${BUILD_NUMBER}" - DOCKER_COMPOSE_FLAGS = '-f docker-compose.ci.yml' - COMMIT_SHA = "${GIT_COMMIT}" - SHORT_SHA = "${GIT_COMMIT.take(7)}" - } - - - stages { - stage ('Build') { - steps { - dir ('services/contacts') { - sh 'make build' - } + stage ('Tests') { + parallel { + stage ('Push Branch Image') { + steps { + dir ('services/contacts') { + sh 'docker push ${AR_URL}/${IMAGE_NAME}:${BRANCH_NAME}' } + } } - stage ('Tests') { - parallel { - stage ('Push Branch Image') { - steps { - dir ('services/contacts') { - sh 'docker push ${AR_URL}/${IMAGE_NAME}:${BRANCH_NAME}' - } - } - } - stage ('Shellcheck') { - steps { - dir ('services/contacts') { - sh 'make shellcheck' - } - } - } - stage ('Lint') { - steps { - dir ('services/contacts') { - sh 'make lint_ci' - } - } - } - stage ('Format') { - steps { - dir ('services/contacts') { - sh 'make format_ci' - } - } - } - stage ('Typecheck') { - steps { - dir ('services/contacts') { - sh 'make typecheck_ci' - } - } - } - stage ('Test Unit') { - steps { - dir ('services/contacts') { - sh 'make test_unit' - } - } - } - stage ('Test Acceptance') { - steps { - dir ('services/contacts') { - sh 'make test_acceptance' - } - } - } + stage ('Shellcheck') { + steps { + dir ('services/contacts') { + sh 'make shellcheck' } + } } - stage('Push Production') { - steps { - dir('services/contacts') { - sh 'docker push ${AR_URL}/${IMAGE_NAME}:${BRANCH_NAME}-${BUILD_NUMBER}' - } + stage ('Lint') { + steps { + dir ('services/contacts') { + sh 'make lint_ci' } + } } + stage ('Format') { + steps { + dir ('services/contacts') { + sh 'make format_ci' + } + } + } + stage ('Typecheck') { + steps { + dir ('services/contacts') { + sh 'make typecheck_ci' + } + } + } + stage ('Test Unit') { + steps { + dir ('services/contacts') { + sh 'make test_unit' + } + } + } + stage ('Test Acceptance') { + steps { + dir ('services/contacts') { + sh 'make test_acceptance' + } + } + } + } } - post { - cleanup { - dir('services/contacts') { - sh 'make clean' - } - sh 'make clean_jenkins' + stage('Push Production') { + steps { + dir('services/contacts') { + sh 'docker push ${AR_URL}/${IMAGE_NAME}:${BRANCH_NAME}-${BUILD_NUMBER}' } + } } -} - + } + post { + cleanup { + dir('services/contacts') { + sh 'make clean' + } + sh 'make clean_jenkins' + } + } +} \ No newline at end of file diff --git a/services/contacts/package.json b/services/contacts/package.json index 81e6285aed..2d09118690 100644 --- a/services/contacts/package.json +++ b/services/contacts/package.json @@ -12,8 +12,8 @@ "test:unit": "npm run test:unit:_run -- --grep=$MOCHA_GREP", "nodemon": "node --watch app.js", "lint": "eslint --max-warnings 0 --format unix .", - "format": "prettier --list-different $PWD/'**/*.*js'", - "format:fix": "prettier --write $PWD/'**/*.*js'", + "format": "prettier --list-different $PWD/'**/{*.*js,Jenkinsfile}'", + "format:fix": "prettier --write $PWD/'**/{*.*js,Jenkinsfile}'", "lint:fix": "eslint --fix .", "types:check": "tsc --noEmit" }, diff --git a/services/docstore/package.json b/services/docstore/package.json index 787d898879..5f87f64300 100644 --- a/services/docstore/package.json +++ b/services/docstore/package.json @@ -11,8 +11,8 @@ "test:unit": "npm run test:unit:_run -- --grep=$MOCHA_GREP", "nodemon": "node --watch app.js", "lint": "eslint --max-warnings 0 --format unix .", - "format": "prettier --list-different $PWD/'**/*.*js'", - "format:fix": "prettier --write $PWD/'**/*.*js'", + "format": "prettier --list-different $PWD/'**/{*.*js,Jenkinsfile}'", + "format:fix": "prettier --write $PWD/'**/{*.*js,Jenkinsfile}'", "lint:fix": "eslint --fix .", "types:check": "tsc --noEmit" }, diff --git a/services/document-updater/package.json b/services/document-updater/package.json index 5a32057496..654db32360 100644 --- a/services/document-updater/package.json +++ b/services/document-updater/package.json @@ -12,8 +12,8 @@ "nodemon": "node --watch app.js", "benchmark:apply": "node benchmarks/apply", "lint": "eslint --max-warnings 0 --format unix .", - "format": "prettier --list-different $PWD/'**/*.*js'", - "format:fix": "prettier --write $PWD/'**/*.*js'", + "format": "prettier --list-different $PWD/'**/{*.*js,Jenkinsfile}'", + "format:fix": "prettier --write $PWD/'**/{*.*js,Jenkinsfile}'", "lint:fix": "eslint --fix .", "types:check": "tsc --noEmit" }, diff --git a/services/filestore/package.json b/services/filestore/package.json index 926381b6b1..b1da2f732d 100644 --- a/services/filestore/package.json +++ b/services/filestore/package.json @@ -11,8 +11,8 @@ "start": "node app.js", "nodemon": "node --watch app.js", "lint": "eslint --max-warnings 0 --format unix .", - "format": "prettier --list-different $PWD/'**/*.*js'", - "format:fix": "prettier --write $PWD/'**/*.*js'", + "format": "prettier --list-different $PWD/'**/{*.*js,Jenkinsfile}'", + "format:fix": "prettier --write $PWD/'**/{*.*js,Jenkinsfile}'", "test:acceptance:_run": "mocha --recursive --reporter spec --timeout 15000 --exit $@ test/acceptance/js", "test:unit:_run": "mocha --recursive --reporter spec --exit $@ test/unit/js", "lint:fix": "eslint --fix .", diff --git a/services/history-v1/package.json b/services/history-v1/package.json index 1156d4b546..0ff9a48793 100644 --- a/services/history-v1/package.json +++ b/services/history-v1/package.json @@ -62,8 +62,8 @@ "start": "node app.js", "lint": "eslint --max-warnings 0 --format unix .", "lint:fix": "eslint --fix .", - "format": "prettier --list-different $PWD/'**/*.*js'", - "format:fix": "prettier --write $PWD/'**/*.*js'", + "format": "prettier --list-different $PWD/'**/{*.*js,Jenkinsfile}'", + "format:fix": "prettier --write $PWD/'**/{*.*js,Jenkinsfile}'", "test:unit": "npm run test:unit:_run -- --grep=$MOCHA_GREP", "test:acceptance": "npm run test:acceptance:_run -- --grep=$MOCHA_GREP", "test:unit:_run": "mocha --recursive --reporter spec --exit $@ test/unit/js", diff --git a/services/notifications/package.json b/services/notifications/package.json index ee8631d20d..a0360515e7 100644 --- a/services/notifications/package.json +++ b/services/notifications/package.json @@ -11,8 +11,8 @@ "test:unit:_run": "vitest ${NO_CACHE:+\"--no-cache\"} $@ test/unit/js", "test:unit": "npm run test:unit:_run", "lint": "eslint --max-warnings 0 --format unix .", - "format": "prettier --list-different $PWD/'**/*.*js'", - "format:fix": "prettier --write $PWD/'**/*.*js'", + "format": "prettier --list-different $PWD/'**/{*.*js,Jenkinsfile}'", + "format:fix": "prettier --write $PWD/'**/{*.*js,Jenkinsfile}'", "lint:fix": "eslint --fix .", "types:check": "tsc --noEmit" }, diff --git a/services/project-history/package.json b/services/project-history/package.json index 36fc7c8083..a37327b477 100644 --- a/services/project-history/package.json +++ b/services/project-history/package.json @@ -12,8 +12,8 @@ "test:acceptance:_run": "mocha --loader=esmock --recursive --reporter spec --timeout 15000 --exit $@ test/acceptance/js", "test:unit:_run": "mocha --loader=esmock --recursive --reporter spec --exit $@ test/unit/js", "lint": "eslint --max-warnings 0 --format unix .", - "format": "prettier --list-different $PWD/'**/*.*js'", - "format:fix": "prettier --write $PWD/'**/*.*js'", + "format": "prettier --list-different $PWD/'**/{*.*js,Jenkinsfile}'", + "format:fix": "prettier --write $PWD/'**/{*.*js,Jenkinsfile}'", "lint:fix": "eslint --fix .", "types:check": "tsc --noEmit" }, diff --git a/services/real-time/package.json b/services/real-time/package.json index adb4ce974b..1dda527892 100644 --- a/services/real-time/package.json +++ b/services/real-time/package.json @@ -11,8 +11,8 @@ "test:unit": "npm run test:unit:_run -- --grep=$MOCHA_GREP", "nodemon": "node --watch app.js", "lint": "eslint --max-warnings 0 --format unix .", - "format": "prettier --list-different $PWD/'**/*.*js'", - "format:fix": "prettier --write $PWD/'**/*.*js'", + "format": "prettier --list-different $PWD/'**/{*.*js,Jenkinsfile}'", + "format:fix": "prettier --write $PWD/'**/{*.*js,Jenkinsfile}'", "lint:fix": "eslint --fix .", "types:check": "tsc --noEmit" }, diff --git a/services/web/.prettierrc b/services/web/.prettierrc index b99212a874..20f2d1d2ff 100644 --- a/services/web/.prettierrc +++ b/services/web/.prettierrc @@ -6,7 +6,7 @@ "pugClassNotation": "as-is", "pugIdNotation": "as-is", "pugSortAttributesBeginning": ["name", "data-type"], - "plugins": ["@prettier/plugin-pug"], + "plugins": ["@prettier/plugin-pug", "prettier-plugin-groovy"], "semi": false, "singleQuote": true, "trailingComma": "es5", diff --git a/services/web/Jenkinsfile b/services/web/Jenkinsfile index bc57563516..0c90df3c7c 100644 --- a/services/web/Jenkinsfile +++ b/services/web/Jenkinsfile @@ -10,7 +10,7 @@ def action_test_acceptance_app_server_pro = false def action_build_webpack = false def action_test_acceptance_app_saas = false def action_build_pug = false -def action_build_production= false +def action_build_production = false pipeline { agent { @@ -21,7 +21,6 @@ pipeline { customWorkspace '/workspace' } } - options { // Print timestamp next to each log line. timestamps() @@ -30,23 +29,21 @@ pipeline { retry(3) timeout(time: 15, unit: 'MINUTES') } - environment { - IMAGE_NAME = 'web' - PROJECT_NAME = 'web' - IMAGE_REPO = 'us-east1-docker.pkg.dev/overleaf-ops/ol-docker/web' - AR_REPO_LOCATION = 'us-east1' - AR_URL = 'us-east1-docker.pkg.dev/overleaf-ops/ol-docker' - DOCKER_COMPOSE_FLAGS = '-f docker-compose.ci.yml' - BRANCH_NAME = "${env.CHANGE_BRANCH ? env.CHANGE_BRANCH : env.BRANCH_NAME}" - JENKINS_BUILD_NUMBER = "${BUILD_NUMBER}" // preserve original BUILD_NUMBER - BUILD_NUMBER = "${SHORT_SHA}_${BUILD_NUMBER}" // mimic the format used for Cloud Build - COMMIT_SHA = "${GIT_COMMIT}" - SHORT_SHA = "${GIT_COMMIT.take(7)}" - CDN_STAG = "gs://ol-stag-web-assets-1" - CDN_PROD = "gs://mgcp-1117973-ol-prod-web-assets-1" + IMAGE_NAME = 'web' + PROJECT_NAME = 'web' + IMAGE_REPO = 'us-east1-docker.pkg.dev/overleaf-ops/ol-docker/web' + AR_REPO_LOCATION = 'us-east1' + AR_URL = 'us-east1-docker.pkg.dev/overleaf-ops/ol-docker' + DOCKER_COMPOSE_FLAGS = '-f docker-compose.ci.yml' + BRANCH_NAME = "${env.CHANGE_BRANCH ? env.CHANGE_BRANCH : env.BRANCH_NAME}" + JENKINS_BUILD_NUMBER = "${BUILD_NUMBER}" // preserve original BUILD_NUMBER + BUILD_NUMBER = "${SHORT_SHA}_${BUILD_NUMBER}" // mimic the format used for Cloud Build + COMMIT_SHA = "${GIT_COMMIT}" + SHORT_SHA = "${GIT_COMMIT.take(7)}" + CDN_STAG = "gs://ol-stag-web-assets-1" + CDN_PROD = "gs://mgcp-1117973-ol-prod-web-assets-1" } - stages { // Retries will use the same pipeline instance. Reset the vars. stage('Reset vars') { @@ -305,99 +302,99 @@ pipeline { } } stage('test_frontend_ct_core_other') { - environment { - CYPRESS_INTERNAL_BROWSER_CONNECT_TIMEOUT = '120000' + environment { + CYPRESS_INTERNAL_BROWSER_CONNECT_TIMEOUT = '120000' + } + steps { + script { + waitUntil { + return action_test_frontend_ct_build + } } - steps { - script { - waitUntil { - return action_test_frontend_ct_build - } - } - dir('services/web') { - sh "make test_frontend_ct_core_other" - } + dir('services/web') { + sh "make test_frontend_ct_core_other" } + } } stage('test_frontend_ct_core_features') { - environment { - CYPRESS_INTERNAL_BROWSER_CONNECT_TIMEOUT = '120000' + environment { + CYPRESS_INTERNAL_BROWSER_CONNECT_TIMEOUT = '120000' + } + steps { + script { + waitUntil { + return action_test_frontend_ct_build + } } - steps { - script { - waitUntil { - return action_test_frontend_ct_build - } - } - dir('services/web') { - sh "make test_frontend_ct_core_features" - } + dir('services/web') { + sh "make test_frontend_ct_core_features" } + } } stage('test_frontend_ct_modules') { - environment { - CYPRESS_INTERNAL_BROWSER_CONNECT_TIMEOUT = '120000' + environment { + CYPRESS_INTERNAL_BROWSER_CONNECT_TIMEOUT = '120000' + } + steps { + script { + waitUntil { + return action_test_frontend_ct_build + } } - steps { - script { - waitUntil { - return action_test_frontend_ct_build - } - } - dir('services/web') { - sh "make test_frontend_ct_modules" - } + dir('services/web') { + sh "make test_frontend_ct_modules" } + } } stage('test_frontend_ct_editor_visual') { - steps { - script { - waitUntil { - return action_test_frontend_ct_build - } - } - dir('services/web') { - sh "make test_frontend_ct_editor_visual" - } + steps { + script { + waitUntil { + return action_test_frontend_ct_build + } } + dir('services/web') { + sh "make test_frontend_ct_editor_visual" + } + } } stage('test_frontend_ct_editor_other') { - steps { - script { - waitUntil { - return action_test_frontend_ct_build - } - } - dir('services/web') { - sh "make test_frontend_ct_editor_other" - } + steps { + script { + waitUntil { + return action_test_frontend_ct_build + } } + dir('services/web') { + sh "make test_frontend_ct_editor_other" + } + } } stage('Test Unit ESM') { - steps { - script { - waitUntil { - return action_build_dev - } - } - dir('services/web') { - sh "make test_unit_esm" - } + steps { + script { + waitUntil { + return action_build_dev + } } + dir('services/web') { + sh "make test_unit_esm" + } + } } stage('Test Unit Mocha') { - steps { - script { - waitUntil { - return action_build_dev - } - } - dir('services/web') { - sh "make test_unit_mocha" - } + steps { + script { + waitUntil { + return action_build_dev + } } + dir('services/web') { + sh "make test_unit_mocha" + } + } } - stage('Build Webpack'){ + stage('Build Webpack') { steps { script { waitUntil { @@ -440,7 +437,7 @@ pipeline { } } } - stage('Build Production'){ + stage('Build Production') { steps { script { waitUntil { @@ -496,4 +493,4 @@ pipeline { } } -// vim: set ft=groovy : +// vim: set ft=groovy : \ No newline at end of file diff --git a/services/web/Makefile b/services/web/Makefile index c0c0263a67..e7dd7e7575 100644 --- a/services/web/Makefile +++ b/services/web/Makefile @@ -480,6 +480,10 @@ format: format_pug format_pug: npm run --silent format:pug +format: format_jenkins +format_jenkins: + npm run --silent format:jenkins + format_fix: npm run --silent format:fix @@ -489,6 +493,9 @@ format_styles_fix: format_pug_fix: npm run --silent format:pug:fix +format_jenkins_fix: + npm run --silent format:jenkins:fix + format_in_docker: $(RUN_LINT_FORMAT) make format -j2 --output-sync diff --git a/services/web/package.json b/services/web/package.json index 4c0ffdd2ed..4bdcbca0de 100644 --- a/services/web/package.json +++ b/services/web/package.json @@ -31,6 +31,8 @@ "format:styles:fix": "prettier --write $PWD/'**/*.{css,scss}'", "format:pug": "prettier --list-different $PWD/'**/*.pug'", "format:pug:fix": "prettier --write $PWD/'**/*.pug'", + "format:jenkins": "prettier --list-different $PWD/'**/Jenkinsfile'", + "format:jenkins:fix": "prettier --write $PWD/'**/Jenkinsfile'", "lint": "eslint --max-warnings 0 --format unix --ext .js,.jsx,.mjs,.ts,.tsx .", "lint:fix": "eslint --fix --ext .js,.jsx,.mjs,.ts,.tsx .", "lint:styles": "stylelint '**/*.scss'",