@@ -206,15 +206,10 @@ jobs:
206206 VORTEX_FRONTEND_BUILD_SKIP : 1
207207 # ;> !PROVISION_TYPE_PROFILE
208208
209- # Build and test is a second step of the build. The testing is performed
210- # within the same job to save time on provisioning during the job.
211- build : &job_build
209+ # Lint job runs in parallel with database and build jobs.
210+ lint :
212211 << : *runner_config
213- parallelism : 2
214212 steps :
215- - attach_workspace :
216- at : /tmp/workspace
217-
218213 - checkout
219214 - *step_process_codebase_for_ci
220215 - *load_variables_from_dotenv
@@ -223,22 +218,6 @@ jobs:
223218 name : Validate Composer configuration
224219 command : composer validate --strict || [ "${VORTEX_CI_COMPOSER_VALIDATE_IGNORE_FAILURE:-0}" -eq 1 ]
225220
226- # ;< !PROVISION_TYPE_PROFILE
227- - run :
228- name : Set cache keys for database caching
229- command : |
230- echo "${VORTEX_CI_DB_CACHE_BRANCH}" | tee /tmp/db_cache_branch
231- echo "yes" | tee /tmp/db_cache_fallback_yes
232- echo "$(date ${VORTEX_CI_DB_CACHE_TIMESTAMP})" | tee /tmp/db_cache_timestamp
233-
234- - restore_cache :
235- keys :
236- # Use cached artifacts from previous builds of this branch.
237- # https://circleci.com/docs/2.0/caching/#restoring-cache
238- - v26.2.0-db11-{{ checksum "/tmp/db_cache_branch" }}-{{ checksum "/tmp/db_cache_fallback_yes" }}-{{ checksum "/tmp/db_cache_timestamp" }}
239- - v26.2.0-db11-{{ checksum "/tmp/db_cache_branch" }}-{{ checksum "/tmp/db_cache_fallback_yes" }}-
240- # ;> !PROVISION_TYPE_PROFILE
241-
242221 - *step_setup_remote_docker
243222
244223 - run :
@@ -248,111 +227,142 @@ jobs:
248227 - run :
249228 name : Lint Dockerfiles with Hadolint
250229 command : |
251- [ "${CIRCLE_NODE_TOTAL:-1}" -gt 1 ] && [ "${CIRCLE_NODE_INDEX:-0}" -ne 0 ] && exit 0
252230 for file in $(find .docker -name 'Dockerfile' -o -name '*.dockerfile'); do
253231 echo "Linting ${file}" && cat "${file}" | docker run --rm -i hadolint/hadolint || [ "${VORTEX_CI_HADOLINT_IGNORE_FAILURE:-0}" -eq 1 ]
254232 done
255233
256234 - run :
257235 name : Lint Docker Compose files with DCLint
258- command : |
259- [ "${CIRCLE_NODE_TOTAL:-1}" -gt 1 ] && [ "${CIRCLE_NODE_INDEX:-0}" -ne 0 ] && exit 0
260- docker run --rm -v "${PWD}":/app zavoloklom/dclint:3.1.0 . || [ "${VORTEX_CI_DCLINT_IGNORE_FAILURE:-0}" -eq 1 ]
236+ command : docker run --rm -v "${PWD}":/app zavoloklom/dclint:3.1.0 . || [ "${VORTEX_CI_DCLINT_IGNORE_FAILURE:-0}" -eq 1 ]
261237
262238 - run :
263- name : Build stack
264- command : docker compose up --detach && docker builder prune --all --force
265-
266- - run :
267- name : Export built codebase
268- command : |
269- echo "${VORTEX_DEPLOY_TYPES:-}" | grep -vq "artifact" && exit 0 || true
270- mkdir -p "/tmp/workspace/code"
271- docker compose cp -L cli:"/app/." "/tmp/workspace/code"
272- du -sh "/tmp/workspace/code"
239+ name : Build CLI image
240+ command : docker compose build cli
273241
274242 - run :
275243 name : Install development dependencies
276244 command : |
277- docker compose exec $(env | cut -f1 -d= | sed 's/^/-e /') -T cli bash -c " \
245+ docker compose run --no-deps $(env | cut -f1 -d= | sed 's/^/-e /') -T cli bash -c " \
278246 if [ -n \"${PACKAGE_TOKEN:-}\" ]; then export COMPOSER_AUTH='{\"github-oauth\": {\"github.com\": \"${PACKAGE_TOKEN-}\"}}'; fi && \
279247 COMPOSER_MEMORY_LIMIT=-1 composer --ansi install --prefer-dist"
280248 #;< TOOL_ESLINT_STYLELINT
281- docker compose exec $(env | cut -f1 -d= | sed 's/^/-e /') -T cli bash -c "yarn install --frozen-lockfile"
249+ docker compose run --no-deps $(env | cut -f1 -d= | sed 's/^/-e /') -T cli bash -c "yarn install --frozen-lockfile"
282250 #;> TOOL_ESLINT_STYLELINT
283251
284252 - run :
285253 name : Audit Composer packages
286- command : docker compose exec -T cli composer audit || [ "${VORTEX_CI_COMPOSER_AUDIT_IGNORE_FAILURE:-0}" -eq 1 ]
254+ command : docker compose run --no-deps -T cli composer audit || [ "${VORTEX_CI_COMPOSER_AUDIT_IGNORE_FAILURE:-0}" -eq 1 ]
287255
288256 - run :
289257 name : Validate Composer configuration is normalized
290- command : |
291- [ "${CIRCLE_NODE_TOTAL:-1}" -gt 1 ] && [ "${CIRCLE_NODE_INDEX:-0}" -ne 0 ] && exit 0
292- docker compose exec -T cli composer normalize --dry-run || [ "${VORTEX_CI_COMPOSER_NORMALIZE_IGNORE_FAILURE:-0}" -eq 1 ]
258+ command : docker compose run --no-deps -T cli composer normalize --dry-run || [ "${VORTEX_CI_COMPOSER_NORMALIZE_IGNORE_FAILURE:-0}" -eq 1 ]
293259
294260 # ;< TOOL_PHPCS
295261 - run :
296262 name : Lint code with PHPCS
297- command : |
298- [ "${CIRCLE_NODE_TOTAL:-1}" -gt 1 ] && [ "${CIRCLE_NODE_INDEX:-0}" -ne 0 ] && exit 0
299- docker compose exec -T cli vendor/bin/phpcs || [ "${VORTEX_CI_PHPCS_IGNORE_FAILURE:-0}" -eq 1 ]
263+ command : docker compose run --no-deps -T cli vendor/bin/phpcs || [ "${VORTEX_CI_PHPCS_IGNORE_FAILURE:-0}" -eq 1 ]
300264 # ;> TOOL_PHPCS
301265
302266 # ;< TOOL_PHPSTAN
303267 - run :
304268 name : Lint code with PHPStan
305- command : |
306- [ "${CIRCLE_NODE_TOTAL:-1}" -gt 1 ] && [ "${CIRCLE_NODE_INDEX:-0}" -ne 0 ] && exit 0
307- docker compose exec -T cli vendor/bin/phpstan || [ "${VORTEX_CI_PHPSTAN_IGNORE_FAILURE:-0}" -eq 1 ]
269+ command : docker compose run --no-deps -T cli vendor/bin/phpstan || [ "${VORTEX_CI_PHPSTAN_IGNORE_FAILURE:-0}" -eq 1 ]
308270 # ;> TOOL_PHPSTAN
309271
310272 # ;< TOOL_RECTOR
311273 - run :
312274 name : Lint code with Rector
313- command : |
314- [ "${CIRCLE_NODE_TOTAL:-1}" -gt 1 ] && [ "${CIRCLE_NODE_INDEX:-0}" -ne 0 ] && exit 0
315- docker compose exec -T cli vendor/bin/rector --dry-run || [ "${VORTEX_CI_RECTOR_IGNORE_FAILURE:-0}" -eq 1 ]
275+ command : docker compose run --no-deps -T cli vendor/bin/rector --dry-run || [ "${VORTEX_CI_RECTOR_IGNORE_FAILURE:-0}" -eq 1 ]
316276 # ;> TOOL_RECTOR
317277
318278 # ;< TOOL_PHPMD
319279 - run :
320280 name : Lint code with PHPMD
321- command : |
322- [ "${CIRCLE_NODE_TOTAL:-1}" -gt 1 ] && [ "${CIRCLE_NODE_INDEX:-0}" -ne 0 ] && exit 0
323- docker compose exec -T cli vendor/bin/phpmd . text phpmd.xml || [ "${VORTEX_CI_PHPMD_IGNORE_FAILURE:-0}" -eq 1 ]
281+ command : docker compose run --no-deps -T cli vendor/bin/phpmd . text phpmd.xml || [ "${VORTEX_CI_PHPMD_IGNORE_FAILURE:-0}" -eq 1 ]
324282 # ;> TOOL_PHPMD
325283
326284 - run :
327285 name : Lint code with Twig CS Fixer
328- command : |
329- [ "${CIRCLE_NODE_TOTAL:-1}" -gt 1 ] && [ "${CIRCLE_NODE_INDEX:-0}" -ne 0 ] && exit 0
330- docker compose exec -T cli vendor/bin/twig-cs-fixer || [ "${VORTEX_CI_TWIG_CS_FIXER_IGNORE_FAILURE:-0}" -eq 1 ]
286+ command : docker compose run --no-deps -T cli vendor/bin/twig-cs-fixer || [ "${VORTEX_CI_TWIG_CS_FIXER_IGNORE_FAILURE:-0}" -eq 1 ]
331287
332288 # ;< TOOL_BEHAT
333289 - run :
334290 name : Lint code with Gherkin Lint
335- command : |
336- [ "${CIRCLE_NODE_TOTAL:-1}" -gt 1 ] && [ "${CIRCLE_NODE_INDEX:-0}" -ne 0 ] && exit 0
337- docker compose exec -T cli vendor/bin/gherkinlint lint tests/behat/features || [ "${VORTEX_CI_GHERKIN_LINT_IGNORE_FAILURE:-0}" -eq 1 ]
291+ command : docker compose run --no-deps -T cli vendor/bin/gherkinlint lint tests/behat/features || [ "${VORTEX_CI_GHERKIN_LINT_IGNORE_FAILURE:-0}" -eq 1 ]
338292 # ;> TOOL_BEHAT
339293
340294 # ;< TOOL_ESLINT_STYLELINT
341295 - run :
342296 name : Lint module code with NodeJS linters
343- command : |
344- [ "${CIRCLE_NODE_TOTAL:-1}" -gt 1 ] && [ "${CIRCLE_NODE_INDEX:-0}" -ne 0 ] && exit 0
345- docker compose exec -T cli bash -c "yarn run lint" || [ "${VORTEX_CI_NODEJS_LINT_IGNORE_FAILURE:-0}" -eq 1 ]
297+ command : docker compose run --no-deps -T cli bash -c "yarn run lint" || [ "${VORTEX_CI_NODEJS_LINT_IGNORE_FAILURE:-0}" -eq 1 ]
346298 # ;> TOOL_ESLINT_STYLELINT
347299
348300 # ;< DRUPAL_THEME
349301 - run :
350302 name : Lint theme code with NodeJS linters
351303 command : |
352- { [ "${CIRCLE_NODE_TOTAL:-1}" -gt 1 ] && [ "${CIRCLE_NODE_INDEX:-0}" -ne 0 ]; } || [ "${VORTEX_FRONTEND_BUILD_SKIP:-0}" -eq 1 ] && exit 0
353- docker compose exec -T cli bash -c "yarn --cwd=\${WEBROOT}/themes/custom/\${DRUPAL_THEME} run lint" || [ "${VORTEX_CI_NODEJS_LINT_IGNORE_FAILURE:-0}" -eq 1 ]
304+ [ "${VORTEX_FRONTEND_BUILD_SKIP:-0}" -eq 1 ] && exit 0
305+ docker compose run --no-deps -T cli bash -c "yarn --cwd=\${WEBROOT}/themes/custom/\${DRUPAL_THEME} run lint" || [ "${VORTEX_CI_NODEJS_LINT_IGNORE_FAILURE:-0}" -eq 1 ]
354306 # ;> DRUPAL_THEME
355307
308+ # Build and test is a second step of the build. The testing is performed
309+ # within the same job to save time on provisioning during the job.
310+ build : &job_build
311+ << : *runner_config
312+ parallelism : 2
313+ steps :
314+ - attach_workspace :
315+ at : /tmp/workspace
316+
317+ - checkout
318+ - *step_process_codebase_for_ci
319+ - *load_variables_from_dotenv
320+
321+ - run :
322+ name : Validate Composer configuration
323+ command : composer validate --strict || [ "${VORTEX_CI_COMPOSER_VALIDATE_IGNORE_FAILURE:-0}" -eq 1 ]
324+
325+ # ;< !PROVISION_TYPE_PROFILE
326+ - run :
327+ name : Set cache keys for database caching
328+ command : |
329+ echo "${VORTEX_CI_DB_CACHE_BRANCH}" | tee /tmp/db_cache_branch
330+ echo "yes" | tee /tmp/db_cache_fallback_yes
331+ echo "$(date ${VORTEX_CI_DB_CACHE_TIMESTAMP})" | tee /tmp/db_cache_timestamp
332+
333+ - restore_cache :
334+ keys :
335+ # Use cached artifacts from previous builds of this branch.
336+ # https://circleci.com/docs/2.0/caching/#restoring-cache
337+ - v26.2.0-db11-{{ checksum "/tmp/db_cache_branch" }}-{{ checksum "/tmp/db_cache_fallback_yes" }}-{{ checksum "/tmp/db_cache_timestamp" }}
338+ - v26.2.0-db11-{{ checksum "/tmp/db_cache_branch" }}-{{ checksum "/tmp/db_cache_fallback_yes" }}-
339+ # ;> !PROVISION_TYPE_PROFILE
340+
341+ - *step_setup_remote_docker
342+
343+ - run :
344+ name : Login to container registry
345+ command : ./scripts/vortex/login-container-registry.sh
346+
347+ - run :
348+ name : Build stack
349+ command : docker compose up --detach && docker builder prune --all --force
350+
351+ - run :
352+ name : Export built codebase
353+ command : |
354+ echo "${VORTEX_DEPLOY_TYPES:-}" | grep -vq "artifact" && exit 0 || true
355+ mkdir -p "/tmp/workspace/code"
356+ docker compose cp -L cli:"/app/." "/tmp/workspace/code"
357+ du -sh "/tmp/workspace/code"
358+
359+ - run :
360+ name : Install development dependencies
361+ command : |
362+ docker compose exec $(env | cut -f1 -d= | sed 's/^/-e /') -T cli bash -c " \
363+ if [ -n \"${PACKAGE_TOKEN:-}\" ]; then export COMPOSER_AUTH='{\"github-oauth\": {\"github.com\": \"${PACKAGE_TOKEN-}\"}}'; fi && \
364+ COMPOSER_MEMORY_LIMIT=-1 composer --ansi install --prefer-dist"
365+
356366 - run :
357367 name : Provision site
358368 command : |
@@ -578,6 +588,10 @@ workflows:
578588 tags :
579589 only : /.*/
580590 # ;> !PROVISION_TYPE_PROFILE
591+ - lint :
592+ filters :
593+ tags :
594+ only : /.*/
581595 - build :
582596 # ;< !PROVISION_TYPE_PROFILE
583597 requires :
@@ -590,6 +604,7 @@ workflows:
590604 - deploy :
591605 requires :
592606 - build
607+ - lint
593608 filters :
594609 branches :
595610 # Allowed branches:
@@ -608,6 +623,7 @@ workflows:
608623 - deploy-tags :
609624 requires :
610625 - build
626+ - lint
611627 filters :
612628 branches :
613629 ignore : /.*/
0 commit comments