Skip to content

Commit 31e579f

Browse files
committed
[make][pre-commit]Check CRD schema to avoid update issues
The new crd-schema-check make target compares the CRD schema of the patch with the schema on the tip of main and report errors on non backward compatible changes. This make target now also run in pre-commit both locally and in CI. This make target uses https://github.com/openshift/crd-schema-checker to do the actual checking. Related: OSPRH-11833
1 parent 37d5a9b commit 31e579f

File tree

4 files changed

+51
-0
lines changed

4 files changed

+51
-0
lines changed

.pre-commit-config.yaml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,12 @@ repos:
2525
entry: make
2626
args: ['operator-lint']
2727
pass_filenames: false
28+
- id: make-crd-schema-check
29+
name: make-crd-schema-check
30+
language: system
31+
entry: make
32+
args: ['crd-schema-check']
33+
pass_filenames: false
2834

2935
- repo: https://github.com/pre-commit/pre-commit-hooks
3036
rev: v4.4.0

Makefile

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -370,3 +370,12 @@ run-with-webhook: export METRICS_PORT?=8080
370370
run-with-webhook: export HEALTH_PORT?=8081
371371
run-with-webhook: manifests generate fmt vet ## Run a controller from your host.
372372
/bin/bash hack/run_with_local_webhook.sh
373+
374+
CRD_SCHEMA_CHECKER_VERSION ?= release-4.16
375+
376+
BRANCH=main
377+
378+
PHONY: crd-schema-check
379+
crd-schema-check: manifests
380+
INSTALL_DIR=$(LOCALBIN) CRD_SCHEMA_CHECKER_VERSION=$(CRD_SCHEMA_CHECKER_VERSION) hack/build-crd-schema-checker.sh
381+
INSTALL_DIR=$(LOCALBIN) BASE_REF="$${PULL_BASE_SHA:-$(BRANCH)}" hack/crd-schema-checker.sh

hack/build-crd-schema-checker.sh

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
#!/bin/bash
2+
set -euxo pipefail
3+
4+
if [ -f "$INSTALL_DIR/crd-schema-checker" ]; then
5+
exit 0
6+
fi
7+
8+
mkdir -p "$INSTALL_DIR/git-tmp"
9+
git clone https://github.com/openshift/crd-schema-checker.git \
10+
-b "$CRD_SCHEMA_CHECKER_VERSION" "$INSTALL_DIR/git-tmp"
11+
pushd "$INSTALL_DIR/git-tmp"
12+
GOWORK=off make
13+
cp crd-schema-checker "$INSTALL_DIR/"
14+
popd
15+
rm -rf "$INSTALL_DIR/git-tmp"

hack/crd-schema-checker.sh

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
#!/bin/bash
2+
set -euxo pipefail
3+
4+
CHECKER=$INSTALL_DIR/crd-schema-checker
5+
6+
TMP_DIR=$(mktemp -d)
7+
8+
function cleanup {
9+
rm -rf "$TMP_DIR"
10+
}
11+
12+
trap cleanup EXIT
13+
14+
15+
for crd in config/crd/bases/*.yaml; do
16+
mkdir -p "$(dirname "$TMP_DIR/$crd")"
17+
git show "$BASE_REF:$crd" > "$TMP_DIR/$crd"
18+
$CHECKER check-manifests \
19+
--existing-crd-filename="$TMP_DIR/$crd" \
20+
--new-crd-filename="$crd"
21+
done

0 commit comments

Comments
 (0)