{"id":13582074,"url":"https://github.com/ExpediaGroup/flyte","last_synced_at":"2025-04-06T11:32:32.833Z","repository":{"id":37760933,"uuid":"129653023","full_name":"ExpediaGroup/flyte","owner":"ExpediaGroup","description":"Flyte binds together the tools you use into easily defined, automated workflows","archived":false,"fork":false,"pushed_at":"2024-03-05T05:39:46.000Z","size":5087,"stargazers_count":88,"open_issues_count":6,"forks_count":17,"subscribers_count":17,"default_branch":"master","last_synced_at":"2025-01-26T08:11:13.578Z","etag":null,"topics":["automation","chatops","flyte","golang","ifttt","oss-portal-featured","workflow-engine","workflows"],"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/ExpediaGroup.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":"audit/flow.go","citation":null,"codeowners":"CODEOWNERS","security":"docs/security/AuthenticationAuthorization.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2018-04-15T21:36:12.000Z","updated_at":"2024-08-16T00:09:57.000Z","dependencies_parsed_at":"2024-11-05T21:34:44.719Z","dependency_job_id":"5c74239e-2e6a-4783-98fb-65d45b643370","html_url":"https://github.com/ExpediaGroup/flyte","commit_stats":null,"previous_names":["hotelsdotcom/flyte"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ExpediaGroup%2Fflyte","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ExpediaGroup%2Fflyte/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ExpediaGroup%2Fflyte/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ExpediaGroup%2Fflyte/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ExpediaGroup","download_url":"https://codeload.github.com/ExpediaGroup/flyte/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247478114,"owners_count":20945256,"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":["automation","chatops","flyte","golang","ifttt","oss-portal-featured","workflow-engine","workflows"],"created_at":"2024-08-01T15:02:25.005Z","updated_at":"2025-04-06T11:32:30.597Z","avatar_url":"https://github.com/ExpediaGroup.png","language":"Go","readme":"[![Build Status](https://github.com/ExpediaGroup/flyte/workflows/Build/badge.svg?branch=master\u0026event=push)](https://github.com/ExpediaGroup/flyte/actions?query=workflow:\"Build\"branch:\"master\")\n[![Docker Stars](https://img.shields.io/docker/stars/expediagroup/flyte.svg)](https://hub.docker.com/r/expediagroup/flyte)\n[![Docker Pulls](https://img.shields.io/docker/pulls/expediagroup/flyte.svg)](https://hub.docker.com/r/expediagroup/flyte/)\n\n\u003cp align=\"center\"\u003e\n  \u003cimg align=\"center\" src=\"https://github.com/ExpediaGroup/flyte/blob/master/docs/images/flyte_logo_compact.png\" width=\"300\"\u003e\n\u003c/p\u003e\n\n## Table of contents\n* [Overview](#overview)\n* [Getting Started](#getting-started)\n* [Running](#running)\n* [Running the tests](#running-the-tests)\n* [More resources](#more-resources)\n* [Contributing](#contributing)\n* [License](#license)\n\n## Overview\n\nFlyte binds together the tools you use into easily defined, automated workflows. It is a request-based, decoupled automation engine which allows you to define flows to enable integrated behaviour across these disparate tools.\n\nFlyte has chat-ops enabling integrations for Slack, as well as some other out-of-the-box [integrations](https://github.com/ExpediaGroup?utf8=%E2%9C%93\u0026q=flyte+pack\u0026type=\u0026language=). These integrations, or packs can be added to and extended easily by using Flyte's RESTful API.\n\nSome of the applications already in use include chat-ops based inventory management, host/container administration and orchestration, and deployment of applications into Kubernetes.\n\nAutomation is done using flows which essentially take form of \"if this happens in system A, then do this in system B\". For example you could create a flow that triggers sending an email to a team's email if their app's deployment has failed, or create a **[deployment pipeline triggered from an instant chat message](docs/images/flow.gif)**.\n\n### How it works\n\nThe Flyte-API acts as the orchestrator and is backed by a (MongoDB) database server in which Flows, Packs references and Datastore entries are stored. Before continuing with the high level architecture diagram, lets introduce some of the key concepts of Flyte:\n\n- **Flows** are a list of steps that define a particular use case - for example triggering the deploy of an app when a user types the message \"deploy foo-app 1.2.0\" in a particular chat room. Each step in a flow consists of:\n    - An **Event** that triggers it (e.g. an instant message being observed in a particular chat room).\n    - A **Criteria** that must be satisfied for the step to run (e.g: message matches certain regex).\n    - An **Action** to be executed if the criteria matches.\n\n    You can find more info about flows [here](docs/quickstart.md).\n    \n- **Packs** are self-contained apps that are responsible for executing flow actions and sending events to the flyte-api. For instance, [flyte-slack-pack](https://github.com/ExpediaGroup/flyte-slack) consumes events/messages from a slack channel but also sends messages via Slack. \n- **DataStores** are basically configuration properties shared between flows. For instance, list of environments, urls, etc.\n\n![component diagram](docs/images/component_diag.png)\n\n#### How are flows executed\n \n1. Packs consume events from external services - for example, a Slack message from a specific channel.\n1. Packs transform these external events to flyte events before pushing them to Flyte-API.\n1. Flyte-API receives an event and triggers any flow which is listening to that event.\n1. This flow execution will create an action and flyte-api will store it in its database.\n1. Packs will poll for new actions to Flyte-API.\n1. Flyte-API will assign an action to a pack.\n1. Pack will execute the action and return the result as a new event, which will trigger the next step in our current flow or a different one.\n\n\n![component diagram](docs/images/api_to_pack.png)  \n\n\u003e_Flyte-API / Flyte Pack interaction: The Flyte Pack queries Flyte-API which returns a response._ \n\n## Getting Started\n   \nCheck out the [Quick Start](docs/quickstart.md) documentation to get started on building new flows or custom packs.\n\n## Running\n\nThe are a number of ways to run flyte and its mongo db.\nNote that the default mongo host and port for flyte is `localhost:27017` (this value can be changed using the\n`FLYTE_MGO_HOST` env variable).\n\nThe port number can be overridden, see [Configuration](docs/configuration.md#port-configuration)\n\nOnce running, flyte will be available on http://localhost:8080 (TLS disabled), or http://localhost:8443 (TLS enabled).\n  \n\n\n#### From Source\n\nPre-req: must have [modules](https://github.com/golang/go/wiki/Modules) installed and Go 1.11 or higher.\n\nBuild \u0026 run:\n\n```\nmake run\n```\n\nCommand starts mongo docker container and flyte go executable in the background. Output is written to `flyte.out` file.\n\nor manually...\n\n```\ngo test ./... -tags=\"integration acceptance\" //remove tags if only want to run unit tests\ndocker run -d -p 27017:27017 --name mongo mongo:latest\ngo build \u0026\u0026 ./flyte\n```\n\n#### Using Docker\n\n```\nmake docker-run\n```\n\nor manually...\n\n\n```\ndocker run -d -p 27017:27017 --name mongo mongo:latest\ndocker build -t flyte:latest .\ndocker run -p 8080:8080 -e FLYTE_MGO_HOST=mongo -d --name flyte --link mongo:mongo flyte:latest\n \n```\n\n## Running the tests\n\n### Acceptance Tests\n\nFor acceptance tests:\n\n```bash\ngo test ./... -tags=acceptance\n```\n\nThese will start a disposable docker mongo container and flyte on randomly available TCP ports. If mongo can't be started (e.g docker is not available in the path),\ntests will be skipped and won't fail the build.\n\nAcceptance tests will not run when building flyte in docker.\n\nThe tests can be run in an IDE by running the test suite in \"acceptance_test.go\".\n\n### Integration Tests\n\nFor integration tests:\n\n```bash\ngo test ./... -tags=integration\n```\n\nFor the mongo db integration tests, which are slower running:\n\n```bash\ngo test ./... -tags=db\n```\n\nTo run both:\n\n```bash\ngo test ./... -tags=\"integration db\"\n```\n\nPlease note that both unit and integration tests will run using the above command/s.\n\n### Postman\n\nThere are a number of postman files in [postman](postman) folder that can be used to test running flyte\n\n## More resources\n- [Security](docs/security/security.md)\n- [Audit](docs/audit.md)\n- [Configuration](docs/configuration.md)\n- [Flows](docs/flows.md)\n- [Packs](docs/packs.md)\n- [DataStores](docs/datastores.md)\n\n## Contributing\n\nPlease read [CONTRIBUTING.md](docs/contributing/overview.md) for details on our code of conduct, and the process for submitting pull requests to us.\n\n## License\nThis project is licensed under the Apache License License - see the [LICENSE](LICENSE) file for details\n\n","funding_links":[],"categories":["Go","Building"],"sub_categories":["Workflows"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FExpediaGroup%2Fflyte","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FExpediaGroup%2Fflyte","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FExpediaGroup%2Fflyte/lists"}