Skip to content

Commit ac3177d

Browse files
authored
Merge branch 'serverlessworkflow:main' into outcome
2 parents c5a217a + be41153 commit ac3177d

File tree

7 files changed

+120
-103
lines changed

7 files changed

+120
-103
lines changed

GOVERNANCE.md

Lines changed: 22 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ depend on and trust to make decisions in the best interest of the project.
3838
Periodically, the existing maintainers curate a list of contributors that have
3939
shown regular activity on the project over the prior months. From this list,
4040
maintainer candidates are selected and proposed on the project mailing list.
41+
Only one maintainer per organization is allowed to avoid taking over votes in case of conflicts.
4142

4243
After a candidate has been announced on the project mailing list, the
4344
existing maintainers are given fourteen business days to discuss the candidate,
@@ -116,6 +117,12 @@ As a result, all decisions can be expressed as changes to the repository. An
116117
implementation change is a change to the source code. An API change is a change
117118
to the API specification, and so on.
118119

120+
Decisions are built on consensus between maintainers. Proposals and ideas can be submitted
121+
for agreement via a GitHub [issue](issues) or [discussion](discussions).
122+
Upon agreement, a pull request should be opened. We encourage not opening pull
123+
requests without a discussion first either in a new [issue](issues) or using
124+
the [discussion](discussions) tool.
125+
119126
All decisions affecting Serverless Workflow, big and small, follow the same 3 steps:
120127

121128
* Step 1: Open a pull request. Anyone can do this.
@@ -133,8 +140,18 @@ document for more information about opening pull requests.
133140

134141
## Conflict Resolution
135142

