Skip to content

Commit 46f90ea

Browse files
committed
Support for v04 Context
Add a new context type for new fields in the context introduced in v0.4. Create new interfaces to match the new fields as well and update the templates to use the new context and implement the new interfaces when the spec version is not 0.3.x. Add a new version of the test type that is used to test the generator code so that we can test generating for the new version. Updated the logic to generate the schema in a golang file to use it as a local schema database for the jsonschema library to validate documents. The schemas are precompiled at init time now, which simplifies the logic downstream in the code. Signed-off-by: Andrea Frittoli <[email protected]>
1 parent 6deb676 commit 46f90ea

File tree

141 files changed

+5297
-1058
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

141 files changed

+5297
-1058
lines changed

.github/workflows/ci.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,13 +23,13 @@ jobs:
2323
- name: Setup Go
2424
uses: actions/setup-go@v5
2525
with:
26-
go-version: 1.19
26+
go-version: 1.21
2727
- name: Format check
2828
run: make fmt
2929
- name: golangci-lint
3030
uses: golangci/golangci-lint-action@v6
3131
with:
32-
version: v1.52
32+
version: v1.59.1
3333
args: --build-tags testonly
3434
- name: Check generated code
3535
run: make generate

.github/workflows/coverage.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ jobs:
2626
- name: Setup Go
2727
uses: actions/setup-go@v5
2828
with:
29-
go-version: 1.19
29+
go-version: 1.21
3030
- name: Generate coverage report
3131
run: make test
3232
- name: Upload coverage reports to Codecov

Makefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ importfmt: get-fmt-deps
5555
goimports -w $(GO_DEPENDENCIES)
5656

5757
get-fmt-deps: ## Install test dependencies
58-
$(GO_NOMOD) get golang.org/x/tools/cmd/goimports
58+
$(GO) install golang.org/x/tools/cmd/goimports
5959

6060
.PHONY: lint
6161
lint: ## Lint the code

go.mod

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
module github.com/cdevents/sdk-go
22

3-
go 1.18
3+
go 1.21
44

55
require (
66
github.com/cloudevents/sdk-go/v2 v2.15.2
7-
github.com/google/go-cmp v0.5.8
7+
github.com/google/go-cmp v0.6.0
88
github.com/google/uuid v1.1.2
99
github.com/package-url/packageurl-go v0.1.1
10-
github.com/santhosh-tekuri/jsonschema/v5 v5.0.0
10+
github.com/santhosh-tekuri/jsonschema/v6 v6.0.1
1111
golang.org/x/text v0.14.0
1212
)
1313

@@ -16,7 +16,8 @@ require (
1616
github.com/go-playground/universal-translator v0.18.0 // indirect
1717
github.com/leodido/go-urn v1.2.1 // indirect
1818
golang.org/x/crypto v0.17.0 // indirect
19-
golang.org/x/sys v0.15.0 // indirect
19+
golang.org/x/sys v0.21.0 // indirect
20+
golang.org/x/tools v0.22.0 // indirect
2021
)
2122

