Skip to content

Commit cda0402

Browse files
committed
Run pre-commit generation jobs in parallel
Update generate_files.sh to run all generation/validation jobs concurrently for faster execution. The script: - Runs all independent jobs in background - Properly handles dependency: generate_standalone_yaml waits for update_release_json and update_values_yaml_files to complete first - Prefixes job output for easy debugging - Reports failures with job names and PIDs
1 parent 0b8d1f6 commit cda0402

File tree

2 files changed

+45
-79
lines changed

2 files changed

+45
-79
lines changed

.pre-commit-config.yaml

Lines changed: 4 additions & 66 deletions
Original file line numberDiff line numberDiff line change
@@ -102,74 +102,12 @@ repos:
102102
args: [--timeout=10m]
103103

104104
# Local hooks for project-specific tasks
105+
# Runs all generation/validation jobs in parallel internally
105106
- repo: local
106107
hooks:
107-
- id: update-release-json
108-
name: update-release-json
109-
entry: scripts/dev/generate_files.sh update_release
110-
language: system
111-
pass_filenames: false
112-
stages: [pre-commit]
113-
114-
- id: update-values-yaml
115-
name: update-values-yaml
116-
entry: scripts/dev/generate_files.sh update_values
117-
language: system
118-
pass_filenames: false
119-
stages: [pre-commit]
120-
121-
- id: generate-standalone-yaml
122-
name: generate-standalone-yaml
123-
entry: scripts/dev/generate_files.sh generate_standalone_yaml
124-
language: system
125-
pass_filenames: false
126-
stages: [pre-commit]
127-
128-
- id: generate-manifests
129-
name: generate-manifests
130-
entry: scripts/dev/generate_files.sh generate_manifests
131-
language: system
132-
pass_filenames: false
133-
stages: [pre-commit]
134-
135-
- id: regenerate-mco-tests
136-
name: regenerate-mco-tests
137-
entry: scripts/dev/generate_files.sh update_mco_tests
138-
language: system
139-
pass_filenames: false
140-
stages: [pre-commit]
141-
142-
- id: regenerate-multicluster-rbac
143-
name: regenerate-multicluster-rbac
144-
entry: scripts/dev/regenerate_multicluster_rbac.sh
145-
language: system
146-
pass_filenames: false
147-
stages: [pre-commit]
148-
149-
- id: update-licenses
150-
name: update-licenses
151-
entry: scripts/dev/generate_files.sh update_licenses
152-
language: system
153-
pass_filenames: false
154-
stages: [pre-commit]
155-
156-
- id: validate-snippets
157-
name: validate-snippets
158-
entry: scripts/code_snippets/validate_snippets.py
159-
language: system
160-
pass_filenames: false
161-
stages: [pre-commit]
162-
163-
- id: check-kubebuilder-annotations
164-
name: check-kubebuilder-annotations
165-
entry: bash -c 'if grep -r "// kubebuilder" --include="*.go" --exclude-dir=vendor .; then echo "Found erroneous kubebuilder annotation"; exit 1; fi'
166-
language: system
167-
pass_filenames: false
168-
stages: [pre-commit]
169-
170-
- id: helm-lint
171-
name: helm-lint
172-
entry: scripts/dev/lint_helm_chart.sh
108+
- id: generate-and-validate
109+
name: generate-and-validate (parallel)
110+
entry: scripts/dev/generate_files.sh generate_all
173111
language: system
174112
pass_filenames: false
175113
stages: [pre-commit]

scripts/dev/generate_files.sh

Lines changed: 41 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -123,16 +123,6 @@ update_licenses() {
123123
fi
124124
}
125125

126-
# Main update jobs - runs the generation tasks
127-
update_jobs() {
128-
# Update release.json first in case there is a newer version
129-
time update_release_json
130-
# We need to generate the values files first
131-
time update_values_yaml_files
132-
# The values files are used for generating the standalone yaml
133-
time generate_standalone_yaml
134-
}
135-
136126
# bg_job_ vars are global; run_job_in_background function is appending to them on each call
137127
bg_job_pids=()
138128
bg_job_pids_with_names=()
@@ -178,13 +168,51 @@ wait_for_all_background_jobs() {
178168
return 0
179169
}
180170

171+
validate_snippets() {
172+
scripts/code_snippets/validate_snippets.py
173+
}
174+
175+
check_kubebuilder_annotations() {
176+
if grep -r "// kubebuilder" --include="*.go" --exclude-dir=vendor .; then
177+
echo "Found erroneous kubebuilder annotation"
178+
return 1
179+
fi
180+
}
181+
182+
helm_lint() {
183+
scripts/dev/lint_helm_chart.sh
184+
}
185+
181186
generate_all() {
182-
run_job_in_background "update_jobs"
183-
run_job_in_background "update_licenses"
187+
title "Running pre-commit jobs in parallel"
188+
189+
# Phase 1: Run generation jobs - some have dependencies
190+
# update_release and update_values must run before generate_standalone_yaml
191+
run_job_in_background "update_release_json"
192+
run_job_in_background "update_values_yaml_files"
193+
194+
# These can run in parallel with the above
195+
run_job_in_background "generate_manifests"
196+
run_job_in_background "update_mco_tests"
184197
run_job_in_background "regenerate_public_rbac_multi_cluster"
198+
run_job_in_background "update_licenses"
199+
run_job_in_background "validate_snippets"
200+
run_job_in_background "check_kubebuilder_annotations"
201+
run_job_in_background "helm_lint"
202+
203+
# Wait for update_release and update_values to complete before generate_standalone_yaml
204+
local release_pid="${bg_job_pids[0]}"
205+
local values_pid="${bg_job_pids[1]}"
206+
207+
wait "${release_pid}" || true
208+
wait "${values_pid}" || true
209+
210+
# Now run generate_standalone_yaml (depends on values files)
211+
run_job_in_background "generate_standalone_yaml"
185212

213+
# Wait for all remaining jobs
186214
if wait_for_all_background_jobs; then
187-
echo -e "${GREEN}generate_files: All generation jobs completed!${NO_COLOR}"
215+
echo -e "${GREEN}All pre-commit jobs completed successfully!${NO_COLOR}"
188216
return 0
189217
else
190218
return 1

0 commit comments

Comments
 (0)