136-
If you have a technical dispute that you feel has reached an impasse with a
137-
subset of the community, any contributor may open an issue, specifically
138-
calling for a resolution vote of the current core maintainers to resolve the dispute.
139-
The same voting quorums required (2/3) for adding and removing maintainers
140-
will apply to conflict resolution.
143+
At least 66% approval from the project's maintainers is necessary to merge changes
144+
in the specification. [Lazy consensus](http://communitymgt.wikia.com/wiki/Lazy_consensus)
145+
is considered by maintainers that do not directly express their opinions in the pull request.
146+
147+
Discussions and voting can be posponed in case one of the maintainers expressed that
148+
they won't be available for personal reasons, e.g. parental leave, vacations, sick leave, etc.
149+
150+
We generally prefer that technical issues and maintainer membership are amicably
151+
worked out between the persons involved. If a dispute cannot be resolved independently,
152+
get a third-party maintainer (e.g., a mutual contact with some background on the issue
153+
but not involved in the conflict) to intercede. If a dispute cannot be resolved,
154+
the core maintainers have the final say in deciding an issue. The core maintainers
155+
may reach this decision by consensus or by a simple majority vote if necessary.
156+
The maintainers should endeavor to make this decision within a reasonable amount
157+
of time, not to extend it longer than two weeks.

README.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,11 @@ consuming, parsing, validating and testing their workflows that use the Serverle
8686
In order to enhance developer experience with the specification, we also provide a [Visual Studio Code extension](https://marketplace.visualstudio.com/items?itemName=serverlessworkflow.serverless-workflow-vscode-extension).
8787
The sources of the extension are found [here](https://github.com/serverlessworkflow/vscode-extension).
8888

89+
## Requirements
90+
91+
To generate the SVG diagram from the YAML or JSON file, you need to have the following tools installed:
92+
- https://www.graphviz.org/download/source/
93+
8994
## Community
9095

9196
We have a growing community working together to build a community-driven and vendor-neutral

comparisons/comparison-temporal.md

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@ public static class GreetingWorkflowImpl implements GreetingWorkflow {
8282
{
8383
"id": "greetingworkflow",
8484
"name": "Greeting Workflow",
85-
"version": "1.0.0"
85+
"version": "1.0.0",
8686
"specVersion": "0.8",
8787
"autoRetries": true,
8888
"states": [
@@ -164,7 +164,7 @@ WorkflowOptions workflowOptions =
164164
{
165165
"id": "greetingworkflow",
166166
"name": "Greeting Workflow",
167-
"version": "1.0.0"
167+
"version": "1.0.0",
168168
"specVersion": "0.8",
169169
"autoRetries": true,
170170
"timeouts": {
@@ -268,7 +268,7 @@ WorkflowOptions workflowOptions =
268268
{
269269
"id": "HelloSaga",
270270
"name": "Hello SAGA compensation Workflow",
271-
"version": "1.0.0"
271+
"version": "1.0.0",
272272
"specVersion": "0.8",
273273
"states": [
274274
{
@@ -392,7 +392,7 @@ static class GreetingActivitiesImpl implements GreetingActivities {
392392
{
393393
"id": "HelloActivityRetry",
394394
"name": "Hello Activity with Retries Workflow",
395-
"version": "1.0.0"
395+
"version": "1.0.0",
396396
"specVersion": "0.8",
397397
"autoRetries": true,
398398
"start": "GreetingState",

examples/README.md

Lines changed: 28 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ data output, which is:
6767
```json
6868
{
6969
"id": "helloworld",
70-
"version": "1.0.0"
70+
"version": "1.0.0",
7171
"specVersion": "0.8",
7272
"name": "Hello World Workflow",
7373
"description": "Inject Hello World",
@@ -151,7 +151,7 @@ Which is added to the states data and becomes the workflow data output.
151151
```json
152152
{
153153
"id": "greeting",
154-
"version": "1.0.0"
154+
"version": "1.0.0",
155155
"specVersion": "0.8",
156156
"name": "Greeting Workflow",
157157
"description": "Greet Someone",
@@ -296,7 +296,7 @@ filters what is selected to be the state data output which then becomes the work
296296
```json
297297
{
298298
"id": "eventbasedgreeting",
299-
"version": "1.0.0"
299+
"version": "1.0.0",
300300
"specVersion": "0.8",
301301
"name": "Event Based Greeting Workflow",
302302
"description": "Event Based Greeting",
@@ -424,7 +424,7 @@ result of the workflow execution.
424424
```json
425425
{
426426
"id": "solvemathproblems",
427-
"version": "1.0.0"
427+
"version": "1.0.0",
428428
"specVersion": "0.8",
429429
"name": "Solve Math Problems Workflow",
430430
"description": "Solve math problems",
@@ -521,7 +521,7 @@ to finish execution before it can transition (end workflow execution in this cas
521521
```json
522522
{
523523
"id": "parallelexec",
524-
"version": "1.0.0"
524+
"version": "1.0.0",
525525
"specVersion": "0.8",
526526
"name": "Parallel Execution Workflow",
527527
"description": "Executes two branches in parallel",
@@ -611,7 +611,7 @@ does not wait for its results.
611611
```json
612612
{
613613
"id": "sendcustomeremail",
614-
"version": "1.0.0"
614+
"version": "1.0.0",
615615
"specVersion": "0.8",
616616
"name": "Send customer email workflow",
617617
"description": "Send email to a customer",
@@ -702,7 +702,7 @@ property to `continue`.
702702
```json
703703
{
704704
"id": "onboardcustomer",
705-
"version": "1.0.0"
705+
"version": "1.0.0",
706706
"specVersion": "0.8",
707707
"name": "Onboard Customer",
708708
"description": "Onboard a Customer",
@@ -784,7 +784,7 @@ period, the workflow transitions to the "HandleNoVisaDecision" state.
784784
```json
785785
{
786786
"id": "eventbasedswitchstate",
787-
"version": "1.0.0"
787+
"version": "1.0.0",
788788
"specVersion": "0.8",
789789
"name": "Event Based Switch Transitions",
790790
"description": "Event Based Switch Transitions",
@@ -946,7 +946,7 @@ If the applicants age is over 18 we start the application (subflow action). Othe
946946
```json
947947
{
948948
"id": "applicantrequest",
949-
"version": "1.0.0"
949+
"version": "1.0.0",
950950
"specVersion": "0.8",
951951
"name": "Applicant Request Decision Workflow",
952952
"description": "Determine if applicant request is valid",
@@ -1090,7 +1090,7 @@ The data output of the workflow contains the information of the exception caught
10901090
```json
10911091
{
10921092
"id": "provisionorders",
1093-
"version": "1.0.0"
1093+
"version": "1.0.0",
10941094
"specVersion": "0.8",
10951095
"name": "Provision Orders",
10961096
"description": "Provision Orders and handle errors thrown",
@@ -1286,7 +1286,7 @@ In the case job submission raises a runtime error, we transition to an Operation
12861286
```json
12871287
{
12881288
"id": "jobmonitoring",
1289-
"version": "1.0.0"
1289+
"version": "1.0.0",
12901290
"specVersion": "0.8",
12911291
"name": "Job Monitoring",
12921292
"description": "Monitor finished execution of a submitted job",
@@ -1577,7 +1577,7 @@ CloudEvent upon completion of the workflow could look like:
15771577
```json
15781578
{
15791579
"id": "sendcloudeventonprovision",
1580-
"version": "1.0.0"
1580+
"version": "1.0.0",
15811581
"specVersion": "0.8",
15821582
"name": "Send CloudEvent on provision completion",
15831583
"start": "ProvisionOrdersState",
@@ -1711,7 +1711,7 @@ have the matching patient id.
17111711
{
17121712
"id": "patientVitalsWorkflow",
17131713
"name": "Monitor Patient Vitals",
1714-
"version": "1.0.0"
1714+
"version": "1.0.0",
17151715
"specVersion": "0.8",
17161716
"start": "MonitorVitals",
17171717
"events": [
@@ -1906,7 +1906,7 @@ when all three of these events happened (in no particular order).
19061906
{
19071907
"id": "finalizeCollegeApplication",
19081908
"name": "Finalize College Application",
1909-
"version": "1.0.0"
1909+
"version": "1.0.0",
19101910
"specVersion": "0.8",
19111911
"start": "FinalizeApplication",
19121912
"events": [
@@ -2117,7 +2117,7 @@ And for denied credit check, for example:
21172117
```json
21182118
{
21192119
"id": "customercreditcheck",
2120-
"version": "1.0.0"
2120+
"version": "1.0.0",
21212121
"specVersion": "0.8",
21222122
"name": "Customer Credit Check Workflow",
21232123
"description": "Perform Customer Credit Check",
@@ -2322,7 +2322,7 @@ Bidding is done via an online application and bids are received as events are as
23222322
```json
23232323
{
23242324
"id": "handleCarAuctionBid",
2325-
"version": "1.0.0"
2325+
"version": "1.0.0",
23262326
"specVersion": "0.8",
23272327
"name": "Car Auction Bidding Workflow",
23282328
"description": "Store a single bid whole the car auction is active",
@@ -2452,7 +2452,7 @@ The results of the inbox service called is expected to be for example:
24522452
{
24532453
"id": "checkInbox",
24542454
"name": "Check Inbox Workflow",
2455-
"version": "1.0.0"
2455+
"version": "1.0.0",
24562456
"specVersion": "0.8",
24572457
"description": "Periodically Check Inbox",
24582458
"start": {
@@ -2596,7 +2596,7 @@ For this example we assume that the workflow instance is started given the follo
25962596
"id": "VetAppointmentWorkflow",
25972597
"name": "Vet Appointment Workflow",
25982598
"description": "Vet service call via events",
2599-
"version": "1.0.0"
2599+
"version": "1.0.0",
26002600
"specVersion": "0.8",
26012601
"start": "MakeVetAppointmentState",
26022602
"events": [
@@ -2747,7 +2747,7 @@ In our workflow definition then we can reference these files rather than definin
27472747
```json
27482748
{
27492749
"id": "paymentconfirmation",
2750-
"version": "1.0.0"
2750+
"version": "1.0.0",
27512751
"specVersion": "0.8",
27522752
"name": "Payment Confirmation Workflow",
27532753
"description": "Performs Payment Confirmation",
@@ -2951,7 +2951,7 @@ If the retries are not successful, we want to just gracefully end workflow execu
29512951
{
29522952
"id": "patientonboarding",
29532953
"name": "Patient Onboarding Workflow",
2954-
"version": "1.0.0"
2954+
"version": "1.0.0",
29552955
"specVersion": "0.8",
29562956
"start": "Onboard",
29572957
"states": [
@@ -3123,7 +3123,7 @@ This example shows the use of the workflow [execTimeout definition](../specifica
31233123
{
31243124
"id": "order",
31253125
"name": "Purchase Order Workflow",
3126-
"version": "1.0.0"
3126+
"version": "1.0.0",
31273127
"specVersion": "0.8",
31283128
"start": "StartNewOrder",
31293129
"timeouts": {
@@ -3407,7 +3407,7 @@ the data for an hour, send report, and so on.
34073407
{
34083408
"id": "roomreadings",
34093409
"name": "Room Temp and Humidity Workflow",
3410-
"version": "1.0.0"
3410+
"version": "1.0.0",
34113411
"specVersion": "0.8",
34123412
"start": "ConsumeReading",
34133413
"timeouts": {
@@ -3581,7 +3581,7 @@ We fist define our top-level workflow for this example:
35813581
{
35823582
"id": "checkcarvitals",
35833583
"name": "Check Car Vitals Workflow",
3584-
"version": "1.0.0"
3584+
"version": "1.0.0",
35853585
"specVersion": "0.8",
35863586
"start": "WhenCarIsOn",
35873587
"states": [
@@ -3696,7 +3696,7 @@ And then our reusable sub-workflow which performs the checking of our car vitals
36963696
{
36973697
"id": "vitalscheck",
36983698
"name": "Car Vitals Check",
3699-
"version": "1.0.0"
3699+
"version": "1.0.0",
37003700
"specVersion": "0.8",
37013701
"start": "CheckVitals",
37023702
"states": [
@@ -3836,7 +3836,7 @@ For the sake of the example we assume the functions and event definitions are de
38363836
{
38373837
"id": "booklending",
38383838
"name": "Book Lending Workflow",
3839-
"version": "1.0.0"
3839+
"version": "1.0.0",
38403840
"specVersion": "0.8",
38413841
"start": "Book Lending Request",
38423842
"states": [
@@ -4128,7 +4128,7 @@ Its results are then merged back into the state data according to the "toStateDa
41284128
{
41294129
"id": "fillglassofwater",
41304130
"name": "Fill glass of water workflow",
4131-
"version": "1.0.0"
4131+
"version": "1.0.0",
41324132
"specVersion": "0.8",
41334133
"start": "Check if full",
41344134
"functions": [
@@ -4541,7 +4541,7 @@ We assume that our workflow input has the runtime-imposed quota:
45414541
"end":{
45424542
"continueAs": {
45434543
"workflowId": "notifycustomerworkflow",
4544-
"version": "1.0.0"
4544+
"version": "1.0.0",
45454545
"data": "${ del(.customerCount) }"
45464546
}
45474547
}
@@ -4661,7 +4661,7 @@ decide which activity to perform based on the transaction value.
46614661
{
46624662
"id": "customerbankingtransactions",
46634663
"name": "Customer Banking Transactions Workflow",
4664-
"version": "1.0.0"
4664+
"version": "1.0.0",
46654665
"specVersion": "0.8",
46664666
"autoRetries": true,
46674667
"constants": {

schema/events.json

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -74,22 +74,21 @@
7474
"additionalProperties": false,
7575
"if": {
7676
"properties": {
77-
"kind": {
78-
"const": "consumed"
77+
"source": {
78+
"type": "null"
7979
}
8080
}
8181
},
8282
"then": {
8383
"required": [
8484
"name",
85-
"source",
8685
"type"
8786
]
8887
},
8988
"else": {
9089
"required": [
9190
"name",
92-
"type"
91+
"source"
9392
]
9493
}
9594
},

schema/workflow.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -212,7 +212,7 @@
212212
"description": "Amount of time (ISO 8601 duration format) to sleep after function/subflow invocation. Does not apply if 'eventRef' is defined."
213213
}
214214
},
215-
"oneOf": [
215+
"anyOf": [
216216
{
217217
"required": [
218218
"before"

0 commit comments

Comments
 (0)