2223
require (
@@ -27,6 +28,6 @@ require (
2728
go.uber.org/atomic v1.7.0 // indirect
2829
go.uber.org/multierr v1.6.0 // indirect
2930
go.uber.org/zap v1.17.0 // indirect
30-
golang.org/x/mod v0.9.0
31+
golang.org/x/mod v0.18.0
3132
gopkg.in/yaml.v2 v2.4.0 // indirect
3233
)

go.sum

Lines changed: 17 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@ github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ3
44
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
55
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
66
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
7+
github.com/dlclark/regexp2 v1.11.0 h1:G/nrcoOa7ZXlpoa/91N3X7mM3r8eIlMBBJZvsz/mxKI=
8+
github.com/dlclark/regexp2 v1.11.0/go.mod h1:DHkYz0B9wPfa6wondMfaivmHpzrQ3v9q8cnmRbL6yW8=
79
github.com/go-playground/assert/v2 v2.0.1 h1:MsBgLAaY856+nPRTKrp3/OZK38U/wa0CcBYNjji3q3A=
810
github.com/go-playground/assert/v2 v2.0.1/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4=
911
github.com/go-playground/locales v0.14.0 h1:u50s323jtVGugKlcYeyzC0etD1HifMjqmJqb8WugfUU=
@@ -12,8 +14,8 @@ github.com/go-playground/universal-translator v0.18.0 h1:82dyy6p4OuJq4/CByFNOn/j
1214
github.com/go-playground/universal-translator v0.18.0/go.mod h1:UvRDBj+xPUEGrFYl+lu/H90nyDXpg0fqeB/AQUGNTVA=
1315
github.com/go-playground/validator/v10 v10.11.1 h1:prmOlTVv+YjZjmRmNSF3VmspqJIxJWXmqUsHwfTRRkQ=
1416
github.com/go-playground/validator/v10 v10.11.1/go.mod h1:i+3WkQ1FvaUjjxh1kSvIA4dMGDBiPU55YFDl0WbKdWU=
15-
github.com/google/go-cmp v0.5.8 h1:e6P7q2lk1O+qJJb4BtCQXlK8vWEO8V1ZeuEdJNOqZyg=
16-
github.com/google/go-cmp v0.5.8/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
17+
github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI=
18+
github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
1719
github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
1820
github.com/google/uuid v1.1.2 h1:EVhdT+1Kseyi1/pUmXKaFxYsDNy9RQYkMWRH68J/W7Y=
1921
github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
@@ -37,18 +39,21 @@ github.com/package-url/packageurl-go v0.1.1/go.mod h1:uQd4a7Rh3ZsVg5j0lNyAfyxIeG
3739
github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA=
3840
github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
3941
github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
42+
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
4043
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
4144
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
4245
github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc=
4346
github.com/rogpeppe/go-internal v1.8.0/go.mod h1:WmiCO8CzOY8rg0OYDC4/i/2WRWAB6poM+XZ2dLUbcbE=
44-
github.com/santhosh-tekuri/jsonschema/v5 v5.0.0 h1:TToq11gyfNlrMFZiYujSekIsPd9AmsA2Bj/iv+s4JHE=
45-
github.com/santhosh-tekuri/jsonschema/v5 v5.0.0/go.mod h1:FKdcjfQW6rpZSnxxUvEA5H/cDPdvJ/SZJQLWWXWGrZ0=
47+
github.com/santhosh-tekuri/jsonschema/v6 v6.0.1 h1:PKK9DyHxif4LZo+uQSgXNqs0jj5+xZwwfKHgph2lxBw=
48+
github.com/santhosh-tekuri/jsonschema/v6 v6.0.1/go.mod h1:JXeL+ps8p7/KNMjDQk3TCwPpBy0wYklyWTfbkIzdIFU=
4649
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
4750
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
4851
github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
4952
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
5053
github.com/stretchr/testify v1.8.0 h1:pSgiaMZlXftHpm5L7V1+rVB+AZJydKsMxsQBIJw4PKk=
54+
github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
5155
github.com/valyala/bytebufferpool v1.0.0 h1:GqA5TC/0021Y/b9FG4Oi9Mr3q7XYx6KllzawFIhcdPw=
56+
github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc=
5257
go.uber.org/atomic v1.7.0 h1:ADUqmZGgLDDfbSL9ZmPxKTybcoEYHgpYfELNoN+7hsw=
5358
go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc=
5459
go.uber.org/multierr v1.6.0 h1:y6IPFStTAIT5Ytl7/XYmHvzXQ7S3g/IeZW9hyZ5thw4=
@@ -58,22 +63,25 @@ go.uber.org/zap v1.17.0/go.mod h1:MXVU+bhUf/A7Xi2HNOnopQOrmycQ5Ih87HtOu4q5SSo=
5863
golang.org/x/crypto v0.0.0-20211215153901-e495a2d5b3d3/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
5964
golang.org/x/crypto v0.17.0 h1:r8bRNjWL3GshPW3gkd+RpvzWrZAwPS49OmTGZ/uhM4k=
6065
golang.org/x/crypto v0.17.0/go.mod h1:gCAAfMLgwOJRpTjQ2zCCt2OcSfYMTeZVSRtQlPC7Nq4=
61-
golang.org/x/mod v0.9.0 h1:KENHtAZL2y3NLMYZeHY9DW8HW8V+kQyJsY/V9JlKvCs=
62-
golang.org/x/mod v0.9.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
66+
golang.org/x/mod v0.18.0 h1:5+9lSbEzPSdWkH32vYPBwEpX8KwDbM52Ud9xBUvNlb0=
67+
golang.org/x/mod v0.18.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c=
6368
golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
6469
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
6570
golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
6671
golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
6772
golang.org/x/sys v0.0.0-20210806184541-e5e7981a1069/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
68-
golang.org/x/sys v0.15.0 h1:h48lPFYpsTvQJZF4EKyI4aLHaev3CxivZmv7yZig9pc=
69-
golang.org/x/sys v0.15.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
73+
golang.org/x/sys v0.21.0 h1:rF+pYz3DAGSQAxAu1CbC7catZg4ebC4UIeIhKxBZvws=
74+
golang.org/x/sys v0.21.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
7075
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
7176
golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
7277
golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
7378
golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ=
7479
golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU=
7580
golang.org/x/time v0.0.0-20210723032227-1f47c861a9ac h1:7zkz7BUtwNFFqcowJ+RIgu2MaV/MapERkDIy+mwPyjs=
81+
golang.org/x/time v0.0.0-20210723032227-1f47c861a9ac/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
7682
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
83+
golang.org/x/tools v0.22.0 h1:gqSGLZqv+AI9lIQzniJ0nZDRG5GBPsSi+DRNHWNz6yA=
84+
golang.org/x/tools v0.22.0/go.mod h1:aCwcsjqvq7Yqt6TNyX7QMU2enbQ/Gt0bo6krSeEri+c=
7785
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
7886
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
7987
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=
@@ -84,3 +92,4 @@ gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ=
8492
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
8593
gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
8694
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
95+
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=

pkg/api/bindings.go

Lines changed: 18 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -27,37 +27,27 @@ import (
2727
cloudevents "github.com/cloudevents/sdk-go/v2"
2828
"github.com/go-playground/validator/v10"
2929
purl "github.com/package-url/packageurl-go"
30-
jsonschema "github.com/santhosh-tekuri/jsonschema/v5"
3130
"golang.org/x/mod/semver"
3231
)
3332

3433
const SCHEMA_ID_REGEX = `^https://cdevents.dev/([0-9]\.[0-9])\.[0-9]/schema/([^ ]*)$`
3534

3635
var (
3736
// Validation helper as singleton
38-
validate *validator.Validate
37+
validate *validator.Validate
3938
CDEventsSchemaIdRegex = regexp.MustCompile(SCHEMA_ID_REGEX)
4039
)
4140

42-
// parts := CDEventsSchemaIdRegex.FindStringSubmatch(url)
43-
// if len(parts) != 3 {
44-
// return nil, fmt.Errorf("cannot parse schema Id %s", url)
45-
// }
46-
// schemaPath := filepath.Join("spec-v" + parts[1], "schemas", parts[2] + ".json")
47-
// schemaFile, err := os.Open(schemaPath)
48-
// if err != nil {
49-
// return nil, fmt.Errorf("failed to load schema %s from %s: %s", url, schemaPath, err)
50-
// }
51-
5241
func init() {
5342
// Register custom validators
5443
validate = validator.New()
55-
err := validate.RegisterValidation("event-type", ValidateEventType)
56-
panicOnError(err)
57-
err = validate.RegisterValidation("uri-reference", ValidateUriReference)
44+
validate.RegisterStructValidation(ValidateEventType, CDEventType{})
45+
err := validate.RegisterValidation("uri-reference", ValidateUriReference)
5846
panicOnError(err)
5947
err = validate.RegisterValidation("purl", ValidatePurl)
6048
panicOnError(err)
49+
err = validate.RegisterValidation("event-link-type", ValidateLinkType)
50+
panicOnError(err)
6151
}
6252

6353
func panicOnError(err error) {
@@ -84,9 +74,11 @@ func ParseType(eventType string) (*CDEventType, error) {
8474
return t, nil
8575
}
8676

87-
func ValidateEventType(fl validator.FieldLevel) bool {
88-
_, err := ParseType(fl.Field().String())
89-
return err == nil
77+
func ValidateEventType(sl validator.StructLevel) {
78+
_, err := ParseType(sl.Current().Interface().(CDEventType).String())
79+
if err != nil {
80+
sl.ReportError(sl.Current().Interface(), "Type", "", "", "")
81+
}
9082
}
9183

9284
func ValidateUriReference(fl validator.FieldLevel) bool {
@@ -99,6 +91,12 @@ func ValidatePurl(fl validator.FieldLevel) bool {
9991
return err == nil
10092
}
10193

94+
func ValidateLinkType(fl validator.FieldLevel) bool {
95+
lt := LinkType(fl.Field().String())
96+
_, ok := LinkTypes[lt]
97+
return ok
98+
}
99+
102100
// AsCloudEvent renders a CDEvent as a CloudEvent
103101
func AsCloudEvent(event CDEventReader) (*cloudevents.Event, error) {
104102
if event == nil {
@@ -141,10 +139,9 @@ func AsJsonString(event CDEventReader) (string, error) {
141139

142140
// Validate checks the CDEvent against the JSON schema and validate constraints
143141
func Validate(event CDEventReader) error {
144-
url, schema := event.GetSchema()
145-
sch, err := jsonschema.CompileString(url, schema)
142+
_, sch, err := event.GetSchema()
146143
if err != nil {
147-
return fmt.Errorf("cannot compile jsonschema %s, %s", url, err)
144+
return err
148145
}
149146
var v interface{}
150147
jsonString, err := AsJsonString(event)

0 commit comments

Comments
 (0)