From bc21433a05759431e4904e27f9ceaf56f95a99e5 Mon Sep 17 00:00:00 2001 From: Max Gautier Date: Wed, 22 May 2024 15:53:06 +0200 Subject: [PATCH] Run pre-commit hooks in dynamic pipeline Use gitlab dynamic child pipelines feature to have one source of truth for the pre-commit jobs, the pre-commit config file. Use one cache per pre-commit. This should reduce the "fetching cache" time steps in gitlab-ci, since each job will have a separate cache with only its hook installed. --- .gitlab-ci/lint.yml | 21 +++++++++++++++++++++ .gitlab-ci/pre-commit-dynamic-stub.yml | 17 +++++++++++++++++ 2 files changed, 38 insertions(+) create mode 100644 .gitlab-ci/pre-commit-dynamic-stub.yml diff --git a/.gitlab-ci/lint.yml b/.gitlab-ci/lint.yml index 658bd35aa..a407fd384 100644 --- a/.gitlab-ci/lint.yml +++ b/.gitlab-ci/lint.yml @@ -1,4 +1,25 @@ --- +generate-pre-commit: + image: 'mikefarah/yq@sha256:bcb889a1f9bdb0613c8a054542d02360c2b1b35521041be3e1bd8fbd0534d411' + stage: build + before_script: [] + script: + - > + yq -r < .pre-commit-config.yaml '.repos[].hooks[].id' | + sed 's/^/ - /' | + cat .gitlab-ci/pre-commit-dynamic-stub.yml - > pre-commit-generated.yml + artifacts: + paths: + - pre-commit-generated.yml + +run-pre-commit: + stage: unit-tests + trigger: + include: + - artifact: pre-commit-generated.yml + job: generate-pre-commit + strategy: depend + yamllint: extends: .job stage: unit-tests diff --git a/.gitlab-ci/pre-commit-dynamic-stub.yml b/.gitlab-ci/pre-commit-dynamic-stub.yml new file mode 100644 index 000000000..55f81b513 --- /dev/null +++ b/.gitlab-ci/pre-commit-dynamic-stub.yml @@ -0,0 +1,17 @@ +--- +# stub pipeline for dynamic generation +pre-commit: + tags: + - light + image: 'ghcr.io/pre-commit-ci/runner-image@sha256:aaf2c7b38b22286f2d381c11673bec571c28f61dd086d11b43a1c9444a813cef' + variables: + PRE_COMMIT_HOME: /pre-commit-cache + script: + - pre-commit run -a $HOOK_ID + cache: + key: pre-commit-$HOOK_ID + paths: + - /pre-commit-cache + parallel: + matrix: + - HOOK_ID: