Skip to content

Commit e711559

Browse files
authored
🌱 add verify-crd-compatibility make target and GHA (#471)
* (ci): add verify-crd-compatibility make target and GHA using the crd-diff tool with the same configuration as recently merged into operator-controller Signed-off-by: everettraven <[email protected]> * improve local developer experience Signed-off-by: everettraven <[email protected]> --------- Signed-off-by: everettraven <[email protected]>
1 parent 2bfc219 commit e711559

File tree

7 files changed

+470
-0
lines changed

7 files changed

+470
-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
GINKGO := $(GOBIN)/ginkgo-v2.21.0
3339
$(GINKGO): $(BINGO_DIR)/ginkgo.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: 323 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
GINKGO="${GOBIN}/ginkgo-v2.21.0"
1618

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

.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_SOURCE="git://${{ github.event.pull_request.head.sha }}?path=config/base/crd/bases/olm.operatorframework.io_clustercatalogs.yaml"
18+

Makefile

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -131,6 +131,13 @@ tidy: ## Update dependencies
131131
verify: tidy fmt vet generate ## Verify the current code generation and lint
132132
git diff --exit-code
133133

134+
.PHONY: verify-crd-compatibility
135+
CRD_DIFF_ORIGINAL_REF := main
136+
CRD_DIFF_UPDATED_SOURCE := file://config/base/crd/bases/olm.operatorframework.io_clustercatalogs.yaml
137+
CRD_DIFF_CONFIG := crd-diff-config.yaml
138+
verify-crd-compatibility: $(CRD_DIFF)
139+
$(CRD_DIFF) --config="${CRD_DIFF_CONFIG}" "git://${CRD_DIFF_ORIGINAL_REF}?path=config/base/crd/bases/olm.operatorframework.io_clustercatalogs.yaml" ${CRD_DIFF_UPDATED_SOURCE}
140+
134141
.PHONY: lint
135142
lint: $(GOLANGCI_LINT) ## Run golangci linter.
136143
$(GOLANGCI_LINT) run --build-tags $(GO_BUILD_TAGS) $(GOLANGCI_LINT_ARGS)

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)