Skip to content

Commit 2b4c083

Browse files
authored
🌱 Add a make target and check in CI to verify CRD compatibility (operator-framework#1449)
* add make target for running crd-diff Signed-off-by: everettraven <[email protected]> * add GHA to run crd-diff Signed-off-by: everettraven <[email protected]> * add crd-diff config file and update make target to inject it Signed-off-by: everettraven <[email protected]> * update to official released version of crd-diff Signed-off-by: everettraven <[email protected]> --------- Signed-off-by: everettraven <[email protected]>
1 parent b9294a7 commit 2b4c083

File tree

7 files changed

+472
-0
lines changed

7 files changed

+472
-0
lines changed

.bingo/Variables.mk

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,12 @@ $(CONTROLLER_GEN): $(BINGO_DIR)/controller-gen.mod
2929
@echo "(re)installing $(GOBIN)/controller-gen-v0.16.1"
3030
@cd $(BINGO_DIR) && GOWORK=off $(GO) build -mod=mod -modfile=controller-gen.mod -o=$(GOBIN)/controller-gen-v0.16.1 "sigs.k8s.io/controller-tools/cmd/controller-gen"
3131

32+
CRD_DIFF := $(GOBIN)/crd-diff-v0.1.0
33+
$(CRD_DIFF): $(BINGO_DIR)/crd-diff.mod
34+
@# Install binary/ries using Go 1.14+ build command. This is using bwplotka/bingo-controlled, separate go module with pinned dependencies.
35+
@echo "(re)installing $(GOBIN)/crd-diff-v0.1.0"
36+
@cd $(BINGO_DIR) && GOWORK=off $(GO) build -mod=mod -modfile=crd-diff.mod -o=$(GOBIN)/crd-diff-v0.1.0 "github.com/everettraven/crd-diff"
37+
3238
CRD_REF_DOCS := $(GOBIN)/crd-ref-docs-v0.1.0
3339
$(CRD_REF_DOCS): $(BINGO_DIR)/crd-ref-docs.mod
3440
@# Install binary/ries using Go 1.14+ build command. This is using bwplotka/bingo-controlled, separate go module with pinned dependencies.

.bingo/crd-diff.mod

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
module _ // Auto generated by https://github.com/bwplotka/bingo. DO NOT EDIT
2+
3+
go 1.22.5
4+
5+
require github.com/everettraven/crd-diff v0.1.0

.bingo/crd-diff.sum

Lines changed: 325 additions & 0 deletions
Large diffs are not rendered by default.

.bingo/variables.env

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,8 @@ BINGO="${GOBIN}/bingo-v0.9.0"
1212

1313
CONTROLLER_GEN="${GOBIN}/controller-gen-v0.16.1"
1414

15+
CRD_DIFF="${GOBIN}/crd-diff-v0.1.0"
16+
1517
CRD_REF_DOCS="${GOBIN}/crd-ref-docs-v0.1.0"
1618

1719
GOLANGCI_LINT="${GOBIN}/golangci-lint-v1.61.0"

.github/workflows/crd-diff.yaml

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
name: crd-diff
2+
on:
3+
pull_request:
4+
jobs:
5+
crd-diff:
6+
runs-on: ubuntu-latest
7+
steps:
8+
- uses: actions/checkout@v4
9+
with:
10+
fetch-depth: 0
11+
12+
- uses: actions/setup-go@v5
13+
with:
14+
go-version-file: go.mod
15+
16+
- name: Run make verify-crd-compatibility
17+
run: make verify-crd-compatibility CRD_DIFF_ORIGINAL_REF=${{ github.event.pull_request.base.sha }} CRD_DIFF_UPDATED_REF=${{ github.event.pull_request.head.sha }}
18+

Makefile

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -130,6 +130,13 @@ bingo-upgrade: $(BINGO) #EXHELP Upgrade tools
130130
$(BINGO) get "$$pkg@latest"; \
131131
done
132132

133+
.PHONY: verify-crd-compatibility
134+
CRD_DIFF_ORIGINAL_REF := main
135+
CRD_DIFF_UPDATED_REF := HEAD
136+
CRD_DIFF_CONFIG := crd-diff-config.yaml
137+
verify-crd-compatibility: $(CRD_DIFF)
138+
$(CRD_DIFF) --config="${CRD_DIFF_CONFIG}" "git://${CRD_DIFF_ORIGINAL_REF}?path=config/base/crd/bases/olm.operatorframework.io_clusterextensions.yaml" "git://${CRD_DIFF_UPDATED_REF}?path=config/base/crd/bases/olm.operatorframework.io_clusterextensions.yaml"
139+
133140
.PHONY: test
134141
test: manifests generate fmt vet test-unit test-e2e #HELP Run all tests.
135142

crd-diff-config.yaml

Lines changed: 109 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,109 @@
1+
checks:
2+
crd:
3+
scope:
4+
enabled: true
5+
existingFieldRemoval:
6+
enabled: true
7+
storedVersionRemoval:
8+
enabled: true
9+
version:
10+
sameVersion:
11+
enabled: true
12+
unhandledFailureMode: "Closed"
13+
enum:
14+
enabled: true
15+
removalEnforcement: "Strict"
16+
additionEnforcement: "Strict"
17+
default:
18+
enabled: true
19+
changeEnforcement: "Strict"
20+
removalEnforcement: "Strict"
21+
additionEnforcement: "Strict"
22+
required:
23+
enabled: true
24+
newEnforcement: "Strict"
25+
type:
26+
enabled: true
27+
changeEnforcement: "Strict"
28+
maximum:
29+
enabled: true
30+
additionEnforcement: "Strict"
31+
decreaseEnforcement: "Strict"
32+
maxItems:
33+
enabled: true
34+
additionEnforcement: "Strict"
35+
decreaseEnforcement: "Strict"
36+
maxProperties:
37+
enabled: true
38+
additionEnforcement: "Strict"
39+
decreaseEnforcement: "Strict"
40+
maxLength:
41+
enabled: true
42+
additionEnforcement: "Strict"
43+
decreaseEnforcement: "Strict"
44+
minimum:
45+
enabled: true
46+
additionEnforcement: "Strict"
47+
increaseEnforcement: "Strict"
48+
minItems:
49+
enabled: true
50+
additionEnforcement: "Strict"
51+
increaseEnforcement: "Strict"
52+
minProperties:
53+
enabled: true
54+
additionEnforcement: "Strict"
55+
increaseEnforcement: "Strict"
56+
minLength:
57+
enabled: true
58+
additionEnforcement: "Strict"
59+
increaseEnforcement: "Strict"
60+
servedVersion:
61+
enabled: true
62+
unhandledFailureMode: "Closed"
63+
enum:
64+
enabled: true
65+
removalEnforcement: "Strict"
66+
additionEnforcement: "Strict"
67+
default:
68+
enabled: true
69+
changeEnforcement: "Strict"
70+
removalEnforcement: "Strict"
71+
additionEnforcement: "Strict"
72+
required:
73+
enabled: true
74+
newEnforcement: "Strict"
75+
type:
76+
enabled: true
77+
changeEnforcement: "Strict"
78+
maximum:
79+
enabled: true
80+
additionEnforcement: "Strict"
81+
decreaseEnforcement: "Strict"
82+
maxItems:
83+
enabled: true
84+
additionEnforcement: "Strict"
85+
decreaseEnforcement: "Strict"
86+
maxProperties:
87+
enabled: true
88+
additionEnforcement: "Strict"
89+
decreaseEnforcement: "Strict"
90+
maxLength:
91+
enabled: true
92+
additionEnforcement: "Strict"
93+
decreaseEnforcement: "Strict"
94+
minimum:
95+
enabled: true
96+
additionEnforcement: "Strict"
97+
increaseEnforcement: "Strict"
98+
minItems:
99+
enabled: true
100+
additionEnforcement: "Strict"
101+
increaseEnforcement: "Strict"
102+
minProperties:
103+
enabled: true
104+
additionEnforcement: "Strict"
105+
increaseEnforcement: "Strict"
106+
minLength:
107+
enabled: true
108+
additionEnforcement: "Strict"
109+
increaseEnforcement: "Strict"

0 commit comments

Comments
 (0)