{"id":13481974,"url":"https://github.com/fission/fission-workflows","last_synced_at":"2025-04-05T23:10:56.953Z","repository":{"id":41432463,"uuid":"97091215","full_name":"fission/fission-workflows","owner":"fission","description":"Workflows for Fission: Fast, reliable and lightweight function composition for serverless functions","archived":false,"fork":false,"pushed_at":"2023-03-30T20:18:26.000Z","size":18853,"stargazers_count":359,"open_issues_count":62,"forks_count":41,"subscribers_count":30,"default_branch":"master","last_synced_at":"2024-02-14T18:34:41.112Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/fission.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":"Docs/roadmap.md","authors":null}},"created_at":"2017-07-13T07:06:47.000Z","updated_at":"2024-02-14T09:25:51.000Z","dependencies_parsed_at":"2024-01-13T10:12:46.586Z","dependency_job_id":"395ffd85-a3c0-4f6c-868f-816ae4ae9538","html_url":"https://github.com/fission/fission-workflows","commit_stats":null,"previous_names":[],"tags_count":6,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fission%2Ffission-workflows","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fission%2Ffission-workflows/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fission%2Ffission-workflows/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fission%2Ffission-workflows/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/fission","download_url":"https://codeload.github.com/fission/fission-workflows/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247411235,"owners_count":20934653,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-07-31T17:00:57.914Z","updated_at":"2025-04-05T23:10:56.928Z","avatar_url":"https://github.com/fission.png","language":"Go","funding_links":[],"categories":["Related Software","Frameworks","Capabilities","Full fledged product","others","Go"],"sub_categories":["[Jenkins](#jenkins)","Coordination \u0026 Governance"],"readme":"# Fission Workflows\n[![Build Status](https://travis-ci.org/fission/fission-workflows.svg?branch=master)](https://travis-ci.org/fission/fission-workflows)\n[![Go Report Card](https://goreportcard.com/badge/github.com/fission/fission-workflows)](https://goreportcard.com/report/github.com/fission/fission-workflows)\n[![Fission Slack](http://slack.fission.io/badge.svg)](http://slack.fission.io)\n\n[![Fission Workflows](Docs/assets/fission-workflows-logo.png)](http://fission.io/workflows)\n\n----\n[fission.io](http://fission.io)  [@fissionio](http://twitter.com/fissionio)\n\nFission Workflows is a workflow-based serverless function composition framework built on top of the [Fission](https://github.com/fission/fission) Function-as-a-Service (FaaS) platform.\n\n:warning: Fission Workflows is currently in maintenance mode due to a time constraints of the core Fission team. If you are interested in contributing or helping maintain this project, contact the Fission team on the Fission Slack. :warning:\n\n### Highlights\n- **Fault-Tolerant**: Fission Workflows engine keeps track of state, re-tries, handling of errors, etc. By internally utilizing event sourcing, it allows the engine to recover from failures and continue exactly were it left off.   \n- **Scalable**: Other than a backing data store, the workflow system is stateless and can easily be scaled. The independent nature of workflows allows for relatively straightforward sharding of workloads over multiple workflow engines.\n- **High Performance**: In contrast to existing workflow engines targeting other domains, Fission Workflows is designed from the ground up for low overhead, low latency workflow executions.\n- **Extensible**: All main aspects of the engine are extensible. For example, you can even define your own control flow constructs.\n- **Lightweight**: With just the need for a single data store (NATS Streaming) and a FaaS platform (Fission), the engine consumes minimal resources.\n\n----\n\n### Philosophy\n\nThe Fission Functions-as-a-Service framework provides simplicity and\nquick time-to-value for functions on any infrastructure using\nKubernetes.  \n\nFunctions tend to do one logically separate task, and they're usually\nshort-lived.  For many relatively simple applications this is good\nenough.  But a more complex application that uses serverless functions\nmust, in some way, _compose_ functions together.\n\nThere are several ways to compose functions.  A function could invoke\nanother function using the Fission API or HTTP.  But this requires the\ncalling function to handle serialization, networking, etc.\n\nYou could also set up functions to be invoked using message queue topics.\nThis requires less boilerplate within each function, but the structure\nof the application is not explicit; dependencies are buried inside\nmappings of message queue topics to functions.\n\nIn addition, both these approaches are operationally difficult, in\nterms of error analysis, performance debugging, upgrades, etc.\n\nWorkflows have been popular in other domains, such as data processing\nand scientific applications, and recently got introduced into the\nserverless model by AWS Step Functions and Azure Logic Apps.\n\nFission Workflows is an open-source alternative to these workflow\nsystems.  It allows users to compose Fission functions in powerful\nways. Users can define their own control flow constructs, which in\nmost other workflow engines are part of the internal API.\n\n### Concepts\n\n**Workflows** can generally be represented in as a Directed Acyclic Graph (DAG).\nConsider the following example, a common pattern, the diamond-shaped workflow:\n\n\u003c!--\n```\n(A) -\u003e (B) -\u003e (C) ----\n          \\            \\     \n            -\u003e (D) -\u003e  (E) -\u003e (F)\n```\n--\u003e\n\n![Workflow Example](Docs/assets/workflow-example.png)\n\nIn this graph there is a single _starting task_ A, a _scatter task_ B\ntriggering parallel execution of two _branches_ with tasks C and D,\nfollowed by a _synchronizing task_ E collecting the outputs of the\nparallel tasks.\n\nFinally the graph concludes once _final task_ F completes.\n\nAlthough Fission Workflows has more functionality such as\nconditional branches and advanced control flow options, it\nfundamentally executes a dependency graph.\n\n```yaml\napiVersion: 1\noutput: WhaleWithFortune\ntasks:\n  GenerateFortune:\n    run: fortune\n    inputs: \"{$.Invocation.Inputs.default}\"\n\n  WhaleWithFortune:\n    run: whalesay\n    inputs: \"{$.Tasks.GenerateFortune.Output}\"\n    requires:\n    - GenerateFortune\n```\n**Task** (also called a function here) is an atomic task, the 'building block' of a workflows. \n\nCurrently there are two options for executing tasks.  First, Fission is\nused as the main function execution runtime, using _fission functions_\nas tasks.  Second, for very small tasks, such as flow control\nconstructs, _internal functions_ execute within the workflow\nengine to minimize the network overhead.\n\nA workflow execution is called a **(Workflow) Invocation**. The Fission Workflows engine\nassigns an UID invocation and stores it, persistently, in the data-store.  This allows\nusers to reference the invocation during and after the execution, such as to view the\nprogress so far.\n\nFinally, **selectors** and **data transformations** are _inline\nfunctions_ which you can use to manipulate data without having to\ncreate a task for it.  These _inline functions_ consist of commonly\nused transformations, such as getting the length of an array or\nstring.  Additionally, selectors allow users to only pass through\ncertain properties of data. In the example workflow, the JSONPath-like\nselector selects the `default` input of the invocation:\n\nSee the [docs](./Docs) for a more extensive, in-depth overview of the system.\n\n### Usage\n```bash\n#\n# Add binary environment and create two test function on your Fission setup \n#\nfission env create --name binary --image fission/binary-env\nfission function create --name whalesay --env binary --deploy examples/whales/whalesay.sh\nfission function create --name fortune --env binary --deploy examples/whales/fortune.sh\n\n#\n# Create a workflow that uses those two functions; a workflow\n# is just a function that uses the special \"workflow\" environment.\n#\nfission function create --name fortunewhale --env workflow --src examples/whales/fortunewhale.wf.yaml\n\n#\n# Map a HTTP GET to your new workflow function\n#\nfission route create --method GET --url /fortunewhale --function fortunewhale\n\n#\n# Invoke the workflow with an HTTP request\n#\ncurl $FISSION_ROUTER/fortunewhale\n``` \nSee [examples](./examples) for other workflow examples.\n\n### Installation\nSee the [installation guide](./INSTALL.md).\n\n### Compiling\nSee the [compilation guide](./compiling.md).\n\n### Status and Roadmap\n\nThis is an early release for community participation and user\nfeedback. It is under active development; none of the interfaces are\nstable yet. It should not yet be used in production!\n\nContributions are welcome in whatever form, including testing,\nexamples, use cases, or adding features. For an overview of current\nissues, checkout the [roadmap](./Docs/roadmap.md) or browse through\nthe open issues on Github.\n\nFinally, we're looking for early developer feedback -- if you do use\nFission or Fission Workflows, we'd love to hear how it's working for\nyou, what parts in particular you'd like to see improved, and so on.\n\nTalk to us on [slack](http://slack.fission.io) or\n[twitter](https://twitter.com/fissionio).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffission%2Ffission-workflows","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ffission%2Ffission-workflows","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffission%2Ffission-workflows/lists"}