Compare commits

...

1004 Commits
v0.1 ... main

Author SHA1 Message Date
Doug Davis 4ad3223f05
Merge pull request #1356 from duglin/releases
Update release process
2025-08-15 07:06:24 -07:00
Doug Davis 40cda2e99d more review edits
Signed-off-by: Doug Davis <duglin@gmail.com>
2025-08-15 14:04:35 +00:00
Doug Davis 6749e1fda2 more edits
Signed-off-by: Doug Davis <duglin@gmail.com>
2025-07-31 11:56:59 +00:00
Doug Davis 177d4fe98f Update release process
- create a new branch for each release instead of a tag/github-release

Signed-off-by: Doug Davis <duglin@gmail.com>
2025-07-30 18:02:57 +00:00
Doug Davis e2d119e26d
Merge pull request #1353 from yordis/yordis/causationid-extension
feat(extensions): add event tracing extension with correlationid and causationid
2025-07-24 16:03:37 -04:00
Doug Davis e007e0aecb
Merge pull request #1355 from duglin/v2items
Add a "v2.md" file so we can close v2 issues/PRs
2025-07-24 15:57:55 -04:00
Doug Davis 11da3778f3 Add a "v2.md" file so we can close v2 issues/PRs
Signed-off-by: Doug Davis <duglin@gmail.com>
2025-07-24 19:55:22 +00:00
Remi Cattiau c5eb14ae13
feat: update github adapter spec (#1306)
* fix: pages is an array so none can be considered the main one

Signed-off-by: Remi Cattiau <remi@cattiau.com>

* feat: add PackageEvent

Signed-off-by: Remi Cattiau <remi@cattiau.com>

* feat: add SponsorshipEvent

Signed-off-by: Remi Cattiau <remi@cattiau.com>

* feat: add BranchProtectionRuleEvent

Signed-off-by: Remi Cattiau <remi@cattiau.com>

* feat: add BranchProtectionConfigurationEvent and CustomPropertyEvent

Signed-off-by: Remi Cattiau <remi@cattiau.com>

* feat: add more missing events

Signed-off-by: Remi Cattiau <remi@cattiau.com>

* feat: add missing CodeScanningAlertEvent

Signed-off-by: Remi Cattiau <remi@cattiau.com>

* wip

Signed-off-by: Remi Cattiau <remi@cattiau.com>

* fix: dug last remarks

Signed-off-by: Remi Cattiau <remi@cattiau.com>

* fix: should case

Signed-off-by: Remi Cattiau <remi@cattiau.com>

---------

Signed-off-by: Remi Cattiau <remi@cattiau.com>
2025-07-17 12:54:02 -04:00
Yordis Prieto a43f83658e
feat(extensions): add event tracing extension with correlationid and causationid
closes #25

Signed-off-by: Yordis Prieto <yordis.prieto@gmail.com>
2025-07-14 15:02:06 -04:00
Jon Skeet 94c622d44a
Create a new issue template (#1350)
* Create a new issue template

Fixes #1348

Signed-off-by: Jon Skeet <jonskeet@google.com>

* Wrap text

Signed-off-by: Jon Skeet <skeet@pobox.com>

---------

Signed-off-by: Jon Skeet <jonskeet@google.com>
Signed-off-by: Jon Skeet <skeet@pobox.com>
2025-06-19 12:08:17 -04:00
Fabrizio Lazzaretti 3fd0012454
AsyncAPI with CloudEvents (#1349)
* AsyncAPI with CloudEvents

Adding a first draft according to https://github.com/cloudevents/spec/issues/1276

Signed-off-by: Lazzaretti <fabrizio@lazzaretti.me>

* add changes from code review

- remove intorudcion
- wrap the lines at 80 chars
- s/should/will/
- create translation files he/CN

Signed-off-by: Lazzaretti <fabrizio@lazzaretti.me>

* fix: title naming

Signed-off-by: Lazzaretti <fabrizio@lazzaretti.me>

* Add short samples on how to add CloudEvents support to AsyncAPI

Signed-off-by: Lazzaretti <fabrizio@lazzaretti.me>

* Change links for asyncapi-traits to location after merging

Signed-off-by: Lazzaretti <fabrizio@lazzaretti.me>

---------

Signed-off-by: Lazzaretti <fabrizio@lazzaretti.me>
2025-06-15 20:21:29 -04:00
Doug Davis c932302d7a
Merge pull request #1351 from duglin/fixtool
ignore .github files
2025-06-15 11:03:28 -04:00
Doug Davis 5f90878705 ignote .github files
Signed-off-by: Doug Davis <duglin@gmail.com>
2025-06-15 15:01:42 +00:00
Doug Davis 67163e50ef
Merge pull request #1341 from thompson-tomo/task/DocTweaks
Make adapters.md the readme for the addapters folder
2025-05-15 13:10:24 -04:00
James Thompson 24ad80a58e Make adapters.md the readme for the addapters folder
Signed-off-by: James Thompson <thompson.tomo@outlook.com>
2025-05-10 15:38:58 +10:00
Emmanuel Ferdman 43f1c5359c
Resolve deprecation warnings (#1336)
* Resolve bs4 deprecation warnings

Signed-off-by: Emmanuel Ferdman <emmanuelferdman@gmail.com>

* Resolve pytest deprecation warnings

Signed-off-by: Emmanuel Ferdman <emmanuelferdman@gmail.com>

---------

Signed-off-by: Emmanuel Ferdman <emmanuelferdman@gmail.com>
2025-04-17 16:57:12 -04:00
Doug Davis 8f8770737c
Merge pull request #1334 from duglin/issue1251
wording tweak for issue 1251
2025-04-17 13:41:17 -04:00
Doug Davis 8386fa6743 wording tweak for issue 1251
Signed-off-by: Doug Davis <duglin@gmail.com>
2025-04-17 17:40:24 +00:00
Doug Davis 37545bfcc8
Merge pull request #1333 from duglin/fixci
fix ci issue
2025-03-27 14:07:21 -04:00
Doug Davis 2e9e677f1d fix ci issue
Signed-off-by: Doug Davis <duglin@gmail.com>
2025-03-27 18:03:47 +00:00
Doug Davis a31214efab
Merge pull request #1332 from duglin/removebot
Remove the "stale" action/bot per 3/20 call
2025-03-27 13:01:31 -04:00
Doug Davis 721144c759 Remove the "stale" action/bot per 3/20 call
Signed-off-by: Doug Davis <duglin@gmail.com>
2025-03-20 16:43:09 +00:00
Doug Davis f65302fb7c
Merge pull request #1329 from xibz/main
Adds CDEvents to docs/open-source.md
2025-02-20 13:10:57 -05:00
benjamin-j-powell b5dc5ffd3e
update(docs): Add CDEvents to open-source.md
This commit adds the CDEvents project to teh open source list.

Signed-off-by: benjamin-j-powell <bjp@apple.com>
2025-02-13 15:12:50 -06:00
Doug Davis a85940fc1e
Merge pull request #1328 from duglin/xReg7
lowercase all attributes in subscription spec
2025-02-13 15:24:17 -05:00
Doug Davis 8c54946e50
Merge pull request #1327 from neuroglia-io/main
Add `Cloud Shapes` as a product that use the CloudEvents spec
2025-02-13 15:23:57 -05:00
Doug Davis fdab0b5c29 lowercase all attributes
Signed-off-by: Doug Davis <duglin@gmail.com>
2025-02-12 17:56:05 +00:00
Charles d'Avernas 0ce5ea4163
Add `Cloud Shapes` as products that use the CloudEvents spec
Signed-off-by: Charles d'Avernas <charles.davernas@neuroglia.io>
2025-02-12 12:27:29 +01:00
Charles d'Avernas fbb00366d6
Add `Cloud Streams` and `Synapse` as products that use the `CloudEvents` spec (#1326)
* Add CloudStreams and Synapse as products that use the CloudEvents spec

Signed-off-by: Charles d'Avernas <charles.davernas@neuroglia.io>

* Renamed cloud events into CloudEvents

Signed-off-by: Charles d'Avernas <charles.davernas@neuroglia.io>

---------

Signed-off-by: Charles d'Avernas <charles.davernas@neuroglia.io>
2025-02-06 13:27:10 -05:00
Doug Davis d130533898
Merge pull request #1322 from duglin/1317continue
Add appendix to data classification extension
2025-01-16 12:50:49 -05:00
Doug Davis fed55696ea Add appendix to data classification extension
See #1317

Signed-off-by: Doug Davis <duglin@gmail.com>
2025-01-14 13:23:45 +00:00
Rob b1643cf6f9
Add data-classification.md extension (#1317)
* Add data-classification.md extension

Signed-off-by: Rob Sessink <rob.sessink@gmail.com>

* FIX based upon PR comments: correct spelling, add link in extensions/README.md and usage of MUST keyword in example use case
-

Signed-off-by: Rob Sessink <rob.sessink@gmail.com>

* FIX based upon PR comments: improve spelling

Signed-off-by: Rob Sessink <rob.sessink@gmail.com>

* FIX based upon PR comments: improve description around recommended labels, remove 'applicability constraints', extend usage section.
-

Signed-off-by: Rob Sessink <rob.sessink@gmail.com>

* FIX based upon PR comments: improve wording and usage of notational conventions
-

Signed-off-by: Rob Sessink <rob.sessink@gmail.com>

* FIX: add missing 'of'

Signed-off-by: Rob Sessink <rob.sessink@gmail.com>

* FIX based upon PR comments: extend usage section to state expectations when intermediaries/consumers encounter unknown attribute values.
-

Signed-off-by: Rob Sessink <rob.sessink@gmail.com>

* FIX: must -> MUST

Signed-off-by: Rob Sessink <rob.sessink@gmail.com>

* FIX based upon PR comments: in Usage section change 'ignore event' into 'report error'.

Signed-off-by: Rob Sessink <rob.sessink@gmail.com>

---------

Signed-off-by: Rob Sessink <rob.sessink@gmail.com>
Co-authored-by: Rob Sessink <rob.sessink@gmail.com>
2024-12-12 14:09:56 -05:00
Doug Davis 68902074ee
Merge pull request #1320 from duglin/urlCheck
add another trusted host
2024-11-20 09:27:19 -05:00
Doug Davis 0c377f7cae add another trusted host
show the error when we fail

Signed-off-by: Doug Davis <duglin@gmail.com>
2024-11-20 14:26:15 +00:00
Doug Davis b131f9725c
Merge pull request #1319 from Bert-R/patch-1
docs: Textual correction
2024-11-14 12:21:58 -05:00
Bert Roos 0dad249627
docs: Textual correction
which --> that

Signed-off-by: Bert Roos <Bert-R@users.noreply.github.com>
2024-11-13 15:40:35 +01:00
Doug Davis 8463221d42
Merge pull request #1315 from vandewillysilva/add-contributor
docs: add vandewilly to contributors list
2024-10-17 14:00:05 -04:00
Vandewilly Oliveira da Silva 7f06c5c5c9
docs: add vandewilly to contributors list
Adding myself to the contributors list. It's a small thing, but
since I contributed to the deprecation extension, it's important
for me to be included.

Signed-off-by: Vandewilly Oliveira da Silva <vandewilly.oliveira-da.silva@hpe.com>
2024-10-16 13:13:04 -04:00
Doug Davis dc521c077d
Merge pull request #1314 from rob-sessink/feature/bam-extension-typos
Fix typos in bam.md
2024-10-03 13:22:05 -04:00
Rob Sessink 8c0111f18e Fix typos in bam.md
Signed-off-by: Rob Sessink <rob.sessink@gmail.com>
2024-09-30 21:44:47 +02:00
Doug Davis 45026679ee
Merge pull request #1311 from jskeet/rabbit-mq
Add RabbitMQ to proprietary specs and SDK support matrix
2024-09-26 13:44:39 -04:00
Jon Skeet beb886aa65 Add RabbitMQ to proprietary specs and SDK support matrix
Signed-off-by: Jon Skeet <jonskeet@google.com>
2024-09-26 11:50:09 +01:00
Doug Davis 6e33dd6b62
Merge pull request #1310 from henriqueblang/fix-typo-webhooks
chore: remove extra 'is'
2024-09-17 12:54:53 -04:00
Henrique Barcia Lang 9642361f6e chore: remove extra 'is'
Signed-off-by: Henrique Barcia Lang <henriquebarcia@hotmail.com>
2024-09-17 13:21:35 -03:00
Vandewilly Silva b86ed0a917
Add CloudEvents extension for deprecated events (#1307)
* Add CloudEvents extension for deprecated events

Introduced the `deprecation` attribute to indicate when an event type is deprecated,
and added the `sunset` attribute to specify the date and time when the event
will become unsupported. This extension provides clear guidelines and examples for
implementing these attributes, aiming to improve lifecycle management and ensure
better communication with consumers.

Signed-off-by: Vandewilly Oliveira da Silva <vandewilly.oliveira-da.silva@hpe.com>

* Fix PR comments: Add deprecationmigration and deprecationfrom

Signed-off-by: Vandewilly Oliveira da Silva <vandewilly.oliveira-da.silva@hpe.com>

* Fix typos

Signed-off-by: Vandewilly Oliveira da Silva <vandewilly.oliveira-da.silva@hpe.com>

* Fix PR comments, and renamed deprecated field

Signed-off-by: Vandewilly Oliveira da Silva <vandewilly.oliveira-da.silva@hpe.com>

* Remove reference to RFC 3339

Signed-off-by: Vandewilly Oliveira da Silva <vandewilly.oliveira-da.silva@hpe.com>

* Remove deprecated unnecessary constraint

Signed-off-by: Vandewilly Oliveira da Silva <vandewilly.oliveira-da.silva@hpe.com>

* Remove quotes from boolean value example

Signed-off-by: Vandewilly Oliveira da Silva <vandewilly.oliveira-da.silva@hpe.com>

* Change deprecated to be Required

Signed-off-by: Vandewilly Oliveira da Silva <vandewilly.oliveira-da.silva@hpe.com>

* Make deprecate have a value of true all the time

Signed-off-by: Vandewilly Oliveira da Silva <vandewilly.oliveira-da.silva@hpe.com>

* Improve clarity

Signed-off-by: Vandewilly Oliveira da Silva <vandewilly.oliveira-da.silva@hpe.com>

* Fix typo

Signed-off-by: Vandewilly Oliveira da Silva <vandewilly.oliveira-da.silva@hpe.com>

---------

Signed-off-by: Vandewilly Oliveira da Silva <vandewilly.oliveira-da.silva@hpe.com>
2024-08-26 22:20:14 -04:00
Doug Davis 04a47b7991
Merge pull request #1308 from duglin/avro
fix typo in avro spec
2024-08-23 07:23:21 -04:00
Doug Davis e1b4f2c5ea fix typo in avro spec
Signed-off-by: Doug Davis <dug@microsoft.com>
2024-08-21 11:57:05 +00:00
Doug Davis 25fa60b04e
Merge pull request #1304 from dynatrace-oss-contrib/feat/clarify-distributed-tracing-extension
docs: link distributed tracing extension to otel semconv
2024-07-25 12:37:34 -04:00
Doug Davis dc92e423fd
Merge pull request #1305 from duglin/securityExamples
Provide some guidance on how security can be layered on top of CE
2024-07-25 12:36:45 -04:00
Doug Davis 6ed43691d8 Provide some guidance on how security can be layered on top of CE
Fixes #1290
Fixes #1288

Signed-off-by: Doug Davis <dug@microsoft.com>
2024-07-18 16:43:02 +00:00
Klaus Deißner 96134ee30b
Clean up contributors.md (#1303)
* Removed company names and put names in alphabetical order

Signed-off-by: Klaus Deißner <klaus.deissner@sap.com>

* Removed company names and put names in alphabetical order

Signed-off-by: Klaus Deißner <klaus.deissner@sap.com>

* Update docs/contributors.md

Co-authored-by: Calum Murray <cmurray@redhat.com>
Signed-off-by: Klaus Deißner <klaus.deissner@sap.com>

---------

Signed-off-by: Klaus Deißner <klaus.deissner@sap.com>
Co-authored-by: Calum Murray <cmurray@redhat.com>
2024-07-18 12:26:06 -04:00
Joao Grassi 93565f4ae8 doc: link distributed tracing extension to otel semconv
Signed-off-by: Joao Grassi <5938087+joaopgrassi@users.noreply.github.com>
2024-07-16 10:24:15 +02:00
Doug Davis 6374c6fca7
Merge pull request #1299 from duglin/fixname
fixup some cesql names
2024-06-17 14:16:05 -04:00
Doug Davis b20cf0ac60 fixup some cersql names
Signed-off-by: Doug Davis <dug@microsoft.com>
2024-06-17 18:14:50 +00:00
Calum Murray 82c16f63a0
CESQL v1 release notes (#1298)
* docs: add release note for CESQL v1

Signed-off-by: Calum Murray <cmurray@redhat.com>

* docs: add link to cesql v1 release notes to RELEASES.md

Signed-off-by: Calum Murray <cmurray@redhat.com>

* fix: order by release date instead of group

Signed-off-by: Calum Murray <cmurray@redhat.com>

* Address review comments

* Add link to cesql v1 in releases table
* Add short paragraph to cesql README

Signed-off-by: Calum Murray <cmurray@redhat.com>

---------

Signed-off-by: Calum Murray <cmurray@redhat.com>
2024-06-17 13:44:31 -04:00
Doug Davis 6e6e66555f
Merge pull request #1297 from gadware/patch-1
Update adapters.md
2024-06-13 13:42:05 -04:00
Calum Murray ed8a2cf38b
Vote: moving CESQL spec to v1 (#1293)
* change cesql spec to v1

Signed-off-by: Calum Murray <cmurray@redhat.com>

* fix: translations also marked as v1

Signed-off-by: Calum Murray <cmurray@redhat.com>

* fix: integer literal does not require a +/- in front

Signed-off-by: Calum Murray <cmurray@redhat.com>

---------

Signed-off-by: Calum Murray <cmurray@redhat.com>
2024-06-13 13:40:50 -04:00
Doug Davis d3bca3adee
Merge pull request #1296 from Cali0707/cesql-conformance-fixes
fix: CESQL conformance tests are correct with spec v1
2024-06-13 13:40:07 -04:00
Mostafa.Gad b489a71654
Update adapters.md
Signed-off-by: Mostafa.Gad <35840121+gadware@users.noreply.github.com>
2024-06-13 01:22:07 -04:00
Calum Murray 33836c17ff
fix: conformance tests are correct with spec v1
* Remove IS_(BOOL|INT|STRING) tests since the functions are not required
  by spec
* Fix cast of boolean no longer causing error
* Remove test that requires complete expression evaluation, as the spec
  leaves this to implementations
* Fix remaining tests to return missing attribute errors where necessary

Signed-off-by: Calum Murray <cmurray@redhat.com>
2024-06-11 14:06:35 -04:00
Calum Murray c28210f963
fix: add trailing commas where appropriate for 'that is' in CESQL spec (#1292)
* fix: add trailing commas where appropriate for 'that is'

Signed-off-by: Calum Murray <cmurray@redhat.com>

* cleanup: wrap spec at 80 characters

Signed-off-by: Calum Murray <cmurray@redhat.com>

---------

Signed-off-by: Calum Murray <cmurray@redhat.com>
2024-06-07 10:41:02 -04:00
Calum Murray c0927d1234
Update CESQL tck tests to match spec changes (#1291)
* tck tests reflect spec changes

Signed-off-by: Calum Murray <cmurray@redhat.com>

* Address feedback from @duglin

* Add generic error to README
* Fix match error -> missingAttribute error

Signed-off-by: Calum Murray <cmurray@redhat.com>

---------

Signed-off-by: Calum Murray <cmurray@redhat.com>
2024-06-06 18:54:22 -04:00
Doug Davis 7204b18328
Merge pull request #1287 from duglin/attrNames
attr names SHOULD start with a letter
2024-05-30 12:30:07 -04:00
Calum Murray e30acf32d0
CESQL v1 review changes (#1286)
* clarify integer overflow behaviour, order of evaluation

Signed-off-by: Calum Murray <cmurray@redhat.com>

* Address feedback from @duglin

* Link to ISO 9075
* Fix some typos
* Clarify return types and errors
* Simplify ebnf definitions for value identifiers
* Clarify type casting and behaviour for operators

Signed-off-by: Calum Murray <cmurray@redhat.com>

* further fixes from review by @duglin

Signed-off-by: Calum Murray <cmurray@redhat.com>

* clarify error handling and zero values

Signed-off-by: Calum Murray <cmurray@redhat.com>

* further clarify error handling and zero values

Signed-off-by: Calum Murray <cmurray@redhat.com>

* parenthized -> paranthesized

Signed-off-by: Calum Murray <cmurray@redhat.com>

* more fixes from review by @duglin

Signed-off-by: Calum Murray <cmurray@redhat.com>

* fix the should verification problem

Signed-off-by: Calum Murray <cmurray@redhat.com>

* clarify default type of attributes

Signed-off-by: Calum Murray <cmurray@redhat.com>

* fix indentation of operator precedence

Signed-off-by: Calum Murray <cmurray@redhat.com>

* it's -> its

Signed-off-by: Calum Murray <cmurray@redhat.com>

---------

Signed-off-by: Calum Murray <cmurray@redhat.com>
2024-05-30 12:29:45 -04:00
Calum Murray 66c067b38b
clarify type casting in CESQL spec (#1281)
* clarify type casting in CESQL spec

Signed-off-by: Calum Murray <cmurray@redhat.com>

* fix: addressed feedback from meeting

Signed-off-by: Calum Murray <cmurray@redhat.com>

* address review feedback

Signed-off-by: Calum Murray <cmurray@redhat.com>

* clarify the default values when an error occurs

Signed-off-by: Calum Murray <cmurray@redhat.com>

* fix: may -> MAY

Signed-off-by: Calum Murray <cmurray@redhat.com>

* clarify second operand in LIKE expression MUST be a string literal

Signed-off-by: Calum Murray <cmurray@redhat.com>

* clarify leading zeros

Signed-off-by: Calum Murray <cmurray@redhat.com>

* add table of supported and unsupported type casts

Signed-off-by: Calum Murray <cmurray@redhat.com>

* add boolean <-> integer casting

Signed-off-by: Calum Murray <cmurray@redhat.com>

---------

Signed-off-by: Calum Murray <cmurray@redhat.com>
2024-05-30 12:26:52 -04:00
Doug Davis 0be71570ca attr names SHOULD start with a letter
Fixed #1285

Signed-off-by: Doug Davis <dug@microsoft.com>
2024-05-23 17:40:45 +00:00
Calum Murray e79d7b2cc3
test: tck tests now check that AND and OR operators are short circuit evaluated (#1279)
* test: tck tests now check that AND and OR operators are short circuit evaluated

Signed-off-by: Calum Murray <cmurray@redhat.com>

* fix: test for OR short circuiting uses the OR operator

Signed-off-by: Calum Murray <cmurray@redhat.com>

* test: verify that AND and OR only short circuit when expected to

Signed-off-by: Calum Murray <cmurray@redhat.com>

---------

Signed-off-by: Calum Murray <cmurray@redhat.com>
2024-05-23 13:29:02 -04:00
Doug Davis d697a87692
Merge pull request #1280 from Cali0707/test-invalid-like-pattern-cesql
test: verify that invalid string literals in LIKE expression are a parse error
2024-05-22 10:37:29 -04:00
Doug Davis ecb2721ea6
Merge pull request #1283 from AxelNennker/patch-1
fix typo
2024-05-21 07:23:52 -04:00
Axel Nennker 1f00ea507a
fix typo
Signed-off-by: Axel Nennker <axel.nennker@telekom.de>
2024-05-21 09:26:33 +02:00
Calum Murray b17f24f88f
test: verify that invalid string literals in LIKE expression are a parse error
Signed-off-by: Calum Murray <cmurray@redhat.com>
2024-05-09 14:52:02 -04:00
Doug Davis bf4b4a4c68
Merge pull request #1278 from katallaxie/feat/bam-extension
Adding extension for BAM
2024-05-02 12:50:34 -04:00
Sebastian Döll ba201fa728 Adding extension BAM
Signed-off-by: Sebastian Döll <sebastian@katallaxie.me>
2024-05-02 18:48:49 +02:00
Alexander Köpke 561c5e5401
Adding extension for OPC UA (#1274)
* Initial version for OPC UA extension

Signed-off-by: Alexander Köpke <alexander.koepke@microsoft.com>

* fixed type errors

Signed-off-by: Alexander Köpke <alexander.koepke@microsoft.com>

* split opcuametadataversion into separate attributes; added additional constraints

Signed-off-by: Alexander Köpke <alexander.koepke@microsoft.com>

* Add SingleDataSetMessage constraint

Signed-off-by: Alexander Köpke <alexander.koepke@microsoft.com>

* type need to reference DataSetMessage.MessageType

Signed-off-by: Alexander Köpke <alexander.koepke@microsoft.com>

* fixed spec verification findings

Signed-off-by: Alexander Köpke <alexander.koepke@microsoft.com>

* Added translation files

Signed-off-by: Alexander Köpke <alexander.koepke@microsoft.com>

* integrated review feedback

Signed-off-by: Alexander Köpke <alexander.koepke@microsoft.com>

* added references to OPC UA and OPC UA PubSub

Signed-off-by: Alexander Köpke <alexander.koepke@microsoft.com>

* clarified opcuametadataversion usage when dataschema is used

Signed-off-by: Alexander Köpke <alexander.koepke@microsoft.com>

* Added examples; corrected subject for events; explained use cases and benefits

Signed-off-by: Alexander Köpke <alexander.koepke@microsoft.com>

* Addressed review feedback

Signed-off-by: Alexander Köpke <alexander.koepke@microsoft.com>

* clarify usage of traceparent and recordedtime

Signed-off-by: Alexander Köpke <alexander.koepke@microsoft.com>

* fixed typo Minior -> Minor; clarify usage of extension attributes

Signed-off-by: Alexander Köpke <alexander.koepke@microsoft.com>

---------

Signed-off-by: Alexander Köpke <alexander.koepke@microsoft.com>
2024-04-04 12:22:25 -04:00
Yacine Kheddache a15821bd34
Update demos.md: adding Microcks talk and live demo recording and blo… (#1273)
* Update demos.md: adding Microcks talk and live demo recording and blog post

Signed-off-by: Yacine Kheddache <yacine@microcks.io>

* Update demos.md  dates + reorder

Added dates and unify them + reorder (latest first) entries.

Signed-off-by: Yacine Kheddache <yacine@microcks.io>

* Update demos.md : typo (draft removed)

typo (draft removed)

Signed-off-by: Yacine Kheddache <yacine@microcks.io>

---------

Signed-off-by: Yacine Kheddache <yacine@microcks.io>
2024-03-28 19:31:25 -04:00
Yacine Kheddache 23abcc4f41
Update open-source.md: Add Microcks to open source projects list (#1272)
* Update open-source.md: Add Microcks to open source projects list 

Simulating CloudEvents with AsyncAPI and Microcks link added

Signed-off-by: Yacine Kheddache <yacine@microcks.io>

* Update open-source.md

Microcks: re-order so the list is alphabetized as requested.

Signed-off-by: Yacine Kheddache <yacine@microcks.io>

* Update open-source.md : reorder the entire list by Alphabetical order

reorder the entire list by Alphabetical order as requested 

Signed-off-by: Yacine Kheddache <yacine@microcks.io>

---------

Signed-off-by: Yacine Kheddache <yacine@microcks.io>
2024-03-28 19:13:07 -04:00
Doug Davis 55b53febda
Merge pull request #1271 from duglin/subTypo
Typo: filter->filters
2024-03-28 12:34:49 -04:00
Calum Murray cb26319369
CESQL AND operators are now short-circuit evaluated (#1270)
* CESQL AND operators are now short-circuit evaluated

Signed-off-by: Calum Murray <cmurray@redhat.com>

* wording clarifications to explanation of AND/OR short circuit evaluation

Signed-off-by: Calum Murray <cmurray@redhat.com>

---------

Signed-off-by: Calum Murray <cmurray@redhat.com>
2024-03-25 14:30:45 -04:00
Doug Davis 83a8bd9150
Merge pull request #1268 from jskeet/case-insensitive-content-types
First pass at considering content-type in a case-insensitive way.
2024-03-21 12:33:53 -04:00
Jon Skeet 03aba4adc0 Highlight the need (from RFC2045) to consider media types in a case-insensitive way.
Signed-off-by: Jon Skeet <jonskeet@google.com>
2024-03-21 16:29:13 +00:00
Doug Davis 900900ccfd Typo: filter->filters
Signed-off-by: Doug Davis <dug@microsoft.com>
2024-03-20 19:40:07 +00:00
Doug Davis 285dc27c7f
Merge pull request #1267 from Cali0707/cesql-or-shortcuts
CESQL OR short-circuit evaluation
2024-03-15 07:57:49 -04:00
Doug Davis ddc8be19e3
Merge pull request #1266 from acceptacross/main
chore: fix some typos
2024-03-14 15:05:12 -04:00
Calum Murray 0dc5d9534d
document OR evaluation short-circuiting
Signed-off-by: Calum Murray <cmurray@redhat.com>
2024-03-12 14:34:46 -04:00
acceptacross e9b3aafef5 chore: fix some typos
Signed-off-by: acceptacross <csqcqs@gmail.com>
2024-03-11 18:25:06 +08:00
Doug Davis b9292aaaf4
Merge pull request #1264 from duglin/ref
move documented-extensions to extensions/README.md
2024-03-07 15:15:38 -05:00
Doug Davis 003ad3a35c
Merge pull request #1263 from duglin/IDs
Add some clarifying text about identifying attributes
2024-03-07 15:15:18 -05:00
Doug Davis c859ad54d5 move documented-extensions to extensions/README.md
Signed-off-by: Doug Davis <dug@microsoft.com>
2024-02-29 19:42:46 +00:00
Doug Davis db633018e8 Add some clarifying text about identifying attributes
Signed-off-by: Doug Davis <dug@microsoft.com>
2024-02-29 19:17:13 +00:00
Ervin Varga 3f7a33d7b9
Suggestion about Structuring a Composite "subject" Field (#1261)
* Add example about structuring a composite subject field.

Signed-off-by: Ervin Varga <ervin.varga@gmail.com>

* Fix capitalization of the word "may"

Signed-off-by: Ervin Varga <ervin.varga@gmail.com>

* Fix alignment of text in the raw textual format

Signed-off-by: Ervin Varga <ervin.varga@gmail.com>

* State explicitly that custom extensions should go inside a composite subject.

Signed-off-by: Ervin Varga <ervin.varga@gmail.com>

* Alter proposal by embedding values into the subject field

Signed-off-by: Ervin Varga <ervin.varga@gmail.com>

* Make example compliant with the intended purpose of subject

Signed-off-by: Ervin Varga <ervin.varga@gmail.com>

* Fix inconsistent usage of words describe vs. identify for a subject

Signed-off-by: Ervin Varga <ervin.varga@gmail.com>

* Improve wording of the example

Signed-off-by: Ervin Varga <ervin.varga@gmail.com>

* Improve clarity of composite content for a subject property

Signed-off-by: Ervin Varga <ervin.varga@gmail.com>

---------

Signed-off-by: Ervin Varga <ervin.varga@gmail.com>
2024-02-29 14:11:59 -05:00
Sasha Tkachev ad2ff88a69
fix: use KiB instead of non-standard KBytes and KB (#1262)
* fix: use KiB instead of non-standard KBytes and KB

See https://github.com/cloudevents/spec/issues/1259

Signed-off-by: Sasha  Tkachev <sasha64sasha@gmail.com>

* fix: use KiB in all files

Signed-off-by: Sasha  Tkachev <sasha64sasha@gmail.com>

---------

Signed-off-by: Sasha  Tkachev <sasha64sasha@gmail.com>
2024-02-29 12:27:03 -05:00
Calum Murray efc45dbaaa
Clarify that missing attributes should not result in errors (#1257)
* clarified that missing attributes should not result in errors

Signed-off-by: Calum Murray <cmurray@redhat.com>

* remove missingAttribute errors from tck tests

Signed-off-by: Calum Murray <cmurray@redhat.com>

* MUST not -> MUST NOT

Signed-off-by: Calum Murray <cmurray@redhat.com>

* addressing a missing attribute makes the subexpression false

Signed-off-by: Calum Murray <cmurray@redhat.com>

* fix: clarified language for missing attribute handling

Signed-off-by: Calum Murray <cmurray@redhat.com>

---------

Signed-off-by: Calum Murray <cmurray@redhat.com>
2024-02-22 19:32:38 -05:00
Doug Davis b087efc69d
Merge pull request #1258 from efgpinto/patch-1
docs: update typo in distributed-tracing.md
2024-02-08 10:07:19 -08:00
Doug Davis a900ac699c
Merge pull request #1256 from duglin/gDocs
Add link to google folder
2024-02-08 10:04:39 -08:00
Doug Davis 3ff0462b37
Merge pull request #1255 from Cali0707/tck-test-fixes
Small fixes to CESQL tck test cases
2024-02-08 10:04:21 -08:00
Doug Davis 5fadd5536e
Merge pull request #1252 from duglin/grad
Graduated!
2024-02-08 10:04:01 -08:00
Eduardo Pinto c9bd350fcb
docs: update typo in distributed-tracing.md
Signed-off-by: Eduardo Pinto <efgpinto@gmail.com>
2024-02-06 11:04:24 +00:00
Doug Davis 4c5fea9368 Add link to google folder
Signed-off-by: Doug Davis <dug@microsoft.com>
2024-02-01 20:36:39 +00:00
Doug Davis 146330f6c1 Graduated!
Signed-off-by: Doug Davis <dug@microsoft.com>
2024-02-01 20:23:50 +00:00
Calum Murray d80c7c67f9
fix some tck test cases
Signed-off-by: Calum Murray <cmurray@redhat.com>
2024-02-01 15:14:10 -05:00
Doug Davis f1db8a4600
Merge pull request #1254 from krook/fix-logo-link
Fix broken image URL for CE logo.
2024-01-30 09:01:03 -08:00
Daniel Krook 800f5a2b12
Fix broken image URL for CE logo.
Signed-off-by: Daniel Krook <krook@linux.com>
2024-01-30 11:55:00 -05:00
Doug Davis d2e6980c7e
Merge pull request #1248 from MaryamTaj/issue-1232
Clarify boolean literals in specification
2023-12-07 13:59:48 -05:00
MaryamTaj e0b3078c18 docs: Clarify that booleans are case insensitive
Signed-off-by: MaryamTaj <tajm48822@gmail.com>
2023-12-02 11:02:32 -05:00
Doug Davis 130ba0d183
Merge pull request #1247 from duglin/ext
Add missing ext & make at least one attribute REQUIRED for each ext
2023-11-16 12:25:44 -05:00
Josué Fabricio Urbina González 758a53321e
Add unknown value for authtype enum of Auth Context ext (#1246)
* Change constraint to OPTIONAL for authtype

Issue created for this change: https://github.com/cloudevents/spec/issues/1245

For the recently added extension Auth Context /extensions/authcontext.md the attribute of authtype is the only one marked as REQUIRED in the constraints.

The key principle here is that authtype classification results should be predictable and should not change. However, for some cases the type is preferred to be unknown when we can't determine reliable. The main concern we have is how authtype classifications might change when we are able to classify the request in the future.
As a result if we change from unknown to app_user it is a "breaking" change for API consumers. Since their code may build business logic based on authtype results.

This is the reason we are suggesting making authtype OPTIONAL to avoid having customers build business logic around it.
If we have to return an authtype in a situation where we don't know for certain, I would prefer to add the enum value unknown.
We think is better to avoid this altogether until we can consistently and predictably classify "authtype" to avoid future "breaking change' scenario.

Signed-off-by: Josué Fabricio Urbina González <jfurbina@google.com>

* Add unknown value for authtype

From the discussion of the previous snapshot of github.com/cloudevents/spec/pull/1246

It is preferred to add another value to the authtype enum of `unknown`. This is to avoid setting the attribute as OPTIONAL since all extensions have at least one REQUIRED attribute.

Signed-off-by: Josué Fabricio Urbina González <jfurbina@google.com>

---------

Signed-off-by: Josué Fabricio Urbina González <jfurbina@google.com>
2023-11-16 12:25:19 -05:00
Doug Davis 8664a5245e Add missing ext & make at least one attribute REQUIRED
Signed-off-by: Doug Davis <dug@microsoft.com>
2023-11-15 22:37:26 +00:00
Doug Davis 43afbf55ca
Merge pull request #1244 from duglin/cleanOSS
Remove old OSS projects from open-source.md
2023-10-26 13:00:05 -04:00
Doug Davis a7f82aae72
Merge pull request #1243 from Cali0707/clarify-nonboolean-cesql-result
SQL filter: Clarify that only boolean TRUE values pass filter
2023-10-26 12:48:17 -04:00
Doug Davis 6cc94acabc Remove old OSS projects from open-source.md
Fixes #1242

Signed-off-by: Doug Davis <dug@microsoft.com>
2023-10-26 16:47:48 +00:00
Calum Murray 35eaaae5e9
Clarify that only boolean TRUE values pass filter
Signed-off-by: Calum Murray <cmurray@redhat.com>
2023-10-23 10:22:17 -04:00
Doug Davis d0eccd083b
Merge pull request #1241 from duglin/security
Add our security mailing list to the README
2023-10-19 13:11:12 -04:00
Doug Davis 9730d8ee0b Add our security mailing list to the README
Signed-off-by: Doug Davis <dug@microsoft.com>
2023-10-16 13:09:05 +00:00
Doug Davis c48be59daf
Merge pull request #1229 from duglin/moreGov
more review changes
2023-10-10 12:09:13 -04:00
Calum Murray a04f46e613
Expand tck tests (#1227)
* Add tck test cases for LIKE operator with bool/int type coercion

Signed-off-by: Calum Murray <cmurray@redhat.com>

* Add tck test cases which recreate other SubscriptionsAPI filters

Signed-off-by: Calum Murray <cmurray@redhat.com>

* Add missing sources, fix LIKE expression

Signed-off-by: Calum Murray <cmurray@redhat.com>

* Remove tests with behaviour not specified in the spec

Signed-off-by: Calum Murray <cmurray@redhat.com>

---------

Signed-off-by: Calum Murray <cmurray@redhat.com>
2023-09-28 15:04:31 -04:00
Klaus Deißner 4580f01bcd
Cesql optional (#1228)
* Make the implementation of CESQL OPTIONAL.

Signed-off-by: Klaus Deißner <klaus.deissner@sap.com>

* Update formatting

Signed-off-by: Klaus Deißner <klaus.deissner@sap.com>

* Address review comments

Signed-off-by: Klaus Deißner <klaus.deissner@sap.com>

---------

Signed-off-by: Klaus Deißner <klaus.deissner@sap.com>
2023-09-28 15:03:58 -04:00
Doug Davis 660507801d more review changes
Signed-off-by: Doug Davis <dug@microsoft.com>
2023-09-23 02:18:37 +00:00
Doug Davis 755e45863e
Merge pull request #1226 from duglin/SDKs
Proposed alignment of SDK governance files
2023-09-21 12:22:25 -04:00
Doug Davis 24511af714 Proposed alignment of SDK governance files
Signed-off-by: Doug Davis <dug@microsoft.com>
2023-09-14 18:01:17 +00:00
Doug Davis 2d64459093
Merge pull request #1223 from duglin/typos
missing an 'e'
2023-09-14 13:04:35 -04:00
Doug Davis 7f0d456c6d
Merge pull request #1224 from duglin/tag-review
Changes per TAG Contrib Strategy review
2023-09-14 13:03:10 -04:00
Doug Davis 0707b856fe Changes per TAG Contrib Strategy review
Signed-off-by: Doug Davis <dug@microsoft.com>
2023-09-14 16:59:15 +00:00
Doug Davis a64cb14ae6 missing an 'e'
Signed-off-by: Doug Davis <dug@microsoft.com>
2023-09-07 16:51:36 +00:00
Doug Davis 8d87dfbb91
Merge pull request #1222 from duglin/cleanup
Some minor clean-up of our governance
2023-08-31 12:24:32 -04:00
Doug Davis 4ce357422d Some minor clean-up of our governance
Signed-off-by: Doug Davis <dug@microsoft.com>
2023-08-31 16:18:33 +00:00
Thomas Bouldin ec3309ea9c
Add extension for auth context (#1218)
* Add extension for auth context

Signed-off-by: Thomas Bouldin <inlined@google.com>

* PR feedback

Signed-off-by: Thomas Bouldin <inlined@google.com>

* Fix typo

Signed-off-by: Thomas Bouldin <inlined@google.com>

* Add 'unauthenticated' enum to authtype

Signed-off-by: Thomas Bouldin <inlined@google.com>

---------

Signed-off-by: Thomas Bouldin <inlined@google.com>
2023-07-27 14:06:46 -04:00
Doug Davis 563a63c300
Merge pull request #1216 from duglin/fixes
fix bad link
2023-07-05 09:54:51 -04:00
Doug Davis 6f0ea0a0a4 fix bad link
Signed-off-by: Doug Davis <dug@microsoft.com>
2023-07-05 13:52:03 +00:00
Alex Collins 777d0c0398
Avro Compact Format (#1213)
* Avro Turbo

Signed-off-by: Alex Collins <alex_collins@intuit.com>

ok

Signed-off-by: Alex Collins <alex_collins@intuit.com>

Update cloudevents-turbo.avsc

Signed-off-by: Alex Collins <alexec@users.noreply.github.com>

Update avro-format.md

Signed-off-by: Alex Collins <alexec@users.noreply.github.com>

turbo -> compact

Signed-off-by: Alex Collins <alex_collins@intuit.com>

turbo -> compact

Signed-off-by: Alex Collins <alex_collins@intuit.com>

turbo -> compact

Signed-off-by: Alex Collins <alex_collins@intuit.com>

* Update cloudevents/formats/cloudevents-compact.avsc

Signed-off-by: Alex Collins <alexec@users.noreply.github.com>

* Update cloudevents-compact.avsc

Signed-off-by: Alex Collins <alexec@users.noreply.github.com>

* move into working-drafts folder

Signed-off-by: Alex Collins <alex_collins@intuit.com>

* ok

Signed-off-by: Alex Collins <alex_collins@intuit.com>

---------

Signed-off-by: Alex Collins <alex_collins@intuit.com>
Signed-off-by: Alex Collins <alexec@users.noreply.github.com>
2023-07-05 09:46:17 -04:00
Doug Davis b3a66bebdd
Merge pull request #1208 from aaron-ai/feature/update_docs
Update SDK support status for RocketMQ binding
2023-06-15 12:59:43 -04:00
Doug Davis 678f21f067
Merge pull request #1214 from cloudevents/exts
Clarify RFC language for extensions
2023-06-15 12:59:18 -04:00
Aaron Ai f5046fcbcd Update SDK support status for RocketMQ binding
Signed-off-by: Aaron Ai <yangkun.ayk@gmail.com>
2023-06-02 09:50:52 +08:00
Doug Davis d95b24bbfe Clarify RFC language
Signed-off-by: Doug Davis <dug@microsoft.com>
2023-06-01 20:38:39 +00:00
Dheeraj Nalluri 306daeb0c7
feat: add the `expirytime` extension attribute (#1206)
* feat: add the `expirytime` extension attribute

Signed-off-by: Dheeraj Nalluri <djnalluri@gmail.com>

* fix: review feedback

Signed-off-by: Dheeraj Nalluri <djnalluri@gmail.com>

* fix: more review feedback

Signed-off-by: Dheeraj Nalluri <djnalluri@gmail.com>

---------

Signed-off-by: Dheeraj Nalluri <djnalluri@gmail.com>
2023-05-25 12:35:28 -04:00
Iwan Aucamp fc50d7fb36
feat: add the `recordedtime` extension attribute (#1201)
* feat: add `recordedtime` extension attribute

This extension defines an attribute that represents the time when an occurrence
was recorded in a particular event, i.e. the time when the CloudEvent was
created by a producer.

This enables bitemporal data to be represented with CloudEvents which enables
several use cases described in the specification of the extension attribute.

Signed-off-by: Iwan Aucamp <aucampia@gmail.com>

* changes for review comments

- Mark the attribute as REQUIRED
- Fix a broken sentence
- Removed terminology section as it just repeats what was already
  established earlier.

Signed-off-by: Iwan Aucamp <aucampia@gmail.com>

* Add constraint for relation to occurence time

Given ideal clocks, and given causality holds, occurences should always
be recorded at or after the time of the occurence. But as we don't have
ideal clocks, and might not have causality, it is best to just make this
a loose requirement (i.e. SHOULD) rather than a hard requirement (i.e.
MUST).

Signed-off-by: Iwan Aucamp <aucampia@gmail.com>

---------

Signed-off-by: Iwan Aucamp <aucampia@gmail.com>
2023-05-18 12:14:03 -04:00
Doug Davis 48b2183c1d
Merge pull request #1202 from dazuma/pr/ruby-matrix
Updated Ruby SDK feature support matrix up to version 0.7.0
2023-05-11 14:20:28 -04:00
Daniel Azuma f5c9723f73 Updated Ruby SDK feature support matrix up to version 0.7.0
Signed-off-by: Daniel Azuma <dazuma@google.com>
2023-05-04 20:39:58 +00:00
Doug Davis 1d111b4900
Merge pull request #1199 from cloudevents/sdkSupport
add link to sdk support table
2023-05-04 16:23:17 -04:00
Doug Davis 3fc733d435 add link to sdk support table
Signed-off-by: Doug Davis <dug@microsoft.com>
2023-05-04 15:08:46 +00:00
Doug Davis d8ed86c347
Merge pull request #1196 from cloudevents/removeXreg
remove xReg (and pagination) stuff
2023-04-27 13:01:01 -04:00
Doug Davis b1f64f3598 remove xReg (and pagination) stuff
they're now in github.com/xregistry/spec

Signed-off-by: Doug Davis <dug@microsoft.com>
2023-04-27 16:59:34 +00:00
Doug Davis 09b4b31bfb
Merge pull request #1195 from jskeet/pubsub
Update Google Pub/Sub binding link to new location.
2023-04-20 14:49:20 -04:00
Jon Skeet 3925a70770 Update Google Pub/Sub binding link to new location.
(This completes the long-standing AI in the weekly meeting agenda.)

Signed-off-by: Jon Skeet <jonskeet@google.com>
2023-04-20 07:56:54 +01:00
Doug Davis 17315636aa
Merge pull request #1193 from cloudevents/model
xReg - Lots of changes
2023-04-13 13:23:40 -04:00
Doug Davis 5a32a5b459 Lots of changes...
- Add support for ?model
- Add a Schema URL for the entire registry as part of the model
- Elaborate on ?inline=PATH
- s/version/versionID/, and remove "version" field from Version resource since
  `id` is now its version string
- fixed the spec verification tool so it doesn't flag optional query parmeters
  as markdown bookmarks (e.g. [?inline])

Signed-off-by: Doug Davis <dug@microsoft.com>
2023-04-13 17:21:19 +00:00
Doug Davis 3223a785c7
Merge pull request #1191 from jskeet/fix-xml
Prevent CE-namespaced elements other than event in an XML batch.
2023-04-13 13:12:27 -04:00
Doug Davis b0c232bd4f
Merge pull request #1189 from cloudevents/versions
Add versionsXXX fields and other misc tweaks
2023-04-13 13:12:05 -04:00
Jon Skeet 7336bff183 Prevent CE-namespaced elements other than event in an XML batch.
Explanation: we view the CE namespace as "owned" by this spec, so
while we allow for non-CE-namespaced elements in the batch to be
present and ignored, there shouldn't be any elements in the CE
namespace other than "event". (We don't permit nested batches, for
example.)

Conformance tests in https://github.com/cloudevents/conformance/blob/format-tests/format/xml/invalid-batches.xml#L37

(Also a typo fix.)

Signed-off-by: Jon Skeet <jonskeet@google.com>
2023-04-12 15:00:53 +01:00
Doug Davis 2b9a7af2ff Add versionsXXX fields and other misc tweaks
- Added versionsUrl, versionsCount fields
- removed "type"
- s/URL/Url/ where appropriate
- "versions" in model MUST be >= 1 - meaning there will always be at least 1
  version of a resource
- added missing fields in some samples
- wrap at 80 cols

Signed-off-by: Doug Davis <dug@microsoft.com>
2023-04-10 14:50:44 +00:00
Doug Davis 788669c018
Merge pull request #1184 from cloudevents/typo
just some typos
2023-04-06 14:25:09 -04:00
Doug Davis 503dec6ab2 just some typos
Signed-off-by: Doug Davis <dug@microsoft.com>
2023-04-06 18:21:34 +00:00
Clemens Vasters 9a6c61349d
Group/Resource/Format Details for Registry (#1164)
* registry extensions

Signed-off-by: Clemens Vasters <clemens@vasters.com>

* updated OpenAPI docs

Signed-off-by: Clemens Vasters <clemens@vasters.com>

* typos and openapi corrections

Signed-off-by: Clemens Vasters <clemens@vasters.com>

* missing bracket

Signed-off-by: Clemens Vasters <clemens@vasters.com>

* extra comma

Signed-off-by: Clemens Vasters <clemens@vasters.com>

* extra comma

Signed-off-by: Clemens Vasters <clemens@vasters.com>

* missing bracket

Signed-off-by: Clemens Vasters <clemens@vasters.com>

* formatting

Signed-off-by: Clemens Vasters <clemens@vasters.com>

---------

Signed-off-by: Clemens Vasters <clemens@vasters.com>
2023-04-06 14:14:17 -04:00
Doug Davis 84cc657be7
Merge pull request #1179 from jskeet/xml-whitespace
undefined
2023-03-30 14:32:18 -04:00
Doug Davis 66e625a551
Merge pull request #1177 from duglin/addIDSelf
Add ID (immutable) and Self to registry root
2023-03-28 11:01:34 -04:00
Jon Skeet 14a849fdcf Specify the policy for whitespace in XML format attributes
Fixes #1004.

Signed-off-by: Jon Skeet <jonskeet@google.com>
2023-03-24 14:33:16 +00:00
Doug Davis 48e2cd9eed Add ID and Self to registry root
Signed-off-by: Doug Davis <dug@microsoft.com>
2023-03-23 14:01:42 +00:00
Doug Davis cf678e6247
Merge pull request #1175 from jskeet/cdata
Clarify CDATA handling in XML format
2023-03-16 13:30:41 -04:00
Jon Skeet b20954deb3 Clarify CDATA handling in XML format
(We should definitely have a big conformance suite for this format at some
point...)

The repetition of the language around XML element data is
deliberate, but slightly clunky. Other suggestions welcome.

Also happy to add an example with both CDATA and a text node if that
would be useful, but it feels like it's probably better in a
conformance test.

Signed-off-by: Jon Skeet <jonskeet@google.com>
2023-03-13 09:32:17 +00:00
Jon Skeet 12336bbb48
Move batch restrictions from HTTP to the main spec (#1169)
* Move batch restrictions from HTTP to the main spec

The restriction in terms of uniqueness is new, and definitely open
for debate. I had previously always just assumed it. If we choose
not to require it, we should explicitly permit duplicates.

Signed-off-by: Jon Skeet <jonskeet@google.com>

* Remove uniqueness restriction in batches

Signed-off-by: Jon Skeet <jonskeet@google.com>

---------

Signed-off-by: Jon Skeet <jonskeet@google.com>
2023-03-09 13:51:19 -05:00
Doug Davis 3877083f83
Merge pull request #1167 from duglin/endpointRegistry
Add more Registry text
2023-03-02 14:55:46 -05:00
Doug Davis 4afee21c6c add missing Endpoint text
Signed-off-by: Doug Davis <dug@microsoft.com>
2023-03-02 19:53:08 +00:00
Doug Davis 59050ce2ea
Merge pull request #1166 from matzew/get_endpoint_example
Adding get for singular endpoint
2023-03-02 13:10:20 -05:00
Doug Davis 4c4bf3552b
Merge pull request #1160 from duglin/defgroup
Rename Group to DefinitionGroup
2023-03-02 13:09:40 -05:00
Doug Davis 27db799628
Merge pull request #1168 from duglin/fixtool
Fix tool - support "maybe" and ignore words that start with backtick
2023-02-27 10:51:43 -05:00
Doug Davis e660f244e0 Fix tool - support "maybe" and ignore words that start with backtick
Fixes #1165

Signed-off-by: Doug Davis <dug@microsoft.com>
2023-02-27 15:49:48 +00:00
Matthias Wessendorf 9b440f3ac9 Adding get for singular endpoint
Signed-off-by: Matthias Wessendorf <mwessend@redhat.com>
2023-02-27 16:10:49 +01:00
Doug Davis 56ef6fdba4 Rename Group to DefinitionGroup
Signed-off-by: Doug Davis <dug@microsoft.com>
2023-02-24 16:13:27 +00:00
Doug Davis b43a64bf4f
Merge pull request #1161 from duglin/schemaformat
Add schemaformat
2023-02-23 13:18:35 -05:00
Doug Davis 1a474ad704
Merge pull request #1158 from duglin/typoSev
saver->severe
2023-02-23 13:17:46 -05:00
Doug Davis 43c1f10542 saver->severe
Signed-off-by: Doug Davis <dug@microsoft.com>
2023-02-23 18:12:44 +00:00
Doug Davis fc1c947ba6
Merge pull request #1157 from duglin/delDiscovery
Remove old Discovery and SchemaRegistry specs
2023-02-23 13:11:05 -05:00
Doug Davis 3687a28ff2
Merge pull request #1156 from duglin/issue1072
Make it clear that datacontenttype MAY appear w/o data
2023-02-23 13:10:14 -05:00
Doug Davis 666a123157
Merge pull request #1155 from duglin/dataref
Warn people about dataref
2023-02-23 13:08:53 -05:00
Jon Skeet 4af4b73585
Initial attempt at batch clarification (#1154)
* Initial attempt at batch clarification.

This treats batch-mode as a full-on third content mode (as it really
is). It attempts to clarify support in each transport and event
format, as well as removing duplication (e.g. in JSON format) of
what batch mode is about, and the odd "JSON batch format is a
separate event format" aspect.

Some parts may have been missed, and I'm thoroughly expecting some
push back :)

Signed-off-by: Jon Skeet <jonskeet@google.com>

* Address review feedback

(This includes removing some italics around content modes - we should probably do more of that, to be honest.)

Signed-off-by: Jon Skeet <jonskeet@google.com>

---------

Signed-off-by: Jon Skeet <jonskeet@google.com>
2023-02-23 13:02:57 -05:00
Doug Davis 855b1c0749 Warn people about dataref
Signed-off-by: Doug Davis <dug@microsoft.com>
2023-02-23 15:16:26 +00:00
Doug Davis ec8a0e48f3 Remove old Discovery and SchemaRegistry specs
Moves some old files into registry/todos as a reminder to update them

Signed-off-by: Doug Davis <dug@microsoft.com>
2023-02-23 15:14:09 +00:00
Doug Davis b90ce7809f Add schemaformat
Closes #1153

Signed-off-by: Doug Davis <dug@microsoft.com>
2023-02-22 23:22:43 +00:00
Doug Davis e9c982ac9d
Merge pull request #1152 from duglin/registry2
Registry Service clean-up
2023-02-16 10:27:54 -08:00
Doug Davis 1c2fa2b571 Make it clear that datacontenttype can appear w/o data
Signed-off-by: Doug Davis <dug@microsoft.com>
2023-02-16 16:18:17 +00:00
Doug Davis 1e9cc9543c Registry Service clean-up
Add some missing stuff to make it more real

Signed-off-by: Doug Davis <dug@microsoft.com>
2023-02-13 19:39:47 +00:00
Doug Davis ca680d3be4
Merge pull request #1048 from duglin/sdkSupport
SDK support table
2023-02-02 13:01:22 -05:00
Doug Davis 6c27a7e613 SDK support table
Signed-off-by: Doug Davis <dug@microsoft.com>
2023-01-30 21:20:28 +00:00
Doug Davis e7b9d8e76f
Merge pull request #1147 from jskeet/extensions-categories
Clarify status of documented extensions
2023-01-26 13:05:21 -05:00
Jon Skeet ca27a62cc6
Clarify XML format specification (#1145)
* Clarify XML format specification

- Unknown attributes and elements in a different namespace should be ignored (other than within a data element)
- Make it clear that "XML data" is really a representation of a single XML element.

Closes #998.
Closes #1005.

Signed-off-by: Jon Skeet <jonskeet@google.com>

* Provide more scoping for where XML elements/attributes should be ignored

Signed-off-by: Jon Skeet <jonskeet@google.com>

Signed-off-by: Jon Skeet <jonskeet@google.com>
2023-01-26 13:04:59 -05:00
Doug Davis 9e7d4fe210
Merge pull request #1148 from jessemenning/patch-1
Change link location for meeting recordings
2023-01-26 11:23:13 -05:00
Jesse Menning 566bd1d1cc
Change link location for meeting recordings
Existing link for some reason doesn't show latest videos

Signed-off-by: Jesse Menning <62108913+jessemenning@users.noreply.github.com>
2023-01-25 11:57:46 -05:00
Jon Skeet 6571702611 Clarify status of documented extensions
Further debate welcome; there's a balance about how much we want to
say here.

Closes #993.

Signed-off-by: Jon Skeet <jonskeet@google.com>
2023-01-25 08:31:30 +00:00
cncfcloudevents 7382de6d8f
Merge pull request #1144 from embano1/issue-1142
chore: Add stale action
2023-01-20 12:07:08 -05:00
Michael Gasch 525210bb6a chore: Add stale action
Closes: #1142
Signed-off-by: Michael Gasch <15986659+embano1@users.noreply.github.com>
2023-01-20 17:04:56 +01:00
Jay 71ae904981
Update chinese spec (#1140)
* update Chinese spec

Signed-off-by: Jie Ding <jie.ding@linkall.com>

* docs: update last edit time

Signed-off-by: Jie Ding <jie.ding@linkall.com>

Signed-off-by: Jie Ding <jie.ding@linkall.com>
2023-01-19 12:39:17 -05:00
Jay 8e7712024d
Update Chinese readme (#1137)
* docs: add badges to README.md

Signed-off-by: Jie Ding <jie.ding@linkall.com>

* docs: update last edit time

Signed-off-by: Jie Ding <jie.ding@linkall.com>

Signed-off-by: Jie Ding <jie.ding@linkall.com>
2023-01-19 12:38:54 -05:00
Doug Davis 882134a449
Merge pull request #1131 from duglin/issue1091
Clarity on who does event sampling (we don't mandate it)
2023-01-12 13:05:10 -05:00
Doug Davis 6657606d86
Merge pull request #1138 from JieDing/add-jie-contributors
Add JieDing to the contributor list
2022-12-26 15:46:22 -05:00
Jie Ding d719e48819
docs: add JieDing to the contributor list
Signed-off-by: Jie Ding <jie.ding@linkall.com>
2022-12-26 21:17:52 +08:00
Doug Davis ba91abf6db
Merge pull request #1133 from aaron-ai/fix_typo
Fix typos
2022-12-12 13:01:38 -05:00
Doug Davis 735f261858
Merge pull request #1129 from duglin/SSFBadge
Add OpenSSF Badge
2022-12-12 12:35:12 -05:00
Aaron Ai 89f61cfcbf Fix typo
Signed-off-by: Aaron Ai <yangkun.ayk@gmail.com>
2022-12-12 15:33:58 +08:00
Doug Davis 255e258d61 Clarity on who does event sampling (we don't mandate it)
Closes #1091

Signed-off-by: Doug Davis <dug@microsoft.com>
2022-12-08 18:11:29 +00:00
Doug Davis d3dba82879 Add OpenSSF Badge
Signed-off-by: Doug Davis <dug@microsoft.com>
2022-12-08 17:27:56 +00:00
Doug Davis 243a988d32
Merge pull request #1123 from duglin/discv3
Proposed "Registry" spec
2022-12-01 12:32:23 -05:00
Doug Davis 40a2c17818
Merge pull request #1127 from duglin/clarifyPrimer
Clarify Primer around tracing correlation
2022-12-01 12:32:02 -05:00
Doug Davis ca2594f2bc yet another clean-up PR
Signed-off-by: Doug Davis <dug@microsoft.com>
2022-12-01 16:27:37 +00:00
Doug Davis 6ab8778911 Clarify Primer
Signed-off-by: Doug Davis <dug@microsoft.com>
2022-12-01 14:25:05 +00:00
Doug Davis bc77ae3463
Merge pull request #1128 from cloudevents/duglin-patch-1
Point to Trail of Bits website for security report too
2022-11-22 09:27:24 -05:00
Doug Davis c4f0e68a37
Point to Trail of Bits website for security report too
Signed-off-by: Doug Davis <duglin@users.noreply.github.com>
2022-11-22 09:25:55 -05:00
Doug Davis e3be9b17f8
Merge pull request #1122 from duglin/reportv2
v2 of security audit report
2022-11-17 13:10:26 -05:00
Doug Davis 32f075f69c v2
Signed-off-by: Doug Davis <dug@microsoft.com>
2022-11-17 17:50:31 +00:00
Doug Davis 551e01782c
Merge pull request #1126 from duglin/fixChecker
temp fix for href checker
2022-11-17 12:50:10 -05:00
Doug Davis 4ef49059cc temp fix for href checker
Signed-off-by: Doug Davis <dug@microsoft.com>
2022-11-17 16:26:54 +00:00
Doug Davis 3da5643ebc
Merge pull request #1120 from duglin/security
Add security audit doc
2022-11-10 13:13:13 -05:00
Doug Davis fc7d09c5c8 Add security audit doc
Signed-off-by: Doug Davis <dug@microsoft.com>
2022-11-09 16:48:34 +00:00
Doug Davis 927dbdaa03
Merge pull request #1119 from duglin/typos
Add missing commas
2022-11-08 13:19:28 -05:00
Doug Davis 064733d258 Add missing commas
Signed-off-by: Doug Davis <dug@microsoft.com>
2022-11-08 18:06:10 +00:00
Doug Davis b6b144114c
Merge pull request #1110 from duglin/disc3
[Discovery] Fill in more info
2022-11-03 12:16:15 -04:00
Doug Davis ba963c8770 Fill in more info
Signed-off-by: Doug Davis <dug@microsoft.com>
2022-10-25 17:57:07 +00:00
Doug Davis 8f1877fab7
Merge pull request #1108 from duglin/moreDisc
More edits based on our 10/18 call
2022-10-20 13:01:31 -04:00
Sasha Tkachev 0862210796
fix: rename `loglevel` to `severity` (#1100)
* fix: use opentelemetery

BREAKING CHANGE

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

* feat: add references

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

* Revert "feat: add references"

This reverts commit f8bd820280.

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

* Revert "fix: use opentelemetery"

This reverts commit 020b80f47c.

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

* fix: use opentelemetry instead of re-inventing the wheel

BREAKING CHANGE

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

* Revert "fix: use opentelemetry instead of re-inventing the wheel"

This reverts commit d8616eddf0.

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

* refactor: rename filename to severity

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

* fix: use opentelemetry instead of re-inventing the wheel

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

* fix: add missing translations

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

* fix: wrong title

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

* fix: title consistency

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>
2022-10-20 13:01:12 -04:00
Doug Davis 6c542c8309 More edits based on our 10/18 call
Signed-off-by: Doug Davis <dug@microsoft.com>
2022-10-19 14:07:19 +00:00
Doug Davis fa8450b2e4
Merge pull request #1105 from duglin/fixes
fixes for the checker
2022-10-16 14:13:35 -04:00
Doug Davis c9856cef7d fixes for the checker
Signed-off-by: Doug Davis <dug@microsoft.com>
2022-10-16 18:09:00 +00:00
Doug Davis da56f7eb2d
Merge pull request #1101 from duglin/disc-wip2
next round of discovery edits
2022-10-16 14:02:34 -04:00
Doug Davis 29ceca85f9
Merge pull request #1103 from jviotti/patch-1
Fix typo specifation -> specification
2022-10-16 11:23:24 -04:00
Juan Cruz Viotti efa966d6d7
Fix typo specifation -> specification
Signed-off-by: Juan Cruz Viotti <jv@jviotti.com>
2022-10-16 08:17:27 -05:00
Sasha Tkachev bc3ff47787
fix: make titles consistent (#1099)
* feat: existing path

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

* feat: skip translation

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

* feat: title issue detection

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

* test: add fake invalid spec

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

* refactor: method name

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

* refactor: add type information

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

* fix: translation issues

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

* test: translation titles

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

* fix: add missing hebrew titles

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

* fix: wrong zh titles

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

* fix: excplude non-english titles from title verification

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

* fix: subscriptions readme title

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

* fix: schemaregistry readme title

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

* fix: pagination readme title

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

* fix: cloudevents readme title

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

* fix: cesql readme title

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

* fix: discovery readme title

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

* test: fix broken samples

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

* fix: definition duplication

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

* refactor: change schema registry title

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

* fix: zh translation

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

* fix: remove cncf prefix

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>
2022-10-14 13:47:14 -04:00
Doug Davis d775bc17bc next round of discovery edits
Signed-off-by: Doug Davis <dug@microsoft.com>
2022-10-14 14:28:13 +00:00
Doug Davis 1459a63c0a
Merge pull request #1095 from duglin/clobadge
Add CLOMonitor badge
2022-10-06 11:21:54 -04:00
Doug Davis 65960ff5f4 Add CLOMonitor badge
Signed-off-by: Doug Davis <dug@microsoft.com>
2022-10-06 15:19:32 +00:00
Doug Davis 5f073bf7a7
Merge pull request #1094 from duglin/addTracking
More CLOMonitor stuff
2022-10-04 14:56:59 -04:00
Doug Davis 86494f360a More CLOMonitor stuff
Signed-off-by: Doug Davis <dug@microsoft.com>
2022-10-04 18:52:04 +00:00
Sasha Tkachev 2b9873a3cf
perf: improve verification scripts speed x60 (#1086)
* ci: add python to workflow

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

* build: add verify languages to makefile

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

* feat: verify languages script

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

* fix: add missing he aws-sns file

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

* fix: add missing he loglevel  file

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

* fix: add missing zh loglevel file

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

* fix: add missing zh aws-sns file

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

* fix: add missing zh languages file

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

* ci: add python to workflow

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

* feat: verify docs

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

* refactor: query issues

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

* fix: cesql rfc 2119 issues

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

* fix: ignore marshall

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

* fix: optionally edge case

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

* fix: quoted required

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

* refactor: improve pattern readability

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

* fix: remove banned word

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

* fix: remove banned word

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

* fix: capitalize optional

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

* fix: rename required to necessary

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

* fix: remove bad imports

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

* build: change veirification to use docs script

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

* fix: newline bug

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

* test: issue detection

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

* ci: add python to workflow

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

* build: add python requirements

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

* ci: install requirments

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

* build: add bs4 to requirements

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

* build: add tenacity to requirments

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

* build: add aiohttp to requirments

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

* feat: basic verify links script

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

* refactor: read html text

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

* docs:  markdown conversion

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

* perf: use gather on all files

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

* build: add tqdm to requirements

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

* feat: add progress bar

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

* docs: explain why we use asyncio

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

* config: decrease max attempts to 2

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

* refactor: result generation

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

* fix: better issue for failed access

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

* fix: rate limiting issues

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

* refactor: use pattern matching

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

* style: formatting

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

* refactor: simplify flow

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

* docs: remove todo

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

* fix: add missing   dots to mail uri

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

* refactor: use pattern matching in uri

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

* fix: use new event loop

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

* build: add pymdown-extensions to requirements

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

* feat: verify local file issues

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

* fix: use correct uri segment

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

* fix: use bookmark instead of relative link

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

* feat: add debug option

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

* fix: add 500 to the ok status codes

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

* ci: use python implementation instead of bash

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

* fix: add repr for segment

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

* feat: verify no undefined bookmarks

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

* fix: remove redundancy

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

* build: remove old verify links file

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

* refactor: simplify http tests

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

* feat: merge all scripts into a single script

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

* fix: skip type is different

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

* refactor: move argsparser under main

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

* fix: remove code duplication

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

* fix: remove uneeded function

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

* fix: typo

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

* refactor: move around consts for legability

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

* test: move tests to seperate file

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

* build: add pyc to gitignore

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

* docs: remove bad comment

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

* fix: better skip text pattern

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

* test: skip text pattern

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

* refactor: rename md bookmark pattern

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

* docs: bookmark issues

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

* test: bookmark pattern

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

* refactor: remove code duplication

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

* fix: add return statement

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

* test: capitalization phrases

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

* test: banned phrases pattern

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

* refactor: rename function to convey correct intention

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

* test: uppercase detection

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

* refactor: split text issues into functions

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

* refactor: merge lists

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

* refactor: tag issues

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

* refactor: rename text issues to plain text issues

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

* refactor: flatten

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

* docs: uri issues

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

* refactor: skipping

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

* refactor: remove query prefix

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

* refactor: _render_markdown_to_html

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

* refactor: add html text strong type

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

* style: sort imports

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

* test: headers are rendered with ids

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

* docs: clearify pattern

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

* style: remove unused import

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

* build: add pytest for deps

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

* test: remove \y from test

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

* build: add verification testing to makefile

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

* feat: print success message

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

* feat: simplify make

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

* ci: add test_tools step

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

* ci: give names to steps

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

* fix: bad all target

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

* feat: add fake docs

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

* refactor: settings propogration

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

* feat: ignore fake docs

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

* test: add http links

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

* test: add mail uri

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

* Revert "feat: ignore fake docs"

This reverts commit 8637df3aa1.

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

* feat: configurable excluded paths

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

* build: add pytest-asyncio to requirements

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

* fix: add missing dot

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

* feat: add fake docs dir

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

* fix: remove quotes

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

* test: add app test

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

* fix: windows paths formatting

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

* fix: typo

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

* refactor: merge langauge verification into the single verification script

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

* test: add fake translations

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

* test: add fake issues to the expected results

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

* fix: add missing zh cbor-format translation

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

* fix: add missing he cbor-format translation

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

* fix: add missing asserts

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

* style: formatting

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

* fix: change match to search

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

* fix: use pure posix path

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

* build: add docker target

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

* style: makefile formatting

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

* fix: remove quotes

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

* build: increase test verbosity

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

* test: change github to google to avoid rate-limiting

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

* Revert "build: increase test verbosity"

This reverts commit e774bfa3c4.

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>
2022-09-26 11:37:36 -04:00
Alex Tkachev 2e09394c62
feat: cbor format (#1075)
* feat: cbor initial draft

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

* feat: simple cloudevents cddl

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

* fix: escape time

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

* fix: remove uri reference tagging

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

* fix: add positive number mapping

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

* refactor: define ce types

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

* feat: support extensions

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

* fix: allow text explicitly

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

* fix: wording

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

* refactor: rename serialization to encoding

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

* fix: remove unsed link

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

* fix: remove examples

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

* fix: add missing datacontenttype bookmark

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

* fix: add missing rfc2045-sec5 bookmark

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

* fix: change data to envelope

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

* fix: correct document title

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

* refactor: clearify wording around simple values

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

* refactor: abstract

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

* refactor: explain why we chose the integer types

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

* fix: change required to needed

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

* refactor: clearify that the type referes to the attribute type

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

* fix: remove uneeded s

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

* fix: rename date to data

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

* fix: remove uneeded space

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

* feat: better define cbor envelope

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

* style: wrapp to 80 chars

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

* style: formatting

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

* fix: typo

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

* fix: typo

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

* fix: allow uris to be a simple string

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

* fix: specify strings must follow rfc

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

* fix: string confused as href

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

* refactor: clarify that major type 3 is a string

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

* refactor: move cbor format to working drafts

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

* refactor: move cddl also

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

* fix: remove duplication

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>
2022-09-15 19:01:52 -04:00
Doug Davis c6811c7a65
Merge pull request #1079 from duglin/discovery-refs
Tweak how we deal with references
2022-09-15 12:42:23 -04:00
Ranger Tsao 019a339c5b
spec: fix some typo in chinese translation (#1068)
* spec: fix some typo in chinese translation

Signed-off-by: Ranger Tsao <cao.zhifu@gmail.com>

* spec: apply review comment

Signed-off-by: Ranger Tsao <cao.zhifu@gmail.com>

Signed-off-by: Ranger Tsao <cao.zhifu@gmail.com>
2022-09-15 12:41:53 -04:00
Alexander Tkachev 7820621abb
fix: force shell scripts to be LF (#1078)
* feat: force shell scripts to be LF

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

* style: add newline at eof

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>
2022-09-08 12:30:18 -04:00
Doug Davis ff5139fb85
Merge pull request #1071 from jskeet/amqp
Prohibit mix-and-match of AMQP separators
2022-09-08 12:28:34 -04:00
Jon Skeet 721fd84e49
Note around empty messages for Kafka (#1069)
* Note around empty messages for Kafka

Signed-off-by: Jon Skeet <jonskeet@google.com>

* Clarifications

Signed-off-by: Jon Skeet <jonskeet@google.com>

Signed-off-by: Jon Skeet <jonskeet@google.com>
2022-09-08 12:28:10 -04:00
Doug Davis ac7b29197f Tweak how we deal with references
Signed-off-by: Doug Davis <dug@microsoft.com>
2022-09-08 01:04:40 +00:00
Jon Skeet 5938841bcf Prohibit mix-and-match of AMQP separators
Signed-off-by: Jon Skeet <jonskeet@google.com>
2022-09-07 14:19:23 +01:00
JieDing 8f36d46767
adapter: add aws-sns-adapter (#1043)
* docs: add aws-sns-adapter

Signed-off-by: Jie Ding <jie.ding@linkall.com>

* fix typos

Signed-off-by: Jie Ding <jie.ding@linkall.com>

* add a static prefix for type

Signed-off-by: Jie Ding <jie.ding@linkall.com>

* wrap things at 80 column

Signed-off-by: Jie Ding <jie.ding@linkall.com>

Signed-off-by: Jie Ding <jie.ding@linkall.com>
2022-09-03 11:00:08 -04:00
Doug Davis 0e4d8afd44
Merge pull request #1067 from sasha-tkachev/feature/update-hebrew-spec-on-should
chore: update Hebrew spec to reflect changes of #1045
2022-09-01 12:43:23 -04:00
Alexander Tkachev 51f86048c1
loglevel spec draft (#1051)
* feat: loglevel extension

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

* Revert "feat: hebrew translation structure"

This reverts commit c47f355d9a.

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

* refactor: change order

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

* fix: pr comments

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

* docs: document log mappings

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

* fix: use lowercase

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

* feat: add verbose to recommended values

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

* feat: define loglevel tables

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

* feat: refine spec

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

* fix: change one to one

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

* fix: better titles

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

* fix: recommended section typos

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

* style: formatting

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

* fix: changer lower to higher

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

* fix: log level names across frameworks for consistency

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

* fix: remove extra line

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

* fix: wrong numbering

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

* fix: add missing is

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

* fix: bad numbering

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

* style: formatting

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

* fix: bad numbering

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

* docs: add abstract

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

* feat: improve abstract

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

* fix: add missing attributes title

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

* feat: explain log level bindings

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

* style: formatting

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

* fix: typos

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

* fix: link

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

* Revert "Revert "feat: hebrew translation structure""

This reverts commit e87cf71ecb.

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

* fix: use cloudevent instead of cloud event

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

* feat: add optional attributes constraint

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

* fix: missing sentance

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

* style: align

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

* fix: add full-stop

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

* fix: capitalize windows

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

* fix: capitalize cloudevent

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

* style: split to paragraphs

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

* fix: grammar and clarify recommended values

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

* fix: clarify relation between attributes

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>
2022-09-01 12:42:46 -04:00
Alexander Tkachev d3606565bc chore: update Hebrew spec to reflect changes of #1045
Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>
2022-08-26 21:38:51 +03:00
Doug Davis 676cef9167
discovery draft v2 (#1041)
* discovery draft v2

Signed-off-by: Doug Davis <dug@microsoft.com>

* scott's edits

Signed-off-by: Doug Davis <dug@microsoft.com>

Signed-off-by: Doug Davis <dug@microsoft.com>
2022-08-25 13:11:14 -04:00
Clemens Vasters 17339b2d51
Permit underscore character as alternate separator (#1050)
* Use PUT instead of POST

Signed-off-by: Doug Davis <dug@us.ibm.com>

* Permit underscore character as alternate separator

Addresses #932

Signed-off-by: clemensv <clemensv@microsoft.com>

* formatting

Signed-off-by: clemensv <clemensv@microsoft.com>

* fixed JMS link

Signed-off-by: clemensv <clemensv@microsoft.com>
Signed-off-by: Doug Davis <dug@microsoft.com>

* Formatting

Signed-off-by: clemensv <clemensv@microsoft.com>

* Remove extra comma

Signed-off-by: clemensv <clemensv@microsoft.com>

Signed-off-by: Doug Davis <dug@us.ibm.com>
Signed-off-by: clemensv <clemensv@microsoft.com>
Signed-off-by: Doug Davis <dug@microsoft.com>
Co-authored-by: Doug Davis <dug@us.ibm.com>
Co-authored-by: clemensv <clemensv@microsoft.com>
2022-08-25 13:02:44 -04:00
Clemens Vasters 25295a53c4
Clarification for the abuse protection callback (#1049)
* Clarification for the abuse protection callback

Addresses #617 and #1018

Signed-off-by: clemensv <clemensv@microsoft.com>

* clarified request rate when using GET callbacks

Signed-off-by: clemensv <clemensv@microsoft.com>

Signed-off-by: clemensv <clemensv@microsoft.com>
2022-08-25 12:27:28 -04:00
Alexander Tkachev 1efd5f3ee6
fix: use SHOULD instead of needs (#1045)
* fix: use SHOULD instead of needs

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

* fix: clarify optional feature behavior

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

* fix: remove code block

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>
2022-08-25 12:27:06 -04:00
Doug Davis ec2feddc53
Merge pull request #1047 from sasha-tkachev/feature/hebrew-spec
feat: hebrew cloudevents spec
2022-08-24 17:49:33 -04:00
Alexander Tkachev d1d6617f02 feat: hebrew spec
Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>
Revert "fix: use hyphens instead of slashes"

This reverts commit 1a4f14d67cd45f1738b18d702a46d6e7520e090b.

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>
Revert "fix: bad links"

This reverts commit 8d46edac805d48d98cd85b666b3132ce940b862a.

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>
fix: bad links

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>
fix: use hyphens instead of slashes

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>
feat: hebrew spec

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

Squashed commit of the following:

commit 76dbaf17cb6625c9ec0e0e6a0d8169e9d42421e1
Author: Alexander Tkachev <sasha64sasha@gmail.com>
Date:   Wed Aug 17 21:43:44 2022 +0300

    feat: possesion

    Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

commit 7e23fe45003e8563a5fcee4510fb4c5992d23949
Author: Alexander Tkachev <sasha64sasha@gmail.com>
Date:   Wed Aug 17 21:43:14 2022 +0300

    feat: better event formats wording

    Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

commit 2a6aff0fc941b6b39067d925aa7a926b72ee5fc9
Author: Alexander Tkachev <sasha64sasha@gmail.com>
Date:   Wed Aug 17 21:42:41 2022 +0300

    fix: with defintion word

    Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

commit 9377fb657ff18e36b0a61def11923f5b9126c641
Author: Alexander Tkachev <sasha64sasha@gmail.com>
Date:   Wed Aug 17 21:42:02 2022 +0300

    fix: better wording

    Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

commit 8ee596e94b9db73284dda381ce024fd3317af030
Author: Alexander Tkachev <sasha64sasha@gmail.com>
Date:   Wed Aug 17 21:40:11 2022 +0300

    fix: better wording

    Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

commit 24a2224450aa1dbefad85dabf172b8f92bc852f4
Author: Alexander Tkachev <sasha64sasha@gmail.com>
Date:   Wed Aug 17 21:39:19 2022 +0300

    fix: male must

    Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

commit 8366c3fb883fad59b024d481d556ad044672d151
Author: Alexander Tkachev <sasha64sasha@gmail.com>
Date:   Wed Aug 17 21:38:41 2022 +0300

    fix: vendor is female in hebrew

    Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

commit d3998fc714fd843836afeb89c67a8742e3aa53c9
Author: Alexander Tkachev <sasha64sasha@gmail.com>
Date:   Wed Aug 17 21:37:59 2022 +0300

    feat: better wording

    Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

commit a2b2973e1ea1614e93ce93effbf75b52d6745bb7
Author: Alexander Tkachev <sasha64sasha@gmail.com>
Date:   Wed Aug 17 21:36:45 2022 +0300

    fix: better wording

    Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

commit 45ce1305b72f41ac43bae80c4f12f9b84a21a9e5
Author: Alexander Tkachev <sasha64sasha@gmail.com>
Date:   Wed Aug 17 21:35:26 2022 +0300

    fix: use yatzran

    Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

commit c2f4242e4df7fb72d36f5386ff4eb223112faf94
Author: Alexander Tkachev <sasha64sasha@gmail.com>
Date:   Wed Aug 17 21:34:59 2022 +0300

    fix: wording

    Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

commit 61f0ec546f44c2133a611acf8b51b9a82e2232ba
Author: Alexander Tkachev <sasha64sasha@gmail.com>
Date:   Wed Aug 17 21:34:33 2022 +0300

    fix: petter producer wording

    Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

commit 0dee84cac3f3f298ff29368c644b6483a4be70c4
Author: Alexander Tkachev <sasha64sasha@gmail.com>
Date:   Wed Aug 17 21:32:14 2022 +0300

    fix: better wording

    Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

commit cc0ea54dcda48886affda28f2219be6ff1e4b184
Author: Alexander Tkachev <sasha64sasha@gmail.com>
Date:   Wed Aug 17 21:30:39 2022 +0300

    fix: add full stop

    Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

commit 1a56de2ced1d3ae1379943aef8ebeed96957c8ae
Author: Alexander Tkachev <sasha64sasha@gmail.com>
Date:   Wed Aug 17 21:30:22 2022 +0300

    fix: typo

    Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

commit 6c174df4dea0caa3a8f1214d84e5ee6a0202a8b6
Author: Alexander Tkachev <sasha64sasha@gmail.com>
Date:   Wed Aug 17 21:27:02 2022 +0300

    fix: better warning

    Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

commit 2ea660f2af9f2bed4911dc3ad30d52257e00f076
Author: Alexander Tkachev <sasha64sasha@gmail.com>
Date:   Wed Aug 17 21:22:53 2022 +0300

    Revert "fix: add hebrew words as prefixes for formatting"

    This reverts commit 80940f2fa9cc8ddebdfa0554dabc0fca13a81991.

    Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

commit 80940f2fa9cc8ddebdfa0554dabc0fca13a81991
Author: Alexander Tkachev <sasha64sasha@gmail.com>
Date:   Wed Aug 17 21:21:01 2022 +0300

    fix: add hebrew words as prefixes for formatting

    Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

commit 1eec32725b9d92aa9d2f3951c6489ac6a345b500
Author: Alexander Tkachev <sasha64sasha@gmail.com>
Date:   Wed Aug 17 21:17:29 2022 +0300

    fix: better word for clearaty

    Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

commit b53267f5eabb9b8206e39f097601093070f9b1bd
Author: Alexander Tkachev <sasha64sasha@gmail.com>
Date:   Wed Aug 17 21:15:59 2022 +0300

    fix: typo

    Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

commit fd26644fc98246dd60767565db51e1a48f7e28f1
Author: Alexander Tkachev <sasha64sasha@gmail.com>
Date:   Wed Aug 17 21:15:07 2022 +0300

    fix: typos

    Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

commit 62a20f7453eabad3230cefb548bf0160477d787b
Author: Alexander Tkachev <sasha64sasha@gmail.com>
Date:   Wed Aug 17 21:11:10 2022 +0300

    fix: better clerefication

    Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

commit ef99a553a976a7f78d3517a71412cee2df084907
Author: Alexander Tkachev <sasha64sasha@gmail.com>
Date:   Wed Aug 17 21:10:04 2022 +0300

    fix: typos

    Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

commit 38b2e86d5c997de4f8b6ea814c7eb08975b01ec4
Author: Alexander Tkachev <sasha64sasha@gmail.com>
Date:   Wed Aug 17 21:05:22 2022 +0300

    fix: typo

    Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

commit 05db8e33e39053970ae5a685c36afb802e8be9aa
Author: Alexander Tkachev <sasha64sasha@gmail.com>
Date:   Wed Aug 17 21:04:29 2022 +0300

    fix: typo

    Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

commit f735ed86e01f5c20709bda19369e6163dab5891e
Author: Alexander Tkachev <sasha64sasha@gmail.com>
Date:   Wed Aug 17 21:03:58 2022 +0300

    fix: typo

    Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

commit 94c760f46e4aad166f8176c0b36f4abc9927ea37
Author: Alexander Tkachev <sasha64sasha@gmail.com>
Date:   Wed Aug 17 21:03:13 2022 +0300

    fix: typo

    Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

commit 7bb6588e1e090a6ddf48c74197be3206e81a1a7c
Author: Alexander Tkachev <sasha64sasha@gmail.com>
Date:   Wed Aug 17 21:03:00 2022 +0300

    fix: typo

    Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

commit e6118319ba101cd6d288ffda923b766df9ea8238
Author: Alexander Tkachev <sasha64sasha@gmail.com>
Date:   Wed Aug 17 21:01:03 2022 +0300

    fix: typo

    Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

commit 0023663c2c28d1afde0812ef2fc703afca37099a
Author: Alexander Tkachev <sasha64sasha@gmail.com>
Date:   Wed Aug 17 20:59:30 2022 +0300

    fix: change order for cleraty

    Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

commit 71d79a74b790a7a14ef4a9dbc01c556094fe89ed
Author: Alexander Tkachev <sasha64sasha@gmail.com>
Date:   Wed Aug 17 20:58:31 2022 +0300

    fix: better wording for abstract

    Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

commit b28bcdb787b65b77a4bc39467f66793972bb5bb6
Author: Alexander Tkachev <sasha64sasha@gmail.com>
Date:   Wed Aug 17 20:52:59 2022 +0300

    fix: bring back spec translation

    Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

commit 39c252d78735c70ee86ad361ca2b164cceffbef8
Author: Alexander Tkachev <sasha64sasha@gmail.com>
Date:   Wed Aug 17 20:50:14 2022 +0300

    feat: add pre reviewing state

    Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

commit a6ecef1675ff248545b7dee1bab2b0aa054fe791
Merge: a90dd45 9506e91
Author: Alexander Tkachev <sasha64sasha@gmail.com>
Date:   Wed Aug 17 20:49:47 2022 +0300

    Merge branch 'feature/hebrew-structure' into feature/hebrew-spec
    Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

commit 9506e913ab2fadae4f73843a73abf204db0a7b19
Author: Alexander Tkachev <sasha64sasha@gmail.com>
Date:   Wed Aug 17 20:49:38 2022 +0300

    feat: translations structure

    Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

commit a90dd4521337b8bcd8964207027b8d3ed51a5461
Merge: 874a95b 6a4f46a
Author: Alexander Tkachev <sasha64sasha@gmail.com>
Date:   Wed Aug 17 20:43:11 2022 +0300

    Merge branch 'feature/hebrew-structure' into feature/hebrew-spec

    Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

    # Conflicts:
    #	cloudevents/languages/he/README.md
    #	cloudevents/languages/he/RELEASE_NOTES.md
    #	cloudevents/languages/he/SDK.md
    #	cloudevents/languages/he/adapters.md
    #	cloudevents/languages/he/adapters/aws-s3.md
    #	cloudevents/languages/he/adapters/couchdb.md
    #	cloudevents/languages/he/adapters/github.md
    #	cloudevents/languages/he/adapters/gitlab.md
    #	cloudevents/languages/he/bindings/amqp-protocol-binding.md
    #	cloudevents/languages/he/bindings/http-protocol-binding.md
    #	cloudevents/languages/he/bindings/kafka-protocol-binding.md
    #	cloudevents/languages/he/bindings/mqtt-protocol-binding.md
    #	cloudevents/languages/he/bindings/nats-protocol-binding.md
    #	cloudevents/languages/he/bindings/websockets-protocol-binding.md
    #	cloudevents/languages/he/documented-extensions.md
    #	cloudevents/languages/he/extensions/dataref.md
    #	cloudevents/languages/he/extensions/distributed-tracing.md
    #	cloudevents/languages/he/extensions/partitioning.md
    #	cloudevents/languages/he/extensions/sampledrate.md
    #	cloudevents/languages/he/extensions/sequence.md
    #	cloudevents/languages/he/formats/avro-format.md
    #	cloudevents/languages/he/formats/json-format.md
    #	cloudevents/languages/he/formats/protobuf-format.md
    #	cloudevents/languages/he/http-webhook.md
    #	cloudevents/languages/he/primer.md
    #	cloudevents/languages/he/proprietary-specs.md
    #	cloudevents/languages/he/spec.md
    #	cloudevents/languages/he/translations.md
    #	cloudevents/languages/he/working-drafts/xml-format.md

commit 6a4f46a092e983cae9f722505ee4dd39ad252367
Author: Alexander Tkachev <sasha64sasha@gmail.com>
Date:   Wed Aug 17 20:41:56 2022 +0300

    fix: typo

    Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

commit 874a95b8133916f618638955c410fe7e06f24b7f
Author: Alexander Tkachev <sasha64sasha@gmail.com>
Date:   Sun Aug 14 20:46:30 2022 +0300

    fix: add missing bold for not needed

    Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

commit 49c62015945850d91bf66b2b2c662f90a4948c38
Author: Alexander Tkachev <sasha64sasha@gmail.com>
Date:   Sat Aug 13 14:07:28 2022 +0300

    fix: more broken links

    Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

commit 7e3c78e8ed7e9f6ab0c826ec1f4ebc6e3968dc9f
Author: Alexander Tkachev <sasha64sasha@gmail.com>
Date:   Sat Aug 13 14:06:44 2022 +0300

    fix: more broken links

    Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

commit b090f403dad11a9e24b7f736074788b3f24ca5ea
Author: Alexander Tkachev <sasha64sasha@gmail.com>
Date:   Sat Aug 13 14:05:39 2022 +0300

    fix: remove copy paste bloat

    Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

commit 15fde911b25c8d08325c3fea744c912c1a9eee1a
Author: Alexander Tkachev <sasha64sasha@gmail.com>
Date:   Sat Aug 13 14:04:19 2022 +0300

    fix: remove uneeded backslash

    Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

commit 1c36d221023d1210f1e62641e0ad5f3b233809dc
Author: Alexander Tkachev <sasha64sasha@gmail.com>
Date:   Sat Aug 13 14:03:39 2022 +0300

    fix: more broken links

    Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

commit 01fddf5907ecdc48451a150244e3f9643b948401
Author: Alexander Tkachev <sasha64sasha@gmail.com>
Date:   Sat Aug 13 14:02:39 2022 +0300

    fix: more broken links

    Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

commit fc1413427934cbc8365de91db022cb1e91b4899f
Author: Alexander Tkachev <sasha64sasha@gmail.com>
Date:   Sat Aug 13 13:58:47 2022 +0300

    fix: remove uneeded hashtag

    Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

commit cf372d35014742598e9c7a85c226403217b78008
Author: Alexander Tkachev <sasha64sasha@gmail.com>
Date:   Sat Aug 13 13:57:43 2022 +0300

    fix: more broken links

    Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

commit 71ba2109b64454ea662e1a87644d4f38efdd25fa
Author: Alexander Tkachev <sasha64sasha@gmail.com>
Date:   Sat Aug 13 13:52:11 2022 +0300

    fix: broken links second attempt

    Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

commit b3c9ed8a0d19df5e911d305efb47d8f3ce9e8c87
Author: Alexander Tkachev <sasha64sasha@gmail.com>
Date:   Sat Aug 13 13:51:11 2022 +0300

    fix: broken links in title

    Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

commit a2fb1ccccd0ead18c1fcafd8a4992470f683c707
Author: Alexander Tkachev <sasha64sasha@gmail.com>
Date:   Sat Aug 13 13:49:51 2022 +0300

    fix: add missing hashtag

    Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

commit 80473599202253585f91b2036542ca3cdfdff223
Author: Alexander Tkachev <sasha64sasha@gmail.com>
Date:   Sat Aug 13 13:45:26 2022 +0300

    fix: add missing links

    Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

commit 45b97531ea49c4a62f0fd64045bea74639a595cb
Author: Alexander Tkachev <sasha64sasha@gmail.com>
Date:   Sat Aug 13 13:39:42 2022 +0300

    feat: add links in table of content

    Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

commit cfb64a22277ab9849ceda13b9614adac26162a76
Author: Alexander Tkachev <sasha64sasha@gmail.com>
Date:   Sat Aug 13 13:37:09 2022 +0300

    feat: add example

    Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

commit 6f637cf0e439b3ff302689c47e1514d182fb8291
Author: Alexander Tkachev <sasha64sasha@gmail.com>
Date:   Sat Aug 13 13:35:54 2022 +0300

    faeat: security and privacy

    Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

commit 005eb0666bb00fcef491e8269665498b2e6e61bc
Author: Alexander Tkachev <sasha64sasha@gmail.com>
Date:   Sat Aug 13 13:31:04 2022 +0300

    fix: title sizes

    Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

commit 875706c5671adeb0dd200bd009583779987ac17e
Author: Alexander Tkachev <sasha64sasha@gmail.com>
Date:   Sat Aug 13 13:29:40 2022 +0300

    feat: size limits

    Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

commit f7087fd9fa93ad36498bf69533d2ba60e078db27
Author: Alexander Tkachev <sasha64sasha@gmail.com>
Date:   Sat Aug 13 13:20:20 2022 +0300

    feat: defining extensions

    Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

commit 5da16c4f97007b05361115555290df41402bed4b
Author: Alexander Tkachev <sasha64sasha@gmail.com>
Date:   Sat Aug 13 13:07:30 2022 +0300

    feat: data

    Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

commit 4c4d35a98fe3fbea6fcf60de53cc552eb868c205
Author: Alexander Tkachev <sasha64sasha@gmail.com>
Date:   Sat Aug 13 13:03:49 2022 +0300

    feat: extension context attributes

    Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

commit 3410bfd3f7d3bcec7b2b97744ec53aedfe42d133
Author: Alexander Tkachev <sasha64sasha@gmail.com>
Date:   Sat Aug 13 12:57:59 2022 +0300

    fix: add missing may must wording

    Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

commit 915e2151f43b5242f832e675ba678ee1dd656e4a
Author: Alexander Tkachev <sasha64sasha@gmail.com>
Date:   Sat Aug 13 12:55:40 2022 +0300

    feat: time

    Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

commit 1df4ce877acc5db59c74ba29dd708cc87ddc363c
Author: Alexander Tkachev <sasha64sasha@gmail.com>
Date:   Sat Aug 13 12:51:45 2022 +0300

    feat: subject

    Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

commit 712b7fae0c0d52d4777dac56d3ecef91072a6beb
Author: Alexander Tkachev <sasha64sasha@gmail.com>
Date:   Sat Aug 13 12:42:41 2022 +0300

    refactor: rename restrictions to constraints

    Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

commit 2af0bf101109eb4840254862196f71ad110d9846
Author: Alexander Tkachev <sasha64sasha@gmail.com>
Date:   Sat Aug 13 12:42:08 2022 +0300

    fix: dont use hebrew words in code blocks

    Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

commit a974644aea3171849c11c2fe78ffff66888b7228
Author: Alexander Tkachev <sasha64sasha@gmail.com>
Date:   Sat Aug 13 12:29:48 2022 +0300

    feat: data content type

    Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

commit d8c90962cf5ab782b14f83fea6cadb72f1456b8c
Author: Alexander Tkachev <sasha64sasha@gmail.com>
Date:   Sat Aug 13 12:08:10 2022 +0300

    refactor: rename convention to hebrew convention

    Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

commit ed26150268ce89c7b19ec23950f487c02dc639dd
Author: Alexander Tkachev <sasha64sasha@gmail.com>
Date:   Sat Aug 13 01:30:56 2022 +0300

    feat: add english names

    Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

commit 1766af9f5f25fa183a12158300fe5224e85ca97a
Author: Alexander Tkachev <sasha64sasha@gmail.com>
Date:   Sat Aug 13 01:27:02 2022 +0300

    feat: define type

    Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

commit baae9128a69372800a2a53fe0e1fce78a32bbf8b
Author: Alexander Tkachev <sasha64sasha@gmail.com>
Date:   Sat Aug 13 01:19:27 2022 +0300

    feat: specversion

    Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

commit d4ed500fef63fd73dd411f23a80943df887d0c89
Author: Alexander Tkachev <sasha64sasha@gmail.com>
Date:   Sat Aug 13 01:15:12 2022 +0300

    feat: define source

    Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

commit 8cc7f9c0966de9a33a9cf9339584173058499d78
Author: Alexander Tkachev <sasha64sasha@gmail.com>
Date:   Sat Aug 13 01:05:29 2022 +0300

    feat: define id

    Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

commit ac334bb3a2892dc74ce05364062c576d38a4b90e
Author: Alexander Tkachev <sasha64sasha@gmail.com>
Date:   Sat Aug 13 00:57:51 2022 +0300

    feat: type system

    Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

commit a2c628e33ae15fe58fbe6efc5e457ac326576b45
Author: Alexander Tkachev <sasha64sasha@gmail.com>
Date:   Sat Aug 13 00:20:09 2022 +0300

    feat: define naming conventions

    Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

commit 8ff97b7f5c282405f148d2c318d8e4f25bf52c8f
Author: Alexander Tkachev <sasha64sasha@gmail.com>
Date:   Sat Aug 13 00:16:02 2022 +0300

    fix: wording for transport

    Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

commit 30c899fbb63b5b263ade95955ec62f5f02d02bbc
Author: Alexander Tkachev <sasha64sasha@gmail.com>
Date:   Sat Aug 13 00:10:29 2022 +0300

    refactor: change wording on protocol bindings

    call it protocol mappings because binding sounds off in hebrew

    Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

commit 3f3ee068bd87e89394217de50bd296ef3f1fdcb9
Author: Alexander Tkachev <sasha64sasha@gmail.com>
Date:   Sat Aug 13 00:07:11 2022 +0300

    feat: define context attributes

    Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

commit 9936d829ef46744203e6afb89b33c0ef35bc3ec5
Author: Alexander Tkachev <sasha64sasha@gmail.com>
Date:   Fri Aug 12 23:54:03 2022 +0300

    feat: define protocol bindings

    Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

commit 2eebe8cb25d0ccbf89aa2fb006511feec58ff4eb
Author: Alexander Tkachev <sasha64sasha@gmail.com>
Date:   Fri Aug 12 23:46:13 2022 +0300

    feat: define protocol

    Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

commit 6dadf26463a2acdab4652f1a88c9f92854f74f7e
Author: Alexander Tkachev <sasha64sasha@gmail.com>
Date:   Fri Aug 12 23:43:59 2022 +0300

    feat: define message

    Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

commit e1170b135b529a5191c813097fa447fcd7f506ef
Author: Alexander Tkachev <sasha64sasha@gmail.com>
Date:   Fri Aug 12 23:39:35 2022 +0300

    feat: define event format

    Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

commit ff139d3975670be9def576014195dd3a4f9cde99
Author: Alexander Tkachev <sasha64sasha@gmail.com>
Date:   Fri Aug 12 23:31:46 2022 +0300

    feat: define data

    Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

commit 50faee62f3cf0c04c1b948c30818abf00d927560
Author: Alexander Tkachev <sasha64sasha@gmail.com>
Date:   Fri Aug 12 23:31:35 2022 +0300

    refactor: change words used to describe context attributes

    Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

commit b97d83fc3d091686fa61179f2b1e34ca3e09e9d2
Author: Alexander Tkachev <sasha64sasha@gmail.com>
Date:   Fri Aug 12 23:26:26 2022 +0300

    feat: define intermidiary and context

    Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

commit 6bc5beff42e8092a99116ff00ff3942f2d3723a0
Author: Alexander Tkachev <sasha64sasha@gmail.com>
Date:   Fri Aug 12 22:01:38 2022 +0300

    feat: define consumer

    Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

commit 48e71c75a3283cf6acbe8d9aa245ac5f5749a9b5
Author: Alexander Tkachev <sasha64sasha@gmail.com>
Date:   Fri Aug 12 21:59:44 2022 +0300

    feat: define source

    Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

commit 565ff224a9896112c939d4e8498475f22b74bb08
Author: Alexander Tkachev <sasha64sasha@gmail.com>
Date:   Fri Aug 12 21:53:48 2022 +0300

    feat: define producer

    Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

commit 2b3a176eb8280a56a76388680c15208d5c696b64
Author: Alexander Tkachev <sasha64sasha@gmail.com>
Date:   Fri Aug 12 21:52:04 2022 +0300

    feat: define event

    Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

commit 2b4f06861999efaa734557dfa64d45c127e325aa
Author: Alexander Tkachev <sasha64sasha@gmail.com>
Date:   Fri Aug 12 21:51:56 2022 +0300

    feat: define occurance

    Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

commit 80551813badda155de2f4c558dc56f19b66228eb
Author: Alexander Tkachev <sasha64sasha@gmail.com>
Date:   Fri Aug 12 21:48:49 2022 +0300

    fix: typo in natav

    Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

commit 2805a6f6e3bc261595b6a9cf49a6c5916c5f6cca
Author: Alexander Tkachev <sasha64sasha@gmail.com>
Date:   Fri Aug 12 21:23:15 2022 +0300

    feat: complete notational conventions section

    Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

commit 555adc3ca1f414ee5b19c4f267f55212040f4300
Author: Alexander Tkachev <sasha64sasha@gmail.com>
Date:   Fri Aug 12 20:59:38 2022 +0300

    docs: complete overview section

    Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

commit 213703ff24e2f54e578e1a74b96aa50859cc251f
Author: Alexander Tkachev <sasha64sasha@gmail.com>
Date:   Fri Aug 12 20:47:50 2022 +0300

    fix: brackets

    Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

commit 93c8b94e618ed766b7c9f24981ec5a78837ed54b
Author: Alexander Tkachev <sasha64sasha@gmail.com>
Date:   Fri Aug 12 20:45:55 2022 +0300

    refactor: all titles should pe prefixed by hebrew words

    this is to prevent formatting issues on github

    Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

commit 2bd9dcca96708c14aa22f15a98a2253c95462094
Author: Alexander Tkachev <sasha64sasha@gmail.com>
Date:   Fri Aug 12 20:44:06 2022 +0300

    docs: add the spec prefix to couldevents for github formatting issues

    Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

commit 3d5b4266f2a607e4d20a696feeb8d8dbc6a0108d
Author: Alexander Tkachev <sasha64sasha@gmail.com>
Date:   Fri Aug 12 20:41:42 2022 +0300

    docs: start writing the hebrew spec

    Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

commit bdfd4e683ccd9c383495df790a22c5c70cffd2af
Author: Alexander Tkachev <sasha64sasha@gmail.com>
Date:   Fri Aug 12 20:13:01 2022 +0300

    chore: point all documents to english translation

    Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

commit b67b21083032f546728a7ad2c9cc87de44d131ee
Author: Alexander Tkachev <sasha64sasha@gmail.com>
Date:   Fri Aug 12 19:53:30 2022 +0300

    style: remove rtl

    Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

commit e6a576325fe3b1f134597ad657a384f8e4d8d4e9
Author: Alexander Tkachev <sasha64sasha@gmail.com>
Date:   Fri Aug 12 19:42:46 2022 +0300

    feat: add hebrew sample

    Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

commit 37a04fcd3b2da1d2854eb4907474bb27dc04146f
Author: Alexander Tkachev <sasha64sasha@gmail.com>
Date:   Fri Aug 12 19:36:13 2022 +0300

    copy english spec

    Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

commit 4f1e496fef4383a70fb2d859fd47a8b7ec99afb4
Author: Alexander Tkachev <sasha64sasha@gmail.com>
Date:   Sat Aug 13 01:40:57 2022 +0300

    fix: use less pretentious language

    Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

commit d33c1e534e14628bb7760edbf55f2e2e7ac6a4fa
Author: Alexander Tkachev <sasha64sasha@gmail.com>
Date:   Fri Aug 12 20:13:01 2022 +0300

    chore: point all documents to english translation

    Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

commit d4d9faf26d8564858bd47b63d1848055e260887f
Author: Alexander Tkachev <sasha64sasha@gmail.com>
Date:   Fri Aug 12 19:53:30 2022 +0300

    style: remove rtl

    Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

commit fb29d9f594d0fe81561a6649d0dd8f608824391b
Author: Alexander Tkachev <sasha64sasha@gmail.com>
Date:   Fri Aug 12 19:42:46 2022 +0300

    feat: add hebrew sample

    Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

commit 4bac4b8651af1ce2d26c2417cd2cad36c7bfb25a
Author: Alexander Tkachev <sasha64sasha@gmail.com>
Date:   Fri Aug 12 19:36:13 2022 +0300

    chore: create hebrew tralnsation structure for cloudevents spec

    Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

# Conflicts:
#	cloudevents/languages/he/spec.md
#	cloudevents/languages/he/translations.md
2022-08-25 00:17:35 +03:00
Doug Davis fe4e30828e
Merge pull request #1057 from duglin/fixchecker
fix how we remove punct from links
2022-08-23 12:13:26 -04:00
Doug Davis 6701c68178 fix how we remove punct
Signed-off-by: Doug Davis <dug@microsoft.com>
2022-08-22 16:26:59 +00:00
Doug Davis 9a01c4ce17
Merge pull request #1054 from xdlbdy/main
fix: world spelling mistakes in subscription spec
2022-08-22 10:13:19 -04:00
delu 5ae8d30c5f fix: world spelling mistakes
Signed-off-by: delu <delu.xu@linkall.com>
2022-08-20 17:29:11 +08:00
Doug Davis 5545d0196b
Merge pull request #1046 from sasha-tkachev/feature/hebrew-structure
chore: create hebrew tralnsation structure for cloudevents spec
2022-08-19 08:29:20 -04:00
Doug Davis 4966aed49d
Merge pull request #1053 from duglin/bookmark
Allow bookmarks to be case insensitive
2022-08-19 08:24:03 -04:00
Doug Davis a2f61947e7 Allow bookmarks to be case insensitive
Signed-off-by: Doug Davis <dug@microsoft.com>
2022-08-19 12:20:55 +00:00
Alexander Tkachev c47f355d9a feat: hebrew translation structure
Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

commit 9506e913ab2fadae4f73843a73abf204db0a7b19
Author: Alexander Tkachev <sasha64sasha@gmail.com>
Date:   Wed Aug 17 20:49:38 2022 +0300

    feat: translations structure

    Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

commit 6a4f46a092e983cae9f722505ee4dd39ad252367
Author: Alexander Tkachev <sasha64sasha@gmail.com>
Date:   Wed Aug 17 20:41:56 2022 +0300

    fix: typo

    Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

commit 4f1e496fef4383a70fb2d859fd47a8b7ec99afb4
Author: Alexander Tkachev <sasha64sasha@gmail.com>
Date:   Sat Aug 13 01:40:57 2022 +0300

    fix: use less pretentious language

    Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

commit d33c1e534e14628bb7760edbf55f2e2e7ac6a4fa
Author: Alexander Tkachev <sasha64sasha@gmail.com>
Date:   Fri Aug 12 20:13:01 2022 +0300

    chore: point all documents to english translation

    Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

commit d4d9faf26d8564858bd47b63d1848055e260887f
Author: Alexander Tkachev <sasha64sasha@gmail.com>
Date:   Fri Aug 12 19:53:30 2022 +0300

    style: remove rtl

    Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

commit fb29d9f594d0fe81561a6649d0dd8f608824391b
Author: Alexander Tkachev <sasha64sasha@gmail.com>
Date:   Fri Aug 12 19:42:46 2022 +0300

    feat: add hebrew sample

    Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

commit 4bac4b8651af1ce2d26c2417cd2cad36c7bfb25a
Author: Alexander Tkachev <sasha64sasha@gmail.com>
Date:   Fri Aug 12 19:36:13 2022 +0300

    chore: create hebrew tralnsation structure for cloudevents spec

    Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>

Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com>
2022-08-17 21:54:11 +03:00
Doug Davis 6ac14dc8cd
Merge pull request #1028 from VedaGao/RELEASE_NOTES
Translate spec/cloudevents/languages/zh-CN/RELEASE_NOTES to zh-CN
2022-08-11 14:48:19 -04:00
Doug Davis d9761b9e45
Merge pull request #1029 from duglin/issue653
Add some clarity around nested CEs
2022-08-03 10:33:28 -04:00
Doug Davis 48fdf103bf Add some clarity around nested CEs
Fixes #653

Signed-off-by: Doug Davis <dug@microsoft.com>
2022-08-03 14:32:02 +00:00
VedaGao d28117c3fd translate RELEASE_NOTES
Signed-off-by: VedaGao <gymti2014@163.com>

Co-authored-by: JieDing <jie.ding@linkall.com>
2022-07-29 12:50:03 +08:00
Doug Davis 8e78fcafa0
Merge pull request #1035 from duglin/clarifyBinaryMode
Add some reasons for why binary mode might be used
2022-07-21 15:42:53 -04:00
Doug Davis a6921722f4 Add some reasons for why binary mode might be used
/cc @afrittoli @xibz

Signed-off-by: Doug Davis <dug@microsoft.com>
2022-07-21 19:40:56 +00:00
Doug Davis cb7f0376e8
Merge pull request #1034 from duglin/typos
just typos
2022-07-21 15:38:33 -04:00
Doug Davis 65ec76de84
Merge pull request #1033 from duglin/base64
Be clear that data_base64 isn't a CE attribute
2022-07-21 15:37:37 -04:00
Doug Davis fd720c7330
Merge pull request #1031 from duglin/sequence-part2
Clean-up of Sequence
2022-07-21 15:35:56 -04:00
Doug Davis d8fe24c785 Be clear that data_base64 isn't a CE attribute
Signed-off-by: Doug Davis <dug@microsoft.com>
2022-07-21 15:40:28 +00:00
Doug Davis ab0b385913 just typos
Signed-off-by: Doug Davis <dug@microsoft.com>
2022-07-15 13:38:48 +00:00
Doug Davis be63f8811f
Merge pull request #1030 from duglin/paypal
Remove PayPal for now
2022-07-14 11:49:26 -04:00
Doug Davis 98ae14b989 Clean-up of Sequence
Signed-off-by: Doug Davis <dug@microsoft.com>
2022-07-13 12:33:55 +00:00
Doug Davis f17c248aa3 Remove PayPal for now
Signed-off-by: Doug Davis <dug@microsoft.com>
2022-07-13 01:18:48 +00:00
Doug Davis 604fef3eea
Merge pull request #1025 from duglin/issue618
Add a step to the review process to check extensions
2022-06-24 09:39:44 -04:00
VedaGao 32507d1c90
translate spec/cloudevents/languages/zh-CN/adapters/aws-s3.md to zh-cn (#1023)
* docs:  translate spec/cloudevents/languages/zh-CN/adapters/aws-s3.md to zh-cn

Signed-off-by: VedaGao <gymti2014@163.com>

* Update cloudevents/languages/zh-CN/adapters/aws-s3.md

Signed-off-by: VedaGao <gymti2014@163.com>

Co-authored-by: JieDing <jie.ding@linkall.com>

Co-authored-by: JieDing <jie.ding@linkall.com>
2022-06-24 09:39:15 -04:00
Doug Davis 0ace88a7f8 Add a step to the review process to check extensions
Fixes #618

Signed-off-by: Doug Davis <dug@microsoft.com>
2022-06-21 12:06:06 +00:00
Doug Davis 9b3a3c9449
Merge pull request #1020 from duglin/issue591
Remove hardcoded reference to JSON since we have Avro now
2022-06-21 07:55:24 -04:00
Doug Davis 0f46a2fe80 Remove hardcoded reference to JSON since we have Avro now
Fixes #591

Signed-off-by: Doug Davis <dug@microsoft.com>
2022-06-15 21:42:17 +00:00
Byron Ruth c71e4fe007
Add support for binary mode using NATS headers (#1016)
* Add support for binary mode using NATS headers

Headers were introduced in the NATS 2.2 release.

Signed-off-by: Byron Ruth <b@devel.io>

* Address href errors and revert version bump

Signed-off-by: Byron Ruth <b@devel.io>

* Add missing href

Signed-off-by: Byron Ruth <b@devel.io>
2022-05-19 12:18:10 -04:00
Doug Davis cec773e9ef
Merge pull request #1017 from gr8routdoors/patch-1
docs: fix typo in schema registry spec
2022-05-18 15:34:36 -04:00
Great Outdoors 6cd09e5e21
docs: fix typo in schema registry spec 2022-05-17 17:53:25 -04:00
Doug Davis 06aab847ec
Merge pull request #787 from duglin/deprecateService
Add a deprecated timestamp
2022-05-09 13:54:36 -04:00
Doug Davis bbd0ca93d4 Add a deprecated timestamp
Closes #705

Signed-off-by: Doug Davis <dug@us.ibm.com>
Signed-off-by: Doug Davis <dug@microsoft.com>
2022-05-03 18:58:48 +00:00
Shengjing SUN 0284b8c5e1
Translate cloudevents/spec/blob/main/cloudevents/primer.md to zh-CN #982 (#1003)
* Translate cloudevents/spec/blob/main/cloudevents/primer.md to zh-CN #982

Signed-off-by: Sun Shengjing <sunshengjing@Suns-MacBook-Pro.local>

* Translate cloudevents/spec/blob/main/cloudevents/primer.md to zh-CN #982 #1003

Signed-off-by: Shengjing SUN <sunshengjing@gmail.com>

* docs:update languages/zh-CN/spec.md(#982) verify #673

Signed-off-by: Shengjing SUN <sunshengjing@gmail.com>

* docs:update languages/zh-CN/spec.md(#982) verify #673

Signed-off-by: Shengjing SUN <sunshengjing@gmail.com>

* docs:update languages/zh-CN/spec.md(#982) verify #673

Signed-off-by: Shengjing SUN <sunshengjing@gmail.com>

* Translate cloudevents/spec/blob/main/cloudevents/primer.md to zh-CN #982#1003: add spaces before/after the -

Signed-off-by: Shengjing SUN <sunshengjing@gmail.com>

* Translate cloudevents/spec/blob/main/cloudevents/primer.md to zh-CN #982 verify #679:fix bad link 'occurrence'

Signed-off-by: Shengjing SUN <sunshengjing@gmail.com>

* Translate cloudevents/spec/blob/main/cloudevents/primer.md to zh-CN #982 verify #679:fix bad link 'occurrence'

Signed-off-by: Shengjing SUN <sunshengjing@gmail.com>

* Translate cloudevents/spec/blob/main/cloudevents/primer.md to zh-CN #982 verify #679:fix bad link 'creating-cloudevents'

Signed-off-by: Shengjing SUN <sunshengjing@gmail.com>

Co-authored-by: Sun Shengjing <sunshengjing@Suns-MacBook-Pro.local>
2022-05-03 14:57:38 -04:00
Shengjing SUN 69dfe0d52c
docs:update languages/zh-CN/spec.md(#982) (#1001)
* docs:update languages/zh-CN/spec.md(#982)
Signed-off-by: Shengjing SUN <sunshengjing@gmail.com>

* docs:update languages/zh-CN/spec.md(#982)
Signed-off-by: Shengjing SUN <sunshengjing@gmail.com>

* docs:update languages/zh-CN/spec.md(#982) #1001

Signed-off-by: Sun Shengjing <sunshengjing@Suns-MacBook-Pro.local>

* add back two understores spec.md

Signed-off-by: Shengjing SUN <sunshengjing@gmail.com>

* docs:update languages/zh-CN/spec.md(#982) verify #673:fix bad hyper-link [#occurrence]

Signed-off-by: Shengjing SUN <sunshengjing@gmail.com>

Co-authored-by: Sun Shengjing <sunshengjing@Suns-MacBook-Pro.local>
2022-04-28 14:39:19 -04:00
Doug Davis 9ea4ef4515
Update processing of Epoch on all operations (#930)
* add ?epoch to DELETE /services/ID

Signed-off-by: Doug Davis <dug@us.ibm.com>

* tweak everything

Signed-off-by: Doug Davis <dug@us.ibm.com>

* openapi

Signed-off-by: Doug Davis <dug@us.ibm.com>

* more edits

Signed-off-by: Doug Davis <dug@microsoft.com>

* epoch isn't used for locking

Signed-off-by: Doug Davis <dug@microsoft.com>

* more

Signed-off-by: Doug Davis <dug@microsoft.com>

* more

Signed-off-by: Doug Davis <dug@microsoft.com>

* more

Signed-off-by: Doug Davis <dug@microsoft.com>

Co-authored-by: Doug Davis <dug@us.ibm.com>
2022-04-28 14:19:58 -04:00
Jon Skeet f0d4bbe5d4
Next round of restrictions in XML format (#1002)
* Next round of restrictions in XML format.

These represent the following clear votes from #998:

- Example 2: text node in an `<event>` element
- Example 5: element within a context attribute element
- Example 6: element within binary `<data>` element
- Example 7: element within a text `<data>` element
- Example 8: text within an "any" `<data>` element
- Example 10: text node in a `<batch>` element
- Example 12: comments are allowed anywhere

The remaining examples did not have clear-cut votes, although it
looks like we *probably* want to prohibit additional XML attributes
within context attribute elements.

Signed-off-by: Jon Skeet <jonskeet@google.com>

* Add exemption to XML comment processing for a data child element.

Signed-off-by: Jon Skeet <jonskeet@google.com>

* SHOULD -> MUST for comments in XML format

Signed-off-by: Jon Skeet <jonskeet@google.com>

* Preserve all XML nodes within data element child

Signed-off-by: Jon Skeet <jonskeet@google.com>
2022-04-28 14:19:27 -04:00
Doug Davis 11de4345a9
Merge pull request #994 from jskeet/core
Initial definition of "core" attributes
2022-04-08 07:30:43 -04:00
Jon Skeet e01f9779c6 Initial definition of "core" attributes
There may be some more work required to clarify the nature of
extension attributes.

Fixed a few typos I spotted as I went along.

Signed-off-by: Jon Skeet <jonskeet@google.com>
2022-04-08 10:43:27 +01:00
Doug Davis cc1bc00ad4
Merge pull request #992 from derhuerst/fix-protobuf-spec-link
README.md: fix link to protobuf format spec
2022-04-04 18:44:02 -04:00
Jannis R caa22d49be
README.md: fix link to protobuf format spec
Signed-Off-By: Jannis R <mail@jannisr.de>
2022-04-04 14:51:12 +02:00
Doug Davis f5df39dbc3
Merge pull request #987 from xdlbdy/translate
update cloudevents/languages/zh-CN/http-webhook.md
2022-04-01 10:57:26 -04:00
Jie fc99a2a36b
docs: update languages/zh-CN/README.md (#985)
* translate /README.md

Signed-off-by: Jie Ding <jie.ding@linkall.cloud>

* add 'README.md' and 'RELEASE_NOTES.md' to 'languages' sub-dirs of each spec directory

Signed-off-by: Jie Ding <jie.ding@linkall.cloud>

* update languages-spec

Signed-off-by: Jie Ding <jie.ding@linkall.cloud>

* update README.md

Signed-off-by: Jie Ding <jie.ding@linkall.cloud>
2022-04-01 10:57:04 -04:00
Jon Skeet c2af79d7d5
Minor tweaks to the XML format (#988)
This does not attempt to cover any of the controversial aspects of #972,
and indeed there may be some uncontroversial aspects of #972 that
I haven't yet taken.

Signed-off-by: Jon Skeet <jonskeet@google.com>
2022-04-01 10:56:42 -04:00
delu 9b0fce278e docs: update cloudevents/languages/zh-CN/http-webhook.md
Signed-off-by: delu <delu.xu@linkall.cloud>
2022-03-29 19:37:37 +08:00
Jie dbd5df0a70
rebuild multi-language structure (#989)
* rebuild multi-language structure

Signed-off-by: Jie Ding <jie.ding@linkall.cloud>

* clear wrong links

Signed-off-by: Jie Ding <jie.ding@linkall.cloud>

* replace 'may' with 'MAY'

Signed-off-by: Jie Ding <jie.ding@linkall.cloud>
2022-03-25 16:31:01 -04:00
Doug Davis ff63dd9a6d
Merge pull request #991 from duglin/minor
add missing version strings
2022-03-25 16:25:45 -04:00
Doug Davis a6111d2f6a add missing version strings
minor typos

Signed-off-by: Doug Davis <dug@microsoft.com>
2022-03-25 20:08:07 +00:00
Doug Davis 3cffde5f0c
Merge pull request #990 from duglin/nobranches
Add docs in prep for just one branch
2022-03-25 15:14:24 -04:00
Doug Davis f80c3bd540 Add docs in prep for just one branch
Signed-off-by: Doug Davis <dug@microsoft.com>
2022-03-25 18:54:12 +00:00
Doug Davis 650f3e5265
Merge pull request #973 from duglin/singleton
Make it clear each CE attribute is a singleton
2022-03-24 12:57:24 -04:00
Doug Davis 213ba54f4e
cleanup and fixes for CLOMonitor (#971)
Signed-off-by: Doug Davis <dug@microsoft.com>
2022-03-24 12:55:29 -04:00
Doug Davis 5be731125d Make it clear each CE attribute is a singleton
Signed-off-by: Doug Davis <dug@microsoft.com>
2022-03-19 00:39:22 +00:00
Jon Skeet 8dfd51183d
Proposed governance changes from the branching discussions (#968)
* Proposed governance changes from the branching discussions

Signed-off-by: Jon Skeet <jonskeet@google.com>

* Adjust tag format to slash instead of dash

This also clarifies that a release can cover a subdirectory; there's
no good concrete example as right now all releases would cover a
top-level directory anyway.

Signed-off-by: Jon Skeet <jonskeet@google.com>
2022-03-18 07:40:24 -04:00
Doug Davis 7953cd1bd4
Merge pull request #970 from duglin/fixes
Fix RFC keyword
2022-03-11 10:47:05 -05:00
Doug Davis bcdbbba805 Fix RFC keyword
Signed-off-by: Doug Davis <dug@microsoft.com>
2022-03-11 15:22:38 +00:00
Jem Day f9b9363920
Introducing XML Format. (#800)
* feat: introduce XML format

Introduce a specification that defines how CloudEvents
should be represented in XML.

Signed-off-by: Day, Jeremy(jday) <jday@paypal.com>

* Addressed review comments

Signed-off-by: Day, Jeremy(jday) <jday@paypal.com>

* Typo fix

Signed-off-by: Day, Jeremy(jday) <jday@paypal.com>

* Introduced namespace.
Modified the way `data` is represented.

Signed-off-by: Day, Jeremy(jday) <jday@paypal.com>

* tweaked  text

Signed-off-by: Day, Jeremy(jday) <jday@paypal.com>

* - Added more XML examples (as per WG request).
- Added clarity around namspaces and prefixes
- Changed envelope names for Event and Batch

Signed-off-by: Day, Jeremy(jday) <jday@paypal.com>

* minor tweak

Signed-off-by: Day, Jeremy(jday) <jday@paypal.com>

* Addressing Review Comments

Signed-off-by: Day, Jeremy(jday) <jday@paypal.com>

* Tweaks

Signed-off-by: Day, Jeremy(jday) <jday@paypal.com>

* Chnaged the way CE Type designators are communicated

Signed-off-by: Day, Jeremy(jday) <jday@paypal.com>

* Addressed review comments, fixed merge conflicts

Signed-off-by: Day, Jeremy(jday) <jday@paypal.com>

* - Addressed review comments
- Removed constraints on namspacing for data
- Loosened langauge aorund xsi:type on REQUIRED/OPTIONAL context attributes

Signed-off-by: Day, Jeremy(jday) <jday@paypal.com>

* Tweaked langauge around batch and envelope construct

Signed-off-by: Day, Jeremy(jday) <jday@paypal.com>

* addressed review comments

Signed-off-by: Day, Jeremy(jday) <jday@paypal.com>

* Fixed document reference

Signed-off-by: Day, Jeremy(jday) <jday@paypal.com>
2022-03-11 09:53:36 -05:00
Doug Davis 54edbc6f4c
Merge pull request #962 from duglin/issue955
Add some reasoning to why we limit things.
2022-03-10 13:27:34 -05:00
Doug Davis e44d7a826f
Merge pull request #958 from duglin/attrValidation
SDK should validate context attribute values
2022-03-10 13:27:17 -05:00
Eric Pabst 7d71b3e8fa
Fix typo (#966) 2022-03-09 09:15:28 -05:00
Doug Davis 6559d1fea3 Add some reasoning to why we limit things.
Fixes: #955

Signed-off-by: Doug Davis <duglin@gmail.com>
Signed-off-by: Doug Davis <dug@microsoft.com>
2022-03-04 00:55:52 +00:00
Jie 284e82c60e
docs:add multi-languages structure (#941)
* docs:add multi-languages structure

Signed-off-by: Jie Ding <jie.ding@linkall.cloud>

* docs: replace maintainer with reviewer role

Signed-off-by: Jie Ding <jie.ding@linkall.cloud>

* Update languages/README.md

Signed-off-by: Jie Ding <jie.ding@linkall.cloud>

* re-org structure and address open comments

Signed-off-by: Jie Ding <jie.ding@linkall.cloud>

* docs: adress open comments

Signed-off-by: Jie Ding <jie.ding@linkall.cloud>

* docs: address open comments

Signed-off-by: Jie Ding <jie.ding@linkall.cloud>

* docs: fix wrong sections

Signed-off-by: Jie Ding <jie.ding@linkall.cloud>
2022-03-03 14:34:12 -05:00
Doug Davis cc8fdf5f1f
Merge pull request #965 from cuishuang/main
all: fix some typos
2022-03-03 07:01:50 -05:00
cuishuang bad81171bd all: fix some typos
Signed-off-by: cuishuang <imcusg@gmail.com>
2022-03-03 19:22:46 +08:00
Doug Davis a10d1b1422 SDK should validate context attribute values
Per a chat we had in a previous SDK call, the SDK SHOULD validate attributes
so users can be notified if they gave an invalid value.

Signed-off-by: Doug Davis <duglin@gmail.com>
2022-02-26 21:34:34 -05:00
Doug Davis 80cb160a67
Merge pull request #961 from duglin/skipFile
Skip problematic file during link check
2022-02-24 20:35:43 -05:00
Doug Davis 898faca29f Skip problematic file during link check
I think github thinks we're ddos-ing it with all of these GETs so let's just
skip the file since it's not that important anyway.

Also fixed a case problem in RFC keyword in: cloudevents/formats/json-format.md

Signed-off-by: Doug Davis <duglin@gmail.com>
2022-02-24 20:18:55 -05:00
Doug Davis 618fc10e54
Merge pull request #959 from JemDay/jd-link-fix
Fix broken link reference
2022-02-24 19:55:51 -05:00
Doug Davis 98f1cf4102
Merge pull request #960 from duglin/fixChecker
fix checker for macs
2022-02-24 19:51:06 -05:00
Doug Davis eba91e8ddd fix checker for macs
Signed-off-by: Doug Davis <duglin@gmail.com>
2022-02-24 19:45:37 -05:00
Day, Jeremy(jday) e9a0686370 Fix broken link reference
Signed-off-by: Day, Jeremy(jday) <jday@paypal.com>
2022-02-24 15:19:20 -08:00
Pierangelo Di Pilato a685097a18
[Subscription] Remove exactly one attribute restriction for exact, prefix and suffix filters (#957)
* Remove exactly one attribute restriction for exact, prefix and suffix

To improve the usage of the API in the common case, I'm removing
the restriction for `exact`, `prefix` and `suffix` filters of only
containing exactly one attribute.

When multiple attributes are specified, all attributes must match (
like in [1]), for example, these filters:

```yaml
filters:
  - suffix:
      type: "com.github.push"
  - suffix:
      subject: "https//github.com/cloudevents/spec"
```

can be written as:

```yaml
filters:
  - suffix:
      type: "com.github.push"
      subject: "https//github.com/cloudevents/spec"
```

[1]: https://github.com/cloudevents/spec/pull/803

Signed-off-by: Pierangelo Di Pilato <pierdipi@redhat.com>

* Update subscription open API

Signed-off-by: Pierangelo Di Pilato <pierdipi@redhat.com>
2022-02-24 13:11:47 -05:00
Jon Skeet 355c85f8bb
Clarifications to JSON format (#950)
* Clarifications to JSON format

- Clarify that the "default to JSON" handling of datacontenttype
  does not apply to binary data
- Give an example of a JSON number as the `data` property value

Signed-off-by: Jon Skeet <jonskeet@google.com>

* Address review comments

Signed-off-by: Jon Skeet <jonskeet@google.com>
2022-02-24 13:11:16 -05:00
Jem Day 740d4665f9
Introduce reserved attribute names. (#952)
* Introduce reserved attribute names.

Added a section to define a set of context attribute names
that cannot be used.

Signed-off-by: Day, Jeremy(jday) <jday@paypal.com>

* - Addressed review comments
- Re-Aligned section levels

Signed-off-by: Day, Jeremy(jday) <jday@paypal.com>
2022-02-23 11:17:36 -05:00
Doug Davis ab05c30520
Merge pull request #956 from duglin/badURLs
fix bad URLs
2022-02-17 14:36:58 -05:00
Doug Davis f6b83137eb fix bad URLs
Signed-off-by: Doug Davis <dug@us.ibm.com>
2022-02-17 19:24:13 +00:00
Scott Nichols b104f2a65a
Fix subscriptions OpenAPI (#949)
* ran prettier

Signed-off-by: Scott Nichols <n3wscott@chainguard.dev>

* fix cloudevent subscription OpenAPI

Signed-off-by: Scott Nichols <n3wscott@chainguard.dev>
2022-02-13 17:38:18 -05:00
Doug Davis 26876ac168
Merge pull request #948 from duglin/update
Sync with v1.0.2
2022-02-13 17:36:46 -05:00
Doug Davis 0afe766be7 Sync with v1.0.2
Signed-off-by: Doug Davis <dug@us.ibm.com>
2022-02-06 00:42:29 +00:00
Doug Davis 3b5f5d5d76
Merge pull request #947 from duglin/fixchecker
remove old code
2022-01-27 20:22:06 -05:00
Doug Davis fd8251359d remove old code
Signed-off-by: Doug Davis <dug@us.ibm.com>
2022-01-28 01:21:02 +00:00
Doug Davis 97623252cd
Merge pull request #944 from duglin/addKlaus
add Klaus as an admin
2022-01-27 19:03:33 -05:00
Doug Davis 84322e680a add Klaus as an admin
Signed-off-by: Doug Davis <dug@us.ibm.com>
2022-01-28 00:02:14 +00:00
Doug Davis dc30b6134f
Merge pull request #942 from duglin/typo
typo noticed by Erik
2022-01-27 18:50:11 -05:00
Doug Davis e6eadb7335
Merge pull request #945 from duglin/reorder
just alphabetize things
2022-01-27 18:49:46 -05:00
Doug Davis 1eac143970
Merge pull request #938 from duglin/openapi
openapi changes for #928
2022-01-27 18:48:56 -05:00
Doug Davis 5e5ef9a9ba just alphabetize things
Signed-off-by: Doug Davis <dug@us.ibm.com>
2022-01-27 14:42:08 +00:00
Doug Davis 5343093f54 typo noticed by Erik
Signed-off-by: Doug Davis <dug@us.ibm.com>
2022-01-26 00:54:11 +00:00
Doug Davis b95f2ee2a8 openapi changes for #928
Signed-off-by: Doug Davis <dug@us.ibm.com>
2022-01-23 22:22:13 +00:00
Doug Davis b2b0541776
Merge pull request #937 from jskeet/csharpnamespace
Add C# namespace option to proto
2022-01-20 13:44:52 -05:00
Doug Davis f5248f433b
Merge pull request #911 from duglin/filters
More filter constraints
2022-01-20 13:44:09 -05:00
Doug Davis 949f035414
Merge pull request #931 from duglin/fixTool
Add checks for bookmarks & fix bad links
2022-01-20 13:43:03 -05:00
Doug Davis d5dc968fb7
Merge pull request #928 from duglin/PUT
Use PUT instead of POST
2022-01-20 13:41:27 -05:00
Jon Skeet d44e52a7e1 Add a C# namespace option to the proto
The naming choice is based on the C# SDK core being
"CloudNative.CloudEvents". This creates a bias towards using the C#
SDK instead of "roll-your-own" - but I think that's okay,
personally. Happy to consider other options.

Signed-off-by: Jon Skeet <jonskeet@google.com>
2022-01-18 12:42:14 +00:00
Doug Davis 6aa22d1781
Merge pull request #929 from duglin/createRequired
Be clear about rejecting requests with missing fields
2022-01-13 14:08:34 -05:00
Doug Davis e7a5ded252
Merge pull request #927 from duglin/tweaks
Just some wordsmithing
2022-01-13 14:08:06 -05:00
Doug Davis 4555520b17
Merge pull request #926 from duglin/addUpdate
Add support for "update" in GET /features
2022-01-13 14:07:37 -05:00
JieDing 61260bdc72
docs: add translation (#917)
* docs:add translation

Signed-off-by: Jie Ding <jie.ding@linkall.cloud>

* docs: add new translation file http-webhook_CN.md

Signed-off-by: Jie Ding <jie.ding@linkall.cloud>
2022-01-13 13:55:58 -05:00
Doug Davis 00d2681e6d
Merge pull request #788 from drewpca/patch-1
general copy editing
2022-01-13 13:53:53 -05:00
Drew Perttula ab765d132e general copy editing
Signed-off-by: Drew Perttula <drewpca@google.com>

apply review suggestions

upcase key word SHOULD

clarify sentence

rewrap

Signed-off-by: Doug Davis <dug@us.ibm.com>
2022-01-13 18:51:53 +00:00
Doug Davis 27952ff35d More filter constraints
Signed-off-by: Doug Davis <dug@us.ibm.com>
2022-01-13 16:03:03 +00:00
Doug Davis da73ca7a79 Add checks for bookmarks & fix bad links
Signed-off-by: Doug Davis <dug@us.ibm.com>
2022-01-07 14:46:20 +00:00
Doug Davis 9a226340d1
Merge pull request #922 from JieDing/badLinks
fix bad link
2022-01-06 13:16:32 -05:00
Doug Davis 67f16bb0a8 Be clear about rejecting requests with missing fields
Signed-off-by: Doug Davis <dug@us.ibm.com>
2022-01-05 14:35:47 +00:00
Doug Davis 834b3e768a Use PUT instead of POST
Signed-off-by: Doug Davis <dug@us.ibm.com>
2022-01-05 13:57:35 +00:00
Doug Davis 2c361faafd Just some wordsmithing
Signed-off-by: Doug Davis <dug@us.ibm.com>
2022-01-05 13:50:20 +00:00
Doug Davis f5cc7374f6 Add support for "update" in GET /features
Would be nice to know if POST/PUT are supported w/o "discovery by error".

Signed-off-by: Doug Davis <dug@us.ibm.com>
2022-01-04 19:16:11 +00:00
Jie Ding 8b6072f1af fix bad links
Signed-off-by: Jie Ding <jie.ding@linkall.cloud>
2021-12-22 17:42:03 +08:00
Doug Davis fa1d3b3cc2
Merge pull request #918 from deissnerk/dialects-link
Fix broken link to section about filter dialects
2021-12-15 20:14:35 -05:00
Klaus Deißner 8031711d87 Fix broken link to section about filter dialects
Signed-off-by: Klaus Deißner <klaus.deissner@sap.com>
2021-12-14 21:16:44 +01:00
Doug Davis 53ca7ed935
Merge pull request #915 from lance/lance/tweak-sdk-requirements-wording
chore: tweak SDK requirements wording
2021-12-06 14:30:08 -05:00
Doug Davis aadf0cfd48
Merge pull request #909 from duglin/typos
fix json and add clarity about what's required
2021-12-06 14:27:50 -05:00
Doug Davis eadef20ff7 fix json and add clarity about what's required
Signed-off-by: Doug Davis <dug@us.ibm.com>
2021-12-06 19:25:12 +00:00
JieDing bd9cd1e419
Proposal: CloudEvents Spec in Chinese (#899)
* put documents under cloudevents/translated/zh-cn, fix invalid links

Signed-off-by: JieDing <dingjwilliams@gmail.com>

* fix links

Signed-off-by: JieDing <dingjwilliams@gmail.com>

* fix translation errors

fix typo

add translation

Signed-off-by: JieDing <dingjwilliams@gmail.com>
2021-12-06 14:20:31 -05:00
Doug Davis b9cac86242
Merge pull request #916 from duglin/badLink
fix bad link
2021-12-01 23:10:43 -05:00
Doug Davis f9485e9767 fix bad link
Signed-off-by: Doug Davis <dug@us.ibm.com>
2021-12-02 04:08:54 +00:00
Lance Ball 2cf99bc718
chore: tweak SDK requirements wording
Signed-off-by: Lance Ball <lball@redhat.com>
2021-12-01 09:53:36 -05:00
Doug Davis 8e129e4ff3
Merge pull request #895 from duglin/move
move more files into "formats" dir
2021-11-10 21:42:58 -05:00
Doug Davis 18d5870b2b
Merge pull request #901 from duglin/fixLinks
fix more links
2021-11-10 21:14:31 -05:00
Doug Davis 186d26230b fix more links
Signed-off-by: Doug Davis <dug@us.ibm.com>
2021-11-11 01:44:05 +00:00
Doug Davis 7bd28f7d81 move more files
Signed-off-by: Doug Davis <dug@us.ibm.com>
2021-11-04 21:44:00 +00:00
Doug Davis e661fa7ec8
Merge pull request #893 from duglin/dir2
re-org dirs
2021-11-04 13:55:47 -04:00
Doug Davis 6ca6d5add2 re-org dirs
Signed-off-by: Doug Davis <dug@us.ibm.com>
2021-11-04 17:54:21 +00:00
Doug Davis 6de2a310dd
Merge pull request #892 from duglin/videos
add link to our channel
2021-11-03 08:04:24 -04:00
Doug Davis 417a9d1d25 add link to our channel
Signed-off-by: Doug Davis <dug@us.ibm.com>
2021-11-03 00:35:39 +00:00
Doug Davis 1deb463644
Merge pull request #883 from jskeet/parameters
First pass at differentiating between parameters, operands and arguments
2021-10-25 07:10:25 -04:00
Doug Davis 7a556d84ef
Merge pull request #882 from duglin/config
Add a /features API
2021-10-25 07:09:49 -04:00
Doug Davis e4aeb49891
Merge pull request #884 from duglin/fixurl
remove bad href
2021-10-20 06:32:01 -04:00
Doug Davis b390b08e17 remove bad href
Signed-off-by: Doug Davis <dug@us.ibm.com>
2021-10-19 20:26:41 +00:00
Doug Davis d38d1218ed Add a /config API
Signed-off-by: Doug Davis <dug@us.ibm.com>
2021-10-19 20:24:39 +00:00
Remi Cattiau 4a211bcc0b
feat(discovery): replace id by authority (#879)
* feat(discovery): replace id by authority

Signed-off-by: Remi Cattiau <remi@cattiau.com>

* fix(discovery): update based on 9/23 call

Signed-off-by: Remi Cattiau <remi@cattiau.com>

* chore: add contributor

Signed-off-by: Remi Cattiau <remi@cattiau.com>

* fix(discovery): include PR comments

Signed-off-by: Remi Cattiau <remi@cattiau.com>

* fix(discovery): add authority in the example of resource model

Signed-off-by: Remi Cattiau <remi@cattiau.com>
2021-10-19 16:19:09 -04:00
Erik Erikson 86e52fae5c
Discovery add history (#868)
* feat(discovery): add history via self service

Signed-off-by: Erik Erikson <erik.erikson@gmail.com>

* feat(discovery): reuse id path parameter

Signed-off-by: Erik Erikson <erik.erikson@gmail.com>

* feat(discovery): add historical query capability

Signed-off-by: Erik Erikson <erik.erikson@gmail.com>

* Remove changes path

As suggested and discussed, removing the changes path (i.e. HTTP history
endpoint) in preference for subscriptions offering a read offset
configuration.

Signed-off-by: Erik Erikson <erik.erikson@gmail.com>

* feat(discovery): change section title

Signed-off-by: Erik Erikson <erik.erikson@gmail.com>

* feat(discovery): spelling fix

Signed-off-by: Erik Erikson <erik.erikson@gmail.com>
2021-10-19 16:07:27 -04:00
Doug Davis f02c85ee7f
Merge pull request #881 from jskeet/more-json-format-defaulting
Explicitly state application/json defaulting when serializing
2021-10-19 15:10:07 -04:00
Jon Skeet a6c937bcf0 First pass at differentiating between parameters, operands and arguments
In somewhat woolly terms, my expectations from other language specs are:

- A *parameter* is used in the declaration/specification of a function or operator
- An *operand* specifies the value of an operator parameter
- An *argument* specifies the value of a function parameter

Signed-off-by: Jon Skeet <jonskeet@google.com>
2021-10-14 13:25:25 +01:00
Jon Skeet 39c12dc36a Explicitly state application/json defaulting when serializing
(I've used SHOULD rather than MUST to be consistent with deserialization. If we were starting from scratch, I'd suggest that MUST would be more appropriate, but it's probably too late to do that.)

Fixes #880

Signed-off-by: Jon Skeet <jonskeet@google.com>
2021-10-07 09:41:21 +01:00
Doug Davis 3b346bf3e0
Merge pull request #869 from duglin/extra-params
Reject queries with unknown query params
2021-10-06 22:31:42 -04:00
Doug Davis 44472e84b6 add filter query
Signed-off-by: Doug Davis <dug@us.ibm.com>
2021-10-07 02:30:32 +00:00
Doug Davis 061eeecabc
Merge pull request #878 from loopingz/cesql-simplify
feat(cesql): remove explicit casting from the spec
2021-09-30 13:15:49 -04:00
Doug Davis 0b54da356a
Merge pull request #876 from duglin/de-int1
Make it clear that empty query is still a 200
2021-09-23 15:56:39 -04:00
Clemens Vasters a706625010
Sink credentials (#864)
* Sink credentials

Signed-off-by: Clemens Vasters <clemensv@microsoft.com>

* RFC keywords

Signed-off-by: clemensv <clemensv@microsoft.com>

Co-authored-by: Clemens Vasters <clemensv@microsoft.com>
2021-09-23 11:54:27 -04:00
Doug Davis 46df43f916
Merge pull request #877 from Oberon00/patch-1
Use code formatting for example URLs
2021-09-23 11:01:21 -04:00
Remi Cattiau 3cb4ed42e4
feat(cesql): remove explicit casting from the spec
Signed-off-by: Remi Cattiau <remi@cattiau.com>
2021-09-23 07:03:07 -07:00
Christian Neumüller 94b57f46e9
Use code formatting for example URLs
The RefinedGitHub plugin strips off the https:// otherwise, and they aren't meant to be clickable anyway.
2021-09-22 16:43:40 +02:00
Doug Davis faf7053847
Merge pull request #875 from embano1/issue-874
Add PowerShell SDK to the list of SDKs
2021-09-18 22:26:49 -04:00
Doug Davis 919367fdae
Merge pull request #872 from loopingz/fix-filters-sample
fix: filters subscription example
2021-09-18 22:26:22 -04:00
Doug Davis dac282d409 Make it clear that emptry query is still a 200
Signed-off-by: Doug Davis <dug@us.ibm.com>
2021-09-16 00:47:59 +00:00
Daniel Azuma 8446adc241
fix(json-format): Clarify data encoding in JSON format with a JSON datacontenttype (#861)
* fix(json-format): Clarify data encoding in JSON format with a JSON datacontenttype

Signed-off-by: Daniel Azuma <dazuma@google.com>

* Make the IDs in the examples match

Signed-off-by: Daniel Azuma <dazuma@google.com>

* Make the phrase checker happy

Signed-off-by: Daniel Azuma <dazuma@google.com>

* Reworked the text in response to initial comments from jskeet and duglin

Signed-off-by: Daniel Azuma <dazuma@google.com>

* Additional edits

Signed-off-by: Daniel Azuma <dazuma@google.com>

* Additional edits based on erik's suggestions

Signed-off-by: Daniel Azuma <dazuma@google.com>

* Attribute types aren't all strings

Signed-off-by: Daniel Azuma <dazuma@google.com>
2021-09-15 20:37:54 -04:00
Michael Gasch 903fbe0038 docs: Add PowerShell SDK
Closes: #874
Signed-off-by: Michael Gasch <mgasch@vmware.com>
2021-09-15 10:17:45 +02:00
Remi Cattiau 9d437246be
fix: filters subscription example
Signed-off-by: Remi Cattiau <remi@cattiau.com>
2021-09-09 10:06:17 -07:00
Doug Davis 43af063965
Merge pull request #866 from duglin/issue863
Minor/misc discovery changes
2021-09-01 19:11:36 -04:00
Doug Davis 5ef772348f
Merge pull request #870 from clemensv/issue-781-master
Fix for issue 781
2021-09-01 19:11:11 -04:00
clemensv 3516bf85ac Fix for issue 781
Signed-off-by: clemensv <clemensv@microsoft.com>
2021-08-26 14:33:58 +02:00
Doug Davis 36499de398 issue863
Signed-off-by: Doug Davis <dug@us.ibm.com>
2021-08-24 21:21:21 +00:00
Doug Davis 2e281849ea
Merge pull request #867 from steveoliver/patch-1
Update punctuation (period) in dataconenttype section
2021-08-18 06:36:55 -04:00
Steve Oliver 560ec3275c Update punctuation (period) in datacontenttype section
Signed-off-by: Steve Oliver <steve.oliver@guildmortgage.net>
2021-08-17 21:35:27 -07:00
Doug Davis 875c05f568
Merge pull request #856 from duglin/removeCOs
remove offering from list of contributors
2021-08-17 09:10:50 -04:00
Doug Davis 45edce67ee
add ppts from spec reviews (#852)
Signed-off-by: Doug Davis <dug@us.ibm.com>
2021-08-11 09:55:58 -04:00
Doug Davis 1d6a58a038
Merge pull request #857 from jskeet/jskeet-contributor
Add Jon Skeet to contributor list
2021-08-06 10:17:04 -04:00
Jon Skeet fa43cafc40 Add Jon Skeet to contributor list
Signed-off-by: Jon Skeet <jonskeet@google.com>
2021-08-06 14:53:34 +01:00
Doug Davis 9532ba7e3b Merge pull request #853 from duglin/remove-refs
remove some company references

Signed-off-by: Doug Davis <dug@us.ibm.com>
2021-08-05 17:54:10 +00:00
Doug Davis 3d46116ddb
Merge pull request #853 from duglin/remove-refs
remove some company references
2021-08-05 13:40:30 -04:00
Doug Davis aa5eee5b1f
Merge pull request #855 from duglin/fixbuild
fix bad url
2021-08-05 13:40:04 -04:00
Doug Davis 6febe44d8d fix bad url
Signed-off-by: Doug Davis <dug@us.ibm.com>
2021-08-05 00:22:55 +00:00
Doug Davis 1dfd6358d6
Merge pull request #849 from erikerikson/bug-discovery-post-example
bug (discovery): update example response
2021-08-02 21:20:54 -04:00
Doug Davis 1097f036e1 remove some company references
Signed-off-by: Doug Davis <dug@us.ibm.com>
2021-08-03 01:19:35 +00:00
Erik Erikson c5ccc88c9b bug (discovery): update example response
Example `POST /services` and `POST /services/{id}` response must
reflect changes too.

Signed-off-by: Erik Erikson <erik.erikson@gmail.com>
2021-07-22 16:35:14 -07:00
Erik Erikson b7a5fa47c9
Clean API spec/sync OpenAPI doc (#837)
* refactor(discovery): api spec/sync openapi

Signed-off-by: Erik Erikson <erik.erikson@gmail.com>

* refactor(discovery): min filter support

Signed-off-by: Erik Erikson <erik.erikson@gmail.com>

* refactor(discovery): duglin fixes (TY)

reject unsupported filters on `GET /services`
clarify language to note latest version
fix \ to / in `application/json`
editorial fixes

Signed-off-by: Erik Erikson <erik.erikson@gmail.com>

* refactor(discovery): POST/DELETE respond w/Service

When a POST or DELETE request succeeds, the response MUST include the
Service values resulting from the update.  It MAY include additional
attributes and/or values assigned by the Discovery Endpoint

Signed-off-by: Erik Erikson <erik.erikson@gmail.com>

* refactor(discovery): filters

specify at least case specificity
allow expansion of filtering richness

Signed-off-by: Erik Erikson <erik.erikson@gmail.com>

* refactor(discovery): no soft delete mention

Signed-off-by: Erik Erikson <erik.erikson@gmail.com>

* refactor(discovery): delete ignores non-ID attrs

Signed-off-by: Erik Erikson <erik.erikson@gmail.com>

* refactor(discovery): clarify removal semantic

Signed-off-by: Erik Erikson <erik.erikson@gmail.com>
2021-07-22 18:46:12 -04:00
Doug Davis 5d65653440
Merge pull request #843 from manuelottlik/patch-1
Fix small typo.
2021-07-21 12:46:42 -04:00
Manuel Ottlik 420a235b95
fix typo 2021-07-10 13:06:04 +02:00
Doug Davis c812a2ef0e
Merge pull request #836 from deissnerk/webhook-fix
Fix for #673 - WebHook-Allowed-Origin
2021-07-05 09:30:23 -04:00
Doug Davis 3c868b646c
Merge pull request #832 from duglin/issue667
Add missing property name
2021-07-05 09:28:31 -04:00
Ahmed Abdalla Abdelrehim d4803d8ef3
Language review of the cesql expression language (#834)
* Language review of the cesql expression language

Signed-off-by: Ahmed Abdalla <aabdelre@redhat.com>

* Fixing some typos

Signed-off-by: Ahmed Abdalla <aabdelre@redhat.com>
2021-06-29 10:03:34 -04:00
Doug Davis 236d642bc4 Add missing property name
Fixes #667

Signed-off-by: Doug Davis <dug@us.ibm.com>
2021-06-29 02:26:18 +00:00
Klaus Deißner 11fbeab7de Fix for https://github.com/cloudevents/spec/issues/673
Signed-off-by: Klaus Deißner <klaus.deissner@sap.com>
2021-06-25 18:08:28 +02:00
Doug Davis 35e473e2a7
Merge pull request #833 from duglin/removeAction
remove commit linter
2021-06-18 14:13:59 -04:00
Doug Davis 7e03471f5e remove commit linter
Signed-off-by: Doug Davis <dug@us.ibm.com>
2021-06-17 21:27:50 +00:00
Doug Davis 9885f4da39
Merge pull request #831 from duglin/issue811
Fix bad link
2021-06-17 17:05:54 -04:00
Doug Davis 73b5490ac5 Fix bad link
Fixes: #811

Signed-off-by: Doug Davis <dug@us.ibm.com>
2021-06-16 20:49:30 +00:00
Francesco Guardiani d75a89cebf
[Subscriptions API] CESQL filter (#827)
* Added CESQL filter to subscription api

Signed-off-by: Francesco Guardiani <francescoguard@gmail.com>

* Swap the sentence

Signed-off-by: Francesco Guardiani <francescoguard@gmail.com>
2021-06-10 07:18:48 -04:00
Doug Davis add3a759fd
Merge pull request #826 from slinkydeveloper/fix-openapi
[Subscriptions API] Fix OpenAPI as followup of #803
2021-06-09 19:31:37 -04:00
Clemens Vasters e660bb04c7
schema registry replication (#722)
* replaces prior PR commits

Signed-off-by: clemensv <clemensv@microsoft.com>

* Clarifications based on feedback

Signed-off-by: clemensv <clemensv@microsoft.com>

Co-authored-by: clemensv <clemensv@microsoft.com>
2021-06-02 11:29:06 -04:00
slinkydeveloper 19aa07a4d7 Fix OpenAPI as followup of #803
Signed-off-by: Francesco Guardiani <francescoguard@gmail.com>
2021-06-01 10:27:25 +02:00
Francesco Guardiani f7e2cec949
[CESQL] Added suggestions sections with error handling (#818)
* Added suggestions sections, copy pasted from https://github.com/cloudevents/spec/pull/809

Signed-off-by: Francesco Guardiani <francescoguard@gmail.com>

* Fix header name

Signed-off-by: Francesco Guardiani <francescoguard@gmail.com>
2021-05-27 10:36:57 -04:00
Doug Davis 154afe54a4
Merge pull request #821 from clemensv/disco-patch-1
Adding operation ids to discovery contract
2021-05-24 14:47:33 -04:00
Francesco Guardiani cbd1a3aee9
[CESQL] Expand like test cases (#820)
* Expand test cases

Signed-off-by: Francesco Guardiani <francescoguard@gmail.com>

* Another one

Signed-off-by: Francesco Guardiani <francescoguard@gmail.com>
2021-05-24 14:47:08 -04:00
Francesco Guardiani d90d1d75a5
[Subscriptions API] Multiple dialects in the filter object (#803)
* Now filter accepts an array of expressions, and it does the and of them
Renamed filter to filters

Signed-off-by: Francesco Guardiani <francescoguard@gmail.com>

* Nit

Signed-off-by: Francesco Guardiani <francescoguard@gmail.com>

* Support empty array

Signed-off-by: Francesco Guardiani <francescoguard@gmail.com>
2021-05-24 14:46:21 -04:00
Doug Davis 765283e290
Merge pull request #813 from slinkydeveloper/issues/812/first_proposal
[Kafka spec] Remove the conflicting sentence
2021-05-03 07:23:46 -04:00
Doug Davis 9fc00efae9
Merge pull request #804 from slinkydeveloper/allow_shortcircuiting
[Subscriptions API] Remove strong constraints on filter combinators
2021-05-03 07:23:21 -04:00
Doug Davis 00e26c279e
Merge pull request #819 from Gdewilde/patch-1
Typo fix
2021-04-29 11:37:33 -04:00
clemensv 03586530a8 adding operation ids
Signed-off-by: clemensv <clemensv@microsoft.com>
2021-04-29 17:30:39 +02:00
Gertjan De Wilde a69e39c81b Typo fix
Signed-off-by: Gertjan De Wilde <info@gertjandewilde.com>
2021-04-29 16:24:57 +02:00
Francesco Guardiani d9996d470e
[CESQL] Clarify error handling (#809)
* Rewrite the definition of the evaluation

Signed-off-by: Francesco Guardiani <francescoguard@gmail.com>

* Better wording

Signed-off-by: Francesco Guardiani <francescoguard@gmail.com>

* Changed as suggested

Signed-off-by: Francesco Guardiani <francescoguard@gmail.com>
2021-04-28 21:15:10 -04:00
Doug Davis 5195f6c29e
Merge pull request #816 from jskeet/http-master
Clarify HTTP header value encoding and decoding requirements (#793)
2021-04-28 21:14:13 -04:00
Doug Davis 58eeed8719
Merge pull request #805 from lionelvillard/sub-fix-typo
fix some typos
2021-04-22 15:45:59 -04:00
Francesco Guardiani 218c8ccdef
[CESQL] TCK (#806)
* Added CESQL TCK

Signed-off-by: Francesco Guardiani <francescoguard@gmail.com>

* Added ABS test

Signed-off-by: Francesco Guardiani <francescoguard@gmail.com>

* Another test case

Signed-off-by: Francesco Guardiani <francescoguard@gmail.com>
2021-04-22 15:45:31 -04:00
Doug Davis ae6ec21d59
Merge pull request #802 from slinkydeveloper/cesql-integer-functions
[CESQL] Add ABS
2021-04-22 15:41:47 -04:00
Jon Skeet cc21bec87c Clarify HTTP header value encoding and decoding requirements (#793)
* fix: Clarify HTTP header value encoding and decoding requirements

Fixes #777

Once this is agreed, we should also document conformance tests, but
it's unclear at the moment where they should live.

Signed-off-by: Jon Skeet <jonskeet@google.com>
2021-04-22 16:35:34 +01:00
slinkydeveloper ca5bc52220 Remove the conflicting sentence, issue #812
Signed-off-by: Francesco Guardiani <francescoguard@gmail.com>
2021-04-19 10:05:46 +02:00
Jon Skeet 6eb8b9f4bf docs: expand versioning suggestions
Addresses #778

Signed-off-by: Jon Skeet <jonskeet@google.com>
2021-04-16 11:03:17 +01:00
Francesco Guardiani 4823a38509
Re-define the casting functions (#797)
feat: [CESQL] Define casting functions as accepting Any as input

Signed-off-by: Francesco Guardiani <francescoguard@gmail.com>
2021-04-15 06:25:48 -04:00
Doug Davis 4e67fb45a4
Merge pull request #801 from JemDay/jd-proto-batch
Add support for protobuf batch format
2021-04-12 07:48:14 -04:00
Francesco Guardiani 2bcfe616f9
[CESQL] Modify SUBSTRING to make it more like other SQLs (#798)
fix: CESQL - Modify SUBSTRING to make it more like other SQLs

* Make SUBSTRING behave reasonably

Signed-off-by: Francesco Guardiani <francescoguard@gmail.com>

* SUBSTRING like other SQLs

Signed-off-by: Francesco Guardiani <francescoguard@gmail.com>

* pos = 0 case

Signed-off-by: Francesco Guardiani <francescoguard@gmail.com>

* Fix SUBSTRING

Signed-off-by: Francesco Guardiani <francescoguard@gmail.com>
2021-04-12 07:47:26 -04:00
Francesco Guardiani ad67a8972a
[CESQL] Added CONCAT_WS (#796)
feat: CESQL: Add CONCAT_WS

* Concat should have a delimiter

Signed-off-by: Francesco Guardiani <francescoguard@gmail.com>

* Added CONCAT_WS

Signed-off-by: Francesco Guardiani <francescoguard@gmail.com>
2021-04-12 07:46:14 -04:00
Francesco Guardiani 27a6b036b1
[CESQL] Specify functions overloading (#795)
feat: CESQL - specify functions overloading

* Function definitions

Signed-off-by: Francesco Guardiani <francescoguard@gmail.com>

* More clarification

Signed-off-by: Francesco Guardiani <francescoguard@gmail.com>

* STRING accepts any

Signed-off-by: Francesco Guardiani <francescoguard@gmail.com>

* Finished the sentence

Signed-off-by: Francesco Guardiani <francescoguard@gmail.com>
2021-04-12 07:45:35 -04:00
Francesco Guardiani 9f36a56037
[CESQL] Clarification of the IN semantics (#792)
fix: Clarification of the IN semantics

Signed-off-by: Francesco Guardiani <francescoguard@gmail.com>

* More clarification

Signed-off-by: Francesco Guardiani <francescoguard@gmail.com>

* prettier

Signed-off-by: Francesco Guardiani <francescoguard@gmail.com>

* Apply changes

Signed-off-by: Francesco Guardiani <francescoguard@gmail.com>
2021-04-12 07:44:10 -04:00
Francesco Guardiani 35a9fb26b3
[CESQL] Add ANTLR4 grammar (#789)
feat: CESQL ANTLR4 grammar draft

* CESQL ANTLR4 grammar draft
Fixes to the spec

Signed-off-by: Francesco Guardiani <francescoguard@gmail.com>

* Wops

Signed-off-by: Francesco Guardiani <francescoguard@gmail.com>

* Correct ordering

Signed-off-by: Francesco Guardiani <francescoguard@gmail.com>

* Factor out atoms

Signed-off-by: Francesco Guardiani <francescoguard@gmail.com>

* Operator precedence and associativity fixed!

Signed-off-by: Francesco Guardiani <francescoguard@gmail.com>

* Update

Signed-off-by: Francesco Guardiani <francescoguard@gmail.com>

* Update

Signed-off-by: Francesco Guardiani <francescoguard@gmail.com>

* Suggestions

Signed-off-by: Francesco Guardiani <francescoguard@gmail.com>

* Fix operator precedence

Signed-off-by: Francesco Guardiani <francescoguard@gmail.com>

* Fix function invocation rule

Signed-off-by: Francesco Guardiani <francescoguard@gmail.com>
2021-04-12 07:41:36 -04:00
Lionel Villard 01d02e4270 fix few typos
Signed-off-by: Lionel Villard <villard@us.ibm.com>
2021-04-07 15:09:31 -04:00
slinkydeveloper 38acd076e0 Remove MUST requirements for the filter combinators
Signed-off-by: Francesco Guardiani <francescoguard@gmail.com>
2021-04-07 09:32:11 +02:00
Doug Davis 2fdf52f432
Merge pull request #791 from slinkydeveloper/return_any_value
[CESQL] Return any value
2021-04-06 18:17:55 -04:00
Day, Jeremy(jday) 9bba3ad41a feat: introduce protobuf batch format
Update prototbuf format to define how batches of protobuf
format events are represented.

Signed-off-by: Day, Jeremy(jday) <jday@paypal.com>
2021-04-06 11:27:12 -07:00
slinkydeveloper c1aca4e3b2 Add ABS
Signed-off-by: Francesco Guardiani <francescoguard@gmail.com>
2021-04-06 11:42:36 +02:00
Grant Timmerman 8ef36d3e1a
ci: conventional commits (#784)
* docs: update CONTRIBUTING with conventional commit suggestion

Signed-off-by: Grant Timmerman <timmerman+devrel@google.com>

* bad commit

Signed-off-by: Grant Timmerman <timmerman+devrel@google.com>

* add push

Signed-off-by: Grant Timmerman <timmerman+devrel@google.com>

* ci: add comment on action

Signed-off-by: Grant Timmerman <timmerman+devrel@google.com>

* docs: update contributing with note about conventional commits

Signed-off-by: Grant Timmerman <timmerman+devrel@google.com>
2021-03-29 16:10:04 -04:00
slinkydeveloper 1d63265288 Return any value
Signed-off-by: Francesco Guardiani <francescoguard@gmail.com>
2021-03-26 12:30:54 +01:00
Doug Davis c9e5508208
Merge pull request #786 from duglin/missingService
Specify what it means if a Service isn't in the GET response
2021-03-18 13:14:44 -04:00
Francesco Guardiani e226e67125
CloudEvents SQL Expression Language (#771)
* CESQL draft

Signed-off-by: Francesco Guardiani <francescoguard@gmail.com>

* Added <> and != operators

Signed-off-by: Francesco Guardiani <francescoguard@gmail.com>

* Fixed number-literal

Signed-off-by: Francesco Guardiani <francescoguard@gmail.com>

* Other suggestions

Signed-off-by: Francesco Guardiani <francescoguard@gmail.com>

* Other suggestion

Signed-off-by: Francesco Guardiani <francescoguard@gmail.com>

* Suggestions

Signed-off-by: Francesco Guardiani <francescoguard@gmail.com>

* truncated division

Signed-off-by: Francesco Guardiani <francescoguard@gmail.com>

* Type casting draft

Signed-off-by: Francesco Guardiani <francescoguard@gmail.com>

* Type casting draft

Signed-off-by: Francesco Guardiani <francescoguard@gmail.com>

* Added set type

Signed-off-by: Francesco Guardiani <francescoguard@gmail.com>

* Prettier

Signed-off-by: Francesco Guardiani <francescoguard@gmail.com>
2021-03-18 13:14:20 -04:00
Doug Davis 90a3f9f330 Specify what it means if a Service isn't in the GET response
Signed-off-by: Doug Davis <dug@us.ibm.com>
2021-03-16 21:14:50 +00:00
Doug Davis 8ab5b2ea22
Merge pull request #782 from duglin/patch
Tweak process to allow typo fixes w/minimal process
2021-03-11 14:58:22 -05:00
Doug Davis 8383b3b67f Tweak process to allow typo fixes w/minimal process
Signed-off-by: Doug Davis <dug@us.ibm.com>
2021-03-11 18:51:08 +00:00
Doug Davis 055ed6c551
Add rules for adding new SDKs (#776)
* Add rules for adding new SDKs

Signed-off-by: Doug Davis <dug@us.ibm.com>

* tweak from slink

Signed-off-by: Doug Davis <dug@us.ibm.com>
2021-03-09 21:03:32 -05:00
Francesco Guardiani 5eab4a2536
Clarify the role of partitioning extension in Kafka (#727)
* Relax a bit the partitioning extension

Signed-off-by: Francesco Guardiani <francescoguard@gmail.com>

* Mention streaming as a use case

Signed-off-by: Francesco Guardiani <francescoguard@gmail.com>

* Fix spec

Signed-off-by: Francesco Guardiani <francescoguard@gmail.com>
2021-03-03 06:41:22 -05:00
Doug Davis f97960bddd
Merge pull request #780 from pierDipi/type-sr-schwema-schema
Fix typo in schema registry spec
2021-03-02 17:27:29 -05:00
Pierangelo Di Pilato 2bc326c00d
Fix typo in schema registry spec
Signed-off-by: Pierangelo Di Pilato <pierangelodipilato@gmail.com>
2021-03-02 23:25:06 +01:00
Doug Davis 62b0958ecc
Merge pull request #775 from ebariaux/master
Fixed typo in AMQP mapping spec
2021-02-21 17:30:43 -05:00
Eric Bariaux 3962df7f75 Fixed typo
Signed-off-by: Eric Bariaux <375613+ebariaux@users.noreply.github.com>
2021-02-21 20:50:02 +01:00
Doug Davis a96b8273fc
Merge pull request #768 from duglin/deep-dive
changes from deep dive
2021-02-12 14:43:11 -05:00
Clemens Vasters 9f6cbda9e4
Subscription API Changes based on deep-dive (#766)
* Subscription API Changes based on deep-dive

Changes based on our discussions, fixes required for unambiguous code-gen, adding credential types for outbound push-delivery

- Proper operationIds
- New subscription object attributes
- Rearranged protocol settings such that they inherit from a common base
- Introduced the "basic" filters as distinct filter types
- added "all", "any", "not" filters

I've done some validation of the spec with the Swagger code generator and NSwag. For most languages, the output for the polymorphic constructs like filters and protocol settings and credentials is as expected, meaning that the protocol settings and credentials form a class hierarchy and the generated filter objects can form a graph.

Signed-off-by: clemensv <clemensv@microsoft.com>

* modified filter structure

Signed-off-by: clemensv <clemensv@microsoft.com>

* Eliminated extra filter class

Signed-off-by: clemensv <clemensv@microsoft.com>

* Filter references

Signed-off-by: clemensv <clemensv@microsoft.com>

* Bugfix in create

Signed-off-by: clemensv <clemensv@microsoft.com>

* corrections per feedback

Signed-off-by: clemensv <clemensv@microsoft.com>

Co-authored-by: clemensv <clemensv@microsoft.com>
2021-02-12 14:42:24 -05:00
Doug Davis 3e0489069f changes from deep dive
Signed-off-by: Doug Davis <dug@us.ibm.com>
2021-02-08 00:46:29 +00:00
Doug Davis f4c1b5f03b
Merge pull request #765 from duglin/typos
add missing property
2021-02-06 10:11:58 -05:00
Doug Davis 30b1b9a80f
Merge pull request #763 from duglin/i741
Alternative to #741 - dealing with errors
2021-02-05 16:39:48 -05:00
Doug Davis 48056e22ae add missing property
Signed-off-by: Doug Davis <dug@us.ibm.com>
2021-02-04 15:47:15 +00:00
Manuel Stein 163c499860
Subscription OAS use of required and anyOf (#761)
* fix field id /subscriptions/{id} operation

path fields must have required=true according to OAS 3.0.3 and can not be omitted

Signed-off-by: Manuel Stein <manuel.stein@nokia-bell-labs.com>

* fix: request body is required in create and update

according to subscription spec (markdown), the content body of the
POST action to create a subscription is required. Also fixing required
content body in the PUT action that updates a subscription.

Signed-off-by: Manuel Stein <manuel.stein@nokia-bell-labs.com>

* fix protocolsettings parameter

Currently uses anyOf but in a parameter holding a single object, which
can hold only oneOf the provided schema objects. It's correct that only
a single protocol setting can be chosen per subscription.

Signed-off-by: Manuel Stein <manuel.stein@nokia-bell-labs.com>

* correcting protocolsettings

reverting oneOf to anyOf to allow ambiguously classifiable protocolsettings maps to be valid content

Signed-off-by: Manuel Stein <manuel.stein@nokia-bell-labs.com>
2021-01-28 15:37:18 -05:00
Manuel Stein 778874c795
Discovery fixes (#760)
* fix specversions

Signed-off-by: Manuel Stein <manuel.stein@nokia-bell-labs.com>

* fix subscriptiondialect type specification

Signed-off-by: Manuel Stein <manuel.stein@nokia-bell-labs.com>

* add missing id, epoch and subscriptiondialect

Signed-off-by: Manuel Stein <manuel.stein@nokia-bell-labs.com>

* separate service attributes from event type attributes

renaming generic "type" object schema to "eventtype" for clarity

Signed-off-by: Manuel Stein <manuel.stein@nokia-bell-labs.com>

* align events attribute description

Signed-off-by: Manuel Stein <manuel.stein@nokia-bell-labs.com>
2021-01-28 15:36:58 -05:00
Doug Davis e48ee90d44 Alternative to #741 - dealing with errors
fixes: #741

And mention the adpaters

Signed-off-by: Doug Davis <dug@us.ibm.com>
2021-01-26 20:40:47 +00:00
Doug Davis 6e40dd92f1
Merge pull request #752 from duglin/clarifyProps
[subscriptions] clarify our various subscription properties
2021-01-23 07:41:11 -05:00
Doug Davis cedf688f9f
Merge pull request #757 from bsnyder/patch-1
Update http-webhook.md
2021-01-23 07:40:47 -05:00
Bruce Snyder 09f6157fbe Update http-webhook.md
Updated the URL for the original and now missing blog post on webhooks from progrium.com. The new URL now points to a snapshot of the old blog post at archive.org.

Signed-off-by: Bruce Snyder <bruce.snyder@gmail.com>
2021-01-20 10:27:44 -07:00
Doug Davis 1da1329fd8
Merge pull request #749 from duglin/postrel
prep for post-v1.0.1
2021-01-12 09:23:27 -05:00
Doug Davis 63f337a6a8 clarify our various subscription properties
Signed-off-by: Doug Davis <dug@us.ibm.com>
2021-01-11 20:02:32 +00:00
Doug Davis 09ef41776e
Merge pull request #754 from duglin/fixhred
fix href checking
2021-01-11 15:01:26 -05:00
Doug Davis 1ea5aede25 fix href checking
Signed-off-by: Doug Davis <dug@us.ibm.com>
2021-01-11 16:57:38 +00:00
Doug Davis 41559e48aa
Merge pull request #747 from cgfalcon/schemaregistry_version_typo
Fix version URI typo for the 3.4.2 section
2020-12-12 15:15:36 -05:00
Doug Davis 455f2ef28d
Merge pull request #745 from c-pius/int-definition-clarification
clarified integer to optionally include a sign
2020-12-12 15:15:14 -05:00
Doug Davis 4a4aa2b5d0 prep for post-v1.0.1
Signed-off-by: Doug Davis <dug@us.ibm.com>
2020-12-12 19:41:59 +00:00
Doug Davis c856ea11fc
Merge pull request #744 from duglin/v1.0.1
v1.0.1
2020-12-12 14:23:46 -05:00
chugang.cg 9de800fedf Fix version URI typo for the 3.4.2 section
Signed-off-by: chugang.cg <chugang.cg@alibaba-inc.com>
2020-12-10 17:34:52 +08:00
Christoph Schwaegerl f9066b3f6e clarified integer to optionally include a sign
Signed-off-by: Christoph Schwaegerl <c.schwaegerl@sap.com>
2020-12-09 18:09:42 +01:00
Doug Davis 63f9aebfb8 v1.0.1
Signed-off-by: Doug Davis <dug@us.ibm.com>
2020-12-07 00:32:55 +00:00
Doug Davis ec36d8b70b
Merge pull request #743 from duglin/misc-fixes
Misc fixes to tool and @dazuma review
2020-12-05 07:32:24 -05:00
Doug Davis 223f9960be Misc fixes to tool and @dazuma review
Just minor typos that @dazmua found in #737 that I missed.
See if sleeping help the curl in the tool.

Signed-off-by: Doug Davis <dug@us.ibm.com>
2020-12-05 12:07:35 +00:00
Doug Davis 63c6a0a672
typos/cleanup in prep for v1.0.1 (#737)
* typos/cleanup

Signed-off-by: Doug Davis <dug@us.ibm.com>

* more rfc

Signed-off-by: Doug Davis <dug@us.ibm.com>
2020-12-04 15:27:52 -05:00
Doug Davis d08fea27a9
Merge pull request #742 from duglin/actions
try actions
2020-12-04 11:51:46 -05:00
Doug Davis f8d54e3c79 try actions
Signed-off-by: Doug Davis <dug@us.ibm.com>
2020-12-04 16:22:36 +00:00
Lance Ball 4661a69744
docs: typos and wordsmithing for 1.0.1 (#733)
* docs: typos and wordsmithing for 1.1

This commit addresses a few typos and does a little wordsmithing on some
of the docs and specs meant to land in the 1.1 release.

In the proprietary-specs.md document, I used MUST in a couple of places.
Not sure if this is appropriate for that doc.

Signed-off-by: Lance Ball <lball@redhat.com>

* fixup: incorporate PR feedback

Signed-off-by: Lance Ball <lball@redhat.com>

* fixup: incorporate PR feedback

Signed-off-by: Lance Ball <lball@redhat.com>
2020-12-03 17:41:02 -05:00
Doug Davis ffd3f74723
Merge pull request #729 from duglin/rc-releases
talk about rc releases
2020-12-03 13:25:34 -05:00
Carlos O'Ryan 78b08d303f
fix: incorrect name for reference link (#736)
Signed-off-by: Carlos O'Ryan <coryan@google.com>
2020-12-02 19:57:00 -05:00
Scott Nichols 337c58e330
Add Knative Eventing, VEBA to open source links. Remove Dispatch. (#740)
* Adding Knative Eventing for open source links

Signed-off-by: Scott Nichols <snichols@vmware.com>

* Adding VEBA, removing Dispatch

Signed-off-by: Scott Nichols <snichols@vmware.com>

* lint

Signed-off-by: Scott Nichols <snichols@vmware.com>
2020-12-01 20:24:58 -05:00
Doug Davis 5cadd89766
Merge pull request #728 from duglin/fixurl
new url for vmware dispatch
2020-11-30 07:05:53 -05:00
Doug Davis 927c6e89c3
Merge pull request #734 from pmorie/typo
Fix minor typo in README
2020-11-24 08:11:15 -05:00
Paul Morie 9b20a54d4b Fix minor typo in README
Signed-off-by: Paul Morie <pmorie@redhat.com>
2020-11-23 14:59:58 -05:00
Doug Davis 853646cc58
Merge pull request #732 from lance/add-lance-contributor
docs: add lance to community/contributors.md
2020-11-20 11:44:13 -05:00
Lance Ball d9105b8138
docs: add lance to community/contributors.md
Signed-off-by: Lance Ball <lball@redhat.com>
2020-11-20 09:08:09 -05:00
Anish Joshi 0a0535f1bc
[Primer] Adding a Non-Goal w.r.t Security (#712)
* [Primer] Adding a Non-Goal w.r.t Security

Signed-off-by: Anish Joshi <anish.joshi@sap.com>

* Update primer.md

Signed-off-by: Anish Joshi <anish.joshi@sap.com>
2020-11-19 14:49:57 -05:00
Doug Davis 83667430bc talk about rc releases
Signed-off-by: Doug Davis <dug@us.ibm.com>
2020-11-19 15:40:36 +00:00
Doug Davis 94b6693b77 new url for vmware dispatch
Signed-off-by: Doug Davis <dug@us.ibm.com>
2020-11-19 14:32:09 +00:00
Doug Davis 5c62a55f1f
Merge pull request #725 from slinkydeveloper/patch-1
Update SDK.md
2020-11-13 10:08:13 -05:00
Francesco Guardiani 75b1815f73 Update SDK.md
Signed-off-by: Francesco Guardiani <francescoguard@gmail.com>
2020-11-13 10:42:38 +01:00
Doug Davis b4a4e769eb
Merge pull request #723 from duhenglucky/add_contributor
Added Heng to contributors
2020-11-06 11:04:06 -05:00
Doug Davis 46818a568d
Merge pull request #718 from duglin/sub1
Minor tweaks in prep for interop
2020-11-06 11:03:07 -05:00
Remi Cattiau 3030aba788
refactor: change subscription API to resource based (#720)
* refactor: change subscription API to resource based (Close #696)

Signed-off-by: Remi Cattiau <remi@cattiau.com>

* fix: remove incorrect http proxy

Signed-off-by: Remi Cattiau <remi@cattiau.com>
2020-11-06 11:02:29 -05:00
Doug Davis f4027140bd
Merge pull request #721 from JemDay/jd-ws-proto
Add protobuf format as a sub-protocol
2020-11-06 11:01:56 -05:00
Doug Davis c832c9f4b4 Minor tweaks in prep for interop
- fixed psuedo schema in discovery - config has 'types' not 'values
- typos
- clarify that URL points to the DE entry and not the actual service
- show sample JSON serializaton of a Subscription
- outline for HTTP REST API
- move "dialect" under "filter"
- s/filter/filters/
- make "dialect" an URI-reference
- add "subscriptiondialects" to the DE spec

Signed-off-by: Doug Davis <dug@us.ibm.com>
2020-11-06 15:56:21 +00:00
翊名 ae69929d0c (doc) add contributor
Signed-off-by: 翊名 <duheng.dh@alibaba-inc.com>
2020-11-06 10:39:45 +08:00
Doug Davis 543f13da5c
Merge pull request #715 from manuelstein/fix_discovery_typo
discovery: fix dataschema description
2020-11-02 11:58:46 -05:00
Doug Davis e7ade143da
Merge pull request #717 from duglin/fixURL
tweak url description
2020-11-02 11:58:28 -05:00
Day, Jeremy(jday) ad5f142d06 Add protobuf format as a sub-protocol
Signed-off-by: Day, Jeremy(jday) <jday@paypal.com>
2020-10-29 09:45:21 -07:00
Doug Davis bb3746a559 tweak url description
Signed-off-by: Doug Davis <dug@us.ibm.com>
2020-10-25 10:00:37 +00:00
Scott Nichols 5379e8e285
Allow JSON values to be null, meaning unset. (#713)
* allow values to be null

Signed-off-by: Scott Nichols <snichols@vmware.com>

* fix typo, add minlength

Signed-off-by: Scott Nichols <snichols@vmware.com>
2020-10-22 14:56:47 -04:00
Doug Davis 62c8324460
Merge pull request #714 from loopingz/typo
chore: fix typo
2020-10-22 13:42:25 -04:00
Manuel Stein 5afd40b30d fix dataschema description
The link to dataschema in spec is named datacontenttype (copy'n'paste error)

Signed-off-by: Manuel Stein <manuel.stein@nokia-bell-labs.com>
2020-10-22 18:51:57 +02:00
Remi Cattiau f8ae13db6f
chore: fix typo
Signed-off-by: Remi Cattiau <remi@cattiau.com>
2020-10-21 10:23:33 -07:00
Francesco Guardiani 6ffe844742
WebSockets protocol binding (#697)
* Draft of WebSockets protocol binding

Signed-off-by: Francesco Guardiani <francescoguard@gmail.com>

* Fix

Signed-off-by: Francesco Guardiani <francescoguard@gmail.com>

* Wrong wording

Signed-off-by: Francesco Guardiani <francescoguard@gmail.com>

* Renamed subprotocols
Specified frame type

Signed-off-by: Francesco Guardiani <francescoguard@gmail.com>

* Specify that json batch format is not supported

Signed-off-by: Francesco Guardiani <francescoguard@gmail.com>

* Fix conflicts

Signed-off-by: Francesco Guardiani <francescoguard@gmail.com>
2020-10-08 13:59:20 -04:00
Doug Davis 071b1e854a
[Discovery] import and bulk POST support (#707)
* [Discovery] import and bulk POST support

Signed-off-by: Doug Davis <dug@us.ibm.com>

* add bit about uniqueness

Signed-off-by: Doug Davis <dug@us.ibm.com>

* epoch processing

Signed-off-by: Doug Davis <dug@us.ibm.com>

* fix typo

Signed-off-by: Doug Davis <dug@us.ibm.com>
2020-10-08 13:57:24 -04:00
Doug Davis 4e618140a0
Merge pull request #709 from grant/patch-2
docs: do not use code ticks for data that may actually be data_base64
2020-10-07 09:00:49 -04:00
Grant Timmerman 245ee48817 docs: do not use code ticks for data that may actually be data_base64
Signed-off-by: Grant Timmerman <timmerman+devrel@google.com>
2020-09-30 17:22:56 -05:00
Jem Day 6cbb44a5b0
Re-Introducing Protocol Buffer Representation (#626)
* Re-Introducing Protocol Buffer Representation

Signed-off-by: Day, Jeremy(jday) <jday@paypal.com>

* required and optional attributes are explicitly represented

Signed-off-by: Day, Jeremy(jday) <jday@paypal.com>

* tweaks and examples to address review comments

Signed-off-by: Day, Jeremy(jday) <jday@paypal.com>

* Updated following dicussion during 6/28 weekly meeting.

- Only required attributes are formally represented.
- Optional & Extension attributes are carried in the map.
- Documentation & Examples changed as appropiate.
- Added version marker to proto & java package.

Signed-off-by: Day, Jeremy(jday) <jday@paypal.com>

* tweaks

Signed-off-by: Day, Jeremy(jday) <jday@paypal.com>

* Include spec reference

Signed-off-by: Day, Jeremy(jday) <jday@paypal.com>

* Changed media-type designation as-per weekly call discussion

Signed-off-by: Day, Jeremy(jday) <jday@paypal.com>

* Fixed links to work before merging to master

Signed-off-by: Day, Jeremy(jday) <jday@paypal.com>

* Really fixing the links this time

Signed-off-by: Day, Jeremy(jday) <jday@paypal.com>

* DO NOT MERGE: data representation proposal, attribute type naming change

Signed-off-by: Day, Jeremy(jday) <jday@paypal.com>

* Moved back to one_of representation for Data, updated docs

Signed-off-by: Day, Jeremy(jday) <jday@paypal.com>

* Minor tweaks based on review commentary

Signed-off-by: Day, Jeremy(jday) <jday@paypal.com>

* - Modified proto map property to increase raadability of generated code.
- Clarified usage of `dataschema` CloudEvent attribute.
- Updated examples.

Signed-off-by: Day, Jeremy(jday) <jday@paypal.com>

* Changes based on review comments

Signed-off-by: Day, Jeremy(jday) <jday@paypal.com>

* Added language specific package definitions

Signed-off-by: Day, Jeremy(jday) <jday@paypal.com>

* - Removed c# directive, can be added back in a later PR.
- Added Java directive for seperate fies.
- re-pluralized 'attributes' to follow proto convention.

Signed-off-by: Day, Jeremy(jday) <jday@paypal.com>

* Tidied 'one-of' names

Signed-off-by: Day, Jeremy(jday) <jday@paypal.com>
2020-09-30 11:05:35 -04:00
Doug Davis eb53fde789
Merge pull request #708 from duglin/zoom
Update zoom link with password
2020-09-26 15:49:50 -04:00
Doug Davis 28a69dc145 Update zoom link with password
Signed-off-by: Doug Davis <dug@us.ibm.com>
2020-09-26 19:27:10 +00:00
Doug Davis 75312eab69
Add a version/timestamp attribute (#691)
* Add a version/timestamp attribute

Per Scott's suggestion, this adds a new attribute that can be used to
know when an entry has been updated. It can be used as an e-tag type of
thing or to know when, during an import, the entity being imported is
older than what the discovery endpoint already has.

I wasn't sure if a counter or a timestamp would be better, so I added
both so people can see how both look.

I'm leaning more towards a timestamp since it give a bit more information.

Signed-off-by: Doug Davis <dug@us.ibm.com>

* minor tweaks

Signed-off-by: Doug Davis <dug@us.ibm.com>

* use epoch

Signed-off-by: Doug Davis <dug@us.ibm.com>

* remove management text

Signed-off-by: Doug Davis <dug@us.ibm.com>
2020-09-24 13:14:46 -04:00
Doug Davis a50819140c
Add more clarity around our REST APIs (#690)
* Add more clarity around our REST APIs

Signed-off-by: Doug Davis <dug@us.ibm.com>

* nits

Signed-off-by: Doug Davis <dug@us.ibm.com>

* add clarifying text

Signed-off-by: Doug Davis <dug@us.ibm.com>

* typo

Signed-off-by: Doug Davis <dug@us.ibm.com>

* split apis into 2

Signed-off-by: Doug Davis <dug@us.ibm.com>

* add epoch stuff

Signed-off-by: Doug Davis <dug@us.ibm.com>

* DE updates epoch

Signed-off-by: Doug Davis <dug@us.ibm.com>
2020-09-24 13:14:25 -04:00
Doug Davis ef035ae2a5
Merge pull request #695 from n3wscott/fix-sub-json
[Subscription] drop extra comma in json example, lint
2020-09-15 21:13:54 -04:00
Scott Nichols dfdd4ad980 drop extra comma in json example, lint
Signed-off-by: Scott Nichols <snichols@vmware.com>
2020-09-11 08:44:38 -07:00
Scott Nichols a605c6b21a
Rename services types[].type to types[].name; Drop /types endpoint (#689)
* Rename services types[].type to types[].name; Drop /types endpoint

Signed-off-by: Scott Nichols <snichols@vmware.com>

* rename types to events, and unrename type from name

Signed-off-by: Scott Nichols <snichols@vmware.com>

* spell check

Signed-off-by: Scott Nichols <snichols@vmware.com>
2020-08-27 13:19:03 -04:00
Scott Nichols 8e0450cc9b
[Discovery] Add missing protocols to example Service. (#683)
* Add required protocols to example service

Signed-off-by: Scott Nichols <snichols@vmware.com>

* ran lint

Signed-off-by: Scott Nichols <snichols@vmware.com>
2020-08-18 21:23:51 -04:00
Doug Davis bafcee7767
Merge pull request #668 from duglin/pagination
First pass at pagination
2020-08-18 21:22:00 -04:00
Francesco Guardiani 34a1949bf3
New sdk maintainers rules (#665)
* New maintainers rules

Signed-off-by: Francesco Guardiani <francescoguard@gmail.com>

* fmt

Signed-off-by: Francesco Guardiani <francescoguard@gmail.com>

* Grammar

Signed-off-by: Francesco Guardiani <francescoguard@gmail.com>

* Made the requirements a little bit more vague

Signed-off-by: Francesco Guardiani <francescoguard@gmail.com>

* Wrapped to 80 lines

Signed-off-by: Francesco Guardiani <francescoguard@gmail.com>
2020-08-13 12:28:33 -04:00
Christoph Neijenhuis edab0616e6
Clarify difference between message mode and HTTP content mode (#672)
* Clarify difference between message mode and HTTP content mode

Signed-off-by: Christoph Neijenhuis <christoph.neijenhuis@commercetools.de>

* Remove unnecessary lines

Signed-off-by: Christoph Neijenhuis <christoph.neijenhuis@commercetools.de>
2020-08-11 07:45:08 -04:00
Doug Davis d3da499cf5
[Discovery] Add an ID field that can not change (#664)
* Add an ID field that can not change

Signed-off-by: Doug Davis <dug@us.ibm.com>

* more text

Signed-off-by: Doug Davis <dug@us.ibm.com>

* more updates

Signed-off-by: Doug Davis <dug@us.ibm.com>

* use 'name' instead of 'matching'

Signed-off-by: Doug Davis <dug@us.ibm.com>
2020-08-06 14:27:04 -04:00
Doug Davis 951e589204
Merge pull request #681 from loopingz/master
[Discovery] loosen permissions requirement on resources (#680)
2020-08-06 14:26:31 -04:00
Doug Davis 8aa04e3379 First pass at pagination
Wording change and tweak the expires stuff

Signed-off-by: Doug Davis <dug@us.ibm.com>
2020-08-06 18:17:29 +00:00
Scott Nichols e90ccf7e91
Fix minor markdown and text issues for Discovery (#677)
* Fix minor markdown and text issues for Discovery

Signed-off-by: Scott Nichols <snichols@vmware.com>

* fix rando url

Signed-off-by: Scott Nichols <snichols@vmware.com>

* revert the beta.4 change

Signed-off-by: Scott Nichols <snichols@vmware.com>
2020-08-04 14:06:00 -04:00
Doug Davis e84a449a9f
Merge pull request #675 from deissnerk/dsprimer
Adding use cases for producers and intermediaries
2020-07-30 13:38:17 -04:00
Remi Cattiau ea4434a245
[Discovery] loosen permissions requirement on resources (#680)
Signed-off-by: Remi Cattiau <remi@cattiau.com>
2020-07-30 08:27:48 -07:00
Thomas Weingartner 78958e4ab6
[Discovery] Add ce_discovery.yaml (#671)
* Add ce_discovery.yaml

Signed-off-by: Thomas Weingartner <thomas.weingartner@gmx.ch>

* Removed id from ce_discovery.yaml

Signed-off-by: Thomas Weingartner <thomas.weingartner@gmx.ch>
2020-07-29 16:34:35 -04:00
Klaus Deissner fc402005bf Adding use cases for producers and intermediaries
Signed-off-by: Klaus Deissner <klaus.deissner@sap.com>
2020-07-22 19:07:29 +02:00
Doug Davis 496725ca63
Merge pull request #666 from duglin/missingSDKs
add missing sdks to readme
2020-07-17 13:36:22 -04:00
Doug Davis 2ccfda61fd
Merge pull request #670 from duglin/issue669
typos
2020-07-14 07:23:44 -04:00
Doug Davis 5da307cbd6 typos
Signed-off-by: Doug Davis <dug@us.ibm.com>
2020-07-14 01:04:26 +00:00
Doug Davis 896fbab3a5 add missing sdks to readme
Signed-off-by: Doug Davis <dug@us.ibm.com>
2020-07-11 17:25:18 +00:00
Doug Davis ba6fab3103
Merge pull request #663 from duglin/moveSDKgov
move sdk governance and cleanup
2020-07-09 14:17:15 -04:00
Remi Cattiau 9f0d048935
typo and return type mismatch on /types endpoint for discovery spec (#659)
* fix: typo

Signed-off-by: Remi Cattiau <remi@cattiau.com>

* fix: Types return seems to be a map not an array

Signed-off-by: Remi Cattiau <remi@cattiau.com>
2020-07-09 14:16:32 -04:00
Doug Davis b7ff742806
Merge pull request #658 from JemDay/jd-issue647
Bring 'datadef' definition into line with specification
2020-07-09 14:16:08 -04:00
Doug Davis 94ffc3527f move sdk governance and cleanup
Signed-off-by: Doug Davis <dug@us.ibm.com>
2020-07-07 20:14:39 +00:00
Doug Davis 4c549cb14d
Merge pull request #656 from duglin/CoC
Add CoC and move some governance docs into 'community'
2020-07-02 14:21:44 -04:00
Doug Davis 318910117a
Merge pull request #655 from duglin/issue654
fix some types
2020-07-02 14:21:17 -04:00
Doug Davis fc5b4e08b7
Merge pull request #652 from tomkerkhove/registry-schema-validation
Schema Registry - Change version to comply with OpenAPI spec
2020-07-02 14:20:57 -04:00
Francesco Guardiani 4ea37b6449
SDK governance draft (#649)
* Draft of SDK governance

Signed-off-by: Francesco Guardiani <francescoguard@gmail.com>

* Nit on security patches

Signed-off-by: Francesco Guardiani <francescoguard@gmail.com>

* Formatted

Signed-off-by: Francesco Guardiani <francescoguard@gmail.com>

* CI

Signed-off-by: Francesco Guardiani <francescoguard@gmail.com>

* First pass

Signed-off-by: Francesco Guardiani <francescoguard@gmail.com>

* Update and refactored

Signed-off-by: Francesco Guardiani <francescoguard@gmail.com>

* Removed criteria about commits on master

Signed-off-by: Francesco Guardiani <francescoguard@gmail.com>
2020-07-02 14:20:34 -04:00
Lance Ball da1bbd29b0
docs: add common processes for SDK maintainers and contributors (#648)
* docs: add common processes for SDK maintainers and contributors

Signed-off-by: Lance Ball <lball@redhat.com>

* fixup: correct anchor links in sdk/pr_guidelines.md

Signed-off-by: Lance Ball <lball@redhat.com>

* fixup: store docs under governance instead of sdk folder

Signed-off-by: Lance Ball <lball@redhat.com>

* fixup: store docs under community

Signed-off-by: Lance Ball <lball@redhat.com>
2020-07-02 14:19:58 -04:00
Bernd Rücker 44623acfb2
Add blog post around understanding Cloud Events interactions (#651)
* Add blog post where cloud events are used

Signed-off-by: Bernd Rücker <bernd.ruecker@camunda.com>

* fixed typo in link

Signed-off-by: Bernd Rücker <bernd.ruecker@camunda.com>
2020-07-01 23:48:09 -04:00
Day, Jeremy(jday) 5fed67b333 Bring 'datadef' definition into line with specification
Signed-off-by: Day, Jeremy(jday) <jday@paypal.com>
2020-07-01 14:21:38 -07:00
Doug Davis 37b6d63f9e Add CoC and move some governance docs into 'community'
And some misc clean-up

Signed-off-by: Doug Davis <dug@us.ibm.com>
2020-06-28 21:00:17 +00:00
Doug Davis b4f9c3fa87 fix some types
Closes #654

- Uses past tense
- Update to match the github adapter doc

Signed-off-by: Doug Davis <dug@us.ibm.com>
2020-06-28 20:16:49 +00:00
Klaus Deißner 1aae2d48cd
Add property "sourcetemplate" to eventprovider/service (#636)
* Add property "sourcetemplate" to entity eventprovider/service

Signed-off-by: Klaus Deissner <klaus.deissner@sap.com>

* Added restriction to Level 1 templates
Made sourcetemplate a child of type

Signed-off-by: Klaus Deissner <klaus.deissner@sap.com>
2020-06-26 10:22:54 -04:00
Tom Kerkhove b1b7e4af68 Schema Registry - Change version to comply with OpenAPI spec
Signed-off-by: Tom Kerkhove <kerkhove.tom@gmail.com>
2020-06-26 07:41:11 +02:00
salaboy 449c8c7b49
Adding Demo for Cloud Events Orchestration (#646)
* Adding Demo for Cloud Events Orchestration

Signed-off-by: salaboy <salaboy@gmail.com>

* Update Cloud Events Orchestration Section

Signed-off-by: salaboy <salaboy@gmail.com>

* make it shorter

Signed-off-by: salaboy <salaboy@gmail.com>
2020-06-21 15:26:04 -04:00
Clemens Vasters b2fadf791a
Schema Registry Proposal (#625)
* Registry baseline

Signed-off-by: clemensv <clemensv@microsoft.com>

* first pass incorporating feedback in the narrative

Signed-off-by: clemensv <clemensv@microsoft.com>

* Inc. feedback and adding non-normative desc HTTP

Signed-off-by: Clemens Vasters <clemensv@microsoft.com>

Co-authored-by: clemensv <clemensv@microsoft.com>
2020-06-21 15:25:46 -04:00
Doug Davis 8bef69818d
Discovery Revamp (#642)
* Revamp of discovery

- Restructued things so that it didn't feel like we were repeating the
  definition of the attributes. For example, we now just define Service
  and its attributes once and then simply point back to that, and its
  serialization, from the Query section
- got rid of "provider" in the model. Technically, that's an impl detail
  and consumers should not care what generated the CE - it's things like
  the source and service that they'll care about (or even know about)
- introduced the term "Discovery Endpoint" as the "thing" that implements
  the spec
- Added a JSON encoding definition
- Modified the query stuff so that all data is returned in one shot.
  I believe the current spec implied that people would need to do one
  query to get the list of Types of interest and then another one to pull
  back the details of each Service. I think it's more natural to do it all
  in one. If this is too large then we should consider query flags to
  indicate if people want the deep result-set or an shallow result-set.
- I made Service and Type have a non-human friendly main keys since names
  will change over time but these keys need to be static and therefore
  machine usable. `description` can be used for human readable names.

Probably other minor things that I can't remember. I basically just
went from top to bottom touching stuff that felt odd as I was reading
but I think it's closer now to being something that someone could
sit down and implement w/o too many gaps.

Signed-off-by: Doug Davis <dug@us.ibm.com>

* add 'name' and 'url'

Signed-off-by: Doug Davis <dug@us.ibm.com>

* typos

Signed-off-by: Doug Davis <dug@us.ibm.com>

* klaus's review

Signed-off-by: Doug Davis <dug@us.ibm.com>
2020-06-21 15:24:18 -04:00
Klaus Deißner bf71de532c
Clarified MUST requirement for JSON format (#644)
* Clarified that JSON format is a MUST, if structured content mode is supported.

Signed-off-by: Klaus Deissner <klaus.deissner@sap.com>

* Added AMQP,Kafka and MQTT

Signed-off-by: Klaus Deissner <klaus.deissner@sap.com>
2020-06-21 15:23:55 -04:00
Doug Davis 5ea5b40412
Merge pull request #641 from duglin/sd-primer
Draft of DS-Primer
2020-06-13 14:11:22 -04:00
Doug Davis 71e2de571f Draft of DS-Primer
Direct copy from: https://gist.github.com/duglin/5920f706ee0ce608b0be1fa2e3669ce5

I took the liberty of includeing Klaus' sourcetemplate stuff since it
seems like people are ok with and I wanted to show what it would look like
when in use.

Signed-off-by: Doug Davis <dug@us.ibm.com>
2020-06-09 17:48:24 +00:00
Doug Davis 53fb27ac7d
Merge pull request #634 from duglin/removeProvider
s/provider/service/
2020-05-28 20:45:50 -04:00
Doug Davis cae8f0bf73
Merge pull request #632 from duglin/issue621
Add pointers to CE terms in CE spec
2020-05-28 20:45:29 -04:00
Doug Davis 2cf3c810ae
Merge pull request #631 from duglin/issue622
Remove unused 'subscriber'
2020-05-28 20:45:09 -04:00
Doug Davis ed29182429 Add pointers to CE terms in CE spec
Closes #621

And moved a few terms to order them in the order in which the event flows,
starting with the Service.  If people want alphabetical, I'd be ok with that
too.

Signed-off-by: Doug Davis <dug@us.ibm.com>
2020-05-28 02:16:52 +00:00
Doug Davis 4289607e51 s/provider/service/
Completes the PR we approved last week

Signed-off-by: Doug Davis <dug@us.ibm.com>
2020-05-26 03:03:11 +00:00
Doug Davis 25b65abcf5 Remove unused 'subscriber'
Signed-off-by: Doug Davis <dug@us.ibm.com>
2020-05-26 02:22:34 +00:00
Doug Davis 10db96941f
Changes to data model (#624)
* pseudo schema

Signed-off-by: Doug Davis <dug@us.ibm.com>

* sourceclass->service

Signed-off-by: Doug Davis <dug@us.ibm.com>

* remove query stuff

Signed-off-by: Doug Davis <dug@us.ibm.com>
2020-05-25 13:13:49 -04:00
Doug Davis 1085aeee96
Merge pull request #627 from duglin/wip
name HEAD files as *wip
2020-05-23 20:04:13 -04:00
Doug Davis e9f516548f name HEAD as *wip
Signed-off-by: Doug Davis <dug@us.ibm.com>
2020-05-22 00:08:06 +00:00
Doug Davis c7455606d5
Merge pull request #616 from fabiojose/master
Closes #615
2020-05-20 21:13:10 -04:00
Doug Davis b0f8d08b3f
Merge pull request #608 from tweing/patch-1
Fix invalid example in subscriptions-api-openapi.yaml
2020-05-09 18:40:46 -04:00
Francesco Guardiani ec8f1d740a
Reworked Distributed Tracing Extension (#607)
* Reworked Distributed Tracing Extension

Signed-off-by: Francesco Guardiani <francescoguard@gmail.com>

* suggestions

Signed-off-by: Francesco Guardiani <francescoguard@gmail.com>

* suggestions

Signed-off-by: Francesco Guardiani <francescoguard@gmail.com>

* Grammar

Signed-off-by: Francesco Guardiani <francescoguard@gmail.com>
2020-05-09 18:37:46 -04:00
Fabio José e81d8ab4bc Closes #615
Change CloudEvent to AvroCloudEvent

Signed-off-by: Fabio José <fabiojose@gmail.com>
2020-05-04 17:19:50 -03:00
Doug Davis 541e790ef8
Merge pull request #605 from duglin/fixhref
Fix some hrefs and rfc2119 wording
2020-04-30 23:19:04 -04:00
Doug Davis 39b3d43e78
Merge pull request #611 from bsideup/patch-1
Replace "conical" with "canonical" in "SDK Requirements"
2020-04-29 19:44:59 -04:00
Sergei Egorov f465864646 Replace "conical" with "canonical" in "SDK Requirements"
Signed-off-by: Sergei Egorov <bsideup@gmail.com>
2020-04-29 20:29:08 +02:00
Thomas Weingartner b42888fcb9
Update subscriptions-api-openapi.yaml
Remove `example: null` to enable it in Azure API Management import.
2020-04-29 13:01:24 +02:00
Doug Davis 8a2b031c50 Fix some hrefs and rfc2119 wording
Signed-off-by: Doug Davis <dug@us.ibm.com>
2020-04-25 15:58:31 +00:00
Clemens Vasters b66172b657
Kafka clarifications (#599)
* Draft for subscription API

Signed-off-by: clemensv <clemensv@microsoft.com>

* OpenAPI spec draft. Formatting changes,

Signed-off-by: clemensv <clemensv@microsoft.com>

* Update subscriptions-api.md

Co-Authored-By: Manuel Stein <manuelstein@users.noreply.github.com>
Signed-off-by: clemensv <clemensv@microsoft.com>

* Update subscriptions-api.md

Co-Authored-By: Manuel Stein <manuelstein@users.noreply.github.com>
Signed-off-by: clemensv <clemensv@microsoft.com>

* updates per feedback

Signed-off-by: clemensv <clemensv@microsoft.com>

* Kafka binding clarifications

Signed-off-by: clemensv <clemensv@microsoft.com>

Co-authored-by: clemensv <clemensv@microsoft.com>
Co-authored-by: Manuel Stein <manuelstein@users.noreply.github.com>
2020-04-21 10:35:58 -04:00
Mike Helmick 091869a4bb
update discovery API with full REST paths and types. (#597)
* update discovery API with full REST paths and types.

Signed-off-by: Mike Helmick <helmick@google.com>

* fix typo

Signed-off-by: Mike Helmick <helmick@google.com>

* address review comments.

Signed-off-by: Mike Helmick <helmick@google.com>

* a few cleanups on wording

Signed-off-by: Mike Helmick <helmick@google.com>
2020-04-21 10:35:26 -04:00
Vinay Venkataraghavan 8f1a4ff256
Minor updates to Cloud Events Primer (#600)
* Minor updates to Cloud Events Primer

As a recent entrant into the SIG I thought it would be a good opportunity to read through all the documentation and to suggest
improvements where appropriate.

Signed-off-by: vinayvenkat <vinayvenkat@yahoo.com>

* Incorporate review comments

Signed-off-by: vinayvenkat <vinayvenkat@yahoo.com>
2020-04-15 09:27:19 -04:00
Jem Day 2b3039bd51
Proprietary binding spec inclusion guide (#595)
* Introduced language to guide the inclusion  of proprietary binding
specifications

Signed-off-by: Day, Jeremy(jday) <jday@paypal.com>

* Chnaged format to address review comment.

Signed-off-by: Day, Jeremy(jday) <jday@paypal.com>

* - Addressed review comment (referenced messaging based spec)
- Subtle re-wording.
- Added note requesting statement about supported versions

Signed-off-by: Day, Jeremy(jday) <jday@paypal.com>

* Fixed broekn link

Signed-off-by: Day, Jeremy(jday) <jday@paypal.com>

* Stylistic tweak...

Signed-off-by: Day, Jeremy(jday) <jday@paypal.com>

* Fix typo

Signed-off-by: Day, Jeremy(jday) <jday@paypal.com>
2020-04-04 11:41:46 -04:00
Clemens Vasters 588cc5e402
Draft for subscription API (#590)
* Draft for subscription API

Signed-off-by: clemensv <clemensv@microsoft.com>

* OpenAPI spec draft. Formatting changes,

Signed-off-by: clemensv <clemensv@microsoft.com>

* Update subscriptions-api.md

Co-Authored-By: Manuel Stein <manuelstein@users.noreply.github.com>
Signed-off-by: clemensv <clemensv@microsoft.com>

* Update subscriptions-api.md

Co-Authored-By: Manuel Stein <manuelstein@users.noreply.github.com>
Signed-off-by: clemensv <clemensv@microsoft.com>

* updates per feedback

Signed-off-by: clemensv <clemensv@microsoft.com>

Co-authored-by: clemensv <clemensv@microsoft.com>
Co-authored-by: Manuel Stein <manuelstein@users.noreply.github.com>
2020-04-04 11:41:14 -04:00
Doug Davis ab6f356629
Merge pull request #577 from duglin/whenCE
How to determine binary CE vs random non-CE message
2020-03-26 13:25:05 -04:00
Mike Helmick 1437cdeb96
[WIP] Drafting the clouddiscovery API specification (#580)
* first (rough) draft of discovery api

Signed-off-by: Mike Helmick <helmick@google.com>

* fix missing ref

Signed-off-by: Mike Helmick <helmick@google.com>

* address first round of comments on discovery

Signed-off-by: Mike Helmick <helmick@google.com>

* address first round of comments on discovery

Signed-off-by: Mike Helmick <helmick@google.com>

* fix spelling/typo type errors

Signed-off-by: Mike Helmick <helmick@google.com>

* address comments, remove source

Signed-off-by: Mike Helmick <helmick@google.com>

* fix merge conflicts

Signed-off-by: Mike Helmick <helmick@google.com>

* fix merge conflicts

Signed-off-by: Mike Helmick <helmick@google.com>

* fix merge conflicts

Signed-off-by: Mike Helmick <helmick@google.com>
2020-03-26 13:23:02 -04:00
Doug Davis 29400c7c1d
Merge pull request #588 from nachocano/master
Adding link to Pub/Sub binding
2020-03-23 11:56:52 -04:00
Doug Davis b259901030 How to determine binary CE vs random non-CE message
Add some guidance for how to determine when an incoming message is a binary
CE vs some random non-CE message. The same receiver might accept CE and non-CE
messages so we should have an interoperable way for them to know what they're
getting

Signed-off-by: Doug Davis <dug@us.ibm.com>
2020-03-19 15:22:16 +00:00
Doug Davis f613249e75
Merge pull request #589 from duglin/addSDKemail
Add info about the new SDK mailing list
2020-03-15 08:19:21 -04:00
Doug Davis 7b95ba9a17 Add info about the new SDK mailing list
Also, make it so the link checker retries a few times

Signed-off-by: Doug Davis <dug@us.ibm.com>
2020-03-13 14:31:51 +00:00
Nacho Cano 9d93a0ca6d adding link to pubsub
Signed-off-by: Nacho Cano <nachoacano@gmail.com>
2020-03-12 15:23:30 -07:00
Doug Davis b61d910603
Merge pull request #584 from duglin/sdkversion
Add some clarity around SDK milestones
2020-03-12 14:19:46 -04:00
Doug Davis 15974bb7df
Merge pull request #572 from slinkydeveloper/fix_kafka
Specify encoding of kafka header keys and values and message key
2020-03-12 14:19:15 -04:00
Doug Davis 8d126b8541 Add some clarity around SDK milestones
Closes #559

Signed-off-by: Doug Davis <dug@us.ibm.com>
2020-03-11 23:58:44 +00:00
Doug Davis 96002f335c
Adding Visual Studio Code extension to community open-source doc (#573)
* Adding Visual Studio Code extension to community open-source doc

Signed-off-by: Tihomir Surdilovic <tsurdilo@redhat.com>

* update wrapping

Signed-off-by: Tihomir Surdilovic <tsurdilo@redhat.com>
2020-03-04 13:24:45 -05:00
Doug Davis 99ceffe6fe
Merge pull request #583 from duglin/addcon
add Tihomir
2020-03-04 07:17:35 -05:00
Doug Davis be95de61fe add Tihomir
Signed-off-by: Doug Davis <dug@us.ibm.com>
2020-03-04 12:00:55 +00:00
Doug Davis 3e991aecec
Merge pull request #582 from mikehelmick/ordering
Fix ordering of elements for id attribute. Make consistent with rest …
2020-03-03 17:24:45 -05:00
Mike Helmick a0c1898b0f Fix ordering of elements for id attribute. Make consistent with rest of spec.
Signed-off-by: Mike Helmick <helmick@google.com>
2020-03-03 08:29:32 -08:00
Doug Davis 1798015fee
Merge pull request #579 from ericbottard/patch-1-master
Fix formatting typo
2020-03-02 11:48:02 -05:00
Doug Davis d0490a9794
Merge pull request #569 from ian-mi/fix-tracestate
Fix distributed tracing example.
2020-03-02 09:41:58 -05:00
Tihomir Surdilovic 694d9049dd
Updating JSON Schema (#563)
* Updating JSON Schema

Signed-off-by: tsurdilo <tsurdilo@redhat.com>

* reverted change of schema name and fix link

Signed-off-by: tsurdilo <tsurdilo@redhat.com>

* updating schema keyword

Signed-off-by: tsurdilo <tsurdilo@redhat.com>

* adding contentEncoding=base64 to data_base64 property

Signed-off-by: Tihomir Surdilovic <tsurdilo@redhat.com>
2020-03-02 09:31:27 -05:00
Eric Bottard 30811bacb1 Fix formatting typo
Signed-off-by: Eric Bottard <ebottard@pivotal.io>
2020-03-02 15:18:49 +01:00
slinkydeveloper fad094f1af Fixed https://github.com/cloudevents/spec/issues/570
Signed-off-by: Francesco Guardiani <francescoguard@gmail.com>
2020-02-24 18:27:40 +01:00
Ian Milligan 73f31d7d6d Fix distributed tracing example.
Per https://w3c.github.io/trace-context/#value, tracestate values must
not contain (,) or (=) characters.

Signed-off-by: Ian Milligan <ianmllgn@gmail.com>
2020-02-19 15:18:09 -08:00
Klaus Deißner 8fe59fc197
Paragraph about nested events to the primer (#567)
* Added a paragraph about nested events to the primer

Signed-off-by: Klaus Deissner <klaus.deissner@sap.com>

* Added a paragraph about nested events to the primer

Signed-off-by: Klaus Deissner <klaus.deissner@sap.com>

* line length <= 80 characters

Signed-off-by: Klaus Deissner <klaus.deissner@sap.com>
2020-02-13 15:23:28 -05:00
Doug Davis d97aa4ae39
Merge pull request #564 from duglin/issue318
add rules for changing Admins
2020-02-10 08:04:49 -05:00
Doug Davis 082ded8c62
Merge pull request #562 from duglin/issue545
Say it's ok to ignore non-MUST recommendations - at your own risk
2020-02-10 08:03:59 -05:00
Doug Davis 47fd83e529 add rules for changing Admins
Signed-off-by: Doug Davis <dug@us.ibm.com>
2020-02-02 20:17:42 +00:00
Doug Davis 3e997eae0a
Merge pull request #560 from duglin/fixreadme
Fix README spec links
2020-01-30 13:13:00 -05:00
Doug Davis a09cc289ae
Merge pull request #561 from tsurdilo/fixtypoprimer
Extra comma in Google Cloud Functions example
2020-01-29 09:29:51 -05:00
tsurdilo 8779bd3d63 Extra comma in Google Cloud Functions example
Signed-off-by: tsurdilo <tsurdilo@redhat.com>
2020-01-29 09:27:47 -05:00
Doug Davis 31458e3988 Say it's ok to ignore non-MUST recommendations - at your own risk
Closes: #545

Signed-off-by: Doug Davis <dug@us.ibm.com>
2020-01-29 14:22:46 +00:00
Doug Davis 478bbdb0e6 Fix README spec links
Signed-off-by: Doug Davis <dug@us.ibm.com>
2020-01-29 12:36:58 +00:00
Doug Davis 03a10f6b40
Merge pull request #550 from jagregory/patch-1
Update Distributed Tracing extension spec links
2019-12-02 09:04:28 -05:00
James Gregory 5630aedcfe Update Distributed Tracing extension spec links
The w3c spec links were out-of-date.

Signed-off-by: James Gregory <james@jagregory.com>
2019-12-02 17:40:55 +11:00
Doug Davis e31991b1cb
Merge pull request #549 from demkada/master
Fix typo
2019-11-27 07:37:18 -05:00
Kad D 5ceb0ddab9 Fix typo
Remove duplicate word (protocol)

Signed-off-by: Kad D <kad@demkada.com>
2019-11-27 11:23:29 +01:00
Doug Davis 248320c3e3
Merge pull request #547 from lucperkins/lperkins/syntax-highlighting
Add highlighting to Primer JSON snippets
2019-11-21 13:29:22 -08:00
Doug Davis 9f1e0cb382
Merge pull request #548 from lucperkins/lperkins/ruby-sdk
Add Ruby SDK to SDK lists
2019-11-20 05:37:09 -08:00
lucperkins 978a62a468 Add Ruby SDK to SDK lists
Signed-off-by: lucperkins <lucperkins@gmail.com>
2019-11-14 08:52:46 -08:00
lucperkins 5610011d4b Add syntax highlighting to Primer JSON snippets
Signed-off-by: lucperkins <lucperkins@gmail.com>
2019-11-14 08:49:52 -08:00
Doug Davis c5f0b4f74c
Merge pull request #544 from DAXaholic/patch-1
Fix typo
2019-10-29 16:11:09 -04:00
Aaron Kunz 615458ce11 Fix typo
Signed-off-by: Aaron Kunz <me@daxaholic.com>
2019-10-28 09:38:30 +01:00
Doug Davis 09ff60ce89
Merge pull request #543 from duglin/fixREADME
fix links in README
2019-10-24 16:46:59 -04:00
Doug Davis 51da0ff413 fix links in README
Signed-off-by: Doug Davis <dug@us.ibm.com>
2019-10-24 20:31:24 +00:00
Doug Davis 85e5df9f35
Merge pull request #541 from duglin/makev1
v1.0 release and vote
2019-10-24 16:22:04 -04:00
Lionel Villard f64d796e49 Add CouchDB adapter specification (#542)
* Add CouchDB adapter spec

Signed-off-by: Lionel Villard <villard@us.ibm.com>

* 1.0-rc1 -> 1.0. Use database instead of db.

Signed-off-by: Lionel Villard <villard@us.ibm.com>

* run prettier

Signed-off-by: Lionel Villard <villard@us.ibm.com>
2019-10-24 16:20:53 -04:00
Doug Davis 4284ba4e91 v1.0
Signed-off-by: Doug Davis <dug@us.ibm.com>
2019-10-17 23:48:42 +00:00
Doug Davis e161faf692
Merge pull request #540 from duglin/pretty
run the linter - before we vote
2019-10-17 19:29:30 -04:00
Doug Davis 374d06e596 run the linter
Signed-off-by: Doug Davis <dug@us.ibm.com>
2019-10-17 20:03:56 +00:00
Klaus Deißner 8e9ec4154b "Stand-alone event format" instead of "in-memory format" (#538)
* Changed wording in the description of extensions from "in-memory" format
to "stand-alone event format" to better reflect the recent terminology
changes in the spec.

Signed-off-by: Klaus Deissner <klaus.deissner@sap.com>

* Removed sections about in-memory formats

Signed-off-by: Klaus Deissner <klaus.deissner@sap.com>

* Line length

Signed-off-by: Klaus Deissner <klaus.deissner@sap.com>

* Formatting

Signed-off-by: Klaus Deissner <klaus.deissner@sap.com>
2019-10-17 14:57:10 -04:00
Doug Davis b330f0e403
Merge pull request #509 from alanconway/extension-interop-508
Clarify interoperability of extensions (#508)
2019-10-17 14:56:38 -04:00
Doug Davis 8d5445707f
Merge pull request #537 from duglin/alt534
another try at clarifying kafka
2019-10-17 13:29:17 -04:00
Alan Conway 8e8ac89869 Clarify interoperability of extensions (#508)
Clarified definition of extension attributes to separate:

1. Core event data model definition of extension attributes.
2. Bindings must serialize extension attributes.
3. Advice about defining extension attributes.

Signed-off-by: Alan Conway <aconway@redhat.com>
2019-10-16 15:45:35 -04:00
Doug Davis 4330ff8215
Merge pull request #539 from bluemonk3y/master
adding contrib entry
2019-10-16 10:54:33 -04:00
Neil Avery 8e67602df4 adding contrib entry
Signed-off-by: Neil Avery <neil@confluent.io>
2019-10-16 11:39:50 +01:00
Doug Davis 4325e0d952 another try at clarifying kafka
Signed-off-by: Doug Davis <dug@us.ibm.com>
2019-10-15 23:44:36 +00:00
Doug Davis 27be53fb0b
Merge pull request #536 from duglin/typos
fix minor typos
2019-10-15 15:59:31 -04:00
Doug Davis 4791892265 fix minor typos
Signed-off-by: Doug Davis <dug@us.ibm.com>
2019-10-15 15:05:20 +00:00
Doug Davis f5d9930be4
Merge pull request #533 from duglin/renameFiles
Rename files
2019-10-15 08:26:19 -04:00
Doug Davis d778653188 if 521 and 529 go in, then rename for consistency
Signed-off-by: Doug Davis <dug@us.ibm.com>
2019-10-15 12:21:15 +00:00
Klaus Deißner 861c11b5f4 Adjust AMQP spec to changes in #521 (#529)
* Changed name from transport to protocol binding.
Adjusted the protocol binding to the definition of event format that is introduced in #521.

Signed-off-by: Klaus Deissner <klaus.deissner@sap.com>

* Fixed a link
Removed the separate AMQP format definition

Signed-off-by: Klaus Deissner <klaus.deissner@sap.com>

* Fixed links
Worked on comments from the PR

Signed-off-by: Klaus Deissner <klaus.deissner@sap.com>

* Fixed link to already released amqp-transport-binding.md

Signed-off-by: Klaus Deissner <klaus.deissner@sap.com>

* Rephrased a sentence in type mapping section of binary mode according to what was discussed on the WG call.

Signed-off-by: Klaus Deissner <klaus.deissner@sap.com>

* Further refinements

Signed-off-by: Klaus Deissner <klaus.deissner@sap.com>
2019-10-14 11:38:35 -04:00
Doug Davis 0d7fab597e
Merge pull request #528 from deissnerk/webhook
Removed statement about denial
2019-10-14 11:35:29 -04:00
Scott Nichols 5176d65ac9 Reword SDK.md to be more general. (#495)
Signed-off-by: Scott Nichols <nicholss@google.com>
2019-10-10 13:00:07 -04:00
Doug Davis cbb1674f70
Merge pull request #516 from timjroberts/patch-1
Update example for 'application/avro' content
2019-10-10 12:59:13 -04:00
Doug Davis 4796626c7b
Merge pull request #521 from alanconway/datacontentype
Clarify meaning of missing datacontentype.
2019-10-10 12:49:40 -04:00
Alan Conway b911da8e82 Clarify meaning of missing datacontentype.
Clarify the meaning of missing datacontentype, when it is allowed, and
what that means when translating events between formats/protocols.

Also replaced "transport" with "protocol" everywhere, I believe that
is now the preferred term. "Transport" is not defined in the terminology.

Fixes #520

Signed-off-by: Alan Conway <aconway@redhat.com>
2019-10-10 09:14:05 -04:00
Scott Nichols 5aa00c309d Remove lower-case restriction, lint. (#522)
* remove lowercase, lint.
* fix typo.
* s/content/context/

Signed-off-by: Scott Nichols <nicholss@google.com>
2019-10-10 07:59:23 -04:00
Doug Davis a14022856f
Merge pull request #532 from duglin/fixLink
remove bad link for now
2019-10-10 07:43:38 -04:00
Doug Davis 2b97a30881 remove bad link for now
Signed-off-by: Doug Davis <dug@us.ibm.com>
2019-10-10 11:42:21 +00:00
Doug Davis b36425667e
Merge pull request #531 from gunnarmorling/master
Fixing link, using more consistent mark-up
2019-10-10 07:35:22 -04:00
Doug Davis bf19384274
Merge pull request #518 from gunnarmorling/patch-2
Update contributors.md
2019-10-10 07:33:05 -04:00
Gunnar Morling 9d3a13f238 Fixing link, using more consistent mark-up
Signed-off-by: Gunnar Morling <gunnar.morling@googlemail.com>
2019-10-10 12:08:30 +02:00
Gunnar Morling b46d83dbfe Update contributors.md
Signed-off-by: Gunnar Morling <gunnar.morling@googlemail.com>
2019-10-10 11:50:07 +02:00
Klaus Deissner c8f8459055 Removed statement about denial
Signed-off-by: Klaus Deissner <klaus.deissner@sap.com>
2019-10-08 17:48:41 +02:00
Doug Davis 5727264f51
Merge pull request #523 from n3wscott/minor-primer-typo
Remove unrestricted extensions. Lint.
2019-10-08 08:03:25 -04:00
Doug Davis b2c4456848
Merge pull request #525 from duglin/issue517
Fix typo s/compliment/complement/
2019-10-07 18:38:53 -04:00
Doug Davis 3d9b92768d
Merge pull request #524 from duglin/typo
fix double word
2019-10-07 18:38:31 -04:00
Doug Davis e11041d3b1
Merge pull request #526 from n3wscott/add-nicholss
adding Scott Nichols to contributors.md
2019-10-07 16:09:11 -04:00
Scott Nichols 8407bdbf55 adding myself to contributors.md
Signed-off-by: Scott Nichols <nicholss@google.com>
2019-10-07 12:45:31 -07:00
Doug Davis bce927265b Fix typo s/compliment/complement/
Closes #517

Signed-off-by: Doug Davis <dug@us.ibm.com>
2019-10-07 17:51:44 +00:00
Doug Davis be9c3ef3bb fix double word
Signed-off-by: Doug Davis <dug@us.ibm.com>
2019-10-07 17:29:24 +00:00
Scott Nichols 8007e75465 remove wrong text, lint.
Signed-off-by: Scott Nichols <nicholss@google.com>
2019-10-04 10:50:05 -07:00
Tim Roberts 926a6d77dc Update example for 'application/avro' content
Signed-off-by: timjroberts <tim@timjroberts.com>
2019-09-26 07:40:27 +01:00
Doug Davis baa8548af8
Merge pull request #512 from duglin/rc1
Modify docs for v1.0-rc1 release
2019-09-20 10:39:18 -04:00
Doug Davis e9d1f86987 Modify docs for v1.0-rc1 release
- s/0.4-wip/1.0-rc1/
- s/URI-reference/URI/ in scheme section for spec.md - per issue #511 since it
was just a typo
- updated Roadmap to say we completed 1.0-rc1 milestone

Signed-off-by: Doug Davis <dug@us.ibm.com>
2019-09-20 05:51:12 +00:00
Doug Davis f41061e560
make extensions follow the same pattern as normal attrs (#505)
* issue 498 - require extensions to have ce- version

Signed-off-by: Doug Davis <dug@us.ibm.com>

* fix mqtt

Signed-off-by: Doug Davis <dug@us.ibm.com>

* add pointer for mark

Signed-off-by: Doug Davis <dug@us.ibm.com>
2019-09-19 12:41:15 -04:00
Doug Davis a7090c4a35
Merge pull request #507 from duglin/removeProto
remove proto - see issue 504
2019-09-14 13:27:38 -04:00
Doug Davis ac36c7b7cf remove proto - see issue 504
Signed-off-by: Doug Davis <dug@us.ibm.com>
2019-09-14 16:54:04 +00:00
Doug Davis 0e37e0e0ab
Syntax fixes (#506)
* Syntax fixes

Evan noticed we have more than one #data header so I tried to fix that.

Also, we still used a complex/map in an example.

Signed-off-by: Doug Davis <dug@us.ibm.com>

* Moves the naming section to a more apporpiate spot.
Renamed an example extension per Vlad's suggestion.

Signed-off-by: Doug Davis <dug@us.ibm.com>
2019-09-14 12:43:35 -04:00
Evan Anderson ee9d4153b1 Update AVRO mappings to match current event schema and type system. (#497)
* Update AVRO mappings to match current event schema and type system.

Signed-off-by: Evan Anderson <evan.k.anderson@gmail.com>

* Address @duglin feedback.

Signed-off-by: Evan Anderson <evan.k.anderson@gmail.com>

* Make AVRO spec support nested JSON object data translated to structured form

Signed-off-by: Evan Anderson <evan.k.anderson@gmail.com>

* Update Avro format definition to match avsc file.

Signed-off-by: Evan Anderson <evan.k.anderson@gmail.com>

* s/may/can/

Signed-off-by: Evan Anderson <evan.k.anderson@gmail.com>
2019-09-14 12:42:39 -04:00
Evan Anderson d7ae79ca68 Fix up JSON type mappings (#496)
* Fix up JSON type mappings

Signed-off-by: Evan Anderson <evan.k.anderson@gmail.com>

* Fix type mapping for AMQP

Signed-off-by: Evan Anderson <evan.k.anderson@gmail.com>

* Add `data` to AMQP.

Signed-off-by: Evan Anderson <evan.k.anderson@gmail.com>

* Add payload data to amqp-format.md

Signed-off-by: Evan Anderson <evan.k.anderson@gmail.com>

* Update AMQP data encoding per discussion in #492

Signed-off-by: Evan Anderson <evan.k.anderson@gmail.com>
2019-09-12 14:01:04 -04:00
Doug Davis be24089d54
Merge pull request #503 from deissnerk/toplevelext
Extensions are not allowed to be nested any more
2019-09-12 13:58:10 -04:00
Doug Davis 8b89ede4b1
Merge pull request #500 from cneijenhuis/only-optional-attributes
Only OPTIONAL attributes (conditional not needed)
2019-09-10 18:10:33 -04:00
Klaus Deissner 04d987de87 Extensions are not allowed to be nested any more.
Signed-off-by: Klaus Deissner <klaus.deissner@sap.com>
2019-09-10 21:43:14 +02:00
Christoph Neijenhuis 79140d6c29 Only OPTIONAL attributes (conditional not needed)
Signed-off-by: Christoph Neijenhuis <christoph.neijenhuis@commercetools.de>
2019-09-07 19:46:00 +02:00
Evan Anderson 1404aaae35 Clarifications on the HTTP transport binding (#488)
* Update HTTP transport to define Context-Encoding header mapping and more clearly define percent-encoding rules.Signed-off-by: Evan Anderson <evan.k.anderson@gmail.com>

Signed-off-by: Evan Anderson <evan.k.anderson@gmail.com>

* Update "maps" language to use "corresponds to".

Signed-off-by: Evan Anderson <evan.k.anderson@gmail.com>

* Remove datacontentencoding and simplify header encoding rules.

Signed-off-by: Evan Anderson <evan.k.anderson@gmail.com>

* Fix last reference to `datacontentencoding`

Signed-off-by: Evan Anderson <evan.k.anderson@gmail.com>

* Fix comma

Signed-off-by: Evan Anderson <evan.k.anderson@gmail.com>

* `data` is not an attribute any more.

Signed-off-by: Evan Anderson <evan.k.anderson@gmail.com>

* Unicode is capitalized, spell out final decoding is UTF-8.

Signed-off-by: Evan Anderson <evan.k.anderson@gmail.com>

* Fix up extra links

Signed-off-by: Evan Anderson <evan.k.anderson@gmail.com>

* missing "the"

Signed-off-by: Evan Anderson <evan.k.anderson@gmail.com>

* Remove mention of unicode, which is not needed

Signed-off-by: Evan Anderson <evan.k.anderson@gmail.com>

* Fix RFC2119 terms

Signed-off-by: Evan Anderson <evan.k.anderson@gmail.com>

* s/optional/OPTIONAL/ per duglin

Signed-off-by: Evan Anderson <evan.k.anderson@gmail.com>
2019-09-06 18:13:10 -04:00
Clemens Vasters 2c13c10cf7 remove dataencoding and intro data_base64 in JSON (#492)
* Changed datacontentencoding to dataencoding

Signed-off-by: Clemens Vasters <clemensv@microsoft.com>

* remove dataencoding and intro data_base64 in JSON

Signed-off-by: Clemens Vasters <clemensv@microsoft.com>

* Consolidated handling of "data" in the JSON spec

Signed-off-by: Clemens Vasters <clemensv@microsoft.com>

* Link fix

Signed-off-by: Clemens Vasters <clemensv@microsoft.com>

* link fix

Signed-off-by: Clemens Vasters <clemensv@microsoft.com>
2019-09-05 14:15:12 -04:00
Christoph Neijenhuis 4783a6d083 Cleanup: Map and add URI in formats; re-add "Type System" heading (#493)
* Cleanup Map and add URI in formats

Signed-off-by: Christoph Neijenhuis <christoph.neijenhuis@commercetools.de>

* Re-add 'Type System' heading, as it is referenced from formats

Signed-off-by: Christoph Neijenhuis <christoph.neijenhuis@commercetools.de>

* Header indentation

Signed-off-by: Christoph Neijenhuis <christoph.neijenhuis@commercetools.de>
2019-08-30 08:24:53 -04:00
Doug Davis c8e2e48053
Merge pull request #490 from timbray/master
Remove "printable", disallow dodgy Unicode
2019-08-26 20:42:06 -04:00
Tim Bray f81fbae700 Remove "printable", disallow dodgy Unicode
Signed-off-by: Tim Bray <timbray@amazon.com>
2019-08-26 16:37:46 -07:00
Doug Davis 42cf6eb395
Tweak URI-references and be smart with Strings (#478)
* Explain URI-references and be smart with Strings

I can't think of a good reason why URI-references should be allowed to
be blank since that seems about as useful as the property not being
there at all.

Signed-off-by: Doug Davis <dug@us.ibm.com>

* changed based on today's call

Signed-off-by: Doug Davis <dug@us.ibm.com>
2019-08-16 08:06:40 -04:00
Doug Davis fd2f963903
Merge pull request #484 from duglin/data
tweak how we talk about data and datacontentencoding
2019-08-16 08:05:42 -04:00
Doug Davis 54213839ee
Merge pull request #479 from duglin/loa
Allow for a LOA w.r.t. voting rights
2019-08-15 15:02:03 -04:00
Doug Davis 0ba4afe099 tweak how we talk about data
Signed-off-by: Doug Davis <dug@us.ibm.com>
2019-08-15 11:31:17 -07:00
Doug Davis 2b5aafd042 Allow for a LOA w.r.t. voting rights
It's been mentioned that we have no provision for a leave-of-absence
(e.g. vacations) w.r.t. voting rights. Luckily, we don't vote very often
and they're usually land-slides so I don't think it's impacted anything, but
we should probably have some kind of official allowance for it.

See what ya'll think...

Signed-off-by: Doug Davis <dug@us.ibm.com>
2019-08-15 11:27:41 -07:00
Doug Davis 2dde6e9e27
Merge pull request #480 from duglin/sdk
add ptr to sdk doc
2019-08-15 14:11:42 -04:00
Doug Davis decc9358a7
s/schemaurl/dataschema/ to be consistent (#475)
* s/schemaurl/dataschemaurl/ to be consistent

Let's discuss. But I tend to think it's better to get this right
for v1.0 than to continue to be inconsistent and let a pre-v1.0
version dictate things forever.

Signed-off-by: Doug Davis <dug@us.ibm.com>

* per today's call

Signed-off-by: Doug Davis <dug@us.ibm.com>
2019-08-15 14:07:38 -04:00
Doug Davis 2d1e254704 add ptr to sdk doc
Signed-off-by: Doug Davis <dug@us.ibm.com>
2019-08-09 01:50:37 +00:00
Doug Davis 37bc677da4
Merge pull request #467 from evankanderson/where-were-going-we-dont-need-maps
Remove Map from allowed Context Attribute types
2019-08-08 15:35:32 -04:00
Doug Davis ed12afbf39
Merge pull request #466 from duglin/issue434
Add section to primer about error handling
2019-07-25 15:02:42 -05:00
Doug Davis d9120ec758 Add section to primer about error handling
Closes #434

Signed-off-by: Doug Davis <dug@us.ibm.com>
2019-07-25 13:01:53 -07:00
Fabio José 6a71c04045 Avro Event Format for CloudEvents (#463)
* Fix signoff, changes based on the comments

Signed-off-by: Fabio José <fabiojose@gmail.com>

* Fixes based on the PR comments

Signed-off-by: Fabio José <fabiojose@gmail.com>

* Verifing the avro-format.md

Signed-off-by: Fabio José <fabiojose@gmail.com>

* Fix the alphabetized list

Signed-off-by: Fabio José <fabiojose@gmail.com>

* Fixes based on the comments

Signed-off-by: Fabio José <fabiojose@gmail.com>

* Update the avro schema

Signed-off-by: Fabio José <fabiojose@gmail.com>

* Update the def based on the new avro schema

Signed-off-by: Fabio José <fabiojose@gmail.com>

* Update the avro schema
- remove: float, boolean and long
- change field name: metadata to attribute

Signed-off-by: Fabio José <fabiojose@gmail.com>
2019-07-25 14:50:19 -05:00
Doug Davis ee10f93c9e
Merge pull request #472 from duglin/fixjson
We no longer put extensions into an 'extensions' bag
2019-07-19 07:59:42 -04:00
Doug Davis 68eef8f9e3 We no longer put extensions into an 'extensions' bag
Jem noticed this

Signed-off-by: Doug Davis <dug@us.ibm.com>
2019-07-12 15:54:07 -07:00
Doug Davis fbeaa6dd1f
Merge pull request #441 from duglin/adapters
Add a spot to describe adapters
2019-07-11 13:10:47 -04:00
Doug Davis 17f10e4370
Merge pull request #449 from erikerikson/persistence
Address Persistence in Primer
2019-07-11 13:10:17 -04:00
Doug Davis 819e257d13
Merge pull request #469 from cneijenhuis/batch-414
Clarifications on batching to address #414
2019-07-11 13:09:52 -04:00
Evan Anderson 008fa09925 Change wording to make it clear that `Any` which doesn't result in `Map` is allowed.
Signed-off-by: Evan Anderson <argent@google.com>
2019-07-11 14:53:51 +00:00
Erik Erikson bb994bfcbc Address Persistence
Briefly detail the importance and challenges of persistence and the measured approach to addressing it and its requirements within the CloudEvents specification.

Closes #143
Closes #276
Closes #378

Signed-off-by: Erik Erikson <erik.erikson@gmail.com>
2019-07-10 13:15:15 -07:00
Evan Anderson 770b8de413 Merge changes to spec.md
Signed-off-by: Evan Anderson <evan.k.anderson@gmail.com>
2019-07-02 16:31:09 -07:00
Evan Anderson 88ebfd7af7 Update with suggestions from PR=
Signed-off-by: Evan Anderson <evan.k.anderson@gmail.com>
2019-07-02 12:15:53 -07:00
Doug Davis 0039825d8a
Merge pull request #468 from duglin/spelling
Fix some typos and grammatical errors per MS Word
2019-06-28 01:07:36 +08:00
Doug Davis 94e9f6f514
Merge pull request #462 from duglin/updateRoadmap
Modify roadmap with a more clear goal of getting to v1.0
2019-06-28 01:06:40 +08:00
Neil Avery 7c3bdb194d Kafka transport binding v2 (#337)
* Follow-on PR from https://github.com/cloudevents/spec/pull/300

Kafka transport binding for CloudEvents, similar to the HTTP binding and proposed NATS, MQTT, AMQP bindings.

Signed-off-by: Neil Avery <neil@confluent.io>

* addressing remaining cloudEvent attribute names

Kafka transport binding for CloudEvents, similar to the HTTP binding and proposed NATS, MQTT, AMQP bindings.

Signed-off-by: Neil Avery <neil@confluent.io>
2019-06-28 01:03:25 +08:00
Christoph Neijenhuis d0aa71855c Clarifications on batching to address #414
Signed-off-by: Christoph Neijenhuis <christoph.neijenhuis@commercetools.de>
2019-06-27 15:27:19 +02:00
Doug Davis eaafc6a981 minor github tweaks
Signed-off-by: Doug Davis <dug@us.ibm.com>
2019-06-27 00:56:50 -07:00
Doug Davis 1243eebdbc Fix some typos and grammatical errors per MS Word
Who am I to question our AI overlords?

Signed-off-by: Doug Davis <dug@us.ibm.com>
2019-06-27 00:35:52 -07:00
Doug Davis 0eae3f1692 add s3
Signed-off-by: Doug Davis <dug@us.ibm.com>
2019-06-26 23:58:50 -07:00
Doug Davis 75194ed6e6 Add a spot to describe adapters
Adapters are the rules to convert well known events into CEs

Signed-off-by: Doug Davis <dug@us.ibm.com>
2019-06-26 23:26:01 -07:00
Klaus Deißner a19b3f363a Forwarding OPTIONAL attributes (#461)
* Intermediaries MUST forward OPTIONAL attributes, if the want to ignore them.

Signed-off-by: Klaus Deissner <klaus.deissner@sap.com>

* line wrap to 80 characters

Signed-off-by: Klaus Deissner <klaus.deissner@sap.com>

* Correct relative links

Signed-off-by: Klaus Deissner <klaus.deissner@sap.com>

* Change from MUST to SHOULD

Signed-off-by: Klaus Deissner <klaus.deissner@sap.com>
2019-06-26 04:22:13 -05:00
Evan Anderson 999791632f Fix capitalization of MAY NOT/SHOULD
Signed-off-by: Evan Anderson <evan.k.anderson@gmail.com>
2019-06-24 12:29:44 -07:00
Evan Anderson 0fd273fe5e Make formatting of `Any-context` explicit in transports/formats.
Signed-off-by: Evan Anderson <evan.k.anderson@gmail.com>
2019-06-24 09:39:40 -07:00
Evan Anderson e53d0eb872 Add `Any-context` type.
Signed-off-by: Evan Anderson <evan.k.anderson@gmail.com>
2019-06-24 09:07:58 -07:00
Evan Anderson f547f7c8e6 Merge remote-tracking branch 'upstream/master' into where-were-going-we-dont-need-maps 2019-06-24 09:00:15 -07:00
Evan Anderson 38b7a35c76 Remove Map from allowed Context Attribute types
Signed-off-by: Evan Anderson <evan.k.anderson@gmail.com>
2019-06-24 08:58:45 -07:00
Doug Davis 97afbdd73d Modify roadmap with a more clear goal of getting to v1.0
Signed-off-by: Doug Davis <dug@us.ibm.com>
2019-06-20 15:03:45 -07:00
Doug Davis d82e31202d
Merge pull request #279 from inlined/non-goals
Add non-goals for routing information.
2019-06-20 16:49:08 -04:00
Thomas Bouldin 453b925c7e Add non-goals for routing information.
Extend the non-goals section to clarify what is simply out of scope and
what is in scope but the WG thinks is a bad idea. The latter category
deserves fuller explanations for newcomers.

Signed-off-by: Thomas Bouldin <inlined@google.com>

Typo and grammar fixes to primer.

Signed-off-by: Thomas Bouldin <inlined@google.com>

trying to address some comments

Signed-off-by: Doug Davis <dug@us.ibm.com>

wordsmithing

Signed-off-by: Doug Davis <dug@us.ibm.com>
2019-06-20 13:47:31 -07:00
Doug Davis a81e32d110
Merge pull request #440 from duglin/issue188
Add a little clarity around "type"
2019-06-20 16:46:21 -04:00
Clemens Vasters b0dccf10f4 Primer edits - Architecture section (#390)
* Architecture section

Signed-off-by: Clemens Vasters <clemensv@microsoft.com>

* addressing comments

Signed-off-by: Clemens Vasters <clemensv@microsoft.com>

* link fix

Signed-off-by: Clemens Vasters <clemensv@microsoft.com>
2019-06-20 16:45:53 -04:00
Doug Davis 4ce9c1f2e9
Merge pull request #464 from cneijenhuis/add-commercetools-to-contributors
Add commercetools to contributors
2019-06-20 07:45:37 -04:00
Christoph Neijenhuis ac6649f9d3 Add commercetools to contributors
Signed-off-by: Christoph Neijenhuis <christoph.neijenhuis@commercetools.de>
2019-06-20 10:39:52 +02:00
Doug Davis 9dac2d2171
Merge pull request #458 from jroper/lightbend
Added James Roper/Lightbend to contributors
2019-06-18 10:18:30 -04:00
James Roper a62cd8655a Added James Roper/Lightbend to contributors
Signed-off-by: James Roper <james@jazzy.id.au>
2019-06-18 12:27:29 +10:00
Doug Davis dc01c1b37b
Merge pull request #455 from duglin/fixtable
Fix README table - missing protobuf and reorder
2019-06-17 14:14:13 -04:00
Doug Davis 624478bb9e Fix README table - missing protobuf and reorder
Signed-off-by: Doug Davis <dug@us.ibm.com>
2019-06-17 07:52:43 -07:00
Doug Davis f3cb5bd10e
Merge pull request #454 from gunnarmorling/patch-1
#436 Clarifying that Any can take the shape of any other type
2019-06-14 07:29:42 -04:00
Gunnar Morling ade1408e7c #436 Clarifying that Any can take the shape of any other type
Also removed the redundancy between the two sentences applying to `Any`.

Signed-off-by: Gunnar Morling <gunnar.morling@googlemail.com>
2019-06-14 09:03:16 +02:00
Doug Davis d6988a442b Add a little clarity around "type"
Closes #188

I think the rest of #188 is already addressed by our recent PRs around
uniqueness of IDs.

/cc @ljnelson

Signed-off-by: Doug Davis <dug@us.ibm.com>
2019-06-13 18:49:39 -07:00
Doug Davis 2c23324c3b
Merge pull request #446 from duglin/time
Be clearer about "time"
2019-06-13 21:22:07 -04:00
Doug Davis 84d171af52
Merge pull request #453 from duglin/v0.4-wip
v0.4-wip
2019-06-13 21:05:20 -04:00
Doug Davis 527b664548 v0.4-wip
Signed-off-by: Doug Davis <dug@us.ibm.com>
2019-06-13 17:54:40 -07:00
Doug Davis 189ad4b851
Merge pull request #452 from duglin/v0.3
v0.3
2019-06-13 20:40:32 -04:00
Doug Davis 0a08f40f51 v0.3
Signed-off-by: Doug Davis <dug@us.ibm.com>
2019-06-13 17:34:03 -07:00
Doug Davis 713d5b69a7
Merge pull request #450 from duglin/fixprimer
Remove blank section
2019-06-12 08:48:42 -04:00
Scott Nichols 8ada6c9256 Update to title format. (#447)
* Update to title format.

Signed-off-by: Scott Nichols <nicholss@google.com>

* Ran 'prettier --write --list-different --no-color --prose-wrap=always'.

Signed-off-by: Scott Nichols <nicholss@google.com>
2019-06-12 08:47:46 -04:00
Doug Davis 48200720dd Remove blank section
We can always recreate the section if someone has text they want to add.

Closes: #448

Signed-off-by: Doug Davis <dug@us.ibm.com>
2019-06-11 12:03:21 -07:00
Doug Davis b0081b2427 Be clearer about "time"
Closes: #445

Signed-off-by: Doug Davis <dug@us.ibm.com>
2019-06-09 17:52:00 -07:00
Doug Davis 82ebd5fb70
Merge pull request #439 from gunnarmorling/typo-fixes
Misc. typo fixes
2019-06-09 20:38:44 -04:00
Gunnar Morling a68201858a Misc. typo fixes
Signed-off-by: Gunnar Morling <gunnar.morling@googlemail.com>
2019-06-08 07:17:56 +02:00
Doug Davis fa325b79bb
Add some guidance on how to construct CloudEvents (#404)
* Add some guidance on how to construct CloudEvents

Since not all event producers will generate CloudEvents natively, it might
be good to provide some guidance around how the CE attributes should be
populated when the CE producer isn't the event producer.

Signed-off-by: Doug Davis <dug@us.ibm.com>

* More edits

Signed-off-by: Doug Davis <dug@us.ibm.com>

* clarify split between source and producer better

Signed-off-by: Doug Davis <dug@us.ibm.com>
2019-06-06 13:54:35 -04:00
Clemens Vasters 9d54ab2e9f Size Constraints (#405)
* added size limits

Signed-off-by: Clemens Vasters <clemensv@microsoft.com>

* addressing @erikerikson feedback

Signed-off-by: Clemens Vasters <clemensv@microsoft.com>

* project call feedback

Signed-off-by: Clemens Vasters <clemensv@microsoft.com>
2019-06-06 13:53:27 -04:00
Clemens Vasters 0bfa396ac0 Type system changes // canonical string representation (#432)
* type system change

Signed-off-by: Clemens Vasters <clemensv@microsoft.com>

* added references to data type string encodings

Signed-off-by: Clemens Vasters <clemensv@microsoft.com>

* format and transport fixes for type system changes

Signed-off-by: Clemens Vasters <clemensv@microsoft.com>
2019-06-06 13:52:29 -04:00
Doug Davis 74bab86b30
Add some additional design points for ID (#403)
* Add some additional design points for ID

Signed-off-by: Doug Davis <dug@us.ibm.com>

* even's comment

Signed-off-by: Doug Davis <dug@us.ibm.com>
2019-06-01 11:54:14 +02:00
Doug Davis 147263d7cc
Merge pull request #431 from JemDay/json-schema-fix
Add "Subject" context attribute definition
2019-05-30 14:25:05 -04:00
Day, Jem 1885dea51c Add "Subject" context attribute definition
Signed-off-by: Day, Jem <jday@paypal.com>
2019-05-20 13:11:21 -07:00
Klaus Deißner 0cbebabf0d Terminology additions for Source, Consumer, Producer and Intermediary (#420)
* Added producer, consumer and intermediate to terminology section.

Signed-off-by: Klaus Deissner <klaus.deissner@sap.com>

* Finished the definitions of source, producer, consumer and intermediary.

Signed-off-by: Klaus Deissner <klaus.deissner@sap.com>

* Fixed typo and wording

Signed-off-by: Klaus Deissner <klaus.deissner@sap.com>

* Fixed usage of 'may'

Signed-off-by: Klaus Deissner <klaus.deissner@sap.com>

* Fix typo
Eliminate ambiguities in definition of producer

Signed-off-by: Klaus Deissner <klaus.deissner@sap.com>

* Source as the context of the occurence

Signed-off-by: Klaus Deissner <klaus.deissner@sap.com>
2019-05-17 09:55:49 -04:00
Doug Davis b61f315ae0
Merge pull request #391 from alanconway/unique-id
Clarify scope of eventID's uniqueness
2019-05-16 19:47:47 -04:00
James Roper 608c561f2e Added partitioning extension (#218)
See #209.

Defines a partitionKey extension attribute for use with message brokers
that support partitioning.

Signed-off-by: James Roper <james@jazzy.id.au>
2019-05-09 22:10:27 -04:00
Doug Davis d53a49a1ff
Merge pull request #427 from deissnerk/link2dataref
Added link to dataref.md in documented extensions
2019-05-09 22:05:39 -04:00
Alan Conway 217a7777ed Issue #331: Clarify scope of source and id uniqueness
Reword "id" and "source" to clarify uniqueness requirements.
Examples to show different approaches to generating unique source/IDs
Clarify producer/consumer responsibilities.

Signed-off-by: Alan Conway <aconway@redhat.com>
2019-05-09 16:50:31 -04:00
Klaus Deissner f5d88c2b08 Added link to dataref.md
Signed-off-by: Klaus Deissner <klaus.deissner@sap.com>
2019-05-08 13:35:12 +02:00
Doug Davis 0b37d6d1fb
Merge pull request #425 from duglin/reorder
Order the attributes section
2019-05-05 12:33:52 -04:00
Doug Davis defbaf2822 Order the attributes section
No semantic changes, just some re-ordering to make it easier to follow/read:
- created REQUIRED and OPTIONAL attributes sub-sections
- moved all attribtues into the appropriate sub-sections
- alphabetized the attributes in each section

I think this makes it easier for people implementing the spec to
1) find the attribute they're looking for since it's alphabetized now,
2) know which attributes they MUST support since they're all in one
section now

Signed-off-by: Doug Davis <dug@us.ibm.com>
2019-04-29 17:25:04 -07:00
Doug Davis c8b64c0068 Fix bad hrefs for our images (#424)
Fixes #421

Signed-off-by: Doug Davis <dug@us.ibm.com>
2019-04-27 21:35:03 -07:00
Scott Nichols 471fe82d6a Master represents the future version of the spec, use the future version in the text. (#415)
* Bump the version used in master to 0.3 of the spec.

Signed-off-by: Scott Nichols <nicholss@google.com>

* feedback was to use a wip tag. done.

Signed-off-by: Scott Nichols <nicholss@google.com>
2019-04-18 13:36:01 -04:00
Doug Davis 8cec5fb8fd
Merge pull request #419 from timbray/master
Adjust examples
2019-04-17 18:16:51 -04:00
Tim Bray 8a6801f015 Adjust examples to include AWS CloudWatch events, our de facto central Event format,
and remove valid-but-not-terribly-relevant SNS & Kinesis examples.

Signed-off-by: Tim Bray <timbray@amazon.com>
2019-04-17 14:09:04 -07:00
Christoph Neijenhuis 3ea7805ad0 Add dataref attribute and describe Claim Check Pattern (#377)
* Add dataref, describe claim check pattern

Signed-off-by: Christoph Neijenhuis <christoph.neijenhuis@commercetools.de>

* Implement Dougs suggestions

Signed-off-by: Christoph Neijenhuis <christoph.neijenhuis@commercetools.de>

* Clarify content of data and dataref MUST be identical

Signed-off-by: Christoph Neijenhuis <christoph.neijenhuis@commercetools.de>

* Move dataref to extension

Signed-off-by: Christoph Neijenhuis <christoph.neijenhuis@commercetools.de>

* Fix links

Signed-off-by: Christoph Neijenhuis <christoph.neijenhuis@commercetools.de>
2019-04-13 20:54:33 -05:00
Doug Davis 2af669d56e
Merge pull request #417 from duglin/pr406-part2
Do some clean-up items for PR 406 that were missed
2019-04-13 20:54:02 -05:00
Doug Davis 9e043b95d5 Do some clean-up items for PR 406 that were missed
Just minor tweaks

Signed-off-by: Doug Davis <dug@us.ibm.com>
2019-04-10 12:52:34 -07:00
Clemens Vasters ef193d52c7 Introducing "subject" (#406)
* Introducing "subject"

Signed-off-by: Clemens Vasters <clemensv@microsoft.com>

* typo fix

Signed-off-by: Clemens Vasters <clemensv@microsoft.com>

* fixup of source/subject references

Signed-off-by: Clemens Vasters <clemensv@microsoft.com>
2019-04-10 19:43:37 +02:00
Clemens Vasters 2d1c76ec2c Added datacontentencoding (#387)
* Added datacontentencoding

Signed-off-by: Clemens Vasters <clemensv@microsoft.com>

* adding constraints section

Signed-off-by: Clemens Vasters <clemensv@microsoft.com>
2019-04-04 14:41:07 -04:00
Doug Davis fdf39e15da
Merge pull request #412 from duhenglucky/master
Add Apache RocketMQ proprietary transport binding with cloudevents
2019-04-04 14:40:03 -04:00
duhenglucky 2f0af49e8a Add Apache RocketMQ proprietary binding with cloudevents
Signed-off-by: duhenglucky <duheng0522@gmail.com>
2019-03-29 19:05:16 +08:00
Scott Nichols d36b0df4a5 Ran https://prettier.io/ command on all markdown. (#411)
* Ran pretter.io command on all markdown.

Signed-off-by: Scott Nichols <nicholss@google.com>

* fix wacky markdown format.

Signed-off-by: Scott Nichols <nicholss@google.com>

* reapply linter.

Signed-off-by: Scott Nichols <nicholss@google.com>
2019-03-28 13:54:35 -04:00
Jem Day 61d8169247 Privacy & Security (#399)
* First pass at privacy and security related guidance.

Signed-off-by: Day, Jem <jday@paypal.com>

* Addressed review comments

Signed-off-by: Day, Jem <jday@paypal.com>

* Tweaks

Signed-off-by: Day, Jem <jday@paypal.com>

* Add ToC reference

Signed-off-by: Day, Jem <jday@paypal.com>

* Changed wording as-per WG meeting 3/21/19

Signed-off-by: Day, Jem <jday@paypal.com>
2019-03-22 15:28:13 -04:00
Doug Davis 0b7453ea4a
Merge pull request #398 from duglin/issue388
clarify what OPTIONAL means
2019-03-21 15:09:18 -04:00
Doug Davis da6b60bf65 clarify what OPTIONAL means
Signed-off-by: Doug Davis <dug@us.ibm.com>
2019-03-21 11:03:46 -07:00
Doug Davis 0c9b7215f1
Merge pull request #402 from duglin/moveExt
Move "extension attributes" section down to end of context attributes
2019-03-21 14:02:07 -04:00
Doug Davis 0ac2e2f2ca
Merge pull request #408 from cneijenhuis/fix-extension-attr-names
Extensions follow attribute naming scheme introduced in #321
2019-03-21 14:01:32 -04:00
Christoph Neijenhuis 4401c6d699 Extensions follow attribute naming scheme introduced in #321
Signed-off-by: Christoph Neijenhuis <christoph.neijenhuis@commercetools.de>
2019-03-20 09:49:34 +01:00
Doug Davis 0718e301d9
Merge pull request #380 from rachelmyers/proprietary-specs
Create a space for specs for proprietary protocols
2019-03-15 20:22:06 -04:00
Doug Davis 2f343cdc24 add to README
Signed-off-by: Doug Davis <dug@us.ibm.com>
2019-03-15 10:51:39 -07:00
Doug Davis af5f7b980b fix typo
Signed-off-by: Doug Davis <dug@us.ibm.com>
2019-03-15 10:44:59 -07:00
Rachel Myers b371ff6500 The linter can't abide placeholder links 🙄
Signed-off-by: Rachel Myers <rachelmyers@google.com>
2019-03-15 10:40:06 -07:00
Rachel Myers 124f7eb58c Collect proprietary specs in dedicated file
Signed-off-by: Rachel Myers <rachelmyers@google.com>
2019-03-15 10:40:06 -07:00
Doug Davis 32d49d68a0 Move "extension attributes" section down to end of context attributes
Closes #401

Signed-off-by: Doug Davis <dug@us.ibm.com>
2019-03-14 11:15:27 -07:00
Doug Davis f66e0f1d03
Merge pull request #400 from r-marques/fix-primer-link
Fixed a broken link in the primer
2019-03-14 10:33:18 -04:00
Rodolphe Marques 0febd40bba Fixed a broken link in the primer
Signed-off-by: Rodolphe Marques <marques.rodolphe@gmail.com>
2019-03-14 14:02:50 +01:00
Doug Davis e894bf2509
Merge pull request #397 from sslavic/patch-1
Fix broken link
2019-03-07 14:13:28 -05:00
Stevo Slavić 2e6ce09f85 Fix broken link
Signed-off-by: Stevo Slavic <stevo.slavic@sap.com>
2019-03-07 19:14:18 +01:00
Doug Davis 8786d0e251
Merge pull request #386 from cneijenhuis/uri-reference-cleanup
Consistency: schemaurl uses URI-reference, protobuf uses URI-reference
2019-02-07 13:54:08 -05:00
Christoph Neijenhuis 17c32ea26b Consistency: schemaurl uses URI-reference, protobuf uses URI-reference
Signed-off-by: Christoph Neijenhuis <christoph.neijenhuis@commercetools.de>
2019-02-05 20:26:10 +01:00
Christoph Neijenhuis 70b65225c3 HTTP Transport Binding for batching JSON (#370)
* HTTP Transport Binding for batching JSON

Signed-off-by: Christoph Neijenhuis <christoph.neijenhuis@commercetools.de>

* Move JSON Batch into JSON Format; more generic HTTP transport

Signed-off-by: Christoph Neijenhuis <christoph.neijenhuis@commercetools.de>

* Make Travis happy: don't use lowercase should/have

Signed-off-by: Christoph Neijenhuis <christoph.neijenhuis@commercetools.de>

* Implement suggestions of Clemens

Signed-off-by: Christoph Neijenhuis <christoph.neijenhuis@commercetools.de>

* s/contenttype/datacontenttype/

Signed-off-by: Christoph Neijenhuis <christoph.neijenhuis@commercetools.de>

* add non-batching to clarify which format MUST be supported

Signed-off-by: Christoph Neijenhuis <christoph.neijenhuis@commercetools.de>
2019-02-05 10:08:29 -05:00
Fabio José 8791939b05 minLength for non-empty attributes, add schemaurl (#372)
* minLength for non-empty attributes, add schemaurl

Signed-off-by: Fabio José <fabiojose@gmail.com>

* Remove the 'const' from 'specversion' attribute

Signed-off-by: Fabio José <fabiojose@gmail.com>
2019-02-04 09:24:39 -05:00
Doug Davis 4ebd505142
Merge pull request #383 from Tapppi/del-eventtype-ref
Fix eventtype -> type reference in it's description
2019-01-30 18:23:01 -05:00
Tapani Moilanen 1a732bcefe Fix type reference in it's description
Signed-off-by: Tapani Moilanen <moilanen.tapani@gmail.com>
2019-01-31 00:51:07 +02:00
Doug Davis 2ba289a359
Merge pull request #375 from duglin/issue374
remove duplicate paragraph
2019-01-28 08:14:56 -05:00
Doug Davis de651d4d05
Merge pull request #376 from cneijenhuis/consistent-data-attribute
Minor: Format data consistently with the paragraph above
2019-01-28 08:13:42 -05:00
Christoph Neijenhuis 14e26672d4 Format data consistently with the paragraph above
Signed-off-by: Christoph Neijenhuis <christoph.neijenhuis@commercetools.de>
2019-01-28 11:08:45 +01:00
Doug Davis 908336c812 remove duplicate paragraph
Signed-off-by: Doug Davis <dug@us.ibm.com>
2019-01-27 12:40:01 -08:00
Doug Davis de299374dd
Merge pull request #363 from duglin/issue354
s/contenttype/datacontenttype/g
2019-01-24 13:42:33 -05:00
Doug Davis e050073a87
Merge pull request #366 from Tapppi/patch-1
Add Integer as allowed for Any in description of variant type
2019-01-24 13:38:55 -05:00
Tapani Moilanen 4fd3f1f83f Add Integer as allowed for Any in description of variant type
Signed-off-by: Tapani Moilanen <moilanen.tapani@gmail.com>
2019-01-24 19:38:09 +02:00
Doug Davis 7f405e33c9
Merge pull request #368 from duglin/addAnnounce
Add an announcement to our release process
2019-01-18 08:54:29 -05:00
Doug Davis 8335984277 s/contenttype/datatype/g
Closes #354

2 reasons for this change:
1 - it just makes sense to me that if you have a `foo` property, then
    the property the describes its type is called `footype`, not `bartype`.
2 - when a transport, like http, already has a `contenttype` property, there
    could be unnecessary confusion when the CloudEvents property is serialized
	along side the transport one. Meaning, people might use the wrong one
	since their names are almost the same.

Signed-off-by: Doug Davis <dug@us.ibm.com>
2019-01-18 05:33:49 -08:00
Doug Davis 408bb0d4c2 Add an announcement to our release process
Signed-off-by: Doug Davis <dug@us.ibm.com>
2019-01-17 10:39:30 -08:00
Christoph Neijenhuis 6412e76bbc Transports are responsible for batching messages (#360)
* Transports are responsible for batching messages

Signed-off-by: Christoph Neijenhuis <christoph.neijenhuis@commercetools.de>

* Batching in binding or in native spec

Signed-off-by: Christoph Neijenhuis <christoph.neijenhuis@commercetools.de>
2019-01-17 13:32:53 -05:00
alanconway 7c23f95b42 Specify range of Integer type exactly (#361)
* Specify range of Integer type exactly

"32 bit integer" is under-specified, there are multiple ways to encode an
integer in 32 bits with different ranges (signed, unsigned, twos-complement,
ones-complement etc.)

Proposed new wording: "signed 32-bit twos-complement"

Signed-off-by: Alan Conway <aconway@redhat.com>

* Integer range - correct wrapping and numeric typo.

Signed-off-by: Alan Conway <aconway@redhat.com>
2019-01-17 13:32:26 -05:00
Doug Davis b89c378f7d
Merge pull request #369 from cneijenhuis/http-transport-toc-fix
Minor fix for the TOC in the http transport binding
2019-01-14 09:00:51 -05:00
Christoph Neijenhuis 905daba6ab Fix TOC in http transport
Signed-off-by: Christoph Neijenhuis <christoph.neijenhuis@commercetools.de>
2019-01-14 14:51:25 +01:00
Doug Davis 03edf8a4d2
Merge pull request #362 from duglin/demo2
add KubeCon demo info
2019-01-13 06:23:47 -05:00
Doug Davis f056e7279c add KubeCon demo info
Signed-off-by: Doug Davis <dug@us.ibm.com>
2018-12-24 18:26:20 -08:00
Doug Davis 5a7c1cf7fa
Merge pull request #358 from duglin/v0.2
v0.2
2018-12-06 13:12:12 -05:00
Denis Makogon 36448a981f CloudEvents SDK spec proposal (#356)
* SDK spec

Signed-off-by: Denis Makogon <lildee1991@gmail.com>

* Addressing review comments

Signed-off-by: Denis Makogon <lildee1991@gmail.com>

* Addressing review comments

Signed-off-by: Denis Makogon <lildee1991@gmail.com>
2018-12-06 13:10:33 -05:00
Doug Davis c80314d934 v0.2
Signed-off-by: Doug Davis <dug@us.ibm.com>
2018-12-05 05:37:41 -08:00
Doug Davis 799852b472
Merge pull request #357 from duglin/version
Be explicit about what the specversion string is
2018-11-29 13:44:22 -05:00
Doug Davis 75c81180bd
Merge pull request #340 from duglin/versionEventType
Add clarity text and an example of versioning eventTypes
2018-11-29 13:44:02 -05:00
Doug Davis 3918ab1f04
Merge pull request #353 from duglin/primerExtensions
Add some rationale for our extensions decision
2018-11-29 13:43:27 -05:00
Jem Day 3fd5bc060c Amend example code to reflect changes made to context attribute names (#348)
Signed-off-by: Day, Jem <jday@paypal.com>
2018-11-29 13:36:23 -05:00
Rachel Myers cfe0663d72 Specify the media type for proto representations (#346)
* Specify the media type for proto representations

Signed-off-by: Rachel Myers <rachelmyers@google.com>

* Add `MUST` to media types in proto and json

Signed-off-by: Rachel Myers <rachelmyers@google.com>
2018-11-29 13:35:57 -05:00
Clemens Vasters ab0e6e2682 clarifications to address concerns raised in issue 185 (#343)
* clarifications to address concerns raised in issue 185

Signed-off-by: clemensv <clemensv@microsoft.com>

* clarifications to address concerns raised in issue 185

Signed-off-by: clemensv <clemensv@microsoft.com>
2018-11-29 13:35:33 -05:00
Doug Davis 49ed179ce1 Be explicit about what the specversion string is
We never actually said if its 0.1 or v0.1 or something else.

Signed-off-by: Doug Davis <dug@us.ibm.com>
2018-11-29 07:18:11 -08:00
Doug Davis 290c2d66dc
Merge pull request #355 from duglin/fixREADME
Administrivia nits
2018-11-26 13:34:12 -05:00
Doug Davis b6c93f3d63 Administrivia nits
- fix mailing list info
- add pointer to the shanghai presentations
- add refs to our SDK work
- remove old f2f comment

Signed-off-by: Doug Davis <dug@us.ibm.com>
2018-11-26 07:19:40 -08:00
Doug Davis ba8ad6f4fe Add some rationale for our extensions decision
The Primer is a good location to document some of our design decisions
without cluttering the spec with non-normative text. This is my first pass
at some of the reasons why we're serializing extensions as top-level
properties in JSON.

Note, as you review this please focus on whether the text accurately
reflects the reasons why we ended up with our current design. This PR
should not be used to question whether it was a good or bad decision.
If you want to question the decision itself then a new issue (or PR) is the
best place to do that - I'm just trying to document history.

Signed-off-by: Doug Davis <dug@us.ibm.com>
2018-11-24 11:49:29 -08:00
Doug Davis 6fe49f2062 add primer text about version strings
Signed-off-by: Doug Davis <dug@us.ibm.com>
2018-11-12 04:03:55 -08:00
Doug Davis d2959bae5d Add clarity text and an example of versioning eventTypes
Just because Austen wanted to see it.

Signed-off-by: Doug Davis <dug@us.ibm.com>
2018-11-12 03:40:42 -08:00
Doug Davis 8579f9762b
Merge pull request #339 from JemDay/attribute-consistency
Simplified/Reduced context property names.
2018-11-08 18:19:11 -05:00
Day, Jem 1c1d152b0e Issue #323
Simplified/Reduced context property names.

Signed-off-by: Day, Jem <jday@paypal.com>
2018-11-08 15:02:07 -08:00
Clemens Vasters 51f18fe4ca adding Integer support (#345)
* adding Integer mapping for JSON and AMQP

Signed-off-by: clemensv <clemensv@microsoft.com>

* clarifying scope of Any to include all other types

Signed-off-by: clemensv <clemensv@microsoft.com>
2018-11-08 16:30:27 -05:00
zpencer b6e997dee9 Add protobuf format (#295)
* Add protobuf format

This PR is meant for the spec as it is currently written, where the
extensions is an explicit bag. The focus of this PR is on the protobuf
format itself, not on the extensions proposal.

Signed-off-by: Spencer Fang <spencerfang@google.com>

* Avoid redundant BytesWrapper by using bytes directly.

Signed-off-by: Spencer Fang <spencerfang@google.com>

* Fix markdown links

Signed-off-by: Spencer Fang <spencerfang@google.com>

* Reformat to be 80 columns.

Signed-off-by: Spencer Fang <spencerfang@google.com>

* Only allow JSON data payloads

Efficient representation of binary bytes or proto payloads is not a
must have. The "data" field can represent bytes or serialized protos,
just in a less efficient matter.

I removed usages of these features to make the standard JSON look the
same as the CE JSON.

Signed-off-by: Spencer Fang <spencerfang@google.com>

* Clarify attributing casing styles

protobuf lower_snake_case attrs are turned into lowerCamelCase in the
proto standard JSON form. But it is legal to have top level attribute
fields that are not lowerCamelCase.

Signed-off-by: Spencer Fang <spencerfang@google.com>

* Update protobuf spec to use new design that favors forwards
compatibility over type safety.

Signed-off-by: Spencer Fang <spencerfang@google.com>

* Fix URL to pass linter

Signed-off-by: Spencer Fang <spencerfang@google.com>

* Fix whitespace

Signed-off-by: Spencer Fang <spencerfang@google.com>

* Address PR comments, add example.

Signed-off-by: Spencer Fang <spencerfang@google.com>

* Turn RFC references into links.

Signed-off-by: Spencer Fang <spencerfang@google.com>

* PR comments

- s/Attributes Atttributes/Attributes/
- s/required/mandated/
- Add protobuf-format.md to Makefile
- add cloudevent.proto

Signed-off-by: Spencer Fang <spencerfang@google.com>

* remove HTTP modes section

Signed-off-by: Spencer Fang <spencerfang@google.com>

* Reword confusing use of speficiation / below

Signed-off-by: Spencer Fang <spencerfang@google.com>
2018-11-08 14:51:21 -05:00
Doug Davis 86d0d9f0e2
Merge pull request #338 from cneijenhuis/clarify-uri-reference
Rename URI to URI-reference, fix JSON Schema
2018-11-08 14:34:38 -05:00
Doug Davis 5fd37875fa
Merge pull request #313 from dmigliori/Doug's-word-smithing
Word-smithing (event "producer" and "consumer")
2018-11-08 14:32:58 -05:00
dmigliori 8f044320be Update README.md
Signed-off-by: Doug Migliori <dmigliori@controlbeam.com>
2018-11-08 11:25:07 -08:00
Doug Davis 09ca0c3b1e
Merge pull request #335 from duglin/issue267
Add some newbie guidance
2018-11-08 13:38:47 -05:00
Doug Davis 84fcb8221a
Merge pull request #344 from JemDay/mqtt-ref
Add MQTT transport binding reference
2018-11-07 15:20:51 -05:00
Day, Jem 05ab2ae34c Add MQTT transport binding reference
Signed-off-by: Day, Jem <jday@paypal.com>
2018-11-07 11:36:22 -08:00
Christoph Neijenhuis 31850e15ff Rename URI to URI-reference, fix JSON Schema
Signed-off-by: Christoph Neijenhuis <christoph.neijenhuis@commercetools.de>
2018-11-02 14:46:14 +01:00
Fabio José a98078e5ad Some suggestions in Example section (#334)
* Some suggestions in Example section

Signed-off-by: Fabio José <fabiojose@gmail.com>

* Update the urn examples

- Add examples in source section and update the JSON examples.

Signed-off-by: Fabio José <fabiojose@gmail.com>

* Update spec.md

Remove the second example of serialized JSON and update the `source` examples list.

Signed-off-by: Fabio José <fabiojose@gmail.com>
2018-11-01 14:59:38 -04:00
Doug Davis 6fce2d1e43
Merge pull request #310 from duglin/issue271
Define our versioning scheme across our docs
2018-11-01 14:08:57 -04:00
Clemens Vasters 044d6aa58a Restricting character set for attribute names (#321)
* attribute names

Signed-off-by: Clemens Vasters <clemensv@microsoft.com>

* dropping 'normatively named' restriction

Signed-off-by: Clemens Vasters <clemensv@microsoft.com>

* fixing merge bugs

Signed-off-by: Clemens Vasters <clemensv@microsoft.com>
2018-11-01 14:07:29 -04:00
Doug Davis e32624893a Add some newbie guidance
Signed-off-by: Doug Davis <dug@us.ibm.com>
2018-10-31 09:39:30 -07:00
Doug Davis 799d982221
Merge pull request #336 from duglin/fixlinks
Fix bad hrefs due to w3c move
2018-10-31 12:37:39 -04:00
Doug Davis 5f1b34bedd Fix bad hrefs due to w3c move
Signed-off-by: Doug Davis <dug@us.ibm.com>
2018-10-31 08:44:42 -07:00
Clemens Vasters 7ac6408c66 Encoding exceptions (#322)
* Special encodings for extensions

Signed-off-by: Clemens Vasters <clemensv@microsoft.com>

* Special encodings for extensions in transports

Signed-off-by: Clemens Vasters <clemensv@microsoft.com>

* RFC2119 errors

Signed-off-by: Clemens Vasters <clemensv@microsoft.com>
2018-10-15 10:53:49 -04:00
Doug Davis 1e127a28cd
Merge pull request #320 from duglin/readme
Clarify our docs in the README per #268
2018-10-04 13:23:28 -07:00
Doug Davis ef2580cae4
Merge pull request #319 from duglin/roadmap
Add some dates to our completed roadmap items
2018-10-04 13:23:05 -07:00
Doug Davis 06f5e0acdc
Minor Twist to clarify the attendance count - was #316 (#325)
* Minor twist to clarify the attendenace count

Signed-off-by: cathyhongzhang <cathy.h.zhang@huawei.com>

* Twist for clarification of attendance count

Signed-off-by: cathyhongzhang <cathy.h.zhang@huawei.com>

* update per Doug's comment

Signed-off-by: cathyhongzhang <cathy.h.zhang@huawei.com>

* minor twist

Signed-off-by: cathyhongzhang <cathy.h.zhang@huawei.com>

* update per Doug's suggestion

Signed-off-by: cathyhongzhang <cathy.h.zhang@huawei.com>
2018-10-04 13:21:43 -07:00
Doug Davis 6d4ea30d1e Clarify our docs in the README per #268
Closes #268

Per #268 I tried to make it clear which specs are optional by adding
sections/headers to the table of docs we produce.

ping @dmlb2000 - does this address your concern?

Signed-off-by: Doug Davis <dug@us.ibm.com>
2018-09-28 05:06:02 -07:00
Doug Davis 366c5a246d Define our versioning scheme across our docs
Closes #271

Signed-off-by: Doug Davis <dug@us.ibm.com>
2018-09-27 12:51:45 -07:00
Doug Davis 9169cd8c02 Add some dates to our complete roadmap items
While it might be clear based on our version number where we are
in our plan/roadmap - I thought it might be good to put dates next
to each milestone.

For v0.1 it was easy, I just picked the date the release was cut.
For "Setup" it was a bit of a guess since its a unclear when we actually
complete ALL of those items. I picked Feb 26th since that was the date
we merged Dan's PR to add a LICENSE doc. It seemed as good of a date as
any - not sure it matters much.

Signed-off-by: Doug Davis <dug@us.ibm.com>
2018-09-27 12:41:21 -07:00
Doug Davis 115493fded
Add 'sequence' attribute (#291)
* Add 'ordinal' attribute

Fixes: #191

I didn't address any of the comments in #191 because I wasn't sure how
the WG in general felt about them. So please speak up in this PR if you'd like
to see a change.

Signed-off-by: Doug Davis <dug@us.ibm.com>

* use sequence and add more clarifying text

Signed-off-by: Doug Davis <dug@us.ibm.com>

* grab Christoph's suggested text

Signed-off-by: Doug Davis <dug@us.ibm.com>

* more tweaks

Signed-off-by: Doug Davis <dug@us.ibm.com>
2018-09-27 13:33:06 -04:00
Doug Davis e295b18840
Merge pull request #308 from duglin/extensionBar
Define our "bar" for new extensions
2018-09-27 13:30:09 -04:00
Doug Davis f39f2f700c
Merge pull request #315 from duglin/readme
Very minor tweaks to README
2018-09-27 13:29:24 -04:00
Doug Davis 345a288b72 Very minor tweaks to README
- Update our description since we're not really new any more
- Add a note about when we became a sandbox project, and a ref to
  the TOC minutes in which we were approved - mainly so there's a record
  of it someplace.  I've been asked for this info before and it should be more
  easily found.

Signed-off-by: Doug Davis <dug@us.ibm.com>
2018-09-27 10:28:45 -07:00
Doug Davis 8f3f59b12a
Merge pull request #314 from duglin/gov1
Make OWNERS point to the spreadsheet for our list of 'approvers'
2018-09-27 13:26:18 -04:00
Doug Davis 5b67f0c8be Make OWNERS point to the spreadsheet for our list of 'approvers'
Right now our 'approvers' == 'Voting members', so make that clear in our
OWNERS doc - just for completeness.

Signed-off-by: Doug Davis <dug@us.ibm.com>
2018-09-20 17:39:55 -07:00
Doug Davis a793ec72fa Define our "bar" for new extensions
Signed-off-by: Doug Davis <dug@us.ibm.com>
2018-09-20 10:52:45 -07:00
Doug Davis 2a173fe7e9
Minor tweaks to our governance docs (#309)
- Just writing down what we do/have today
- We're not a WG, we're a sandbox project so I tried
  to remove all references to us being a WG (I left the refs to the
  Serverless WG though)
- wrapped some stuff at 80 cols
- replaced some tabs with spaces, because tabs are evil

Signed-off-by: Doug Davis <dug@us.ibm.com>
2018-09-20 13:31:55 -04:00
Sarah Allen 740e30834d qualifying projects (#298)
* qualifying projects

de-facto standards often emerge from the community
joining a consortia should not be necessary

Signed-off-by: Sarah Allen <sarahallen@google.com>

* addressed feedback in the PR comments

Signed-off-by: Sarah Allen <sarahallen@google.com>
2018-09-20 13:21:54 -04:00
Clemens Vasters a88f4f2c00 Renaming Object to Any for issue 167 (#306)
Signed-off-by: Clemens Vasters <clemensv@microsoft.com>
2018-09-20 13:21:21 -04:00
cathy fd1be85b0d Add clarification on including additional context attributes (#301)
* Add clarification on including additional context attributes

Signed-off-by: cathyhongzhang <cathy.h.zhang@huawei.com>

* Incorporate Christoph's comment on duplication

Signed-off-by: cathyhongzhang <cathy.h.zhang@huawei.com>

* Update the PR per Christoph's comment

Signed-off-by: cathyhongzhang <cathy.h.zhang@huawei.com>

* move the paragraph to the "extension attributes" section

Signed-off-by: cathyhongzhang <cathy.h.zhang@huawei.com>

* Address comments in the meeting--move the section to the end
of "Extension Attributes", and change "it is still suggested" to "SHOULD"

Signed-off-by: cathyhongzhang <cathy.h.zhang@huawei.com>

* minor edit to change "MAY" to "can"

Signed-off-by: cathyhongzhang <cathy.h.zhang@huawei.com>
2018-09-14 12:49:17 -04:00
Doug Davis 6b73fa8d38
Merge pull request #304 from alexcontini/contini-cloudevents-logos
replace logos with readme file
2018-09-10 08:39:50 -04:00
Alex Contini 97858c44c0 replace logos with readme file
Signed-off-by: Alex Contini <acontini@linuxfoundation.org>
2018-09-10 08:30:41 -04:00
Sarah Allen 1adb7cf676 async voting process (#292)
* async voting

this is based on what I've observed in TOC votes and seems to work well in practice (though I've only followed a few votes)

Signed-off-by: Sarah Allen <sarahallen@google.com>

* clarifications to address feedback

Signed-off-by: Sarah Allen <sarahallen@google.com>

* yes/no vote comments to avoid accidental voting

Signed-off-by: Sarah Allen <sarahallen@google.com>
2018-09-06 17:42:58 -04:00
Christoph Neijenhuis 803db224f2 Technical motivation for keeping extension attributes minimal (#287)
* Paragraph on keeping extension attributes minimal

Signed-off-by: Christoph Neijenhuis <christoph.neijenhuis@commercetools.de>

* Guidance applies to single CloudEvent, better wording

Signed-off-by: Christoph Neijenhuis <christoph.neijenhuis@commercetools.de>
2018-08-31 09:28:25 -05:00
Doug Davis aaba99e019
Require F2F meetings be announced at least 4 weeks in advance (#293)
Signed-off-by: Doug Davis <dug@us.ibm.com>
2018-08-30 12:21:53 -05:00
Austen a0137391e6 add artwork (#297)
Signed-off-by: Austen Collins <austen@serverless.com>
2018-08-30 12:19:23 -05:00
Doug Davis 214454398b
Move extension serialization into other specs & rename extensions.md (#277)
* Move extension serialization into other specs & rename extensions.md

Replacement for PR #225

Made spec.md into more of an infoSet spec that just defines the properties
of a CloudEvent and abstractly talks about how extension properties can be
defined by others.

Added some text to the primer to help clarify when extensions should be
used and when extra properties are meant to be part of the event
(`data`) itself.

Renamed "extensions.md" to "experimental.md" because there was some
confusion that CE extensions were only allowed to come from that doc.
Hopefully, renaming it will make it clear that extensions can come from
anythere - not just that doc.

Left each serialization/transport-binding spec to deal with extensions
in their own way. Most say nothing special about them, which means they
will be serialized just like any other CE attribute.

Based on the discussions in:
https://docs.google.com/document/d/1h4A4ys3x6OmfEIv1gqlOt0kroVRfRO3JewlLunlxTIg/edit# ,
while it wasn't unanimous it did seem there was more people leaning towards
serializing extensions like all other attributes due to the pain involved
in: dealing with promotion of extension to 1st class properties, the desire
to pass along all extensions (top-level or nested ones) to backend components,
and support for future attributes added to the spec. See the doc for more
details.

Signed-off-by: Doug Davis <dug@us.ibm.com>
2018-08-30 12:18:26 -05:00
Clemens Vasters 20b1108882 Qualifying-protocols-and-encodings.md (#254)
* Qualifying-protocols-and-encodings.md

Signed-off-by: Clemens Vasters <clemensv@microsoft.com>

* updating per discussion in the PR

Signed-off-by: Clemens Vasters <clemensv@microsoft.com>

* Adding open source organization clause for equivalence with protocol standards org clause

Signed-off-by: Clemens Vasters <clemensv@microsoft.com>

* move into the primer

Signed-off-by: Doug Davis <dug@us.ibm.com>
2018-08-16 15:50:42 -04:00
David Brown fbb6dc50b6 Add JSONSchema Validation (#285)
This adds a JSONSchema validation document and some docs on how
to validate events in JSON.

Fix #272

Signed-off-by: David Brown <dmlb2000@gmail.com>
2018-08-16 14:43:56 -04:00
Thomas Bouldin 3248e31cab Add sampling extension. (#243)
* Add sampling extension.

This pull request supercedes #76 and builds upon #242.

Per agreement at the f2f meeting 2018-06-15, this will be ratified
as an extension but not currently as part of the core spec. The
early inclusion of the spec and the ability for side-cars to impose
sampling early in the pipeline make it reasonable to start with
this as an extension.

I know the original author hoped to make this a core feature, though
there are two upsides:
1. Due to other decisions on 2018-06-15, this will have zero impact
   on JSON encoding (but will in Proto and may in SDKs)
2. Extensions now get a whole document. This lets us pitch sampling
   in more detail.

Necessary additional changes:
* Added `Integer` to our type system
* Added convention for how scalar extensions should be documented.
  I'm not really excited about this proposal so others are welcome.

Special thanks to @maplebed for kicking this effort off.

Signed-off-by: Thomas Bouldin <inlined@google.com>

* PR feedback; also add conttent to extensions.md

Signed-off-by: Thomas Bouldin <inlined@google.com>

* @douglin doesn't like the world 'may' 😉

Signed-off-by: Thomas Bouldin <inlined@google.com>

* Add 'e.g.' to list of scalar types in conventions

Signed-off-by: Thomas Bouldin <inlined@google.com>
2018-08-16 14:42:52 -04:00
Sandro Martini 78f5d09d9a Add CloudEvent.js to open source resources (#283)
Signed-off-by: Sandro Martini <sandro.martini@gmail.com>
2018-08-01 21:05:01 -04:00
Matthew Magaldi 2696cb2b35 adding argo-events to open source (#275)
Signed-off-by: Matt Magaldi <matt.magaldi@blackrock.com>
2018-07-23 16:40:58 -04:00
Karol Stępniewski 1e8b5e0716 Remove leftover from the primer (#269)
Seems like a leftover from the draft document got through.

Signed-off-by: Karol Stepniewski <kstepniewski@vmware.com>
2018-07-17 21:53:55 -07:00
Doug Davis 86e443ca85
Merge pull request #256 from deissnerk/master
Removed eventTypeVersion
2018-07-05 13:46:17 -04:00
Doug Davis f31c3b3543
Merge pull request #255 from clemensv/patch-2
Mapping rules for attributes/headers
2018-07-05 13:45:56 -04:00
Doug Davis 769dc831e1
Merge pull request #238 from duglin/primer
First pass at a primer
2018-07-05 13:45:29 -04:00
Doug Davis adc8eba5aa
Merge pull request #262 from williamhogman/master
Add cloudevents-python & CloudEvents.live to open-source
2018-07-04 15:07:51 -04:00
William Rudenmalm 9430508349 Add cloudevents-python & CloudEvents.live to open-source
This adds the cloudevents-python library and the CloudEvents.live debugger.

Signed-off-by: William Rudenmalm <me@whn.se>
2018-07-04 20:36:12 +02:00
Doug Davis 7cd777acf7
Merge pull request #263 from moderation/master
Add Gloo and Dispatch as open-source projects that support CloudEvents.
2018-07-03 18:11:24 -04:00
Michael Payne db11438ed3 Add Gloo and Dispatch as open-source projects that support CloudEvents.
Signed-off-by: Michael Payne <michael@sooper.org>
2018-07-03 13:31:29 -07:00
Doug Davis 0892e1c842 First pass at a primer
Signed-off-by: Doug Davis <dug@us.ibm.com>
2018-06-29 07:00:33 -07:00
Klaus Deissner 007eb07754 Removed remaining references to eventTypeVersion
Removed the term version from the schemaURL definition.

Signed-off-by: Klaus Deissner <klaus.deissner@sap.com>
2018-06-29 13:40:42 +02:00
Klaus Deissner 6e7b4271eb Removed eventTypeVersion
This solves https://github.com/cloudevents/spec/issues/142

Signed-off-by: Klaus Deissner <klaus.deissner@sap.com>
2018-06-29 13:40:42 +02:00
Doug Davis 641a3ef156
Merge pull request #244 from inlined/add-practicalities-milestone
Add practical constraints exercise to 0.3 roadmap.
2018-06-28 17:49:40 -04:00
Doug Davis 669e7c5a50
Merge pull request #242 from inlined/extensions-breakout
Factor Distributed Tracing extension into new doc.
2018-06-28 17:49:22 -04:00
Doug Davis aa60216dcb
Merge pull request #253 from duglin/issue250
Fix bad href
2018-06-27 19:01:57 +08:00
Clemens Vasters 4b9d9961ea
RFC fix
Signed-off-by: clemensv@microsoft.com
2018-06-26 19:18:40 +02:00
Clemens Vasters 201b84dcf0 Mapping rules for attributes/headers
Signed-off-by: Clemens Vasters <clemensv@microsoft.com>
2018-06-26 19:00:47 +02:00
Doug Davis c304778fe9 Fix bad href
Closes #250

Signed-off-by: Doug Davis <dug@us.ibm.com>
2018-06-26 11:08:55 +08:00
Doug Davis 42d7635ca0
Merge pull request #248 from lulf/add-amqp-links
Add links to AMQP transport and event formats
2018-06-21 21:46:29 +09:00
Ulf Lilleengen 101e132bdb Add links to AMQP transport and event formats
Signed-off-by: Ulf Lilleengen <lulf@redhat.com>
2018-06-21 12:40:19 +02:00
Doug Davis 1ccd7e0a42
Merge pull request #247 from glennblock/extend-sdk
Adding Extend SDK
2018-06-21 14:46:06 +09:00
Glenn Block 3ba9325f5f Adding Extend
Signed-off-by: Glenn Block <glenn.block@gmail.com>
2018-06-21 01:21:30 -04:00
Doug Davis 76b68d023c
Merge pull request #245 from btbd/update
Added CloudEvents Verify to open-source.md
2018-06-21 12:18:27 +09:00
btbd 2bc8c05b0a Added CloudEvents Verify
Signed-off-by: btbd <b4davis88@gmail.com>
2018-06-20 21:26:58 -04:00
Thomas Bouldin 533f079f41 Add practical constraints exercise to 0.3 roadmap.
In the 2018-06-15 f2f, we agreed to holistically revisit the spec
to look for issues that may arise with our spec in practice.

As a first swag, I placed this in the 0.3 milestone since it
has security-related issues. I could also see putting this in
the 0.4 milestone since it finalizes serialization and protocl mappings.

Signed-off-by: Thomas Bouldin <inlined@google.com>
2018-06-20 14:37:34 -07:00
Thomas Bouldin 344cb27c96 s/Known/Documented
Signed-off-by: Thomas Bouldin <inlined@google.com>
2018-06-20 13:49:32 -07:00
Doug Davis d51bf8eb06
Merge pull request #240 from inlined/add-gitignore
Add popular IDEs to .gitignore
2018-06-21 05:30:08 +09:00
Thomas Bouldin b812aea1a2 Add popular IDEs to .gitignore
It's very helpful to use IDEs that let us visualize the rendered markdown. It would be more helpful to not worry about local project files getting added to commits.

Signed-off-by: Thomas Bouldin <inlined@google.com>
2018-06-20 12:32:03 -07:00
Thomas Bouldin 815c2521fc Factor Distributed Tracing extension into new doc.
* Extends extensions.md to clarify that RFC 2119 keywords
  are only for those who implement an extension.
* Notes our resolved rules that each memory format defines
  extensions' placement and each transport binding defines
  a default placement which an extension may override.
* Refactor the contents now in extensions/distributed-tracing.md
  as a first SWAG at a reusable template.

Signed-off-by: Thomas Bouldin <inlined@google.com>
2018-06-20 12:30:01 -07:00
Doug Davis b309155d6f
Merge pull request #236 from mthenw/patch-1
Add Event Gateway to the OSS list
2018-06-20 01:17:56 -05:00
Maciej Winnicki 286ba30e2a
Add Event Gateway to the OSS list
Signed-off-by: Maciej Winnicki <maciej.winnicki@serverless.com>
2018-06-18 16:12:02 +02:00
Doug Davis f863d6417d
Merge pull request #227 from inlined/tracing
Add extension for Distributed Tracing spec.
2018-06-18 01:38:21 -07:00
Doug Davis 1f63db0b20
Merge pull request #172 from clemensv/clarifyContentType
Clarify contentType
2018-06-18 01:36:35 -07:00
Doug Davis 2890d87892
Merge pull request #234 from matzew/Strombrau_gateway
Adding Gateway POC
2018-06-12 09:48:59 -07:00
Matthias Wessendorf ce986bf70c ✉️ Adding Gateway POC
Signed-off-by: Matthias Wessendorf <matzew@apache.org>
2018-06-12 18:09:22 +02:00
Doug Davis 0066d9294b
Merge pull request #233 from johnmccabe/typo
Fix some simple typos in docs
2018-06-07 17:22:32 -04:00
Doug Davis a3cc5cfc47
Merge pull request #224 from duglin/addExample
Add an example to the spec and clean-up a little
2018-06-07 17:15:34 -04:00
Doug Davis c0222f9148
Merge pull request #226 from duglin/fixProps
s/property/attribute/ to be consistent
2018-06-07 17:14:06 -04:00
Clemens Vasters 8bc805bf5d AMQP 1.0 transport and AMQP type system mapping (#157)
* AMQP baseline

Signed-off-by: Clemens Vasters <clemensv@microsoft.com>

* JSON format updates merged

Signed-off-by: Clemens Vasters <clemensv@microsoft.com>

* reference fixups

Signed-off-by: Clemens Vasters <clemensv@microsoft.com>

* addressing feedback

Signed-off-by: Clemens Vasters <clemensv@microsoft.com>

* addressing feedback and naming alignment

Signed-off-by: Clemens Vasters <clemensv@microsoft.com>
2018-06-07 17:12:07 -04:00
Doug Davis 0fe6fd5999
Merge pull request #215 from ColinSullivan1/add-nats-transport
NATS transport binding
2018-06-07 17:11:06 -04:00
Colin Sullivan 3785158933 Add NATS transport binding proposal
Signed-off-by: Colin Sullivan <colin@synadia.com>
2018-06-07 14:34:39 -06:00
John McCabe b8e72b5965
Fix some simple typos in docs
Signed-off-by: John McCabe <john@johnmccabe.net>
2018-06-07 18:28:09 +01:00
Thomas Bouldin 9dd59e1369 PR fixups
Signed-off-by: Thomas Bouldin <inlined@google.com>
2018-06-07 09:29:14 -07:00
Clemens Vasters 71898d4c14
clarify omission rules for contentType 2018-06-07 17:50:14 +02:00
Clemens Vasters 1f1894f505
added explanation about relation to transports 2018-06-07 17:43:24 +02:00
Doug Davis a0ddcff0e7
Merge pull request #231 from rperelma/patch-2
Add reference to Adobe I/O Events
2018-06-06 18:51:48 -04:00
Roberto Perelman a5819299f5
Add reference to Adobe I/O Events
Signed-off-by: Roberto Perelman <rperelma@adobe.com>
2018-06-06 15:35:31 -07:00
Doug Davis a1dbe2e292
Merge pull request #229 from duglin/f2f
add f2f info
2018-06-06 08:21:11 -04:00
Doug Davis a15de97f31 add f2f info
Signed-off-by: Doug Davis <dug@us.ibm.com>
2018-06-05 13:10:25 -07:00
Doug Davis 53bfd78b66
Merge pull request #211 from justinyoo/master
Add clarification for "implied" JSON content type to handle data attribute
2018-05-31 21:26:06 -04:00
Doug Davis ed3b74ed79
Merge pull request #212 from duglin/roadmap
update roadmap
2018-05-31 21:24:48 -04:00
Doug Davis 3278e888f0
Merge pull request #158 from clemensv/mqttBinding
MQTT 3.1.1 and 5.0 transport binding
2018-05-31 21:23:48 -04:00
Thomas Bouldin 3ee90577d4 Add extension for Distrubted Tracing spec.
I think this merits the initial statnce of being an extension
for a few reasons:

1. I want to adhere to the CNCF policy against kingmaking even
   though I think the world is better off with one interoperable
   tracing standard.
2. Nothing in the trace state should have an effect on
   application logic.
3. I like exercising our thoughts on extensions.

Signed-off-by: Thomas Bouldin <inlined@google.com>
2018-05-31 08:55:52 -07:00
Clemens Vasters 29fd760778 MQTT proposal, rebase
Signed-off-by: Clemens Vasters <clemensv@microsoft.com>
2018-05-31 08:33:25 -07:00
Doug Davis 8378b0881d s/property/attribute/ to be consistent
Signed-off-by: Doug Davis <dug@us.ibm.com>
2018-05-31 08:12:31 -07:00
Doug Davis 96704f2262 Add an example to the spec and clean-up a little
I found it a bit odd that the spec never included an example CloudEvent.
People would have to go to one of the other docs to actually see what
one looked like. For me, its sometimes easier to full understand something
when I can see a real example of what is being defined. Having people leave
our doc to see one felt odd so I just copied one from the JSON mapping spec.

While in there I noticed that our TOC wasn't consistent w.r.t. what we
included so I put all 1st and 2nd level headings in there (excluding the
ones before the TOC).

Also, the TOC included references to two docs w/o any explanation around
them - the usecases and example events from some popular eventing systems.
None of these are normative so they felt really odd to be in our spec's
TOC. However, since they are useful bits of information, I added a pointer
to them from our README instead. This also provides a bit of explanation
about why they exist in our repo at all.

Signed-off-by: Doug Davis <dug@us.ibm.com>
2018-05-31 07:28:58 -07:00
Doug Davis 6632f9260e update roadmap
Signed-off-by: Doug Davis <dug@us.ibm.com>
2018-05-30 18:22:33 -07:00
Doug Davis aa594ddb67
Merge pull request #223 from duglin/mailinglist
readme stuff for email
2018-05-30 20:27:17 -04:00
Doug Davis 348f9c9801 readme stuff for email
Signed-off-by: Doug Davis <dug@us.ibm.com>
2018-05-30 17:20:35 -07:00
Doug Davis 035124a9c9
Merge pull request #222 from idvoretskyi/master
Mailing list updated
2018-05-30 19:58:55 -04:00
Ihor Dvoretskyi 96552dba47 Mailing list updated
Signed-off-by: Ihor Dvoretskyi <ihor@linux.com>
2018-05-30 23:52:06 +00:00
Doug Davis d8e8a27473
Merge pull request #221 from matzew/jcloudevents
adding link to jcloudevents
2018-05-30 11:22:17 -04:00
Matthias Wessendorf 01f8352c2e adding link to jcloudevents
Signed-off-by: Matthias Wessendorf <matzew@apache.org>
2018-05-30 16:56:08 +02:00
Doug Davis 1693eab847
Merge pull request #220 from duglin/fixTool
fix issue with filenames starting with http
2018-05-29 16:27:23 -04:00
Doug Davis 181f3ef57f fix issue with filenames starting with http
Signed-off-by: Doug Davis <dug@us.ibm.com>
2018-05-29 12:25:59 -07:00
Justin Yoo 7bfb879f1e Fix typo
Signed-off-by: Justin Yoo <justin.yoojh@gmail.com>
2018-05-29 22:13:16 +10:00
Justin Yoo cf6392597f Change SHOULD to MUST for known JSON media types
Signed-off-by: Justin Yoo <justin.yoojh@gmail.com>
2018-05-29 22:03:50 +10:00
Justin Yoo 9e8831374f Merge branch 'master' of https://github.com/cloudevents/spec 2018-05-29 21:56:39 +10:00
Doug Davis 2c21a61fad
Merge pull request #219 from sslavic/webhook-spec-initial-draft-ref
Reference web hook spec draft in readme
2018-05-25 07:06:04 -04:00
Stevo Slavic 1e7a4102de Reference web hook spec draft in readme
Signed-off-by: Stevo Slavic <sslavic@gmail.com>
2018-05-25 12:15:08 +02:00
Doug Davis 4f3cebbc8d
Merge pull request #216 from sslavic/http-webhook-spec-phrase-checker
Enable phrase checker for webhook spec
2018-05-24 20:23:39 -04:00
Stevo Slavic 2767593781 Enable phrase checker for webhook spec
Signed-off-by: Stevo Slavic <sslavic@gmail.com>
2018-05-24 23:35:10 +02:00
Doug Davis 1c7646aa22
Merge pull request #213 from duglin/fixREADME
update pict URL
2018-05-24 14:58:47 -04:00
Doug Davis 2de374b985 update pict URL
Signed-off-by: Doug Davis <dug@us.ibm.com>
2018-05-24 11:50:28 -07:00
Doug Davis 5f086f8a30
Merge pull request #155 from clemensv/httpWebHook
HTTP WebHook Specification
2018-05-24 14:19:55 -04:00
Justin Yoo 16cea9c555 Merge branch 'master' of https://github.com/cloudevents/spec 2018-05-18 09:10:24 +10:00
Justin Yoo b4ec8edfef Change words on json-format.md for consistency
- data member -> data attribute

Signed-off-by: Justin Yoo <justin.yoojh@gmail.com>
2018-05-18 09:10:06 +10:00
Doug Davis f6584b2239
Merge pull request #198 from duglin/alt131
Pull 'data' out from under 'context attributes'
2018-05-17 15:47:22 -04:00
Clemens Vasters 04e0ca37bb Link fixes, token clarification
Signed-off-by: Clemens Vasters <clemensv@microsoft.com>
2018-05-17 19:02:21 +02:00
Justin Yoo c75e2fd278 Add data attribute handling based on JSON "implied" content type
- Issue cloudevents/spec#208

Signed-off-by: Justin Yoo <justin.yoojh@gmail.com>
2018-05-17 23:31:26 +10:00
Chris Aniszczyk ac88470f92 Add reference to CNCF sandbox (#210)
Signed-off-by: Chris Aniszczyk <caniszczyk@gmail.com>
Signed-off-by: Doug Davis <dug@us.ibm.com>
2018-05-16 23:25:24 -04:00
Clemens Vasters f481c8f941 Webhook feedback
Signed-off-by: Clemens Vasters <clemensv@microsoft.com>
2018-05-16 15:40:31 +02:00
Laird Nelson 1cbc2640fa Adds microBean CloudEvents to open-source.md (#203)
* Adds microBean CloudEvents to open-source.md

Signed-off-by: Laird Nelson <ljnelson@gmail.com>

* Incorporating @duglin's comments.

Signed-off-by: Laird Nelson <ljnelson@gmail.com>
2018-05-09 21:24:15 -04:00
Justin Yoo 15bd22775a Add CloudEvents.NET as a .NET implementation project (#200)
* Fix typo on spec.md

- in the source section

Signed-off-by: Justin Yoo <justin.yoojh@gmail.com>

* Add an open source project

- CloudEvents.NET as a .NET implementation of the spec

Signed-off-by: Justin Yoo <justin.yoojh@gmail.com>

* Fix document links

- point to the correct relative location

Signed-off-by: Justin Yoo <justin.yoojh@gmail.com>

* Remove example blurb from open-source.md

Signed-off-by: Justin Yoo <justin.yoojh@gmail.com>
2018-05-09 20:37:37 -04:00
Justin Yoo a3732eebc7 Remove example blurb from open-source.md
Signed-off-by: Justin Yoo <justin.yoojh@gmail.com>
2018-05-10 08:52:14 +10:00
Justin Yoo 84f3800d5f Fix document links
- point to the correct relative location

Signed-off-by: Justin Yoo <justin.yoojh@gmail.com>
2018-05-10 02:07:30 +10:00
Justin Yoo 1d764a6d10 Add an open source project
- CloudEvents.NET as a .NET implementation of the spec

Signed-off-by: Justin Yoo <justin.yoojh@gmail.com>
2018-05-10 01:53:24 +10:00
Justin Yoo b8c4c85d17 Fix typo on spec.md
- in the source section

Signed-off-by: Justin Yoo <justin.yoojh@gmail.com>
2018-05-10 01:52:03 +10:00
Doug Davis 8af10f0df1
Merge pull request #194 from duglin/demos
Add links to people's demo code
2018-05-09 09:02:29 -04:00
Doug Davis 149d623cf3 Add links to people's demo code
Signed-off-by: Doug Davis <dug@us.ibm.com>
2018-05-09 05:58:00 -07:00
Doug Davis 1106dc65c1
Merge pull request #193 from nerdyyatrice/master
add Alibaba to the contributor list
2018-05-09 08:42:07 -04:00
Doug Davis 7dea85960f Pull 'data' out from under 'context attributes'
Closes #131

Signed-off-by: Doug Davis <dug@us.ibm.com>
2018-05-08 13:32:23 -07:00
Ryan Zhang 5aa135fe7d add Alibaba to the contributor list
Signed-off-by: Ryan Zhang <y.zhang@alibaba-inc.com>
2018-05-07 19:55:10 -07:00
Doug Davis 63a8e0f898
Merge pull request #182 from duglin/addDemo
Add page for our KubeCon 2018 EU demos
2018-05-02 23:17:04 +02:00
Doug Davis 3af5c947da Add page for our KubeCon 2018 EU demos
Signed-off-by: Doug Davis <dug@us.ibm.com>
2018-05-02 13:59:11 -07:00
Sarah Allen e0d02d7603 proposes a process for highlighting code experiments (#159)
* propoes a process for highlighting code experiments

This was an Action Item from Serverless WG meeting

Signed-off-by: Sarah Allen <sarahallen@google.com>

* link to community section from main readme

small improvements addressing feedback on the PR

Signed-off-by: Sarah Allen <sarahallen@google.com>

* fix punctuation

Signed-off-by: Sarah Allen <sarahallen@google.com>
2018-04-30 03:55:43 -04:00
Clemens Vasters dc8bab78bf Definition "Context" #86 (#92)
* Definition "Context" #86

* Update spec.md

* picking up Doug's definition per PR discussion

Signed-off-by: Clemens Vasters <clemensv@microsoft.com>
2018-04-26 22:30:49 -04:00
Doug Davis b7aff53e13
Merge pull request #181 from markpeek/markpeek-dispatch-update
Fix name copy/paste and update Dispatch project link
2018-04-26 21:07:00 -04:00
Mark Peek 7eb3def214 Fix name copy/paste and update Dispatch project link
Signed-off-by: Mark Peek <markpeek@vmware.com>
2018-04-26 18:04:54 -07:00
Doug Davis 102105534b
Merge pull request #176 from duglin/Issue168
Make http header names case-insensitive
2018-04-26 21:02:41 -04:00
Doug Davis c3acbb6d74 Make http header names case-insensitive
Closes #168

Signed-off-by: Doug Davis <dug@us.ibm.com>
2018-04-26 17:43:19 -07:00
Doug Davis 75f15931e8
Merge pull request #178 from deissnerk/master
Updated the list of SAP contributors
2018-04-26 20:42:30 -04:00
Doug Davis caa2c2f976
Merge pull request #180 from yaronha/igz_contrib
update iguazio contribs info
2018-04-26 20:41:52 -04:00
Yaron Haviv 4a8216e746 update iguazio contribs info
Signed-off-by: Yaron Haviv <yaronh@iguazio.com>
2018-04-27 01:11:36 +03:00
Klaus Deissner 68d816ff0a Added Stevo, myself and kubeless to the SAP section
Signed-off-by: Klaus Deissner <klaus.deissner@sap.com>
2018-04-26 19:27:21 +02:00
Doug Davis 1e11428d31
Merge pull request #174 from delabassee/master
fixed link typo
2018-04-23 09:36:21 -04:00
David Delabassée 2a086e038c fixed link typo
Signed-off-by: David Delabassée <david.delabassee@gmail.com>
2018-04-23 15:22:37 +02:00
Clemens Vasters 99b68fa163 deep-link fix
Signed-off-by: Clemens Vasters <clemensv@microsoft.com>
2018-04-23 09:35:27 +02:00
Clemens Vasters fe41032fb3 JSON event format link fix
Signed-off-by: Clemens Vasters <clemensv@microsoft.com>
2018-04-23 09:30:47 +02:00
Clemens Vasters 63e0db4ef4 contentType clarification
Signed-off-by: Clemens Vasters <clemensv@microsoft.com>
2018-04-23 08:44:24 +02:00
Clemens Vasters 499abb95cb clarifying role of contentType
Signed-off-by: Clemens Vasters <clemensv@microsoft.com>
2018-04-20 08:43:44 +02:00
Clemens Vasters 1a94af6d39 add status code 415 and error status clarification
Signed-off-by: Clemens Vasters <clemensv@microsoft.com>
2018-04-17 20:46:15 +02:00
Clemens Vasters 93e8916747 Added 201 support, squashed fixes by Tom Kerkhove to comply with DCO
Signed-off-by: Clemens Vasters <clemensv@microsoft.com>
2018-04-17 12:49:08 +02:00
Clemens Vasters 720086a590 references section
Signed-off-by: Clemens Vasters <clemensv@microsoft.com>
2018-04-11 20:47:41 -07:00
Clemens Vasters 99232bc563 correcting GET method reference
Signed-off-by: Clemens Vasters <clemensv@microsoft.com>
2018-04-11 20:43:01 -07:00
Clemens Vasters 1dc41c1ab3 status codes
Signed-off-by: Clemens Vasters <clemensv@microsoft.com>
2018-04-11 20:31:57 -07:00
Clemens Vasters 3e72e11403 reference fixups
Signed-off-by: Clemens Vasters <clemensv@microsoft.com>
2018-04-11 20:27:47 -07:00
Clemens Vasters f5c9dba76c reference fixups
Signed-off-by: Clemens Vasters <clemensv@microsoft.com>
2018-04-11 20:26:23 -07:00
Clemens Vasters fea748b4b9 reference fixups
Signed-off-by: Clemens Vasters <clemensv@microsoft.com>
2018-04-11 20:24:13 -07:00
Clemens Vasters 9bd5fc3e43 reference fixups
Signed-off-by: Clemens Vasters <clemensv@microsoft.com>
2018-04-11 20:23:15 -07:00
Clemens Vasters 93210291cf reference fixups
Signed-off-by: Clemens Vasters <clemensv@microsoft.com>
2018-04-11 20:20:40 -07:00
Clemens Vasters 46062e2ccf WebHook spec baseline
Signed-off-by: Clemens Vasters <clemensv@microsoft.com>
2018-04-11 18:37:44 -07:00
260 changed files with 19104 additions and 2299 deletions

8
.clomonitor.yml Normal file
View File

@ -0,0 +1,8 @@
# CLOMonitor metadata file
# This file must be located at the root of the repository
# Checks exemptions
exemptions:
- check: analytics
reason: "Can't add analytics to markdown"

2
.gitattributes vendored Normal file
View File

@ -0,0 +1,2 @@
# Force shell scripts to be LF on checkout to support executing on Windows WSL.
*.sh text eol=lf

1
.github/ISSUE_TEMPLATE/config.yml vendored Normal file
View File

@ -0,0 +1 @@
blank_issues_enabled: false

34
.github/ISSUE_TEMPLATE/issue.md vendored Normal file
View File

@ -0,0 +1,34 @@
---
name: New issue
about: 'Create a new issue'
title: ''
labels: ''
assignees: ''
---
(Please remove the text below after reading it.)
When filing an issue in this repository, please consider the following:
- Is this:
- A feature request for a new form of integration etc?
- A report of a technical issue with the existing spec?
- A suggestion for improving the clarity of the existing spec
(even if it's not "wrong" as such)?
- Something else?
- Is there context behind your request that would be useful for readers to
understand? (There's no need to go into huge amounts of detail, but a few
sentences about the motivation can be really helpful.)
- Do you know *roughly* what you'd expect a change to address this issue would
look like? If so, it's useful to create a PR at the same time, linking to
the issue. This doesn't need to be polished and ready to merge - it's just to
help clarify roughly what you're considering.
If the issue is requires discussion, it's really useful if you're able to
attend the weekly working group meeting as described
[here](https://github.com/cloudevents/spec/?tab=readme-ov-file#meeting-time).
Often a discussion which would take multiple back-and-forth comments on an
issue can be resolved with a few minutes of conversation. We understand the
timing may not be convenient for everyone - please let us know if that's the
case, and we can potentially arrange something with the most relevant group
members at a more convenient time.

20
.github/pull-request-template.md vendored Normal file
View File

@ -0,0 +1,20 @@
Fixes #
<!-- Please include the 'why' behind your changes if no issue exists -->
## Proposed Changes
-
-
-
**Release Note**
<!--
If this change has user-visible impact, write a release note in the block
below. If this change has no user-visible impact, no release note is needed.
-->
```release-note
```

91
.github/workflows/release-notes.yaml vendored Normal file
View File

@ -0,0 +1,91 @@
# Copyright 2021 The CloudEvents Authors.
# Copyright 2020 The Knative Authors.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
name: 'Release Notes'
on:
workflow_dispatch:
inputs:
branch:
description: 'Branch? (master)'
required: true
default: 'master'
start-sha:
description: 'Starting SHA? (last tag on branch)'
end-sha:
description: 'Ending SHA? (latest HEAD)'
jobs:
release-notes:
name: Release Notes
runs-on: 'ubuntu-latest'
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
steps:
- name: Set up Go
uses: actions/setup-go@v2
- name: Install Dependencies
run: GO111MODULE=on go get k8s.io/release/cmd/release-notes
- name: Check out code
uses: actions/checkout@v2
with:
fetch-depth: 0
# Note: Defaults needs to run after we check out the repo.
- name: Defaults
run: |
echo ORG=$(echo '${{ github.repository }}' | awk -F '/' '{print $1}') >> $GITHUB_ENV
echo REPO=$(echo '${{ github.repository }}' | awk -F '/' '{print $2}') >> $GITHUB_ENV
echo "BRANCH=${{ github.event.inputs.branch }}" >> $GITHUB_ENV
if [[ "${{ github.event.inputs.start-sha }}" != "" ]]; then
echo "START_SHA=${{ github.event.inputs.start-sha }}" >> $GITHUB_ENV
else
# Default Starting SHA (thanks @dprotaso)
export semver=$(git describe --match "v[0-9]*" --abbrev=0)
echo "Using ${semver} tag for starting sha."
echo START_SHA=$(git rev-list -n 1 "${semver}") >> $GITHUB_ENV
fi
if [[ "${{ github.event.inputs.end-sha }}" != "" ]]; then
echo "END_SHA=${{ github.event.inputs.end-sha }}" >> $GITHUB_ENV
else
# Default Ending SHA (thanks @dprotaso)
echo "END_SHA=$(git rev-list -n 1 HEAD)" >> $GITHUB_ENV
fi
- name: Generate Notes
run: |
# See https://github.com/kubernetes/release/tree/master/cmd/release-notes for options.
# Note: we are setting env vars in the Defaults step.
release-notes \
--required-author "" \
--repo-path "$(pwd)" \
--output release-notes.md
- name: Display Notes
run: |
cat release-notes.md
- name: Archive Release Notes
uses: actions/upload-artifact@v2
with:
name: release-notes.md
path: release-notes.md

20
.github/workflows/verify.yaml vendored Normal file
View File

@ -0,0 +1,20 @@
name: verify
on: [push, pull_request]
jobs:
verify:
name: verify
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Setup Python
uses: actions/setup-python@v4
with:
python-version: "3.10"
cache: "pip"
cache-dependency-path: "tools/requirements.txt"
- name: Install tools dependencies
run: python -m pip install -r tools/requirements.txt
- name: Test Tools
run: make -f tools/Makefile test_tools
- name: Verify Specification
run: make -f tools/Makefile verify

6
.gitignore vendored Normal file
View File

@ -0,0 +1,6 @@
.idea/
gen/
.vscode/
gen/
.DS_Store
*.pyc

View File

@ -1,3 +0,0 @@
language: generic
script:
- make

View File

@ -1,75 +0,0 @@
# Governance
This document describes the governance process under which the Serverless
Working Group (WG) will manage this repository.
## Working Group Meetings
In order to provide equitable rights to all Working Group members,
the following process will be followed:
* Official WG meetings will be announced at least a week in advance.
* Proposed changes to any document will be done via a Pull Request (PR).
* PRs will be reviewed during official WG meetings.
* During meetings, priority will be given to PRs that appear to be ready for
a vote over those that appear to require discussions.
* PRs should not be merged if they have had substantial changes made within
two days of the meeting.
Rebases, typo fixes, etc. do not count as substantial.
Note, administrivia PRs that do not materially modify WG output documents
may be processed by WG admins as needed.
* Resolving PRs ("merging" or "closing with no action") will be done as a
result of a motion made during a WG meeting, and approved.
* Reopening a PR can be done if new information is made available, and a
motion to do so is approved.
* Any motion that does not have "unanimous consent" will result in a formal
vote. See [Voting](#voting).
## PRs
Typically, PRs are expected to meet the following criteria prior to being
merged:
* The author of the PR indicates that it is ready for review by asking for it
to be discussed in an upcoming meeting - eg. by adding it to the agenda
document.
* All comments have been addressed.
* PRs that have objections/concerns will be discussed off-line by interested
parties. A resolution, updated PR, will be expected from those talks.
## Voting
If a vote is taken during a WG meeting, the follow rules will be followed:
* There is only 1 vote per participating company, or nonaffiliated individual.
* Each participating company can assign a primary and secondary representative.
* A participating company, or nonaffiliated individual, attains voting rights
by having any of their assigned representative(s) attend 3 out of the last
4 meetings. They obtain voting rights after the 3rd meeting, not during.
* Only WG members with voting rights will be allowed to vote.
* A vote passes if more than 50% of the votes cast approve the motion.
* Only "yes" or "no" votes count, "abstain" votes do not count towards the
total.
* Meeting attendence will be formally tracked
[here](https://docs.google.com/spreadsheets/d/1bw5s9sC2ggYyAiGJHEk7xm-q2KG6jyrfBy69ifkdmt0/edit#gid=0).
Members must acknowledge their presence verbally, meaning, adding yourself
to the "Attendees" section of the Agenda document is not sufficient.
## Release Process
To create a new release:
* Create a PR that modifies the [README](README.md), and all specifications
(ie. *.md files) that include a version string, to the new release
version string.
* Merge the PR.
* Create a [new release](https://github.com/cloudevents/spec/releases/new):
* Choose a "Tag version" of the form: `vX.Y`, e.g. `v0.1`
* Target should be `master`, the default value
* Release title should be the same as the Tag - `vX.Y`
* Add some descriptive text, or the list of PRs that have been merged
since the previous release.
The git query to get the list commits since the last release is:
`git log --pretty=format:%s master...v0.1`.
Just replace "v0.1" with the name of the previous release.
* Press `Publish release` button

View File

@ -1,10 +0,0 @@
all: verify
verify:
@echo Running href checker:
@# Use "-x" if you want to skip exernal links
@tools/verify-links.sh -v .
@echo Running the spec phrase checker:
@tools/verify-specs.sh -v spec.md extensions.md json-format.md http-transport-binding.md
@echo Running the doc phrase checker:
@tools/verify-docs.sh -v .

12
OWNERS Normal file
View File

@ -0,0 +1,12 @@
# See the docs/GOVERNANCE.md document for the definition of the roles and
# responsibilities
admins:
- deissnerk
- duglin
- kenowens12
- markpeek
approvers:
# Approvers are "Voting Members" as defined in the GOVERNANCE.md document.
# See the "Voting Rights?" column in:
# https://docs.google.com/spreadsheets/d/1bw5s9sC2ggYyAiGJHEk7xm-q2KG6jyrfBy69ifkdmt0/edit?pli=1#gid=0
# for the current list of Voting members

217
README.md
View File

@ -1,97 +1,178 @@
# CloudEvents
![CloudEvents logo](https://github.com/cncf/artwork/blob/master/other/cloudevents/horizontal/color/cloudevents-horizontal-color.png)
<!-- no verify-specs -->
Events are everywhere. However, event publishers tend to describe events
![CloudEvents logo](https://github.com/cncf/artwork/blob/main/projects/cloudevents/horizontal/color/cloudevents-horizontal-color.png?raw=true)
[![CLOMonitor](https://img.shields.io/endpoint?url=https://clomonitor.io/api/projects/cncf/cloudevents/badge)](https://clomonitor.io/projects/cncf/cloudevents)
[![OpenSSF Best Practices](https://bestpractices.coreinfrastructure.org/projects/6770/badge)](https://bestpractices.coreinfrastructure.org/projects/6770)
Events are everywhere. However, event producers tend to describe events
differently.
The lack of a common way of describing events means developers must constantly
re-learn how to receive events. This also limits the potential for libraries,
re-learn how to consume events. This also limits the potential for libraries,
tooling and infrastructure to aide the delivery of event data across
environments, like SDKs, event routers or tracing systems. The portability and
environments, like SDKs, event routers or tracing systems. The portability and
productivity we can achieve from event data is hindered overall.
Enter CloudEvents, a specification for describing event data in a common way.
CloudEvents seeks to ease event declaration and delivery across services,
platforms and beyond.
CloudEvents is a specification for describing event data in common formats to
provide interoperability across services, platforms and systems.
CloudEvents is a new effort and it's still under active development. However,
its working group has received a surprising amount of industry interest,
ranging from major cloud providers to popular SaaS companies. Our end goal is
to offer this specification to the
[Cloud Native Computing Foundation](https://www.cncf.io/).
CloudEvents has received a large amount of industry interest, ranging from major
cloud providers to popular SaaS companies. CloudEvents is hosted by the
[Cloud Native Computing Foundation](https://cncf.io) (CNCF) and was approved as
a Cloud Native sandbox level project on
[May 15, 2018](https://docs.google.com/presentation/d/1KNSv70fyTfSqUerCnccV7eEC_ynhLsm9A_kjnlmU_t0/edit#slide=id.g37acf52904_1_41), an
incubator project on [Oct 24, 2019](https://github.com/cncf/toc/pull/297)
and a graduated project on [Jan 25, 2024](https://github.com/cncf/toc/pull/996)
([announcement](https://www.cncf.io/announcements/2024/01/25/cloud-native-computing-foundation-announces-the-graduation-of-cloudevents/)).
## CloudEvents Documents
The following specifications are available:
| | Latest Release | Working Draft |
| :---------------------------- | :-----------------------------------------------------------------------------: | :--------------------------------------------------------------------------------------: |
| **Core Specification:** |
| CloudEvents | [v1.0.2](https://github.com/cloudevents/spec/blob/v1.0.2/cloudevents/spec.md) | [WIP](cloudevents/spec.md) |
| |
| **Optional Specifications:** |
| AMQP Protocol Binding | [v1.0.2](https://github.com/cloudevents/spec/blob/v1.0.2/cloudevents/bindings/amqp-protocol-binding.md) | [WIP](cloudevents/bindings/amqp-protocol-binding.md) |
| AVRO Event Format | [v1.0.2](https://github.com/cloudevents/spec/blob/v1.0.2/cloudevents/formats/avro-format.md) | [WIP](cloudevents/formats/avro-format.md) |
| AVRO Compact Event Format | | [WIP](cloudevents/working-drafts/avro-compact-format.md) |
| HTTP Protocol Binding | [v1.0.2](https://github.com/cloudevents/spec/blob/v1.0.2/cloudevents/bindings/http-protocol-binding.md) | [WIP](cloudevents/bindings/http-protocol-binding.md) |
| JSON Event Format | [v1.0.2](https://github.com/cloudevents/spec/blob/v1.0.2/cloudevents/formats/json-format.md) | [WIP](cloudevents/formats/json-format.md) |
| Kafka Protocol Binding | [v1.0.2](https://github.com/cloudevents/spec/blob/v1.0.2/cloudevents/bindings/kafka-protocol-binding.md) | [WIP](cloudevents/bindings/kafka-protocol-binding.md) |
| MQTT Protocol Binding | [v1.0.2](https://github.com/cloudevents/spec/blob/v1.0.2/cloudevents/bindings/mqtt-protocol-binding.md) | [WIP](cloudevents/bindings/mqtt-protocol-binding.md) |
| NATS Protocol Binding | [v1.0.2](https://github.com/cloudevents/spec/blob/v1.0.2/cloudevents/bindings/nats-protocol-binding.md) | [WIP](cloudevents/bindings/nats-protocol-binding.md) |
| WebSockets Protocol Binding | - | [WIP](cloudevents/bindings/websockets-protocol-binding.md) |
| Protobuf Event Format | [v1.0.2](https://github.com/cloudevents/spec/blob/v1.0.2/cloudevents/formats/protobuf-format.md) | [WIP](cloudevents/formats/protobuf-format.md) |
| XML Event Format | - | [WIP](cloudevents/working-drafts/xml-format.md) |
| Web hook | [v1.0.2](https://github.com/cloudevents/spec/blob/v1.0.2/cloudevents/http-webhook.md) | [WIP](cloudevents/http-webhook.md) |
| |
| **Additional Documentation:** |
| CloudEvents Primer | [v1.0.2](https://github.com/cloudevents/spec/blob/v1.0.2/cloudevents/primer.md) | [WIP](cloudevents/primer.md) |
| [CloudEvents Adapters](cloudevents/adapters/README.md) | - | [Not versioned](cloudevents/adapters/README.md) |
| [CloudEvents SDK Requirements](cloudevents/SDK.md) | - | [Not versioned](cloudevents/SDK.md) |
| [Documented Extensions](cloudevents/extensions/README.md) | - | [Not versioned](cloudevents/extensions/README.md) |
| [Proprietary Specifications](cloudevents/proprietary-specs.md) | - | [Not versioned](cloudevents/proprietary-specs.md) |
| | Latest Release | Working Draft |
| :--- | :---: | :---: |
| **CloudEvents** | [v0.1](https://github.com/cloudevents/spec/blob/v0.1/spec.md) | [master](https://github.com/cloudevents/spec/blob/master/spec.md) |
| **HTTP Transport Binding** | [v0.1](https://github.com/cloudevents/spec/blob/v0.1/http-transport-binding.md) | [master](https://github.com/cloudevents/spec/blob/master/http-transport-binding.md) |
| **JSON Event Format** | [v0.1](https://github.com/cloudevents/spec/blob/v0.1/json-format.md) | [master](https://github.com/cloudevents/spec/blob/master/json-format.md) |
## Other Specifications
| | Latest Release | Working Draft |
| :-------------- | :-------------------------------------------------------------: | :---------------------------: |
| CE SQL | [v1.0.0](https://github.com/cloudevents/spec/tree/cesql/v1.0.0/cesql) | [WIP](cesql/spec.md) |
| Subscriptions | - | [WIP](subscriptions/spec.md) |
There is also the [CloudEvents Extension Attributes](https://github.com/cloudevents/spec/blob/master/extensions.md)
document.
The Registry and Pagination specifications can now be found in the
[xRegistry/spec](https://github.com/xregistry/spec) repo.
## Working Group process
Additional release related information:
[Historical releases and changelogs](docs/RELEASES.md)
The CNCF Serverless WG is working to formalize the [specification](spec.md)
based on [design goals](spec.md#design-goals) which focus on interoperability
between systems which generate and respond to events.
If you are new to CloudEvents, it is recommended that you start by reading the
[Primer](cloudevents/primer.md) for an overview of the specification's goals
and design decisions, and then move on to the
[core specification](cloudevents/spec.md).
In order to achieve these goals, the Serverless WG must describe:
- Common attributes of an *event* that facilitate interoperability
- One or more common architectures that are in active use today or planned to be
built by WG members
- How events are transported from producer to consumer via at least one protocol
- Identify and resolve whatever else is needed for interoperability
Since not all event producers generate CloudEvents by default, there is
documentation describing the recommended process for adapting some popular
events into CloudEvents, see
[CloudEvents Adapters](cloudevents/adapters/README.md).
## Communications
## SDKs
We have google group for e-mail communications:
[cncf-wg-serverless](https://groups.google.com/forum/#!forum/cncf-wg-serverless)
In addition to the documentation mentioned above, there are also a set of
language specific SDKs being developed:
- [C#/.NET](https://github.com/cloudevents/sdk-csharp)
- [Go](https://github.com/cloudevents/sdk-go)
- [Java](https://github.com/cloudevents/sdk-java)
- [Javascript](https://github.com/cloudevents/sdk-javascript)
- [PHP](https://github.com/cloudevents/sdk-php)
- [PowerShell](https://github.com/cloudevents/sdk-powershell)
- [Python](https://github.com/cloudevents/sdk-python)
- [Ruby](https://github.com/cloudevents/sdk-ruby)
- [Rust](https://github.com/cloudevents/sdk-rust)
The [SDK requirements](cloudevents/SDK.md) document provides information
on how the SDKs are managed and what is expected of each one.
The SDK [feature support table](cloudevents/SDK.md#feature-support) is a
good resource to see which features, event formats and bindings are supported
by each SDK.
For more information about how the SDKs operate, please see the following
documents:
- [SDK Governance](docs/SDK-GOVERNANCE.md)
- [SDK Maintainer Guidlines](docs/SDK-maintainer-guidelines.md)
- [SDK PR Guidlines](docs/SDK-PR-guidelines.md)
## Community and Docs
Learn more about the people and organizations who are creating a dynamic cloud
native ecosystem by making our systems interoperable with CloudEvents.
- Our [Governance](docs/GOVERNANCE.md) documentation.
- [Contributing](docs/CONTRIBUTING.md) guidance.
- [Roadmap](docs/ROADMAP.md)
- [Adopters](https://cloudevents.io/) - See "Integrations".
- [Contributors](docs/contributors.md): people and organizations who helped
us get started or are actively working on the CloudEvents specification.
- [Presentations, notes and other misc shared
docs](https://drive.google.com/drive/folders/1eKH-tVNV25jwkuBEoi3ESqvVjNRlJqYX?usp=sharing)
- [Demos & open source](docs/README.md) -- if you have something to share
about your use of CloudEvents, please submit a PR!
- [Potential CloudEvents v2 work items](cloudevents/v2.md)
- [Code of Conduct](https://github.com/cncf/foundation/blob/master/code-of-conduct.md)
### Security Concerns
If there is a security concern with one of the CloudEvents specifications, or
with one of the project's SDKs, please send an email to
[cncf-cloudevents-security@lists.cncf.io](mailto:cncf-cloudevents-security@lists.cncf.io).
A security assessment was performed by
[Trail of Bits](https://www.trailofbits.com/) in October 2022. The report
can be found [here](docs/CE-SecurityAudit-2022-10.pdf) or on the Trail of Bits
[website](https://github.com/trailofbits/publications/blob/master/reviews/CloudEvents.pdf).
### Communications
The main mailing list for e-mail communications:
- Send emails to: [cncf-cloudevents](mailto:cncf-cloudevents@lists.cncf.io)
- To subscribe see: https://lists.cncf.io/g/cncf-cloudevents
- Archives are at: https://lists.cncf.io/g/cncf-cloudevents/topics
And a #cloudevents Slack channel under
[CNCF's Slack workspace](https://slack.cncf.io/).
[CNCF's Slack workspace](http://slack.cncf.io/).
## Meeting Time
For SDK related comments and questions:
- Email to: [cncf-cloudevents-sdk](mailto:cncf-cloudevents-sdk@lists.cncf.io)
- To subscribe see: https://lists.cncf.io/g/cncf-cloudevents-sdk
- Archives are at: https://lists.cncf.io/g/cncf-cloudevents-sdk/topics
- Slack: #cloudeventssdk on [CNCF's Slack workspace](http://slack.cncf.io/)
For SDK specific communications, please see the main README in each
SDK's github repo - see the [list of SDKs](#sdks).
### Meeting Time
See the [CNCF public events calendar](https://www.cncf.io/community/calendar/).
This specification is being developed by the
[CNCF Serverless Working Group](https://github.com/cncf/wg-serverless).
This working group meets every Thursday at 9AM PT (USA Pacific):
[CNCF Serverless Working Group](https://github.com/cncf/wg-serverless). This
working group meets every Thursday at 9AM PT (USA Pacific)
([World Time Zone Converter](http://www.thetimezoneconverter.com/?t=9:00%20am&tz=San%20Francisco&)):
Join from PC, Mac, Linux, iOS or Android: https://zoom.us/my/cncfserverlesswg
Please see the
[meeting minutes doc](https://docs.google.com/document/d/1OVF68rpuPK5shIHILK9JOqlZBbfe91RNzQ7u_P7YCDE/edit#)
for the latest information on how to join the calls.
Or iPhone one-tap :
US: +16465588656,,3361029682# or +16699006833,,3361029682#
Or Telephone:
Dial:
US: +1 646 558 8656 (US Toll) or +1 669 900 6833 (US Toll)
or +1 855 880 1246 (Toll Free) or +1 877 369 0926 (Toll Free)
Meeting ID: 336 102 9682
International numbers available:
https://zoom.us/zoomconference?m=QpOqQYfTzY_Gbj9_8jPtsplp1pnVUKDr
NOTE: Please use \*6 to mute/un-mute your phone during the call.
World Time Zone Converter:
http://www.thetimezoneconverter.com/?t=9:00%20am&tz=San%20Francisco&
## In Person Meetings
None planned at this time.
## Meeting Minutes
The minutes from our calls are available
[here](https://docs.google.com/document/d/1OVF68rpuPK5shIHILK9JOqlZBbfe91RNzQ7u_P7YCDE/edit#).
Recording from our calls are available
Recording from our calls are available
[here](https://www.youtube.com/playlist?list=PLO-qzjSpLN1BEyKjOVX_nMg7ziHXUYwec), and
older ones are
[here](https://www.youtube.com/playlist?list=PLj6h78yzYM2Ph7YoBIgsZNW_RGJvNlFOt).
Periodically, the group may have in-person meetings that coincide with a major
conference. Please see the
[meeting minutes doc](https://docs.google.com/document/d/1OVF68rpuPK5shIHILK9JOqlZBbfe91RNzQ7u_P7YCDE/edit#)
for any future plans.

View File

@ -1,66 +0,0 @@
## CloudEvents contributors
We welcome you to join us! This list acknowleges those who contribute whether
it be via GitHub pull request or in real life in the working group, as well as
those who contributed before this became a CNCF Serverless WG project. If you
are participating in some way, please add your information via pull request.
This list is intended to build community, helping the working group to connect
github handles to real world identities and get to know each other, and for new
folks to see who has been involved already.
Contributions do not constitute an official endorsement.
* **Amazon**
* [AWS Lambda events](https://docs.aws.amazon.com/lambda/latest/dg/invoking-lambda-function.html)
* Arun Gupta, Ajay Nair, Rob Leidle, Orr Weinstein
* **Google**
* [Google Cloud Functions](https://cloud.google.com/functions/) and [Cloud Functions for Firebase](https://firebase.google.com/docs/functions/)
* Sarah Allen - [@ultrasaurus](https://github.com/ultrasaurus)
* Rachel Myers - [@rachelmyers](https://github.com/rachelmyers)
* Thomas Bouldin - [@inlined](https://github.com/inlined)
* Mike McDonald, Morgan Hallmon, Robert-Jan Huijsman
* **Huawei**
* [Huawei Function Stage](http://www.huaweicloud.com/en-us/product/functionstage.html)
* [Huawei Function Graph](https://www.huaweicloud.com/en-us/product/functiongraph.html)
* Cathy Hong Zhang - [@cathyhongzhang](https://github.com/cathyhongzhang)
* Louis Fourie - [@lfourie](https://github.com/lfourie)
* **IBM**
* [IBM Cloud Functions](https://console.bluemix.net/openwhisk/)
* Doug Davis - [@duglin](https://github.com/duglin)
* Daniel Krook - [@krook](https://github.com/krook)
* Matt Rutkowski - [@mrutkows](https://github.com/mrutkows)
* Michael M Behrendt - [@mbehrendt](https://github.com/mbehrendt)
* **Iguazio**
* Yaron Haviv - [@iguazio](https://github.com/iguazio)
* Orit Nissan-Messing
* **Intel**
* David Lyle - [@dklyle](https://github.com/dklyle)
* **Microsoft**
* [Microsoft Event Grid](https://azure.microsoft.com/en-us/services/event-grid/)
* Clemens Vasters - [@clemensv](https://github.com/clemensv)
* Bahram Banisadr - [@banisadr](https://github.com/banisadr)
* Dan Rosanova - [@djrosanova](https://github.com/djrosanova)
* Cesar Ruiz-Meraz, Raja Ravipati
* **Oracle**
* [Fn Project](https://fnproject.io/)
* Chad Arimura - [@carimura](https://github.com/banisadr)
* Stanley Halka - [@shalka](https://github.com/banisadr)
* Travis Reeder - [@treeder](https://github.com/banisadr)
* **Red Hat**
* Jim Curtis - [@jimcurtis64](https://github.com/jimcurtis2)
* William Markito Oliveira - [@william_markito](https://github.com/markito)
* **SAP**
* Nathan Oyler - [@notque](https://github.com/notque)
* **Serverless Inc**
* [Serverless Framework and Event Gateway](https://serverless.com/)
* Austen Collins - [@ac360](https://github.com/ac360)
* Rupak Ganguly - [@rupakg](https://github.com/rupakg)
* Brian Neisler - [@brianneisler](https://github.com/brianneisler)
* Jeremy Coffield, Ganesh Radhakirshnan
* **SolarWinds**
* Lee Calcote - [@leecalcote](https://github.com/leecalcote)
* **VMWare**
* [Dispatch Functions Framework](https://vmware.github.io/dispatch/)
* Mark Peek - [@leecalcote](https://github.com/markpeek)

View File

@ -1,165 +0,0 @@
# References
Examples of current event formats that exist today.
### Microsoft - Event Grid
```
{
"topic":"/subscriptions/{subscription-id}",
"subject":"/subscriptions/{subscription-id}/resourceGroups/{resource-group}/providers/Microsoft.EventGrid/eventSubscriptions/LogicAppdd584bdf-8347-49c9-b9a9-d1f980783501",
"eventType":"Microsoft.Resources.ResourceWriteSuccess",
"eventTime":"2017-08-16T03:54:38.2696833Z",
"id":"25b3b0d0-d79b-44d5-9963-440d4e6a9bba",
"data": {
"authorization":"{azure_resource_manager_authorizations}",
"claims":"{azure_resource_manager_claims}",
"correlationId":"54ef1e39-6a82-44b3-abc1-bdeb6ce4d3c6",
"httpRequest":"",
"resourceProvider":"Microsoft.EventGrid",
"resourceUri":"/subscriptions/{subscription-id}/resourceGroups/{resource-group}/providers/Microsoft.EventGrid/eventSubscriptions/LogicAppdd584bdf-8347-49c9-b9a9-d1f980783501",
"operationName":"Microsoft.EventGrid/eventSubscriptions/write",
"status":"Succeeded",
"subscriptionId":"{subscription-id}",
"tenantId":"72f988bf-86f1-41af-91ab-2d7cd011db47"
}
}
```
[Documentation](https://docs.microsoft.com/en-us/azure/event-grid/event-schema)
### Google - Cloud Functions (potential future)
```
{
"data": {
"@type": "types.googleapis.com/google.pubsub.v1.PubsubMessage",
"attributes": {
"foo": "bar",
},
"messageId": "12345",
"publishTime": "2017-06-05T12:00:00.000Z",
"data": "somebase64encodedmessage"
},
"context": {
"eventId": "12345",
"timestamp": "2017-06-05T12:00:00.000Z",
"eventTypeId": "google.pubsub.topic.publish",
"resource": {
"name": "projects/myProject/topics/myTopic",
"service": "pubsub.googleapis.com"
}
}
}
```
### AWS - SNS
```
{
"Records": [
{
"EventVersion": "1.0",
"EventSubscriptionArn": eventsubscriptionarn,
"EventSource": "aws:sns",
"Sns": {
"SignatureVersion": "1",
"Timestamp": "1970-01-01T00:00:00.000Z",
"Signature": "EXAMPLE",
"SigningCertUrl": "EXAMPLE",
"MessageId": "95df01b4-ee98-5cb9-9903-4c221d41eb5e",
"Message": "Hello from SNS!",
"MessageAttributes": {
"Test": {
"Type": "String",
"Value": "TestString"
},
"TestBinary": {
"Type": "Binary",
"Value": "TestBinary"
}
},
"Type": "Notification",
"UnsubscribeUrl": "EXAMPLE",
"TopicArn": topicarn,
"Subject": "TestInvoke"
}
}
]
}
```
[Documentation](http://docs.aws.amazon.com/lambda/latest/dg/eventsources.html)
### AWS - Kinesis
```
{
"Records": [
{
"eventID": "shardId-000000000000:49545115243490985018280067714973144582180062593244200961",
"eventVersion": "1.0",
"kinesis": {
"partitionKey": "partitionKey-3",
"data": "SGVsbG8sIHRoaXMgaXMgYSB0ZXN0IDEyMy4=",
"kinesisSchemaVersion": "1.0",
"sequenceNumber": "49545115243490985018280067714973144582180062593244200961"
},
"invokeIdentityArn": identityarn,
"eventName": "aws:kinesis:record",
"eventSourceARN": eventsourcearn,
"eventSource": "aws:kinesis",
"awsRegion": "us-east-1"
}
]
}
```
### IBM - OpenWhisk - Web Action Event
```
{
"__ow_method": "post",
"__ow_headers": {
"accept": "*/*",
"connection": "close",
"content-length": "4",
"content-type": "text/plain",
"host": "172.17.0.1",
"user-agent": "curl/7.43.0"
},
"__ow_path": "",
"__ow_body": "Jane"
}
```
### OpenStack - Audit Middleware - Event
```
{
"typeURI": "http://schemas.dmtf.org/cloud/audit/1.0/event",
"id": "d8304637-3f63-5092-9ab3-18c9781871a2",
"eventTime": "2018-01-30T10:46:16.740253+00:00",
"action": "delete",
"eventType": "activity",
"outcome": "success",
"reason": {
"reasonType": "HTTP",
"reasonCode": "204"
},
"initiator": {
"typeURI": "service/security/account/user",
"name": "user1",
"domain": "domain1",
"id": "52d28347f0b4cf9cc1717c00adf41c74cc764fe440b47aacb8404670a7cd5d22",
"host": {
"address": "127.0.0.1",
"agent": "python-novaclient"
},
"project_id": "ae63ddf2076d4342a56eb049e37a7621"
},
"target": {
"typeURI": "compute/server",
"id": "b1b475fc-ef0a-4899-87f3-674ac0d56855"
},
"observer": {
"typeURI": "service/compute",
"name": "nova",
"id": "1b5dbef1-c2e8-5614-888d-bb56bcf65749"
},
"requestPath": "/v2/ae63ddf2076d4342a56eb049e37a7621/servers/b1b475fc-ef0a-4899-87f3-674ac0d56855"
}
```
[Documentation](https://github.com/openstack/pycadf/blob/master/doc/source/event_concept.rst)

View File

@ -1,120 +0,0 @@
# CloudEvents - Use Cases
[WIP] Use-case examples to help end users understand the value of CloudEvents.
### Normalizing Events Across Services & Platforms
Major event publishers (e.g. AWS, Microsoft, Google, etc.) all publish events
in different formats on their respective platforms. There are even a few cases
where services on the same provider publish events in different formats (e.g.
AWS). This forces event consumers to implement custom logic to read or munge
event data across platforms and occasionally across services on a single
platform.
CloudEvents can offer a single experience for authoring consumers that handle
events across all platforms and services.
### Facilitating Integrations Across Services & Platforms
Event data being transported across environments is increasingly common.
However, without a common way of describing events, delivery of events across
environments is hindered. There is no single way of determining where an event
came from and where it might be going. This prevents tooling to facilitate
successful event delivery and consumers from knowing what to do with event
data.
CloudEvents offers useful metadata which middleware and consumers can rely upon
to facilitate event routing, logging, delivery and receipt.
### Increasing Portability of Functions-as-a-Service
Functions-as-a-Service (also known as serverless computing) is one of the
fastest growing trends in IT and it is largely event-driven. However, a
primary concern of FaaS is vendor lock-in. This lock-in is partially caused
by differences in function APIs and signatures across providers, but the
lock-in is also caused by differences in the format of event data received
within functions.
CloudEvents' common way of describing event data increases the portability of
Functions-as-a-Service.
### Improving Development & Testing of Event-Driven/Serverless Architectures
The lack of a common event format complicates development and testing of
event-driven and serverless architectures. There is no easy way to mock events
accurately for development and testing purposes, and help emulate event-driven
workflows in a development environment.
CloudEvents can enable better developer tools for building, testing and
handling the end-to-end lifecycle of event-driven and serverless architectures.
### Event Data Evolution
Most platforms and services version the data model of their events differently
(if they do this at all). This creates an inconsistent experience for
publishing and consuming the data model of events as those data models evolve.
CloudEvents can offer a common way to version and evolve event data. This will
help event publishers safely version their data models based on best practices,
and this help event consumers safely work with event data as it evolves.
### Normalizing Webhooks
Webhooks is a style of event publishing which does not use a common format.
Consumers of webhooks dont have a consistent way to develop, test, identify,
validate, and overall process event data delivered via webhooks.
CloudEvents can offer consistency in webhook publishing and consumption.
### Policy Enforcement
The transiting of events between systems may need to be filtered, transformed,
or blocked due to security and policy concerns. Examples may be to prevent
ingress or egress of the events such as event data containing sensitive
information or wanting to disallow the information flow between the sender and
receiver.
A common event format would allow easier reasoning about the data being
transited and allow for better introspection of the data.
### Event Tracing
An event sent from a source may result in a sequence of additional events
sent from various middleware devices such as event brokers and gateways.
CloudEvents includes metadata in events to associate these events as being
part of an event sequence for the purpose of event tracing and
troubleshooting.
An event sent from a source may result in a sequence of additional events
sent from various middleware devices such as event brokers and gateways.
CloudEvents includes metadata in events to associate these events as being
part of an event sequence for the purpose of event tracing and
troubleshooting.
### Cloudbursting
### IoT
IoT devices send and receive events related to their functionality.
For example, a connected thermostat will send telemetry on the current
temperature and could receive events to change temperatures.
These devices typically have a constrained operating environment
(cpu, memory) requiring a well defined event message format.
In a lot of cases these messages are binary encoded instead of textual.
Whether directly from the device or transformed via a gateway, CloudEvents
would allow for a better description of the origin of the message and the
format of the data contained within the message.
### Event Correlation
A serverless application/workflow could be associated with multiple events from
different event sources/producers. For example, a burglary detection
application/workflow could involve both a motion event and a door/window open event.
A serverless platform could receive many instances of each type of events,
e.g. it could receive motion events and window open events from different houses.
The serverless platform needs to correlate one type of event instance correctly
with other types of event instances and map a received event instance to the
correct application/workflow instance. CloudEvents will provide a standard way
for any event consumer (eg. the serverless platform) to locate the event
correlation information/token in the event data and map a received event instance
to the correct application/workflow instance.

79
cesql/CESQLLexer.g4 Normal file
View File

@ -0,0 +1,79 @@
lexer grammar CESQLLexer;
// NOTE:
// This grammar is case-sensitive, although CESQL keywords are case-insensitive.
// In order to implement case-insensitivity, check out
// https://github.com/antlr/antlr4/blob/master/doc/case-insensitive-lexing.md#custom-character-streams-approach
// Skip tab, carriage return and newlines
SPACE: [ \t\r\n]+ -> skip;
// Fragments for Literal primitives
fragment ID_LITERAL: [a-zA-Z0-9]+;
fragment DQUOTA_STRING: '"' ( '\\'. | '""' | ~('"'| '\\') )* '"';
fragment SQUOTA_STRING: '\'' ('\\'. | '\'\'' | ~('\'' | '\\'))* '\'';
fragment INT_DIGIT: [0-9];
fragment FN_LITERAL: [A-Z] [A-Z_]*;
// Constructors symbols
LR_BRACKET: '(';
RR_BRACKET: ')';
COMMA: ',';
SINGLE_QUOTE_SYMB: '\'';
DOUBLE_QUOTE_SYMB: '"';
fragment QUOTE_SYMB
: SINGLE_QUOTE_SYMB | DOUBLE_QUOTE_SYMB
;
// Operators
// - Logic
AND: 'AND';
OR: 'OR';
XOR: 'XOR';
NOT: 'NOT';
// - Arithmetics
STAR: '*';
DIVIDE: '/';
MODULE: '%';
PLUS: '+';
MINUS: '-';
// - Comparison
EQUAL: '=';
NOT_EQUAL: '!=';
GREATER: '>';
GREATER_OR_EQUAL: '>=';
LESS: '<';
LESS_GREATER: '<>';
LESS_OR_EQUAL: '<=';
// Like, exists, in
LIKE: 'LIKE';
EXISTS: 'EXISTS';
IN: 'IN';
// Booleans
TRUE: 'TRUE';
FALSE: 'FALSE';
// Literals
DQUOTED_STRING_LITERAL: DQUOTA_STRING;
SQUOTED_STRING_LITERAL: SQUOTA_STRING;
INTEGER_LITERAL: ( '+' | '-' )? INT_DIGIT+;
// Identifiers
IDENTIFIER: [a-zA-Z]+;
IDENTIFIER_WITH_NUMBER: [a-zA-Z0-9]+;
FUNCTION_IDENTIFIER_WITH_UNDERSCORE: [A-Z] [A-Z_]*;

62
cesql/CESQLParser.g4 Normal file
View File

@ -0,0 +1,62 @@
grammar CESQLParser;
import CESQLLexer;
// Entrypoint
cesql: expression EOF;
// Structure of operations, function invocations and expression
expression
: functionIdentifier functionParameterList #functionInvocationExpression
// unary operators are the highest priority
| NOT expression #unaryLogicExpression
| MINUS expression # unaryNumericExpression
// LIKE, EXISTS and IN takes precedence over all the other binary operators
| expression NOT? LIKE stringLiteral #likeExpression
| EXISTS identifier #existsExpression
| expression NOT? IN setExpression #inExpression
// Numeric operations
| expression (STAR | DIVIDE | MODULE) expression #binaryMultiplicativeExpression
| expression (PLUS | MINUS) expression #binaryAdditiveExpression
// Comparison operations
| expression (EQUAL | NOT_EQUAL | LESS_GREATER | GREATER_OR_EQUAL | LESS_OR_EQUAL | LESS | GREATER) expression #binaryComparisonExpression
// Logic operations
|<assoc=right> expression (AND | OR | XOR) expression #binaryLogicExpression
// Subexpressions and atoms
| LR_BRACKET expression RR_BRACKET #subExpression
| atom #atomExpression
;
atom
: booleanLiteral #booleanAtom
| integerLiteral #integerAtom
| stringLiteral #stringAtom
| identifier #identifierAtom
;
// Identifiers
identifier
: (IDENTIFIER | IDENTIFIER_WITH_NUMBER)
;
functionIdentifier
: (IDENTIFIER | FUNCTION_IDENTIFIER_WITH_UNDERSCORE)
;
// Literals
booleanLiteral: (TRUE | FALSE);
stringLiteral: (DQUOTED_STRING_LITERAL | SQUOTED_STRING_LITERAL);
integerLiteral: INTEGER_LITERAL;
// Functions
functionParameterList
: LR_BRACKET ( expression ( COMMA expression )* )? RR_BRACKET
;
// Sets
setExpression
: LR_BRACKET expression ( COMMA expression )* RR_BRACKET // Empty sets are not allowed
;

7
cesql/README.md Normal file
View File

@ -0,0 +1,7 @@
# CloudEvents SQL Expression Language - Version 1.0.0
CloudEvents SQL expressions (also known as CESQL) allow computing values and
matching of CloudEvent attributes against complex expressions that lean on the
syntax of Structured Query Language (SQL) `WHERE` clauses.
For more information, see the [CESQL specification](spec.md).

25
cesql/RELEASE_NOTES.md Normal file
View File

@ -0,0 +1,25 @@
# CESQL Release Notes
<!-- no verify-specs -->
## v1.0.0 - 2024/06/13
This is the v1 release of the specification! CESQL v1 provides users with the
ability to write and execute queries against CloudEvents. This allows for
computing values and matchins of CloudEvent attributes against complex
expressions that lean on the syntax of Structured Query Language (SQL).
Notable changes between the WIP draft and the v1 specification are:
- Specify error types
- Clarify return values of expressions that encounter errors
- Clarify that missing attributes result in an error and the expression
returning it's default value
- Add support for boolean to integer and integer to boolean type casting
- Clarify the order of operations
- Clarify how user defined functions work
- Define the default "zero" values for the built in types
- Clarify that string comparisons are case sensitive
- Specify which characters are treated as whitespace for the TRIM function
- Specify that functions must still return values along with errors, as well as
the behaviour when user defined function do not do this correctly
- For the fail fast error handling mode, expressions now return the zero value
for their return type when they encounter an error, rather than undefined

29
cesql/cesql_tck/README.md Normal file
View File

@ -0,0 +1,29 @@
# CloudEvents Expression Language TCK
Each file of this TCK contains a set of test cases, testing one or more specific features of the language.
The root file structure is composed by:
* `name`: Name of the test suite contained in the file
* `tests`: List of tests
Each test definition includes:
* `name`: Name of the test case
* `expression`: Expression to test.
* `result`: Expected result (OPTIONAL). Can be a boolean, an integer or a string.
* `error`: Expected error (OPTIONAL). If absent, no error is expected.
* `event`: Input event (OPTIONAL). If present, this is a valid event serialized in JSON format. If absent, when testing
the expression, any valid event can be passed.
* `eventOverrides`: Overrides to the input event (OPTIONAL). This might be used when `event` is missing, in order to
define only some specific values, while the other (REQUIRED) attributes can be any value.
The `error` values could be any of the following:
* `parse`: Error while parsing the expression
* `math`: Math error while evaluating a math operator
* `cast`: Casting error
* `missingFunction`: Addressed a missing function
* `functionEvaluation`: Error while evaluating a function
* `missingAttribute`: Error due to a missing attribute
* `generic`: A generic error

View File

@ -0,0 +1,106 @@
name: Binary comparison operations
tests:
- name: True is equal to false
expression: TRUE = FALSE
result: false
- name: False is equal to false
expression: FALSE = FALSE
result: true
- name: 1 is equal to 2
expression: 1 = 2
result: false
- name: 2 is equal to 2
expression: 2 = 2
result: true
- name: abc is equal to 123
expression: "'abc' = '123'"
result: false
- name: abc is equal to abc
expression: "'abc' = 'abc'"
result: true
- name: Equals operator returns false when encountering a missing attribute
expression: missing = 2
result: false
error: missingAttribute
- name: True is not equal to false
expression: TRUE != FALSE
result: true
- name: False is not equal to false
expression: FALSE != FALSE
result: false
- name: 1 is not equal to 2
expression: 1 != 2
result: true
- name: 2 is not equal to 2
expression: 2 != 2
result: false
- name: abc is not equal to 123
expression: "'abc' != '123'"
result: true
- name: abc is not equal to abc
expression: "'abc' != 'abc'"
result: false
- name: Not equal operator returns false when encountering a missing attribute
expression: missing != 2
result: false
error: missingAttribute
- name: True is not equal to false (diamond operator)
expression: TRUE <> FALSE
result: true
- name: False is not equal to false (diamond operator)
expression: FALSE <> FALSE
result: false
- name: 1 is not equal to 2 (diamond operator)
expression: 1 <> 2
result: true
- name: 2 is not equal to 2 (diamond operator)
expression: 2 <> 2
result: false
- name: abc is not equal to 123 (diamond operator)
expression: "'abc' <> '123'"
result: true
- name: abc is not equal to abc (diamond operator)
expression: "'abc' <> 'abc'"
result: false
- name: Diamond operator returns false when encountering a missing attribute
expression: missing <> 2
result: false
error: missingAttribute
- name: 1 is less or equal than 2
expression: 2 <= 2
result: true
- name: 3 is less or equal than 2
expression: 3 <= 2
result: false
- name: 1 is less than 2
expression: 1 < 2
result: true
- name: 2 is less than 2
expression: 2 < 2
result: false
- name: 2 is greater or equal than 2
expression: 2 >= 2
result: true
- name: 2 is greater or equal than 3
expression: 2 >= 3
result: false
- name: 2 is greater than 1
expression: 2 > 1
result: true
- name: 2 is greater than 2
expression: 2 > 2
result: false
- name: Less than or equal operator returns false when encountering a missing attribute
expression: missing <= 2
result: false
error: missingAttribute
- name: implicit casting with string as right type
expression: "true = 'TRUE'"
result: false
- name: implicit casting with boolean as right type
expression: "'TRUE' = true"
result: true

View File

@ -0,0 +1,54 @@
name: Binary logical operations
tests:
- name: False and false
expression: FALSE AND FALSE
result: false
- name: False and true
expression: FALSE AND TRUE
result: false
- name: True and false
expression: TRUE AND FALSE
result: false
- name: True and true
expression: TRUE AND TRUE
result: true
- name: AND operator is short circuit evaluated
expression: "false and (1 != 1 / 0)"
result: false
- name: AND operator is NOT short circuit evaluated when the first operand evaluates to true
expression: "true and (1 != 1 / 0)"
error: math
result: false
- name: False or false
expression: FALSE OR FALSE
result: false
- name: False or true
expression: FALSE OR TRUE
result: true
- name: True or false
expression: TRUE OR FALSE
result: true
- name: True or true
expression: TRUE OR TRUE
result: true
- name: OR operator is short circuit evaluated
expression: "true or (1 != 1 / 0)"
result: true
- name: OR operator is NOT short circuit evaluated when the first operand evaluates to false
expression: "false or (1 != 1 / 0)"
error: math
result: false
- name: False xor false
expression: FALSE XOR FALSE
result: false
- name: False xor true
expression: FALSE XOR TRUE
result: true
- name: True xor false
expression: TRUE XOR FALSE
result: true
- name: True xor true
expression: TRUE XOR TRUE
result: false

View File

@ -0,0 +1,63 @@
name: Binary math operations
tests:
- name: Operator precedence without parenthesis
expression: 4 * 2 + 4 / 2
result: 10
- name: Operator precedence with parenthesis
expression: 4 * (2 + 4) / 2
result: 12
- name: Truncated division
expression: 5 / 3
result: 1
- name: Division by zero returns 0 and fail
expression: 5 / 0
result: 0
error: math
- name: Module
expression: 5 % 2
result: 1
- name: Module by zero returns 0 and fail
expression: 5 % 0
result: 0
error: math
- name: Missing attribute in division results in missing attribute error, not divide by 0 error
expression: missing / 0
result: 0
error: missingAttribute
- name: Missing attribute in modulo results in missing attribute error, not divide by 0 error
expression: missing % 0
result: 0
error: missingAttribute
- name: Positive plus positive number
expression: 4 + 1
result: 5
- name: Negative plus positive number
expression: -4 + 1
result: -3
- name: Negative plus Negative number
expression: -4 + -1
result: -5
- name: Positive plus negative number
expression: 4 + -1
result: 3
- name: Positive minus positive number
expression: 4 - 1
result: 3
- name: Negative minus positive number
expression: -4 - 1
result: -5
- name: Implicit casting, with left value string
expression: "'5' + 3"
result: 8
- name: Implicit casting, with right value string
expression: "5 + '3'"
result: 8
- name: Implicit casting, with both values string
expression: "'5' + '3'"
result: 8
- name: Implicit casting, with boolean value
expression: "5 + TRUE"
result: 6

View File

@ -0,0 +1,25 @@
name: Case sensitivity
tests:
- name: TRUE
expression: TRUE
result: true
- name: true
expression: true
result: true
- name: tRuE
expression: tRuE
result: true
- name: FALSE
expression: FALSE
result: false
- name: false
expression: false
result: false
- name: FaLsE
expression: FaLsE
result: false
- name: String literals casing preserved
expression: "'aBcD'"
result: aBcD

View File

@ -0,0 +1,69 @@
name: Casting functions
tests:
- name: Cast '1' to integer
expression: INT('1')
result: 1
- name: Cast '-1' to integer
expression: INT('-1')
result: -1
- name: Cast identity 1
expression: INT(1)
result: 1
- name: Cast identity -1
expression: INT(-1)
result: -1
- name: Cast from TRUE to int
expression: INT(TRUE)
result: 1
- name: Cast from FALSE to int
expression: INT(FALSE)
result: 0
- name: Invalid cast from string to int
expression: INT('ABC')
result: 0
error: cast
- name: Cast 'TRUE' to boolean
expression: BOOL('TRUE')
result: true
- name: Cast "false" to boolean
expression: BOOL("false")
result: false
- name: Cast identity TRUE
expression: BOOL(TRUE)
result: true
- name: Cast identity FALSE
expression: BOOL(FALSE)
result: FALSE
- name: Invalid cast from string to boolean
expression: BOOL('ABC')
result: false
error: cast
- name: Cast from 1 to boolean
expression: BOOL(1)
result: true
- name: Cast from 0 to boolean
expression: BOOL(0)
result: false
- name: Cast from 100 to boolean
expression: BOOL(100)
result: true
- name: Cast from -50 to boolean
expression: BOOL(-50)
result: true
- name: Cast TRUE to string
expression: STRING(TRUE)
result: 'true'
- name: Cast FALSE to string
expression: STRING(FALSE)
result: 'false'
- name: Cast 1 to string
expression: STRING(1)
result: '1'
- name: Cast -1 to string
expression: STRING(-1)
result: '-1'
- name: Cast identity "abc"
expression: STRING("abc")
result: "abc"

View File

@ -0,0 +1,53 @@
name: Context attributest test
tests:
- name: Access to required attribute
expression: id
eventOverrides:
id: myId
result: myId
- name: Access to optional attribute
expression: subject
eventOverrides:
subject: mySubject
result: mySubject
- name: Absent optional attribute
expression: subject
event:
specversion: "1.0"
id: myId
source: localhost.localdomain
type: myType
result: false
error: missingAttribute
- name: Access to optional boolean extension
expression: mybool
eventOverrides:
mybool: true
result: true
- name: Access to optional integer extension
expression: myint
eventOverrides:
myint: 10
result: 10
- name: Access to optional string extension
expression: myext
eventOverrides:
myext: "my extension"
result: "my extension"
- name: URL type cohercion to string
expression: source
event:
specversion: "1.0"
id: myId
source: "http://localhost/source"
type: myType
result: "http://localhost/source"
- name: Timestamp type cohercion to string
expression: time
event:
specversion: "1.0"
id: myId
source: "http://localhost/source"
type: myType
time: 2018-04-26T14:48:09+02:00
result: 2018-04-26T14:48:09+02:00

View File

@ -0,0 +1,57 @@
name: Exists expression
tests:
- name: required attributes always exist
expression: EXISTS specversion AND EXISTS id AND EXISTS type AND EXISTS SOURCE
result: true
- name: optional attribute available
expression: EXISTS time
event:
specversion: "1.0"
id: myId
source: "http://localhost/source"
type: myType
time: 2018-04-26T14:48:09+02:00
result: true
- name: optional attribute absent
expression: EXISTS time
event:
specversion: "1.0"
id: myId
source: "http://localhost/source"
type: myType
result: false
- name: optional attribute absent (negated)
expression: NOT EXISTS time
event:
specversion: "1.0"
id: myId
source: "http://localhost/source"
type: myType
result: true
- name: optional extension available
expression: EXISTS myext
event:
specversion: "1.0"
id: myId
source: "http://localhost/source"
type: myType
myext: my value
result: true
- name: optional extension absent
expression: EXISTS myext
event:
specversion: "1.0"
id: myId
source: "http://localhost/source"
type: myType
result: false
- name: optional extension absent (negated)
expression: NOT EXISTS myext
event:
specversion: "1.0"
id: myId
source: "http://localhost/source"
type: myType
result: true

View File

@ -0,0 +1,78 @@
name: In expression
tests:
- name: int in int set
expression: 123 IN (1, 2, 3, 12, 13, 23, 123)
result: true
- name: int not in int set
expression: 123 NOT IN (1, 2, 3, 12, 13, 23, 123)
result: false
- name: string in string set
expression: "'abc' IN ('abc', \"bcd\")"
result: true
- name: string not in string set
expression: "'aaa' IN ('abc', \"bcd\")"
result: false
- name: bool in bool set
expression: TRUE IN (TRUE, FALSE)
result: true
- name: bool not in bool set
expression: TRUE IN (FALSE)
result: false
- name: mix literals and identifiers (1)
expression: source IN (myext, 'abc')
event:
specversion: "1.0"
id: myId
source: "http://localhost/source"
type: myType
myext: "http://localhost/source"
result: true
- name: mix literals and identifiers (2)
expression: source IN (source)
event:
specversion: "1.0"
id: myId
source: "http://localhost/source"
type: myType
myext: "http://localhost/source"
result: true
- name: mix literals and identifiers (3)
expression: "source IN (id, \"http://localhost/source\")"
event:
specversion: "1.0"
id: myId
source: "http://localhost/source"
type: myType
myext: "http://localhost/source"
result: true
- name: mix literals and identifiers (4)
expression: source IN (id, 'xyz')
event:
specversion: "1.0"
id: myId
source: "http://localhost/source"
type: myType
result: false
- name: type coercion with booleans (1)
expression: "'true' IN (TRUE, 'false')"
result: true
- name: type coercion with booleans (2)
expression: "'true' IN ('TRUE', 'false')"
result: false
- name: type coercion with booleans (3)
expression: TRUE IN ('true', 'false')
result: true
- name: type coercion with booleans (4)
expression: "'TRUE' IN (TRUE, 'false')"
result: false
- name: type coercion with int (1)
expression: "1 IN ('1', '2')"
result: true
- name: type coercion with int (2)
expression: "'1' IN (1, 2)"
result: true

View File

@ -0,0 +1,16 @@
name: Integer builtin functions
tests:
- name: ABS (1)
expression: ABS(10)
result: 10
- name: ABS (2)
expression: ABS(-10)
result: 10
- name: ABS (3)
expression: ABS(0)
result: 0
- name: ABS overflow
expression: ABS(-2147483648)
result: 2147483647
error: math

View File

@ -0,0 +1,129 @@
name: Like expression
tests:
- name: Exact match (1)
expression: "'abc' LIKE 'abc'"
result: true
- name: Exact match (2)
expression: "'ab\\c' LIKE 'ab\\c'"
result: true
- name: Exact match (negate)
expression: "'abc' NOT LIKE 'abc'"
result: false
- name: Percentage operator (1)
expression: "'abc' LIKE 'a%b%c'"
result: true
- name: Percentage operator (2)
expression: "'azbc' LIKE 'a%b%c'"
result: true
- name: Percentage operator (3)
expression: "'azzzbzzzc' LIKE 'a%b%c'"
result: true
- name: Percentage operator (4)
expression: "'a%b%c' LIKE 'a%b%c'"
result: true
- name: Percentage operator (5)
expression: "'ac' LIKE 'abc'"
result: false
- name: Percentage operator (6)
expression: "'' LIKE 'abc'"
result: false
- name: Percentage operator (7)
expression: "'.ab.cde.' LIKE '.%.%.'"
result: true
- name: Percentage operator (8)
expression: "'ab.cde' LIKE '.%.%.'"
result: false
- name: Underscore operator (1)
expression: "'abc' LIKE 'a_b_c'"
result: false
- name: Underscore operator (2)
expression: "'a_b_c' LIKE 'a_b_c'"
result: true
- name: Underscore operator (3)
expression: "'abzc' LIKE 'a_b_c'"
result: false
- name: Underscore operator (4)
expression: "'azbc' LIKE 'a_b_c'"
result: false
- name: Underscore operator (5)
expression: "'azbzc' LIKE 'a_b_c'"
result: true
- name: Underscore operator (6)
expression: "'.a.b.' LIKE '._._.'"
result: true
- name: Underscore operator (7)
expression: "'abcd.' LIKE '._._.'"
result: false
- name: Escaped underscore wildcards (1)
expression: "'a_b_c' LIKE 'a\\_b\\_c'"
result: true
- name: Escaped underscore wildcards (2)
expression: "'a_b_c' NOT LIKE 'a\\_b\\_c'"
result: false
- name: Escaped underscore wildcards (3)
expression: "'azbzc' LIKE 'a\\_b\\_c'"
result: false
- name: Escaped underscore wildcards (4)
expression: "'abc' LIKE 'a\\_b\\_c'"
result: false
- name: Escaped percentage wildcards (1)
expression: "'abc' LIKE 'a\\%b\\%c'"
result: false
- name: Escaped percentage wildcards (2)
expression: "'a%b%c' LIKE 'a\\%b\\%c'"
result: true
- name: Escaped percentage wildcards (3)
expression: "'azbzc' LIKE 'a\\%b\\%c'"
result: false
- name: Escaped percentage wildcards (4)
expression: "'abc' LIKE 'a\\%b\\%c'"
result: false
- name: With access to event attributes
expression: "myext LIKE 'abc%123\\%456\\_d_f'"
eventOverrides:
myext: "abc123123%456_dzf"
result: true
- name: With access to event attributes (negated)
expression: "myext NOT LIKE 'abc%123\\%456\\_d_f'"
eventOverrides:
myext: "abc123123%456_dzf"
result: false
- name: With type coercion from int (1)
expression: "234 LIKE '23_'"
result: true
- name: With type coercion from int (2)
expression: "2344 LIKE '23%'"
result: true
- name: With type coercion from int (3)
expression: "2344 LIKE '23_'"
result: false
- name: With type coercion from bool (1)
expression: "TRUE LIKE 'tr%'"
result: true
- name: With type coercion from bool (2)
expression: "TRUE LIKE '%ue'"
result: true
- name: With type coercion from bool (3)
expression: "FALSE LIKE 'tr%'"
result: false
- name: With type coercion from bool (4)
expression: "FALSE LIKE 'fal%'"
result: true
- name: Invalid string literal in comparison causes parse error
expression: "x LIKE 123"
result: false
error: parse
eventOverrides:
x: "123"
- name: Missing attribute returns empty string
expression: "missing LIKE 'missing'"
result: false
error: missingAttribute

View File

@ -0,0 +1,36 @@
name: Literals
tests:
- name: TRUE literal
expression: TRUE
result: true
- name: FALSE literal
expression: FALSE
result: false
- name: 0 literal
expression: 0
result: 0
- name: 1 literal
expression: 1
result: 1
- name: String literal single quoted
expression: "'abc'"
result: abc
- name: String literal double quoted
expression: "\"abc\""
result: abc
- name: String literal single quoted with case
expression: "'aBc'"
result: aBc
- name: String literal double quoted with case
expression: "\"AbC\""
result: AbC
- name: Escaped string literal (1)
expression: "'a\"b\\'c'"
result: a"b'c
- name: Escaped string literal (2)
expression: "\"a'b\\\"c\""
result: a'b"c

View File

@ -0,0 +1,24 @@
name: Negate operator
tests:
- name: Minus 10
expression: -10
result: -10
- name: Minus minus 10
expression: --10
result: 10
- name: Minus 10 with casting
expression: -'10'
result: -10
- name: Minus minus 10 with casting
expression: --'10'
result: 10
- name: Minus with boolean cast
expression: -TRUE
result: -1
- name: Minus with missing attribute
expression: -missing
result: 0
error: missingAttribute

View File

@ -0,0 +1,25 @@
name: Not operator
tests:
- name: Not true
expression: NOT TRUE
result: false
- name: Not false
expression: NOT FALSE
result: true
- name: Not true with casting
expression: NOT 'TRUE'
result: false
- name: Not false 10 with casting
expression: NOT 'FALSE'
result: true
- name: Invalid int cast
expression: NOT 10
result: true
error: cast
- name: Not missing attribute
expression: NOT missing
result: false
error: missingAttribute

View File

@ -0,0 +1,5 @@
name: Parsing errors
tests:
- name: No closed parenthesis
expression: ABC(
error: parse

View File

@ -0,0 +1,77 @@
name: Specification examples
tests:
- name: Case insensitive hops (1)
expression: int(hop) < int(ttl) and int(hop) < 1000
eventOverrides:
hop: '5'
ttl: '10'
result: true
- name: Case insensitive hops (2)
expression: INT(hop) < INT(ttl) AND INT(hop) < 1000
eventOverrides:
hop: '5'
ttl: '10'
result: true
- name: Case insensitive hops (3)
expression: hop < ttl
eventOverrides:
hop: '5'
ttl: '10'
result: true
- name: Equals with casting (1)
expression: sequence = 5
eventOverrides:
sequence: '5'
result: true
- name: Equals with casting (2)
expression: sequence = 5
eventOverrides:
sequence: '6'
result: false
- name: Logic expression (1)
expression: firstname = 'Francesco' OR subject = 'Francesco'
eventOverrides:
subject: Francesco
firstname: Doug
result: true
- name: Logic expression (2)
expression: firstname = 'Francesco' OR subject = 'Francesco'
eventOverrides:
firstname: Francesco
subject: Doug
result: true
- name: Logic expression (3)
expression: (firstname = 'Francesco' AND lastname = 'Guardiani') OR subject = 'Francesco Guardiani'
eventOverrides:
subject: Doug
firstname: Francesco
lastname: Guardiani
result: true
- name: Logic expression (4)
expression: (firstname = 'Francesco' AND lastname = 'Guardiani') OR subject = 'Francesco Guardiani'
eventOverrides:
subject: Francesco Guardiani
firstname: Doug
lastname: Davis
result: true
- name: Subject exists
expression: EXISTS subject
eventOverrides:
subject: Francesco Guardiani
result: true
- name: Missing attribute (1)
expression: true AND (missing = "")
result: false
error: missingAttribute
- name: Missing attribute (2)
expression: missing * 5
result: 0
error: missingAttribute
- name: Missing attribute (3)
expression: 1 / missing
result: 0
error: missingAttribute

View File

@ -0,0 +1,143 @@
name: String builtin functions
tests:
- name: LENGTH (1)
expression: "LENGTH('abc')"
result: 3
- name: LENGTH (2)
expression: "LENGTH('')"
result: 0
- name: LENGTH (3)
expression: "LENGTH('2')"
result: 1
- name: LENGTH (4)
expression: "LENGTH(TRUE)"
result: 4
- name: CONCAT (1)
expression: "CONCAT('a', 'b', 'c')"
result: abc
- name: CONCAT (2)
expression: "CONCAT()"
result: ""
- name: CONCAT (3)
expression: "CONCAT('a')"
result: "a"
- name: CONCAT_WS (1)
expression: "CONCAT_WS(',', 'a', 'b', 'c')"
result: a,b,c
- name: CONCAT_WS (2)
expression: "CONCAT_WS(',')"
result: ""
- name: CONCAT_WS (3)
expression: "CONCAT_WS(',', 'a')"
result: "a"
- name: CONCAT_WS without arguments doesn't exist
expression: CONCAT_WS()
error: missingFunction
result: false
- name: LOWER (1)
expression: "LOWER('ABC')"
result: abc
- name: LOWER (2)
expression: "LOWER('AbC')"
result: abc
- name: LOWER (3)
expression: "LOWER('abc')"
result: abc
- name: UPPER (1)
expression: "UPPER('ABC')"
result: ABC
- name: UPPER (2)
expression: "UPPER('AbC')"
result: ABC
- name: UPPER (3)
expression: "UPPER('abc')"
result: ABC
- name: TRIM (1)
expression: "TRIM(' a b c ')"
result: "a b c"
- name: TRIM (2)
expression: "TRIM(' a b c')"
result: "a b c"
- name: TRIM (3)
expression: "TRIM('a b c ')"
result: "a b c"
- name: TRIM (4)
expression: "TRIM('a b c')"
result: "a b c"
- name: LEFT (1)
expression: LEFT('abc', 2)
result: ab
- name: LEFT (2)
expression: LEFT('abc', 10)
result: abc
- name: LEFT (3)
expression: LEFT('', 0)
result: ""
- name: LEFT (4)
expression: LEFT('abc', -2)
result: "abc"
error: functionEvaluation
- name: RIGHT (1)
expression: RIGHT('abc', 2)
result: bc
- name: RIGHT (2)
expression: RIGHT('abc', 10)
result: abc
- name: RIGHT (3)
expression: RIGHT('', 0)
result: ""
- name: RIGHT (4)
expression: RIGHT('abc', -2)
result: "abc"
error: functionEvaluation
- name: SUBSTRING (1)
expression: "SUBSTRING('abcdef', 1)"
result: "abcdef"
- name: SUBSTRING (2)
expression: "SUBSTRING('abcdef', 2)"
result: "bcdef"
- name: SUBSTRING (3)
expression: "SUBSTRING('Quadratically', 5)"
result: "ratically"
- name: SUBSTRING (4)
expression: "SUBSTRING('Sakila', -3)"
result: "ila"
- name: SUBSTRING (5)
expression: "SUBSTRING('abcdef', 1, 6)"
result: "abcdef"
- name: SUBSTRING (6)
expression: "SUBSTRING('abcdef', 2, 4)"
result: "bcde"
- name: SUBSTRING (7)
expression: "SUBSTRING('Sakila', -5, 3)"
result: "aki"
- name: SUBSTRING (8)
expression: "SUBSTRING('Quadratically', 0)"
result: ""
- name: SUBSTRING (9)
expression: "SUBSTRING('Quadratically', 0, 1)"
result: ""
- name: SUBSTRING (10)
expression: "SUBSTRING('abcdef', 10)"
result: ""
error: functionEvaluation
- name: SUBSTRING (11)
expression: "SUBSTRING('abcdef', -10)"
result: ""
error: functionEvaluation
- name: SUBSTRING (12)
expression: "SUBSTRING('abcdef', 10, 10)"
result: ""
error: functionEvaluation
- name: SUBSTRING (13)
expression: "SUBSTRING('abcdef', -10, 10)"
result: ""
error: functionEvaluation

View File

@ -0,0 +1,12 @@
name: Sub expressions
tests:
- name: Sub expression with literal
expression: "(TRUE)"
result: true
- name: Math (1)
expression: "4 * (2 + 3)"
result: 20
- name: Math (2)
expression: "(2 + 3) * 4"
result: 20

View File

@ -0,0 +1,173 @@
name: SubscriptionsAPI Recreations
tests:
- name: Prefix filter (1)
expression: "source LIKE 'https://%'"
result: true
eventOverrides:
source: "https://example.com"
- name: Prefix filter (2)
expression: "source LIKE 'https://%'"
result: false
eventOverrides:
source: "http://example.com"
- name: Prefix filter on string extension
expression: "myext LIKE 'custom%'"
result: true
eventOverrides:
myext: "customext"
- name: Prefix filter on missing string extension
expression: "myext LIKE 'custom%'"
result: false
error: missingAttribute
- name: Suffix filter (1)
expression: "type like '%.error'"
result: true
eventOverrides:
type: "com.github.error"
- name: Suffix filter (2)
expression: "type like '%.error'"
result: false
eventOverrides:
type: "com.github.success"
- name: Suffix filter on string extension
expression: "myext LIKE '%ext'"
result: true
eventOverrides:
myext: "customext"
- name: Suffix filter on missing string extension
expression: "myext LIKE '%ext'"
result: false
error: missingAttribute
- name: Exact filter (1)
expression: "id = 'myId'"
result: true
eventOverrides:
id: "myId"
- name: Exact filter (2)
expression: "id = 'myId'"
result: false
eventOverrides:
id: "notmyId"
- name: Exact filter on string extension
expression: "myext = 'customext'"
result: true
eventOverrides:
myext: "customext"
- name: Exact filter on missing string extension
expression: "myext = 'customext'"
result: false
error: missingAttribute
- name: Prefix filter AND Suffix filter (1)
expression: "id LIKE 'my%' AND source LIKE '%.ca'"
result: true
eventOverrides:
id: "myId"
source: "http://www.some-website.ca"
- name: Prefix filter AND Suffix filter (2)
expression: "id LIKE 'my%' AND source LIKE '%.ca'"
result: false
eventOverrides:
id: "myId"
source: "http://www.some-website.com"
- name: Prefix filter AND Suffix filter (3)
expression: "myext LIKE 'custom%' AND type LIKE '%.error'"
result: true
eventOverrides:
myext: "customext"
type: "com.github.error"
- name: Prefix AND Suffix filter (4)
expression: "type LIKE 'example.%' AND myext LIKE 'custom%'"
result: false
eventOverrides:
type: "example.event.type"
error: missingAttribute
- name: Prefix OR Suffix filter (1)
expression: "id LIKE 'my%' OR source LIKE '%.ca'"
result: true
eventOverrides:
id: "myId"
source: "http://www.some-website.ca"
- name: Prefix OR Suffix filter (2)
expression: "id LIKE 'my%' OR source LIKE '%.ca'"
result: true
eventOverrides:
id: "myId"
source: "http://www.some-website.com"
- name: Prefix OR Suffix filter (3)
expression: "id LIKE 'my%' OR source LIKE '%.ca'"
result: true
eventOverrides:
id: "notmyId"
source: "http://www.some-website.ca"
- name: Prefix OR Suffix filter (4)
expression: "id LIKE 'my%' OR source LIKE '%.ca'"
result: false
eventOverrides:
id: "notmyId"
source: "http://www.some-website.com"
- name: Disjunctive Normal Form (1)
expression: "(id = 'myId' AND type LIKE '%.success') OR (id = 'notmyId' AND source LIKE 'http://%' AND type LIKE '%.warning')"
result: true
eventOverrides:
id: "myId"
type: "example.event.success"
- name: Disjunctive Normal Form (2)
expression: "(id = 'myId' AND type LIKE '%.success') OR (id = 'notmyId' AND source LIKE 'http://%' AND type LIKE '%.warning')"
result: true
eventOverrides:
id: "notmyId"
type: "example.event.warning"
source: "http://localhost.localdomain"
- name: Disjunctive Normal Form (3)
expression: "(id = 'myId' AND type LIKE '%.success') OR (id = 'notmyId' AND source LIKE 'http://%' AND type LIKE '%.warning')"
result: false
eventOverrides:
id: "notmyId"
type: "example.event.warning"
source: "https://localhost.localdomain"
- name: Conjunctive Normal Form (1)
expression: "(id = 'myId' OR type LIKE '%.success') AND (id = 'notmyId' OR source LIKE 'https://%' OR type LIKE '%.warning')"
result: true
eventOverrides:
id: "myId"
type: "example.event.warning"
source: "http://localhost.localdomain"
- name: Conjunctive Normal Form (2)
expression: "(id = 'myId' OR type LIKE '%.success') AND (id = 'notmyId' OR source LIKE 'https://%' OR type LIKE '%.warning')"
result: true
eventOverrides:
id: "notmyId"
type: "example.event.success"
source: "http://localhost.localdomain"
- name: Conjunctive Normal Form (3)
expression: "(id = 'myId' OR type LIKE '%.success') AND (id = 'notmyId' OR source LIKE 'https://%' OR type LIKE '%.warning')"
result: false
eventOverrides:
id: "notmyId"
type: "example.event.warning"
source: "http://localhost.localdomain"
- name: Conjunctive Normal Form (4)
expression: "(id = 'myId' OR type LIKE '%.success') AND (id = 'notmyId' OR source LIKE 'https://%' OR type LIKE '%.warning')"
result: false
eventOverrides:
id: "myId"
type: "example.event.success"
source: "http://localhost.localdomain"
- name: Conjunctive Normal Form (5)
expression: "(id = 'myId' OR type LIKE '%.success') AND (id = 'notmyId' OR source LIKE 'https://%' OR type LIKE '%.warning') AND (myext = 'customext')"
result: false
eventOverrides:
id: "myId"
type: "example.event.warning"
source: "http://localhost.localdomain"
error: missingAttribute

View File

@ -0,0 +1,3 @@
# CESQL v1.0.0 (制作中)
请参阅[CESQL 规范](spec.md)

View File

@ -0,0 +1,6 @@
# CESQL 规范发行信息
<!-- no verify-specs -->
## vX.Y.Z - YYYY/MM/DD
- 尚未发行 (#000)

View File

@ -0,0 +1,6 @@
# CloudEvents Expression Language TCK
本文档尚未被翻译,请先阅读英文[原版文档](../../../cesql_tck/README.md) 。
如果您迫切地需要此文档的中文翻译,请[提交一个issue](https://github.com/cloudevents/spec/issues)
我们会尽快安排专人进行翻译。

View File

@ -0,0 +1,6 @@
# CloudEvents SQL Expression Language - Version 1.0.0
本文档尚未被翻译,请先阅读英文[原版文档](../../spec.md) 。
如果您迫切地需要此文档的中文翻译,请[提交一个issue](https://github.com/cloudevents/spec/issues)
我们会尽快安排专人进行翻译。

View File

@ -0,0 +1,8 @@
# Translation list of the cesql spec
| Documents | Status | Last edited | Version |
| :--------- | :---------: | :--------- | :---------: |
| /cesql/README.md | PR reviewing | 2022-03-26T13:55:02.773Z | - |
| /cesql/RELEASE_NOTES.md | PR reviewing | 2022-03-26T14:00:58.009Z | - |
| /cesql/spec.md | Ready to start | | |
| /cesql/cesql_tck/README.md | Ready to start | | |

658
cesql/spec.md Normal file
View File

@ -0,0 +1,658 @@
# CloudEvents SQL Expression Language - Version 1.0.0
## Abstract
The goal of this specification is to define a SQL-like expression language
which can be used to express predicates on CloudEvent instances.
## Table of Contents
1. [Introduction](#1-introduction)
- 1.1. [Conformance](#11-conformance)
- 1.2. [Relation to Subscriptions API](#12-relation-to-the-subscriptions-api)
2. [Language syntax](#2-language-syntax)
- 2.1. [Expression](#21-expression)
- 2.2. [Value identifiers and literals](#22-value-identifiers-and-literals)
- 2.3. [Operators](#23-operators)
- 2.4. [Function invocations](#24-function-invocations)
3. [Language semantics](#3-language-semantics)
- 3.1. [Type system](#31-type-system)
- 3.2. [CloudEvent context identifiers and types](#32-cloudevent-context-identifiers-and-types)
- 3.3. [Errors](#33-errors)
- 3.4. [Operators](#34-operators)
- 3.5. [Functions](#35-functions)
- 3.6. [Evaluation of the expression](#36-evaluation-of-the-expression)
- 3.7. [Type casting](#37-type-casting)
4. [Implementation suggestions](#4-implementation-suggestions)
- 4.1. [Error handling](#41-error-handling)
5. [Examples](#5-examples)
6. [References](#6-references)
## 1. Introduction
CloudEvents SQL expressions (also known as CESQL) allow computing values and
matching of CloudEvent attributes against complex expressions that lean on the
syntax of Structured Query Language (SQL) `WHERE` clauses. Using SQL-derived
expressions for message filtering has widespread implementation usage because
the Java Message Service (JMS) message selector syntax also leans on SQL. Note
that neither the [SQL standard (ISO 9075)][iso-9075] nor the JMS standard nor
any other SQL dialect is used as a normative foundation or to constrain the
expression syntax defined in this specification, but the syntax is informed by
them.
CESQL is a _[total pure functional programming
language][total-programming-language-wiki]_ in order to guarantee the
termination of the evaluation of the expression. It features a type system
correlated to the [CloudEvents type
system][ce-type-system], and it features boolean and arithmetic operations,
as well as built-in functions for string manipulation.
The language is not constrained to a particular execution environment, which
means it might run in a source, in a producer, or in an intermediary, and it
can be implemented using any technology stack.
The CloudEvents Expression Language assumes the input always includes, but is
not limited to, a single valid and type-checked CloudEvent instance. An
expression MUST NOT mutate the value of the input CloudEvent instance, nor any
of the other input values. The evaluation of an expression observes the concept
of [referential transparency][referential-transparency-wiki]. This means that
any part of an expression can be replaced with its output value and the overall
result of the expression will be unchanged. The primary output of a CESQL
expression evaluation is always a _boolean_, an _integer_ or a _string_. The
secondary output of a CESQL expression evaluation is a set of errors which
occurred during evaluation. This set MAY be empty, indicating that no error
occurred during execution of the expression. The values used by CESQL engines
to represent a set of errors (empty or not) is out of the scope of this
specification.
The CloudEvents Expression Language doesn't support the handling of the data
field of the CloudEvent instances, due to its polymorphic nature and
complexity. Users that need this functionality ought to use other more
appropriate tools.
### 1.1. Conformance
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD",
"SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be
interpreted as described in [RFC2119][rfc2119].
### 1.2. Relation to the Subscriptions API
The CESQL can be used as a [filter dialect][subscriptions-filter-dialect] to
filter on the input values.
When used as a filter predicate, the expression output value MUST be a
_Boolean_. If the output value is not a _Boolean_, or any errors are returned,
the event MUST NOT pass the filter. Due to the requirement that events MUST NOT
pass the filter if any errors occur, when used in a filtering context the CESQL
engine SHOULD follow the "fail fast mode" error handling described in section
4.1.
## 2. Language syntax
The grammar of the language is defined using the EBNF Notation from [W3C XML
specification][ebnf-xml-spec].
Although in the EBNF keywords are defined using uppercase characters, they are
case-insensitive. For example:
```
int(hop) < int(ttl) and int(hop) < 1000
```
Has the same syntactical meaning of:
```
INT(hop) < INT(ttl) AND INT(hop) < 1000
```
### 2.1 Expression
The root of the expression is the `expression` rule:
```ebnf
expression ::= value-identifier | literal | unary-operation | binary-operation | function-invocation | like-operation | exists-operation | in-operation | ( "(" expression ")" )
```
Nested expressions MUST be correctly parenthesized.
### 2.2. Value identifiers and literals
Value identifiers in CESQL MUST follow the same restrictions of the [Attribute
Naming Convention][ce-attribute-naming-convention] from the CloudEvents spec. A
value identifier SHOULD NOT be greater than 20 characters in length.
```ebnf
lowercase-char ::= [a-z]
value-identifier ::= ( lowercase-char | digit )+
```
CESQL defines 3 different literal kinds: integer numbers, `true` or `false`
booleans, and `''` or `""` delimited strings. Integer literals MUST be valid 32
bit signed integer values.
```ebnf
digit ::= [0-9]
integer-literal ::= ( '+' | '-' )? digit+
boolean-literal ::= "true" | "false" (* Case insensitive *)
string-literal ::= ( "'" ( [^'] | "\'" )* "'" ) | ( '"' ( [^"] | '\"' )* '"')
literal ::= integer-literal | boolean-literal | string-literal
```
Because string literals can be either `''` or `""` delimited, in the former
case, the `'` character has to be escaped if it is to be used in the string
literal, while in the latter the `"` has to be escaped if it is to be used in
the string literal.
### 2.3. Operators
CESQL defines boolean unary and binary operators, arithmetic unary and binary
operators, and the `LIKE`, `IN`, `EXISTS` operators.
```ebnf
not-operator ::= "NOT"
unary-logic-operator ::= not-operator
binary-logic-operator ::= "AND" | "OR" | "XOR"
unary-numeric-operator ::= "-"
binary-comparison-operator ::= "=" | "!=" | "<>" | ">=" | "<=" | "<" | ">"
binary-numeric-arithmetic-operator ::= "+" | "-" | "*" | "/" | "%"
like-operator ::= "LIKE"
exists-operator ::= "EXISTS"
in-operator ::= "IN"
unary-operation ::= (unary-numeric-operator | unary-logic-operator) expression
binary-operation ::= expression (binary-comparison-operator | binary-numeric-arithmetic-operator | binary-logic-operator) expression
like-operation ::= expression not-operator? like-operator string-literal
exists-operation ::= exists-operator value-identifier
set-expression ::= "(" expression ("," expression)* ")"
in-operation ::= expression not-operator? in-operator set-expression
```
### 2.4. Function invocations
CESQL supports n-ary function invocation:
```ebnf
char ::= [A-Z] | [a-z]
argument ::= expression
function-identifier ::= char ( "_" | char )*
argument-list ::= argument ("," argument)*
function-invocation ::= function-identifier "(" argument-list? ")"
```
## 3. Language semantics
### 3.1. Type system
The type system contains 3 _primitive_ types:
- _String_: Sequence of Unicode characters.
- _Integer_: A whole number in the range -2,147,483,648 to +2,147,483,647
inclusive. This is the range of a signed, 32-bit, twos-complement encoding.
- _Boolean_: A boolean value of "true" or "false".
For each of the 3 _primitive_ types there is an associated zero value, which
can be thought of as the "default" value for that type:
| Type | Zero Value |
| --------- | ---------- |
| _String_ | `""` |
| _Integer_ | `0` |
| _Boolean_ | `false` |
The types _URI_, _URI Reference_, and _Timestamp_ ([defined in the CloudEvents
specification][ce-type-system]) are represented as _String_.
The type system also includes _Set_, which is an unordered collection of
_Strings_ of arbitrary length. This type can be used in the `IN` operator.
### 3.2. CloudEvent context identifiers and types
Each CloudEvent context attribute and extension MUST be addressable from an
expression using its identifier, as defined by the spec. For example, using
`id` in an expression will address the CloudEvent [id
attribute][ce-id-attribute].
If the value of the attribute or extension is not one of the primitive CESQL
types, it MUST be represented by the _String_ type.
When addressing an attribute not included in the input event, the subexpression
referencing the missing attribute MUST evaluate to the zero value for the
return type of the subexpression,along with a _MissingAttributeError_. For
example, `true AND (missingAttribute = "")` would evaluate to
`false, (missingAttributeError)` as the subexpression `missingAttribute = ""`
would be false, given that the return type for the `=` operator is _Boolean_.
However, the expression `missingattribute * 5` would evaluate to
`0, (missingAttributeError)` because the return type for the `*` operator is
_Integer_. Note that this does not mean that the _value_ of the missing
attribute is set to be the zero value for the type of the missing attribute.
Rather, the subexpression with the missingAttribute returns the zero value of
the return type of the subexpression. As an example, `1 / missingAttribute`
does not raise a _MathError_ due to the division by zero, instead it returns
`0, (missingAttributeError)` as that is the zero value for the return type of
the subexpression.
In cases where the return type of the subexpression cannot be determined by the
CESQL engine, the CESQL engine MUST assume a return type of _Boolean_. In such
cases, the return value would therefore be `false, (missingAttributeError)`.
### 3.3. Errors
Because every operator and function is total, an expression evaluation flow is
defined statically and cannot be modified by expected or unexpected errors.
Nevertheless CESQL includes the concept of errors: when an expression is
evaluated, in case an error arises, the evaluator collects a list of errors,
referred in this spec as _error list_, which is then returned together with the
evaluated value of the CESQL expression.
Whenever possible, some error checks SHOULD be done at compile time by the
expression evaluator, in order to prevent runtime errors.
Every CESQL engine MUST support the following error types:
- _ParseError_: An error that occurs during parsing
- _MathError_: An error that occurs during the evaluation of a mathematical
operation
- _CastError_: An error that occurs during an implicit or explicit type cast
- _MissingAttributeError_: An error that occurs when addressing an attribute
which is not present on the input event
- _MissingFunctionError_: An error that occurs due to a call to a function
that has not been registered with the CESQL engine
- _FunctionEvaluationError_: An error that occurs during the evaluation of a
function
- _GenericError_: Any error not specified above
Whenever an operator or function encounters an error, it MUST result in a
"return value" as well as one or more "error values". In cases where there is
not an obvious "return value" for the expression, the operator or function
SHOULD return the zero value for the return type of the operator or function.
### 3.4. Operators
The following tables show the operators that MUST be supported by a CESQL
evaluator. When evaluating an operator, a CESQL engine MUST attempt to cast the
operands to the specified types.
#### 3.4.1. Unary operators
Corresponds to the syntactic rule `unary-operation`:
| Definition | Semantics |
| --------------------------- | ------------------------------- |
| `NOT x: Boolean -> Boolean` | Returns the negate value of `x` |
| `-x: Integer -> Integer` | Returns the minus value of `x` |
#### 3.4.2. Binary operators
Corresponds to the syntactic rule `binary-operation`:
| Definition | Semantics |
| --------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------- |
| `x = y: Boolean x Boolean -> Boolean` | Returns `true` if the values of `x` and `y` are equal |
| `x != y: Boolean x Boolean -> Boolean` | Same as `NOT (x = y)` |
| `x <> y: Boolean x Boolean -> Boolean` | Same as `NOT (x = y)` |
| `x AND y: Boolean x Boolean -> Boolean` | Returns the logical and of `x` and `y` |
| `x OR y: Boolean x Boolean -> Boolean` | Returns the logical or of `x` and `y` |
| `x XOR y: Boolean x Boolean -> Boolean` | Returns the logical xor of `x` and `y` |
| `x = y: Integer x Integer -> Boolean` | Returns `true` if the values of `x` and `y` are equal |
| `x != y: Integer x Integer -> Boolean` | Same as `NOT (x = y)` |
| `x <> y: Integer x Integer -> Boolean` | Same as `NOT (x = y)` |
| `x < y: Integer x Integer -> Boolean` | Returns `true` if `x` is less than `y` |
| `x <= y: Integer x Integer -> Boolean` | Returns `true` if `x` is less than or equal to `y` |
| `x > y: Integer x Integer -> Boolean` | Returns `true` if `x` is greater than `y` |
| `x >= y: Integer x Integer -> Boolean` | Returns `true` if `x` is greater than or equal to `y` |
| `x * y: Integer x Integer -> Integer` | Returns the product of `x` and `y` |
| `x / y: Integer x Integer -> Integer` | Returns the result of dividing `x` by `y`, rounded towards `0` to obtain an integer. Returns `0` and a _MathError_ if `y = 0` |
| `x % y: Integer x Integer -> Integer` | Returns the remainder of `x` divided by `y`, where the result has the same sign as `x`. Returns `0` and a _MathError_ if `y = 0` |
| `x + y: Integer x Integer -> Integer` | Returns the sum of `x` and `y` |
| `x - y: Integer x Integer -> Integer` | Returns the value of `y` subtracted from `x` |
| `x = y: String x String -> Boolean` | Returns `true` if the values of `x` and `y` are equal (case sensitive) |
| `x != y: String x String -> Boolean` | Same as `NOT (x = y)` (case sensitive) |
| `x <> y: String x String -> Boolean` | Same as `NOT (x = y)` (case sensitive) |
The AND and OR operators MUST be short-circuit evaluated. This means that
whenever the left operand of the AND operation evaluates to `false`, the right
operand MUST NOT be evaluated. Similarly, whenever the left operand of the OR
operation evaluates to `true`, the right operand MUST NOT be evaluated.
#### 3.4.3. Like operator
| Definition | Semantics |
| ------------------------------------------------ | --------------------------------------------------- |
| `x LIKE pattern: String x String -> Boolean` | Returns `true` if the value x matches the `pattern` |
| `x NOT LIKE pattern: String x String -> Boolean` | Same as `NOT (x LIKE PATTERN)` |
The pattern of the `LIKE` operator MUST be a string literal, and can contain:
- `%` represents zero, one, or multiple characters
- `_` represents a single character
- Any other character, representing exactly that character (case sensitive)
For example, the pattern `_b*` will accept values `ab`, `abc`, `abcd1` but
won't accept values `b` or `acd` or `aBc`.
Both `%` and `_` can be escaped with `\`, in order to be matched literally.
For example, the pattern `abc\%` will match `abc%` but won't match `abcd`.
In cases where the left operand is not a `String`, it MUST be cast to a
`String` before the comparison is made. The pattern of the `LIKE` operator
(that is, the right operand of the operator) MUST be a valid string literal
without casting, otherwise the parser MUST return a parse error.
#### 3.4.4. Exists operator
| Definition | Semantics |
| ----------------------------------- | --------------------------------------------------------------------------- |
| `EXISTS identifier: Any -> Boolean` | Returns `true` if the attribute `identifier` exists in the input CloudEvent |
Note: `EXISTS` MUST always return `true` for the REQUIRED context attributes
because the input CloudEvent is always assumed valid, e.g. `EXISTS id` MUST
always return `true`.
#### 3.4.5. In operator
| Definition | Semantics |
| ------------------------------------------------------- | -------------------------------------------------------------------------- |
| `x IN (y1, y2, ...): Any x Any^n -> Boolean`, n > 0 | Returns `true` if `x` is equal to an element in the _Set_ of `yN` elements |
| `x NOT IN (y1, y2, ...): Any x Any^n -> Boolean`, n > 0 | Same as `NOT (x IN set)` |
The matching is done using the same semantics of the equal `=` operator, but
using `x` type as the target type for the implicit type casting.
### 3.5. Functions
CESQL provides the concept of function, and defines some built-in functions
that every engine MUST implement. An engine SHOULD also allow users to define
their custom functions, however, the mechanism by which this is done is out of
scope of this specification.
A function is identified by its name, its parameters and the return value. A
function can be variadic, that is, the arity is not fixed.
CESQL allows overloading, that is, the engine MUST be able to distinguish
between two functions defined with the same name but different arity. Because
of implicit casting, no functions with the same name and same arity but
different types are allowed.
A function name MAY have at most one variadic overload definition and only if
the number of initial fixed arguments is greater than the maximum arity of all
other function definitions for that function name.
For example, the following set of definitions are valid and will all be allowed
by the rules:
- `ABC(x): String -> Integer`: Unary function (arity 1).
- `ABC(x, y): String x String -> Integer`: Binary function (arity 2).
- `ABC(x, y, z, ...): String x String x String x String^n -> Integer`: n-ary
function (variable arity), but the initial fixed arguments are at least 3.
But the following set is invalid, so the engine MUST reject them:
- `ABC(x...): String^n -> Integer`: n-ary function (variable arity), but there
are no initial fixed arguments.
- `ABC(x, y, z): String x String x String -> Integer`: Ternary function
(arity 3).
These two are incompatible because the n-ary function `ABC(x...)` can not be
distinguished in any way from the ternary function `ABC(x, y, z)` if the n-ary
function were called with three arguments. In order for these definitions to be
valid, the n-ary function would need to have at least 4 fixed arguments.
When a function invocation cannot be dispatched, the return value is `false`,
and a _MissingFunctionError_ is also returned.
The following tables show the built-in functions that MUST be supported by a
CESQL evaluator.
#### 3.5.1. Built-in String manipulation
| Definition | Semantics |
| ------------------------------------------------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `LENGTH(x): String -> Integer` | Returns the character length of the String `x`. |
| `CONCAT(x1, x2, ...): String^n -> String`, n >= 0 | Returns the concatenation of `x1` up to `xN`. |
| `CONCAT_WS(delimiter, x1, x2, ...): String x String^n -> String`, n >= 0 | Returns the concatenation of `x1` up to `xN`, using the `delimiter` between each string, but not before `x1` or after `xN`. |
| `LOWER(x): String -> String` | Returns `x` in lowercase. |
| `UPPER(x): String -> String` | Returns `x` in uppercase. |
| `TRIM(x): String -> String` | Returns `x` with leading and trailing whitespaces (as defined by unicode) trimmed. This does not remove any characters which are not unicode whitespace characters, such as control characters. |
| `LEFT(x, y): String x Integer -> String` | Returns a new string with the first `y` characters of `x`, or returns `x` if `LENGTH(x) <= y`. Returns `x` if `y < 0` and a _FunctionEvaluationError_. |
| `RIGHT(x, y): String x Integer -> String` | Returns a new string with the last `y` characters of `x` or returns `x` if `LENGTH(x) <= y`. Returns `x` if `y < 0` and a _FunctionEvaluationError_. |
| `SUBSTRING(x, pos): String x Integer x Integer -> String` | Returns the substring of `x` starting from index `pos` (included) up to the end of `x`. Characters' index starts from `1`. If `pos` is negative, the beginning of the substring is `pos` characters from the end of the string. If `pos` is 0, then returns the empty string. Returns the empty string and a _FunctionEvaluationError_ if `pos > LENGTH(x) OR pos < -LENGTH(x)`. |
| `SUBSTRING(x, pos, len): String x Integer x Integer -> String` | Returns the substring of `x` starting from index `pos` (included) of length `len`. Characters' index starts from `1`. If `pos` is negative, the beginning of the substring is `pos` characters from the end of the string. If `pos` is 0, then returns the empty string. If `len` is greater than the maximum substring starting at `pos`, then return the maximum substring. Returns the empty string and a _FunctionEvaluationError_ if `pos > LENGTH(x) OR pos < -LENGTH(x)` or if `len` is negative. |
#### 3.5.2. Built-in Math functions
| Definition | Semantics |
| ---------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `ABS(x): Integer -> Integer` | Returns the absolute value of `x`. If the value of `x` is `-2147483648` (the most negative 32 bit integer value possible), then this returns `2147483647` as well as a _MathError_. |
#### 3.5.3 Function Errors
As specified in 3.3, in the event of an error a function MUST still return a
valid return value for its defined return type. A CESQL engine MUST guarantee
that all built-in functions comply with this. For user defined functions, if
they return one or more errors and fail to provide a valid return value for
their return type the CESQL engine MUST return the zero value for the return
type of the function, along with a _FunctionEvaluationError_.
### 3.6. Evaluation of the expression
Operators and functions MUST be evaluated in order of precedence, and MUST be
evaluated left to right when the precedence is equal. The order of precedence
is as follows:
1. Function invocations
1. Unary operators
1. NOT unary operator
1. `-` unary operator
1. LIKE operator
1. EXISTS operator
1. IN operator
1. Binary operators
1. `*`, `/`, `%` binary operators
1. `+`, `-` binary operators
1. `=`, `!=`, `<>`, `>=`, `<=`, `>`, `<` binary operators
1. AND, OR, XOR binary operators
1. Subexpressions
1. Attributes and literal values
AND and OR operations MUST be short-circuit evaluated. When the left operand of
the AND operation evaluates to `false`, the right operand MUST NOT be evaluated.
Similarly, when the left operand of the OR operation evalues to `true`, the
right operand MUST NOT be evaluated.
#### 3.7. Type casting
The following table indicates which type casts a CESQL engine MUST or MUST NOT
support:
| Type | Integer | String | Boolean |
| ------- | ------- | ------ | ------- |
| Integer | N/A | MUST | MUST |
| String | MUST | N/A | MUST |
| Boolean | MUST | MUST | N/A |
For all of the type casts which a CESQL engine MUST support, the semantics
which the engine MUST use are defined as follows:
| Definition | Semantics |
| -------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `Integer -> String` | Returns the string representation of the integer value in base 10, without leading `0`s. If the value is less than 0, the '-' character is prepended to the result. |
| `Integer -> Boolean` | Returns `false` if the integer is `0`, and `true` otherwise. |
| `String -> Integer` | Returns the result of interpreting the string as a 32 bit base 10 integer. The string MAY begin with a leading sign '+' or '-'. If the result will overflow or the string is not a valid integer an error is returned along with a value of `0`. |
| `String -> Boolean` | Returns `true` or `false` if the lower case representation of the string is exactly "true" or "false, respectively. Otherwise returns an error along with a value of `false` |
| `Boolean -> Integer` | Returns `1` if the boolean is `true`, and `0` if the boolean is `false`. |
| `Boolean -> String` | Returns `"true"` if the boolean is `true`, and `"false"` if the boolean is `false`. |
An example of how _Boolean_ values cast to _String_ combines with the case
insensitivity of CESQL keywords is that:
```
TRUE = "true" AND FALSE = "false"
```
will evaluate to `true`, while
```
TRUE = "TRUE" OR FALSE = "FALSE"
```
will evaluate to `false`.
When the argument types of an operator/function invocation don't match the
signature of the operator/function being invoked, the CESQL engine MUST try to
perform an implicit cast.
This section defines an **ambiguous** operator as an operator that is
overloaded with another operator definition with same symbol/name and arity but
different parameter types. Note: a function can not be ambiguous as it is not
allowed for two functions to have the same arity and name.
A CESQL engine MUST apply the following implicit casting rules in order:
1. If the operator/function is unary (argument `x`):
1. If it's not ambiguous, cast `x` to the parameter type.
1. If it's ambiguous, raise a _CastError_ and the cast result is `false`.
1. If the operator is binary (left operand `x` and right operand `y`):
1. If it's not ambiguous, cast `x` and `y` to the corresponding parameter
types.
1. If it's ambiguous, use the `y` type to search, in the set of ambiguous
operators, every definition of the operator using the `y` type as the
right parameter type:
1. If such operator definition exists and is unique, cast `x` to the type
of the left parameter
1. Otherwise, raise a _CastError_ and the result is `false`
1. If the function is n-ary with `n > 1`:
1. Cast all the arguments to the corresponding parameter types.
1. If the operator is n-ary with `n > 2`:
1. If it's not ambiguous, cast all the operands to the target type.
1. If it's ambiguous, raise a _CastError_ and the cast result is `false`.
For the `IN` operator, a special rule is defined: the left argument MUST be
used as the target type to eventually cast the set elements.
For example, assuming `MY_STRING_PREDICATE` is a unary predicate accepting a
_String_ parameter and returning a _Boolean_, this expression:
```
MY_STRING_PREDICATE(sequence + 10)
```
MUST be evaluated as follows:
1. `sequence` is cast to _Integer_ using the same semantics of `INT`
1. `sequence + 10` is executed
1. `sequence + 10` result is cast to _String_ using the same semantics of
`STRING`
1. `MY_STRING_PREDICATE` is invoked with the result of the previous point as
input.
Another example, in this expression `sequence` is cast to _Integer_:
```
sequence = 10
```
`=` is an arity-2 ambiguous operator, because it's defined for
`String x String`, `Boolean x Boolean` and `Integer x Integer`. Because the
right operand of the operator is an _Integer_ and there is only one `=`
definition which uses the type _Integer_ as the right parameter, `sequence`
is cast to _Integer_.
## 4. Implementation suggestions
This section is meant to provide some suggestions while implementing and
adopting the CloudEvents Expression Language. It's non-normative, hence none of
the below text is mandatory.
### 4.1. Error handling
Because CESQL expressions are total, they always define a return value,
included in the [type system](#31-type-system), even after an error occurs.
When evaluating an expression, the evaluator can operate in two _modes_, in
relation to error handling:
- Fail fast mode: When an error is triggered, the evaluation is interrupted and
returns the error, with the zero value for the return type of the expression.
- Complete evaluation mode: When an error is triggered, the evaluation is
continued, and the evaluation of the expression returns both the result and
the error(s).
Choosing which evaluation mode to adopt and implement depends on the use case.
## 5. Examples
_CloudEvent including a subject_
```
EXISTS subject
```
_CloudEvent including the extension 'firstname' with value 'Francesco'_
```
firstname = 'Francesco'
```
_CloudEvent including the extension 'firstname' with value 'Francesco' or the
subject with value 'Francesco'_
```
firstname = 'Francesco' OR subject = 'Francesco'
```
_CloudEvent including the extension 'firstname' with value 'Francesco' and
extension 'lastname' with value 'Guardiani', or the subject with value
'Francesco Guardiani'_
```
(firstname = 'Francesco' AND lastname = 'Guardiani') OR subject = 'Francesco Guardiani'
```
_CloudEvent including the extension 'sequence' with numeric value 10_
```
sequence = 10
```
_CloudEvent including the extension 'hop' and 'ttl', where 'hop' is smaller
than 'ttl'_
```
hop < ttl
```
## 6. References
- [RFC2119][rfc2119] Key words for use in RFCs to Indicate Requirement Levels
[rfc2119]: https://tools.ietf.org/html/rfc2119
[total-programming-language-wiki]: https://en.wikipedia.org/wiki/Total_functional_programming
[referential-transparency-wiki]: https://en.wikipedia.org/wiki/Referential_transparency
[ce-attribute-naming-convention]: ../cloudevents/spec.md#naming-conventions
[ce-type-system]: ../cloudevents/spec.md#type-system
[ce-id-attribute]: ../cloudevents/spec.md#id
[subscriptions-filter-dialect]: ../subscriptions/spec.md#3241-filter-dialects
[ebnf-xml-spec]: https://www.w3.org/TR/REC-xml/#sec-notation
[modulo-operation-wiki]: https://en.wikipedia.org/wiki/Modulo_operation
[iso-9075]: https://en.wikipedia.org/wiki/ISO/IEC_9075

3
cloudevents/README.md Normal file
View File

@ -0,0 +1,3 @@
# CloudEvents - Version 1.0.3-wip
See the [CloudEvents specification](spec.md).

View File

@ -0,0 +1,160 @@
# CloudEvents Release Notes
<!-- no verify-specs -->
## v1.0.2 - 2022/02/05
- Add C# namespace option to proto (#937)
- Tweak SDK requirements wording (#915)
- Re-organized repo directory structure (#904/#905)
- Translate CE specs into Chinese (#899/#898)
- Explicitly state application/json defaulting when serializing (#881)
- Add PowerShell SDK to the list of SDKs (#875)
- WebHook "Origin" header concept clashes with RFC6454 (#870)
- Clarify data encoding in JSON format with a JSON datacontenttype (#861)
- Webhook-Allowed-Origin instead of Webhook-Request-Origin (#836)
- Clean-up of Sampled Rate Extension (#832)
- Remove the conflicting sentence in Kafka Binding (#823/#813)
- Fix the sentences conflict in Kafka Binding (#814)
- Clarify HTTP header value encoding and decoding requirements (#793)
- Expand versioning suggestions in Primer (#799)
- Add support for protobuf batch format (#801)
- Clarify HTTP header value encoding and decoding requirements (#816)
- Primer guidance for dealing with errors (#763)
- Information Classification Extension (#785)
- Clarify the role of partitioning extension in Kafka (#727)
## v1.0.1 - 2020/12/12
- Add protobuf format as a sub-protocol (#721)
- Allow JSON values to be null, meaning unset (#713)
- [Primer] Adding a Non-Goal w.r.t Security (#712)
- WebSockets protocol binding (#697)
- Clarify difference between message mode and HTTP content mode (#672)
- add missing sdks to readme (#666)
- New sdk maintainers rules (#665)
- move sdk governance and cleanup (#663)
- Bring 'datadef' definition into line with specification (#658)
- Add CoC and move some governance docs into 'community' (#656)
- Add blog post around understanding Cloud Events interactions (#651)
- SDK governance draft (#649)
- docs: add common processes for SDK maintainers and contributors (#648)
- Adding Demo for Cloud Events Orchestration (#646)
- Clarified MUST requirement for JSON format (#644)
- Re-Introducing Protocol Buffer Representation (#626)
- Closes #615 (#616)
- Reworked Distributed Tracing Extension (#607)
- Minor updates to Cloud Events Primer (#600)
- Kafka clarifications (#599)
- Proprietary binding spec inclusion guide (#595)
- Adding link to Pub/Sub binding (#588)
- Add some clarity around SDK milestones (#584)
- How to determine binary CE vs random non-CE message (#577)
- Adding Visual Studio Code extension to community open-source doc (#573)
- Specify encoding of kafka header keys and values and message key (#572)
- Fix distributed tracing example (#569)
- Paragraph about nested events to the primer (#567)
- add rules for changing Admins- #564
- Updating JSON Schema (#563)
- Say it's ok to ignore non-MUST recommendations - at your own risk (#562)
- Update Distributed Tracing extension spec links (#550)
- Add Ruby SDK to SDK lists (#548)
## v1.0.0 - 2019/10/24
- Use "producer" and "consumer" instead of "sender" and "receiver"
- Clarification that intermediaries should forward optional attributes
- Remove constraint that attribute names must start with a letter
- Remove suggestion that attributes names should be descriptive and terse
- Clarify that a single occurrence may result in more than one event
- Add an Event Data section (replacing `data`), making event data a top level
concept rather than an attribute
- Introduce an Event Format section
- Define structured-mode and binary-mode messages
- Define protocol binding
- Add extension attributes into "context attributes" description
- Move mention of attribute serialization mechanism from "context attributes"
description into "type system"
- Change "transport" to "protocol" universally
- Introduce the Boolean, URI and URI-reference types for attributes
- Remove the Any and Map types for attributes
- Clarify which Unicode characters are permitted in String attributes
- Require all context attribute values to be one of the listed types,
and state that they may be presented as native types or strings.
- Require `source` to be non-empty; recommend an absolute URI
- Update version number from 0.3 to 1.0
- Clarify that `type` is related to "the originating occurrence"
- Remove `datacontentencoding` section
- Clarify handling of missing `datacontenttype` attribute
- Rename `schemaurl` to `dataschema`, and change type from URI-reference to URI
- Constrain `dataschema` to be non-empty (when present)
- Add details of how `time` can be generated when it can't be determined,
specifically around consistency within a source
- Add details of extension context attribute handling
- Add recommendation that CloudEvent receivers pass on non-CloudEvent metadata
- Sample CloudEvent no longer has a JSON object as a sample extension value
## v0.3 - 2019/06/13
- Update to title format. (#447)
- Remove blank section
- Misc. typo fixes
- Add some guidance on how to construct CloudEvents (#404)
- Size Constraints (#405)
- Type system changes // canonical string representation (#432)
- Add some additional design points for ID (#403)
- Add "Subject" context attribute definition
- Terminology additions for Source, Consumer, Producer and Intermediary (#420)
- Added partitioning extension (#218)
- Issue #331: Clarify scope of source and id uniqueness
- Added link to dataref.md
- Order the attributes section
- Fix bad hrefs for our images (#424)
- Master represents the future version of the spec, use the future version in the text. (#415)
- Adjust examples to include AWS CloudWatch events, our de facto central Event format, and remove valid-but-not-terribly-relevant SNS & Kinesis examples.
- Add dataref attribute and describe Claim Check Pattern (#377)
- Do some clean-up items for PR 406 that were missed
- Introducing "subject" (#406)
- Added datacontentencoding (#387)
- Add Apache RocketMQ proprietary binding with cloudevents
- Ran https://prettier.io/ command on all markdown. (#411)
- Privacy & Security (#399)
- clarify what OPTIONAL means
- Extensions follow attribute naming scheme introduced in #321
- add to README
- fix typo
- The linter can't abide placeholder links 🙄
- Collect proprietary specs in dedicated file
- Move "extension attributes" section down to end of context attributes
- Fixed a broken link in the primer
- Fix broken link
- Consistency: schemaurl uses URI-reference, protobuf uses URI-reference
- HTTP Transport Binding for batching JSON (#370)
- minLength for non-empty attributes, add schemaurl (#372)
- Fix type reference in it's description
- Format data consistently with the paragraph above
- remove duplicate paragraph
- Add Integer as allowed for Any in description of variant type
- s/contenttype/datatype/g
- Add an announcement to our release process
- Transports are responsible for batching messages (#360)
- Specify range of Integer type exactly (#361)
- Fix TOC in http transport
- add KubeCon demo info
## v0.2 - 2018/12/06
- Added HTTP WebHook Specification (#155)
- Added AMQP 1.0 transport and AMQP type system mapping (#157)
- Added MQTT 3.1.1 and 5.0 transport binding (#158)
- Added NATS transport binding (#215)
- Added Distributed Tracing extension (#227)
- Added a Primer (#238)
- Added Sampling extension (#243)
- Defined minimum bar for new protocols/encodings (#254)
- Removed eventTypeVersion (#256)
- Moved serialization of extensions to be top-level JSON attributes (#277)
- Added Sequence extension (#291)
- Added Protobuf transport (#295)
- Defined minimum bar for new extensions (#308)
- Require all attributes to be lowercase and restrict the character set (#321)
- Simplified/shortened the attribute names (#339)
- Added initial draft of an SDK design doc (#356)
## v0.1 - 2018/04/20
- First draft release of the spec!

229
cloudevents/SDK.md Normal file
View File

@ -0,0 +1,229 @@
# CloudEvents SDK Requirements
<!-- no verify-specs -->
The intent of this document to describe a minimum set of requirements for new
Software Development Kits (SDKs) for CloudEvents. These SDKs are designed and
implemented to enhance and speed up CloudEvents integration. As part of
community efforts CloudEvents team committed to support and maintain the
following SDKs:
- [C#/.NET SDK](https://github.com/cloudevents/sdk-csharp)
- [Go SDK](https://github.com/cloudevents/sdk-go)
- [Java SDK](https://github.com/cloudevents/sdk-java)
- [JavaScript SDK](https://github.com/cloudevents/sdk-javascript)
- [PHP SDK](https://github.com/cloudevents/sdk-php)
- [PowerShell SDK](https://github.com/cloudevents/sdk-powershell)
- [Python SDK](https://github.com/cloudevents/sdk-python)
- [Ruby SDK](https://github.com/cloudevents/sdk-ruby)
- [Rust SDK](https://github.com/cloudevents/sdk-rust)
This is intended to provide guidance and requirements for SDK authors. This
document is intended to be kept up to date with the CloudEvents spec.
The SDKs are community driven activities and are (somewhat) distinct from the
CloudEvents specification itself. In other words, while ideally the SDKs are
expected to keep up with changes to the specification, it is not a hard
requirement that they do so. It will be continguent on the specific SDK's
maintainers to find the time.
## Contribution Acceptance
Being an open source community the CloudEvents team is open for new members as
well open to their contributions. In order to ensure that an SDK is going to be
supported and maintained the CloudEvents community would like to ensure that:
- Each SDK has active points of contact.
- Each SDK supports the latest(N), and N-1, major releases of the
[CloudEvent spec](spec.md)\*.
- Within the scope of a major release, only support for the latest minor
version is needed.
Support for release candidates is not required, but strongly encouraged.
\* Note: v1.0 is a special case and it is recommended that as long as v1.0
is the latest version, SDKs should also support v0.3.
## Technical Requirements
Each SDK MUST meet these requirements:
- Supports CloudEvents at spec milestones and ongoing development version.
- Encode a canonical Event into a transport specific encoded message.
- Decode transport specific encoded messages into a Canonical Event.
- Idiomatic usage of the programming language.
- Using current language version(s).
- Supports HTTP transport renderings in both `structured` and `binary`
content mode.
### Object Model Structure Guidelines
Each SDK will provide a generic CloudEvents class/object/structure that
represents the canonical form of an Event.
The SDK should enable users to bypass implementing transport specific encoding
and decoding of the CloudEvents `Event` object. The general flow for Objects
should be:
```
Event (-> Message) -> Transport
```
and
```
Transport (-> Message) -> Event
```
An SDK is not required to implement a wrapper around the transport, the focus
should be around allowing programming models to work with the high level `Event`
object, and providing tools to take the `Event` and turn it into something that
can be used with the implementation transport selected.
At a high level, the SDK needs to be able to help with the following tasks:
1. Compose an Event.
1. Encode an Event given a transport and encoding (into a Transport Message if
appropriate).
1. Decode an Event given a transport specific message, request or response (into
a Transport Message if appropriate).
#### Compose an Event
Provide a convenient way to compose both a single message and many messages.
Implementers will need a way to quickly build up and convert their event data
into the a CloudEvents encoded Event. In practice there tend to be two aspects
to event composition,
1. Event Creation
- "I have this data that is not formatted as a CloudEvent and I want it to be."
1. Event Mutation
- "I have a CloudEvents formatted Event and I need it to be a different Event."
- "I have a CloudEvents formatted Event and I need to mutate the Event."
Event creation is highly idiomatic to the SDK language.
Event mutation tends to be solved with an accessor pattern, like getters and
setters. But direct key access could be leveraged, or named-key accessor
functions.
In either case, there MUST be a method for validating the resulting Event object
based on the parameters set, most importantly the CloudEvents spec version.
#### Encode/Decode an Event
Each SDK MUST support encoding and decoding an Event with regards to a transport
and encoding:
- Each SDK MUST support structured-mode messages for each transport that it
supports.
- Each SDK SHOULD support binary-mode messages for each transport that it
supports.
- Each SDK SHOULD support batch-mode messages for each transport that it
supports (where the event format and transport combination supports batch mode).
- Each SDK SHOULD indicate which modes it supports for each supported event
format, both in the [table below](#feature-support) and in any SDK-specific
documentation provided.
Note that when decoding an event, media types MUST be matched
case-insensitively, as specified in [RFC 2045]
(https://tools.ietf.org/html/rfc2045).
#### Data
Data access from the event has some considerations, the Event at rest could be
encoded into the `base64` form, as structured data, or as a wire format like
`json`. An SDK MUST provide a method for unpacking the data from these formats
into a native format.
#### Extensions
Supporting CloudEvents extensions is idiomatic again, but a method that mirrors
the data access seems to work.
#### Validation
Validation MUST be possible on an individual Event. Validation MUST take into
account the spec version, and all the requirements put in-place by the spec at
each version.
SDKs SHOULD perform validation on context attribute values provided to it by
the SDK user. This will help ensure that only valid CloudEvents are generated.
## Documentation
Each SDK must provide examples using at least HTTP transport of:
- Composing an Event.
- Encoding and sending a composed Event.
- Receiving and decoding an Event.
## Feature Support
Each SDK must update the following "support table" periodically to ensure
they accurately the status of each SDK's support for the stated features.
<!--
Do these commands in vi with the cursor after these comments.
Easiest to edit table by first doing this:
:g/^|/s/ :heavy_check_mark: / :y: /g
and making the window wide enough that lines don't wrap. Then it should look nice.
Undo it when done:
:g/^|/s/ :y: / :heavy_check_mark: /g
-->
| Feature | C# | Go | Java | JS | PHP | PS | Python | Ruby | Rust |
|:----------------------------------------------------------------------------------------------------------------------------------------------| :-: | :-: | :--: | :-: | :-: | :-: | :----: | :--: | :--: |
| **[v1.0](https://github.com/cloudevents/spec/tree/v1.0)** |
| [CloudEvents Core](https://github.com/cloudevents/spec/blob/v1.0.2/cloudevents/spec.md) | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: |
| Event Formats |
| [Avro](https://github.com/cloudevents/spec/blob/v1.0.2/cloudevents/formats/avro-format.md) | :heavy_check_mark: | | :x: | :x: | | | | :x: | :x: |
| [Avro Compact](https://github.com/cloudevents/spec/blob/main/cloudevents/working-drafts/avro-compact-format.md) | :heavy_check_mark: | | :x: | :x: | | | | | :x: |
| [JSON](https://github.com/cloudevents/spec/blob/v1.0.2/cloudevents/formats/json-format.md) | :heavy_check_mark: | | :heavy_check_mark: | :heavy_check_mark: | | | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: |
| [Protobuf ](https://github.com/cloudevents/spec/blob/v1.0.2/cloudevents/formats/protobuf-format.md) | :heavy_check_mark: | | :heavy_check_mark: | :x: | | | | :x: | :x: |
| Bindings / Content Modes |
| [AMQP Binary](https://github.com/cloudevents/spec/blob/v1.0.2/cloudevents/bindings/amqp-protocol-binding.md#31-binary-content-mode) | :heavy_check_mark: | | :heavy_check_mark: | :x: | | | | :x: | :x: |
| [AMQP Structured](https://github.com/cloudevents/spec/blob/v1.0.2/cloudevents/bindings/amqp-protocol-binding.md#32-structured-content-mode) | :heavy_check_mark: | | :heavy_check_mark: | :x: | | | | :x: | :x: |
| [HTTP Binary](https://github.com/cloudevents/spec/blob/v1.0.2/cloudevents/bindings/http-protocol-binding.md#31-binary-content-mode) | :heavy_check_mark: | | :heavy_check_mark: | :heavy_check_mark: | | | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: |
| [HTTP Structured](https://github.com/cloudevents/spec/blob/v1.0.2/cloudevents/bindings/http-protocol-binding.md#32-structured-content-mode) | :heavy_check_mark: | | :heavy_check_mark: | :heavy_check_mark: | | | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: |
| [HTTP Batch](https://github.com/cloudevents/spec/blob/v1.0.2/cloudevents/bindings/http-protocol-binding.md#33-batched-content-mode) | :heavy_check_mark: | | :x: | :x: | | | | :heavy_check_mark: | :heavy_check_mark: |
| [Kafka Binary](https://github.com/cloudevents/spec/blob/v1.0.2/cloudevents/bindings/kafka-protocol-binding.md#32-binary-content-mode) | :heavy_check_mark: | | :heavy_check_mark: | :heavy_check_mark: | | | :heavy_check_mark: | :x: | :heavy_check_mark: |
| [Kafka Structured](https://github.com/cloudevents/spec/blob/v1.0.2/cloudevents/bindings/kafka-protocol-binding.md#33-structured-content-mode) | :heavy_check_mark: | | :heavy_check_mark: | :heavy_check_mark: | | | :heavy_check_mark: | :x: | :heavy_check_mark: |
| [MQTT v5 Binary](https://github.com/cloudevents/spec/blob/v1.0.2/cloudevents/bindings/mqtt-protocol-binding.md#31-binary-content-mode) | :x: | | :x: | :heavy_check_mark: | | | | :x: | :x: |
| [MQTT Structured](https://github.com/cloudevents/spec/blob/v1.0.2/cloudevents/bindings/mqtt-protocol-binding.md#32-structured-content-mode) | :heavy_check_mark: | | :x: | :heavy_check_mark: | | | | :x: | :x: |
| [NATS Binary](https://github.com/cloudevents/spec/blob/v1.0.2/cloudevents/bindings/nats-protocol-binding.md) | :x: | | :x: | :x: | | | | :x: | :heavy_check_mark: |
| [NATS Structured](https://github.com/cloudevents/spec/blob/v1.0.2/cloudevents/bindings/nats-protocol-binding.md) | :x: | | :x: | :x: | | | | :x: | :heavy_check_mark: |
| [WebSockets Binary](https://github.com/cloudevents/spec/blob/v1.0.2/cloudevents/bindings/websockets-protocol-binding.md) | :x: | | :x: | :heavy_check_mark: | | | | :x: | :x: |
| [WebSockets Structured](https://github.com/cloudevents/spec/blob/v1.0.2/cloudevents/bindings/websockets-protocol-binding.md) | :x: | | :x: | :heavy_check_mark: | | | | :x: | :x: |
| Proprietary Bindings |
| [RocketMQ](https://github.com/apache/rocketmq-externals/blob/master/rocketmq-cloudevents-binding/rocketmq-transport-binding.md) | :x: | | :heavy_check_mark: | :x: | | | | :x: | :x: |
| [RabbitMQ](https://github.com/knative-extensions/eventing-rabbitmq/blob/main/cloudevents-protocol-spec/spec.md) | :x: | | | | | | | | |
| |
| **[v0.3](https://github.com/cloudevents/spec/tree/v0.3)** |
| [CloudEvents Core](https://github.com/cloudevents/spec/blob/v0.3/spec.md) | :x: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :x: | :x: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: |
| Event Formats |
| [AMQP](https://github.com/cloudevents/spec/blob/v0.3/amqp-format.md) | :x: | | :x: | :x: | | | | :x: | :x: |
| [JSON](https://github.com/cloudevents/spec/blob/v0.3/json-format.md) | :x: | | :heavy_check_mark: | :heavy_check_mark: | | | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: |
| [Protobuf](https://github.com/cloudevents/spec/blob/v0.3/protobuf-format.md) | :x: | | :heavy_check_mark: | :x: | | | | :x: | :x: |
| Bindings / Content Modes |
| [AMQP Binary](https://github.com/cloudevents/spec/blob/v0.3/amqp-transport-binding.md#31-binary-content-mode) | :x: | | :heavy_check_mark: | :x: | | | | :x: | :x: |
| [AMQP Structured](https://github.com/cloudevents/spec/blob/v0.3/amqp-transport-binding.md#32-structured-content-mode) | :x: | | :heavy_check_mark: | :x: | | | | :x: | :x: |
| [HTTP Binary](https://github.com/cloudevents/spec/blob/v0.3/http-transport-binding.md) | :x: | | :heavy_check_mark: | :heavy_check_mark: | | | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: |
| [HTTP Structured](https://github.com/cloudevents/spec/blob/v0.3/http-transport-binding.md) | :x: | | :heavy_check_mark: | :heavy_check_mark: | | | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: |
| [HTTP Batch](https://github.com/cloudevents/spec/blob/v0.3/http-transport-binding.md) | :x: | | :x: | :x: | | | | :heavy_check_mark: | :heavy_check_mark: |
| [Kafka Binary](https://github.com/cloudevents/spec/blob/v1.0.2/cloudevents/bindings/kafka-protocol-binding.md#32-binary-content-mode) | :x: | | :heavy_check_mark: | :heavy_check_mark: | | | :heavy_check_mark: | :x: | :heavy_check_mark: |
| [Kafka Structured](https://github.com/cloudevents/spec/blob/v1.0.2/cloudevents/bindings/kafka-protocol-binding.md#33-structured-content-mode) | :x: | | :heavy_check_mark: | :heavy_check_mark: | | | :heavy_check_mark: | :x: | :heavy_check_mark: |
| [MQTT v5 Binary](https://github.com/cloudevents/spec/blob/v0.3/mqtt-transport-binding.md) | :x: | | :x: | :x: | | | | :x: | :x: |
| [MQTT Structured](https://github.com/cloudevents/spec/blob/v0.3/mqtt-transport-binding.md) | :x: | | :x: | :x: | | | | :x: | :x: |
| [NATS Binary](https://github.com/cloudevents/spec/blob/v0.3/nats-transport-binding.md) | :x: | | :x: | :x: | | | | :x: | :heavy_check_mark: |
| [NATS Structured](https://github.com/cloudevents/spec/blob/v0.3/nats-transport-binding.md) | :x: | | :x: | :x: | | | | :x: | :heavy_check_mark: |
| [WebSockets Binary](https://github.com/cloudevents/spec/blob/v1.0.2/cloudevents/bindings/websockets-protocol-binding.md) | :x: | | :x: | :heavy_check_mark: | | | | :x: | :x: |
| [WebSockets Structured](https://github.com/cloudevents/spec/blob/v1.0.2/cloudevents/bindings/websockets-protocol-binding.md) | :x: | | :x: | :heavy_check_mark: | | | | :x: | :x: |
| Proprietary Bindings |
| [RocketMQ](https://github.com/apache/rocketmq-externals/blob/master/rocketmq-cloudevents-binding/rocketmq-transport-binding.md) | :x: | | :heavy_check_mark: | :x: | | | | :x: | :x: |

View File

@ -0,0 +1,16 @@
# CloudEvents Adapters
<!-- no verify-specs -->
Not all event producers will produce CloudEvents natively. As a result,
some "adapter" might be needed to convert these events into CloudEvents.
This will typically mean extracting metadata from the events to be used as
CloudEvents attributes. In order to promote interoperability across multiple
implementations of these adapters, the following documents show the proposed
algorithms that should be used:
- [AWS S3](./aws-s3.md)
- [AWS SNS](./aws-sns.md)
- [CouchDB](./couchdb.md)
- [GitHub](./github.md)
- [GitLab](./gitlab.md)

View File

@ -0,0 +1,34 @@
# AWS Simple Storage Service CloudEvents Adapter
This document describes how to convert
[AWS S3 events](https://docs.aws.amazon.com/AmazonS3/latest/dev/notification-content-structure.html)
into CloudEvents.
AWS S3 event documentation:
https://docs.aws.amazon.com/AmazonS3/latest/dev/notification-content-structure.html
All S3 events are converted into CloudEvents using the
same pattern as described in the following table:
| CloudEvents Attribute | Value |
| :-------------------- | :---------------------------------------------- |
| `id` | "responseElements.x-amz-request-id" + `.` + "responseElements.x-amz-id-2" |
| `source` | "eventSource" value + `.` + "awsRegion" value + `.` + "s3.buckets.name" value |
| `specversion` | `1.0` |
| `type` | `com.amazonaws.s3.` + "eventName" value |
| `datacontenttype` | S3 event type (e.g. `application/json`) |
| `dataschema` | Omit |
| `subject` | "s3.object.key" value |
| `time` | "eventTime" value |
| `data` | S3 event |
Comments:
- While the "eventSource" value will always be static (`aws:s3`) when
the event is coming from S3, if some other cloud provider is supporting
the S3 event format it is expected that this value will not be
`aws:s3` for them - it is expected to be something specific to their
environment.
- Consumers of these events will therefore be able to know if the event
is an S3 type of event (regardless of whether it is coming from S3 or
an S3-compatible provider) by detecting the `com.amazonaws.s3` prefix
on the `type` attribute.

View File

@ -0,0 +1,53 @@
# Amazon Simple Notification Service CloudEvents Adapter
This document describes how to convert [AWS SNS messages][sns-messages] into CloudEvents.
Amazon SNS MAY send a subscription confirmation, notification, or unsubscribe confirmation
message to your HTTP/HTTPS endpoints.
Each section below describes how to determine the CloudEvents attributes
based on the specified type of SNS messages.
### Subscription Confirmation
| CloudEvents Attribute | Value |
| :-------------------- | :---------------------------------------------- |
| `id` | "x-amz-sns-message-id" value |
| `source` | "x-amz-sns-topic-arn" value |
| `specversion` | `1.0` |
| `type` | `com.amazonaws.sns.` + "x-amz-sns-message-type" value |
| `datacontenttype` | `application/json` |
| `dataschema` | Omit |
| `subject` | Omit |
| `time` | "Timestamp" value |
| `data` | HTTP payload |
### Notification
| CloudEvents Attribute | Value |
| :-------------------- | :---------------------------------------------- |
| `id` | "x-amz-sns-message-id" value |
| `source` | "x-amz-sns-subscription-arn" value |
| `specversion` | `1.0` |
| `type` | `com.amazonaws.sns.` + "x-amz-sns-message-type" value |
| `datacontenttype` | `application/json` |
| `dataschema` | Omit |
| `subject` | "Subject" value (if present) |
| `time` | "Timestamp" value |
| `data` | HTTP payload |
### Unsubscribe Confirmation
| CloudEvents Attribute | Value |
| :-------------------- | :---------------------------------------------- |
| `id` | "x-amz-sns-message-id" value |
| `source` | "x-amz-sns-subscription-arn" value |
| `specversion` | `1.0` |
| `type` | `com.amazonaws.sns.` + "x-amz-sns-message-type" value |
| `datacontenttype` | `application/json` |
| `dataschema` | Omit |
| `subject` | Omit |
| `time` | "Timestamp" value |
| `data` | HTTP payload |
[sns-messages]: https://docs.aws.amazon.com/sns/latest/dg/sns-message-and-json-formats.html

View File

@ -0,0 +1,74 @@
# CouchDB CloudEvents Adapter
This document describes how to convert:
- [CouchDB Document events](http://docs.couchdb.org/en/stable/api/database/changes.html) and
- [CouchDB Database events](http://docs.couchdb.org/en/stable/api/server/common.html#db-updates)
into CloudEvents.
Each section below describes how to determine the CloudEvents attributes
based on the event type.
## /db/\_changes
### Update
| CloudEvents Attribute | Value |
| :-------------------- | :------------------------------------ |
| `id` | The event sequence identifier (`seq`) |
| `source` | The server URL / `db` |
| `specversion` | `1.0` |
| `type` | `org.apache.couchdb.document.updated` |
| `datacontenttype` | `application/json` |
| `subject` | The document identifier (`id`) |
| `time` | Current time |
| `data` | `changes` value (array of `revs`) |
### Delete
| CloudEvents Attribute | Value |
| :-------------------- | :------------------------------------ |
| `id` | The event sequence identifier (`seq`) |
| `source` | The server URL / `db` |
| `specversion` | `1.0` |
| `type` | `org.apache.couchdb.document.deleted` |
| `datacontenttype` | `application/json` |
| `subject` | The document identifier (`id`) |
| `time` | Current time |
| `data` | `changes` value (array of `revs`) |
## /\_db_updates
### Create
| CloudEvents Attribute | Value |
| :-------------------- | :------------------------------------ |
| `id` | The event sequence identifier (`seq`) |
| `source` | The server URL |
| `specversion` | `1.0` |
| `type` | `org.apache.couchdb.database.created` |
| `subject` | The database name (`db_name`) |
| `time` | Current time |
### Update
| CloudEvents Attribute | Value |
| :-------------------- | :------------------------------------ |
| `id` | The event sequence identifier (`seq`) |
| `source` | The server URL |
| `specversion` | `1.0` |
| `type` | `org.apache.couchdb.database.updated` |
| `subject` | The database name (`db_name`) |
| `time` | Current time |
### Delete
| CloudEvents Attribute | Value |
| :-------------------- | :------------------------------------ |
| `id` | The event sequence identifier (`seq`) |
| `source` | The server URL |
| `specversion` | `1.0` |
| `type` | `org.apache.couchdb.database.deleted` |
| `subject` | The database name (`db_name`) |
| `time` | Current time |

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,166 @@
# GitLab CloudEvents Adapter
This document describes how to convert
[GitLab webhook events](https://docs.gitlab.com/ee/user/project/integrations/webhooks.html#events)
into a CloudEvents.
GitLab webhook event documentation:
https://docs.gitlab.com/ee/user/project/integrations/webhooks.html#events
Each section below describes how to determine the CloudEvents attributes
based on the specified event.
## Push Event
| CloudEvents Attribute | Value |
| :-------------------- | :--------------------------------------- |
| `id` | Generate a new unique value, e.g. a UUID |
| `source` | "repository.homepage" value |
| `specversion` | `1.0` |
| `type` | `com.gitlab.push` |
| `datacontenttype` | `application/json` |
| `dataschema` | Omit |
| `subject` | "checkout_sha" value |
| `time` | Current time |
| `data` | Content of HTTP request body |
## Tag Event
| CloudEvents Attribute | Value |
| :-------------------- | :--------------------------------------- |
| `id` | Generate a new unique value, e.g. a UUID |
| `source` | "repository.homepage" value |
| `specversion` | `1.0` |
| `type` | `com.gitlab.tag_push` |
| `datacontenttype` | `application/json` |
| `dataschema` | Omit |
| `subject` | "ref" value |
| `time` | Current time |
| `data` | Content of HTTP request body |
## Issue Event
| CloudEvents Attribute | Value |
| :-------------------- | :---------------------------------------------------- |
| `id` | Generate a new unique value, e.g. a UUID |
| `source` | "repository.homepage" value |
| `specversion` | `1.0` |
| `type` | `com.gitlab.issue.` + "object_attributes.state" value |
| `datacontenttype` | `application/json` |
| `dataschema` | Omit |
| `subject` | "object_attributes.iid" value |
| `time` | Current time |
| `data` | Content of HTTP request body |
## Comment on Commit Event
| CloudEvents Attribute | Value |
| :-------------------- | :--------------------------------------- |
| `id` | Generate a new unique value, e.g. a UUID |
| `source` | "commit.url" value |
| `specversion` | `1.0` |
| `type` | `com.gitlab.note.commit` |
| `datacontenttype` | `application/json` |
| `dataschema` | Omit |
| `subject` | "object_attributes.id" value |
| `time` | "object_attributes.created_at" value |
| `data` | Content of HTTP request body |
## Comment on Merge Request Event
| CloudEvents Attribute | Value |
| :-------------------- | :----------------------------------------------------------- |
| `id` | Generate a new unique value, e.g. a UUID |
| `source` | "object_attributes.url" value, without the `#note\_...` part |
| `specversion` | `1.0` |
| `type` | `com.gitlab.note.merge_request` |
| `datacontenttype` | `application/json` |
| `dataschema` | Omit |
| `subject` | "object_attributes.id" value |
| `time` | "object_attributes.created_at` value |
| `data` | Content of HTTP request body |
## Comment on Issue Event
| CloudEvents Attribute | Value |
| :-------------------- | :---------------------------------------------------------- |
| `id` | Generate a new unique value, e.g. a UUID |
| `source` | "object_attributes.url" value without the `#note\_...` part |
| `specversion` | `1.0` |
| `type` | `com.gitlab.note.issue` |
| `datacontenttype` | `application/json` |
| `dataschema` | Omit |
| `subject` | "object_attributes.id" value |
| `time` | "object_attributes.created_at" value |
| `data` | Content of HTTP request body |
## Comment on Code Snippet Event
| CloudEvents Attribute | Value |
| :-------------------- | :---------------------------------------------------------- |
| `id` | Generate a new unique value, e.g. a UUID |
| `source` | "object_attributes.url" value without the `#note\_...` part |
| `specversion` | `1.0` |
| `type` | `com.gitlab.note.snippet` |
| `datacontenttype` | `application/json` |
| `dataschema` | Omit |
| `subject` | "object_attributes.id" value |
| `time` | "object_attributes.created_at" value |
| `data` | Content of HTTP request body |
## Merge Request Event
| CloudEvents Attribute | Value |
| :-------------------- | :------------------------------------------------------------- |
| `id` | Generate a new unique value, e.g. a UUID |
| `source` | "repository.homepage" value |
| `specversion` | `1.0` |
| `type` | `com.gitlab.merge_request.` + "object_attributes.action" value |
| `datacontenttype` | `application/json` |
| `dataschema` | Omit |
| `subject` | "object_attributes.iid" value |
| `time` | "object_attributes.created_at" value |
| `data` | Content of HTTP request body |
## Wiki Page Event
| CloudEvents Attribute | Value |
| :-------------------- | :--------------------------------------------------------- |
| `id` | Generate a new unique value, e.g. a UUID |
| `source` | "project.web_url" value |
| `specversion` | `1.0` |
| `type` | `com.gitlab.wiki_page.` + "object_attributes.action" value |
| `datacontenttype` | `application/json` |
| `dataschema` | Omit |
| `subject` | "object_attributes.slug" value |
| `time` | Current time |
| `data` | Content of HTTP request body |
## Pipeline Event
| CloudEvents Attribute | Value |
| :-------------------- | :-------------------------------------------------------- |
| `id` | Generate a new unique value, e.g. a UUID |
| `source` | "project.web_url" value |
| `specversion` | `1.0` |
| `type` | `com.gitlab.pipeline.` + "object_attributes.status" value |
| `datacontenttype` | `application/json` |
| `dataschema` | Omit |
| `subject` | "object_attributes.id" value |
| `time` | Current time |
| `data` | Content of HTTP request body |
## Job Event
| CloudEvents Attribute | Value |
| :-------------------- | :--------------------------------------- |
| `id` | Generate a new unique value, e.g. a UUID |
| `source` | "repository.homepage" value |
| `specversion` | `1.0` |
| `type` | `com.gitlab.job.` + "job_status" value |
| `datacontenttype` | `application/json` |
| `dataschema` | Omit |
| `subject` | "job_id" value |
| `time` | Current time |
| `data` | Content of HTTP request body |

View File

@ -0,0 +1,345 @@
# AMQP Protocol Binding for CloudEvents - Version 1.0.3-wip
## Abstract
The AMQP Protocol Binding for CloudEvents defines how events are mapped to
OASIS AMQP 1.0 ([OASIS][oasis-amqp-1.0]; ISO/IEC 19464:2014) messages.
## Table of Contents
1. [Introduction](#1-introduction)
- 1.1. [Conformance](#11-conformance)
- 1.2. [Relation to AMQP](#12-relation-to-amqp)
- 1.3. [Content Modes](#13-content-modes)
- 1.4. [Event Formats](#14-event-formats)
- 1.5. [Security](#15-security)
2. [Use of CloudEvents Attributes](#2-use-of-cloudevents-attributes)
3. [AMQP Message Mapping](#3-amqp-message-mapping)
- 3.2. [Binary Content Mode](#31-binary-content-mode)
- 3.1. [Structured Content Mode](#32-structured-content-mode)
4. [References](#4-references)
## 1. Introduction
[CloudEvents][ce] is a standardized and protocol-agnostic definition of the
structure and metadata description of events. This specification defines how the
elements defined in the CloudEvents specification are to be used in
[AMQP][oasis-amqp-1.0] messages.
### 1.1. Conformance
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD",
"SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be
interpreted as described in [RFC2119][rfc2119].
### 1.2. Relation to AMQP
This specification does not prescribe rules constraining transfer or settlement
of event messages with AMQP; it solely defines how CloudEvents are expressed as
AMQP 1.0 messages.
AMQP-based messaging and eventing infrastructures often provide higher-level
programming-level abstractions that do not expose all AMQP protocol elements, or
map AMQP protocol elements or names to proprietary constructs. This
specification uses AMQP terminology, and implementers can refer to the
respective infrastructure's AMQP documentation to determine the mapping into a
programming-level abstraction.
This specification assumes use of the default AMQP [message
format][message-format].
### 1.3. Content Modes
The CloudEvents specification defines three content modes for transferring
events: _structured_, _binary_ and _batch_. The AMQP protocol binding does not
currently support the batch content mode. Every compliant implementation SHOULD
support both structured and binary modes.
In the _structured_ content mode, event metadata attributes and event data are
placed into the AMQP message's [application data][data] section using an
event format as defined in the CloudEvents [spec][ce].
In the _binary_ content mode, the value of the event `data` is placed into the
AMQP message's [application data][data] section as-is, with the
`datacontenttype` attribute value declaring its media type mapped to the AMQP
`content-type` message property; all other event attributes are mapped to the
AMQP [application-properties][app-properties] section.
### 1.4. Event Formats
Event formats, used with the _structured_ content mode, define how an event is
expressed in a particular data format. All implementations of this specification
that support the _structured_ content mode MUST support the [JSON event
format][json-format].
### 1.5. Security
This specification does not introduce any new security features for AMQP, or
mandate specific existing features to be used.
## 2. Use of CloudEvents Attributes
This specification does not further define any of the [CloudEvents][ce] event
attributes.
One event attribute, `datacontenttype` is handled specially in _binary_ content
mode and mapped onto the AMQP content-type message property. All other
attributes are transferred as metadata without further interpretation.
This mapping is intentionally robust against changes, including the addition and
removal of event attributes, and also accommodates vendor extensions to the
event metadata. Any mention of event attributes other than `datacontenttype`
is exemplary.
## 3. AMQP Message Mapping
The content mode is chosen by the sender of the event, which is either the
requesting or the responding party. Protocol interaction patterns that might
allow solicitation of events using a particular content mode might be defined by
an application, but are not defined here.
The receiver of the event can distinguish between the two modes by inspecting
the `content-type` message property field. If the value is prefixed with the
CloudEvents media type `application/cloudevents` (matched case-insensitively),
indicating the use of a known [event format](#14-event-formats), the receiver
uses _structured_ mode, otherwise it defaults to _binary_ mode.
If a receiver detects the CloudEvents media type, but with an event format that
it cannot handle, for instance `application/cloudevents+avro`, it MAY still
treat the event as binary and forward it to another party as-is.
When the `content-type` message property is not prefixed with the CloudEvents
media type, being able to know when the message ought to be attempted to be
parsed as a CloudEvent can be a challenge. While this specification can not
mandate that senders do not include any of the CloudEvents message properties
when the message is not a CloudEvent, it would be reasonable for a receiver
to assume that if the message has all of the mandatory CloudEvents attributes
as message properties then it's probably a CloudEvent. However, as with all
CloudEvent messages, if it does not adhere to all of the normative language of
this specification then it is not a valid CloudEvent.
### 3.1. Binary Content Mode
The _binary_ content mode accommodates any shape of event data, and allows for
efficient transfer and without transcoding effort.
#### 3.1.1. AMQP content-type
For the _binary_ mode, the AMQP `content-type` property field value maps
directly to the CloudEvents `datacontenttype` attribute.
#### 3.1.2. Event Data Encoding
Event data is assumed to contain opaque application data that is
encoded as declared by the `datacontenttype` attribute.
An application is free to hold the information in any in-memory representation
of its choosing, but as it is transposed into AMQP as defined in this
specification, the assumption is that the event data is made available as a
sequence of bytes. The byte sequence is used as the AMQP
[application-data][data] section.
Example:
If the declared `datacontenttype` is `application/json;charset=utf-8`, the
expectation is that the event data is made available as [UTF-8][rfc3629] encoded
JSON text for use in AMQP.
#### 3.1.3. Metadata Headers
All [CloudEvents][ce] attributes with exception of `datacontenttype` MUST be
individually mapped to and from the AMQP
[application-properties][app-properties] section.
CloudEvents extensions that define their own attributes MAY define a secondary
mapping to AMQP properties for those attributes, also in different message
sections, especially if specific attributes or their names need to align with
AMQP features or with other specifications that have explicit AMQP header
bindings. However, they MUST also include the previously defined primary
mapping.
An extension specification that defines a secondary mapping rule for AMQP, and
any revision of such a specification, MUST also define explicit mapping rules
for all other protocol bindings that are part of the CloudEvents core at the
time of the submission or revision.
##### 3.1.3.1 AMQP Application Property Names
CloudEvent attributes MUST be prefixed with either "cloudEvents_" or
"cloudEvents:" for use in the application-properties section.
The '\_' separator character SHOULD be preferred in the interest of
compatibility with JMS 2.0 clients and JMS message selectors where the ':'
separator is not permitted for property identifiers (see section 3.8.1.1 of
[JMS2.0][JMS20]). Any single message MUST use the same separator for all
CloudEvents attributes, but a single queue MAY contain messages which use
different separators.
CloudEvents AMQP consumers SHOULD understand the "cloudEvents" prefix with both
the '\_' and the ':' separators as permitted within the constraints of the
client model. JMS 2.0 AMQP consumers MUST understand the '\_' separator; they
cannot understand the ':' separator as per the cited JMS constraints.
Examples:
* `time` maps to `cloudEvents_time`
* `id` maps to `cloudEvents_id`
* `specversion` maps to `cloudEvents_specversion`
##### 3.1.3.2 AMQP Application Property Values
The value for each AMQP application property is constructed from the respective
attribute's AMQP type representation.
The CloudEvents type system MUST be mapped to AMQP types as follows, with
additional notes below.
| CloudEvents | AMQP |
| ------------- | --------------------------- |
| Boolean | [boolean][amqp-boolean] |
| Integer | [long][amqp-long] |
| String | [string][amqp-string] |
| Binary | [binary][amqp-binary] |
| URI | [string][amqp-string] |
| URI-reference | [string][amqp-string] |
| Timestamp | [timestamp][amqp-timestamp] |
All attribute values in an AMQP binary message MUST either be represented using
the native AMQP types above or the canonical string form.
An implementation
- MUST be able to interpret both forms on an incoming AMQP message
- MAY further relax the requirements for incoming messages (for example
accepting numeric types other than AMQP long), but MUST be strict for outgoing
messages.
- SHOULD use the native AMQP form on outgoing AMQP messages when it is efficient
to do so, but MAY forward values as canonical strings
#### 3.1.4 Examples
This example shows the _binary_ mode mapping of an event into the [bare
message][message-format] sections of AMQP:
```text
--------------- properties ------------------
to: myqueue
content-type: application/json; charset=utf-8
----------- application-properties -----------
cloudEvents:specversion: 1.0
cloudEvents:type: com.example.someevent
cloudEvents:time: 2018-04-05T03:56:24Z
cloudEvents:id: 1234-1234-1234
cloudEvents:source: /mycontext/subcontext
.... further attributes ...
------------- application-data ---------------
{
... application data ...
}
----------------------------------------------
```
### 3.2. Structured Content Mode
The _structured_ content mode keeps event metadata and data together in the
payload, allowing simple forwarding of the same event across multiple routing
hops, and across multiple protocols.
#### 3.2.1. AMQP Content-Type
The [AMQP `content-type`][content-type] property field is set to the media type
of an [event format](#14-event-formats).
Example for the [JSON format][json-format]:
```text
content-type: application/cloudevents+json; charset=UTF-8
```
#### 3.2.2. Event Data Encoding
The chosen [event format](#14-event-formats) defines how all attributes
and `data` are represented.
The event metadata and data is then rendered in accordance with the event format
specification and the resulting data becomes the AMQP application [data][data]
section.
#### 3.2.3. Metadata Headers
Implementations MAY include the same AMQP application-properties as defined for
the [binary mode](#313-metadata-headers).
#### 3.2.4 Examples
This example shows a JSON event format encoded event:
```text
--------------- properties ------------------------------
to: myqueue
content-type: application/cloudevents+json; charset=utf-8
----------- application-properties ----------------------
------------- application-data --------------------------
{
"specversion" : "1.0",
"type" : "com.example.someevent",
... further attributes omitted ...
"data" : {
... application data ...
}
}
---------------------------------------------------------
```
## 4. References
- [RFC2046][rfc2046] Multipurpose Internet Mail Extensions (MIME) Part Two:
Media Types
- [RFC2119][rfc2119] Key words for use in RFCs to Indicate Requirement Levels
- [RFC3629][rfc3629] UTF-8, a transformation format of ISO 10646
- [RFC4627][rfc4627] The application/json Media Type for JavaScript Object
Notation (JSON)
- [RFC7159][rfc7159] The JavaScript Object Notation (JSON) Data Interchange
Format
- [OASIS-AMQP-1.0][oasis-amqp-1.0] OASIS Advanced Message Queuing Protocol
(AMQP) Version 1.0
- [JMS20][JMS20] JSR-343 Java Message Service 2.0
[ce]: ../spec.md
[json-format]: ../formats/json-format.md
[content-type]: https://tools.ietf.org/html/rfc7231#section-3.1.1.5
[json-value]: https://tools.ietf.org/html/rfc7159#section-3
[rfc2046]: https://tools.ietf.org/html/rfc2046
[rfc2119]: https://tools.ietf.org/html/rfc2119
[rfc3629]: https://tools.ietf.org/html/rfc3629
[rfc4627]: https://tools.ietf.org/html/rfc4627
[rfc6839]: https://tools.ietf.org/html/rfc6839#section-3.1
[rfc7159]: https://tools.ietf.org/html/rfc7159
[oasis-amqp-1.0]: http://docs.oasis-open.org/amqp/core/v1.0/amqp-core-overview-v1.0.html
[message-format]: http://docs.oasis-open.org/amqp/core/v1.0/os/amqp-core-messaging-v1.0-os.html#section-message-format
[data]: http://docs.oasis-open.org/amqp/core/v1.0/os/amqp-core-messaging-v1.0-os.html#type-data
[app-properties]: http://docs.oasis-open.org/amqp/core/v1.0/os/amqp-core-messaging-v1.0-os.html#type-application-properties
[amqp-boolean]: http://docs.oasis-open.org/amqp/core/v1.0/os/amqp-core-types-v1.0-os.html#type-boolean
[amqp-long]: http://docs.oasis-open.org/amqp/core/v1.0/os/amqp-core-types-v1.0-os.html#type-long
[amqp-binary]: http://docs.oasis-open.org/amqp/core/v1.0/os/amqp-core-types-v1.0-os.html#type-binary
[amqp-string]: http://docs.oasis-open.org/amqp/core/v1.0/os/amqp-core-types-v1.0-os.html#type-string
[amqp-timestamp]: http://docs.oasis-open.org/amqp/core/v1.0/os/amqp-core-types-v1.0-os.html#type-timestamp
[jms20]: https://jcp.org/aboutJava/communityprocess/final/jsr343/index.html

View File

@ -0,0 +1,540 @@
# HTTP Protocol Binding for CloudEvents - Version 1.0.3-wip
## Abstract
The HTTP Protocol Binding for CloudEvents defines how events are mapped to HTTP
1.1 request and response messages.
## Table of Contents
1. [Introduction](#1-introduction)
- 1.1. [Conformance](#11-conformance)
- 1.2. [Relation to HTTP](#12-relation-to-http)
- 1.3. [Content Modes](#13-content-modes)
- 1.4. [Event Formats](#14-event-formats)
- 1.5. [Security](#15-security)
2. [Use of CloudEvents Attributes](#2-use-of-cloudevents-attributes)
- 2.1. [datacontenttype Attribute](#21-datacontenttype-attribute)
- 2.2. [data](#22-data)
3. [HTTP Message Mapping](#3-http-message-mapping)
- 3.1. [Binary Content Mode](#31-binary-content-mode)
- 3.2. [Structured Content Mode](#32-structured-content-mode)
- 3.3. [Batched Content Mode](#33-batched-content-mode)
4. [References](#4-references)
## 1. Introduction
[CloudEvents][ce] is a standardized and protocol-agnostic definition of the
structure and metadata description of events. This specification defines how the
elements defined in the CloudEvents specification are to be used in [HTTP
1.1][rfc7230] requests and response messages.
### 1.1. Conformance
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD",
"SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be
interpreted as described in [RFC2119][rfc2119].
### 1.2. Relation to HTTP
This specification does not prescribe rules constraining the use or handling of
specific [HTTP methods][rfc7231-section-4], and it also does not constrain the
[HTTP target resource][rfc7230-section-5-1] that is used for transferring or
soliciting events.
Events can be transferred with all standard or application-defined HTTP request
methods that support payload body transfers. Events can be also be transferred
in HTTP responses and with all HTTP status codes that permit payload body
transfers.
All examples herein that show HTTP methods, HTTP target URIs, and HTTP status
codes are non-normative illustrations.
This specification also applies equivalently to HTTP/2 ([RFC7540][rfc7540]),
which is compatible with HTTP 1.1 semantics.
### 1.3. Content Modes
The CloudEvents specification defines three content modes for transferring
events: _structured_, _binary_ and _batch_. The HTTP protocol binding supports
all three content modes. Every compliant implementation SHOULD
support both structured and binary modes.
In the _binary_ content mode, the value of the event `data` is placed into the
HTTP request, or response, body as-is, with the `datacontenttype` attribute
value declaring its media type in the HTTP `Content-Type` header; all other
event attributes are mapped to HTTP headers.
In the _structured_ content mode, event metadata attributes and event data are
placed into the HTTP request or response body using an
[event format](#14-event-formats) that supports
[structured-mode messages][ce-message].
In the _batched_ content mode, event metadata attributes and event data of
multiple events are batched into a single HTTP request or response body using
an [event format](#14-event-formats) that supports batching
[structured-mode messages][ce-message].
### 1.4. Event Formats
Event formats, used with the _structured_ content mode, define how an event is
expressed in a particular data format. All implementations of this specification
that support the _structured_ content mode MUST support the non-batching [JSON
event format][json-format], but MAY support any additional, including
proprietary, formats.
Event formats MAY additionally define how a batch of events is expressed. Those
can be used with the _batched_ content mode.
### 1.5. Security
This specification does not introduce any new security features for HTTP, or
mandate specific existing features to be used. This specification applies
identically to [HTTP over TLS][rfc2818].
## 2. Use of CloudEvents Attributes
This specification does not further define any of the core [CloudEvents][ce]
event attributes.
This mapping is intentionally robust against changes, including the addition and
removal of event attributes, and also accommodates vendor extensions to the
event metadata.
### 2.1. datacontenttype Attribute
The `datacontenttype` attribute is assumed to contain a [RFC2046][rfc2046]
compliant media-type expression.
### 2.2. data
`data` is assumed to contain opaque application data that is encoded as declared
by the `datacontenttype` attribute.
An application is free to hold the information in any in-memory representation
of its choosing, but as the value is transposed into HTTP as defined in this
specification, the assumption is that the `data` value is made available as a
sequence of bytes.
For instance, if the declared `datacontenttype` is
`application/json;charset=utf-8`, the expectation is that the `data` value is
made available as [UTF-8][rfc3629] encoded JSON text to HTTP.
## 3. HTTP Message Mapping
The event binding is identical for both HTTP request and response messages.
The content mode is chosen by the sender of the event, which is either the
requesting or the responding party. Gestures that might allow solicitation of
events using a particular mode might be defined by an application, but are not
defined here. The _batched_ mode MUST NOT be used unless solicited, and the
gesture SHOULD allow the receiver to choose the maximum size of a batch.
The receiver of the event can distinguish between the three modes by inspecting
the `Content-Type` header value. If the value is prefixed with the CloudEvents
media type `application/cloudevents` (matched case-insensitively), indicating
the use of a known [event format](#14-event-formats), the receiver uses
_structured_ mode. If the value is prefixed with `application/cloudevents-batch`,
the receiver uses the _batched_ mode. Otherwise it defaults to _binary_ mode.
If a receiver detects the CloudEvents media type, but with an event format that
it cannot handle, for instance `application/cloudevents+avro`, it MAY still
treat the event as binary and forward it to another party as-is.
When the `Content-Type` header value is not prefixed with the CloudEvents media
type, knowing when the message ought to be parsed as a CloudEvent can be a
challenge. While this specification can not mandate that senders do not include
any of the CloudEvents HTTP headers when the message is not a CloudEvent, it
would be reasonable for a receiver to assume that if the message has all of the
mandatory CloudEvents attributes as HTTP headers then it's probably a
CloudEvent. However, as with all CloudEvent messages, if it does not adhere to
all of the normative language of this specification then it is not a valid
CloudEvent.
### 3.1. Binary Content Mode
The _binary_ content mode accommodates any shape of event data, and allows for
efficient transfer and without transcoding effort.
#### 3.1.1. HTTP Content-Type
For the _binary_ mode, the HTTP `Content-Type` header value corresponds to
(MUST be populated from or written to) the CloudEvents `datacontenttype`
attribute. Note that a `ce-datacontenttype` HTTP header MUST NOT also be
present in the message.
#### 3.1.2. Event Data Encoding
The [`data`](#22-data) byte-sequence is used as the HTTP message body.
#### 3.1.3. Metadata Headers
All other [CloudEvents][ce] attributes, including extensions, MUST be
individually mapped to and from distinct HTTP message header.
CloudEvents extensions that define their own attributes MAY define a secondary
mapping to HTTP headers for those attributes, especially if specific attributes
need to align with HTTP features or with other specifications that have explicit
HTTP header bindings. Note that these attributes MUST also still appear in the
HTTP message as HTTP headers with the `ce-` prefix as noted in
[HTTP Header Names](#3131-http-header-names).
##### 3.1.3.1. HTTP Header Names
Except where noted, all CloudEvents context attributes, including extensions,
MUST be mapped to HTTP headers with the same name as the attribute name but
prefixed with `ce-`.
Examples:
* `time` maps to `ce-time`
* `id` maps to `ce-id`
* `specversion` maps to `ce-specversion`
Note: per the [HTTP](https://tools.ietf.org/html/rfc7230#section-3.2)
specification, header names are case-insensitive.
##### 3.1.3.2. HTTP Header Values
The value for each HTTP header is constructed from the respective attribute
type's [canonical string representation][ce-types].
Some CloudEvents metadata attributes can contain arbitrary UTF-8 string content,
and per [RFC7230, section 3][rfc7230-section-3], HTTP headers MUST only use
printable characters from the US-ASCII character set, and are terminated by a
CRLF sequence with OPTIONAL whitespace around the header value.
When encoding a CloudEvent as an HTTP message, string values
represented as HTTP header values MUST be percent-encoded as
described below. This is compatible with [RFC3986, section
2.1][rfc3986-section-2-1] but is more specific about what needs
encoding. The resulting string SHOULD NOT be further encoded.
(Rationale: quoted string escaping is unnecessary when every space
and double-quote character is already percent-encoded.)
When decoding an HTTP message into a CloudEvent, any HTTP header
value MUST first be unescaped with respect to double-quoted strings,
as described in [RFC7230, section 3.2.6][rfc7230-section-3-2-6]. A single
round of percent-decoding MUST then be performed as described
below. HTTP headers for CloudEvent attribute values do not support
parenthetical comments, so the initial unescaping only needs to handle
double-quoted values, including processing backslash escapes within
double-quoted values. Header values produced via the
percent-encoding described here will never include double-quoted
values, but they MUST be supported when receiving events, for
compatibility with older versions of this specification which did
not require double-quote and space characters to be percent-encoded.
Percent encoding is performed by considering each Unicode character
within the attribute's canonical string representation. Any
character represented in memory as a [Unicode surrogate
pair][surrogate-pair] MUST be treated as a single Unicode character.
The following characters MUST be percent-encoded:
- Space (U+0020)
- Double-quote (U+0022)
- Percent (U+0025)
- Any characters outside the printable ASCII range of U+0021-U+007E
inclusive
Attribute values are already constrained to prohibit characters in
the range U+0000-U+001F inclusive and U+007F-U+009F inclusive;
however for simplicity and to account for potential future changes,
it is RECOMMENDED that any HTTP header encoding implementation treats
such characters as requiring percent-encoding.
Space and double-quote are encoded to avoid requiring any further
quoting. Percent is encoded to avoid ambiguity with percent-encoding
itself.
Steps to encode a Unicode character:
- Encode the character using UTF-8, to obtain a byte sequence.
- Encode each byte within the sequence as `%xy` where `x` is a
hexadecimal representation of the most significant 4 bits of the byte,
and `y` is a hexadecimal representation of the least significant 4
bits of the byte.
Percent-encoding SHOULD be performed using upper-case for values A-F,
but decoding MUST accept lower-case values.
When performing percent-decoding (when decoding an HTTP message to a
CloudEvent), values that have been unnecessarily percent-encoded MUST be
accepted, but encoded byte sequences which are invalid in UTF-8 MUST be
rejected. (For example, "%C0%A0" is an overlong encoding of U+0020, and
MUST be rejected.)
Example: a header value of "Euro &#x20AC; &#x1F600;" SHOULD be encoded as follows:
- The characters, 'E', 'u', 'r', 'o' do not require encoding
- Space, the Euro symbol, and the grinning face emoji require encoding.
They are characters U+0020, U+20AC and U+1F600 respectively.
- The encoded HTTP header value is therefore "Euro%20%E2%82%AC%20%F0%9F%98%80"
where "%20" is the encoded form of space, "%E2%82%AC" is the encoded form
of the Euro symbol, and "%F0%9F%98%80" is the encoded form of the
grinning face emoji.
#### 3.1.4. Examples
This example shows the _binary_ mode mapping of an event with an HTTP POST
request:
```text
POST /someresource HTTP/1.1
Host: webhook.example.com
ce-specversion: 1.0
ce-type: com.example.someevent
ce-time: 2018-04-05T03:56:24Z
ce-id: 1234-1234-1234
ce-source: /mycontext/subcontext
.... further attributes ...
Content-Type: application/json; charset=utf-8
Content-Length: nnnn
{
... application data ...
}
```
This example shows a response containing an event:
```text
HTTP/1.1 200 OK
ce-specversion: 1.0
ce-type: com.example.someevent
ce-time: 2018-04-05T03:56:24Z
ce-id: 1234-1234-1234
ce-source: /mycontext/subcontext
.... further attributes ...
Content-Type: application/json; charset=utf-8
Content-Length: nnnn
{
... application data ...
}
```
### 3.2. Structured Content Mode
The _structured_ content mode keeps event metadata and data together in the
payload, allowing simple forwarding of the same event across multiple routing
hops, and across multiple protocols.
#### 3.2.1. HTTP Content-Type
The [HTTP `Content-Type`][content-type] header MUST be set to the media type of
an [event format](#14-event-formats).
Example for the [JSON format][json-format]:
```text
Content-Type: application/cloudevents+json; charset=UTF-8
```
#### 3.2.2. Event Data Encoding
The chosen [event format](#14-event-formats) defines how all attributes, and
`data`, are represented.
The event metadata and data is then rendered in accordance with the event format
specification and the resulting data becomes the HTTP message body.
#### 3.2.3. Metadata Headers
Implementations MAY include the same HTTP headers as defined for the
[binary mode](#313-metadata-headers).
All CloudEvents metadata attributes MUST be mapped into the payload, even if
they are also mapped into HTTP headers.
#### 3.2.4. Examples
This example shows a JSON event format encoded event, sent with a PUT request:
```text
PUT /myresource HTTP/1.1
Host: webhook.example.com
Content-Type: application/cloudevents+json; charset=utf-8
Content-Length: nnnn
{
"specversion" : "1.0",
"type" : "com.example.someevent",
... further attributes omitted ...
"data" : {
... application data ...
}
}
```
This example shows a JSON encoded event returned in a response:
```text
HTTP/1.1 200 OK
Content-Type: application/cloudevents+json; charset=utf-8
Content-Length: nnnn
{
"specversion" : "1.0",
"type" : "com.example.someevent",
... further attributes omitted ...
"data" : {
... application data ...
}
}
```
### 3.3. Batched Content Mode
In the _batched_ content mode several events are batched into a single HTTP
request or response body. The chosen [event format](#14-event-formats) MUST
define how a batch is represented, including a suitable media type.
#### 3.3.1. HTTP Content-Type
The [HTTP `Content-Type`][content-type] header MUST be set to the media type of
the batch mode for the [event format](#14-event-formats).
Example for the [JSON Batch format][json-batch-format]:
```text
Content-Type: application/cloudevents-batch+json; charset=UTF-8
```
#### 3.3.2. Event Data Encoding
The chosen [event format](#14-event-formats) defines how a batch of events and
all event attributes, and `data`, are represented.
The batch of events is then rendered in accordance with the event format
specification and the resulting data becomes the HTTP message body.
#### 3.3.3. Examples
This example shows two batched CloudEvents, sent with a PUT request:
```text
PUT /myresource HTTP/1.1
Host: webhook.example.com
Content-Type: application/cloudevents-batch+json; charset=utf-8
Content-Length: nnnn
[
{
"specversion" : "1.0",
"type" : "com.example.someevent",
... further attributes omitted ...
"data" : {
... application data ...
}
},
{
"specversion" : "1.0",
"type" : "com.example.someotherevent",
... further attributes omitted ...
"data" : {
... application data ...
}
}
]
```
This example shows two batched CloudEvents returned in a response:
```text
HTTP/1.1 200 OK
Content-Type: application/cloudevents-batch+json; charset=utf-8
Content-Length: nnnn
[
{
"specversion" : "1.0",
"type" : "com.example.someevent",
... further attributes omitted ...
"data" : {
... application data ...
}
},
{
"specversion" : "1.0",
"type" : "com.example.someotherevent",
... further attributes omitted ...
"data" : {
... application data ...
}
}
]
```
## 4. References
- [RFC2046][rfc2046] Multipurpose Internet Mail Extensions (MIME) Part Two:
Media Types
- [RFC2119][rfc2119] Key words for use in RFCs to Indicate Requirement Levels
- [RFC2818][rfc2818] HTTP over TLS
- [RFC3629][rfc3629] UTF-8, a transformation format of ISO 10646
- [RFC3986][rfc3986] Uniform Resource Identifier (URI): Generic Syntax
- [RFC4627][rfc4627] The application/json Media Type for JavaScript Object
Notation (JSON)
- [RFC4648][rfc4648] The Base16, Base32, and Base64 Data Encodings
- [RFC6839][rfc6839] Additional Media Type Structured Syntax Suffixes
- [RFC7159][rfc7159] The JavaScript Object Notation (JSON) Data Interchange
Format
- [RFC7230][rfc7230] Hypertext Transfer Protocol (HTTP/1.1): Message Syntax and
Routing
- [RFC7231][rfc7231] Hypertext Transfer Protocol (HTTP/1.1): Semantics and
Content
- [RFC7540][rfc7540] Hypertext Transfer Protocol Version 2 (HTTP/2)
[ce]: ../spec.md
[ce-message]: ../spec.md#message
[ce-types]: ../spec.md#type-system
[json-format]: ../formats/json-format.md
[json-batch-format]: ../formats/json-format.md#4-json-batch-format
[content-type]: https://tools.ietf.org/html/rfc7231#section-3.1.1.5
[json-value]: https://tools.ietf.org/html/rfc7159#section-3
[json-array]: https://tools.ietf.org/html/rfc7159#section-5
[rfc2046]: https://tools.ietf.org/html/rfc2046
[rfc2119]: https://tools.ietf.org/html/rfc2119
[rfc2818]: https://tools.ietf.org/html/rfc2818
[rfc3629]: https://tools.ietf.org/html/rfc3629
[rfc3986]: https://tools.ietf.org/html/rfc3986
[rfc3986-section-2-1]: https://tools.ietf.org/html/rfc3986#section-2.1
[rfc4627]: https://tools.ietf.org/html/rfc4627
[rfc4648]: https://tools.ietf.org/html/rfc4648
[rfc6839]: https://tools.ietf.org/html/rfc6839#section-3.1
[rfc7159]: https://tools.ietf.org/html/rfc7159
[rfc7230]: https://tools.ietf.org/html/rfc7230
[rfc7230-section-3]: https://tools.ietf.org/html/rfc7230#section-3
[rfc7230-section-3-2-6]: https://tools.ietf.org/html/rfc7230#section-3.2.6
[rfc7230-section-5-1]: https://tools.ietf.org/html/rfc7230#section-5.1
[rfc7231]: https://tools.ietf.org/html/rfc7231
[rfc7231-section-4]: https://tools.ietf.org/html/rfc7231#section-4
[rfc7540]: https://tools.ietf.org/html/rfc7540
[surrogate-pair]: http://unicode.org/glossary/#surrogate_pair

View File

@ -0,0 +1,351 @@
# Kafka Protocol Binding for CloudEvents - Version 1.0.3-wip
## Abstract
The [Kafka][kafka] Protocol Binding for CloudEvents defines how events are
mapped to [Kafka messages][kafka-message-format].
## Table of Contents
1. [Introduction](#1-introduction)
- 1.1. [Conformance](#11-conformance)
- 1.2. [Relation to Kafka](#12-relation-to-kafka)
- 1.3. [Content Modes](#13-content-modes)
- 1.4. [Event Formats](#14-event-formats)
- 1.5. [Security](#15-security)
2. [Use of CloudEvents Attributes](#2-use-of-cloudevents-attributes)
- 2.1. [data](#21-data)
3. [Kafka Message Mapping](#3-kafka-message-mapping)
- 3.1. [Key Mapping](#31-key-mapping)
- 3.2. [Binary Content Mode](#32-binary-content-mode)
- 3.3. [Structured Content Mode](#33-structured-content-mode)
4. [References](#4-references)
## 1. Introduction
[CloudEvents][ce] is a standardized and protocol-agnostic definition of the
structure and metadata description of events. This specification defines how the
elements defined in the CloudEvents specification are to be used in the Kafka
protocol as [Kafka messages][kafka-message-format] (aka Kafka records).
### 1.1. Conformance
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD",
"SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be
interpreted as described in [RFC2119][rfc2119].
### 1.2. Relation to Kafka
This specification does not prescribe rules constraining transfer or settlement
of event messages with Kafka; it solely defines how CloudEvents are expressed in
the Kafka protocol as [Kafka messages][kafka-message-format].
The Kafka documentation uses "message" and "record" somewhat interchangeably and
therefore the terms are to be considered synonyms in this specification as well.
Conceptually, Kafka is a log-oriented store for records, each holding a singular
key/value pair. The store is commonly partitioned, and the partition for a
record is typically chosen based on the key's value. Kafka clients accomplish
this by using a hash function.
This binding specification defines how attributes and data of a CloudEvent is
mapped to the value and headers sections of a Kafka record.
Generally, the user SHOULD configure the key and/or the partition of the Kafka
record in a way that makes more sense for his/her use case (e.g. streaming
applications), in order to co-partition values, define relationships between
events, etc. This spec provides an OPTIONAL definition to map the key section of
the Kafka record, without constraining the user to implement it nor use it. An
example use case of this definition is when the sink of the event is a Kafka
topic, but the source is another transport (e.g. HTTP), and the user needs a way
to key the record. As a counter example, it doesn't make sense to use it when
the sink and source are Kafka topics, because this might cause the re-keying of
the records.
### 1.3. Content Modes
The CloudEvents specification defines three content modes for transferring
events: _structured_, _binary_ and _batch_. The Kafka protocol binding does not
currently support the batch content mode. Every compliant implementation SHOULD
support both structured and binary modes.
The specification defines three content modes for transferring events:
_structured_, _binary_ and _batch_. The Kafka protocol binding does not
currently support the _batch_ content mode.
In the _structured_ content mode, event metadata attributes and event data are
placed into the Kafka message value section using an
[event format](#14-event-formats).
In the _binary_ content mode, the value of the event `data` MUST be placed into
the Kafka message's value section as-is, with the `content-type` header value
declaring its media type; all other event attributes MUST be mapped to the Kafka
message's [header section][kafka-message-header].
Implementations that use Kafka 0.11.0.0 and above MAY use either _binary_ or
_structured_ modes. Implementations that use Kafka 0.10.x.x and below MUST only
use _structured_ mode. This is because older versions of Kafka lacked
support for message level headers.
### 1.4. Event Formats
Event formats, used with the _structured_ content mode, define how an event is
expressed in a particular data format. All implementations of this specification
that support the _structured_ content mode MUST support the [JSON event
format][json-format].
### 1.5. Security
This specification does not introduce any new security features for Kafka, or
mandate specific existing features to be used.
## 2. Use of CloudEvents Attributes
This specification does not further define any of the [CloudEvents][ce] event
attributes.
### 2.1. data
`data` is assumed to contain opaque application data that is encoded as declared
by the `datacontenttype` attribute.
An application is free to hold the information in any in-memory representation
of its choosing, but as the value is transposed into Kafka as defined in this
specification, core Kafka provides data available as a sequence of bytes.
For instance, if the declared `datacontenttype` is
`application/json;charset=utf-8`, the expectation is that the `data` value is
made available as [UTF-8][rfc3629] encoded JSON text.
## 3. Kafka Message Mapping
With Kafka 0.11.0.0 and above, the content mode is chosen by the sender of the
event. Protocol usage patterns that might allow solicitation of events using a
particular content mode might be defined by an application, but are not defined
here.
The receiver of the event can distinguish between the two content modes by
inspecting the `content-type` [Header][kafka-message-header] of the Kafka
message. If the header is present and its value is prefixed with the CloudEvents
media type `application/cloudevents` (matched case-insensitively),
indicating the use of a known [event format](#14-event-formats), the receiver
uses _structured_ mode, otherwise it defaults to _binary_ mode.
If a receiver finds a CloudEvents media type as per the above rule, but with an
event format that it cannot handle, for instance `application/cloudevents+avro`,
it MAY still treat the event as binary and forward it to another party as-is.
When the `content-type` header value is not prefixed with the CloudEvents media
type, knowing when the message ought to be parsed as a CloudEvent can be a
challenge. While this specification can not mandate that senders do not include
any of the CloudEvents headers when the message is not a CloudEvent, it would be
reasonable for a receiver to assume that if the message has all of the mandatory
CloudEvents attributes as headers then it's probably a CloudEvent. However, as
with all CloudEvent messages, if it does not adhere to all of the normative
language of this specification then it is not a valid CloudEvent.
### 3.1. Key Mapping
Every implementation MUST, by default, map the user provided record key to the
Kafka record key.
The 'key' of the Kafka message MAY be populated by a "Key Mapper" function,
which might map the key directly from one of the CloudEvent's attributes, but
might also use information from the application environment, from the
CloudEvent's data or other sources.
The shape and configuration of the "Key Mapper" function is implementation
specific.
Every implementation SHOULD provide an opt-in "Key Mapper" implementation that
maps the [Partitioning](../extensions/partitioning.md) `partitionkey` attribute
value to the 'key' of the Kafka message as-is, if present.
A mapping function MUST NOT modify the CloudEvent. This means that the
aforementioned `partitionkey` attribute MUST still be included with the
transmitted event, if present. It also means that a mapping function that uses
key information from an out-of-band source, like a parameter or configuration
setting, MUST NOT add an attribute to the CloudEvent.
### 3.2. Binary Content Mode
The _binary_ content mode accommodates any shape of event data, and allows for
efficient transfer and without transcoding effort.
#### 3.2.1. Content Type
For the _binary_ mode, the header `content-type` property MUST be mapped
directly to the CloudEvents `datacontenttype` attribute.
#### 3.2.2. Event Data Encoding
The [`data`](#21-data) byte-sequence MUST be used as the value of the Kafka
message.
In binary mode, the Kafka representation of a CloudEvent with no `data` is a
Kafka message with no value. In a topic with log compaction enabled, any such
message will represent a _tombstone_ record, as described in the
[Kafka compaction documentation][kafka-log-compaction].
#### 3.2.3. Metadata Headers
All [CloudEvents][ce] attributes and
[CloudEvent Attributes
Extensions](../primer.md#cloudevents-extension-attributes)
with exception of `data` MUST be individually mapped to and from the Header
fields in the Kafka message. Both header keys and header values MUST be encoded
as UTF-8 strings.
##### 3.2.3.1 Property Names
CloudEvent attributes are prefixed with `ce_` for use in the
[message-headers][kafka-message-header] section.
Examples:
* `time` maps to `ce_time`
* `id` maps to `ce_id`
* `specversion` maps to `ce_specversion`
##### 3.2.4.2 Property Values
The value for each Kafka header is constructed from the respective header's
Kafka representation, compliant with the [Kafka message
format][kafka-message-format] specification.
#### 3.2.5 Example
This example shows the _binary_ mode mapping of an event into the Kafka message.
All other CloudEvents attributes are mapped to Kafka Header fields with prefix
`ce_`.
Mind that `ce_` here does refer to the event `data` content carried in the
payload.
```text
------------------ Message -------------------
Topic Name: mytopic
------------------- key ----------------------
Key: mykey
------------------ headers -------------------
ce_specversion: "1.0"
ce_type: "com.example.someevent"
ce_source: "/mycontext/subcontext"
ce_id: "1234-1234-1234"
ce_time: "2018-04-05T03:56:24Z"
content-type: application/avro
.... further attributes ...
------------------- value --------------------
... application data encoded in Avro ...
-----------------------------------------------
```
### 3.3. Structured Content Mode
The _structured_ content mode keeps event metadata and data together in the
payload, allowing simple forwarding of the same event across multiple routing
hops, and across multiple protocols.
#### 3.3.1. Kafka Content-Type
If present, the Kafka message header property `content-type` MUST be set to the
media type of an [event format](#14-event-formats).
Example for the [JSON format][json-format]:
```text
content-type: application/cloudevents+json; charset=UTF-8
```
#### 3.3.2. Event Data Encoding
The chosen [event format](#14-event-formats) defines how all attributes, and
`data`, are represented.
The event metadata and data are then rendered in accordance with the
[event format](#14-event-formats) specification and the resulting data becomes
the Kafka application [data](#21-data) section.
In structured mode, the Kafka representation of a CloudEvent with no `data`
is a Kafka message which still has a data section (containing the attributes
of the CloudEvent). Such a message does _not_ represent a tombstone record in
a topic with log compaction enabled, unlike the representation in binary mode.
#### 3.3.3. Metadata Headers
Implementations MAY include the same Kafka headers as defined for the
[binary mode](#32-binary-content-mode).
#### 3.3.4 Example
This example shows a JSON event format encoded event:
```text
------------------ Message -------------------
Topic Name: mytopic
------------------- key ----------------------
Key: mykey
------------------ headers -------------------
content-type: application/cloudevents+json; charset=UTF-8
------------------- value --------------------
{
"specversion" : "1.0",
"type" : "com.example.someevent",
"source" : "/mycontext/subcontext",
"id" : "1234-1234-1234",
"time" : "2018-04-05T03:56:24Z",
"datacontenttype" : "application/xml",
... further attributes omitted ...
"data" : {
... application data encoded in XML ...
}
}
-----------------------------------------------
```
## 4. References
- [Kafka][kafka] The distributed stream platform
- [Kafka-Message-Format][kafka-message-format] The Kafka format message
- [RFC2046][rfc2046] Multipurpose Internet Mail Extensions (MIME) Part Two:
Media Types
- [RFC2119][rfc2119] Key words for use in RFCs to Indicate Requirement Levels
- [RFC3629][rfc3629] UTF-8, a transformation format of ISO 10646
- [RFC7159][rfc7159] The JavaScript Object Notation (JSON) Data Interchange
Format
[ce]: ../spec.md
[json-format]: ../formats/json-format.md
[kafka]: https://kafka.apache.org
[kafka-message-format]: https://kafka.apache.org/documentation/#messageformat
[kafka-message-header]: https://kafka.apache.org/documentation/#recordheader
[kafka-log-compaction]: https://kafka.apache.org/documentation/#design_compactionbasics
[json-value]: https://tools.ietf.org/html/rfc7159#section-3
[rfc2046]: https://tools.ietf.org/html/rfc2046
[rfc2119]: https://tools.ietf.org/html/rfc2119
[rfc3629]: https://tools.ietf.org/html/rfc3629
[rfc7159]: https://tools.ietf.org/html/rfc7159

View File

@ -0,0 +1,333 @@
# MQTT Protocol Binding for CloudEvents - Version 1.0.3-wip
## Abstract
The MQTT Protocol Binding for CloudEvents defines how events are mapped to MQTT
3.1.1 ([OASIS][oasis-mqtt-3.1.1]; ISO/IEC 20922:2016) and MQTT 5.0
([OASIS][oasis-mqtt-5]) messages.
## Table of Contents
1. [Introduction](#1-introduction)
- 1.1. [Conformance](#11-conformance)
- 1.2. [Relation to MQTT](#12-relation-to-mqtt)
- 1.3. [Content Modes](#13-content-modes)
- 1.4. [Event Formats](#14-event-formats)
- 1.5. [Security](#15-security)
2. [Use of CloudEvents Attributes](#2-use-of-cloudevents-attributes)
- 2.1. [datacontenttype Attribute](#21-datacontenttype-attribute)
- 2.2. [data](#22-data)
3. [MQTT PUBLISH Message Mapping](#3-mqtt-publish-message-mapping)
- 3.2. [Binary Content Mode](#31-binary-content-mode)
- 3.1. [Structured Content Mode](#32-structured-content-mode)
4. [References](#4-references)
## 1. Introduction
[CloudEvents][ce] is a standardized and protocol-agnostic definition of the
structure and metadata description of events. This specification defines how the
elements defined in the CloudEvents specification are to be used in MQTT PUBLISH
([3.1.1][3-publish], [5.0][5-publish]) messages.
### 1.1. Conformance
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD",
"SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be
interpreted as described in [RFC2119][rfc2119].
### 1.2. Relation to MQTT
This specification does not prescribe rules constraining transfer or settlement
of event messages with MQTT; it solely defines how CloudEvents are expressed as
MQTT PUBLISH messages ([3.1.1][3-publish], [5.0][5-publish]).
### 1.3. Content Modes
The CloudEvents specification defines three content modes for transferring
events: _structured_, _binary_ and _batch_. The MQTT protocol binding does not
currently support the batch content mode. Every compliant implementation SHOULD
support both structured and binary modes.
The _binary_ mode _only_ applies to MQTT 5.0, because of MQTT 3.1.1's lack of
support for custom metadata.
In the _structured_ content mode, event metadata attributes and event data are
placed into the MQTT PUBLISH message payload section using an
[event format](#14-event-formats).
In the _binary_ content mode, the value of the event `data` is placed
into the MQTT PUBLISH message's payload section as-is, with the
`datacontenttype` attribute value declaring its media type in the MQTT
PUBLISH message's [`Content Type`][5-content-type] property; all other
event attributes are mapped to User Property fields.
### 1.4. Event Formats
Event formats, used with the _structured_ content mode, define how an event is
expressed in a particular data format. All implementations of this specification
that support the _structured_ content mode MUST support the [JSON event
format][json-format].
### 1.5. Security
This specification does not introduce any new security features for MQTT, or
mandate specific existing features to be used.
## 2. Use of CloudEvents Attributes
This specification does not further define any of the [CloudEvents][ce] event
attributes.
This mapping is intentionally robust against changes, including the addition and
removal of event attributes, and also accommodates vendor extensions to the
event metadata.
### 2.1. datacontenttype Attribute
The `datacontenttype` attribute is assumed to contain a [RFC2046][rfc2046]
compliant media-type expression.
### 2.2. data
`data` is assumed to contain opaque application data that is
encoded as declared by the `datacontenttype` attribute.
An application is free to hold the information in any in-memory representation
of its choosing, but as the value is transposed into MQTT as defined in this
specification, the assumption is that the `data` value is made
available as a sequence of bytes.
For instance, if the declared `datacontenttype` is
`application/json;charset=utf-8`, the expectation is that the `data`
value is made available as [UTF-8][rfc3629] encoded JSON text for use in MQTT.
## 3. MQTT PUBLISH Message Mapping
With MQTT 5.0, the content mode is chosen by the sender of the event. Protocol
usage patterns that might allow solicitation of events using a particular
content mode might be defined by an application, but are not defined here.
The receiver of the event can distinguish between the two content modes by
inspecting the`Content Type` property of the MQTT PUBLISH message. If the value
of the `Content Type` property is prefixed with the CloudEvents media type
`application/cloudevents`, indicating the use of a known
[event format](#14-event-formats), the receiver uses _structured_ mode,
otherwise it defaults to _binary_ mode.
If a receiver finds a CloudEvents media type as per the above rule, but with an
event format that it cannot handle, for instance `application/cloudevents+avro`,
it MAY still treat the event as binary and forward it to another party as-is.
When the `Content Type` header value is not prefixed with the CloudEvents media
type, knowing when the message ought to be parsed as a CloudEvent can be a
challenge. While this specification can not mandate that senders do not include
any of the CloudEvents properties when the message is not a CloudEvent, it would
be reasonable for a receiver to assume that if the message has all of the
mandatory CloudEvents attributes as message properties then it's probably a
CloudEvent. However, as with all CloudEvent messages, if it does not adhere to
all of the normative language of this specification then it is not a valid
CloudEvent.
With MQTT 3.1.1, the content mode is always _structured_ and the message payload
MUST use the [JSON event format][json-format].
### 3.1. Binary Content Mode
The _binary_ content mode accommodates any shape of event data, and allows for
efficient transfer and without transcoding effort.
#### 3.1.1. MQTT PUBLISH Content Type
For the _binary_ mode, the MQTT PUBLISH message's
[`Content Type`][5-content-type] property MUST be mapped directly to the
CloudEvents `datacontenttype` attribute.
#### 3.1.2. Event Data Encoding
The [`data`](#22-data) byte-sequence MUST be used as the
payload of the MQTT PUBLISH message.
#### 3.1.3. Metadata Headers
All other [CloudEvents][ce] context attributes, including extensions, MUST be
individually mapped to and from the User Property fields in the MQTT
PUBLISH message.
CloudEvents extensions that define their own attributes MAY define a secondary
mapping to MQTT user properties or features for those attributes, especially if
specific attributes need to align with MQTT features, or with other
specifications that have explicit MQTT header bindings. However, they MUST
also include the previously defined primary mapping.
##### 3.1.3.1 User Property Names
CloudEvents attribute names MUST be used unchanged in each mapped User Property
in the MQTT PUBLISH message.
##### 3.1.3.2 User Property Values
The value for each MQTT PUBLISH User Property MUST be constructed from the
respective CloudEvents attribute type's [canonical string
representation][ce-types].
#### 3.1.4 Examples
This example shows the _binary_ mode mapping of an event into the MQTT 5.0
PUBLISH message. The CloudEvents `datacontenttype` attribute is mapped to the
MQTT PUBLISH `Content Type` field; all other CloudEvents attributes are mapped
to MQTT PUBLISH User Property fields. The `Topic name` is chosen by the MQTT
client and not derived from the CloudEvents event data.
Mind that `Content Type` here does refer to the event `data` content carried in
the payload.
```text
------------------ PUBLISH -------------------
Topic Name: mytopic
Content Type: application/json; charset=utf-8
------------- User Properties ----------------
specversion: 1.0
type: com.example.someevent
time: 2018-04-05T03:56:24Z
id: 1234-1234-1234
source: /mycontext/subcontext
datacontenttype: application/json; charset=utf-8
.... further attributes ...
------------------ payload -------------------
{
... application data ...
}
-----------------------------------------------
```
### 3.2. Structured Content Mode
The _structured_ content mode keeps event metadata and data together in the
payload, allowing simple forwarding of the same event across multiple routing
hops, and across multiple protocols. This is the only supported mode for MQTT
3.1.1
#### 3.2.1. MQTT Content Type
For MQTT 5.0, the [MQTT PUBLISH message's `Content Type`][5-content-type]
property MUST be set to the media type of an [event format](#14-event-formats).
For MQTT 3.1.1, the media type of the [JSON event format][json-format] is always
implied:
Example for the [JSON format][json-format]:
```text
content-type: application/cloudevents+json; charset=utf-8
```
#### 3.2.2. Event Data Encoding
The chosen [event format](#14-event-formats) defines how all attributes,
and `data`, are represented.
The event metadata and data MUST then be rendered in accordance with the event
format specification and the resulting data becomes the MQTT PUBLISH payload.
#### 3.2.3. Metadata Headers
For MQTT 5.0, implementations MAY include the same MQTT PUBLISH User Properties
as defined for the [binary mode](#313-metadata-headers).
#### 3.2.4. Examples
The first example shows a JSON event format encoded event with MQTT 5.0
```text
------------------ PUBLISH -------------------
Topic Name: mytopic
Content Type: application/cloudevents+json; charset=utf-8
------------------ payload -------------------
{
"specversion" : "1.0",
"type" : "com.example.someevent",
"time" : 2018-04-05T03:56;24Z,
"id" : 1234-1234-1234,
"source" : "/mycontext/subcontext",
"datacontenttype" : "application/json; charset=utf-8",
... further attributes omitted ...
"data" : {
... application data ...
}
}
-----------------------------------------------
```
For MQTT 3.1.1, the example looks nearly identical, but `Content Type` is absent
because not yet supported in that version of the MQTT specification and
therefore `application/cloudevents+json` is implied:
```text
------------------ PUBLISH -------------------
Topic Name: mytopic
------------------ payload -------------------
{
"specversion" : "1.0",
"type" : "com.example.someevent",
"time" : 2018-04-05T03:56;24Z,
"id" : 1234-1234-1234,
"source" : "/mycontext/subcontext",
"datacontenttype" : "application/json; charset=utf-8",
... further attributes omitted ...
"data" : {
... application data ...
}
}
-----------------------------------------------
```
## 4. References
- [MQTT 3.1.1][oasis-mqtt-3.1.1] MQTT Version 3.1.1
- [MQTT 5.0][oasis-mqtt-5] MQTT Version 5.0
- [RFC2046][rfc2046] Multipurpose Internet Mail Extensions (MIME) Part Two:
Media Types
- [RFC2119][rfc2119] Key words for use in RFCs to Indicate Requirement Levels
- [RFC3629][rfc3629] UTF-8, a transformation format of ISO 10646
- [RFC4627][rfc4627] The application/json Media Type for JavaScript Object
Notation (JSON)
- [RFC7159][rfc7159] The JavaScript Object Notation (JSON) Data Interchange
Format
[ce]: ../spec.md
[ce-types]: ../spec.md#type-system
[json-format]: ../formats/json-format.md
[oasis-mqtt-3.1.1]: http://docs.oasis-open.org/mqtt/mqtt/v3.1.1/mqtt-v3.1.1.html
[oasis-mqtt-5]: http://docs.oasis-open.org/mqtt/mqtt/v5.0/mqtt-v5.0.html
[3-publish]: http://docs.oasis-open.org/mqtt/mqtt/v3.1.1/errata01/os/mqtt-v3.1.1-errata01-os-complete.html#_Toc442180850
[5-content-type]: http://docs.oasis-open.org/mqtt/mqtt/v5.0/mqtt-v5.0.html#_Toc502667341
[5-publish]: https://docs.oasis-open.org/mqtt/mqtt/v5.0/os/mqtt-v5.0-os.html#_Toc3901100
[json-value]: https://tools.ietf.org/html/rfc7159#section-3
[rfc2046]: https://tools.ietf.org/html/rfc2046
[rfc2119]: https://tools.ietf.org/html/rfc2119
[rfc3629]: https://tools.ietf.org/html/rfc3629
[rfc4627]: https://tools.ietf.org/html/rfc4627
[rfc7159]: https://tools.ietf.org/html/rfc7159

View File

@ -0,0 +1,330 @@
# NATS Protocol Binding for CloudEvents - Version 1.0.3-wip
## Abstract
The [NATS][nats] Protocol Binding for CloudEvents defines how events are mapped
to [NATS messages][nats-msg-proto].
## Table of Contents
1. [Introduction](#1-introduction)
- 1.1 [Conformance](#11-conformance)
- 1.2 [Relation to NATS](#12-relation-to-nats)
- 1.3 [Content Modes](#13-content-modes)
- 1.4 [Event Formats](#14-event-formats)
- 1.5 [Security](#15-security)
2. [Use of CloudEvents Attributes](#2-use-of-cloudevents-attributes)
- 2.1 [datacontenttype Attribute](#21-datacontenttype-attribute)
- 2.2 [data](#22-data)
3. [NATS Message Mapping](#3-nats-message-mapping)
- 3.1 [Binary Content Mode](#31-binary-content-mode)
- 3.2 [Structured Content Mode](#32-structured-content-mode)
4. [References](#4-references)
## 1. Introduction
[CloudEvents][ce] is a standardized and protocol-agnostic definition of the
structure and metadata description of events. This specification defines how the
elements defined in the CloudEvents specification are to be used in the NATS
protocol as client [produced][nats-pub-proto] and [consumed][nats-msg-proto]
messages.
### 1.1 Conformance
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD",
"SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be
interpreted as described in [RFC2119][rfc2119].
### 1.2 Relation to NATS
This specification does not prescribe rules constraining transfer or settlement
of event messages with NATS; it solely defines how CloudEvents are expressed in
the NATS protocol as client messages that are [produced][nats-pub-proto] and
[consumed][nats-msg-proto].
### 1.3 Content Modes
The CloudEvents specification defines three content modes for transferring
events: _structured_, _binary_ and _batch_. The NATS protocol binding does not
currently support the batch content mode. Every compliant implementation SHOULD
support both structured and binary modes.
In the _binary_ content mode, event metadata attributes are placed in message
headers and the event data are placed in the NATS message payload. Binary mode
is supported as of [NATS 2.2][nats22], which introduced message headers.
In the _structured_ content mode, event metadata attributes and event data
are placed into the NATS message payload using an [event format](#14-event-formats).
### 1.4 Event Formats
Event formats, used with the _structured_ content mode, define how an event is
expressed in a particular data format. All implementations of this specification
MUST support the [JSON event format][json-format].
### 1.5 Security
This specification does not introduce any new security features for NATS, or
mandate specific existing features to be used.
## 2. Use of CloudEvents Attributes
This specification does not further define any of the [CloudEvents][ce] event
attributes.
### 2.1 datacontenttype Attribute
The `datacontenttype` attribute is assumed to contain a media-type expression
compliant with [RFC2046][rfc2046].
### 2.2 data
`data` is assumed to contain opaque application data that is
encoded as declared by the `datacontenttype` attribute.
An application is free to hold the information in any in-memory representation
of its choosing, but as the value is transposed into NATS as defined in this
specification, core NATS provides data available as a sequence of bytes.
For instance, if the declared `datacontenttype` is
`application/json;charset=utf-8`, the expectation is that the `data`
value is made available as [UTF-8][rfc3629] encoded JSON text.
## 3. NATS Message Mapping
The content mode is chosen by the sender of the event, which is either the
requesting or the responding party. Gestures that might allow solicitation
of events using a particular mode might be defined by an application, but
are not defined here.
The receiver of the event can distinguish between the two modes using two
conditions:
- If the server is a version earlier than NATS 2.2, the content mode is
always _structured_.
- If the server is version 2.2 or above and the `Content-Type` header of
`application/cloudevents` is present (matched case-insensitively),
then the message is in _structured_ mode, otherwise it is using binary mode.
If the content mode is _structured_ then the NATS message payload MUST be
the [JSON event format][json-format] serialized as specified by the
[UTF-8][rfc3629] encoded JSON text for use in NATS.
### 3.1 Binary Content Mode
The _binary_ content mode accommodates any shape of event data, and allows for
efficient transfer and without transcoding effort.
#### 3.1.1 Event Data Encoding
The [`data`](#22-data) byte-sequence is used as the message body.
#### 3.1.2 Metadata Headers
All [CloudEvents][ce] attributes, including extensions, MUST be individually
mapped to and from distinct NATS message header.
CloudEvents extensions that define their own attributes MAY define a secondary
mapping to NATS headers for those attributes, especially if specific attributes
need to align with NATS features or with other specifications that have explicit
NATS header bindings. Note that these attributes MUST also still appear in the
NATS message as NATS headers with the `ce-` prefix as noted in
[NATS Header Names](#3131-nats-header-names).
##### 3.1.3.1 NATS Header Names
Except where noted, all CloudEvents context attributes, including extensions,
MUST be mapped to NATS headers with the same name as the attribute name but
prefixed with `ce-`.
Examples:
* `time` maps to `ce-time`
* `id` maps to `ce-id`
* `specversion` maps to `ce-specversion`
* `datacontenttype` maps to `ce-datacontenttype`
Note: per the [NATS][nats-message-headers] design specification, header names are
case-insensitive.
##### 3.1.3.2 NATS Header Values
The value for each NATS header is constructed from the respective attribute
type's [canonical string representation][ce-types].
Some CloudEvents metadata attributes can contain arbitrary UTF-8 string content,
and per [RFC7230, section 3][rfc7230-section-3], NATS headers MUST only use
printable characters from the US-ASCII character set, and are terminated by a
CRLF sequence with OPTIONAL whitespace around the header value.
When encoding a CloudEvent as an NATS message, string values
represented as NATS header values MUST be percent-encoded as
described below. This is compatible with [RFC3986, section
2.1][rfc3986-section-2-1] but is more specific about what needs
encoding. The resulting string SHOULD NOT be further encoded.
(Rationale: quoted string escaping is unnecessary when every space
and double-quote character is already percent-encoded.)
When decoding an NATS message into a CloudEvent, any NATS header
value MUST first be unescaped with respect to double-quoted strings,
as described in [RFC7230, section 3.2.6][rfc7230-section-3-2-6]. A single
round of percent-decoding MUST then be performed as described
below. NATS headers for CloudEvent attribute values do not support
parenthetical comments, so the initial unescaping only needs to handle
double-quoted values, including processing backslash escapes within
double-quoted values. Header values produced via the
percent-encoding described here will never include double-quoted
values, but they MUST be supported when receiving events, for
compatibility with older versions of this specification which did
not require double-quote and space characters to be percent-encoded.
Percent encoding is performed by considering each Unicode character
within the attribute's canonical string representation. Any
character represented in memory as a [Unicode surrogate
pair][surrogate-pair] MUST be treated as a single Unicode character.
The following characters MUST be percent-encoded:
- Space (U+0020)
- Double-quote (U+0022)
- Percent (U+0025)
- Any characters outside the printable ASCII range of U+0021-U+007E
inclusive
Attribute values are already constrained to prohibit characters in
the range U+0000-U+001F inclusive and U+007F-U+009F inclusive;
however for simplicity and to account for potential future changes,
it is RECOMMENDED that any NATS header encoding implementation treats
such characters as requiring percent-encoding.
Space and double-quote are encoded to avoid requiring any further
quoting. Percent is encoded to avoid ambiguity with percent-encoding
itself.
Steps to encode a Unicode character:
- Encode the character using UTF-8, to obtain a byte sequence.
- Encode each byte within the sequence as `%xy` where `x` is a
hexadecimal representation of the most significant 4 bits of the byte,
and `y` is a hexadecimal representation of the least significant 4
bits of the byte.
Percent-encoding SHOULD be performed using upper-case for values A-F,
but decoding MUST accept lower-case values.
When performing percent-decoding (when decoding an NATS message to a
CloudEvent), values that have been unnecessarily percent-encoded MUST be
accepted, but encoded byte sequences which are invalid in UTF-8 MUST be
rejected. (For example, "%C0%A0" is an overlong encoding of U+0020, and
MUST be rejected.)
Example: a header value of "Euro &#x20AC; &#x1F600;" SHOULD be encoded as follows:
- The characters, 'E', 'u', 'r', 'o' do not require encoding
- Space, the Euro symbol, and the grinning face emoji require encoding.
They are characters U+0020, U+20AC and U+1F600 respectively.
- The encoded NATS header value is therefore "Euro%20%E2%82%AC%20%F0%9F%98%80"
where "%20" is the encoded form of space, "%E2%82%AC" is the encoded form
of the Euro symbol, and "%F0%9F%98%80" is the encoded form of the
grinning face emoji.
#### 3.1.4 Example
This example shows the _binary_ mode mapping of an event in client messages that
are [produced][nats-pub-proto] and [consumed][nats-msg-proto].
```text
------------------ Message -------------------
Subject: mySubject
------------------ header --------------------
ce-specversion: 1.0
ce-type: com.example.someevent
ce-time: 2018-04-05T03:56:24Z
ce-id: 1234-1234-1234
ce-source: /mycontext/subcontext
ce-datacontenttype: application/json
------------------ payload -------------------
{
... application data ...
}
-----------------------------------------------
```
### 3.2 Structured Content Mode
The chosen [event format](#14-event-formats) defines how all attributes,
including the payload, are represented.
The event metadata and data MUST then be rendered in accordance with the event
format specification and the resulting data becomes the payload.
### 3.2.1 Example
This example shows a JSON event format encoded event in client messages that are
[produced][nats-pub-proto] and [consumed][nats-msg-proto].
```text
------------------ Message -------------------
Subject: mySubject
------------------ payload -------------------
{
"specversion" : "1.0",
"type" : "com.example.someevent",
... further attributes omitted ...
"data" : {
... application data ...
}
}
-----------------------------------------------
```
## 4. References
- [NATS][nats] The NATS Messaging System
- [NATS-PUB-PROTO][nats-pub-proto] The NATS protocol for messages published by a
client
- [NATS-MSG-PROTO][nats-msg-proto] The NATS protocol for messages received by a
client
- [RFC2046][rfc2046] Multipurpose Internet Mail Extensions (MIME) Part Two:
Media Types
- [RFC2119][rfc2119] Key words for use in RFCs to Indicate Requirement Levels
- [RFC3629][rfc3629] UTF-8, a transformation format of ISO 10646
- [RFC7159][rfc7159] The JavaScript Object Notation (JSON) Data Interchange
Format
[ce]: ../spec.md
[ce-types]: ../spec.md#type-system
[json-format]: ../formats/json-format.md
[json-value]: https://tools.ietf.org/html/rfc7159#section-3
[nats]: https://nats.io
[nats22]: https://docs.nats.io/release-notes/whats_new/whats_new_22#message-headers
[nats-message-headers]: https://github.com/nats-io/nats-architecture-and-design/blob/main/adr/ADR-4.md#nats-message-headers
[nats-msg-proto]: https://docs.nats.io/reference/reference-protocols/nats-protocol#protocol-messages
[nats-pub-proto]: https://docs.nats.io/reference/reference-protocols/nats-protocol#pub
[rfc2046]: https://tools.ietf.org/html/rfc2046
[rfc2119]: https://tools.ietf.org/html/rfc2119
[rfc3629]: https://tools.ietf.org/html/rfc3629
[rfc3986-section-2-1]: https://tools.ietf.org/html/rfc3986#section-2.1
[rfc7159]: https://tools.ietf.org/html/rfc7159
[rfc7230]: https://tools.ietf.org/html/rfc7230
[rfc7230-section-3]: https://tools.ietf.org/html/rfc7230#section-3
[rfc7230-section-3-2-6]: https://tools.ietf.org/html/rfc7230#section-3.2.6
[surrogate-pair]: http://unicode.org/glossary/#surrogate_pair

View File

@ -0,0 +1,166 @@
# WebSockets Protocol Binding for CloudEvents - Version 1.0.3-wip
## Abstract
The WebSockets Protocol Binding for CloudEvents defines how to establish and use
full-duplex CloudEvents streams using [WebSockets][rfc6455].
## Table of Contents
1. [Introduction](#1-introduction)
- 1.1. [Conformance](#11-conformance)
- 1.2. [Relation to WebSockets](#12-relation-to-websockets)
- 1.3. [Content Modes](#13-content-modes)
- 1.4. [Handshake](#14-handshake)
- 1.5. [CloudEvents Subprotocols](#15-cloudevents-subprotocols)
- 1.6. [Security](#16-security)
2. [Use of CloudEvents Attributes](#2-use-of-cloudevents-attributes)
3. [WebSocket Message Mapping](#3-websocket-message-mapping)
- 3.1. [Event Data Encoding](#31-event-data-encoding)
4. [References](#4-references)
## 1. Introduction
[CloudEvents][ce] is a standardized and protocol-agnostic definition of the
structure and metadata description of events. This specification defines how the
elements defined in the CloudEvents specification are to be used in
[WebSockets][rfc6455], in order to establish and use a full-duplex CloudEvents
stream.
### 1.1. Conformance
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD",
"SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be
interpreted as described in [RFC2119][rfc2119].
### 1.2. Relation to WebSockets
This specification does not prescribe rules constraining the use or handling of
specific [HTTP target resource][rfc7230-section-5-1] to establish the WebSocket
upgrade.
This specification prescribes rules constraining the [WebSockets
Subprotocols][rfc6455-section-5-1] in order to reach agreement on the event
format to use when sending and receiving serialized CloudEvents.
Events are sent as WebSocket messages, serialized using an [event
format][ce-event-format].
### 1.3. Content Modes
The [CloudEvents specification][ce-message] defines three content modes for
transferring events: _structured_, _binary_ and _batch_.
Because of the nature of WebSockets messages, this specification supports only
_structured_ data mode, hence event metadata attributes and event data are
sent in WebSocket messages using an [event format][ce-event-format].
The [event format][ce-event-format] to be used in a full-duplex WebSocket stream
is agreed during the [handshake](#14-handshake) and cannot change during the
same stream.
### 1.4. Handshake
The [opening handshake][rfc6455-section-1-3] MUST follow the set of rules
specified in the [RFC6455][rfc6455-section-4].
In addition, the client MUST include, in the opening handshake, the
[`Sec-WebSocket-Protocol` header][rfc6455-section-1-9]. The client MUST include
in this header one or more
[CloudEvents subprotocols](#15-cloudevents-subprotocols), depending on the
subprotocols the client supports.
The server MUST reply with the chosen CloudEvents subprotocol using the
`Sec-WebSocket-Protocol` header. If the server doesn't support any of the
subprotocols included in the opening handshake, the server response SHOULD NOT
contain any `Sec-WebSocket-Protocol` header.
#### 1.4.1 Example
Example client request to begin the opening handshake:
```text
GET /events HTTP/1.1
Host: server.example.com
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Key: x3JJHMbDL1EzLkh9GBhXDw==
Sec-WebSocket-Protocol: cloudevents.json, cloudevents.avro
Sec-WebSocket-Version: 13
Origin: http://example.com
```
Example server response:
```text
HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept: HSmrc0sMlYUkAGmm5OPpG2HaGWk=
Sec-WebSocket-Protocol: cloudevents.json
```
### 1.5. CloudEvents Subprotocols
This specification maps a WebSocket subprotocol to each defined event format in
the CloudEvents specification, following the guidelines discussed in the
[RFC6455][rfc6455-section-1-9]. For each subprotocol, senders MUST use the
specified WebSocket frame type:
| Subprotocol | Event format | Frame Type |
| ------------------ | -------------------------------- | ---------- |
| `cloudevents.json` | [JSON event format][json-format] | Text |
| `cloudevents.avro` | [AVRO event format][avro-format] | Binary |
| `cloudevents.proto` | [Protobuf event format][proto-format] | Binary |
All implementations of this specification MUST support the [JSON event
format][json-format]. This specification does not support the [JSON batch
format][json-batch-format].
### 1.6. Security
This specification does not introduce any new security features for WebSockets,
or mandate specific existing features to be used.
## 2. Use of CloudEvents Attributes
This specification does not further define any of the [CloudEvents][ce] event
attributes.
## 3. WebSocket Message Mapping
Because the content mode is always _structured_, a WebSocket message just
contains a CloudEvent serialized using the agreed event format.
### 3.1 Event Data Encoding
The chosen [event format][ce-event-format] defines how all attributes, including
the payload, are represented.
The event metadata and data MUST be rendered in accordance with the event
format specification and the resulting data becomes the payload.
## 4. References
- [RFC2119][rfc2119] Key words for use in RFCs to Indicate Requirement Levels
- [RFC6455][rfc6455] The WebSocket Protocol
[ce]: ../spec.md
[ce-message]: ../spec.md#message
[ce-event-format]: ../spec.md#event-format
[json-format]: ../formats/json-format.md
[json-batch-format]: ../formats/json-format.md#4-json-batch-format
[avro-format]: ../formats/avro-format.md
[proto-format]: ../formats/protobuf-format.md
[rfc2119]: https://tools.ietf.org/html/rfc2119
[rfc6455]: https://tools.ietf.org/html/rfc6455
[rfc6455-section-1-3]: https://tools.ietf.org/html/rfc6455#section-1.3
[rfc6455-section-4]: https://tools.ietf.org/html/rfc6455#section-4
[rfc6455-section-1-9]: https://tools.ietf.org/html/rfc6455#section-1.9
[rfc7230-section-5-1]: https://datatracker.ietf.org/doc/html/rfc7230#section-5.1
[rfc6455-section-5-1]: https://datatracker.ietf.org/doc/html/rfc6455#section-5.1

View File

@ -0,0 +1,55 @@
# CloudEvents Extension Attributes
The [CloudEvents specification](../spec.md) defines a set of metadata
attributes that can be used when transforming a generic event into a
CloudEvent. The list of attributes specified in that document represent the
minimal set that the specification authors deemed most likely to be used in a
majority of situations.
This document defines some addition attributes that, while not as commonly used
as the ones specified in the [CloudEvents specification](../spec.md), could
still benefit from being formally specified in the hopes of providing some
degree of interoperability. This also allows for attributes to be defined in an
experimental manner and tested prior to being considered for inclusion in the
[CloudEvents specification](../spec.md).
Implementations of the [CloudEvents specification](../spec.md) are not
mandated to limit their use of extension attributes to just the ones specified
in this document. The attributes defined in this document have no official
standing and might be changed, or removed, at any time. As such, inclusion of
an attribute in this document does not need to meet the same level of maturity,
or popularity, as attributes defined in the
[CloudEvents specification](../spec.md). To be
included in this document, aside from the normal PR review process, the
attribute needs to have at least two
[Voting](../../docs/GOVERNANCE.md#membership) member organizations stating
their support for its inclusion as comments in the PR. If the author of the PR
is also a Voting member, then they are allowed to be one of two.
## Usage
Support for any extension is OPTIONAL. When an extension definition uses
[RFC 2199](https://www.ietf.org/rfc/rfc2119.txt) keywords (e.g. MUST, SHOULD,
MAY), this usage only applies to events that use the extension.
Extensions attributes, while not defined by the core CloudEvents specifications,
MUST follow the same serialization rules as defined by the format and protocol
binding specifications. See
[Extension Context Attributes](../spec.md#extension-context-attributes)
for more information.
## Known Extensions
- [Auth Context](authcontext.md)
- [BAM](bam.md)
- [Data Classification](data-classification.md)
- [Dataref (Claim Check Pattern)](dataref.md)
- [Deprecation](deprecation.md)
- [Distributed Tracing](distributed-tracing.md)
- [Expiry Time](expirytime.md)
- [OPC UA](opcua.md)
- [Partitioning](partitioning.md)
- [Recorded Time](recordedtime.md)
- [Sampling](sampledrate.md)
- [Sequence](sequence.md)
- [Severity](severity.md)

View File

@ -0,0 +1,65 @@
# Auth Context
This extension embeds information about the principal which triggered an
occurrence. This allows consumers of the
CloudEvent to perform user-dependent actions without requiring the user ID to
be embedded in the `data` or `source` field.
This extension is purely informational and is not intended to secure
CloudEvents.
## Notational Conventions
As with the main [CloudEvents specification](../spec.md), the key words "MUST",
"MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT",
"RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as
described in [RFC 2119](https://tools.ietf.org/html/rfc2119).
However, the scope of these key words is limited to when this extension is
used. For example, an attribute being marked as "REQUIRED" does not mean
it needs to be in all CloudEvents, rather it needs to be included only when
this extension is being used.
## Attributes
### authtype
- Type: `String`
- Description: An enum representing the type of principal that triggered the
occurrence. Valid values are:
- `app_user`: An end user of an application. Examples include an AWS cognito,
Google Cloud Identity Platform, or Azure Active Directory user.
- `user`: A user account registered in the infrastructure. Examples include
developer accounts secured by IAM in AWS, Google Cloud Platform, or Azure.
- `service_account`: A non-user principal used to identify a service.
- `api_key`: A non-user API key
- `system`: An obscured identity used when a cloud platform or other system
service triggers an event. Examples include a database record which
was deleted based on a TTL.
- `unauthenticated`: No credentials were used to authenticate the change that
triggered the occurrence.
- `unknown`: The type of principal cannot be determined and is unknown.
- Constraints
- REQUIRED
- This specification defines the following values, and it is RECOMMENDED that
they be used. However, implementations MAY define additional values.
### authid
- Type: `String`
- Description: A unique identifier of the principal that triggered the
occurrence. This specification makes no statement as to what this value
ought to be, however including personally identifiable information (PII)
in a CloudEvent is often considered inappropriate, so some indirect reference
(e.g. a hash or label of an API key) might be considered.
- Constraints
- OPTIONAL
### authclaims
- Type: `String`
- Description: A JSON string representing claims of the principal that triggered
the event.
- Constraints
- OPTIONAL
- MUST NOT contain actual credentials sufficient for the Consumer to
impersonate the principal directly.
- MAY contain enough information that a Consumer can authenticate against an
identity service to mint a credential impersonating the original principal.

View File

@ -0,0 +1,127 @@
# Business Activity Monitoring (BAM) Extension
Business Activity Monitoring (BAM) was originally coined by analysts at
Gartner, and refers to the aggregation, analysis, and presentation of
real-time information about activities inside organizations, customers,
and partners.
The activity monitoring consists of a model of a business process,
which can consists of multiple transactions (e.g. order, payment, invoice),
and these transactions can have multiple steps. The technical processing
represented by a transaction instance `bamtxid` is then correlated with
the steps in those transactions of the business process.
This extension defines attributes that can be included within a CloudEvent
to describe the business activity that the event is associated with.
Producers and consumers are free to define an out-of-band agreement on the
semantic meaning, or valid values, for the attribute.
## Notational Conventions
As with the main [CloudEvents specification](../spec.md), the key words "MUST",
"MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT",
"RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as
described in [RFC 2119](https://tools.ietf.org/html/rfc2119).
However, the scope of these key words is limited to when this extension is
used. For example, an attribute being marked as "REQUIRED" does not mean
it needs to be in all CloudEvents, rather it needs to be included only when
this extension is being used.
## Attributes
### bamtxid (BAM Transaction ID)
- Type: `String`
- Description: A unique identifier for the instance of a transaction.
This identifier connects the actual processing in the distributed
system (e.g. payment, invoice, warehouse) with the model of this process.
- Constraints
- REQUIRED
- MUST be a non-empty string
- RECOMMENDED as monotonically increasing and contiguous identifier
that is lexicographically-sortable.
### bampid (BAM Process ID)
- Type: `String`
- Description: A unique identifier for the model of the business process
that is associated with instance of the transaction `bamtxid`.
A business process is a collection of transactions. These transactions
can run in sequence or parallel (e.g. payment, invoice, warehouse).
- Constraints
- REQUIRED
- MUST be a non-empty string
- RECOMMENDED an alphanumeric string that contains non-whitespace characters
and only hyphens, underscores, and periods.
### bamptxid (BAM Process Transaction ID)
- Type: `String`
- Description: A unique identifier for the model of a transaction that
constructs a business process (e.g. payment, invoice, warehouse).
- Constraints
- REQUIRED
- MUST be a non-empty string
- RECOMMENDED an alphanumeric string that contains non-whitespace characters
and only hyphens, underscores, and periods.
### bamptxsid (BAM Process Transaction Step ID)
- Type: `String`
- Description: A unique identifier for the specific step in a business process
transaction (e.g. start, processing, finish).
- Constraints
- REQUIRED
- MUST be a non-empty string
- RECOMMENDED an alphanumeric string that contains non-whitespace characters
and only hyphens, underscores, and periods.
### bamptxsstatus (BAM Transaction Step Status)
- Type: `String`
- Description: The status of the specific step in a business process
transaction (e.g. success, waiting, failure).
- Constraints
- OPTIONAL
- if present, MUST be a non-empty string
- RECOMMENDED an alphanumeric string that contains non-whitespace characters
and only hyphens, underscores, and periods.
### bamptxcompleted (BAM Process Transaction Completed)
- Type: `Boolean`
- Description: Indicates if the instance of the transaction (`bamtxid`) has
actually been completed, or if the transaction has somehow failed.
This is a mechanism to indicate a final completion or failure that is
not captured by the model of the business process.
- Constraints
- OPTIONAL
- if present, MUST be a boolean value
## Usage
When this extension is used, producers MUST set the value of
the `bamtxid`, `bampid`, `bamptxid`, and `bamptxsid` attributes
to the unique identifiers of the business process, transaction,
and transaction step associated with the event.
Intermediaries MUST NOT change the value of the `bamtxid`,
`bampid`, `bamptxid`, and `bamptxsid` attributes.
## Use cases
This extension can be used in cases in which a business activity monitoring
system is used to monitor the progress of a business process, and the events
generated by the process are used to track the progress of the process.
Usually these systems have their own modelling language to describe the
business process, and the events generated by the process
are used to track the progress of the process.
## References
- [Gartner Business Activity Monitoring](https://www.gartner.com/en/information-technology/glossary/bam-business-activity-monitoring)
- [Business Activity Monitoring](https://en.wikipedia.org/wiki/Business_activity_monitoring)
- [What is Business Activity Monitoring (BAM)?](https://www.ibm.com/topics/business-activity-monitoring)
- [Business Activity Monitoring (BAM)](https://learn.microsoft.com/en-us/biztalk/core/business-activity-monitoring-bam)

View File

@ -0,0 +1,228 @@
# Correlation
This extension defines attributes for tracking occurrence relationships and
causality in distributed systems, enabling comprehensive traceability through
correlation and causation identifiers.
## Notational Conventions
As with the main [CloudEvents specification](../spec.md), the key words "MUST",
"MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT",
"RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as
described in [RFC 2119](https://tools.ietf.org/html/rfc2119).
## Attributes
### correlationid
- Type: `String`
- Description: An identifier that groups related events within the same logical
flow or business transaction. All events sharing the same correlation ID are
part of the same workflow.
- Constraints
- OPTIONAL
- If present, MUST be a non-empty string
### causationid
- Type: `String`
- Description: The unique identifier of the event that directly caused this
event to be generated. This SHOULD be the `id` value of the causing event.
- Constraints
- OPTIONAL
- If present, MUST be a non-empty string
## Usage
The Correlation extension provides two complementary mechanisms for tracking
event relationships:
1. **Correlation ID**: Groups all events that are part of the same logical flow,
regardless of their causal relationships
2. **Causation ID**: Tracks the direct parent-child relationships between events
in a causal chain
These attributes can be used independently or together, depending on the correlation
requirements of your system.
### Correlation vs Causation
Understanding the distinction between these two concepts is crucial:
- **Correlation ID** answers: "Which events are part of the same business
transaction?"
- **Causation ID** answers: "Which specific event directly triggered this
event?"
### Example Scenario
Consider an e-commerce order processing flow:
1. User initiates checkout (correlation ID: "txn-abc-123" is created)
2. Order is placed (Event A)
3. Payment is processed (Event B, caused by A)
4. Inventory is checked (Event C, caused by A)
5. Shipping is scheduled (Event D, caused by C)
6. Notification is sent (Event E, caused by D)
In this scenario:
- All events share the same `correlationid`: "txn-abc-123"
- Each event has a `causationid` pointing to its direct trigger:
- Event B and C have `causationid`: "order-123" (Event A's ID)
- Event D has `causationid`: "inventory-456" (Event C's ID)
- Event E has `causationid`: "shipping-789" (Event D's ID)
## Examples
### Example 1: Complete Correlation Chain
Initial Order Event:
```json
{
"specversion": "1.0",
"type": "com.example.order.placed",
"source": "https://example.com/orders",
"id": "order-123",
"correlationid": "txn-abc-123",
"data": {
"orderId": "123",
"customerId": "456"
}
}
```
Payment Processing (triggered by order):
```json
{
"specversion": "1.0",
"type": "com.example.payment.processed",
"source": "https://example.com/payments",
"id": "payment-789",
"correlationid": "txn-abc-123",
"causationid": "order-123",
"data": {
"amount": 150.0,
"currency": "USD"
}
}
```
Inventory Check (also triggered by order):
```json
{
"specversion": "1.0",
"type": "com.example.inventory.checked",
"source": "https://example.com/inventory",
"id": "inventory-456",
"correlationid": "txn-abc-123",
"causationid": "order-123",
"data": {
"items": ["sku-001", "sku-002"],
"available": true
}
}
```
Shipping Scheduled (triggered by inventory check):
```json
{
"specversion": "1.0",
"type": "com.example.shipping.scheduled",
"source": "https://example.com/shipping",
"id": "shipping-012",
"correlationid": "txn-abc-123",
"causationid": "inventory-456",
"data": {
"carrier": "FastShip",
"estimatedDelivery": "2024-01-15"
}
}
```
### Example 2: Error Handling with Correlation
When an error occurs, the correlation attributes help identify both the affected
transaction and the specific trigger:
```json
{
"specversion": "1.0",
"type": "com.example.payment.failed",
"source": "https://example.com/payments",
"id": "error-345",
"correlationid": "txn-abc-123",
"causationid": "payment-789",
"data": {
"error": "Insufficient funds",
"retryable": true
}
}
```
### Example 3: Fan-out Pattern
A single event can cause multiple downstream events:
```json
{
"specversion": "1.0",
"type": "com.example.order.fulfilled",
"source": "https://example.com/fulfillment",
"id": "fulfillment-567",
"correlationid": "txn-abc-123",
"causationid": "shipping-012",
"data": {
"completedAt": "2024-01-14T10:30:00Z"
}
}
```
This might trigger multiple notification events, all with the same causationid:
```json
{
"specversion": "1.0",
"type": "com.example.notification.email",
"source": "https://example.com/notifications",
"id": "notify-email-890",
"correlationid": "txn-abc-123",
"causationid": "fulfillment-567",
"data": {
"recipient": "customer@example.com",
"template": "order-fulfilled"
}
}
```
```json
{
"specversion": "1.0",
"type": "com.example.notification.sms",
"source": "https://example.com/notifications",
"id": "notify-sms-891",
"correlationid": "txn-abc-123",
"causationid": "fulfillment-567",
"data": {
"recipient": "+1234567890",
"message": "Your order has been fulfilled!"
}
}
```
## Best Practices
1. **Correlation ID Generation**: Generate correlation IDs at the entry point of
your system (e.g., API gateway, UI interaction)
2. **Causation ID Propagation**: Always set the causation ID to the `id` of the
event that directly triggered the current event
3. **Consistent Usage**: If you start using these attributes in a flow, use them
consistently throughout
4. **ID Format**: Use globally unique identifiers (e.g., UUIDs) to avoid
collisions across distributed systems
5. **Retention**: Consider the retention implications when designing queries
based on these attributes

View File

@ -0,0 +1,110 @@
# Data Classification Extension
CloudEvents might contain payloads which are subjected to data protection
regulations like GDPR or HIPAA. For intermediaries and consumers knowing how
event payloads are classified, which data protection regulation applies and how
payloads are categorized, enables compliant processing of events.
This extension defines attributes to describe to
[consumers](../spec.md#consumer) or [intermediaries](../spec.md#intermediary)
how an event and its payload is classified, category of the payload and any
applicable data protection regulations.
These attributes are intended for classification at an event and payload level
and not at a `data` field level. Classification at a field level is best defined
in the schema specified via the `dataschema` attribute.
## Notational Conventions
As with the main [CloudEvents specification](../spec.md), the key words "MUST",
"MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT",
"RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as
described in [RFC 2119](https://tools.ietf.org/html/rfc2119).
However, the scope of these key words is limited to when this extension is used.
For example, an attribute being marked as "REQUIRED" does not mean it needs to
be in all CloudEvents, rather it needs to be included only when this extension
is being used.
## Attributes
### dataclassification
- Type: `String`
- Description: Data classification level for the event payload within the
context of a `dataregulation`. In situations where `dataregulation` is
undefined or the data protection regulation does not define any labels, then
RECOMMENDED labels are: `public`, `internal`, `confidential`, or
`restricted`.
- Constraints:
- REQUIRED
### dataregulation
- Type: `String`
- Description: A comma-delimited list of applicable data protection regulations.
For example: `GDPR`, `HIPAA`, `PCI-DSS`, `ISO-27001`, `NIST-800-53`, `CCPA`.
- Constraints:
- OPTIONAL
- if present, MUST be a non-empty string without internal spaces. Leading and
trailing spaces around each entry MUST be ignored.
### datacategory
- Type: `String`
- Description: Data category of the event payload within the context of a
`dataregulation` and `dataclassification`. For GDPR personal data typical
labels are: `non-sensitive`, `standard`, `sensitive`, `special-category`. For
US personal data this could be: `sensitive-pii`, `non-sensitive-pii`,
`non-pii`. And for personal health information under HIPAA: `phi`.
- Constraints:
- OPTIONAL
- if present, MUST be a non-empty string
## Usage
When this extension is used, producers MUST set the value of the
`dataclassification` attribute. When applicable the `dataregulation` and
`datacategory` attributes MAY be set to provide additional details on the
classification context.
When an implementation supports this extension, then intermediaries and
consumers MUST take these attributes into account and act accordingly to data
regulations and/or internal policies in processing the event and payload. If
intermediaries or consumers cannot meet such requirements, they MUST reject and
report an error through a protocol-level mechanism.
If intermediaries or consumers are unsure on how to interpret these attributes,
for example when they encounter an unknown classification level or data
regulation, they MUST assume they cannot meet requirements and MUST reject the
event and report an error through a protocol-level mechanism.
Intermediaries SHOULD NOT modify the `dataclassification`, `dataregulation`, and
`datacategory` attributes.
## Use cases
Examples where data classification of events can be useful are:
- When an event contains PII or restricted information and therefore processing
by intermediaries or consumers need to adhere to certain policies. For example
having separate processing pipelines by sensitivity or having logging,
auditing and access policies based upon classification.
- When an event payload is subjected to regulation and therefore retention
policies apply. For example, having event retention policies based upon data
classification or to enable automated data purging of durable topics.
## Appendix: Data Protection and Privacy Regulations
For reference purposes, a catalog of common data protection and privacy
regulation and abbreviations is availble from [UNCTAD
(United Nations Conference on Trade and
Development)](https://unctad.org/page/data-protection-and-privacy-legislation-worldwide),
under the `DOWNLOAD FULL DATA` button ([direct
link](https://unctad.org/system/files/information-document/DP.xlsx)). Others
might exist.
Some examples include:
- `GDPR` - General Data Protection Regulation, Europe
- `HIPAA` - Health Insurance Portability and Accountability Act, United States
- `NDPR` - Nigeria Data Protection Regulation, Nigeria

View File

@ -0,0 +1,91 @@
# Dataref (Claim Check Pattern)
As defined by the term [Data](../spec.md#data), CloudEvents MAY include
domain-specific information about the occurrence. When present, this information
will be encapsulated within `data`.
The `dataref` attribute MAY be used to reference another location where this
information is stored. The information, whether accessed via `data` or `dataref`
MUST be identical.
Both `data` and the `dataref` attribute MAY exist at the same time. A middleware
MAY drop `data` when the `dataref` attribute exists, it MAY add
the `dataref` attribute and drop the `data` attribute, or it MAY add the `data`
attribute by using the `dataref` attribute. Note that since the CloudEvents
specification does not define a mechanism by which a sender can know if the
receiver supports any particular CloudEvent extension, removing the `data`
attribute in favor of just having the `dataref` attribute could yield
unexpected results. As such, removing the `data` attribute SHOULD only be done
when the sender is confident that all receivers support the `dataref`
attribute - via some out-of-band agreement.
## Notational Conventions
As with the main [CloudEvents specification](../spec.md), the key words "MUST",
"MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT",
"RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as
described in [RFC 2119](https://tools.ietf.org/html/rfc2119).
However, the scope of these key words is limited to when this extension is
used. For example, an attribute being marked as "REQUIRED" does not mean
it needs to be in all CloudEvents, rather it needs to be included only when
this extension is being used.
## Attributes
### dataref
- Type: `URI-reference`
- Description: A reference to a location where the event payload is stored. The
location MAY not be accessible without further information (e.g. a pre-shared
secret).
Known as the "Claim Check Pattern", this attribute MAY be used for a variety
of purposes, including:
- If the [Data](../spec.md#data) is too large to be included in the
message, the `data` is not present, and the consumer can retrieve it using
this attribute.
- If the consumer wants to verify that the [Data](../spec.md#data)
has not been tampered with, it can retrieve it from a trusted source using
this attribute.
- If the [Data](../spec.md#data) MUST only be viewed by trusted
consumers (e.g. personally identifiable information), only a trusted
consumer can retrieve it using this attribute and a pre-shared secret.
If this attribute is used, the information SHOULD be accessible long enough
for all consumers to retrieve it, but MAY not be stored for an extended period
of time.
- Constraints:
- REQUIRED
# Examples
The following example shows a CloudEvent in which the event producer has included
both `data` and `dataref` (serialized as JSON):
```JSON
{
"specversion" : "1.0",
"type" : "com.github.pull_request.opened",
"source" : "https://github.com/cloudevents/spec/pull/123",
"id" : "A234-1234-1234",
"datacontenttype" : "text/xml",
"data" : "<much wow=\"xml\"/>",
"dataref" : "https://github.com/cloudevents/spec/pull/123/events/A234-1234-1234.xml"
}
```
The following example shows a CloudEvent in which a middleware has replaced the
`data` with a `dataref` (serialized as JSON):
```JSON
{
"specversion" : "1.0",
"type" : "com.github.pull_request.opened",
"source" : "https://github.com/cloudevents/spec/pull/123",
"id" : "A234-1234-1234",
"datacontenttype" : "text/xml",
"dataref" : "https://tenant123.middleware.com/events/data/A234-1234-1234.xml"
}
```

View File

@ -0,0 +1,86 @@
# Deprecation extension
This specification defines attributes that can be included in CloudEvents to
indicate to [consumers](../spec.md#consumer) or
[intermediaries](../spec.md#intermediary) the deprecation of events. These
attributes inform CloudEvents consumers about upcoming changes or removals,
facilitating smoother transitions and proactive adjustments.
## Notational Conventions
As with the main [CloudEvents specification](../spec.md), the key words "MUST",
"MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT",
"RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as
described in [RFC 2119](https://tools.ietf.org/html/rfc2119).
However, the scope of these key words is limited to when this extension is
used. For example, an attribute being marked as "REQUIRED" does not mean it
needs to be in all CloudEvents, rather it needs to be included only when this
extension is being used.
## Attributes
### deprecated
- Type: `Boolean`
- Description: Indicates whether the event type is deprecated.
- Constraints
- MUST be `true`
- REQUIRED
- Example: `"deprecated": true`
### deprecationfrom
- Type: `Timestamp`
- Description: Specifies the date and time when the event type was
officially marked as deprecated.
- Constraints
- OPTIONAL
- The `deprecationfrom` timestamp SHOULD remain stable once set and SHOULD
reflect a point in the past or present. Pre-announcing deprecation by
setting a future date is not encouraged.
- Example: `"deprecationfrom": "2024-10-11T00:00:00Z"`
### deprecationsunset
- Type: `Timestamp`
- Description: Specifies the future date and time when the event type will
become unsupported.
- Constraints
- OPTIONAL
- The timestamp MUST be later than or the same as the one given in the
`deprecationfrom` field, if present. It MAY be extended to a later date but
MUST NOT be shortened once set.
- Example: `"deprecationsunset": "2024-11-12T00:00:00Z"`
### deprecationmigration
- Type: `URI`
- Description: Provides a link to documentation or resources that describe
the migration path from the deprecated event to an alternative. This helps
consumers transition away from the deprecated event.
- Constraints
- OPTIONAL
- The URI SHOULD point to a valid and accessible resource that helps
consumers understand what SHOULD replace the deprecated event.
- Example: `"deprecationmigration": "https://example.com/migrate-to-new-evt"`
## Usage
When this extension is used, producers MUST set the value of the `deprecated`
attribute to `true`. This gives consumers a heads-up that they SHOULD begin
migrating to a new event or version.
Consumers SHOULD make efforts to switch to the suggested replacement before the
specified `deprecationsunset` timestamp. It is advisable to begin transitioning
as soon as the event is marked as deprecated to ensure a smooth migration and
avoid potential disruptions after the sunset date.
If an event is received after the `deprecationsunset` timestamp, consumers
SHOULD choose to stop processing such events, especially if unsupported events
can cause downstream issues.
Producers SHOULD stop emitting deprecated events after the `deprecationsunset`
timestamp. They SHOULD also provide detailed documentation via the
`deprecationmigration` attribute to guide consumers toward the correct replacement
event.

View File

@ -0,0 +1,89 @@
# Distributed Tracing extension
This extension embeds context from
[W3C TraceContext](https://www.w3.org/TR/trace-context/) into a CloudEvent.
The goal of this extension is to offer means to carry context when instrumenting
CloudEvents based systems with OpenTelemetry.
The [OpenTelemetry](https://opentelemetry.io/) project is a collection
of tools, APIs and SDKs that can be used to instrument, generate, collect,
and export telemetry data (metrics, logs, and traces) to help you
analyze your softwares performance and behavior.
The OpenTelemetry specification defines both
[Context](https://github.com/open-telemetry/opentelemetry-specification/blob/v1.8.0/specification/context/context.md#overview)
and
[Distributed Tracing](https://github.com/open-telemetry/opentelemetry-specification/blob/v1.8.0/specification/overview.md#tracing-signal)
as:
> A `Context` is a propagation mechanism which carries execution-scoped values across
API boundaries and between logically associated execution units. Cross-cutting
concerns access their data in-process using the same shared `Context` object.
>
> A `Distributed Trace` is a set of events, triggered as a result of a single
logical operation, consolidated across various components of an application.
A distributed trace contains events that cross process, network and security boundaries.
## Notational Conventions
As with the main [CloudEvents specification](../spec.md), the key words "MUST",
"MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT",
"RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as
described in [RFC 2119](https://tools.ietf.org/html/rfc2119).
However, the scope of these key words is limited to when this extension is
used. For example, an attribute being marked as "REQUIRED" does not mean
it needs to be in all CloudEvents, rather it needs to be included only when
this extension is being used.
## Attributes
### traceparent
- Type: `String`
- Description: Contains a version, trace ID, span ID, and trace options as
defined in [section 3.2](https://w3c.github.io/trace-context/#traceparent-header)
- Constraints
- REQUIRED
### tracestate
- Type: `String`
- Description: a comma-delimited list of key-value pairs, defined by
[section 3.3](https://w3c.github.io/trace-context/#tracestate-header).
- Constraints
- OPTIONAL
## Using the Distributed Tracing Extension
The Distributed Tracing Extension is not intended to replace the protocol specific headers for tracing,
like the ones described in [W3C Trace Context](https://w3c.github.io/trace-context/) for HTTP.
Given a single hop event transmission (from source to sink directly), the Distributed Tracing Extension,
if used, MUST carry the same trace information contained in protocol specific tracing headers.
Given a multi hop event transmission, the Distributed Tracing Extension, if used, MUST
carry the trace information of the starting trace of the transmission.
In other words, it MUST NOT carry trace information of each individual hop, since this information is usually
carried using protocol specific headers, understood by tools like [OpenTelemetry](https://opentelemetry.io/).
The
[OpenTelemetry Semantic Conventions for CloudEvents](https://opentelemetry.io/docs/specs/semconv/cloudevents/cloudevents-spans/)
define the trace structure to follow when instrumenting CloudEvent systems and
in which scenarios this extension can be used and how to use it to achieve said structure.
Middleware between the source and the sink of the event could eventually add a Distributed Tracing Extension
if the source didn't include any, in order to provide to the sink the starting trace of the transmission.
An example with HTTP:
```bash
CURL -X POST example/webhook.json \
-H 'ce-id: 1' \
-H 'ce-specversion: 1.0' \
-H 'ce-type: example' \
-H 'ce-source: http://localhost' \
-H 'ce-traceparent: 00-0af7651916cd43dd8448eb211c80319c-b9c7c989f97918e1-01' \
-H 'traceparent: 00-4bf92f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7-01' \
-H 'tracestate: rojo=00-4bf92f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7-01,congo=lZWRzIHRoNhcm5hbCBwbGVhc3VyZS4`
```

View File

@ -0,0 +1,69 @@
# Expiry Time Extension
This extension provides a mechanism to hint to [consumers](../spec.md#consumer)
or [intermediaries](../spec.md#intermediary) a timestamp after which an
[event](../spec.md#event) can be ignored.
In distributed systems with message delivery guarantees, events might be delivered
to a consumer some significant amount of time after an event has been sent.
In this situation, it might be desirable to ignore events that
are no longer relevant. The [`time` attribute](../spec.md#time) could be used
to handle this on the consumer side but can be tricky if the logic varies
depending on the event type or producer.
## Notational Conventions
As with the main [CloudEvents specification](../spec.md), the key words "MUST",
"MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT",
"RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as
described in [RFC 2119](https://tools.ietf.org/html/rfc2119).
However, the scope of these key words is limited to when this extension is
used. For example, an attribute being marked as "REQUIRED" does not mean
it needs to be in all CloudEvents, rather it needs to be included only when
this extension is being used.
## Attributes
### expirytime
- Type: `Timestamp`
- Description: Timestamp indicating an event is no longer useful after the
indicated time.
- Constraints:
- REQUIRED
- SHOULD be equal to or later than the `time` attribute, if present
## Usage
When this extension is used, producers MUST set the value of the `expirytime`
attribute.
Intermediaries and consumers MAY ignore and discard an event that has an
`expirytime` at or before the current timestamp at the time of any checks.
Any system that directly or indirectly interacts with a consumer SHOULD NOT
make any assumptions on whether a consumer will
keep or discard an event based on this extension alone. The reasoning for this
is that time-keeping can be inaccurate between any two given systems.
Intermediaries MAY modify the `expirytime` attribute, however, they MUST NOT
remove it.
## Potential Scenarios
### Web dashboard for sensors
A series of sensors produce CloudEvents at regular intervals that vary per
sensor. Each sensor can pick an `expirytime` that suits its configured sample
rate. In the event that an intermediary delays delivery of events to a
consumer, older events can be skipped to avoid excessive processing or UI
updates upon resuming delivery.
### Jobs triggered by Continuous Integration
A Continuous Integration (CI) system uses CloudEvents to delegate a job to a
runner machine. The job has a set deadline and needs to complete before that time
has elapsed to be considered successful. The CI system can set the
`expirytime` to match the deadline. The job runner would ignore/reject the job
if the `expirytime` has elapsed since the CI might have likely already determined
the job state.

View File

@ -0,0 +1,336 @@
# OPC UA
This extension defines the mapping of [OPC UA](https://reference.opcfoundation.org/Core/Part1/v105/docs/)
[PubSub](https://reference.opcfoundation.org/Core/Part14/v105/docs/) dataset to
CloudEvents to allow seamless routing of OPC UA dataset messages via different
protocols, it therefore provides a recommendation to map known REQUIRED and
OPTIONAL attributes using other extensions as well as defines its own extension
attributes.
## Notational Conventions
As with the main [CloudEvents specification](../spec.md), the key words "MUST",
"MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT",
"RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as
described in [RFC 2119](https://tools.ietf.org/html/rfc2119).
However, the scope of these key words is limited to when this extension is used.
For example, an attribute being marked as "REQUIRED" does not mean it needs to
be in all CloudEvents, rather it needs to be included only when this extension
is being used.
## Mapping of REQUIRED Attributes
### id
MUST map to [Network Message
Header](https://reference.opcfoundation.org/Core/Part14/v105/docs/7.2.5.3#Table163)
field `MessageId`.
### source
MUST either map to [Application
Description](https://reference.opcfoundation.org/Core/Part4/v104/docs/7.1) field
`applicationUri` of the OPC UA server or to a customer configured identifier
like a unified namespace path.
### type
MUST map to [Data Set Message Header](https://reference.opcfoundation.org/Core/Part14/v105/docs/7.2.5.4#Table164)
field `MessageType`.
## Mapping of OPTIONAL Attributes
### datacontenttype
MUST be `application/json` for OPC UA PubSub JSON payload and MAY be appended with
`+gzip` when the payload is gzip compressed.
### dataschema
OPC UA provides type information as part of PubSub metadata messages, for non
OPC UA consumers or when different payload encoding like Avro is used, it is
REQUIRED to provide schema information (based on metadata information) in a
separate format like [JSON schema](https://json-schema.org/specification) or
[Avro schema](https://avro.apache.org/docs/1.11.1/specification/) or others. For
those cases the attribute references the schema and is used for versioning.
### subject
For metadata, event and data messages (type one of `ua-metadata`, `ua-keyframe`,
`ua-deltaframe`, `ua-event`), `subject` MUST map to either [Data Set Message
Header](https://reference.opcfoundation.org/Core/Part14/v105/docs/7.2.5.4#Table164)
field `DataSetWriterId` or `DataSetWriterName`.
For event messages (type equals to `ua-event`) `subject` MUST be appended with
"/" and [Base Event Type](https://reference.opcfoundation.org/Core/Part5/v104/docs/6.4.2)
field `EventId`.
### time
MUST map to [Data Set Message
Header](https://reference.opcfoundation.org/Core/Part14/v105/docs/7.2.5.4#Table164)
field `Timestamp`.
## Mapping for other extensions
The following well-known extensions attributes MUST be used for data messages and
event messages (type one of `ua-keyframe`, `ua-deltaframe`, `ua-event`).
### sequence
Attribute as defined by [sequence extensions](./sequence.md) MUST map to [Data
Set Message Header](https://reference.opcfoundation.org/Core/Part14/v105/docs/7.2.5.4#Table164)
field `SequenceNumber`.
### traceparent
Attribute as defined by [distributed-tracing extension](./distributed-tracing.md)
to allow tracing from event publisher towards consumer.
### tracestate
Attribute as defined by [distributed-tracing extension](./distributed-tracing.md)
MAY be used to allow tracing from event publisher towards consumer.
### recordedtime
Attribute as defined by [recordedtime extension](./recordedtime.md) to
determine the latency between event publisher towards consumer.
## Attributes
### opcuametadatamajorversion
- Type: `Integer`
- Description: Links dataset message to the current version of the metadata.
Contains value from `MajorVersion` of [Data Set Message Header](https://reference.opcfoundation.org/Core/Part14/v105/docs/7.2.5.4#Table164) field `MetaDataVersion`.
- Constraints
- OPTIONAL but MUST NOT be present if `dataschema` is used
### opcuametadataminorversion
- Type: `Integer`
- Description: Links dataset message to the current version of the metadata.
Contains value from `MinorVersion` of [Data Set Message
Header](https://reference.opcfoundation.org/Core/Part14/v105/docs/7.2.5.4#Table164)
field `MetaDataVersion`.
- Constraints
- OPTIONAL but MUST NOT be present if `dataschema` is used
### opcuastatus
- Type: `Integer`
- Description: Defines the overall status of the data set message, maps to
[Data Set Message Header](https://reference.opcfoundation.org/Core/Part14/v105/docs/7.2.5.4#Table164) field `Status`.
- Constraints
- OPTIONAL
- REQUIRED if status is not _Good_
- MAY be omitted if status is _Good_
## General Constraints
- OPC UA messages MUST use `binary-mode` of CloudEvents.
- OPC UA PubSub JSON messages MUST be encoded using non-reversible encoding as
the decoding information is contained in metadata messages or by schema
referenced via `dataschema` attribute.
- Payload of OPC UA PubSub JSON messages MUST NOT contain Network Message Header
and Data Set Header as that information is mapped into CloudEvents attributes.
- OPC UA PubSub JSON messages MUST contain exactly one dataset message.
## Examples
### Metadata message
The metadata message helps Cloud applications to understand the semantics and
structure of dataset messages.
```text
------------------ PUBLISH -------------------
Topic Name: opcua/json/DataSetMetaData/publisher-on-ot-edge
Content Type: application/json; charset=utf-8
------------- User Properties ----------------
specversion: 1.0
type: ua-metadata
time: 2024-03-28T21:56:24Z
id: 1234-1234-1234
source: urn:factory:aggregationserver:opcua
datacontenttype: application/json; charset=utf-8
subject: energy-consumption-asset
.... further attributes ...
------------------ payload -------------------
{
... application data (OPC UA PubSub metadata) ...
"ConfigurationVersion": {
"MajorVersion": 672338910,
"MinorVersion": 672341762
}
...
}
-----------------------------------------------
```
### Telemetry message
The telemetry or data messages contain values of all OPC UA nodes that had
changed in a given period of time (`ua-deltaframe`) or contain values for all
OPC UA nodes that were monitored (`ua-keyframe`).
The complete list of monitored OPC UA nodes as well as the related type
information are defined in the metadata message. The attributes
`opcuametadatamajorversion` and `opcuametadataminorversion` are used to
reference the correct metadata message. The `ua-deltaframe` messages will be
used for hot and/or cold path processing and `ua-keyframe` messages can
additional be used to update last-known-value tables.
```text
------------------ PUBLISH -------------------
Topic Name: opcua/json/DataSetMessage/publisher-on-ot-edge
Content Type: application/json; charset=utf-8
------------- User Properties ----------------
specversion: 1.0
type: ua-deltaframe
time: 2024-03-28T21:56:42Z
id: 1235-1235-1235
source: urn:factory:aggregationserver:opcua
datacontenttype: application/json; charset=utf-8
subject: energy-consumption-asset
sequence: 7
traceparent: 4bf92f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7-00000011
recordedtime: 2024-03-28T21:56:43Z
opcuametadatamajorversion: 672338910
opcuametadataminorversion: 672341762
.... further attributes ...
------------------ payload -------------------
{
... application data
(OPC UA PubSub JSON single dataset Message)...
}
-----------------------------------------------
```
#### OPC UA PubSub JSON single dataset Message
Using CloudEvents and model the OPC UA PubSub header information as CloudEvent
attributes enables integration into various system (independent from used
protocols) and simplifies the payload structure.
```text
{
"IsRunning": {
"Value": true,
"SourceTimestamp": "2024-03-29T07:31:19.555Z"
},
"EnergyConsumption": {
"Value": 31
"SourceTimestamp": "2024-03-29T07:31:37.546Z",
"StatusCode": {
"Code":1073741824,
"Symbol":"Uncertain"
}
},
"EnergyPeak": {
"Value": 54
"SourceTimestamp": "2024-03-29T07:31:06.978Z"
},
"EnergyLow": {
"Value": 22
"SourceTimestamp": "2024-03-29T07:31:17.582Z"
}
}
```
### Event message
The event message will contain a single event and the identifier of this event is
added to the `subject` to allow routing it into different systems without parsing
the payload. Events are routed for example in systems like Manufacturing Execution
Systems (MES), Supervisory Control and Data Acquisition systems (SCADA),
Alerting Systems or Operation Technology Operator Terminals (HMI Clients) and
also in hot and/or cold path processing. The attributes
`opcuametadatamajorversion` and `opcuametadataminorversion` are used to
reference the correct metadata message.
```text
------------------ PUBLISH -------------------
Topic Name: opcua/json/DataSetMessage/publisher-on-ot-edge
Content Type: application/json; charset=utf-8
------------- User Properties ----------------
specversion: 1.0
type: ua-event
time: 2024-03-28T21:57:01Z
id: 1236-1237-1238
source: urn:factory:aggregationserver:opcua
datacontenttype: application/json; charset=utf-8
subject: energy-consumption-asset/444321
sequence: 18
traceparent: caffef3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7-00000011
recordedtime: 2024-03-28T21:57:01Z
opcuametadatamajorversion: 672338910
opcuametadataminorversion: 672341762
.... further attributes ...
------------------ payload -------------------
{
... application data
(OPC UA PubSub JSON Single Event Message)...
}
-----------------------------------------------
```
### Telemetry message with different Encoding
One major benefit of CloudEvents for OPC UA is that it is possible to support
other encoding and external schema, while keeping the same OPC UA information for
routing.
The example below uses Avro binary encoded payload, with the corresponding schema
referenced by `dataschema`. The `source` will be defined by an customer defined
hierarchical path.
```text
------------------ PUBLISH -------------------
Topic Name: bottling-company/amsterdam/FillingArea1/FillingLine9/Cell1/Conveyor
Content Type: application/avro
------------- User Properties ----------------
specversion: 1.0
type: ua-keyframe
time: 2024-03-28T23:59:59Z
id: 6235-7235-8235
source: bottling-company/amsterdam/FillingArea1/FillingLine9/Cell1/Conveyor
datacontenttype: application/avro
subject: energy-consumption-asset
dataschema: http://example.com/schemas/energy-consumption-asset/v1.8
sequence: 3141
traceparent: 22222f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7-00000011
recordedtime: 2024-03-28T23:59:59Z
.... further attributes ...
------------------ payload -------------------
... application data
(OPC UA PubSub Single DataSet Message as AVRO binary)...
-----------------------------------------------
```

View File

@ -0,0 +1,40 @@
# Partitioning extension
This extension defines an attribute for use by message brokers and their clients
that support partitioning of events, typically for the purpose of scaling.
Often in large scale systems, during times of heavy load, events being received
need to be partitioned into multiple buckets so that each bucket can be
separately processed in order for the system to manage the incoming load. A
partitioning key can be used to determine which bucket each event goes into. The
entity sending the events can ensure that events that need to be placed into the
same bucket are done so by using the same partition key on those events.
## Notational Conventions
As with the main [CloudEvents specification](../spec.md), the key words "MUST",
"MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT",
"RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as
described in [RFC 2119](https://tools.ietf.org/html/rfc2119).
However, the scope of these key words is limited to when this extension is
used. For example, an attribute being marked as "REQUIRED" does not mean
it needs to be in all CloudEvents, rather it needs to be included only when
this extension is being used.
## Attributes
### partitionkey
- Type: `String`
- Description: A partition key for the event, typically for the purposes of
defining a causal relationship/grouping between multiple events. In cases
where the CloudEvent is delivered to an event consumer via multiple hops,
it is possible that the value of this attribute might change, or even be
removed, due to protocol semantics or business processing logic within
each hop.
- Examples:
- The ID of the entity that the event is associated with
- Constraints:
- REQUIRED
- MUST be a non-empty string

View File

@ -0,0 +1,81 @@
# Recorded Time Extension
This extension defines an attribute that represents the time when an
[_occurrence_](../spec.md#occurrence)
was recorded in a particular
[_event_](../spec.md#event),
which is the time when the CloudEvent was created by a producer.
This attribute is distinct from the [`time`
attribute](https://github.com/cloudevents/spec/blob/main/cloudevents/spec.md#time),
which, according to the CloudEvents specification, SHOULD be the time when the
occurrence happened, if it can be determined.
This attribute makes it possible to represent
[bitemporal](https://en.wikipedia.org/wiki/Bitemporal_modeling) data with
CloudEvents so that, for every event, both of the following times can be known
by consumers:
- _Occurrence time_: timestamp of when the occurrence recorded in the event
happened, which corresponds to the `time` attribute.
- _Recorded time_: the timestamp of when the occurrence was recorded in a
specific CloudEvent instance, which is represented by this extension.
## Notational Conventions
As with the main [CloudEvents specification](../spec.md), the key words "MUST",
"MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT",
"RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as
described in [RFC 2119](https://tools.ietf.org/html/rfc2119).
However, the scope of these key words is limited to when this extension is
used. For example, an attribute being marked as "REQUIRED" does not mean
it needs to be in all CloudEvents, rather it needs to be included only when
this extension is being used.
## Attributes
### recordedtime
- Type: `Timestamp`
- Description: Timestamp of when the occurrence was recorded in this CloudEvent,
i.e. when the CloudEvent was created by a producer.
- Constraints:
- REQUIRED
- If present, MUST adhere to the format specified in
[RFC 3339](https://tools.ietf.org/html/rfc3339)
- SHOULD be equal to or later than the _occurrence time_.
## Usage
When this extension is used, producers MUST set the value of the `recordedtime`
attribute to the timestamp of when they create the owning CloudEvent.
If the same occurrence MUST be recorded differently, or the event data or
attributes of a previous record of the occurrence MUST be amended or redacted,
then the new CloudEvent with the necessary changes SHOULD have a different
`recordedtime` attribute value than the previous record of the occurrence.
Intermediaries MUST NOT change the value of the `recordedtime` attribute.
## Use cases
Examples of when an occurrence might need to be recorded differently are:
- When incompatible changes to the event data schema are made, and there are
systems that can only process the new schema.
- When a previous record contains incorrect information.
- When a previous record contains personal information that can no longer be
kept because of regulatory or statutory reasons and needs to be redacted.
Having bitemporal data makes it easier to get reproducible datasets for
analytics and data science, as the datasets can be created by placing
constraints on both the `time` and `recordedtime` attributes of events.
Knowing when an occurrence was recorded in a particular event also makes it
possible to determine latency between event producers and consumers. It also
makes it possible to do operations which are sensitive to the time when an event
was recorded, such as capturing events into time-intervalled files.
The recorded time also makes it easier to differentiate different records of the
same occurrence in analytical data stores.

View File

@ -0,0 +1,49 @@
# Sampled Rate Extension
There are many cases in an Event's life when a system (either the system
creating the event or a system transporting the event) might wish to only emit a
portion of the events that actually happened. In a high throughput system where
creating the event is costly, a system might wish to only create an event for
1/100 of the times that something happened. Additionally, during the
transmission of an event from the source to the eventual recipient, any step
along the way might choose to only pass along a fraction of the events it
receives.
In order for the system receiving the event to understand what is actually
happening in the system that generated the event, information about how many
similar events happened would need to be included in the event itself. This
field provides a place for a system generating an event to indicate that the
emitted event represents a given number of other similar events. It also
provides a place for intermediary transport systems to modify the event when
they impose additional sampling.
This specification does not mandate which component (e.g. event source, event
producer) is responsible for doing the sampling. Rather just if sampling is
done then the attributes defined below are where the metadata would appear
within the CloudEvent.
## Notational Conventions
As with the main [CloudEvents specification](../spec.md), the key words "MUST",
"MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT",
"RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as
described in [RFC 2119](https://tools.ietf.org/html/rfc2119).
However, the scope of these key words is limited to when this extension is
used. For example, an attribute being marked as "REQUIRED" does not mean
it needs to be in all CloudEvents, rather it needs to be included only when
this extension is being used.
## Attributes
### sampledrate
- Type: `Integer`
- Description: The rate at which this event has already been sampled. Represents
the number of similar events that happened but were not sent plus this event.
For example, if a system sees 30 occurrences and emits a single event,
`sampledrate` would be 30 (29 not sent and 1 sent). A value of `1` is the
equivalent of this extension not being used at all.
- Constraints
- REQUIRED
- The rate MUST be greater than zero.

View File

@ -0,0 +1,46 @@
# Sequence
This extension defines an attribute that can be included within a CloudEvent
to describe the position of an event in the ordered sequence of events produced
by a unique event source.
The `sequence` attribute represents the value of this event's order in the
stream of events. This specification does not define the meaning or set of
valid value of this attribute, rather it only mandates that the value be
a string that can be lexicographically compared to other `sequence` values
to determine which one comes first. The `sequence` with a lower lexicographical
value comes first.
Produces and consumers are free to define an out-of-band agreement on the
semantic meaning, or valid values, for the attribute.
## Notational Conventions
As with the main [CloudEvents specification](../spec.md), the key words "MUST",
"MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT",
"RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as
described in [RFC 2119](https://tools.ietf.org/html/rfc2119).
However, the scope of these key words is limited to when this extension is
used. For example, an attribute being marked as "REQUIRED" does not mean
it needs to be in all CloudEvents, rather it needs to be included only when
this extension is being used.
## Attributes
### sequence
- Type: `String`
- Description: Value expressing the relative order of the event. This enables
interpretation of data supercedence.
- Constraints
- REQUIRED
- MUST be a non-empty lexicographically-orderable string
- RECOMMENDED as monotonically increasing and contiguous
The entity creating the CloudEvent MUST ensure that the `sequence` values
used are formatted such that across the entire set of values used a receiver
can determine the order of the events via a simple string-compare type of
operation. This means that it might be necessary for the value to include
some kind of padding (e.g. leading zeros in the case of the value being the
string representation of an integer).

View File

@ -0,0 +1,80 @@
# Severity Extension
## Abstract
This extension defines attributes that MAY be included within a CloudEvent
to describe the "severity" or "level" of an event in relation to other events.
Often systems produce events in form of logs, and these types of events usually
share a common concept of "log-level". This extension aims to provide a
standard way for describing this property in a language agnostic form.
Sharing a common way to describe severity of events allows for better
monitoring systems, tooling and general log consumption.
This extension is heavily inspired by the
[OpenTelemetry Severity Fields](https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/logs/data-model.md#severity-fields)
and is intended to interoperate with them.
## Notational Conventions
As with the main [CloudEvents specification](../spec.md), the key words "MUST",
"MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT",
"RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as
described in [RFC 2119](https://tools.ietf.org/html/rfc2119).
However, the scope of these key words is limited to when this extension is
used. For example, an attribute being marked as "REQUIRED" does not mean
it needs to be in all CloudEvents, rather it needs to be included only when
this extension is being used.
## Attributes
When both attributes are used, all `severitytext` values which MAY be produced
in a context of a `source` SHOULD be in a
[one-to-one and onto](https://en.wikipedia.org/wiki/Bijection) relationship
with all `severitynumber` values which MAY be produced by the same `source`.
### severitytext
- Type: `String`
- Description: Human readable text representation of the event severity (also
known as log level name).
This is the original string representation of the severity as it is known
at the source. If this field is missing and `severitynumber` is present then
the [short name](https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/logs/data-model.md#displaying-severity)
that corresponds to the `severitynumber` MAY be used as a substitution.
- Constraints
- OPTIONAL
- if present, MUST be a non-empty string
- SHOULD be uppercase
- RECOMMENDED values are `TRACE`, `DEBUG`, `INFO`, `WARN`, `ERROR`, and
`FATAL`, but others MAY be used.
### severitynumber
- Type: `Integer`
- Description: Numerical representation of the event severity (also known as
log level number), normalized to values described in this document.
Severity of all values MUST be numerically ascending from least-severe
to most-severe. An event with a lower numerical value (such as a debug event)
MUST be less severe than an event with a higher numerical value (such as
an error event).
See OpenTelemetry for [exact severity number meanings](https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/logs/data-model.md#field-severitynumber)
- Constraints
- REQUIRED
- if present, MUST NOT be negative
# References
- [Mapping of SeverityNumber](https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/logs/data-model.md#mapping-of-severitynumber)
- [Reverse Mapping](https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/logs/data-model.md#reverse-mapping)
- [Error Semantics](https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/logs/data-model.md#error-semantics)
- [Displaying Severity](https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/logs/data-model.md#displaying-severity)
- [Comparing Severity](https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/logs/data-model.md#comparing-severity)
- [Mapping of existing log formats to severity levels](https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/logs/data-model.md#appendix-a-example-mappings)

View File

@ -0,0 +1,187 @@
# Avro Event Format for CloudEvents - Version 1.0.3-wip
## Abstract
The Avro Format for CloudEvents defines how events are expressed in
the [Avro 1.9.0 Specification][avro-spec].
## Table of Contents
1. [Introduction](#1-introduction)
2. [Attributes](#2-attributes)
3. [Data](#3-data)
4. [Transport](#4-transport)
4. [Examples](#5-examples)
## 1. Introduction
[CloudEvents][ce] is a standardized and protocol-agnostic definition of the
structure and metadata description of events. This specification defines how the
CloudEvents are to be represented as [Avro 1.9.0][avro-primitives].
The [Attributes](#2-attributes) section describes the naming conventions and
data type mappings for CloudEvents attributes for use as Avro message
properties.
This specification does not define an envelope format. The Avro type system's
intent is primarily to provide a consistent type system for Avro itself and not
for message payloads.
The Avro event format does not currently define a batch mode format.
### 1.1. Conformance
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD",
"SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be
interpreted as described in [RFC2119][rfc2119].
## 2. Attributes
This section defines how CloudEvents attributes are mapped to the Avro
type-system. This specification explicitly maps each attribute.
### 2.1 Type System Mapping
The CloudEvents type system MUST be mapped to Avro types as follows.
| CloudEvents | Avro |
|---------------|------------------------------------------------------------------------|
| Boolean | [boolean][avro-primitives] |
| Integer | [int][avro-primitives] |
| String | [string][avro-primitives] |
| Binary | [bytes][avro-primitives] |
| URI | [string][avro-primitives] following [RFC 3986 §4.3][rfc3986-section43] |
| URI-reference | [string][avro-primitives] following [RFC 3986 §4.1][rfc3986-section41] |
| Timestamp | [string][avro-primitives] following [RFC 3339][rfc3339] (ISO 8601) |
Extension specifications MAY define secondary mapping rules for the values of
attributes they define, but MUST also include the previously defined primary
mapping.
### 2.3 OPTIONAL Attributes
CloudEvents Spec defines OPTIONAL attributes. The Avro format defines that these
fields MUST use the `null` type and the actual type through the
[union][avro-unions].
Example:
```json
["null", "string"]
```
### 2.4 Definition
Users of Avro MUST use a message whose binary encoding is identical to the one
described by the [CloudEvent Avro Schema](cloudevents.avsc):
```json
{
"namespace": "io.cloudevents",
"type": "record",
"name": "CloudEvent",
"version": "1.0",
"doc": "Avro Event Format for CloudEvents",
"fields": [
{
"name": "attribute",
"type": {
"type": "map",
"values": ["null", "boolean", "int", "string", "bytes"]
}
},
{
"name": "data",
"type": [
"bytes",
"null",
"boolean",
{
"type": "map",
"values": [
"null",
"boolean",
{
"type": "record",
"name": "CloudEventData",
"doc": "Representation of a JSON Value",
"fields": [
{
"name": "value",
"type": {
"type": "map",
"values": [
"null",
"boolean",
{ "type": "map", "values": "CloudEventData" },
{ "type": "array", "items": "CloudEventData" },
"double",
"string"
]
}
}
]
},
"double",
"string"
]
},
{ "type": "array", "items": "CloudEventData" },
"double",
"string"
]
}
]
}
```
## 3 Data
Before encoding, the AVRO serializer MUST first determine the runtime data type
of the content. This can be determined by examining the data for invalid UTF-8
sequences or by consulting the `datacontenttype` attribute.
If the implementation determines that the type of the data is binary, the value
MUST be stored in the `data` field using the `bytes` type.
For other types (non-binary data without a `datacontenttype` attribute), the
implementation MUST translate the data value into a representation of the JSON
value using the union types described for the `data` record.
## 4 Transport
Transports that support content identification MUST use the following designation:
```text
application/cloudevents+avro
```
## 5 Examples
The following table shows exemplary mappings:
| CloudEvents | Type | Exemplary Avro Value |
|-----------------|--------|-------------------------------------------|
| id | string | `7a0dc520-c870-4193c8` |
| source | string | `https://github.com/cloudevents` |
| specversion | string | `1.0` |
| type | string | `com.example.object.deleted.v2` |
| datacontenttype | string | `application/octet-stream` |
| dataschema | string | `http://registry.com/schema/v1/much.json` |
| subject | string | `mynewfile.jpg` |
| time | string | `2019-06-05T23:45:00Z` |
| data | bytes | `[bytes]` |
## References
- [Avro 1.9.0][avro-spec] Apache Avro™ 1.9.0 Specification
[avro-spec]: http://avro.apache.org/docs/1.9.0/spec.html
[avro-primitives]: http://avro.apache.org/docs/1.9.0/spec.html#schema_primitive
[avro-logical-types]: http://avro.apache.org/docs/1.9.0/spec.html#Logical+Types
[avro-unions]: http://avro.apache.org/docs/1.9.0/spec.html#Unions
[ce]: ../spec.md
[rfc2119]: https://tools.ietf.org/html/rfc2119
[rfc3986-section41]: https://tools.ietf.org/html/rfc3986#section-4.1
[rfc3986-section43]: https://tools.ietf.org/html/rfc3986#section-4.3
[rfc3339]: https://tools.ietf.org/html/rfc3339

View File

@ -0,0 +1,64 @@
{
"namespace":"io.cloudevents",
"type":"record",
"name":"AvroCloudEvent",
"version":"1.0",
"doc":"Avro Event Format for CloudEvents",
"fields":[
{
"name":"attribute",
"type":{
"type":"map",
"values":[
"null",
"boolean",
"int",
"string",
"bytes"
]
}
},
{
"name": "data",
"type": [
"bytes",
"null",
"boolean",
{
"type": "map",
"values": [
"null",
"boolean",
{
"type": "record",
"name": "AvroCloudEventData",
"doc": "Representation of a JSON Value",
"fields": [
{
"name": "value",
"type": {
"type": "map",
"values": [
"null",
"boolean",
{ "type": "map", "values": "AvroCloudEventData" },
{ "type": "array", "items": "AvroCloudEventData" },
"double",
"string"
]
}
}
]
},
"double",
"string"
]
},
{ "type": "array", "items": "AvroCloudEventData" },
"double",
"string"
]
}
]
}

View File

@ -0,0 +1,128 @@
{
"$schema": "http://json-schema.org/draft-07/schema#",
"description": "CloudEvents Specification JSON Schema",
"type": "object",
"properties": {
"id": {
"description": "Identifies the event.",
"$ref": "#/definitions/iddef",
"examples": [
"A234-1234-1234"
]
},
"source": {
"description": "Identifies the context in which an event happened.",
"$ref": "#/definitions/sourcedef",
"examples" : [
"https://github.com/cloudevents",
"mailto:cncf-wg-serverless@lists.cncf.io",
"urn:uuid:6e8bc430-9c3a-11d9-9669-0800200c9a66",
"cloudevents/spec/pull/123",
"/sensors/tn-1234567/alerts",
"1-555-123-4567"
]
},
"specversion": {
"description": "The version of the CloudEvents specification which the event uses.",
"$ref": "#/definitions/specversiondef",
"examples": [
"1.0"
]
},
"type": {
"description": "Describes the type of event related to the originating occurrence.",
"$ref": "#/definitions/typedef",
"examples" : [
"com.github.pull_request.opened",
"com.example.object.deleted.v2"
]
},
"datacontenttype": {
"description": "Content type of the data value. Must adhere to RFC 2046 format.",
"$ref": "#/definitions/datacontenttypedef",
"examples": [
"text/xml",
"application/json",
"image/png",
"multipart/form-data"
]
},
"dataschema": {
"description": "Identifies the schema that data adheres to.",
"$ref": "#/definitions/dataschemadef"
},
"subject": {
"description": "Describes the subject of the event in the context of the event producer (identified by source).",
"$ref": "#/definitions/subjectdef",
"examples": [
"mynewfile.jpg"
]
},
"time": {
"description": "Timestamp of when the occurrence happened. Must adhere to RFC 3339.",
"$ref": "#/definitions/timedef",
"examples": [
"2018-04-05T17:31:00Z"
]
},
"data": {
"description": "The event payload.",
"$ref": "#/definitions/datadef",
"examples": [
"<much wow=\"xml\"/>"
]
},
"data_base64": {
"description": "Base64 encoded event payload. Must adhere to RFC4648.",
"$ref": "#/definitions/data_base64def",
"examples": [
"Zm9vYg=="
]
}
},
"required": ["id", "source", "specversion", "type"],
"definitions": {
"iddef": {
"type": "string",
"minLength": 1
},
"sourcedef": {
"type": "string",
"format": "uri-reference",
"minLength": 1
},
"specversiondef": {
"type": "string",
"minLength": 1
},
"typedef": {
"type": "string",
"minLength": 1
},
"datacontenttypedef": {
"type": ["string", "null"],
"minLength": 1
},
"dataschemadef": {
"type": ["string", "null"],
"format": "uri",
"minLength": 1
},
"subjectdef": {
"type": ["string", "null"],
"minLength": 1
},
"timedef": {
"type": ["string", "null"],
"format": "date-time",
"minLength": 1
},
"datadef": {
"type": ["object", "string", "number", "array", "boolean", "null"]
},
"data_base64def": {
"type": ["string", "null"],
"contentEncoding": "base64"
}
}
}

View File

@ -0,0 +1,69 @@
/**
* CloudEvent Protobuf Format
*
* - Required context attributes are explicitly represented.
* - Optional and Extension context attributes are carried in a map structure.
* - Data may be represented as binary, text, or protobuf messages.
*/
syntax = "proto3";
package io.cloudevents.v1;
import "google/protobuf/any.proto";
import "google/protobuf/timestamp.proto";
option csharp_namespace = "CloudNative.CloudEvents.V1";
option go_package = "cloudevents.io/genproto/v1";
option java_package = "io.cloudevents.v1.proto";
option java_multiple_files = true;
option php_namespace = "Io\\CloudEvents\\V1\\Proto";
option ruby_package = "Io::CloudEvents::V1::Proto";
message CloudEvent {
// -- CloudEvent Context Attributes
// Required Attributes
string id = 1;
string source = 2; // URI-reference
string spec_version = 3;
string type = 4;
// Optional & Extension Attributes
map<string, CloudEventAttributeValue> attributes = 5;
// -- CloudEvent Data (Bytes, Text, or Proto)
oneof data {
bytes binary_data = 6;
string text_data = 7;
google.protobuf.Any proto_data = 8;
}
/**
* The CloudEvent specification defines
* seven attribute value types...
*/
message CloudEventAttributeValue {
oneof attr {
bool ce_boolean = 1;
int32 ce_integer = 2;
string ce_string = 3;
bytes ce_bytes = 4;
string ce_uri = 5;
string ce_uri_ref = 6;
google.protobuf.Timestamp ce_timestamp = 7;
}
}
}
/**
* CloudEvent Protobuf Batch Format
*
*/
message CloudEventBatch {
repeated CloudEvent events = 1;
}

View File

@ -0,0 +1,517 @@
# JSON Event Format for CloudEvents - Version 1.0.3-wip
## Abstract
The JSON Format for CloudEvents defines how events are expressed in JavaScript
Object Notation (JSON) Data Interchange Format ([RFC8259][rfc8259]).
## Table of Contents
1. [Introduction](#1-introduction)
2. [Attributes](#2-attributes)
3. [Envelope](#3-envelope)
4. [JSON Batch Format](#4-json-batch-format)
5. [References](#5-references)
## 1. Introduction
[CloudEvents][ce] is a standardized and protocol-agnostic definition of the
structure and metadata description of events. This specification defines how the
elements defined in the CloudEvents specification are to be represented in the
JavaScript Object Notation (JSON) Data Interchange Format ([RFC8259][rfc8259]).
The [Attributes](#2-attributes) section describes the naming conventions and
data type mappings for CloudEvents attributes.
The [Envelope](#3-envelope) section defines a JSON container for CloudEvents
attributes and an associated media type.
### 1.1. Conformance
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD",
"SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be
interpreted as described in [RFC2119][rfc2119].
## 2. Attributes
This section defines how CloudEvents attributes are mapped to JSON. This
specification does not explicitly map each attribute, but provides a generic
mapping model that applies to all current and future CloudEvents attributes,
including extensions.
For clarity, extension attributes are serialized using the same rules as
core attributes. This includes their syntax and placement
within the JSON object. In particular, extensions are placed as top-level JSON
properties. Extensions MUST be serialized as a top-level JSON property. There
were many reasons for this design decision and they are covered in more detail
in the [Primer](../primer.md#json-extensions).
### 2.1. Base Type System
The core [CloudEvents specification][ce] defines a minimal abstract type system,
which this mapping leans on.
### 2.2. Type System Mapping
The [CloudEvents type system][ce-types] MUST be mapped to JSON types as follows,
with exceptions noted below.
| CloudEvents | JSON |
| ------------- | -------------------------------------------------------------- |
| Boolean | [boolean][json-bool] |
| Integer | [number][json-number], only the integer component optionally prefixed with a minus sign is permitted |
| String | [string][json-string] |
| Binary | [string][json-string], [Base64-encoded][base64] binary |
| URI | [string][json-string] following [RFC 3986][rfc3986] |
| URI-reference | [string][json-string] following [RFC 3986][rfc3986] |
| Timestamp | [string][json-string] following [RFC 3339][rfc3339] (ISO 8601) |
Unset attributes MAY be encoded to the JSON value of `null`. When decoding
attributes and a `null` value is encountered, it MUST be treated as the
equivalent of unset or omitted.
Extension specifications MAY define secondary mapping rules for the values of
attributes they define, but MUST also include the previously defined primary
mapping.
For instance, the attribute value might be a data structure defined in a
standard outside of CloudEvents, with a formal JSON mapping, and there might be
risk of translation errors or information loss when the original format is not
preserved.
An extension specification that defines a secondary mapping rule for JSON, and
any revision of such a specification, MUST also define explicit mapping rules
for all other event formats that are part of the CloudEvents core at the time of
the submission or revision.
If necessary, the CloudEvents type can be determined by inference using the rules
from the mapping table, whereby the only potentially ambiguous JSON data type is
`string`. The value is compatible with the respective CloudEvents type when the
mapping rules are fulfilled.
### 2.3. Examples
The following table shows exemplary attribute mappings:
| CloudEvents | Type | Exemplary JSON Value |
| --------------- | ---------------- | ----------------------- |
| type | String | "com.example.someevent" |
| specversion | String | "1.0" |
| source | URI-reference | "/mycontext" |
| subject | String | "larger-context" |
| subject | String (null) | null |
| id | String | "1234-1234-1234" |
| time | Timestamp | "2018-04-05T17:31:00Z" |
| time | Timestamp (null) | null |
| datacontenttype | String | "application/json" |
### 2.4. JSONSchema Validation
The CloudEvents [JSONSchema](http://json-schema.org) for the spec is located
[here](cloudevents.json) and contains the definitions for validating events in
JSON.
## 3. Envelope
Each CloudEvents event can be wholly represented as a JSON object.
Such a representation MUST use the media type `application/cloudevents+json`.
All REQUIRED and all not omitted OPTIONAL attributes in the given event MUST
become members of the JSON object, with the respective JSON object member name
matching the attribute name, and the member's type and value being mapped using
the [type system mapping](#22-type-system-mapping).
OPTIONAL not omitted attributes MAY be represented as a `null` JSON value.
### 3.1. Handling of "data"
The JSON representation of the event "data" payload is determined by the runtime
type of the `data` content and the value of the [`datacontenttype`
attribute][datacontenttype].
#### 3.1.1. Payload Serialization
Before taking action, a JSON serializer MUST first determine the runtime data
type of the `data` content.
If the implementation determines that the type of data is `Binary`, the value
MUST be represented as a [JSON string][json-string] expression containing the
[Base64][base64] encoded binary value, and use the member name `data_base64` to
store it inside the JSON representation. If present, the `datacontenttype` MUST
reflect the format of the original binary data. If a `datacontenttype` value is
not provided, no assumptions can be made as to the format of the data and
therefore the `datacontenttype` attribute MUST NOT be present in the resulting
CloudEvent.
Note: Definition of `data_base64` is a JSON-specific marshaling rule and not
part of the formal CloudEvents context attributes definition. This means the
rules governing CloudEvent attributes names do not apply to this JSON member.
If the type of data is not `Binary`, the implementation will next determine
whether the value of the `datacontenttype` attribute declares the `data` to
contain JSON-formatted content. Such a content type is defined as one having a
[media subtype][rfc2045-sec5] equal to `json` or ending with a `+json` format
extension. That is, a `datacontenttype` declares JSON-formatted content if its
media type, when stripped of parameters, has the form `*/json` or `*/*+json`.
If the `datacontenttype` is unspecified, processing SHOULD proceed as if the
`datacontenttype` had been specified explicitly as `application/json`.
If the `datacontenttype` declares the data to contain JSON-formatted content, a
JSON serializer MUST translate the data value to a [JSON value][json-value], and
use the member name `data` to store it inside the JSON representation. The data
value MUST be stored directly as a JSON value, rather than as an encoded JSON
document represented as a string. An implementation MAY fail to serialize the
event if it is unable to translate the runtime value to a JSON value.
Otherwise, if the `datacontenttype` does not declare JSON-formatted data
content, a JSON serializer MUST store a string representation of the data value,
properly encoded according to the `datacontenttype`, in the `data` member of the
JSON representation. An implementation MAY fail to serialize the event if it is
unable to represent the runtime value as a properly encoded string.
Out of this follows that the presence of the `data` and `data_base64` members is
mutually exclusive in a JSON serialized CloudEvent.
Furthermore, unlike attributes, for which value types are restricted by the
[type-system mapping](#22-type-system-mapping), the `data` member
[JSON value][json-value] is unrestricted, and MAY contain any valid JSON if the
`datacontenttype` declares the data to be JSON-formatted. In particular, the
`data` member MAY have a value of `null`, representing an explicit `null`
payload as distinct from the absence of the `data` member.
#### 3.1.2. Payload Deserialization
When a CloudEvents is deserialized from JSON, the presence of the `data_base64`
member clearly indicates that the value is a Base64 encoded binary data, which
the deserializer MUST decode into a binary runtime data type. The deserializer
MAY further interpret this binary data according to the `datacontenttype`. If
the `datacontenttype` attribute is absent, the decoding MUST NOT make an
assumption of JSON-formatted data (as described below for the `data` member).
When a `data` member is present, the decoding behavior is dependent on the value
of the `datacontenttype` attribute. If the `datacontenttype` declares the `data`
to contain JSON-formatted content (that is, its subtype is `json` or has a
`+json` format extension), then the `data` member MUST be treated directly as a
[JSON value][json-value] and decoded using an appropriate JSON type mapping for
the runtime. Note: if the `data` member is a string, a JSON deserializer MUST
interpret it directly as a [JSON String][json-string] value; it MUST NOT further
deserialize the string as a JSON document.
If the `datacontenttype` does not declare JSON-formatted data content, then the
`data` member SHOULD be treated as an encoded content string. An implementation
MAY fail to deserialize the event if the `data` member is not a string, or if it
is unable to interpret the `data` with the `datacontenttype`.
When a `data` member is present, if the `datacontenttype` attribute is absent, a
JSON deserializer SHOULD proceed as if it were set to `application/json`, which
declares the data to contain JSON-formatted content. Thus, it SHOULD treat the
`data` member directly as a [JSON value][json-value] as specified above.
Furthermore, if a JSON-formatted event with no `datacontenttype` attribute, is
deserialized and then re-serialized using a different format or protocol
binding, the `datacontenttype` in the re-serialized event SHOULD be set
explicitly to the implied `application/json` content type to preserve the
semantics of the event.
### 3.2. Examples
Example event with `Binary`-valued data:
```JSON
{
"specversion" : "1.0",
"type" : "com.example.someevent",
"source" : "/mycontext",
"id" : "A234-1234-1234",
"time" : "2018-04-05T17:31:00Z",
"comexampleextension1" : "value",
"comexampleothervalue" : 5,
"datacontenttype" : "application/vnd.apache.thrift.binary",
"data_base64" : "... base64 encoded string ..."
}
```
The above example re-encoded using [HTTP Binary Content Mode][http-binary]:
```
ce-specversion: 1.0
ce-type: com.example.someevent
ce-source: /mycontext
ce-id: A234-1234-1234
ce-time: 2018-04-05T17:31:00Z
ce-comexampleextension1: value
ce-comexampleothervalue: 5
content-type: application/vnd.apache.thrift.binary
...raw binary bytes...
```
Example event with a serialized XML document as the `String` (i.e. non-`Binary`)
valued `data`, and an XML (i.e. non-JSON-formatted) content type:
```JSON
{
"specversion" : "1.0",
"type" : "com.example.someevent",
"source" : "/mycontext",
"id" : "B234-1234-1234",
"time" : "2018-04-05T17:31:00Z",
"comexampleextension1" : "value",
"comexampleothervalue" : 5,
"unsetextension": null,
"datacontenttype" : "application/xml",
"data" : "<much wow=\"xml\"/>"
}
```
The above example re-encoded using [HTTP Binary Content Mode][http-binary]:
```
ce-specversion: 1.0
ce-type: com.example.someevent
ce-source: /mycontext
ce-id: B234-1234-1234
ce-time: 2018-04-05T17:31:00Z
ce-comexampleextension1: value
ce-comexampleothervalue: 5
content-type: application/xml
<much wow="xml"/>
```
Example event with [JSON Object][json-object]-valued `data` and a content type
declaring JSON-formatted data:
```JSON
{
"specversion" : "1.0",
"type" : "com.example.someevent",
"source" : "/mycontext",
"subject": null,
"id" : "C234-1234-1234",
"time" : "2018-04-05T17:31:00Z",
"comexampleextension1" : "value",
"comexampleothervalue" : 5,
"datacontenttype" : "application/json",
"data" : {
"appinfoA" : "abc",
"appinfoB" : 123,
"appinfoC" : true
}
}
```
The above example re-encoded using [HTTP Binary Content Mode][http-binary]:
```
ce-specversion: 1.0
ce-type: com.example.someevent
ce-source: /mycontext
ce-id: C234-1234-1234
ce-time: 2018-04-05T17:31:00Z
ce-comexampleextension1: value
ce-comexampleothervalue: 5
content-type: application/json
{
"appinfoA" : "abc",
"appinfoB" : 123,
"appinfoC" : true
}
```
Example event with [JSON Number][json-number]-valued `data` and a content type
declaring JSON-formatted data:
```JSON
{
"specversion" : "1.0",
"type" : "com.example.someevent",
"source" : "/mycontext",
"subject": null,
"id" : "C234-1234-1234",
"time" : "2018-04-05T17:31:00Z",
"comexampleextension1" : "value",
"comexampleothervalue" : 5,
"datacontenttype" : "application/json",
"data" : 1.5
}
```
The above example re-encoded using [HTTP Binary Content Mode][http-binary]:
```
ce-specversion: 1.0
ce-type: com.example.someevent
ce-source: /mycontext
ce-id: C234-1234-1234
ce-time: 2018-04-05T17:31:00Z
ce-comexampleextension1: value
ce-comexampleothervalue: 5
content-type: application/json
1.5
```
Example event with a literal JSON string as the non-`Binary`-valued `data` and
no `datacontenttype`. The data is implicitly treated as if the `datacontenttype`
were set to `application/json`:
```JSON
{
"specversion" : "1.0",
"type" : "com.example.someevent",
"source" : "/mycontext",
"subject": null,
"id" : "D234-1234-1234",
"time" : "2018-04-05T17:31:00Z",
"comexampleextension1" : "value",
"comexampleothervalue" : 5,
"data" : "I'm just a string"
}
```
The above example re-encoded using [HTTP Binary Content Mode][http-binary].
Note that the Content Type is explicitly set to the `application/json` value
that was implicit in JSON format. Note also that the content is quoted to
indicate that it is a literal JSON string. If the quotes were missing, this
would have been an invalid event because the content could not be decoded as
`application/json`:
```
ce-specversion: 1.0
ce-type: com.example.someevent
ce-source: /mycontext
ce-id: D234-1234-1234
ce-time: 2018-04-05T17:31:00Z
ce-comexampleextension1: value
ce-comexampleothervalue: 5
content-type: application/json
"I'm just a string"
```
Example event with a `Binary`-valued `data_base64` but no `datacontenttype`.
Even though the data happens to be a valid JSON document when interpreted as
text, no content type is inferred.
```JSON
{
"specversion" : "1.0",
"type" : "com.example.someevent",
"source" : "/mycontext",
"id" : "D234-1234-1234",
"data_base64" : "eyAieHl6IjogMTIzIH0="
}
```
The above example re-encoded using [HTTP Binary Content Mode][http-binary].
Note that there is no `content-type` header present.
```
ce-specversion: 1.0
ce-type: com.example.someevent
ce-source: /mycontext
ce-id: D234-1234-1234
{ "xyz": 123 }
```
## 4. JSON Batch Format
In the _JSON Batch Format_ several CloudEvents are batched into a single JSON
document. The document is a JSON array filled with CloudEvents in the [JSON
Event format][json-format].
### 4.1. Mapping CloudEvents
This section defines how a batch of CloudEvents is mapped to JSON.
The outermost JSON element is a [JSON Array][json-array], which contains as
elements CloudEvents rendered in accordance with the [JSON event
format][json-format] specification.
### 4.2. Envelope
A JSON Batch of CloudEvents MUST use the media type
`application/cloudevents-batch+json`.
### 4.3. Examples
An example containing two CloudEvents: The first with `Binary`-valued data, the
second with JSON data.
```JSON
[
{
"specversion" : "1.0",
"type" : "com.example.someevent",
"source" : "/mycontext/4",
"id" : "B234-1234-1234",
"time" : "2018-04-05T17:31:00Z",
"comexampleextension1" : "value",
"comexampleothervalue" : 5,
"datacontenttype" : "application/vnd.apache.thrift.binary",
"data_base64" : "... base64 encoded string ..."
},
{
"specversion" : "1.0",
"type" : "com.example.someotherevent",
"source" : "/mycontext/9",
"id" : "C234-1234-1234",
"time" : "2018-04-05T17:31:05Z",
"comexampleextension1" : "value",
"comexampleothervalue" : 5,
"datacontenttype" : "application/json",
"data" : {
"appinfoA" : "abc",
"appinfoB" : 123,
"appinfoC" : true
}
}
]
```
An example of an empty batch of CloudEvents (typically used in a response, but
also valid in a request):
```JSON
[]
```
## 5. References
- [RFC2046][rfc2046] Multipurpose Internet Mail Extensions (MIME) Part Two:
Media Types
- [RFC2119][rfc2119] Key words for use in RFCs to Indicate Requirement Levels
- [RFC4627][rfc4627] The application/json Media Type for JavaScript Object
Notation (JSON)
- [RFC4648][rfc4648] The Base16, Base32, and Base64 Data Encodings
- [RFC6839][rfc6839] Additional Media Type Structured Syntax Suffixes
- [RFC8259][rfc8259] The JavaScript Object Notation (JSON) Data Interchange
Format
[base64]: https://tools.ietf.org/html/rfc4648#section-4
[ce]: ../spec.md
[ce-types]: ../spec.md#type-system
[content-type]: https://tools.ietf.org/html/rfc7231#section-3.1.1.5
[datacontenttype]: ../spec.md#datacontenttype
[http-binary]: ../bindings/http-protocol-binding.md#31-binary-content-mode
[json-format]: ../formats/json-format.md
[json-geoseq]:https://www.iana.org/assignments/media-types/application/geo+json-seq
[json-object]: https://tools.ietf.org/html/rfc7159#section-4
[json-seq]: https://www.iana.org/assignments/media-types/application/json-seq
[json-bool]: https://tools.ietf.org/html/rfc7159#section-3
[json-number]: https://tools.ietf.org/html/rfc7159#section-6
[json-string]: https://tools.ietf.org/html/rfc7159#section-7
[json-value]: https://tools.ietf.org/html/rfc7159#section-3
[json-array]: https://tools.ietf.org/html/rfc7159#section-5
[rfc2045-sec5]: https://tools.ietf.org/html/rfc2045#section-5
[rfc2046]: https://tools.ietf.org/html/rfc2046
[rfc2119]: https://tools.ietf.org/html/rfc2119
[rfc3986]: https://tools.ietf.org/html/rfc3986
[rfc4627]: https://tools.ietf.org/html/rfc4627
[rfc4648]: https://tools.ietf.org/html/rfc4648
[rfc6839]: https://tools.ietf.org/html/rfc6839#section-3.1
[rfc8259]: https://tools.ietf.org/html/rfc8259
[rfc3339]: https://www.ietf.org/rfc/rfc3339.txt

View File

@ -0,0 +1,247 @@
# Protobuf Event Format for CloudEvents - Version 1.0.3-wip
## Abstract
[Protocol Buffers][proto-home] is a mechanism for marshalling structured data,
this document defines how CloudEvents are represented using [version 3][proto-3]
of that specification.
In this document the terms *Protocol Buffers*, *protobuf*, and *proto* are used
interchangeably.
## Table of Contents
1. [Introduction](#1-introduction)
2. [Attributes](#2-attributes)
3. [Data](#3-data)
4. [Transport](#4-transport)
5. [Batch Format](#5-batch-format)
6. [Examples](#6-examples)
## 1. Introduction
[CloudEvents][ce] is a standardized and protocol-agnostic definition of the
structure and metadata description of events. This specification defines how the
elements defined in the CloudEvents specification are represented using
a protobuf schema.
The [Attributes](#2-attributes) section describes the naming conventions and
data type mappings for CloudEvent attributes for use as protobuf message
properties.
The [Data](#3-data) section describes how the event payload is carried.
### 1.1. Conformance
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD",
"SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be
interpreted as described in [RFC2119][rfc2119].
### 1.2 Content-Type
There is no official IANA *media-type* designation for protobuf, as such this
specification uses 'application/protobuf' to identify such content.
## 2. Attributes
This section defines how CloudEvents attributes are represented in the protobuf
[schema][proto-schema].
## 2.1 Type System
The CloudEvents type system is mapped to protobuf as follows :
| CloudEvents | protobuf |
| ------------- | ---------------------------------------------------------------------- |
| Boolean | [boolean][proto-scalars] |
| Integer | [int32][proto-scalars] |
| String | [string][proto-scalars] |
| Binary | [bytes][proto-scalars] |
| URI | [string][proto-scalars] following [RFC 3986 §4.3][rfc3986-section43]|
| URI-reference | [string][proto-scalars] following [RFC 3986 §4.1][rfc3986-section41] |
| Timestamp | [Timestamp][proto-timestamp] |
## 2.3 REQUIRED Attributes
REQUIRED attributes are represented explicitly as protobuf fields.
## 2.4 OPTIONAL Attributes & Extensions
OPTIONAL and extension attributes are represented using a map construct enabling
direct support of the CloudEvent [type system][ce-types].
```proto
map<string, CloudEventAttributeValue> attributes = 1;
message CloudEventAttributeValue {
oneof attr {
bool ce_boolean = 1;
int32 ce_integer = 2;
string ce_string = 3;
bytes ce_binary = 4;
string ce_uri = 5;
string ce_uri_reference = 6;
google.protobuf.Timestamp ce_timestamp = 7;
}
}
```
In this model an attribute's name is used as the map *key* and is
associated with its *value* stored in the appropriately typed property.
This approach allows attributes to be represented and transported
with no loss of *type* information.
## 3. Data
The specification allows for data payloads of the following types to be explicitly represented:
* string
* bytes
* protobuf object/message
```proto
oneof data {
// Binary data
bytes binary_data = 2;
// String data
string text_data = 3;
// Protobuf Message data
google.protobuf.Any proto_data = 4;
}
```
* Where the data is a protobuf message it MUST be stored in the `proto_data` property.
* `datacontenttype` MAY be populated with `application/protobuf`
* `dataschema` SHOULD be populated with the type URL of the protobuf data message.
* When the type of the data is text, the value MUST be stored in the `text_data` property.
* `datacontenttype` SHOULD be populated with the appropriate media-type.
* When the type of the data is binary the value MUST be stored in the `binary_data` property.
* `datacontenttype` SHOULD be populated with the appropriate media-type.
## 4. Transport
Transports that support content identification MUST use the following designation:
```text
application/cloudevents+protobuf
```
## 5. Batch Format
In the _Protobuf Batch Format_ several CloudEvents are batched into a single Protobuf
message. The message contains a repeated field filled with independent CloudEvent messages
in the structured mode Protobuf event format.
### 5.1 Envelope
The enveloping container is a _CloudEventBatch_ protobuf message containing a
repeating set of _CloudEvent_ message(s):
```proto
message CloudEventBatch {
repeated CloudEvent events = 1;
}
```
### 5.2 Batch Media Type
A compliant protobuf batch representation is identifed using the following media-type
```text
application/cloudevents-batch+protobuf
```
## 6. Examples
The following code-snippets show how proto representations might be constructed
assuming the availability of some convenience methods.
### 6.1 Plain Text event data
```java
public static CloudEvent plainTextExample() {
CloudEvent.Builder ceBuilder = CloudEvent.newBuilder();
ceBuilder
//-- REQUIRED Attributes.
.setId(UUID.randomUUID().toString())
.setSpecVersion("1.0")
.setType("io.cloudevent.example")
.setSource("producer-1")
//-- Data.
.setTextData("This is a plain text message");
//-- OPTIONAL Attributes
withCurrentTime(ceBuilder, "time");
withAttribute(ceBuilder, "datacontenttype", "text/plain");
// Build it.
return ceBuilder.build();
}
```
### 6.2 Proto message as event data
Where the event data payload is itself a protobuf message (with its own schema)
a protocol buffer idiomatic method can be used to carry the data.
```java
private static Spec.CloudEvent protoExample() {
//-- Build an event data protobuf object.
Test.SomeData.Builder dataBuilder = Test.SomeData.newBuilder();
dataBuilder
.setSomeText("this is an important message")
.setIsImportant(true);
//-- Build the CloudEvent.
CloudEvent.Builder ceBuilder = Spec.CloudEvent.newBuilder();
ceBuilder
.setId(UUID.randomUUID().toString())
.setSpecVersion("1.0")
.setType("io.cloudevent.example")
.setSource("producer-2")
// Add the proto data into the CloudEvent envelope.
.setProtoData(Any.pack(dataBuilder.build()));
// Add the protto type URL
withAttribute(ceBuilder, "dataschema", ceBuilder.getProtoData().getTypeUrl());
// Set Content-Type (OPTIONAL)
withAttribute(ceBuilder, "datacontenttype", "application/protobuf");
//-- Done.
return ceBuilder.build();
}
```
## References
* [Protocol Buffer 3 Specification][proto-3]
* [CloudEvents Protocol Buffers format schema][proto-schema]
[proto-3]: https://developers.google.com/protocol-buffers/docs/reference/proto3-spec
[proto-home]: https://developers.google.com/protocol-buffers
[proto-scalars]: https://developers.google.com/protocol-buffers/docs/proto3#scalar
[proto-wellknown]: https://developers.google.com/protocol-buffers/docs/reference/google.protobuf
[proto-timestamp]: https://developers.google.com/protocol-buffers/docs/reference/google.protobuf#google.protobuf.Timestamp
[proto-schema]: ./cloudevents.proto
[ce]: ../spec.md
[ce-types]: ../spec.md#type-system
[rfc2119]: https://tools.ietf.org/html/rfc2119
[rfc3986-section41]: https://tools.ietf.org/html/rfc3986#section-4.1
[rfc3986-section43]: https://tools.ietf.org/html/rfc3986#section-4.3
[rfc3339]: https://tools.ietf.org/html/rfc3339

380
cloudevents/http-webhook.md Normal file
View File

@ -0,0 +1,380 @@
# HTTP 1.1 Web Hooks for Event Delivery - Version 1.0.3-wip
## Abstract
"Webhooks" are a popular pattern to deliver notifications between applications
and via HTTP endpoints. In spite of pattern usage being widespread, there is no
formal definition for Web Hooks. This specification aims to provide such a
definition for use with [CNCF CloudEvents][ce], but is considered generally
usable beyond the scope of CloudEvents.
## Table of Contents
1. [Introduction](#1-introduction)
- 1.1. [Conformance](#11-conformance)
- 1.2. [Relation to HTTP](#12-relation-to-http)
2. [Delivering notifications](#2-delivering-notifications)
3. [Authorization](#3-authorization)
4. [Abuse Protection](#4-abuse-protection)
5. [References](#5-references)
## 1. Introduction
["Webhooks"][webhooks] are a popular pattern to deliver notifications between
applications and via HTTP endpoints. Applications that make notifications
available, allow for other applications to register an HTTP endpoint to which
notifications are delivered.
This specification defines a HTTP method by how notifications are delivered by
the sender, an authorization model for event delivery to protect the delivery
target, and a registration handshake that protects the sender from being abused
for flooding arbitrary HTTP sites with requests.
### 1.1. Conformance
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD",
"SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be
interpreted as described in [RFC2119][rfc2119].
### 1.2. Relation to HTTP
This specification prescribes rules constraining the use and handling of
specific [HTTP methods][rfc7231-section-4] and headers.
This specification also applies equivalently to HTTP/2 ([RFC7540][rfc7540]),
which is compatible with HTTP 1.1 semantics.
## 2. Delivering notifications
### 2.1. Delivery request
Notifications are delivered using a HTTP request. The response indicates the
resulting status of the delivery.
HTTP-over-TLS (HTTPS) [RFC2818][rfc2818] MUST be used for the connection.
The HTTP method for the delivery request MUST be [POST][post].
The [`Content-Type`][content-type] header MUST be carried and the request MUST
carry a notification payload of the given content type. Requests without
payloads, e.g. where the notification is entirely expressed in HTTP headers, are
not permitted by this specification.
This specification does not further constrain the content of the notification,
and it also does not prescribe the [HTTP target resource][rfc7230-section-5-1]
that is used for delivery.
If the delivery target supports and requires [Abuse
Protection](#4-abuse-protection), the delivery request MUST include the
`WebHook-Request-Origin` header. The `WebHook-Request-Origin` header value is a
DNS name expression that identifies the sending system.
### 2.2. Delivery response
The delivery response MAY contain a payload providing detail status information
in the case of handling errors. This specification does not attempt to define
such a payload.
The response MUST NOT use any of the [3xx HTTP Redirect status codes][3xx] and
the client MUST NOT follow any such redirection.
If the delivery has been accepted and processed, and if the response carries a
payload with processing details, the response MUST have the [200 OK][200] or
[201 Created][201] status code. In this case, the response MUST carry a
[`Content-Type`][content-type] header.
If the delivery has been accepted and processed, but carries no payload, the
response MUST have the [201 Created][201] or [204 No Content][204] status code.
If the delivery has been accepted, but has not yet been processed or if the
processing status is unknown, the response MUST have the [202 Accepted][202]
status code.
If a delivery target has been retired, but the HTTP site still exists, the site
SHOULD return a [410 Gone][410] status code and the sender SHOULD refrain from
sending any further notifications.
If the delivery target is unable to process the request due to exceeding a
request rate limit, it SHOULD return a [429 Too Many Requests][429] status code
and MUST include the [`Retry-After`][retry-after] header. The sender MUST
observe the value of the Retry-After header and refrain from sending further
requests until the indicated time.
If the delivery cannot be accepted because the notification format has not been
understood, the service MUST respond with status code [415 Unsupported Media
Type][415].
All further error status codes apply as specified in [RFC7231][rfc7231].
## 3. Authorization
The delivery request MUST use one of the following two methods, both of which
lean on the OAuth 2.0 Bearer Token [RFC6750][rfc6750] model.
The delivery target MUST support both methods.
The client MAY use any token-based authorization scheme. The token can take any
shape, and can be a standardized token format or a simple key expression.
Challenge-based schemes MUST NOT be used.
### 3.1. Authorization Request Header Field
The access token is sent in the [`Authorization`][authorization] request header
field defined by HTTP/1.1.
For [OAuth 2.0 Bearer][bearer] tokens, the "Bearer" scheme MUST be used.
Example:
```text
POST /resource HTTP/1.1
Host: server.example.com
Authorization: Bearer mF_9.B5f-4.1JqM
```
### 3.2 URI Query Parameter
When sending the access token in the HTTP request URI, the client adds the
access token to the request URI query component as defined by "Uniform Resource
Identifier (URI): Generic Syntax" [RFC3986][rfc3986], using the "access_token"
parameter.
For example, the client makes the following HTTP request:
```text
POST /resource?access_token=mF_9.B5f-4.1JqM HTTP/1.1
Host: server.example.com
```
The HTTP request URI query MAY include other request-specific parameters, in
which case the "access_token" parameter MUST be properly separated from the
request-specific parameters using "&" character(s) (ASCII code 38).
For example:
https://server.example.com/resource?access_token=mF_9.B5f-4.1JqM&p=q
Clients using the URI Query Parameter method SHOULD also send a Cache-Control
header containing the "no-store" option. Server success (2XX status) responses
to these requests SHOULD contain a Cache-Control header with the "private"
option.
Because of the security weaknesses associated with the URI method (see [RFC6750,
Section 5][rfc6750]), including the high likelihood that the URL containing the
access token will be logged, it SHOULD NOT be used unless it is impossible to
transport the access token in the "Authorization" request header field or the
HTTP request entity-body. All further caveats cited in [RFC6750][rfc6750] apply
equivalently.
## 4. Abuse Protection
Any system that allows registration of and delivery of notifications to
arbitrary HTTP endpoints can potentially be abused such that someone maliciously
or inadvertently registers the address of a system that does not expect such
requests and for which the registering party is not authorized to perform such a
registration. In extreme cases, a notification infrastructure could be abused to
launch denial-of-service attacks against an arbitrary web-site.
To protect the sender from being abused in such a way, a legitimate delivery
target needs to indicate that it agrees with notifications being delivered to
it.
Reaching the delivery agreement is realized using the following validation
handshake. The handshake can either be executed immediately at registration time
or as a "pre-flight" request immediately preceding a delivery.
It is important to understand that the handshake does not aim to establish an
authentication or authorization context. It only serves to protect the sender
from being told to a push to a destination that is not expecting the traffic.
While this specification mandates use of an authorization model, this mandate is
not sufficient to protect any arbitrary website from unwanted traffic if that
website doesn't implement access control and therefore ignores the
`Authorization` header.
Delivery targets SHOULD support the abuse protection feature. If a target does
not support the feature, the sender MAY choose not to send to the target, at
all, or send only at a very low request rate.
### 4.1. Validation request
The validation request uses the HTTP [OPTIONS][options] method. The request is
directed to the exact resource target URI that is being registered.
With the validation request, the sender asks the target for permission to send
notifications, and it can declare a desired request rate (requests per minute).
The delivery target will respond with a permission statement and the permitted
request rate.
The following header fields are for inclusion in the validation request.
#### 4.1.2. WebHook-Request-Origin
The `WebHook-Request-Origin` header MUST be included in the validation request
and requests permission to send notifications from this sender, and contains a
DNS expression that identifies the sending system, for example
"eventemitter.example.com". The value is meant to summarily identify all sender
instances that act on the behalf of a certain system, and not an individual
host.
After the handshake and if permission has been granted, the sender MUST use the
`WebHook-Request-Origin` request header for each delivery request, with the value matching that
of this header.
Example:
```text
WebHook-Request-Origin: eventemitter.example.com
```
#### 4.1.3. WebHook-Request-Callback
The `WebHook-Request-Callback` header is OPTIONAL and augments the
`WebHook-Request-Origin` header. It allows the delivery target to grant send
permission asynchronously, via a simple HTTPS callback.
If the receiving application does not explicitly support the handshake described
here, an administrator could nevertheless still find the callback URL in the
log, and call it manually and therewith grant access.
The delivery target grants permission by issuing an HTTPS GET or POST request
against the given URL. The HTTP GET request can be performed manually using a
browser client. If the WebHook-Request-Callback header is used, the callback
target MUST support both methods.
The delivery target MAY include the `WebHook-Allowed-Rate` response in the
callback.
The URL is not formally constrained, but it SHOULD contain an identifier for the
delivery target along with a secret key that makes the URL difficult to guess so
that 3rd parties cannot spoof the delivery target.
For example:
```text
WebHook-Request-Callback: https://example.com/confirm?id=12345&key=...base64...
```
#### 4.1.4. WebHook-Request-Rate
The `WebHook-Request-Rate` header MAY be included in the request and asks for
permission to send notifications from this sender at the specified rate. The
value is the string representation of a positive integer number greater than
zero and expresses the request rate in "requests per minute".
For example, the following header asks for permission to send 120 requests per
minute:
```text
WebHook-Request-Rate: 120
```
### 4.2. Validation response
If and only if the delivery target does allow delivery of the events, it MUST
reply to the request by including the `WebHook-Allowed-Origin` and
`WebHook-Allowed-Rate` headers.
If the delivery target chooses to grant permission by callback, it withholds the
response headers.
If the delivery target does not allow delivery of the events or does not expect
delivery of events and nevertheless handles the HTTP OPTIONS method, the
existing response ought not to be interpreted as consent, and therefore the
handshake cannot rely on status codes. If the delivery target otherwise does not
handle the HTTP OPTIONS method, it SHOULD respond with HTTP status code 405, as
if OPTIONS were not supported.
The OPTIONS response SHOULD include the [Allow][allow] header indicating the
[POST][post] method being permitted. Other methods MAY be permitted on the
resource, but their function is outside the scope of this specification.
#### 4.2.1. WebHook-Allowed-Origin
The `WebHook-Allowed-Origin` header MUST be returned when the delivery target
agrees to notification delivery by the origin service. Its value MUST either be
the origin name supplied in the `WebHook-Request-Origin` header, or a singular
asterisk character ('\*'), indicating that the delivery target supports
notifications from all origins.
```text
WebHook-Allowed-Origin: eventemitter.example.com
```
or
```text
WebHook-Allowed-Origin: *
```
#### 4.2.2. WebHook-Allowed-Rate
The `WebHook-Allowed-Rate` header MUST be returned alongside
`WebHook-Allowed-Origin`if the request contained the `WebHook-Request-Rate`
header, otherwise it SHOULD be returned.
For the callback model, the `WebHook-Allowed-Rate` header SHOULD be included
in the callback request. If the header is not included, for instance when a
callback is issued through a browser as a GET request, the allowed rate SHOULD
correspond to the requested rate.
The header grants permission to send notifications at the specified rate. The
value is either an asterisk character or the string representation of a positive
integer number greater than zero. The asterisk indicates that there is no rate
limitation. An integer number expresses the permitted request rate in "requests
per minute". For request rates exceeding the granted notification rate, the
sender ought to expect request throttling. Throttling is indicated by requests
being rejected using HTTP status code [429 Too Many Requests][429].
For example, the following header permits to send 100 requests per minute:
```text
WebHook-Allowed-Rate: 100
```
## 5. References
- [RFC2119][rfc2119] Key words for use in RFCs to Indicate Requirement Levels
- [RFC2818][rfc2818] HTTP over TLS
- [RFC6750][rfc6750] The OAuth 2.0 Authorization Framework: Bearer Token Usage
- [RFC6585][rfc6585] Additional HTTP Status Codes
- [RFC7230][rfc7230] Hypertext Transfer Protocol (HTTP/1.1): Message Syntax and
Routing
- [RFC7231][rfc7231] Hypertext Transfer Protocol (HTTP/1.1): Semantics and
Content
- [RFC7235][rfc7235] Hypertext Transfer Protocol (HTTP/1.1): Authentication
- [RFC7540][rfc7540] Hypertext Transfer Protocol Version 2 (HTTP/2)
[ce]: ./spec.md
[webhooks]: https://progrium.github.io/blog/2007/05/03/web-hooks-to-revolutionize-the-web/index.html
[content-type]: https://tools.ietf.org/html/rfc7231#section-3.1.1.5
[retry-after]: https://tools.ietf.org/html/rfc7231#section-7.1.3
[authorization]: https://tools.ietf.org/html/rfc7235#section-4.2
[allow]: https://tools.ietf.org/html/rfc7231#section-7.4.1
[post]: https://tools.ietf.org/html/rfc7231#section-4.3.3
[options]: https://tools.ietf.org/html/rfc7231#section-4.3.7
[3xx]: https://tools.ietf.org/html/rfc7231#section-6.4
[200]: https://tools.ietf.org/html/rfc7231#section-6.3.1
[201]: https://tools.ietf.org/html/rfc7231#section-6.3.2
[202]: https://tools.ietf.org/html/rfc7231#section-6.3.3
[204]: https://tools.ietf.org/html/rfc7231#section-6.3.5
[410]: https://tools.ietf.org/html/rfc7231#section-6.5.9
[415]: https://tools.ietf.org/html/rfc7231#section-6.5.13
[429]: https://tools.ietf.org/html/rfc6585#section-4
[bearer]: https://tools.ietf.org/html/rfc6750#section-2.1
[rfc2119]: https://tools.ietf.org/html/rfc2119
[rfc3986]: https://tools.ietf.org/html/rfc3986
[rfc2818]: https://tools.ietf.org/html/rfc2818
[rfc6585]: https://tools.ietf.org/html/rfc6585
[rfc6750]: https://tools.ietf.org/html/rfc6750
[rfc7159]: https://tools.ietf.org/html/rfc7159
[rfc7230]: https://tools.ietf.org/html/rfc7230
[rfc7230-section-3]: https://tools.ietf.org/html/rfc7230#section-3
[rfc7231-section-4]: https://tools.ietf.org/html/rfc7231#section-4
[rfc7230-section-5-1]: https://tools.ietf.org/html/rfc7230#section-5.1
[rfc7231]: https://tools.ietf.org/html/rfc7231
[rfc7235]: https://tools.ietf.org/html/rfc7235
[rfc7540]: https://tools.ietf.org/html/rfc7540

View File

@ -0,0 +1,2 @@
# מפרט CloudEvents - גרסה 1.0.3 -בתהליך כתיבה
מסמך זה טרם תורגם. בבקשה תשתמשו [בגרסה האנגלית של המסמך](../../README.md) לבינתיים.

View File

@ -0,0 +1,2 @@
# CloudEvents Release Notes
מסמך זה טרם תורגם. בבקשה תשתמשו [בגרסה האנגלית של המסמך](../../RELEASE_NOTES.md) לבינתיים.

View File

@ -0,0 +1,2 @@
# CloudEvents SDK Requirements
מסמך זה טרם תורגם. בבקשה תשתמשו [בגרסה האנגלית של המסמך](../../SDK.md) לבינתיים.

View File

@ -0,0 +1,2 @@
# CloudEvents Adapters
מסמך זה טרם תורגם. בבקשה תשתמשו [בגרסה האנגלית של המסמך](../../../adapters/README.md) לבינתיים.

View File

@ -0,0 +1,2 @@
# AWS Simple Storage Service CloudEvents Adapter
מסמך זה טרם תורגם. בבקשה תשתמשו [בגרסה האנגלית של המסמך](../../../adapters/aws-s3.md) לבינתיים.

View File

@ -0,0 +1,2 @@
# Amazon Simple Notification Service CloudEvents Adapter
מסמך זה טרם תורגם. בבקשה תשתמשו [בגרסה האנגלית של המסמך](../../../adapters/aws-sns.md) לבינתיים.

View File

@ -0,0 +1,2 @@
# CouchDB CloudEvents Adapter
מסמך זה טרם תורגם. בבקשה תשתמשו [בגרסה האנגלית של המסמך](../../../adapters/couchdb.md) לבינתיים.

View File

@ -0,0 +1,2 @@
# GitHub CloudEvents Adapter
מסמך זה טרם תורגם. בבקשה תשתמשו [בגרסה האנגלית של המסמך](../../../adapters/github.md) לבינתיים.

View File

@ -0,0 +1,2 @@
# GitLab CloudEvents Adapter
מסמך זה טרם תורגם. בבקשה תשתמשו [בגרסה האנגלית של המסמך](../../../adapters/gitlab.md) לבינתיים.

View File

@ -0,0 +1,2 @@
# AMQP Protocol Binding for CloudEvents - Version 1.0.3-wip
מסמך זה טרם תורגם. בבקשה תשתמשו [בגרסה האנגלית של המסמך](../../../bindings/amqp-protocol-binding.md) לבינתיים.

View File

@ -0,0 +1,2 @@
# HTTP Protocol Binding for CloudEvents - Version 1.0.3-wip
מסמך זה טרם תורגם. בבקשה תשתמשו [בגרסה האנגלית של המסמך](../../../bindings/http-protocol-binding.md) לבינתיים.

View File

@ -0,0 +1,2 @@
# Kafka Protocol Binding for CloudEvents - Version 1.0.3-wip
מסמך זה טרם תורגם. בבקשה תשתמשו [בגרסה האנגלית של המסמך](../../../bindings/kafka-protocol-binding.md) לבינתיים.

View File

@ -0,0 +1,2 @@
# MQTT Protocol Binding for CloudEvents - Version 1.0.3-wip
מסמך זה טרם תורגם. בבקשה תשתמשו [בגרסה האנגלית של המסמך](../../../bindings/mqtt-protocol-binding.md) לבינתיים.

View File

@ -0,0 +1,2 @@
# NATS Protocol Binding for CloudEvents - Version 1.0.3-wip
מסמך זה טרם תורגם. בבקשה תשתמשו [בגרסה האנגלית של המסמך](../../../bindings/nats-protocol-binding.md) לבינתיים.

View File

@ -0,0 +1,2 @@
# WebSockets Protocol Binding for CloudEvents - Version 1.0.3-wip
מסמך זה טרם תורגם. בבקשה תשתמשו [בגרסה האנגלית של המסמך](../../../bindings/websockets-protocol-binding.md) לבינתיים.

View File

@ -0,0 +1,2 @@
# CloudEvents Extension Attributes
מסמך זה טרם תורגם. בבקשה תשתמשו [בגרסה האנגלית של המסמך](../../../extensions/README.md) לבינתיים.

View File

@ -0,0 +1,2 @@
# Auth Context
מסמך זה טרם תורגם. בבקשה תשתמשו [בגרסה האנגלית של המסמך](../../../extensions/authcontext.md) לבינתיים.

View File

@ -0,0 +1,2 @@
# Business Activity Monitoring (BAM) Extension
מסמך זה טרם תורגם. בבקשה תשתמשו [בגרסה האנגלית של המסמך](../../../extensions/bam.md) לבינתיים.

Some files were not shown because too many files have changed in this diff Show More