Skip to content

Commit

Permalink
[make][pre-commit]Check CRD schema to avoid update issues
Browse files Browse the repository at this point in the history
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
  • Loading branch information
mrkisaolamb authored and openshift-merge-bot[bot] committed Nov 28, 2024
1 parent 7ec0729 commit b647f7b
Show file tree
Hide file tree
Showing 4 changed files with 51 additions and 0 deletions.
6 changes: 6 additions & 0 deletions .pre-commit-config.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,12 @@ repos:
entry: make
args: ['operator-lint']
pass_filenames: false
- id: make-crd-schema-check
name: make-crd-schema-check
language: system
entry: make
args: ['crd-schema-check']
pass_filenames: false

- repo: https://github.com/pre-commit/pre-commit-hooks
rev: v4.4.0
Expand Down
9 changes: 9 additions & 0 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -428,3 +428,12 @@ kuttl-test-cleanup:
else \
echo "Namespce already cleaned up. Nothing to do"; \
fi

CRD_SCHEMA_CHECKER_VERSION ?= release-4.16

BRANCH=main

PHONY: crd-schema-check
crd-schema-check: manifests
INSTALL_DIR=$(LOCALBIN) CRD_SCHEMA_CHECKER_VERSION=$(CRD_SCHEMA_CHECKER_VERSION) hack/build-crd-schema-checker.sh
INSTALL_DIR=$(LOCALBIN) BASE_REF="$${PULL_BASE_SHA:-$(BRANCH)}" hack/crd-schema-checker.sh
15 changes: 15 additions & 0 deletions hack/build-crd-schema-checker.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
#!/bin/bash
set -euxo pipefail

if [ -f "$INSTALL_DIR/crd-schema-checker" ]; then
exit 0
fi

mkdir -p "$INSTALL_DIR/git-tmp"
git clone https://github.com/openshift/crd-schema-checker.git \
-b "$CRD_SCHEMA_CHECKER_VERSION" "$INSTALL_DIR/git-tmp"
pushd "$INSTALL_DIR/git-tmp"
GOWORK=off make
cp crd-schema-checker "$INSTALL_DIR/"
popd
rm -rf "$INSTALL_DIR/git-tmp"
21 changes: 21 additions & 0 deletions hack/crd-schema-checker.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
#!/bin/bash
set -euxo pipefail

CHECKER=$INSTALL_DIR/crd-schema-checker

TMP_DIR=$(mktemp -d)

function cleanup {
rm -rf "$TMP_DIR"
}

trap cleanup EXIT


for crd in config/crd/bases/*.yaml; do
mkdir -p "$(dirname "$TMP_DIR/$crd")"
git show "$BASE_REF:$crd" > "$TMP_DIR/$crd"
$CHECKER check-manifests \
--existing-crd-filename="$TMP_DIR/$crd" \
--new-crd-filename="$crd"
done

0 comments on commit b647f7b

Please sign in to comment.