Skip to content

Add stand-alone example resources #324

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
cdavernas opened this issue Mar 31, 2021 · 45 comments
Closed

Add stand-alone example resources #324

cdavernas opened this issue Mar 31, 2021 · 45 comments
Assignees
Labels
area: spec Changes in the Specification
Milestone

Comments

@cdavernas
Copy link
Member

cdavernas commented Mar 31, 2021

What would you like to be added:

Stand-alone example json/yaml files, instead of just embedding them into an MD file

Why is this needed:

Allows SDKs and other implementations to unit test the successfull parsing of official, up-to-date examples

Other thoughts:

Now, what would be really awesome IMHO is to use factual examples, instead of theoretical ones, so that runtime implementations can test them to. The idea is to create some out-of-the-box examples for which runtime can be validated/tested.

We could use Swagger's Pet Store Api for demonstrating OpenApi function calls, and something like a free webhook tool for testing events.


What do you guys think?

@tsurdilo tsurdilo added the area: spec Changes in the Specification label Mar 31, 2021
@tsurdilo tsurdilo self-assigned this Mar 31, 2021
@tsurdilo
Copy link
Contributor

@neuroglia I was actually working on this hehe :)
I just wish there was a way to embed the files into the examples.md so we don't have to maintain both sides...

@tsurdilo
Copy link
Contributor

@neuroglia do you think doing this for the comparison examples: https://github.com/serverlessworkflow/specification/tree/main/comparisons

would be beneficial as well?

@cdavernas
Copy link
Member Author

@tsurdilo Niiiice x)
Ah yes, I hear you: I face the exact same problem in some private repos. The only "sane(ish)" way to do so, IMO, is by using a pipeline to replace values in your MD with the contents of the examples. Less user-friendly to write, but at least it's up to date.

@tsurdilo
Copy link
Contributor

@neuroglia we can host all OpenApi defs on serverlessworkflow.io ;)
+100 for "running" examples
Those can also become the start of our TCK tests as well.

@cdavernas
Copy link
Member Author

@neuroglia do you think doing this for the comparison examples: https://github.com/serverlessworkflow/specification/tree/main/comparisons
would be beneficial as well?

@tsurdilo I'm not sure. I must say I only did go once or twice on that specific page, as there was no need to sell me the spec further x) But I can see the added value for more analytical brains than mine I guess!

@tsurdilo
Copy link
Contributor

tsurdilo commented Mar 31, 2021

@neuroglia if it helps, we do have (i hope all) examples here: https://github.com/serverlessworkflow/sdk-java/tree/main/api/src/test/resources/examples

but the problem with that is its a pain to maintain them all the time so they might not be all up to date with the spec examples, but the workflow dsl used there is validated against v0.6. Hope this helps for now until we work on this

@tsurdilo
Copy link
Contributor

@neuroglia here are some examples the java sdk uses for validation of some certain edge cases: https://github.com/serverlessworkflow/sdk-java/tree/main/api/src/test/resources/features
hope this helps for now too :)

@cdavernas
Copy link
Member Author

@tsurdilo Aaaaah! Awesome! I'll use that to add some unit test before the commit that adds the reader/writer!

@tsurdilo
Copy link
Contributor

@tsurdilo
Copy link
Contributor

tsurdilo commented Mar 31, 2021

@neuroglia one more thing, we have our dsl schemas also exposed on the website: https://serverlessworkflow.io/schemas/latest/workflow.json
this is used by the vscode plugin and the diagram generation project as well
the "latest" always points to the latest release of the spec
you can use "previous" to access v0.5 and "snapshot" to access the latest (main branch)

..maybe we should expose the examples as well there....hmmm

@tsurdilo
Copy link
Contributor

@neuroglia
looking at this tool to possible be able to do this: https://github.com/temporalio/snipsync

@github-actions
Copy link

github-actions bot commented Jun 6, 2021

This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. Thank you for your contributions.

@github-actions
Copy link

This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. Thank you for your contributions.

@tsurdilo tsurdilo added this to the v0.8 milestone Aug 18, 2021
@github-actions
Copy link

github-actions bot commented Oct 3, 2021

This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. Thank you for your contributions.

@tsurdilo
Copy link
Contributor

tsurdilo commented Oct 6, 2021

@cdavernas we talked about this in this weeks meeting. will create a new repo and move all our examples
and test json/yaml into it. SDK then can have a common pool of test workflows to use
rather than having to have their own

@github-actions
Copy link

This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. Thank you for your contributions.

@tsurdilo tsurdilo modified the milestones: v0.8, v0.9 Dec 4, 2021
@ricardozanini
Copy link
Member

Additionally, we use CI to download (cache) and run these tests. MD5 features in GitHub actions work pretty neatly.

@tsurdilo
Copy link
Contributor

tsurdilo commented Nov 22, 2022

our sdk users should be able to compile sdk and run tests offline as well imo

@cdavernas
Copy link
Member Author

@tsurdilo you are totally right! What do you propose we do as of now then?

@tsurdilo
Copy link
Contributor

was looking at structuring sdks so can take advantage of git submodules maybe. wdyt?

@ricardozanini
Copy link
Member

honestly, the tradeoff of having the examples online vs configuration bottlenecks doesn't seem a bad option IMO. These files can be cached locally by the SDKs as well. At least in Go, we will do a local cache.

@github-actions
Copy link

github-actions bot commented Jan 8, 2023

This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. Thank you for your contributions.

@github-actions
Copy link

This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. Thank you for your contributions.

@github-actions
Copy link

This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. Thank you for your contributions.

@github-actions
Copy link

This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. Thank you for your contributions.

@github-actions
Copy link

This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. Thank you for your contributions.

@cdavernas
Copy link
Member Author

cdavernas commented May 17, 2024

This has been addressed in 1.0.0, and is closed as part of #843

In 1.0.0, we did even better than what was suggested by adding a list of Gherkin features for conformance testing and Behavior Driven Development.

Example:

Feature: Flow Directive
  As an implementer of the workflow DSL
  I want to ensure that tasks are executed in the correct order
  So that my implementation conforms to the expected behavior

  Scenario: Implicit Sequence Flow
    Given a workflow with definition:
    """yaml
    document:
      dsl: 0.10
      namespace: default
      name: implicit-sequence
    do:
      setRed:
        set:
          colors: '${ .colors + [ "red" ] }'
      setGreen:
        set:
          colors: '${ .colors + [ "green" ] }'
      setBlue:
        set:
          colors: '${ .colors + [ "blue" ] }'
    """
    When the workflow is executed
    Then the workflow should complete with output:
    """yaml
    colors: [ red, green, blue ]
    """
    And setRed should run first
    And setGreen should run after setRed
    And setBlue should run after setGreen

@github-project-automation github-project-automation bot moved this from Backlog to Done in Progress Tracker May 17, 2024
This was referenced May 20, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
area: spec Changes in the Specification
Projects
Status: Done
Development

No branches or pull requests

4 participants