Skip to content

Commit 229770e

Browse files
committed
[#2154] Extracted listing into standalone lint CI job.
1 parent a990413 commit 229770e

2 files changed

Lines changed: 198 additions & 146 deletions

File tree

.circleci/config.yml

Lines changed: 82 additions & 66 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)