Skip to content

Commit 235885d

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 e53cc6f commit 235885d

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
@@ -329,3 +329,12 @@ run-with-webhook: export METRICS_PORT?=8080
329329
run-with-webhook: export HEALTH_PORT?=8081
330330
run-with-webhook: manifests generate fmt vet ## Run a controller from your host.
331331
/bin/bash hack/run_with_local_webhook.sh
332+
333+
CRD_SCHEMA_CHECKER_VERSION ?= release-4.16
334+
335+
BRANCH=main
336+
337+
PHONY: crd-schema-check
338+
crd-schema-check: manifests
339+
INSTALL_DIR=$(LOCALBIN) CRD_SCHEMA_CHECKER_VERSION=$(CRD_SCHEMA_CHECKER_VERSION) hack/build-crd-schema-checker.sh
340+
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)