From f12094c761c721b6d1e6c0a040ccf66c7e16c7e9 Mon Sep 17 00:00:00 2001 From: Samhita Alla Date: Tue, 25 Apr 2023 16:19:49 +0530 Subject: [PATCH 1/9] Update README Signed-off-by: Samhita Alla --- README.md | 393 +++++++++++++----------------------------------------- 1 file changed, 89 insertions(+), 304 deletions(-) diff --git a/README.md b/README.md index ac2a7a314f..fe94254e71 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,3 @@ -

Flyte and LF AI & Data Logo

@@ -8,338 +7,124 @@

- 💻 🛳 🚀 + 💻 ⚙️ 🚀

- -Code. Ship. Scale. - + + Build. Deploy. Scale. +

-

- Flyte is a workflow automation platform for complex, mission-critical data, and ML processes at scale -

+Flyte is an **open-source orchestrator** that facilitates building production-grade data and ML pipelines. It operates in a distributed environment and is built for scalability and reproducibility, leveraging Kubernetes as its underlying platform. With Flyte, user teams can construct pipelines using the Python SDK, and seamlessly deploy them on both cloud and on-premises environments.

- Current Release + Current Release - Sandbox Build + Sandbox Status - End-to-End Tests + Test Status - License - - Commit Activity - - Commits since Last Release - - GitHub Milestones Completed - - GitHub Next Milestone Percentage - - Docs + License - OpenSSF Best Practices + OpenSSF Best Practices - Flyte Helm Chart + Flyte Helm Chart - Twitter Follow + Flyte Twitter - Join Flyte Slack + Flyte Slack

- Website · - Quickstart + Get Started · Documentation · - Live Roadmap - · - Changelogs - · - Components -
- Support: - Slack · - Discussions · - Office Hours -

- - - ---- -# What is Flyte? -Flyte is a structured programming and distributed processing platform that enables highly concurrent, scalable, and maintainable workflows for `Machine Learning` and `Data Processing`. It is a fabric that connects disparate computation backends using a type-safe data dependency graph. It records all changes to a pipeline, making it possible to rewind time. It also stores -a history of all executions and provides an intuitive UI, CLI, and REST/gRPC API to interact with the computation. - -Flyte is more than a workflow engine -- it uses `workflow` as a core concept, and `task` (a single unit of execution) as a top-level concept. Multiple tasks arranged in a data -producer-consumer order creates a workflow. - -`Workflows` and `Tasks` can be written in any language, with out-of-the-box support for [Python](https://github.com/flyteorg/flytekit), [Java and Scala](https://github.com/spotify/flytekit-java). -Flyte was designed to manage the complexity that arises in Data and ML teams and ensure they keep up their high velocity of delivering business impacting features. One way it achieves this is by separating -the control-plane from the user-plane. Thus, every organization can offer Flyte as a service to their end-users where the service is managed by folks who are more infrastructure-focused, while the users use the intuitive interface of Flytekit. - -## ⁉️ Why Flyte - -- Kubernetes-native workflow automation platform -- Ergonomic SDKs in Python, Java, and Scala -- Versioned, auditable, and reproducible pipelines -- Data-aware and strongly-typed -- Resource-aware and deployments at scale - -| ![Flyte UI](https://raw.githubusercontent.com/flyteorg/static-resources/main/common/first_run_console.gif) | -| :--------------------------------------------------------------------------------------------------------: | -| *✨ Flyte UI ✨* | -___ -# Quickstart - -**NOTE**: If you want to try Flyte in the browser without installing anything locally, visit the [Flyte Hosted Sandbox](https://sandbox.union.ai/) -___ -1. Ensure you're using Python version >=`3.7`, <=`3.10` -2. Install Flytekit, Flyte's Python SDK: -```bash -$ pip install flytekit -``` -3. Then install flytectl, the CLI for interacting with a Flyte backend: -```bash -brew install flyteorg/homebrew-tap/flytectl -``` -**You're all set!** - -For installation instructions for other operating systems and how to run an example workflow, visit the [Getting Started guide](https://docs.flyte.org/projects/cookbook/en/latest/index.html#)! -## ⭐️ Organizations/projects using Flyte (excerpt) - - - -- [appliedAI Initiative](https://appliedai.de) -- [Blackshark.ai](https://blackshark.ai/) -- [Freenome](https://www.freenome.com/) -- [Gojek](https://www.gojek.io/) -- [Hurb](https://www.hurb.com/) -- [Intel](https://www.intel.com/) -- [LatchBio](https://www.latch.bio/) -- [Level 5 Global Autonomous (Woven Planet)](https://level-5.global/) -(...) -**Check [ADOPTERS](https://github.com/flyteorg/community/blob/main/ADOPTERS.md) for the full list and how to add your org/project** - -

- 🔥 Features -

- - -
- -- Used at _Scale_ in production by multiple firms and projects. -- Proved to scale to more than **1 million** executions, and **40+ million** containers -- Data Aware and Resource Aware (Allows organizations to separate concerns - users can use the API, platforms/infra teams can manage the deployments and scaling) -- Enables **collaboration across your organization** by: - - Executing distributed data pipelines/workflows - - Making it easy to stitch together workflows from different teams and domain experts and share them across teams - - Comparing results of training workflows over time and across pipelines - - Simplifying the complexity of multi-step, multi-owner workflows -- **[Get Started quickly](https://docs.flyte.org/projects/cookbook/en/latest/index.html)** -- start locally and scale to the cloud instantly -- **gRPC / REST** interface to define and execute tasks and workflows -- **Typesafe** construction of pipelines -- each task has an interface characterized by its input and output, so illegal construction of pipelines fails during declaration, rather than at runtime -- Supports multiple **[data types](https://docs.flyte.org/projects/cookbook/en/latest/auto/core/type_system/index.html)** for machine learning and data processing pipelines, such as Blobs (images, arbitrary files), Directories, Schema (columnar structured data), collections, maps, etc. -- Memoization and Lineage tracking -- Provides logging and observability -- Workflow features: - - Start with one task, convert to a pipeline, attach **[multiple schedules](https://docs.flyte.org/projects/cookbook/en/latest/auto/core/scheduled_workflows/lp_schedules.html#sphx-glr-auto-core-scheduled-workflows-lp-schedules-py)**, trigger using a programmatic API, or on-demand - - Parallel step execution - - Extensible backend to add **[customized plugin](https://docs.flyte.org/projects/flytekit/en/latest/tasks.extend.html#custom-tasks)** experience (with simplified user experience) - - **[Branching](https://docs.flyte.org/projects/cookbook/en/latest/auto/core/control_flow/conditions.html)** - - Workflow of workflows - **[subworkflows](https://docs.flyte.org/projects/cookbook/en/latest/auto/core/control_flow/subworkflows.html)** (a workflow can be embedded within one node of the top-level workflow) - - Distributed **remote external workflows** (a remote workflow can be triggered and statically verified at compile time) - - **[Array Tasks](https://docs.flyte.org/projects/cookbook/en/latest/auto/core/control_flow/map_task.html)** (map a function over a large dataset -- ensures controlled execution of thousands of containers) - - **[Dynamic workflows](https://docs.flyte.org/projects/cookbook/en/latest/auto/core/control_flow/dynamics.html)** creation and execution with runtime type safety - - [Flytekit plugins](https://docs.flyte.org/projects/flytekit/en/latest/plugins/index.html#plugins) with first-class support in Python - - Arbitrary Flytekit-less containers tasks ([RawContainer](https://docs.flyte.org/projects/cookbook/en/latest/auto/core/containerization/raw_container.html)) -- Guaranteed **[reproducibility](https://docs.flyte.org/projects/cookbook/en/latest/auto/core/flyte_basics/task_cache.html)** of pipelines via: - - Versioned data, code, and models - - Automatically tracked executions - - Declarative pipelines -- **Multi-cloud support** (AWS, GCP, and others) -- No single point of failure, and is resilient by design -- Automated notifications to Slack, Email, and Pagerduty -- [Multi K8s cluster support](https://docs.flyte.org/projects/cookbook/en/latest/auto/integrations/kubernetes/pod/index.html) -- Out of the box support to run **[Spark jobs on K8s](https://docs.flyte.org/projects/cookbook/en/latest/auto/integrations/kubernetes/k8s_spark/index.html)**, **[Dask jobs on K8s](https://docs.flyte.org/projects/cookbook/en/latest/auto/integrations/kubernetes/k8s_dask/index.html)**, **[Hive queries](https://docs.flyte.org/projects/cookbook/en/latest/auto/integrations/external_services/hive/index.html)**, etc. -- Snappy Console & Golang CLI (Flytectl) -- Written in **Golang** and optimized for jobs that run for a long period of time. -- [Grafana templates](https://grafana.com/orgs/flyte) (user/system observability) -- Deploy with Helm and Kustomize - -
- -## 🔌 Available Plugins - -Check out the [current list of plugins](https://docs.flyte.org/projects/flytekit/en/latest/plugins/index.html#plugins) and how to use them - - - - - -____ -## Contributing - -There are many ways in which you can participate in this project, including: - -* Submit [bugs](https://github.com/flyteorg/flyte/issues/new?assignees=&labels=bug%2Cuntriaged&template=bug_report.yaml&title=%5BBUG%5D+) and [feature requests](https://github.com/flyteorg/flyte/issues/new?assignees=&labels=enhancement%2Cuntriaged&template=feature_request.yaml&title=%5BCore+feature%5D+) for different components - -* Review [the documentation](https://docs.flyte.org/en/latest/) and make [pull requests](https://github.com/flyteorg/flytesnacks) for anything from typos to additional and new content -* Speak or write about Flyte or any other ecosystem integration and [let us know](https://flyte-org.slack.com/archives/C02JMT8KTEE)! -* Grab a [`help wanted`](https://github.com/flyteorg/flyte/issues?q=is%3Aopen+is%3Aissue+label%3A%22help+wanted%22+) or [`good-first-issue`](https://github.com/flyteorg/flyte/issues?q=is%3Aopen+is%3Aissue+label%3A%22good+first+issue%22) and follow the [CONTRIBUTING](https://docs.flyte.org/en/latest/community/contribute.html#contribute-flyte) guide to submit changes to the codebase -* Upvote [popular feature requests](https://github.com/flyteorg/flyte/issues?q=is%3Aopen+is%3Aissue+label%3Aenhancement+sort%3Areactions-%2B1-desc) - - - -

- 🛣️ Live Roadmap -

- - -Live roadmap for the project can be found @[Github Live Roadmap](https://github.com/orgs/flyteorg/projects/3) - - - - -

- 📄 RFCs (Request for Comments) & Proposals -

- - -Flyte is a community-driven and community-owned software. It is managed using -a steering committee and encourages collaboration. The community has a long -roadmap for Flyte, but there might be interesting -ideas, extensions, or additions that you may want to propose. This is -usually done by starting with: - -- [Github Issue](https://github.com/flyteorg/flyte/issues): we maintain issues for all repos in the main flyte repo. -- Writing down your proposal using a [documented RFC process](rfc/.). - -RFCs are encouraged for larger changes. -You are welcome to hop into our [Slack](https://flyte-org.slack.com/archives/C04NJPLRWUX) and talk to the community -if you want to test the waters before proposing. - -

- 📦 Component Repos + Roadmap

- - -
- -| Repo | Language | Purpose | Status | -| ------------------------------------------------------------ | ------------- | ---------------------------------------------- | ---------------- | -| [flyte](https://github.com/flyteorg/flyte) | Kustomize,RST | deployment, documentation, issues | Production-grade | -| [flyteidl](https://github.com/flyteorg/flyteidl) | Protobuf | gRPC/REST API, Workflow language spec | Production-grade | -| [flytepropeller](https://github.com/flyteorg/flytepropeller) | Go | execution engine | Production-grade | -| [flyteadmin](https://github.com/flyteorg/flyteadmin) | Go | control plane | Production-grade | -| [flytekit](https://github.com/flyteorg/flytekit) | Python | python SDK and tools | Production-grade | -| [flyteconsole](https://github.com/flyteorg/flyteconsole) | Typescript | Flyte UI | Production-grade | -| [datacatalog](https://github.com/flyteorg/datacatalog) | Go | manage input & output artifacts | Production-grade | -| [flyteplugins](https://github.com/flyteorg/flyteplugins) | Go | Flyte Backend plugins | Production-grade | -| [flytecopilot](https://github.com/flyteorg/flytecopilot) | Go | Sidecar to manage input/output for sdk-less | Production-grade | -| [flytestdlib](https://github.com/flyteorg/flytestdlib) | Go | standard library | Production-grade | -| [flytesnacks](https://github.com/flyteorg/flytesnacks) | Python | examples, tips, and tricks | Maintained | -| [flytekit-java](https://github.com/flyteorg/flytekit-java) | Java/Scala | Java & scala SDK for authoring Flyte workflows | Incubating | -| [flytectl](https://github.com/flyteorg/flytectl) | Go | A standalone Flyte CLI | Production-grade | -| [homebrew-tap](https://github.com/flyteorg/homebrew-tap) | Ruby | Tap for downloadable flyte tools (cli etc) | Production-grade | -| [bazel-rules](https://github.com/flyteorg/bazelrules_flyte) | skylark/py | Use Bazel to build Flyte workflows and tasks | Incubating | - -
- -_____ - -

- 🤝 Community & Resources -

- - -Use the following resources to communicate with Flyte maintainers, contributors and other community members to ask questions and enhance your learning experience: - -### Asynchronous - -- [Slack](https://slack.flyte.org) -- [Mailing list](https://lists.lfaidata.foundation/g/flyte-announce/join) -- [GitHub Discussions](https://github.com/flyteorg/flyte/discussions) - -### Social media -- [Twitter](https://twitter.com/flyteorg) -- [LinkedIn Discussion Group](https://www.linkedin.com/groups/13962256/) - -## Meetings -### Biweekly Community Sync - -- 📣 **Flyte OSS Community Sync** -Join this meeting to learn from other users how they are leveraging Flyte for different use cases, ask questions or continue community-related discussions -* When: every other Tuesday, 9:00 am - 10:00 am PT. -* Where: [Zoom](https://us04web.zoom.us/j/71298741279?pwd=TDR1RUppQmxGaDRFdzBOa2lHN1dsZz09) bridge -* Previous meetings: [[notes](https://docs.google.com/document/d/1EPR-BqWi8t7OF_forVflM8lWLm1T-_IE2_5_HGeyGlo/edit?usp=sharing)| [recordings](https://www.youtube.com/@flyteorg/playlists)] - -* Subscribe to the [calendar](https://lists.lfaidata.foundation/g/flyte-announce/ics/12031983/2145304139/feed.ics) - -### Office Hours - -Receive support from Flyte maintainers: - -* When: weekly on Wednesdays -* How: schedule a 30 min session from one of the available slots (7AM, 1PM and 9PM PT) using [this link](https://calendly.com/flyte-office-hours-01/30min) - -### Knowledge Base - -Find answers to the FAQs at [Knowledge Base](https://discuss.flyte.org): our minified StackOverflow and magnified Slack. - -### Conference Talks & Podcasts - -Videos and recordings can be found on Flyte's YouTube channel under the [Conference Talks and Podcasts](https://www.youtube.com/playlist?list=PLmQd1BBY9MWouwgSeivMoA4ldSyRcRj_-) playlist. - -### Podcasts -
-- MLOps Coffee Session - [Why You Need More Than Airflow](http://go.mlops.community/Oz48gY) -- Kelsey Hightower Twitter Space - [Machine Learning in Production](https://twitter.com/i/spaces/1ZkKzbXLekWKv) -- Contributor.fyi - [Flyte with Ketan Umare](https://www.contributor.fyi/flyte) -- TWIML&AI - [Scalable and Maintainable ML Workflows at Lyft - Flyte](https://twimlai.com/twiml-talk-343-scalable-and-maintainable-workflows-at-lyft-with-flyte-w-haytham-abuelfutuh-and-ketan-umare/) -- Software Engineering Daily - [Flyte: Lyft Data Processing Platform](https://softwareengineeringdaily.com/2020/03/12/flyte-lyft-data-processing-platform-with-allyson-gale-and-ketan-umare/) -- MLOps Coffee session - [Flyte: an open-source tool for scalable, extensible, and portable workflows](https://anchor.fm/mlops/episodes/MLOps-Coffee-Sessions-12-Flyte-an-open-source-tool-for-scalable--extensible---and-portable-workflows-eksa5k) -- Open Data Science - [West Warm Up session with Ketan Umare - Creator of Flyte](https://twitter.com/odsc/status/1451594432369758212) - -
- -## 🧪 Functional Tests Matrix - -We run a suite of [tests](https://github.com/flyteorg/flytesnacks/blob/master/cookbook/flyte_tests_manifest.json) to ensure that basic functionality and a subset of the integrations work across a variety of release versions. Those tests are run in a cluster where specific versions of the Flyte components (such as flyteconsole, flyteadmin, datacatalog, and flytepropeller) are installed, including the released versions and also the latest versions in the case of the nighly runs. - -The table below has different release versions as the columns and the result of each test suite as rows: - -
-
- -| workflow group | nightly | v1.0.1 | v1.0.0 | v0.19.4 | -| ------------------------------- | ------------------------------------------------------------------------------------------------------------------ | ----------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------ | -| core | ![core](https://byob.yarr.is/unionai/gh-badges/nightly/core) | ![core](https://byob.yarr.is/unionai/gh-badges/v1.0.1/core) | ![core](https://byob.yarr.is/unionai/gh-badges/v1.0.0/core) | ![core](https://byob.yarr.is/unionai/gh-badges/v0.19.4/core) | -| integrations-hive | ![integration-hive](https://byob.yarr.is/unionai/gh-badges/nightly/integrations-hive) | ![integration-hive](https://byob.yarr.is/unionai/gh-badges/v1.0.1/integrations-hive) | ![integration-hive](https://byob.yarr.is/unionai/gh-badges/v1.0.0/integrations-hive) | ![integration-hive](https://byob.yarr.is/unionai/gh-badges/v0.19.4/integrations-hive) | -| integrations-k8s-spark | ![integrations-k8s-spark](https://byob.yarr.is/unionai/gh-badges/nightly/integrations-k8s-spark) | ![integrations-k8s-spark](https://byob.yarr.is/unionai/gh-badges/v1.0.1/integrations-k8s-spark) | ![integrations-k8s-spark](https://byob.yarr.is/unionai/gh-badges/v1.0.0/integrations-k8s-spark) | ![integrations-k8s-spark](https://byob.yarr.is/unionai/gh-badges/v0.19.4/integrations-k8s-spark) | -| integrations-kfpytorch | ![integrations-kfpytorch](https://byob.yarr.is/unionai/gh-badges/nightly/integrations-kfpytorch) | ![integrations-kfpytorch](https://byob.yarr.is/unionai/gh-badges/v1.0.1/integrations-kfpytorch) | ![integrations-kfpytorch](https://byob.yarr.is/unionai/gh-badges/v1.0.0/integrations-kfpytorch) | ![integrations-kfpytorch](https://byob.yarr.is/unionai/gh-badges/v0.19.4/integrations-kfpytorch) | -| integrations-pod | ![integrations-pod](https://byob.yarr.is/unionai/gh-badges/nightly/integrations-pod) | ![integrations-pod](https://byob.yarr.is/unionai/gh-badges/v1.0.1/integrations-pod) | ![integrations-pod](https://byob.yarr.is/unionai/gh-badges/v1.0.0/integrations-pod) | ![integrations-pod](https://byob.yarr.is/unionai/gh-badges/v0.19.4/integrations-pod) | -| integrations-pandera_examples | ![integrations-pandera_examples](https://byob.yarr.is/unionai/gh-badges/nightly/integrations-pandera_examples) | ![integrations-pandera_examples](https://byob.yarr.is/unionai/gh-badges/v1.0.1/integrations-pandera_examples) | ![integrations-pandera_examples](https://byob.yarr.is/unionai/gh-badges/v1.0.0/integrations-pandera_examples) | ![integrations-pandera_examples](https://byob.yarr.is/unionai/gh-badges/v0.19.4/integrations-pandera_examples) | -| integrations-papermilltasks | ![integrations-papermilltasks](https://byob.yarr.is/unionai/gh-badges/nightly/integrations-papermilltasks) | ![integrations-papermilltasks](https://byob.yarr.is/unionai/gh-badges/v1.0.1/integrations-papermilltasks) | ![integrations-papermilltasks](https://byob.yarr.is/unionai/gh-badges/v1.0.0/integrations-papermilltasks) | ![integrations-papermilltasks](https://byob.yarr.is/unionai/gh-badges/v0.19.4/integrations-papermilltasks) | -| integrations-greatexpectations | ![integrations-greatexpectations](https://byob.yarr.is/unionai/gh-badges/nightly/integrations-greatexpectations) | ![integrations-greatexpectations](https://byob.yarr.is/unionai/gh-badges/v1.0.1/integrations-greatexpectations) | ![integrations-greatexpectations](https://byob.yarr.is/unionai/gh-badges/v1.0.0/integrations-greatexpectations) | ![integrations-greatexpectations](https://byob.yarr.is/unionai/gh-badges/v0.19.4/integrations-greatexpectations) | -| integrations-sagemaker-pytorch | ![integrations-sagemaker-pytorch](https://byob.yarr.is/unionai/gh-badges/nightly/integrations-sagemaker-pytorch) | ![integrations-sagemaker-pytorch](https://byob.yarr.is/unionai/gh-badges/v1.0.1/integrations-sagemaker-pytorch) | ![integrations-sagemaker-pytorch](https://byob.yarr.is/unionai/gh-badges/v1.0.0/integrations-sagemaker-pytorch) | ![integrations-sagemaker-pytorch](https://byob.yarr.is/unionai/gh-badges/v0.19.4/integrations-sagemaker-pytorch) | -| integrations-sagemaker-training | ![integrations-sagemaker-training](https://byob.yarr.is/unionai/gh-badges/nightly/integrations-sagemaker-training) | ![integrations-sagemaker-training](https://byob.yarr.is/unionai/gh-badges/v1.0.1/integrations-sagemaker-training) | ![integrations-sagemaker-training](https://byob.yarr.is/unionai/gh-badges/v1.0.0/integrations-sagemaker-training) | ![integrations-sagemaker-training](https://byob.yarr.is/unionai/gh-badges/v0.19.4/integrations-sagemaker-training) | - -
-
+
+Getting started with Flyte +--- -## 💖 Contributors +## Features + +- **Strongly typed interfaces**: Validate your data at every step of the workflow by defining data guardrails using Flyte types. +- **Any language**: Write code in any language using raw containers, or choose [Python](https://github.com/flyteorg/flytekit), [Java](https://github.com/flyteorg/flytekit-java), [Scala](https://github.com/flyteorg/flytekit-java) or [JavaScript](https://github.com/NotMatthewGriffin/pterodactyl) SDKs to develop your Flyte workflows. +- **Map tasks**: Achieve parallel code execution with minimal configuration using [map tasks](https://docs.flyte.org/projects/cookbook/en/latest/auto/core/control_flow/map_task.html). +- **Dynamic workflows**: [Build flexible and adaptable workflows](https://docs.flyte.org/projects/cookbook/en/latest/auto/core/control_flow/dynamics.html) that can change and evolve as needed, making it easier to respond to changing requirements. +- **Branching**: [Selectively execute branches](https://docs.flyte.org/projects/cookbook/en/latest/auto/core/control_flow/conditions.html) of your workflow based on static or dynamic data produced by other tasks or input data. +- **FlyteFile & FlyteDirectory**: Transfer [files](https://docs.flyte.org/projects/cookbook/en/latest/auto/core/flyte_basics/files.html) and [directories](https://docs.flyte.org/projects/cookbook/en/latest/auto/core/flyte_basics/folders.html) between local and cloud storage. +- **Structured dataset**: Convert dataframes between types and enforce column-level type checking using the abstract 2D representation provided by [Structured Dataset](https://docs.flyte.org/projects/cookbook/en/latest/auto/core/type_system/structured_dataset.html). +- **Recover from failures**: Recover only the failed tasks. +- **Rerun a single task**: Rerun workflows at the most granular level without modifying the previous state of a data/ML workflow. +- **Versioned workflows**: Reproduce results and roll back to a previous workflow version any time. +- **Cache outputs**: Cache task outputs by passing `cache=True` to the task decorator. +- **Intra-task checkpointing**: [Checkpoint progress](https://docs.flyte.org/projects/cookbook/en/latest/auto/core/control_flow/checkpoint.html) within a task execution. +- **Multi-tenancy**: Multiple users can share the same platform while maintaining their own distinct data and configurations. +- **Timeout**: Define a timeout period, after which the task is marked as failure. +- **Immutability**: Immutable executions help ensure reproducibility by preventing any changes to the state of an execution. +- **Data lineage**: Track the movement and transformation of data throughout the lifecycle of your data and ML workflows. +- **Data visualization**: Visualize data, monitor models and view training history through plots. +- **Dev to prod**: As simple as changing your [domain](https://docs.flyte.org/en/latest/concepts/domains.html) from development or staging to production. +- **Spot or preemptible instances**: Schedule your workflows on spot instances by setting `interruptible` to `True` in the task decorator. +- **Cloud-native deployment**: Deploy Flyte on AWS, GCP, Azure and other cloud services. +- **Scheduling**: [Schedule](https://docs.flyte.org/projects/cookbook/en/latest/auto/core/scheduled_workflows/lp_schedules.html) your data and ML workflows to run at a specific time. +- **Notifications**: Stay informed about changes to your workflow's state by configuring [notifications](https://docs.flyte.org/projects/cookbook/en/latest/auto/deployment/lp_notifications.html) through Slack, PagerDuty or email. +- **Timeline view**: Evaluate the duration of each of your Flyte tasks and identify potential bottlenecks. +- **GPU acceleration**: Enable and control your tasks’ GPU demands by requesting resources in the task decorator. +- **Dependency isolation via containers**: Maintain separate sets of dependencies for your tasks so no dependency conflicts arise. +- **Parallelism**: Flyte tasks are inherently parallel to optimize resource consumption and improve performance. +- **Allocate resources dynamically** at the task level. +- [Wait](https://docs.flyte.org/projects/cookbook/en/latest/auto/core/control_flow/waiting_for_external_inputs.html) for **external inputs** before proceeding with the execution. + +## Quickstart + +If you want to try out Flyte, the easiest way to get started is by using the Flyte Hosted Sandbox, available at https://sandbox.union.ai/. It allows you to experiment with Flyte's capabilities without installing anything on your local machine. + +However, if you prefer to install Flyte locally and run a workflow, our [getting started guide](https://docs.flyte.org/projects/cookbook/en/latest/index.html) is the best place to start. It provides step-by-step instructions on how to install Flyte and run your first workflow. + +If you're unsure what a Flyte [task](https://docs.flyte.org/projects/cookbook/en/latest/auto/core/flyte_basics/task.html) and [workflow](https://docs.flyte.org/projects/cookbook/en/latest/auto/core/flyte_basics/basic_workflow.html) are, be sure to check out our guides on both! + +## Adopters + +Join the likes of LinkedIn, Spotify, Freenome, Pachama, Gojek, and Woven Planet in adopting Flyte. For a full list of adopters and information on how to add your organization or project, please visit our [ADOPTERS](https://github.com/flyteorg/community/blob/main/ADOPTERS.md) page. + +## Roadmap + +Stay up to date with the latest project roadmap by checking out our live [roadmap](https://github.com/orgs/flyteorg/projects/3) on GitHub. + +## Resources + +- [Weekly office hours](https://calendly.com/flyte-office-hours-01/30min): Live informal sessions with the Flyte team held every week. Book a 30-minute slot and get your questions answered. +- [Biweekly community sync](https://www.addevent.com/event/EA7823958): A biweekly event where the Flyte team provides updates on the project and community members can share their progress and ask questions. +- [Slack](https://slack.flyte.org/): Join the Flyte community on Slack to chat with other users, ask questions, and get help. +- [GitHub](https://github.com/flyteorg/flyte): Check out the Flyte project on GitHub to file issues, contribute code, and stay up to date on the latest development. +- [Youtube](https://www.youtube.com/channel/UCNduEoLOToNo3nFVly-vUTQ): Tune into panel discussions, customer success stories, community updates and feature deep dives. +- [Blog](https://flyte.org/blog): Check out the tutorials and feature deep dives. +- [RFCs](rfc/.): RFCs contain our existing product proposals. + +## How to Contribute + +There are many ways to get involved in this project, including: + +* Submitting [bugs](https://github.com/flyteorg/flyte/issues/new?assignees=&labels=bug%2Cuntriaged&template=bug_report.yaml&title=%5BBUG%5D+) and [feature requests](https://github.com/flyteorg/flyte/issues/new?assignees=&labels=enhancement%2Cuntriaged&template=feature_request.yaml&title=%5BCore+feature%5D+) for different components. +* Reviewing [the documentation](https://docs.flyte.org/en/latest/) and submitting [pull requests](https://github.com/flyteorg/flytesnacks) for anything from typos to additional and new content. +* Speaking or writing about Flyte or any other ecosystem integration and [letting us know](https://flyte-org.slack.com/archives/C02JMT8KTEE)! +* Picking up a [`help wanted`](https://github.com/flyteorg/flyte/issues?q=is%3Aopen+is%3Aissue+label%3A%22help+wanted%22+) or [`good-first-issue`](https://github.com/flyteorg/flyte/issues?q=is%3Aopen+is%3Aissue+label%3A%22good+first+issue%22) and following the [CONTRIBUTING](https://docs.flyte.org/en/latest/community/contribute.html#contribute-flyte) guide to submit changes to the codebase. +* Upvoting [popular feature requests](https://github.com/flyteorg/flyte/issues?q=is%3Aopen+is%3Aissue+label%3Aenhancement+sort%3Areactions-%2B1-desc). A big thank you to the community for making Flyte possible! [![953358](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/953358?v=4&w=50&h=50&mask=circle)](https://github.com/katrogan)[![37090125](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/37090125?v=4&w=50&h=50&mask=circle)](https://github.com/lyft-metaservice-3)[![7597118](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/7597118?v=4&w=50&h=50&mask=circle)](https://github.com/matthewphsmith)[![27159](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/27159?v=4&w=50&h=50&mask=circle)](https://github.com/EngHabu)[![29843943](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/29843943?v=4&w=50&h=50&mask=circle)](https://github.com/goreleaserbot)[![10830562](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/10830562?v=4&w=50&h=50&mask=circle)](https://github.com/evalsocket)[![8888115](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/8888115?v=4&w=50&h=50&mask=circle)](https://github.com/hamersaw)[![78108056](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/78108056?v=4&w=50&h=50&mask=circle)](https://github.com/flyte-bot)[![158892](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/158892?v=4&w=50&h=50&mask=circle)](https://github.com/honnix)[![18408237](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/18408237?v=4&w=50&h=50&mask=circle)](https://github.com/anandswaminathan)[![2896568](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/2896568?v=4&w=50&h=50&mask=circle)](https://github.com/wild-endeavor)[![1518524](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/1518524?v=4&w=50&h=50&mask=circle)](https://github.com/bnsblue)[![37936015](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/37936015?v=4&w=50&h=50&mask=circle)](https://github.com/pingsutw)[![27724763](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/27724763?v=4&w=50&h=50&mask=circle)](https://github.com/iaroslav-ciupin)[![16888709](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/16888709?v=4&w=50&h=50&mask=circle)](https://github.com/kumare3)[![27777173](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/27777173?v=4&w=50&h=50&mask=circle)](https://github.com/samhita-alla)[![452166](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/452166?v=4&w=50&h=50&mask=circle)](https://github.com/MorpheusXAUT)[![4748985](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/4748985?v=4&w=50&h=50&mask=circle)](https://github.com/aliabbasjaffri)[![6562898](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/6562898?v=4&w=50&h=50&mask=circle)](https://github.com/ckiosidis)[![6239450](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/6239450?v=4&w=50&h=50&mask=circle)](https://github.com/mayitbeegh)[![8805803](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/8805803?v=4&w=50&h=50&mask=circle)](https://github.com/alexlipa91)[![5032356](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/5032356?v=4&w=50&h=50&mask=circle)](https://github.com/brucearctor)[![77798312](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/77798312?v=4&w=50&h=50&mask=circle)](https://github.com/pmahindrakar-oss)[![23062603](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/23062603?v=4&w=50&h=50&mask=circle)](https://github.com/Antaxify)[![653394](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/653394?v=4&w=50&h=50&mask=circle)](https://github.com/eapolinario)[![5725707](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/5725707?v=4&w=50&h=50&mask=circle)](https://github.com/andrewwdye)[![8122852](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/8122852?v=4&w=50&h=50&mask=circle)](https://github.com/ariefrahmansyah)[![10869815](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/10869815?v=4&w=50&h=50&mask=circle)](https://github.com/jeevb)[![3880645](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/3880645?v=4&w=50&h=50&mask=circle)](https://github.com/jonathanburns)[![3936213](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/3936213?v=4&w=50&h=50&mask=circle)](https://github.com/lu4nm3)[![26174213](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/26174213?v=4&w=50&h=50&mask=circle)](https://github.com/lyft-metaservice-2)[![9142716](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/9142716?v=4&w=50&h=50&mask=circle)](https://github.com/2uasimojo)[![5487021](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/5487021?v=4&w=50&h=50&mask=circle)](https://github.com/veggiemonk)[![1815175](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/1815175?v=4&w=50&h=50&mask=circle)](https://github.com/schottra)[![46989299](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/46989299?v=4&w=50&h=50&mask=circle)](https://github.com/supreeth7)[![2816689](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/2816689?v=4&w=50&h=50&mask=circle)](https://github.com/cosmicBboy)[![19375241](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/19375241?v=4&w=50&h=50&mask=circle)](https://github.com/migueltol22)[![6065051](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/6065051?v=4&w=50&h=50&mask=circle)](https://github.com/milton0825)[![70988](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/70988?v=4&w=50&h=50&mask=circle)](https://github.com/slai)[![94349093](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/94349093?v=4&w=50&h=50&mask=circle)](https://github.com/SmritiSatyanV)[![16090976](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/16090976?v=4&w=50&h=50&mask=circle)](https://github.com/surindersinghp)[![43610471](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/43610471?v=4&w=50&h=50&mask=circle)](https://github.com/TheYk98)[![53313394](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/53313394?v=4&w=50&h=50&mask=circle)](https://github.com/kosigz-lyft)[![4967458](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/4967458?v=4&w=50&h=50&mask=circle)](https://github.com/chanadian)[![467927](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/467927?v=4&w=50&h=50&mask=circle)](https://github.com/kanterov)[![248688](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/248688?v=4&w=50&h=50&mask=circle)](https://github.com/hanzo)[![1330233](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/1330233?v=4&w=50&h=50&mask=circle)](https://github.com/igorvalko)[![31255434](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/31255434?v=4&w=50&h=50&mask=circle)](https://github.com/kennyworkman)[![1472826](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/1472826?v=4&w=50&h=50&mask=circle)](https://github.com/maximsmol)[![5026554](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/5026554?v=4&w=50&h=50&mask=circle)](https://github.com/vsbus)[![34587798](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/34587798?v=4&w=50&h=50&mask=circle)](https://github.com/akhurana001)[![11799671](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/11799671?v=4&w=50&h=50&mask=circle)](https://github.com/bstadlbauer)[![95110820](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/95110820?v=4&w=50&h=50&mask=circle)](https://github.com/jerempy)[![38207208](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/38207208?v=4&w=50&h=50&mask=circle)](https://github.com/tnsetting)[![8200209](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/8200209?v=4&w=50&h=50&mask=circle)](https://github.com/catalinii)[![24364830](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/24364830?v=4&w=50&h=50&mask=circle)](https://github.com/ByronHsu)[![43587819](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/43587819?v=4&w=50&h=50&mask=circle)](https://github.com/chetcode)[![163899](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/163899?v=4&w=50&h=50&mask=circle)](https://github.com/regadas)[![36511035](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/36511035?v=4&w=50&h=50&mask=circle)](https://github.com/fg91)[![22784654](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/22784654?v=4&w=50&h=50&mask=circle)](https://github.com/aybidi)[![1316881](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/1316881?v=4&w=50&h=50&mask=circle)](https://github.com/akashkatipally)[![1777447](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/1777447?v=4&w=50&h=50&mask=circle)](https://github.com/goyalankit)[![1360529](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/1360529?v=4&w=50&h=50&mask=circle)](https://github.com/clairemcginty)[![104257](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/104257?v=4&w=50&h=50&mask=circle)](https://github.com/flixr)[![2538760](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/2538760?v=4&w=50&h=50&mask=circle)](https://github.com/akumor)[![11970258](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/11970258?v=4&w=50&h=50&mask=circle)](https://github.com/niliayu)[![19733683](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/19733683?v=4&w=50&h=50&mask=circle)](https://github.com/snyk-bot)[![155087](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/155087?v=4&w=50&h=50&mask=circle)](https://github.com/derwiki)[![1399455](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/1399455?v=4&w=50&h=50&mask=circle)](https://github.com/th0114nd)[![21109744](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/21109744?v=4&w=50&h=50&mask=circle)](https://github.com/AlekhyaSasi)[![49699333](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/in/29110?v=4&w=50&h=50&mask=circle)](https://github.com/apps/dependabot)[![1810591](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/1810591?v=4&w=50&h=50&mask=circle)](https://github.com/asottile)[![80421934](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/80421934?v=4&w=50&h=50&mask=circle)](https://github.com/SandraGH5)[![3939659](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/3939659?v=4&w=50&h=50&mask=circle)](https://github.com/sbrunk)[![9609986](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/9609986?v=4&w=50&h=50&mask=circle)](https://github.com/sonjaer)[![12219405](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/12219405?v=4&w=50&h=50&mask=circle)](https://github.com/fediazgon)[![98349643](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/98349643?v=4&w=50&h=50&mask=circle)](https://github.com/rahul-theorem)[![16509490](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/16509490?v=4&w=50&h=50&mask=circle)](https://github.com/ryankarlos)[![6774758](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/6774758?v=4&w=50&h=50&mask=circle)](https://github.com/ddhirajkumar)[![18337807](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/18337807?v=4&w=50&h=50&mask=circle)](https://github.com/max-hoffman)[![322624](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/322624?v=4&w=50&h=50&mask=circle)](https://github.com/AdrianoKF)[![1168692](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/1168692?v=4&w=50&h=50&mask=circle)](https://github.com/dennisobrien)[![91385411](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/91385411?v=4&w=50&h=50&mask=circle)](https://github.com/Ln11211)[![30621230](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/30621230?v=4&w=50&h=50&mask=circle)](https://github.com/aeioulisa)[![54334265](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/54334265?v=4&w=50&h=50&mask=circle)](https://github.com/michaels-lyft)[![48736656](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/48736656?v=4&w=50&h=50&mask=circle)](https://github.com/murilommen)[![17165004](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/17165004?v=4&w=50&h=50&mask=circle)](https://github.com/RobertoRRW)[![30375389](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/30375389?v=4&w=50&h=50&mask=circle)](https://github.com/bimtauer)[![97543480](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/97543480?v=4&w=50&h=50&mask=circle)](https://github.com/esadler-hbo)[![69013027](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/69013027?v=4&w=50&h=50&mask=circle)](https://github.com/ggydush-fn)[![116700206](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/116700206?v=4&w=50&h=50&mask=circle)](https://github.com/kiliangojek)[![422486](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/422486?v=4&w=50&h=50&mask=circle)](https://github.com/bethebunny)[![54333860](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/54333860?v=4&w=50&h=50&mask=circle)](https://github.com/aalavian)[![7005765](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/7005765?v=4&w=50&h=50&mask=circle)](https://github.com/convexquad)[![4025771](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/4025771?v=4&w=50&h=50&mask=circle)](https://github.com/andresgomezfrr)[![48966647](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/48966647?v=4&w=50&h=50&mask=circle)](https://github.com/asahalyft)[![77167782](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/77167782?v=4&w=50&h=50&mask=circle)](https://github.com/apatel-fn)[![23013825](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/23013825?v=4&w=50&h=50&mask=circle)](https://github.com/arpitbhardwaj)[![31381038](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/31381038?v=4&w=50&h=50&mask=circle)](https://github.com/lordnodd)[![4396228](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/4396228?v=4&w=50&h=50&mask=circle)](https://github.com/bryanwweber)[![6288302](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/6288302?v=4&w=50&h=50&mask=circle)](https://github.com/CalvinLeather)[![23107192](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/23107192?v=4&w=50&h=50&mask=circle)](https://github.com/YmirKhang)[![121866694](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/121866694?v=4&w=50&h=50&mask=circle)](https://github.com/franco-bocci)[![7358951](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/7358951?v=4&w=50&h=50&mask=circle)](https://github.com/frsann)[![33652917](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/33652917?v=4&w=50&h=50&mask=circle)](https://github.com/hfurkanvural)[![6984748](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/6984748?v=4&w=50&h=50&mask=circle)](https://github.com/jbrambleDC)[![488594](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/488594?v=4&w=50&h=50&mask=circle)](https://github.com/jcugat)[![20173739](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/20173739?v=4&w=50&h=50&mask=circle)](https://github.com/madhur-tandon)[![34498039](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/34498039?v=4&w=50&h=50&mask=circle)](https://github.com/matheusMoreno)[![19853373](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/19853373?v=4&w=50&h=50&mask=circle)](https://github.com/NotMatthewGriffin)[![10376195](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/10376195?v=4&w=50&h=50&mask=circle)](https://github.com/myz540)[![125105](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/125105?v=4&w=50&h=50&mask=circle)](https://github.com/tekumara)[![1153481](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/1153481?v=4&w=50&h=50&mask=circle)](https://github.com/ppiegaze)[![37170063](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/37170063?v=4&w=50&h=50&mask=circle)](https://github.com/Qiwen-Yu)[![2614101](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/2614101?v=4&w=50&h=50&mask=circle)](https://github.com/RobinKa)[![4308533](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/4308533?v=4&w=50&h=50&mask=circle)](https://github.com/rubenbarragan)[![10201242](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/10201242?v=4&w=50&h=50&mask=circle)](https://github.com/sugatoray)[![11269256](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/11269256?v=4&w=50&h=50&mask=circle)](https://github.com/sushrut111)[![61228633](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/61228633?v=4&w=50&h=50&mask=circle)](https://github.com/Tat-V)[![13070236](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/13070236?v=4&w=50&h=50&mask=circle)](https://github.com/TeoZosa)[![8817639](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/8817639?v=4&w=50&h=50&mask=circle)](https://github.com/ThomVett)[![17309187](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/17309187?v=4&w=50&h=50&mask=circle)](https://github.com/datability-io)[![26834658](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/26834658?v=4&w=50&h=50&mask=circle)](https://github.com/techytushar)[![5092599](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/5092599?v=4&w=50&h=50&mask=circle)](https://github.com/vchowdhary)[![57967031](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/57967031?v=4&w=50&h=50&mask=circle)](https://github.com/varshaparthay)[![67166843](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/67166843?v=4&w=50&h=50&mask=circle)](https://github.com/vvasavada-fn)[![1778407](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/1778407?v=4&w=50&h=50&mask=circle)](https://github.com/ybubnov)[![51814063](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/51814063?v=4&w=50&h=50&mask=circle)](https://github.com/Yicheng-Lu-llll)[![3741621](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/3741621?v=4&w=50&h=50&mask=circle)](https://github.com/palchicz)[![12450632](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/12450632?v=4&w=50&h=50&mask=circle)](https://github.com/ajsalow)[![35151789](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/35151789?v=4&w=50&h=50&mask=circle)](https://github.com/ggydush)[![13331724](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/13331724?v=4&w=50&h=50&mask=circle)](https://github.com/martinlyra)[![119345186](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/119345186?v=4&w=50&h=50&mask=circle)](https://github.com/mcloney-ddm)[![1521126](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/1521126?v=4&w=50&h=50&mask=circle)](https://github.com/pbrogan12)[![73247359](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/73247359?v=4&w=50&h=50&mask=circle)](https://github.com/stef-stripe)[![50860453](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/50860453?v=4&w=50&h=50&mask=circle)](https://github.com/charlie0220)[![6506810](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/6506810?v=4&w=50&h=50&mask=circle)](https://github.com/stephen37)[![55718143](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/55718143?v=4&w=50&h=50&mask=circle)](https://github.com/anrusina)[![65977800](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/65977800?v=4&w=50&h=50&mask=circle)](https://github.com/service-github-lyft-semantic-release)[![6610300](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/6610300?v=4&w=50&h=50&mask=circle)](https://github.com/ursucarina)[![84735036](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/84735036?v=4&w=50&h=50&mask=circle)](https://github.com/jsonporter)[![85753828](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/85753828?v=4&w=50&h=50&mask=circle)](https://github.com/csirius)[![101579322](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/101579322?v=4&w=50&h=50&mask=circle)](https://github.com/olga-union)[![26953709](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/26953709?v=4&w=50&h=50&mask=circle)](https://github.com/Pianist038801)[![105876962](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/105876962?v=4&w=50&h=50&mask=circle)](https://github.com/james-union)[![25038146](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/25038146?v=4&w=50&h=50&mask=circle)](https://github.com/eugenejahn)[![88684372](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/88684372?v=4&w=50&h=50&mask=circle)](https://github.com/4nalog)[![99441958](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/99441958?v=4&w=50&h=50&mask=circle)](https://github.com/apTalya)[![1388071](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/1388071?v=4&w=50&h=50&mask=circle)](https://github.com/aviaviavi)[![58770001](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/58770001?v=4&w=50&h=50&mask=circle)](https://github.com/Professional0321)[![20668349](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/20668349?v=4&w=50&h=50&mask=circle)](https://github.com/HiromuHota)[![100569684](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/100569684?v=4&w=50&h=50&mask=circle)](https://github.com/rafaelraposospot)[![17351764](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/17351764?v=4&w=50&h=50&mask=circle)](https://github.com/daniel-shuy)[![6399428](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/6399428?v=4&w=50&h=50&mask=circle)](https://github.com/live-wire)[![25695302](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/25695302?v=4&w=50&h=50&mask=circle)](https://github.com/sisco0)[![18363301](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/18363301?v=4&w=50&h=50&mask=circle)](https://github.com/jimbobby5)[![4023015](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/4023015?v=4&w=50&h=50&mask=circle)](https://github.com/pradithya)[![3451399](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/3451399?v=4&w=50&h=50&mask=circle)](https://github.com/skiptomyliu)[![25364490](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/25364490?v=4&w=50&h=50&mask=circle)](https://github.com/haoyuez)[![50679871](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/50679871?v=4&w=50&h=50&mask=circle)](https://github.com/lupasarin)[![7548823](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/7548823?v=4&w=50&h=50&mask=circle)](https://github.com/Dread1982)[![7515359](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/7515359?v=4&w=50&h=50&mask=circle)](https://github.com/narape)[![31982395](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/31982395?v=4&w=50&h=50&mask=circle)](https://github.com/alexapdev)[![62209650](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/62209650?v=4&w=50&h=50&mask=circle)](https://github.com/3t8)[![1892175](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/1892175?v=4&w=50&h=50&mask=circle)](https://github.com/zeryx)[![200401](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/200401?v=4&w=50&h=50&mask=circle)](https://github.com/arturdryomov)[![13770222](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/13770222?v=4&w=50&h=50&mask=circle)](https://github.com/ChickenTarm)[![2380665](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/2380665?v=4&w=50&h=50&mask=circle)](https://github.com/DavidMertz)[![24739949](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/24739949?v=4&w=50&h=50&mask=circle)](https://github.com/felixwang9817)[![10430635](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/10430635?v=4&w=50&h=50&mask=circle)](https://github.com/juandiegopalomino)[![31911175](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/31911175?v=4&w=50&h=50&mask=circle)](https://github.com/kanyesthaker)[![104152793](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/104152793?v=4&w=50&h=50&mask=circle)](https://github.com/marc-union)[![27818609](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/27818609?v=4&w=50&h=50&mask=circle)](https://github.com/michaeltinsley)[![6486584](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/6486584?v=4&w=50&h=50&mask=circle)](https://github.com/mucahitkantepe)[![321459](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/321459?v=4&w=50&h=50&mask=circle)](https://github.com/oyevtushok)[![35962310](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/35962310?v=4&w=50&h=50&mask=circle)](https://github.com/trishitapingolia)[![91927689](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/91927689?v=4&w=50&h=50&mask=circle)](https://github.com/Smartmind12)[![726061](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/726061?v=4&w=50&h=50&mask=circle)](https://github.com/huxuan)[![47872044](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/47872044?v=4&w=50&h=50&mask=circle)](https://github.com/privatedumbo)[![105229971](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/105229971?v=4&w=50&h=50&mask=circle)](https://github.com/tjKairos)[![405480](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/405480?v=4&w=50&h=50&mask=circle)](https://github.com/georgesnelling)[![1004789](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/1004789?v=4&w=50&h=50&mask=circle)](https://github.com/dschaller)[![82604841](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/82604841?v=4&w=50&h=50&mask=circle)](https://github.com/davidmirror-ops)[![480621](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/480621?v=4&w=50&h=50&mask=circle)](https://github.com/davidxia)[![1335881](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/1335881?v=4&w=50&h=50&mask=circle)](https://github.com/hoyajigi)[![100597998](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/100597998?v=4&w=50&h=50&mask=circle)](https://github.com/MrKrishnaAgarwal)[![4830700](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/4830700?v=4&w=50&h=50&mask=circle)](https://github.com/NitinAgg)[![69161722](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/69161722?v=4&w=50&h=50&mask=circle)](https://github.com/noobkid2411)[![43336767](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/43336767?v=4&w=50&h=50&mask=circle)](https://github.com/yongchand)[![25391173](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/25391173?v=4&w=50&h=50&mask=circle)](https://github.com/nicklofaso)[![66388192](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/66388192?v=4&w=50&h=50&mask=circle)](https://github.com/mounesi)[![14992189](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/14992189?v=4&w=50&h=50&mask=circle)](https://github.com/eanakhl)[![1175392](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/1175392?v=4&w=50&h=50&mask=circle)](https://github.com/adinin)[![7475946](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/7475946?v=4&w=50&h=50&mask=circle)](https://github.com/anton-malakhov)[![11796986](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/11796986?v=4&w=50&h=50&mask=circle)](https://github.com/avan-sh)[![304786](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/304786?v=4&w=50&h=50&mask=circle)](https://github.com/kinow)[![24402505](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/24402505?v=4&w=50&h=50&mask=circle)](https://github.com/Daeruin)[![1659415](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/1659415?v=4&w=50&h=50&mask=circle)](https://github.com/dav009)[![86911142](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/86911142?v=4&w=50&h=50&mask=circle)](https://github.com/idivyanshbansal)[![11456773](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/11456773?v=4&w=50&h=50&mask=circle)](https://github.com/fvde)[![7490199](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/7490199?v=4&w=50&h=50&mask=circle)](https://github.com/Lundez)[![10345184](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/10345184?v=4&w=50&h=50&mask=circle)](https://github.com/hasukmistry)[![29532638](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/29532638?v=4&w=50&h=50&mask=circle)](https://github.com/rokrokss)[![14008978](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/14008978?v=4&w=50&h=50&mask=circle)](https://github.com/jeremydonahue)[![9272376](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/9272376?v=4&w=50&h=50&mask=circle)](https://github.com/jonasdebeukelaer)[![1633460](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/1633460?v=4&w=50&h=50&mask=circle)](https://github.com/jmcarp)[![3033592](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/3033592?v=4&w=50&h=50&mask=circle)](https://github.com/kazesberger)[![19229049](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/19229049?v=4&w=50&h=50&mask=circle)](https://github.com/lsena)[![36594527](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/36594527?v=4&w=50&h=50&mask=circle)](https://github.com/mishmanners)[![8755869](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/8755869?v=4&w=50&h=50&mask=circle)](https://github.com/paravatha)[![6528449](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/6528449?v=4&w=50&h=50&mask=circle)](https://github.com/uschi2000)[![790725](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/790725?v=4&w=50&h=50&mask=circle)](https://github.com/rodrigobaron)[![576968](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/576968?v=4&w=50&h=50&mask=circle)](https://github.com/ronaldosaheki)[![36827492](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/36827492?v=4&w=50&h=50&mask=circle)](https://github.com/shahwar9)[![133936](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/133936?v=4&w=50&h=50&mask=circle)](https://github.com/shihgianlee)[![10438373](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/10438373?v=4&w=50&h=50&mask=circle)](https://github.com/SKalt)[![33272587](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/33272587?v=4&w=50&h=50&mask=circle)](https://github.com/samuel-sujith)[![580328](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/580328?v=4&w=50&h=50&mask=circle)](https://github.com/ilikedata)[![1027207](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/1027207?v=4&w=50&h=50&mask=circle)](https://github.com/orf)[![16526627](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/16526627?v=4&w=50&h=50&mask=circle)](https://github.com/vijaysaravana)[![10526540](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/10526540?v=4&w=50&h=50&mask=circle)](https://github.com/yubofredwang)[![5346764](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/5346764?v=4&w=50&h=50&mask=circle)](https://github.com/fsz285)[![22917741](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/22917741?v=4&w=50&h=50&mask=circle)](https://github.com/gigi-at-zymergen)[![40143026](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/40143026?v=4&w=50&h=50&mask=circle)](https://github.com/hampusrosvall)[![77197126](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/77197126?v=4&w=50&h=50&mask=circle)](https://github.com/hitarth01)[![300315](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/300315?v=4&w=50&h=50&mask=circle)](https://github.com/jcourteau)[![106815366](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/106815366?v=4&w=50&h=50&mask=circle)](https://github.com/jw0515)[![1568889](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/1568889?v=4&w=50&h=50&mask=circle)](https://github.com/leorleor)[![937967](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/937967?v=4&w=50&h=50&mask=circle)](https://github.com/moose007)[![114232404](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/114232404?v=4&w=50&h=50&mask=circle)](https://github.com/sanjaychouhan-adf)[![14996868](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/14996868?v=4&w=50&h=50&mask=circle)](https://github.com/v01dXYZ)[![93438190](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/93438190?v=4&w=50&h=50&mask=circle)](https://github.com/wanderer163)[![1043051](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/1043051?v=4&w=50&h=50&mask=circle)](https://github.com/kylewaynebenson)[![21953442](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/21953442?v=4&w=50&h=50&mask=circle)](https://github.com/Gui11aum3)[![16461847](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/16461847?v=4&w=50&h=50&mask=circle)](https://github.com/JakeNeyer)[![64676594](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/64676594?v=4&w=50&h=50&mask=circle)](https://github.com/abhijeet007rocks8)[![1174730](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/1174730?v=4&w=50&h=50&mask=circle)](https://github.com/mouuff)[![20135478](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/20135478?v=4&w=50&h=50&mask=circle)](https://github.com/Juneezee)[![151841](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/151841?v=4&w=50&h=50&mask=circle)](https://github.com/goodgravy)[![44368997](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/44368997?v=4&w=50&h=50&mask=circle)](https://github.com/radiantly)[![36989112](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/36989112?v=4&w=50&h=50&mask=circle)](https://github.com/nishantwrp)[![7144772](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/7144772?v=4&w=50&h=50&mask=circle)](https://github.com/sighingnow)[![697033](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/697033?v=4&w=50&h=50&mask=circle)](https://github.com/vglocus)[![2845540](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/2845540?v=4&w=50&h=50&mask=circle)](https://github.com/RustedBones)[![4056828](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/4056828?v=4&w=50&h=50&mask=circle)](https://github.com/pablocasares)[![1071153](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/1071153?v=4&w=50&h=50&mask=circle)](https://github.com/evdokim)[![5732047](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/5732047?v=4&w=50&h=50&mask=circle)](https://github.com/stormy-ua)[![471021](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/471021?v=4&w=50&h=50&mask=circle)](https://github.com/marschall)[![71284190](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/71284190?v=4&w=50&h=50&mask=circle)](https://github.com/gdungca-fn)[![26265392](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/26265392?v=4&w=50&h=50&mask=circle)](https://github.com/ttanay)[![85021780](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/85021780?v=4&w=50&h=50&mask=circle)](https://github.com/Abdullahi-Ahmed)[![48512530](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/48512530?v=4&w=50&h=50&mask=circle)](https://github.com/amaleelhamri)[![3275593](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/3275593?v=4&w=50&h=50&mask=circle)](https://github.com/pradyunsg)[![66853113](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/in/68672?v=4&w=50&h=50&mask=circle)](https://github.com/apps/pre-commit-ci)[![1834509](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/1834509?v=4&w=50&h=50&mask=circle)](https://github.com/jdknight)[![107893](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/107893?v=4&w=50&h=50&mask=circle)](https://github.com/kmike)[![1324225](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/1324225?v=4&w=50&h=50&mask=circle)](https://github.com/hugovk)[![1300022](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/1300022?v=4&w=50&h=50&mask=circle)](https://github.com/sirosen)[![244656](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/244656?v=4&w=50&h=50&mask=circle)](https://github.com/humitos)[![467294](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/467294?v=4&w=50&h=50&mask=circle)](https://github.com/bastimeyer)[![71486](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/71486?v=4&w=50&h=50&mask=circle)](https://github.com/asmeurer)[![20280470](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/20280470?v=4&w=50&h=50&mask=circle)](https://github.com/drewyh)[![3533182](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/3533182?v=4&w=50&h=50&mask=circle)](https://github.com/polyzen)[![199429](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/199429?v=4&w=50&h=50&mask=circle)](https://github.com/dvarrazzo)[![1032633](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/1032633?v=4&w=50&h=50&mask=circle)](https://github.com/dbitouze)[![1313087](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/1313087?v=4&w=50&h=50&mask=circle)](https://github.com/idryzhov)[![521097](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/521097?v=4&w=50&h=50&mask=circle)](https://github.com/pauloxnet)[![63936253](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/63936253?v=4&w=50&h=50&mask=circle)](https://github.com/ichard26)[![18519037](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/18519037?v=4&w=50&h=50&mask=circle)](https://github.com/sethmlarson)[![413772](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/413772?v=4&w=50&h=50&mask=circle)](https://github.com/graingert)[![11478411](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/11478411?v=4&w=50&h=50&mask=circle)](https://github.com/stonecharioteer)[![6739793](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/6739793?v=4&w=50&h=50&mask=circle)](https://github.com/yeraydiazdiaz)[![83365562](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/83365562?v=4&w=50&h=50&mask=circle)](https://github.com/eviau-sat)[![6670894](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/6670894?v=4&w=50&h=50&mask=circle)](https://github.com/rozsasarpi)[![86675](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/86675?v=4&w=50&h=50&mask=circle)](https://github.com/estan)[![4748863](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/4748863?v=4&w=50&h=50&mask=circle)](https://github.com/pseudomuto)[![181308](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/181308?v=4&w=50&h=50&mask=circle)](https://github.com/htdvisser)[![1390277](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/1390277?v=4&w=50&h=50&mask=circle)](https://github.com/jacobtolar)[![1391982](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/1391982?v=4&w=50&h=50&mask=circle)](https://github.com/ezimanyi)[![3880001](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/3880001?v=4&w=50&h=50&mask=circle)](https://github.com/lpabon)[![770392](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/770392?v=4&w=50&h=50&mask=circle)](https://github.com/ArcEye)[![6178510](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/6178510?v=4&w=50&h=50&mask=circle)](https://github.com/mingrammer)[![5111931](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/5111931?v=4&w=50&h=50&mask=circle)](https://github.com/aschrijver)[![873434](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/873434?v=4&w=50&h=50&mask=circle)](https://github.com/panzerfahrer)[![16724](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/16724?v=4&w=50&h=50&mask=circle)](https://github.com/glasser)[![17330872](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/17330872?v=4&w=50&h=50&mask=circle)](https://github.com/murph0)[![419419](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/419419?v=4&w=50&h=50&mask=circle)](https://github.com/zetaron)[![1014](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/1014?v=4&w=50&h=50&mask=circle)](https://github.com/sunfmin)[![504507](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/504507?v=4&w=50&h=50&mask=circle)](https://github.com/guozheng)[![8841470](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/8841470?v=4&w=50&h=50&mask=circle)](https://github.com/suusan2go)[![901479](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/901479?v=4&w=50&h=50&mask=circle)](https://github.com/mhaberler)[![6400253](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/6400253?v=4&w=50&h=50&mask=circle)](https://github.com/s4ichi)[![353644](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/353644?v=4&w=50&h=50&mask=circle)](https://github.com/dreampuf)[![12421077](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/12421077?v=4&w=50&h=50&mask=circle)](https://github.com/UnicodingUnicorn)[![809865](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/809865?v=4&w=50&h=50&mask=circle)](https://github.com/philiptzou)[![19378](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/19378?v=4&w=50&h=50&mask=circle)](https://github.com/timabell)[![1113245](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/1113245?v=4&w=50&h=50&mask=circle)](https://github.com/jasonhancock)[![101659](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/101659?v=4&w=50&h=50&mask=circle)](https://github.com/matryer)[![4730508](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/4730508?v=4&w=50&h=50&mask=circle)](https://github.com/piotrrojek)[![33036160](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/33036160?v=4&w=50&h=50&mask=circle)](https://github.com/jasonsattler)[![470810](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/470810?v=4&w=50&h=50&mask=circle)](https://github.com/sbward)[![7592392](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/7592392?v=4&w=50&h=50&mask=circle)](https://github.com/Pisush)[![94814](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/94814?v=4&w=50&h=50&mask=circle)](https://github.com/tamalsaha)[![8147854](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/8147854?v=4&w=50&h=50&mask=circle)](https://github.com/marianina8)[![1005](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/1005?v=4&w=50&h=50&mask=circle)](https://github.com/ernesto-jimenez)[![17263167](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/17263167?v=4&w=50&h=50&mask=circle)](https://github.com/jsteenb2)[![2807589](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/2807589?v=4&w=50&h=50&mask=circle)](https://github.com/darwayne)[![1683714](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/1683714?v=4&w=50&h=50&mask=circle)](https://github.com/naysayer)[![6386887](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/6386887?v=4&w=50&h=50&mask=circle)](https://github.com/AgrimPrasad)[![615811](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/615811?v=4&w=50&h=50&mask=circle)](https://github.com/dahernan)[![75184](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/75184?v=4&w=50&h=50&mask=circle)](https://github.com/jtarchie)[![469669](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/469669?v=4&w=50&h=50&mask=circle)](https://github.com/jdtobe)[![28523](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/28523?v=4&w=50&h=50&mask=circle)](https://github.com/alrs)[![10113228](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/10113228?v=4&w=50&h=50&mask=circle)](https://github.com/urisimchoni)[![5751464](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/5751464?v=4&w=50&h=50&mask=circle)](https://github.com/Xercoy)[![2405410](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/2405410?v=4&w=50&h=50&mask=circle)](https://github.com/marbergq)[![5082160](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/5082160?v=4&w=50&h=50&mask=circle)](https://github.com/anothrNick)[![11335612](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/11335612?v=4&w=50&h=50&mask=circle)](https://github.com/fermoya)[![23391642](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/23391642?v=4&w=50&h=50&mask=circle)](https://github.com/sbe-arg)[![1024762](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/1024762?v=4&w=50&h=50&mask=circle)](https://github.com/PeerXu)[![7390781](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/7390781?v=4&w=50&h=50&mask=circle)](https://github.com/reececomo)[![49680](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/49680?v=4&w=50&h=50&mask=circle)](https://github.com/dmerrick)[![87524](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/87524?v=4&w=50&h=50&mask=circle)](https://github.com/andrewcole)[![866505](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/866505?v=4&w=50&h=50&mask=circle)](https://github.com/phish108)[![2611549](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/2611549?v=4&w=50&h=50&mask=circle)](https://github.com/endrjuskr)[![49961058](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/49961058?v=4&w=50&h=50&mask=circle)](https://github.com/bevans-HD)[![5655837](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/5655837?v=4&w=50&h=50&mask=circle)](https://github.com/gukoff)[![8320753](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/8320753?v=4&w=50&h=50&mask=circle)](https://github.com/lovromazgon)[![16513382](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/16513382?v=4&w=50&h=50&mask=circle)](https://github.com/117)[![3807434](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/3807434?v=4&w=50&h=50&mask=circle)](https://github.com/tomsolem)[![118945041](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/118945041?v=4&w=50&h=50&mask=circle)](https://github.com/vq-ambiata)[![8232503](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/8232503?v=4&w=50&h=50&mask=circle)](https://github.com/sjauld)[![69170839](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/69170839?v=4&w=50&h=50&mask=circle)](https://github.com/adam-berrio)[![6388483](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/6388483?v=4&w=50&h=50&mask=circle)](https://github.com/zsedem)[![8296645](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/8296645?v=4&w=50&h=50&mask=circle)](https://github.com/imdanielsp)[![17337515](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/17337515?v=4&w=50&h=50&mask=circle)](https://github.com/fabricepipart)[![10090384](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/10090384?v=4&w=50&h=50&mask=circle)](https://github.com/ivanpk)[![2302957](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/2302957?v=4&w=50&h=50&mask=circle)](https://github.com/JeremyLWright)[![995707](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/995707?v=4&w=50&h=50&mask=circle)](https://github.com/OskarStark)[![25486791](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/25486791?v=4&w=50&h=50&mask=circle)](https://github.com/pavyarov)[![5067549](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/5067549?v=4&w=50&h=50&mask=circle)](https://github.com/pellared)[![53085803](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/53085803?v=4&w=50&h=50&mask=circle)](https://github.com/cuttingedge1109)[![62775347](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/62775347?v=4&w=50&h=50&mask=circle)](https://github.com/okozachenko1203)[![25625597](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/25625597?v=4&w=50&h=50&mask=circle)](https://github.com/zero-below)[![282792](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/282792?v=4&w=50&h=50&mask=circle)](https://github.com/asford)[![38894122](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/38894122?v=4&w=50&h=50&mask=circle)](https://github.com/bmcconeghy)[![16698198](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/16698198?v=4&w=50&h=50&mask=circle)](https://github.com/conda-forge-admin)[![36490558](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/36490558?v=4&w=50&h=50&mask=circle)](https://github.com/regro-cf-autotick-bot)[![79913779](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/in/102928?v=4&w=50&h=50&mask=circle)](https://github.com/apps/conda-forge-curator)[![41898282](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/in/15368?v=4&w=50&h=50&mask=circle)](https://github.com/apps/github-actions)[![18567580](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/18567580?v=4&w=50&h=50&mask=circle)](https://github.com/conda-forge-linter)[![26092524](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/26092524?v=4&w=50&h=50&mask=circle)](https://github.com/fellhorn) + + +## License + +Flyte is available under the Apache License 2.0. Use it wisely. From bae9445ecba0459c6cacf1de9b4754b4bedf2f86 Mon Sep 17 00:00:00 2001 From: Samhita Alla Date: Tue, 25 Apr 2023 16:33:18 +0530 Subject: [PATCH 2/9] add self-host options Signed-off-by: Samhita Alla --- README.md | 26 +++++++++++++++----------- 1 file changed, 15 insertions(+), 11 deletions(-) diff --git a/README.md b/README.md index fe94254e71..b20ac800f3 100644 --- a/README.md +++ b/README.md @@ -42,7 +42,7 @@ Flyte is an **open-source orchestrator** that facilitates building production-gr · Documentation · - Roadmap + Resources
@@ -82,13 +82,17 @@ Flyte is an **open-source orchestrator** that facilitates building production-gr - **Allocate resources dynamically** at the task level. - [Wait](https://docs.flyte.org/projects/cookbook/en/latest/auto/core/control_flow/waiting_for_external_inputs.html) for **external inputs** before proceeding with the execution. -## Quickstart +## Quick start If you want to try out Flyte, the easiest way to get started is by using the Flyte Hosted Sandbox, available at https://sandbox.union.ai/. It allows you to experiment with Flyte's capabilities without installing anything on your local machine. -However, if you prefer to install Flyte locally and run a workflow, our [getting started guide](https://docs.flyte.org/projects/cookbook/en/latest/index.html) is the best place to start. It provides step-by-step instructions on how to install Flyte and run your first workflow. +However, if you prefer to install Flyte locally and run a workflow, our [getting started guide](https://docs.flyte.org/projects/cookbook/en/latest/index.html) is the best place to start. It provides step-by-step instructions on how to install Flyte locally and run your first workflow. -If you're unsure what a Flyte [task](https://docs.flyte.org/projects/cookbook/en/latest/auto/core/flyte_basics/task.html) and [workflow](https://docs.flyte.org/projects/cookbook/en/latest/auto/core/flyte_basics/basic_workflow.html) are, be sure to check out our guides on both! +### Deploy Flyte to production + +The [deployment guide](https://docs.flyte.org/en/latest/deployment/index.html) should be helpful to self-host and administer Flyte. + +> If you're unsure what a Flyte [task](https://docs.flyte.org/projects/cookbook/en/latest/auto/core/flyte_basics/task.html) and [workflow](https://docs.flyte.org/projects/cookbook/en/latest/auto/core/flyte_basics/basic_workflow.html) are, be sure to check out our guides on both! ## Adopters @@ -100,13 +104,13 @@ Stay up to date with the latest project roadmap by checking out our live [roadma ## Resources -- [Weekly office hours](https://calendly.com/flyte-office-hours-01/30min): Live informal sessions with the Flyte team held every week. Book a 30-minute slot and get your questions answered. -- [Biweekly community sync](https://www.addevent.com/event/EA7823958): A biweekly event where the Flyte team provides updates on the project and community members can share their progress and ask questions. -- [Slack](https://slack.flyte.org/): Join the Flyte community on Slack to chat with other users, ask questions, and get help. -- [GitHub](https://github.com/flyteorg/flyte): Check out the Flyte project on GitHub to file issues, contribute code, and stay up to date on the latest development. -- [Youtube](https://www.youtube.com/channel/UCNduEoLOToNo3nFVly-vUTQ): Tune into panel discussions, customer success stories, community updates and feature deep dives. -- [Blog](https://flyte.org/blog): Check out the tutorials and feature deep dives. -- [RFCs](rfc/.): RFCs contain our existing product proposals. +📆 [Weekly office hours](https://calendly.com/flyte-office-hours-01/30min): Live informal sessions with the Flyte team held every week. Book a 30-minute slot and get your questions answered. +👥 [Biweekly community sync](https://www.addevent.com/event/EA7823958): A biweekly event where the Flyte team provides updates on the project and community members can share their progress and ask questions. +💬 [Slack](https://slack.flyte.org/): Join the Flyte community on Slack to chat with other users, ask questions, and get help. +⚠️ [GitHub](https://github.com/flyteorg/flyte): Check out the Flyte project on GitHub to file issues, contribute code, and stay up to date on the latest development. +📹 [Youtube](https://www.youtube.com/channel/UCNduEoLOToNo3nFVly-vUTQ): Tune into panel discussions, customer success stories, community updates and feature deep dives. +📄 [Blog](https://flyte.org/blog): Check out the tutorials and feature deep dives. +💡 [RFCs](rfc/.): RFCs contain our existing product proposals. ## How to Contribute From 555a1fc864b2d8688aea123d118a78660424bd98 Mon Sep 17 00:00:00 2001 From: Samhita Alla Date: Wed, 26 Apr 2023 10:58:35 +0530 Subject: [PATCH 3/9] update contributing.md Signed-off-by: Samhita Alla --- CONTRIBUTING.md | 240 +++++++++++++- Makefile | 4 - NOTICE | 4 - README.md | 16 +- rsts/community/contribute.rst | 357 --------------------- requirements.in => stats/requirements.in | 0 requirements.txt => stats/requirements.txt | 0 7 files changed, 247 insertions(+), 374 deletions(-) delete mode 100644 NOTICE delete mode 100644 rsts/community/contribute.rst rename requirements.in => stats/requirements.in (100%) rename requirements.txt => stats/requirements.txt (100%) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index f774b84d05..7e24d6f513 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -1,3 +1,241 @@ # Contributing to Flyte -For information related to contributing to Flyte, please check out the [Contributing to Flyte](https://docs.flyte.org/en/latest/community/contribute.html) section of the documentation at the Flyte site. +Thank you for taking the time to contribute to Flyte! +Please read our [Code of Conduct](https://lfprojects.org/policies/code-of-conduct/) before contributing to Flyte. + +Here are some guidelines for you to follow, which will make your first and follow-up contributions easier. + +TL;DR: Find the repo-specific contribution guidelines in the [Component Reference](#component-reference) section. + +## Becoming a Contributor + +An issue tagged with [`good first issue`](https://github.com/flyteorg/flyte/labels/good%20first%20issue) is the best place to start for first-time contributors. + +**Appetizer for every repo: Fork and clone the concerned repository. Create a new branch on your fork and make the required changes. Create a pull request once your work is ready for review.** + +> To open a pull request, follow [the guide](https://guides.github.com/activities/forking/) by GitHub. + +Example PR for your reference: [GitHub PR](https://github.com/flyteorg/flytepropeller/pull/242). +A couple of checks are introduced to help maintain the robustness of the project. + +- To get through DCO, [sign off](https://github.com/src-d/guide/blob/master/developer-community/fix-DCO.md) on every commit. +- To improve code coverage, write unit tests to test your code. +- Make sure all the tests pass. If you face any issues, please let us know! + +On a side note, format your Go code with `golangci-lint` followed by `goimports` (use `make lint` and `make goimports`), and Python code with `black` and `isort` (use `make fmt`). +If make targets are not available, you can manually format the code. +Refer to [Effective Go](https://golang.org/doc/effective_go), [Black](https://github.com/psf/black), and [Isort](https://github.com/PyCQA/isort) for full coding standards. + +As you become more involved with the project, you may be added as a contributor to the repos you're working on, but there is a medium term effort to move all development to forks ✨. + +## Documentation + +Flyte uses Sphinx for documentation. `protoc-gen-doc` is used to generate the documentation from `.proto` files. + +Sphinx spans multiple repositories under [flyteorg](https://github.com/flyteorg). It uses reStructured Text (rst) files to store the documentation content. +For API- and code-related content, it extracts docstrings from the code files. + +To get started, refer to the [reStructuredText reference](https://www.sphinx-doc.org/en/master/usage/restructuredtext/index.html#rst-index). + +For minor edits that don’t require a local setup, you can edit the GitHub page in the documentation to propose improvements. + +### Intersphinx + +[Intersphinx](https://www.sphinx-doc.org/en/master/usage/extensions/intersphinx.html) can generate automatic links to the documentation of objects in other projects. + +To establish a reference to any other documentation from Flyte or within it, use Intersphinx. + +To do so, create an `intersphinx_mapping` in the `conf.py` file which should be present in the respective `docs` repository. +For example, `rsts` is the docs repository for the `flyte` repo. + +For example: + +```python +intersphinx_mapping = { + "python": ("https://docs.python.org/3", None), + "flytekit": ("https://flyte.readthedocs.io/projects/flytekit/en/master/", None), +} +``` + +The key refers to the name used to refer to the file (while referencing the documentation), and the URL denotes the precise location. + +You can also cross-reference multiple Python objects. Check out this [section](https://www.sphinx-doc.org/en/master/usage/restructuredtext/domains.html#cross-referencing-python-objects) to learn more. + +## Component Reference + +To understand how the below components interact with each other, refer to [Understand the lifecycle of a workflow](https://docs.flyte.org/en/latest/concepts/workflow_lifecycle.html). + +Dependency graph between various flyteorg repos + +### `flyte` + +[]() | +| ------| +| [Repo](https://github.com/flyteorg/flyte) | +| **Purpose**: Deployment, Documentation, and Issues | +| **Languages**: Kustomize & RST | + +> For the `flyte` repo, run the following command in the repo's root to generate documentation locally. +> ``` +> make -C rsts html +> ``` + +### `flyteidl` + +[]() | +| ------| +| [Repo](https://github.com/flyteorg/flyteidl) | +| **Purpose**: Flyte workflow specification is in [protocol buffers](https://developers.google.com/protocol-buffers) which forms the core of Flyte | +| **Language**: Protobuf | +| **Guidelines**: Refer to the [README](https://github.com/flyteorg/flyteidl#generate-code-from-protobuf) | + +### `flytepropeller` + +[]() | +| ------| +| [Repo](https://github.com/flyteorg/flytepropeller) | [Code Reference](https://pkg.go.dev/mod/github.com/flyteorg/flytepropeller) | +| **Purpose**: Kubernetes-native operator | +| **Language**: Go | +| **Guidelines:**
  • Check for Makefile in the root repo
  • Run the following commands:
    • `make generate`
    • `make test_unit`
    • `make link`
  • To compile, run `make compile`
| + +### `flyteadmin` + +[]() | +| ------| +| [Repo](https://github.com/flyteorg/flyteadmin) | [Code Reference](https://pkg.go.dev/mod/github.com/flyteorg/flyteadmin) | +| **Purpose**: Control Plane | +| **Language**: Go | +| **Guidelines**:
  • Check for Makefile in the root repo
  • If the service code has to be tested, run it locally:
    • `make compile`
    • `make server`
  • To seed data locally:
    • `make compile`
    • `make seed_projects`
    • `make migrate`
  • To run integration tests locally:
    • `make integration`
    • (or to run in containerized dockernetes): `make k8s_integration`
| + + +### `flytekit` + +[]() | +| ------| +| [Repo](https://github.com/flyteorg/flytekit) | +| **Purpose**: Python SDK & Tools | +| **Language**: Python | +| **Guidelines**: Refer to the [Flytekit Contribution Guide](https://docs.flyte.org/projects/flytekit/en/latest/contributing.html) | + +### `flyteconsole` + +[]() | +| ------| +| [Repo](https://github.com/flyteorg/flyteconsole) | +| **Purpose**: Admin Console | +| **Language**: Typescript | +| **Guidelines**: Refer to the [README](https://github.com/flyteorg/flyteconsole/blob/master/README.md) | + +### `datacatalog` + +[]() | +| ------| +| [Repo](https://github.com/flyteorg/datacatalog) | [Code Reference](https://pkg.go.dev/mod/github.com/flyteorg/datacatalog) | +| **Purpose**: Manage Input & Output Artifacts | +| **Language**: Go | + +### `flyteplugins` + +[]() | +| ------| +| [Repo](https://github.com/flyteorg/flyteplugins) | [Code Reference](https://pkg.go.dev/mod/github.com/flyteorg/flyteplugins) | +| **Purpose**: Flyte Plugins | +| **Language**: Go | +| **Guidelines**:
  • Check for Makefile in the root repo
  • Run the following commands:
    • `make generate`
    • `make test_unit`
    • `make link`
| + +### `flytestdlib` + +[]() | +| ------| +| [Repo](https://github.com/flyteorg/flytestdlib) | +| **Purpose**: Standard Library for Shared Components | +| **Language**: Go | + +### `flytesnacks` + +[]() | +| ------| +| [Repo](https://github.com/flyteorg/flytesnacks) | +| **Purpose**: Examples, Tips, and Tricks to use Flytekit SDKs | +| **Language**: Python (In the future, Java examples will be added) | +| **Guidelines**: Refer to the [Flytesnacks Contribution Guide](https://docs.flyte.org/projects/cookbook/en/latest/contribute.html) | + +### `flytectl` + +[]() | +| ------| +| [Repo](https://github.com/flyteorg/flytectl) | +| **Purpose**: A standalone Flyte CLI | +| **Language**: Go | +| **Guidelines**: Refer to the [FlyteCTL Contribution Guide](https://docs.flyte.org/projects/flytectl/en/stable/contribute.html) | + +## Recommended iteration cycle + +As you may have already read in other parts of the documentation, the [Flyte repository](https://github.com/flyteorg/flyte) includes Go code that integrates all backend components (admin, propeller, data catalog, console) into a single executable. The Flyte team is currently working on consolidating the core backend repositories into one repository, which is expected to be completed by 2023. In the meantime, you can contribute to the individual repositories and then merge your changes into the [Flyte repository](https://github.com/flyteorg/flyte). This setup is suitable for Go-based backend development, but it has not been tested for Flyteconsole development, which has a different development cycle. Nonetheless, this setup allows you to run the Flyte binary from your IDE, enabling you to debug your code effectively by setting breakpoints. Additionally, this setup connects you to all other resources in the demo environment, such as PostgreSQL and RDS. + +### Dev mode cluster + +To launch the dependencies, teardown any old sandboxes you may have, and then run: + +``` +flytectl demo start --dev +``` + +This command will launch the demo environment without running Flyte. By doing so, developers can run Flyte later on their host machine. + +### Set up Flyte configuration + +- Copy the file `flyte-single-binary-local.yaml` to `~/.flyte/local-dev-config.yaml`. +- Replace occurrences of `$HOME` with the actual path of your home directory. + +### Cluster resources + +One of the configuration entries you will notice is `cluster_resources.templatePath`. This folder should contain the templates that the cluster resource controller will use. To begin, you can create a file called `~/.flyte/cluster-resource-templates/00_namespace.yaml` with the following content: + +```yaml +clusterResourceTemplates: + inline: + 001_namespace.yaml: | + apiVersion: v1 + kind: Namespace + metadata: + name: '{{ namespace }}' +``` + +### Pull console artifacts + +Run the following command from the base folder of the Flyte repository to pull in the static assets for Flyteconsole: + +``` +make cmd/single/dist +``` + +### Build & iterate + +To bring in the code of the component you are testing, use the command go get `github.com/flyteorg/&gitsha`. Once you have done that, you can run the following command: + +``` +POD_NAMESPACE=flyte go run -tags console cmd/main.go start --config ~/.flyte/local-dev-config.yaml +``` + +The `POD_NAMESPACE` environment variable is necessary for the webhook to function correctly. You can also create a build target in your IDE with the same command. + +Once it is up and running, you can access Flyte hosted by your local machine by going to `localhost:30080/console`. The Docker host mapping is used to obtain the correct IP address for your local host. + +## File an Issue + +We use [GitHub Issues](https://github.com/flyteorg/flyte/issues) for issue tracking. The following issue types are available for filing an issue: + +* [Plugin Request](https://github.com/flyteorg/flyte/issues/new?assignees=&labels=untriaged%2Cplugins&template=backend-plugin-request.md&title=%5BPlugin%5D) +* [Bug Report](https://github.com/flyteorg/flyte/issues/new?assignees=&labels=bug%2C+untriaged&template=bug_report.md&title=%5BBUG%5D+) +* [Documentation Bug/Update Request](https://github.com/flyteorg/flyte/issues/new?assignees=&labels=documentation%2C+untriaged&template=docs_issue.md&title=%5BDocs%5D) +* [Core Feature Request](https://github.com/flyteorg/flyte/issues/new?assignees=&labels=enhancement%2C+untriaged&template=feature_request.md&title=%5BCore+Feature%5D) +* [Flytectl Feature Request](https://github.com/flyteorg/flyte/issues/new?assignees=&labels=enhancement%2C+untriaged%2C+flytectl&template=flytectl_issue.md&title=%5BFlytectl+Feature%5D) +* [Housekeeping](https://github.com/flyteorg/flyte/issues/new?assignees=&labels=housekeeping&template=housekeeping_template.md&title=%5BHousekeeping%5D+) +* [UI Feature Request](https://github.com/flyteorg/flyte/issues/new?assignees=&labels=enhancement%2C+untriaged%2C+ui&template=ui_feature_request.md&title=%5BUI+Feature%5D) + +If none of the above fit your requirements, file a [blank](https://github.com/flyteorg/flyte/issues/new) issue. +Also, add relevant labels to your issue. For example, if you are filing a Flytekit plugin request, add the `flytekit` label. + +For feedback at any point in the contribution process, feel free to reach out to us on [Slack](https://slack.flyte.org/). + diff --git a/Makefile b/Makefile index 290669ef0e..6acccb1452 100644 --- a/Makefile +++ b/Makefile @@ -56,10 +56,6 @@ install-piptools: ## Install pip-tools doc-requirements.txt: doc-requirements.in install-piptools $(call PIP_COMPILE,doc-requirements.in) -.PHONY: requirements.txt -requirements.txt: requirements.in install-piptools - $(call PIP_COMPILE,requirements.in) - .PHONY: stats stats: @generate-dashboard -o deployment/stats/prometheus/flytepropeller-dashboard.json stats/flytepropeller_dashboard.py diff --git a/NOTICE b/NOTICE deleted file mode 100644 index 43f19fee61..0000000000 --- a/NOTICE +++ /dev/null @@ -1,4 +0,0 @@ -flyte -Copyright 2019 Lyft Inc. - -This product includes software developed at Lyft Inc. diff --git a/README.md b/README.md index b20ac800f3..07a7645195 100644 --- a/README.md +++ b/README.md @@ -88,12 +88,12 @@ If you want to try out Flyte, the easiest way to get started is by using the Fly However, if you prefer to install Flyte locally and run a workflow, our [getting started guide](https://docs.flyte.org/projects/cookbook/en/latest/index.html) is the best place to start. It provides step-by-step instructions on how to install Flyte locally and run your first workflow. +> If you're unsure what a Flyte [task](https://docs.flyte.org/projects/cookbook/en/latest/auto/core/flyte_basics/task.html) and [workflow](https://docs.flyte.org/projects/cookbook/en/latest/auto/core/flyte_basics/basic_workflow.html) are, be sure to check out our guides on both! + ### Deploy Flyte to production The [deployment guide](https://docs.flyte.org/en/latest/deployment/index.html) should be helpful to self-host and administer Flyte. -> If you're unsure what a Flyte [task](https://docs.flyte.org/projects/cookbook/en/latest/auto/core/flyte_basics/task.html) and [workflow](https://docs.flyte.org/projects/cookbook/en/latest/auto/core/flyte_basics/basic_workflow.html) are, be sure to check out our guides on both! - ## Adopters Join the likes of LinkedIn, Spotify, Freenome, Pachama, Gojek, and Woven Planet in adopting Flyte. For a full list of adopters and information on how to add your organization or project, please visit our [ADOPTERS](https://github.com/flyteorg/community/blob/main/ADOPTERS.md) page. @@ -104,12 +104,12 @@ Stay up to date with the latest project roadmap by checking out our live [roadma ## Resources -📆 [Weekly office hours](https://calendly.com/flyte-office-hours-01/30min): Live informal sessions with the Flyte team held every week. Book a 30-minute slot and get your questions answered. -👥 [Biweekly community sync](https://www.addevent.com/event/EA7823958): A biweekly event where the Flyte team provides updates on the project and community members can share their progress and ask questions. -💬 [Slack](https://slack.flyte.org/): Join the Flyte community on Slack to chat with other users, ask questions, and get help. -⚠️ [GitHub](https://github.com/flyteorg/flyte): Check out the Flyte project on GitHub to file issues, contribute code, and stay up to date on the latest development. -📹 [Youtube](https://www.youtube.com/channel/UCNduEoLOToNo3nFVly-vUTQ): Tune into panel discussions, customer success stories, community updates and feature deep dives. -📄 [Blog](https://flyte.org/blog): Check out the tutorials and feature deep dives. +📆 [Weekly office hours](https://calendly.com/flyte-office-hours-01/30min): Live informal sessions with the Flyte team held every week. Book a 30-minute slot and get your questions answered.
+👥 [Biweekly community sync](https://www.addevent.com/event/EA7823958): A biweekly event where the Flyte team provides updates on the project and community members can share their progress and ask questions.
+💬 [Slack](https://slack.flyte.org/): Join the Flyte community on Slack to chat with other users, ask questions, and get help.
+⚠️ [GitHub](https://github.com/flyteorg/flyte): Check out the Flyte project on GitHub to file issues, contribute code, and stay up to date on the latest development.
+📹 [Youtube](https://www.youtube.com/channel/UCNduEoLOToNo3nFVly-vUTQ): Tune into panel discussions, customer success stories, community updates and feature deep dives.
+📄 [Blog](https://flyte.org/blog): Check out the tutorials and feature deep dives.
💡 [RFCs](rfc/.): RFCs contain our existing product proposals. ## How to Contribute diff --git a/rsts/community/contribute.rst b/rsts/community/contribute.rst deleted file mode 100644 index d018dadac9..0000000000 --- a/rsts/community/contribute.rst +++ /dev/null @@ -1,357 +0,0 @@ -.. _contribute_Flyte: - -##################### -Contributing to Flyte -##################### - -.. tags:: Contribute, Basic - -Thank you for taking the time to contribute to Flyte! -Please read our `Code of Conduct `__ before contributing to Flyte. - -Here are some guidelines for you to follow, which will make your first and follow-up contributions easier. - -TL;DR: Find the repo-specific contribution guidelines in the `Component Reference <#component-reference>`__ section. - -💻 Becoming a Contributor -========================= - -An issue tagged with ``good first issue`` is the best place to start for first-time contributors. You can find them `here `__. - -**Appetizer for every repo: Fork and clone the concerned repository. Create a new branch on your fork and make the required changes. Create a pull request once your work is ready for review.** - -.. note:: - To open a pull request, follow `this guide `__. - -Example PR for your reference: `GitHub PR `__. -A couple of checks are introduced to help maintain the robustness of the project. - -#. To get through DCO, sign off on every commit (`Reference `__) -#. To improve code coverage, write unit tests to test your code -#. Make sure all the tests pass. If you face any issues, please let us know - -On a side note, format your Go code with ``golangci-lint`` followed by ``goimports`` (use ``make lint`` and ``make goimports``), and Python code with ``black`` and ``isort`` (use ``make fmt``). -If make targets are not available, you can manually format the code. -Refer to `Effective Go `__, `Black `__, and `Isort `__ for full coding standards. - -As you become more involved with the project you may be able to be added as a contributor to the repos you're working on, but there is a medium term effort to move all development to forks ✨. - -📃 Documentation -================ - -Flyte uses Sphinx for documentation. ``protoc-gen-doc`` is used to generate the documentation from ``.proto`` files. - -Sphinx spans multiple repositories under `flyteorg `__. It uses reStructured Text (rst) files to store the documentation content. -For API- and code-related content, it extracts docstrings from the code files. - -To get started, refer to the `reStructuredText reference `__. - -For minor edits that don’t require a local setup, you can edit the GitHub page in the documentation to propose improvements. - -The edit option can be found at the bottom of a page, as shown below. - -.. figure:: https://raw.githubusercontent.com/flyteorg/static-resources/main/flyte/contribution_guide/docs_edit.png - :alt: GitHub edit option for Documentation - :align: center - :figclass: align-center - -Intersphinx -*********** - -`Intersphinx `__ can generate automatic links to the documentation of objects in other projects. - -To establish a reference to any other documentation from Flyte or within it, use Intersphinx. - -To do so, create an ``intersphinx_mapping`` in the ``conf.py`` file which should be present in the respective ``docs`` repository. -For example, ``rsts`` is the docs repository for the ``flyte`` repo. - -For example: - -.. code-block:: python - - intersphinx_mapping = { - "python": ("https://docs.python.org/3", None), - "flytekit": ("https://flyte.readthedocs.io/projects/flytekit/en/master/", None), - } - -The key refers to the name used to refer to the file (while referencing the documentation), and the URL denotes the precise location. - -Here is an example using ``:std:doc``: - -* Direct reference - - .. code-block:: text - - Task: :std:doc:`generated/flytekit.task` - - Output: - - Task: :std:doc:`generated/flytekit.task` - -* Custom name - - .. code-block:: text - - :std:doc:`Using custom words ` - - Output: - - :std:doc:`Using custom words ` - -| - -You can cross-reference multiple Python objects. Check out this `section `__ to learn more. - -| - -For instance, `task` decorator in flytekit uses the ``func`` role. - -.. code-block:: text - - Link to flytekit code :py:func:`flytekit:flytekit.task` - -Output: - -Link to flytekit code :py:func:`flytekit:flytekit.task` - -| - -Here are a couple more examples. - -.. code-block:: text - - :py:mod:`Module ` - :py:class:`Class ` - :py:data:`Data ` - :py:func:`Function ` - :py:meth:`Method ` - -Output: - -:py:mod:`Module ` - -:py:class:`Class ` - -:py:data:`Data ` - -:py:func:`Function ` - -:py:meth:`Method ` - -🧱 Component Reference -====================== - -To understand how the below components interact with each other, refer to :ref:`Understand the lifecycle of a workflow ` - -.. figure:: https://raw.githubusercontent.com/flyteorg/static-resources/main/flyte/contribution_guide/dependency_graph.png - :alt: Dependency graph between various flyteorg repos - :align: center - :figclass: align-center - - The dependency graph between various flyte.org repos - - -``flyte`` -********* - -.. list-table:: - - * - `Repo `__ - * - **Purpose**: Deployment, Documentation, and Issues - * - **Languages**: Kustomize & RST - -.. note:: - For the ``flyte`` repo, run the following command in the repo's root to generate documentation locally. - - .. code-block:: console - - make -C rsts html - -``flyteidl`` -************ - -.. list-table:: - - * - `Repo `__ - * - **Purpose**: Flyte workflow specification is in `protocol buffers `__ which forms the core of Flyte - * - **Language**: Protobuf - * - **Guidelines**: Refer to the `README `__ - -``flytepropeller`` -****************** - -.. list-table:: - - * - `Repo `__ | `Code Reference `__ - * - **Purpose**: Kubernetes-native operator - * - **Language**: Go - * - **Guidelines:** - - * Check for Makefile in the root repo - * Run the following commands: - * ``make generate`` - * ``make test_unit`` - * ``make link`` - * To compile, run ``make compile`` - -``flyteadmin`` -************** - -.. list-table:: - - * - `Repo `__ | `Code Reference `__ - * - **Purpose**: Control Plane - * - **Language**: Go - * - **Guidelines**: - - * Check for Makefile in the root repo - * If the service code has to be tested, run it locally: - * ``make compile`` - * ``make server`` - * To seed data locally: - * ``make compile`` - * ``make seed_projects`` - * ``make migrate`` - * To run integration tests locally: - * ``make integration`` - * (or to run in containerized dockernetes): ``make k8s_integration`` - -``flytekit`` -************ - -.. list-table:: - - * - `Repo `__ - * - **Purpose**: Python SDK & Tools - * - **Language**: Python - * - **Guidelines**: Refer to the `Flytekit Contribution Guide `__ - -``flyteconsole`` -**************** - -.. list-table:: - - * - `Repo `__ - * - **Purpose**: Admin Console - * - **Language**: Typescript - * - **Guidelines**: Refer to the `README `__ - -``datacatalog`` -*************** - -.. list-table:: - - * - `Repo `__ | `Code Reference `__ - * - **Purpose**: Manage Input & Output Artifacts - * - **Language**: Go - -``flyteplugins`` -**************** - -.. list-table:: - - * - `Repo `__ | `Code Reference `__ - * - **Purpose**: Flyte Plugins - * - **Language**: Go - * - **Guidelines**: - - * Check for Makefile in the root repo - * Run the following commands: - * ``make generate`` - * ``make test_unit`` - * ``make link`` - -``flytestdlib`` -*************** - -.. list-table:: - - * - `Repo `__ - * - **Purpose**: Standard Library for Shared Components - * - **Language**: Go - -``flytesnacks`` -*************** - -.. list-table:: - - * - `Repo `__ - * - **Purpose**: Examples, Tips, and Tricks to use Flytekit SDKs - * - **Language**: Python (In the future, Java examples will be added) - * - **Guidelines**: Refer to the `Flytesnacks Contribution Guide `__ - -``flytectl`` -************ - -.. list-table:: - - * - `Repo `__ - * - **Purpose**: A standalone Flyte CLI - * - **Language**: Go - * - **Guidelines**: Refer to the `FlyteCTL Contribution Guide `__ - - -🔮 Recommended Iteration Cycle -============================== -As you may have read in other parts of the documentation, this repo contains go code as well that pulls in all the backend components (admin, propeller, data catalog, console) into one executable. -The Flyte team is also working on migrating the core backend repositories into one repo, some time in 2023. For the time being, you can still contribute by making changes to the individual repos, and then bringing them into this ``flyte`` repo. This setup works well for backend golang development, but is not tested for ``flyteconsole`` development. That development cycle will look a bit different. This setup here will allow you to run the Flyte binary from your IDE, hitting any breakpoints you may have, but will connect you to all the other resources of the demo environment (like postgres, rds). - -Setup -***** - -Dev Mode Cluster ----------------- -To launch the dependencies, teardown any old sandboxes you may have, and then run :: - - ``flytectl demo start --dev`` - -This will run the demo environment but without Flyte itself. This makes it so that you the developer can run it later, on your host machine. - -Set up Flyte configuration --------------------------- -#. Copy the file ``flyte-single-binary-local.yaml`` to ``~/.flyte/local-dev-config.yaml`` -#. Replace instances of ``$HOME`` with the real path of your home directory. - -Cluster Resources ------------------ -You'll notice one of the entries in the config is ``cluster_resources.templatePath``. In this folder you should put the templates for the cluster resource controller to use. For now, it's okay to just start with the namespace one. Create a file called ``~/.flyte/cluster-resource-templates/00_namespace.yaml`` with the following :: - - .. literalinclude:: ../../charts/flyte-binary/eks-production.yaml - :lines: 81-85 - -Pull Console Artifacts ----------------------- -Run the following command from the base folder of this repo to pull in the static assets for Flyteconsole :: - - make cmd/single/dist - -Build & Iterate ---------------- -Update using ``go get github.com/flyteorg/&gitsha`` to bring in the code of the component you're testing. From there, you can run :: - - POD_NAMESPACE=flyte go run -tags console cmd/main.go start --config ~/.flyte/local-dev-config.yaml - -The ``POD_NAMESPACE`` environment is required for the webhook to work. Of course you can create a build target in your IDE with the same effective command as well. - -After it's running, you should still be able to go to ``localhost:30080/console`` to see Flyte but now hosted by your host computer. It relies on a Docker host mapping to get the correct IP for your local host. - -🐞 File an Issue -================ - -`GitHub Issues `__ is used for issue tracking. The following are available issue types that you could use for filing an issue. - -* `Plugin Request `__ -* `Bug Report `__ -* `Documentation Bug/Update Request `__ -* `Core Feature Request `__ -* `Flytectl Feature Request `__ -* `Housekeeping `__ -* `UI Feature Request `__ - -If none of the above fit your requirements, file a `blank `__ issue. -Also, add relevant labels to your issue. For example, if you are filing a Flytekit plugin request, add the ``flytekit`` label. - -| - -For feedback at any point in the contribution process, feel free to reach out to us on `Slack `__. - diff --git a/requirements.in b/stats/requirements.in similarity index 100% rename from requirements.in rename to stats/requirements.in diff --git a/requirements.txt b/stats/requirements.txt similarity index 100% rename from requirements.txt rename to stats/requirements.txt From 993b01ec402de7a02454e109450f9357383b70ae Mon Sep 17 00:00:00 2001 From: Samhita Alla Date: Wed, 26 Apr 2023 11:49:23 +0530 Subject: [PATCH 4/9] update contribution guide Signed-off-by: Samhita Alla --- CONTRIBUTING.md | 240 +--------------------- rsts/community/contribute.rst | 375 ++++++++++++++++++++++++++++++++++ 2 files changed, 376 insertions(+), 239 deletions(-) create mode 100644 rsts/community/contribute.rst diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 7e24d6f513..e085749b68 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -1,241 +1,3 @@ # Contributing to Flyte -Thank you for taking the time to contribute to Flyte! -Please read our [Code of Conduct](https://lfprojects.org/policies/code-of-conduct/) before contributing to Flyte. - -Here are some guidelines for you to follow, which will make your first and follow-up contributions easier. - -TL;DR: Find the repo-specific contribution guidelines in the [Component Reference](#component-reference) section. - -## Becoming a Contributor - -An issue tagged with [`good first issue`](https://github.com/flyteorg/flyte/labels/good%20first%20issue) is the best place to start for first-time contributors. - -**Appetizer for every repo: Fork and clone the concerned repository. Create a new branch on your fork and make the required changes. Create a pull request once your work is ready for review.** - -> To open a pull request, follow [the guide](https://guides.github.com/activities/forking/) by GitHub. - -Example PR for your reference: [GitHub PR](https://github.com/flyteorg/flytepropeller/pull/242). -A couple of checks are introduced to help maintain the robustness of the project. - -- To get through DCO, [sign off](https://github.com/src-d/guide/blob/master/developer-community/fix-DCO.md) on every commit. -- To improve code coverage, write unit tests to test your code. -- Make sure all the tests pass. If you face any issues, please let us know! - -On a side note, format your Go code with `golangci-lint` followed by `goimports` (use `make lint` and `make goimports`), and Python code with `black` and `isort` (use `make fmt`). -If make targets are not available, you can manually format the code. -Refer to [Effective Go](https://golang.org/doc/effective_go), [Black](https://github.com/psf/black), and [Isort](https://github.com/PyCQA/isort) for full coding standards. - -As you become more involved with the project, you may be added as a contributor to the repos you're working on, but there is a medium term effort to move all development to forks ✨. - -## Documentation - -Flyte uses Sphinx for documentation. `protoc-gen-doc` is used to generate the documentation from `.proto` files. - -Sphinx spans multiple repositories under [flyteorg](https://github.com/flyteorg). It uses reStructured Text (rst) files to store the documentation content. -For API- and code-related content, it extracts docstrings from the code files. - -To get started, refer to the [reStructuredText reference](https://www.sphinx-doc.org/en/master/usage/restructuredtext/index.html#rst-index). - -For minor edits that don’t require a local setup, you can edit the GitHub page in the documentation to propose improvements. - -### Intersphinx - -[Intersphinx](https://www.sphinx-doc.org/en/master/usage/extensions/intersphinx.html) can generate automatic links to the documentation of objects in other projects. - -To establish a reference to any other documentation from Flyte or within it, use Intersphinx. - -To do so, create an `intersphinx_mapping` in the `conf.py` file which should be present in the respective `docs` repository. -For example, `rsts` is the docs repository for the `flyte` repo. - -For example: - -```python -intersphinx_mapping = { - "python": ("https://docs.python.org/3", None), - "flytekit": ("https://flyte.readthedocs.io/projects/flytekit/en/master/", None), -} -``` - -The key refers to the name used to refer to the file (while referencing the documentation), and the URL denotes the precise location. - -You can also cross-reference multiple Python objects. Check out this [section](https://www.sphinx-doc.org/en/master/usage/restructuredtext/domains.html#cross-referencing-python-objects) to learn more. - -## Component Reference - -To understand how the below components interact with each other, refer to [Understand the lifecycle of a workflow](https://docs.flyte.org/en/latest/concepts/workflow_lifecycle.html). - -Dependency graph between various flyteorg repos - -### `flyte` - -[]() | -| ------| -| [Repo](https://github.com/flyteorg/flyte) | -| **Purpose**: Deployment, Documentation, and Issues | -| **Languages**: Kustomize & RST | - -> For the `flyte` repo, run the following command in the repo's root to generate documentation locally. -> ``` -> make -C rsts html -> ``` - -### `flyteidl` - -[]() | -| ------| -| [Repo](https://github.com/flyteorg/flyteidl) | -| **Purpose**: Flyte workflow specification is in [protocol buffers](https://developers.google.com/protocol-buffers) which forms the core of Flyte | -| **Language**: Protobuf | -| **Guidelines**: Refer to the [README](https://github.com/flyteorg/flyteidl#generate-code-from-protobuf) | - -### `flytepropeller` - -[]() | -| ------| -| [Repo](https://github.com/flyteorg/flytepropeller) | [Code Reference](https://pkg.go.dev/mod/github.com/flyteorg/flytepropeller) | -| **Purpose**: Kubernetes-native operator | -| **Language**: Go | -| **Guidelines:**
  • Check for Makefile in the root repo
  • Run the following commands:
    • `make generate`
    • `make test_unit`
    • `make link`
  • To compile, run `make compile`
| - -### `flyteadmin` - -[]() | -| ------| -| [Repo](https://github.com/flyteorg/flyteadmin) | [Code Reference](https://pkg.go.dev/mod/github.com/flyteorg/flyteadmin) | -| **Purpose**: Control Plane | -| **Language**: Go | -| **Guidelines**:
  • Check for Makefile in the root repo
  • If the service code has to be tested, run it locally:
    • `make compile`
    • `make server`
  • To seed data locally:
    • `make compile`
    • `make seed_projects`
    • `make migrate`
  • To run integration tests locally:
    • `make integration`
    • (or to run in containerized dockernetes): `make k8s_integration`
| - - -### `flytekit` - -[]() | -| ------| -| [Repo](https://github.com/flyteorg/flytekit) | -| **Purpose**: Python SDK & Tools | -| **Language**: Python | -| **Guidelines**: Refer to the [Flytekit Contribution Guide](https://docs.flyte.org/projects/flytekit/en/latest/contributing.html) | - -### `flyteconsole` - -[]() | -| ------| -| [Repo](https://github.com/flyteorg/flyteconsole) | -| **Purpose**: Admin Console | -| **Language**: Typescript | -| **Guidelines**: Refer to the [README](https://github.com/flyteorg/flyteconsole/blob/master/README.md) | - -### `datacatalog` - -[]() | -| ------| -| [Repo](https://github.com/flyteorg/datacatalog) | [Code Reference](https://pkg.go.dev/mod/github.com/flyteorg/datacatalog) | -| **Purpose**: Manage Input & Output Artifacts | -| **Language**: Go | - -### `flyteplugins` - -[]() | -| ------| -| [Repo](https://github.com/flyteorg/flyteplugins) | [Code Reference](https://pkg.go.dev/mod/github.com/flyteorg/flyteplugins) | -| **Purpose**: Flyte Plugins | -| **Language**: Go | -| **Guidelines**:
  • Check for Makefile in the root repo
  • Run the following commands:
    • `make generate`
    • `make test_unit`
    • `make link`
| - -### `flytestdlib` - -[]() | -| ------| -| [Repo](https://github.com/flyteorg/flytestdlib) | -| **Purpose**: Standard Library for Shared Components | -| **Language**: Go | - -### `flytesnacks` - -[]() | -| ------| -| [Repo](https://github.com/flyteorg/flytesnacks) | -| **Purpose**: Examples, Tips, and Tricks to use Flytekit SDKs | -| **Language**: Python (In the future, Java examples will be added) | -| **Guidelines**: Refer to the [Flytesnacks Contribution Guide](https://docs.flyte.org/projects/cookbook/en/latest/contribute.html) | - -### `flytectl` - -[]() | -| ------| -| [Repo](https://github.com/flyteorg/flytectl) | -| **Purpose**: A standalone Flyte CLI | -| **Language**: Go | -| **Guidelines**: Refer to the [FlyteCTL Contribution Guide](https://docs.flyte.org/projects/flytectl/en/stable/contribute.html) | - -## Recommended iteration cycle - -As you may have already read in other parts of the documentation, the [Flyte repository](https://github.com/flyteorg/flyte) includes Go code that integrates all backend components (admin, propeller, data catalog, console) into a single executable. The Flyte team is currently working on consolidating the core backend repositories into one repository, which is expected to be completed by 2023. In the meantime, you can contribute to the individual repositories and then merge your changes into the [Flyte repository](https://github.com/flyteorg/flyte). This setup is suitable for Go-based backend development, but it has not been tested for Flyteconsole development, which has a different development cycle. Nonetheless, this setup allows you to run the Flyte binary from your IDE, enabling you to debug your code effectively by setting breakpoints. Additionally, this setup connects you to all other resources in the demo environment, such as PostgreSQL and RDS. - -### Dev mode cluster - -To launch the dependencies, teardown any old sandboxes you may have, and then run: - -``` -flytectl demo start --dev -``` - -This command will launch the demo environment without running Flyte. By doing so, developers can run Flyte later on their host machine. - -### Set up Flyte configuration - -- Copy the file `flyte-single-binary-local.yaml` to `~/.flyte/local-dev-config.yaml`. -- Replace occurrences of `$HOME` with the actual path of your home directory. - -### Cluster resources - -One of the configuration entries you will notice is `cluster_resources.templatePath`. This folder should contain the templates that the cluster resource controller will use. To begin, you can create a file called `~/.flyte/cluster-resource-templates/00_namespace.yaml` with the following content: - -```yaml -clusterResourceTemplates: - inline: - 001_namespace.yaml: | - apiVersion: v1 - kind: Namespace - metadata: - name: '{{ namespace }}' -``` - -### Pull console artifacts - -Run the following command from the base folder of the Flyte repository to pull in the static assets for Flyteconsole: - -``` -make cmd/single/dist -``` - -### Build & iterate - -To bring in the code of the component you are testing, use the command go get `github.com/flyteorg/&gitsha`. Once you have done that, you can run the following command: - -``` -POD_NAMESPACE=flyte go run -tags console cmd/main.go start --config ~/.flyte/local-dev-config.yaml -``` - -The `POD_NAMESPACE` environment variable is necessary for the webhook to function correctly. You can also create a build target in your IDE with the same command. - -Once it is up and running, you can access Flyte hosted by your local machine by going to `localhost:30080/console`. The Docker host mapping is used to obtain the correct IP address for your local host. - -## File an Issue - -We use [GitHub Issues](https://github.com/flyteorg/flyte/issues) for issue tracking. The following issue types are available for filing an issue: - -* [Plugin Request](https://github.com/flyteorg/flyte/issues/new?assignees=&labels=untriaged%2Cplugins&template=backend-plugin-request.md&title=%5BPlugin%5D) -* [Bug Report](https://github.com/flyteorg/flyte/issues/new?assignees=&labels=bug%2C+untriaged&template=bug_report.md&title=%5BBUG%5D+) -* [Documentation Bug/Update Request](https://github.com/flyteorg/flyte/issues/new?assignees=&labels=documentation%2C+untriaged&template=docs_issue.md&title=%5BDocs%5D) -* [Core Feature Request](https://github.com/flyteorg/flyte/issues/new?assignees=&labels=enhancement%2C+untriaged&template=feature_request.md&title=%5BCore+Feature%5D) -* [Flytectl Feature Request](https://github.com/flyteorg/flyte/issues/new?assignees=&labels=enhancement%2C+untriaged%2C+flytectl&template=flytectl_issue.md&title=%5BFlytectl+Feature%5D) -* [Housekeeping](https://github.com/flyteorg/flyte/issues/new?assignees=&labels=housekeeping&template=housekeeping_template.md&title=%5BHousekeeping%5D+) -* [UI Feature Request](https://github.com/flyteorg/flyte/issues/new?assignees=&labels=enhancement%2C+untriaged%2C+ui&template=ui_feature_request.md&title=%5BUI+Feature%5D) - -If none of the above fit your requirements, file a [blank](https://github.com/flyteorg/flyte/issues/new) issue. -Also, add relevant labels to your issue. For example, if you are filing a Flytekit plugin request, add the `flytekit` label. - -For feedback at any point in the contribution process, feel free to reach out to us on [Slack](https://slack.flyte.org/). - +For information related to contributing to Flyte, please check out the [Contributing to Flyte](https://docs.flyte.org/en/latest/community/contribute.html) section of the documentation. diff --git a/rsts/community/contribute.rst b/rsts/community/contribute.rst new file mode 100644 index 0000000000..53e5c2e5ee --- /dev/null +++ b/rsts/community/contribute.rst @@ -0,0 +1,375 @@ +.. _contribute_Flyte: + +##################### +Contributing to Flyte +##################### + +.. tags:: Contribute, Basic + +Thank you for taking the time to contribute to Flyte! +Please read our `Code of Conduct `__ before contributing to Flyte. + +Here are some guidelines for you to follow, which will make your first and follow-up contributions easier. + +TL;DR: Find the repo-specific contribution guidelines in the `Component Reference <#component-reference>`__ section. + +💻 Becoming a Contributor +========================= + +An issue tagged with `good first issue `__ is the best place to start for first-time contributors. + +**Appetizer for every repo: Fork and clone the concerned repository. Create a new branch on your fork and make the required changes. Create a pull request once your work is ready for review.** + +.. note:: + To open a pull request, refer to `GitHub's guide `__ for detailed instructions. + +Example PR for your reference: `GitHub PR `__. +A couple of checks are introduced to help maintain the robustness of the project. + +#. To get through DCO, sign off on every commit (`Reference `__) +#. To improve code coverage, write unit tests to test your code +#. Make sure all the tests pass. If you face any issues, please let us know + +On a side note, format your Go code with ``golangci-lint`` followed by ``goimports`` (use ``make lint`` and ``make goimports``), and Python code with ``black`` and ``isort`` (use ``make fmt``). +If make targets are not available, you can manually format the code. +Refer to `Effective Go `__, `Black `__, and `Isort `__ for full coding standards. + +As you become more involved with the project, you may be able to be added as a contributor to the repos you're working on, +but there is a medium term effort to move all development to forks. + +📃 Documentation +================ + +Flyte uses Sphinx for documentation. ``protoc-gen-doc`` is used to generate the documentation from ``.proto`` files. + +Sphinx spans multiple repositories under `flyteorg `__. It uses reStructured Text (rst) files to store the documentation content. +For API- and code-related content, it extracts docstrings from the code files. + +To get started, refer to the `reStructuredText reference `__. + +For minor edits that don’t require a local setup, you can edit the GitHub page in the documentation to propose improvements. + +The edit option can be found at the bottom of a page, as shown below. + +.. figure:: https://raw.githubusercontent.com/flyteorg/static-resources/main/flyte/contribution_guide/docs_edit.png + :alt: GitHub edit option for Documentation + :align: center + :figclass: align-center + +Intersphinx +*********** + +`Intersphinx `__ can generate automatic links to the documentation of objects in other projects. + +To establish a reference to any other documentation from Flyte or within it, use Intersphinx. + +To do so, create an ``intersphinx_mapping`` in the ``conf.py`` file which should be present in the respective ``docs`` repository. +For example, ``rsts`` is the docs repository for the ``flyte`` repo. + +For example: + +.. code-block:: python + + intersphinx_mapping = { + "python": ("https://docs.python.org/3", None), + "flytekit": ("https://flyte.readthedocs.io/projects/flytekit/en/master/", None), + } + +The key refers to the name used to refer to the file (while referencing the documentation), and the URL denotes the precise location. + +Here is an example using ``:std:doc``: + +* Direct reference + + .. code-block:: text + + Task: :std:doc:`generated/flytekit.task` + + Output: + + Task: :std:doc:`generated/flytekit.task` + +* Custom name + + .. code-block:: text + + :std:doc:`Using custom words ` + + Output: + + :std:doc:`Using custom words ` + +| + +You can cross-reference multiple Python objects. Check out this `section `__ to learn more. + +| + +For instance, `task` decorator in flytekit uses the ``func`` role. + +.. code-block:: text + + Link to flytekit code :py:func:`flytekit:flytekit.task` + +Output: + +Link to flytekit code :py:func:`flytekit:flytekit.task` + +| + +Here are a couple more examples. + +.. code-block:: text + + :py:mod:`Module ` + :py:class:`Class ` + :py:data:`Data ` + :py:func:`Function ` + :py:meth:`Method ` + +Output: + +:py:mod:`Module ` + +:py:class:`Class ` + +:py:data:`Data ` + +:py:func:`Function ` + +:py:meth:`Method ` + +🧱 Component Reference +====================== + +To understand how the below components interact with each other, refer to :ref:`Understand the lifecycle of a workflow `. + +.. figure:: https://raw.githubusercontent.com/flyteorg/static-resources/main/flyte/contribution_guide/dependency_graph.png + :alt: Dependency graph between various flyteorg repos + :align: center + :figclass: align-center + + The dependency graph between various flyte repos + +``flyte`` +********* + +.. list-table:: + + * - `Repo `__ + * - **Purpose**: Deployment, Documentation, and Issues + * - **Languages**: Kustomize & RST + +.. note:: + For the ``flyte`` repo, run the following command in the repo's root to generate documentation locally. + + .. code-block:: console + + make -C rsts html + +``flyteidl`` +************ + +.. list-table:: + + * - `Repo `__ + * - **Purpose**: Flyte workflow specification is in `protocol buffers `__ which forms the core of Flyte + * - **Language**: Protobuf + * - **Guidelines**: Refer to the `README `__ + +``flytepropeller`` +****************** + +.. list-table:: + + * - `Repo `__ | `Code Reference `__ + * - **Purpose**: Kubernetes-native operator + * - **Language**: Go + * - **Guidelines:** + + * Check for Makefile in the root repo + * Run the following commands: + * ``make generate`` + * ``make test_unit`` + * ``make link`` + * To compile, run ``make compile`` + +``flyteadmin`` +************** + +.. list-table:: + + * - `Repo `__ | `Code Reference `__ + * - **Purpose**: Control Plane + * - **Language**: Go + * - **Guidelines**: + + * Check for Makefile in the root repo + * If the service code has to be tested, run it locally: + * ``make compile`` + * ``make server`` + * To seed data locally: + * ``make compile`` + * ``make seed_projects`` + * ``make migrate`` + * To run integration tests locally: + * ``make integration`` + * (or to run in containerized dockernetes): ``make k8s_integration`` + +``flytekit`` +************ + +.. list-table:: + + * - `Repo `__ + * - **Purpose**: Python SDK & Tools + * - **Language**: Python + * - **Guidelines**: Refer to the `Flytekit Contribution Guide `__ + +``flyteconsole`` +**************** + +.. list-table:: + + * - `Repo `__ + * - **Purpose**: Admin Console + * - **Language**: Typescript + * - **Guidelines**: Refer to the `README `__ + +``datacatalog`` +*************** + +.. list-table:: + + * - `Repo `__ | `Code Reference `__ + * - **Purpose**: Manage Input & Output Artifacts + * - **Language**: Go + +``flyteplugins`` +**************** + +.. list-table:: + + * - `Repo `__ | `Code Reference `__ + * - **Purpose**: Flyte Plugins + * - **Language**: Go + * - **Guidelines**: + + * Check for Makefile in the root repo + * Run the following commands: + * ``make generate`` + * ``make test_unit`` + * ``make link`` + +``flytestdlib`` +*************** + +.. list-table:: + + * - `Repo `__ + * - **Purpose**: Standard Library for Shared Components + * - **Language**: Go + +``flytesnacks`` +*************** + +.. list-table:: + + * - `Repo `__ + * - **Purpose**: Examples, Tips, and Tricks to use Flytekit SDKs + * - **Language**: Python (In the future, Java examples will be added) + * - **Guidelines**: Refer to the `Flytesnacks Contribution Guide `__ + +``flytectl`` +************ + +.. list-table:: + + * - `Repo `__ + * - **Purpose**: A standalone Flyte CLI + * - **Language**: Go + * - **Guidelines**: Refer to the `FlyteCTL Contribution Guide `__ + + +🔮 Recommended iteration cycle +============================== + +As you may have already read in other parts of the documentation, the `Flyte repository `__ includes Go code +that integrates all backend components (admin, propeller, data catalog, console) into a single executable. +The Flyte team is currently working on consolidating the core backend repositories into one repository, which is expected to be completed by 2023. +In the meantime, you can contribute to the individual repositories and then merge your changes into the `Flyte repository `__. +This setup is suitable for Go-based backend development, but it has not been tested for Flyteconsole development, which has a different development cycle. +Nonetheless, this setup allows you to run the Flyte binary from your IDE, enabling you to debug your code effectively by setting breakpoints. +Additionally, this setup connects you to all other resources in the demo environment, such as PostgreSQL and RDS. + +Dev mode cluster +---------------- + +To launch the dependencies, teardown any old sandboxes you may have, and then run: + +.. code-block:: + + flytectl demo start --dev + +This command will launch the demo environment without running Flyte. By doing so, developers can run Flyte later on their host machine. + +Set up Flyte configuration +-------------------------- + +#. Copy the file ``flyte-single-binary-local.yaml`` to ``~/.flyte/local-dev-config.yaml``. +#. Replace occurrences of ``$HOME`` with the actual path of your home directory. + +Cluster resources +----------------- + +One of the configuration entries you will notice is ``cluster_resources.templatePath``. +This folder should contain the templates that the cluster resource controller will use. +To begin, you can create a file called ``~/.flyte/cluster-resource-templates/00_namespace.yaml`` with the following content: + +.. literalinclude:: ../../charts/flyte-binary/eks-production.yaml + :lines: 81-85 + +Pull console artifacts +---------------------- + +Run the following command from the base folder of the Flyte repository to pull in the static assets for Flyteconsole :: + +.. code-block:: + + make cmd/single/dist + +Build and iterate +--------------- + +To bring in the code of the component you are testing, use the command go get ``github.com/flyteorg/&gitsha``. +Once you have done that, you can run the following command: + +.. code-block:: + + POD_NAMESPACE=flyte go run -tags console cmd/main.go start --config ~/.flyte/local-dev-config.yaml + +The ``POD_NAMESPACE`` environment variable is necessary for the webhook to function correctly. +You can also create a build target in your IDE with the same command. + +Once it is up and running, you can access Flyte hosted by your local machine by going to ``localhost:30080/console``. +The Docker host mapping is used to obtain the correct IP address for your local host. + +🐞 File an Issue +================ + +We use `GitHub Issues `__ for issue tracking. The following issue types are available for filing an issue: + +* `Plugin Request `__ +* `Bug Report `__ +* `Documentation Bug/Update Request `__ +* `Core Feature Request `__ +* `Flytectl Feature Request `__ +* `Housekeeping `__ +* `UI Feature Request `__ + +If none of the above fit your requirements, file a `blank `__ issue. +Also, add relevant labels to your issue. For example, if you are filing a Flytekit plugin request, add the ``flytekit`` label. + +| + +For feedback at any point in the contribution process, feel free to reach out to us on `Slack `__. From bccb6b4913d68fd4065592620960a4ae1e4bc444 Mon Sep 17 00:00:00 2001 From: Samhita Alla Date: Wed, 26 Apr 2023 11:57:33 +0530 Subject: [PATCH 5/9] update heading style Signed-off-by: Samhita Alla --- rsts/community/contribute.rst | 31 +++++++++++-------------------- 1 file changed, 11 insertions(+), 20 deletions(-) diff --git a/rsts/community/contribute.rst b/rsts/community/contribute.rst index 53e5c2e5ee..942fee29b1 100644 --- a/rsts/community/contribute.rst +++ b/rsts/community/contribute.rst @@ -13,7 +13,7 @@ Here are some guidelines for you to follow, which will make your first and follo TL;DR: Find the repo-specific contribution guidelines in the `Component Reference <#component-reference>`__ section. -💻 Becoming a Contributor +💻 Becoming a contributor ========================= An issue tagged with `good first issue `__ is the best place to start for first-time contributors. @@ -47,14 +47,7 @@ For API- and code-related content, it extracts docstrings from the code files. To get started, refer to the `reStructuredText reference `__. -For minor edits that don’t require a local setup, you can edit the GitHub page in the documentation to propose improvements. - -The edit option can be found at the bottom of a page, as shown below. - -.. figure:: https://raw.githubusercontent.com/flyteorg/static-resources/main/flyte/contribution_guide/docs_edit.png - :alt: GitHub edit option for Documentation - :align: center - :figclass: align-center +For minor edits that don't require a local setup, you can edit the GitHub page in the documentation to propose improvements. Intersphinx *********** @@ -139,7 +132,7 @@ Output: :py:meth:`Method ` -🧱 Component Reference +🧱 Component reference ====================== To understand how the below components interact with each other, refer to :ref:`Understand the lifecycle of a workflow `. @@ -303,7 +296,7 @@ Nonetheless, this setup allows you to run the Flyte binary from your IDE, enabli Additionally, this setup connects you to all other resources in the demo environment, such as PostgreSQL and RDS. Dev mode cluster ----------------- +**************** To launch the dependencies, teardown any old sandboxes you may have, and then run: @@ -314,32 +307,32 @@ To launch the dependencies, teardown any old sandboxes you may have, and then ru This command will launch the demo environment without running Flyte. By doing so, developers can run Flyte later on their host machine. Set up Flyte configuration --------------------------- +************************** #. Copy the file ``flyte-single-binary-local.yaml`` to ``~/.flyte/local-dev-config.yaml``. #. Replace occurrences of ``$HOME`` with the actual path of your home directory. Cluster resources ------------------ +***************** One of the configuration entries you will notice is ``cluster_resources.templatePath``. This folder should contain the templates that the cluster resource controller will use. To begin, you can create a file called ``~/.flyte/cluster-resource-templates/00_namespace.yaml`` with the following content: .. literalinclude:: ../../charts/flyte-binary/eks-production.yaml - :lines: 81-85 + :lines: 81-87 Pull console artifacts ----------------------- +********************** -Run the following command from the base folder of the Flyte repository to pull in the static assets for Flyteconsole :: +Run the following command from the base folder of the Flyte repository to pull in the static assets for Flyteconsole: .. code-block:: make cmd/single/dist Build and iterate ---------------- +***************** To bring in the code of the component you are testing, use the command go get ``github.com/flyteorg/&gitsha``. Once you have done that, you can run the following command: @@ -354,7 +347,7 @@ You can also create a build target in your IDE with the same command. Once it is up and running, you can access Flyte hosted by your local machine by going to ``localhost:30080/console``. The Docker host mapping is used to obtain the correct IP address for your local host. -🐞 File an Issue +🐞 File an issue ================ We use `GitHub Issues `__ for issue tracking. The following issue types are available for filing an issue: @@ -370,6 +363,4 @@ We use `GitHub Issues `__ for issue tr If none of the above fit your requirements, file a `blank `__ issue. Also, add relevant labels to your issue. For example, if you are filing a Flytekit plugin request, add the ``flytekit`` label. -| - For feedback at any point in the contribution process, feel free to reach out to us on `Slack `__. From 103c152321122da70c88e4060bea08e62839fecf Mon Sep 17 00:00:00 2001 From: Samhita Alla Date: Wed, 26 Apr 2023 12:26:39 +0530 Subject: [PATCH 6/9] update features section Signed-off-by: Samhita Alla --- README.md | 82 ++++++++++++++++++++++++++++--------------------------- 1 file changed, 42 insertions(+), 40 deletions(-) diff --git a/README.md b/README.md index 07a7645195..d82b215f40 100644 --- a/README.md +++ b/README.md @@ -51,36 +51,38 @@ Flyte is an **open-source orchestrator** that facilitates building production-gr --- -## Features - -- **Strongly typed interfaces**: Validate your data at every step of the workflow by defining data guardrails using Flyte types. -- **Any language**: Write code in any language using raw containers, or choose [Python](https://github.com/flyteorg/flytekit), [Java](https://github.com/flyteorg/flytekit-java), [Scala](https://github.com/flyteorg/flytekit-java) or [JavaScript](https://github.com/NotMatthewGriffin/pterodactyl) SDKs to develop your Flyte workflows. -- **Map tasks**: Achieve parallel code execution with minimal configuration using [map tasks](https://docs.flyte.org/projects/cookbook/en/latest/auto/core/control_flow/map_task.html). -- **Dynamic workflows**: [Build flexible and adaptable workflows](https://docs.flyte.org/projects/cookbook/en/latest/auto/core/control_flow/dynamics.html) that can change and evolve as needed, making it easier to respond to changing requirements. -- **Branching**: [Selectively execute branches](https://docs.flyte.org/projects/cookbook/en/latest/auto/core/control_flow/conditions.html) of your workflow based on static or dynamic data produced by other tasks or input data. -- **FlyteFile & FlyteDirectory**: Transfer [files](https://docs.flyte.org/projects/cookbook/en/latest/auto/core/flyte_basics/files.html) and [directories](https://docs.flyte.org/projects/cookbook/en/latest/auto/core/flyte_basics/folders.html) between local and cloud storage. -- **Structured dataset**: Convert dataframes between types and enforce column-level type checking using the abstract 2D representation provided by [Structured Dataset](https://docs.flyte.org/projects/cookbook/en/latest/auto/core/type_system/structured_dataset.html). -- **Recover from failures**: Recover only the failed tasks. -- **Rerun a single task**: Rerun workflows at the most granular level without modifying the previous state of a data/ML workflow. -- **Versioned workflows**: Reproduce results and roll back to a previous workflow version any time. -- **Cache outputs**: Cache task outputs by passing `cache=True` to the task decorator. -- **Intra-task checkpointing**: [Checkpoint progress](https://docs.flyte.org/projects/cookbook/en/latest/auto/core/control_flow/checkpoint.html) within a task execution. -- **Multi-tenancy**: Multiple users can share the same platform while maintaining their own distinct data and configurations. -- **Timeout**: Define a timeout period, after which the task is marked as failure. -- **Immutability**: Immutable executions help ensure reproducibility by preventing any changes to the state of an execution. -- **Data lineage**: Track the movement and transformation of data throughout the lifecycle of your data and ML workflows. -- **Data visualization**: Visualize data, monitor models and view training history through plots. -- **Dev to prod**: As simple as changing your [domain](https://docs.flyte.org/en/latest/concepts/domains.html) from development or staging to production. -- **Spot or preemptible instances**: Schedule your workflows on spot instances by setting `interruptible` to `True` in the task decorator. -- **Cloud-native deployment**: Deploy Flyte on AWS, GCP, Azure and other cloud services. -- **Scheduling**: [Schedule](https://docs.flyte.org/projects/cookbook/en/latest/auto/core/scheduled_workflows/lp_schedules.html) your data and ML workflows to run at a specific time. -- **Notifications**: Stay informed about changes to your workflow's state by configuring [notifications](https://docs.flyte.org/projects/cookbook/en/latest/auto/deployment/lp_notifications.html) through Slack, PagerDuty or email. -- **Timeline view**: Evaluate the duration of each of your Flyte tasks and identify potential bottlenecks. -- **GPU acceleration**: Enable and control your tasks’ GPU demands by requesting resources in the task decorator. -- **Dependency isolation via containers**: Maintain separate sets of dependencies for your tasks so no dependency conflicts arise. -- **Parallelism**: Flyte tasks are inherently parallel to optimize resource consumption and improve performance. -- **Allocate resources dynamically** at the task level. -- [Wait](https://docs.flyte.org/projects/cookbook/en/latest/auto/core/control_flow/waiting_for_external_inputs.html) for **external inputs** before proceeding with the execution. +## Features + +We ship new features, bug fixes and performance improvements regularly. Read our [release notes](https://github.com/flyteorg/flyte/releases) to stay updated. + +🚀 **Strongly typed interfaces**: Validate your data at every step of the workflow by defining data guardrails using Flyte types.
+🌐 **Any language**: Write code in any language using raw containers, or choose [Python](https://github.com/flyteorg/flytekit), [Java](https://github.com/flyteorg/flytekit-java), [Scala](https://github.com/flyteorg/flytekit-java) or [JavaScript](https://github.com/NotMatthewGriffin/pterodactyl) SDKs to develop your Flyte workflows.
+📊 **Map tasks**: Achieve parallel code execution with minimal configuration using [map tasks](https://docs.flyte.org/projects/cookbook/en/latest/auto/core/control_flow/map_task.html).
+🌟 **Dynamic workflows**: [Build flexible and adaptable workflows](https://docs.flyte.org/projects/cookbook/en/latest/auto/core/control_flow/dynamics.html) that can change and evolve as needed, making it easier to respond to changing requirements.
+🌳 **Branching**: [Selectively execute branches](https://docs.flyte.org/projects/cookbook/en/latest/auto/core/control_flow/conditions.html) of your workflow based on static or dynamic data produced by other tasks or input data.
+📂 **FlyteFile & FlyteDirectory**: Transfer [files](https://docs.flyte.org/projects/cookbook/en/latest/auto/core/flyte_basics/files.html) and [directories](https://docs.flyte.org/projects/cookbook/en/latest/auto/core/flyte_basics/folders.html) between local and cloud storage.
+🗃️ **Structured dataset**: Convert dataframes between types and enforce column-level type checking using the abstract 2D representation provided by [Structured Dataset](https://docs.flyte.org/projects/cookbook/en/latest/auto/core/type_system/structured_dataset.html).
+🛡️ **Recover from failures**: Recover only the failed tasks.
+🔁 **Rerun a single task**: Rerun workflows at the most granular level without modifying the previous state of a data/ML workflow.
+🚦 **Versioned workflows**: Reproduce results and roll back to a previous workflow version any time.
+🔍 **Cache outputs**: Cache task outputs by passing `cache=True` to the task decorator.
+🚩 **Intra-task checkpointing**: [Checkpoint progress](https://docs.flyte.org/projects/cookbook/en/latest/auto/core/control_flow/checkpoint.html) within a task execution.
+🌎 **Multi-tenancy**: Multiple users can share the same platform while maintaining their own distinct data and configurations.
+⏰ **Timeout**: Define a timeout period, after which the task is marked as failure.
+🔒 **Immutability**: Immutable executions help ensure reproducibility by preventing any changes to the state of an execution.
+🧬 **Data lineage**: Track the movement and transformation of data throughout the lifecycle of your data and ML workflows.
+📈 **Data visualization**: Visualize data, monitor models and view training history through plots.
+🏭 **Dev to prod**: As simple as changing your [domain](https://docs.flyte.org/en/latest/concepts/domains.html) from development or staging to production.
+💸 **Spot or preemptible instances**: Schedule your workflows on spot instances by setting `interruptible` to `True` in the task decorator.
+☁️ **Cloud-native deployment**: Deploy Flyte on AWS, GCP, Azure and other cloud services.
+📅 **Scheduling**: [Schedule](https://docs.flyte.org/projects/cookbook/en/latest/auto/core/scheduled_workflows/lp_schedules.html) your data and ML workflows to run at a specific time.
+📢 **Notifications**: Stay informed about changes to your workflow's state by configuring [notifications](https://docs.flyte.org/projects/cookbook/en/latest/auto/deployment/lp_notifications.html) through Slack, PagerDuty or email.
+⌛️ **Timeline view**: Evaluate the duration of each of your Flyte tasks and identify potential bottlenecks.
+💨 **GPU acceleration**: Enable and control your tasks’ GPU demands by requesting resources in the task decorator.
+🐳 **Dependency isolation via containers**: Maintain separate sets of dependencies for your tasks so no dependency conflicts arise.
+🔀 **Parallelism**: Flyte tasks are inherently parallel to optimize resource consumption and improve performance.
+💾 **Allocate resources dynamically** at the task level.
+⏯️ [Wait](https://docs.flyte.org/projects/cookbook/en/latest/auto/core/control_flow/waiting_for_external_inputs.html) for **external inputs** before proceeding with the execution.
## Quick start @@ -92,7 +94,7 @@ However, if you prefer to install Flyte locally and run a workflow, our [getting ### Deploy Flyte to production -The [deployment guide](https://docs.flyte.org/en/latest/deployment/index.html) should be helpful to self-host and administer Flyte. +The [deployment guide](https://docs.flyte.org/en/latest/deployment/index.html) provides useful information on how to self-host and manage Flyte. ## Adopters @@ -109,20 +111,20 @@ Stay up to date with the latest project roadmap by checking out our live [roadma 💬 [Slack](https://slack.flyte.org/): Join the Flyte community on Slack to chat with other users, ask questions, and get help.
⚠️ [GitHub](https://github.com/flyteorg/flyte): Check out the Flyte project on GitHub to file issues, contribute code, and stay up to date on the latest development.
📹 [Youtube](https://www.youtube.com/channel/UCNduEoLOToNo3nFVly-vUTQ): Tune into panel discussions, customer success stories, community updates and feature deep dives.
-📄 [Blog](https://flyte.org/blog): Check out the tutorials and feature deep dives.
-💡 [RFCs](rfc/.): RFCs contain our existing product proposals. +📄 [Blog](https://flyte.org/blog): Here, you can find tutorials and feature deep dives to help you learn more about Flyte.
+💡 [RFCs](rfc/.): RFCs are used for proposing new ideas and features to improve Flyte. You can refer to them to stay updated on the latest developments and contribute to the growth of the platform. -## How to Contribute +## How to contribute -There are many ways to get involved in this project, including: +There are many ways to get involved in Flyte, including: -* Submitting [bugs](https://github.com/flyteorg/flyte/issues/new?assignees=&labels=bug%2Cuntriaged&template=bug_report.yaml&title=%5BBUG%5D+) and [feature requests](https://github.com/flyteorg/flyte/issues/new?assignees=&labels=enhancement%2Cuntriaged&template=feature_request.yaml&title=%5BCore+feature%5D+) for different components. -* Reviewing [the documentation](https://docs.flyte.org/en/latest/) and submitting [pull requests](https://github.com/flyteorg/flytesnacks) for anything from typos to additional and new content. +* Submitting [bugs](https://github.com/flyteorg/flyte/issues/new?assignees=&labels=bug%2Cuntriaged&template=bug_report.yaml&title=%5BBUG%5D+) and [feature requests](https://github.com/flyteorg/flyte/issues/new?assignees=&labels=enhancement%2Cuntriaged&template=feature_request.yaml&title=%5BCore+feature%5D+) for various components. +* Reviewing [the documentation](https://docs.flyte.org/en/latest/) and submitting [pull requests](https://github.com/flyteorg/flytesnacks) for anything from fixing typos to adding new content. * Speaking or writing about Flyte or any other ecosystem integration and [letting us know](https://flyte-org.slack.com/archives/C02JMT8KTEE)! -* Picking up a [`help wanted`](https://github.com/flyteorg/flyte/issues?q=is%3Aopen+is%3Aissue+label%3A%22help+wanted%22+) or [`good-first-issue`](https://github.com/flyteorg/flyte/issues?q=is%3Aopen+is%3Aissue+label%3A%22good+first+issue%22) and following the [CONTRIBUTING](https://docs.flyte.org/en/latest/community/contribute.html#contribute-flyte) guide to submit changes to the codebase. -* Upvoting [popular feature requests](https://github.com/flyteorg/flyte/issues?q=is%3Aopen+is%3Aissue+label%3Aenhancement+sort%3Areactions-%2B1-desc). +* Taking on a [`help wanted`](https://github.com/flyteorg/flyte/issues?q=is%3Aopen+is%3Aissue+label%3A%22help+wanted%22+) or [`good-first-issue`](https://github.com/flyteorg/flyte/issues?q=is%3Aopen+is%3Aissue+label%3A%22good+first+issue%22) and following the [CONTRIBUTING](https://docs.flyte.org/en/latest/community/contribute.html#contribute-flyte) guide to submit changes to the codebase. +* Upvoting [popular feature requests](https://github.com/flyteorg/flyte/issues?q=is%3Aopen+is%3Aissue+label%3Aenhancement+sort%3Areactions-%2B1-desc) to show your support. -A big thank you to the community for making Flyte possible! +### We ❤️ our contributors [![953358](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/953358?v=4&w=50&h=50&mask=circle)](https://github.com/katrogan)[![37090125](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/37090125?v=4&w=50&h=50&mask=circle)](https://github.com/lyft-metaservice-3)[![7597118](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/7597118?v=4&w=50&h=50&mask=circle)](https://github.com/matthewphsmith)[![27159](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/27159?v=4&w=50&h=50&mask=circle)](https://github.com/EngHabu)[![29843943](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/29843943?v=4&w=50&h=50&mask=circle)](https://github.com/goreleaserbot)[![10830562](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/10830562?v=4&w=50&h=50&mask=circle)](https://github.com/evalsocket)[![8888115](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/8888115?v=4&w=50&h=50&mask=circle)](https://github.com/hamersaw)[![78108056](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/78108056?v=4&w=50&h=50&mask=circle)](https://github.com/flyte-bot)[![158892](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/158892?v=4&w=50&h=50&mask=circle)](https://github.com/honnix)[![18408237](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/18408237?v=4&w=50&h=50&mask=circle)](https://github.com/anandswaminathan)[![2896568](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/2896568?v=4&w=50&h=50&mask=circle)](https://github.com/wild-endeavor)[![1518524](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/1518524?v=4&w=50&h=50&mask=circle)](https://github.com/bnsblue)[![37936015](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/37936015?v=4&w=50&h=50&mask=circle)](https://github.com/pingsutw)[![27724763](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/27724763?v=4&w=50&h=50&mask=circle)](https://github.com/iaroslav-ciupin)[![16888709](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/16888709?v=4&w=50&h=50&mask=circle)](https://github.com/kumare3)[![27777173](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/27777173?v=4&w=50&h=50&mask=circle)](https://github.com/samhita-alla)[![452166](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/452166?v=4&w=50&h=50&mask=circle)](https://github.com/MorpheusXAUT)[![4748985](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/4748985?v=4&w=50&h=50&mask=circle)](https://github.com/aliabbasjaffri)[![6562898](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/6562898?v=4&w=50&h=50&mask=circle)](https://github.com/ckiosidis)[![6239450](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/6239450?v=4&w=50&h=50&mask=circle)](https://github.com/mayitbeegh)[![8805803](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/8805803?v=4&w=50&h=50&mask=circle)](https://github.com/alexlipa91)[![5032356](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/5032356?v=4&w=50&h=50&mask=circle)](https://github.com/brucearctor)[![77798312](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/77798312?v=4&w=50&h=50&mask=circle)](https://github.com/pmahindrakar-oss)[![23062603](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/23062603?v=4&w=50&h=50&mask=circle)](https://github.com/Antaxify)[![653394](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/653394?v=4&w=50&h=50&mask=circle)](https://github.com/eapolinario)[![5725707](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/5725707?v=4&w=50&h=50&mask=circle)](https://github.com/andrewwdye)[![8122852](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/8122852?v=4&w=50&h=50&mask=circle)](https://github.com/ariefrahmansyah)[![10869815](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/10869815?v=4&w=50&h=50&mask=circle)](https://github.com/jeevb)[![3880645](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/3880645?v=4&w=50&h=50&mask=circle)](https://github.com/jonathanburns)[![3936213](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/3936213?v=4&w=50&h=50&mask=circle)](https://github.com/lu4nm3)[![26174213](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/26174213?v=4&w=50&h=50&mask=circle)](https://github.com/lyft-metaservice-2)[![9142716](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/9142716?v=4&w=50&h=50&mask=circle)](https://github.com/2uasimojo)[![5487021](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/5487021?v=4&w=50&h=50&mask=circle)](https://github.com/veggiemonk)[![1815175](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/1815175?v=4&w=50&h=50&mask=circle)](https://github.com/schottra)[![46989299](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/46989299?v=4&w=50&h=50&mask=circle)](https://github.com/supreeth7)[![2816689](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/2816689?v=4&w=50&h=50&mask=circle)](https://github.com/cosmicBboy)[![19375241](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/19375241?v=4&w=50&h=50&mask=circle)](https://github.com/migueltol22)[![6065051](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/6065051?v=4&w=50&h=50&mask=circle)](https://github.com/milton0825)[![70988](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/70988?v=4&w=50&h=50&mask=circle)](https://github.com/slai)[![94349093](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/94349093?v=4&w=50&h=50&mask=circle)](https://github.com/SmritiSatyanV)[![16090976](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/16090976?v=4&w=50&h=50&mask=circle)](https://github.com/surindersinghp)[![43610471](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/43610471?v=4&w=50&h=50&mask=circle)](https://github.com/TheYk98)[![53313394](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/53313394?v=4&w=50&h=50&mask=circle)](https://github.com/kosigz-lyft)[![4967458](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/4967458?v=4&w=50&h=50&mask=circle)](https://github.com/chanadian)[![467927](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/467927?v=4&w=50&h=50&mask=circle)](https://github.com/kanterov)[![248688](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/248688?v=4&w=50&h=50&mask=circle)](https://github.com/hanzo)[![1330233](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/1330233?v=4&w=50&h=50&mask=circle)](https://github.com/igorvalko)[![31255434](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/31255434?v=4&w=50&h=50&mask=circle)](https://github.com/kennyworkman)[![1472826](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/1472826?v=4&w=50&h=50&mask=circle)](https://github.com/maximsmol)[![5026554](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/5026554?v=4&w=50&h=50&mask=circle)](https://github.com/vsbus)[![34587798](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/34587798?v=4&w=50&h=50&mask=circle)](https://github.com/akhurana001)[![11799671](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/11799671?v=4&w=50&h=50&mask=circle)](https://github.com/bstadlbauer)[![95110820](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/95110820?v=4&w=50&h=50&mask=circle)](https://github.com/jerempy)[![38207208](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/38207208?v=4&w=50&h=50&mask=circle)](https://github.com/tnsetting)[![8200209](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/8200209?v=4&w=50&h=50&mask=circle)](https://github.com/catalinii)[![24364830](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/24364830?v=4&w=50&h=50&mask=circle)](https://github.com/ByronHsu)[![43587819](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/43587819?v=4&w=50&h=50&mask=circle)](https://github.com/chetcode)[![163899](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/163899?v=4&w=50&h=50&mask=circle)](https://github.com/regadas)[![36511035](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/36511035?v=4&w=50&h=50&mask=circle)](https://github.com/fg91)[![22784654](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/22784654?v=4&w=50&h=50&mask=circle)](https://github.com/aybidi)[![1316881](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/1316881?v=4&w=50&h=50&mask=circle)](https://github.com/akashkatipally)[![1777447](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/1777447?v=4&w=50&h=50&mask=circle)](https://github.com/goyalankit)[![1360529](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/1360529?v=4&w=50&h=50&mask=circle)](https://github.com/clairemcginty)[![104257](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/104257?v=4&w=50&h=50&mask=circle)](https://github.com/flixr)[![2538760](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/2538760?v=4&w=50&h=50&mask=circle)](https://github.com/akumor)[![11970258](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/11970258?v=4&w=50&h=50&mask=circle)](https://github.com/niliayu)[![19733683](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/19733683?v=4&w=50&h=50&mask=circle)](https://github.com/snyk-bot)[![155087](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/155087?v=4&w=50&h=50&mask=circle)](https://github.com/derwiki)[![1399455](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/1399455?v=4&w=50&h=50&mask=circle)](https://github.com/th0114nd)[![21109744](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/21109744?v=4&w=50&h=50&mask=circle)](https://github.com/AlekhyaSasi)[![49699333](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/in/29110?v=4&w=50&h=50&mask=circle)](https://github.com/apps/dependabot)[![1810591](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/1810591?v=4&w=50&h=50&mask=circle)](https://github.com/asottile)[![80421934](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/80421934?v=4&w=50&h=50&mask=circle)](https://github.com/SandraGH5)[![3939659](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/3939659?v=4&w=50&h=50&mask=circle)](https://github.com/sbrunk)[![9609986](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/9609986?v=4&w=50&h=50&mask=circle)](https://github.com/sonjaer)[![12219405](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/12219405?v=4&w=50&h=50&mask=circle)](https://github.com/fediazgon)[![98349643](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/98349643?v=4&w=50&h=50&mask=circle)](https://github.com/rahul-theorem)[![16509490](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/16509490?v=4&w=50&h=50&mask=circle)](https://github.com/ryankarlos)[![6774758](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/6774758?v=4&w=50&h=50&mask=circle)](https://github.com/ddhirajkumar)[![18337807](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/18337807?v=4&w=50&h=50&mask=circle)](https://github.com/max-hoffman)[![322624](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/322624?v=4&w=50&h=50&mask=circle)](https://github.com/AdrianoKF)[![1168692](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/1168692?v=4&w=50&h=50&mask=circle)](https://github.com/dennisobrien)[![91385411](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/91385411?v=4&w=50&h=50&mask=circle)](https://github.com/Ln11211)[![30621230](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/30621230?v=4&w=50&h=50&mask=circle)](https://github.com/aeioulisa)[![54334265](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/54334265?v=4&w=50&h=50&mask=circle)](https://github.com/michaels-lyft)[![48736656](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/48736656?v=4&w=50&h=50&mask=circle)](https://github.com/murilommen)[![17165004](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/17165004?v=4&w=50&h=50&mask=circle)](https://github.com/RobertoRRW)[![30375389](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/30375389?v=4&w=50&h=50&mask=circle)](https://github.com/bimtauer)[![97543480](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/97543480?v=4&w=50&h=50&mask=circle)](https://github.com/esadler-hbo)[![69013027](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/69013027?v=4&w=50&h=50&mask=circle)](https://github.com/ggydush-fn)[![116700206](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/116700206?v=4&w=50&h=50&mask=circle)](https://github.com/kiliangojek)[![422486](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/422486?v=4&w=50&h=50&mask=circle)](https://github.com/bethebunny)[![54333860](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/54333860?v=4&w=50&h=50&mask=circle)](https://github.com/aalavian)[![7005765](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/7005765?v=4&w=50&h=50&mask=circle)](https://github.com/convexquad)[![4025771](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/4025771?v=4&w=50&h=50&mask=circle)](https://github.com/andresgomezfrr)[![48966647](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/48966647?v=4&w=50&h=50&mask=circle)](https://github.com/asahalyft)[![77167782](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/77167782?v=4&w=50&h=50&mask=circle)](https://github.com/apatel-fn)[![23013825](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/23013825?v=4&w=50&h=50&mask=circle)](https://github.com/arpitbhardwaj)[![31381038](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/31381038?v=4&w=50&h=50&mask=circle)](https://github.com/lordnodd)[![4396228](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/4396228?v=4&w=50&h=50&mask=circle)](https://github.com/bryanwweber)[![6288302](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/6288302?v=4&w=50&h=50&mask=circle)](https://github.com/CalvinLeather)[![23107192](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/23107192?v=4&w=50&h=50&mask=circle)](https://github.com/YmirKhang)[![121866694](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/121866694?v=4&w=50&h=50&mask=circle)](https://github.com/franco-bocci)[![7358951](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/7358951?v=4&w=50&h=50&mask=circle)](https://github.com/frsann)[![33652917](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/33652917?v=4&w=50&h=50&mask=circle)](https://github.com/hfurkanvural)[![6984748](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/6984748?v=4&w=50&h=50&mask=circle)](https://github.com/jbrambleDC)[![488594](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/488594?v=4&w=50&h=50&mask=circle)](https://github.com/jcugat)[![20173739](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/20173739?v=4&w=50&h=50&mask=circle)](https://github.com/madhur-tandon)[![34498039](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/34498039?v=4&w=50&h=50&mask=circle)](https://github.com/matheusMoreno)[![19853373](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/19853373?v=4&w=50&h=50&mask=circle)](https://github.com/NotMatthewGriffin)[![10376195](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/10376195?v=4&w=50&h=50&mask=circle)](https://github.com/myz540)[![125105](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/125105?v=4&w=50&h=50&mask=circle)](https://github.com/tekumara)[![1153481](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/1153481?v=4&w=50&h=50&mask=circle)](https://github.com/ppiegaze)[![37170063](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/37170063?v=4&w=50&h=50&mask=circle)](https://github.com/Qiwen-Yu)[![2614101](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/2614101?v=4&w=50&h=50&mask=circle)](https://github.com/RobinKa)[![4308533](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/4308533?v=4&w=50&h=50&mask=circle)](https://github.com/rubenbarragan)[![10201242](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/10201242?v=4&w=50&h=50&mask=circle)](https://github.com/sugatoray)[![11269256](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/11269256?v=4&w=50&h=50&mask=circle)](https://github.com/sushrut111)[![61228633](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/61228633?v=4&w=50&h=50&mask=circle)](https://github.com/Tat-V)[![13070236](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/13070236?v=4&w=50&h=50&mask=circle)](https://github.com/TeoZosa)[![8817639](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/8817639?v=4&w=50&h=50&mask=circle)](https://github.com/ThomVett)[![17309187](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/17309187?v=4&w=50&h=50&mask=circle)](https://github.com/datability-io)[![26834658](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/26834658?v=4&w=50&h=50&mask=circle)](https://github.com/techytushar)[![5092599](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/5092599?v=4&w=50&h=50&mask=circle)](https://github.com/vchowdhary)[![57967031](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/57967031?v=4&w=50&h=50&mask=circle)](https://github.com/varshaparthay)[![67166843](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/67166843?v=4&w=50&h=50&mask=circle)](https://github.com/vvasavada-fn)[![1778407](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/1778407?v=4&w=50&h=50&mask=circle)](https://github.com/ybubnov)[![51814063](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/51814063?v=4&w=50&h=50&mask=circle)](https://github.com/Yicheng-Lu-llll)[![3741621](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/3741621?v=4&w=50&h=50&mask=circle)](https://github.com/palchicz)[![12450632](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/12450632?v=4&w=50&h=50&mask=circle)](https://github.com/ajsalow)[![35151789](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/35151789?v=4&w=50&h=50&mask=circle)](https://github.com/ggydush)[![13331724](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/13331724?v=4&w=50&h=50&mask=circle)](https://github.com/martinlyra)[![119345186](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/119345186?v=4&w=50&h=50&mask=circle)](https://github.com/mcloney-ddm)[![1521126](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/1521126?v=4&w=50&h=50&mask=circle)](https://github.com/pbrogan12)[![73247359](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/73247359?v=4&w=50&h=50&mask=circle)](https://github.com/stef-stripe)[![50860453](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/50860453?v=4&w=50&h=50&mask=circle)](https://github.com/charlie0220)[![6506810](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/6506810?v=4&w=50&h=50&mask=circle)](https://github.com/stephen37)[![55718143](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/55718143?v=4&w=50&h=50&mask=circle)](https://github.com/anrusina)[![65977800](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/65977800?v=4&w=50&h=50&mask=circle)](https://github.com/service-github-lyft-semantic-release)[![6610300](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/6610300?v=4&w=50&h=50&mask=circle)](https://github.com/ursucarina)[![84735036](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/84735036?v=4&w=50&h=50&mask=circle)](https://github.com/jsonporter)[![85753828](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/85753828?v=4&w=50&h=50&mask=circle)](https://github.com/csirius)[![101579322](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/101579322?v=4&w=50&h=50&mask=circle)](https://github.com/olga-union)[![26953709](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/26953709?v=4&w=50&h=50&mask=circle)](https://github.com/Pianist038801)[![105876962](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/105876962?v=4&w=50&h=50&mask=circle)](https://github.com/james-union)[![25038146](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/25038146?v=4&w=50&h=50&mask=circle)](https://github.com/eugenejahn)[![88684372](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/88684372?v=4&w=50&h=50&mask=circle)](https://github.com/4nalog)[![99441958](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/99441958?v=4&w=50&h=50&mask=circle)](https://github.com/apTalya)[![1388071](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/1388071?v=4&w=50&h=50&mask=circle)](https://github.com/aviaviavi)[![58770001](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/58770001?v=4&w=50&h=50&mask=circle)](https://github.com/Professional0321)[![20668349](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/20668349?v=4&w=50&h=50&mask=circle)](https://github.com/HiromuHota)[![100569684](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/100569684?v=4&w=50&h=50&mask=circle)](https://github.com/rafaelraposospot)[![17351764](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/17351764?v=4&w=50&h=50&mask=circle)](https://github.com/daniel-shuy)[![6399428](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/6399428?v=4&w=50&h=50&mask=circle)](https://github.com/live-wire)[![25695302](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/25695302?v=4&w=50&h=50&mask=circle)](https://github.com/sisco0)[![18363301](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/18363301?v=4&w=50&h=50&mask=circle)](https://github.com/jimbobby5)[![4023015](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/4023015?v=4&w=50&h=50&mask=circle)](https://github.com/pradithya)[![3451399](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/3451399?v=4&w=50&h=50&mask=circle)](https://github.com/skiptomyliu)[![25364490](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/25364490?v=4&w=50&h=50&mask=circle)](https://github.com/haoyuez)[![50679871](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/50679871?v=4&w=50&h=50&mask=circle)](https://github.com/lupasarin)[![7548823](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/7548823?v=4&w=50&h=50&mask=circle)](https://github.com/Dread1982)[![7515359](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/7515359?v=4&w=50&h=50&mask=circle)](https://github.com/narape)[![31982395](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/31982395?v=4&w=50&h=50&mask=circle)](https://github.com/alexapdev)[![62209650](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/62209650?v=4&w=50&h=50&mask=circle)](https://github.com/3t8)[![1892175](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/1892175?v=4&w=50&h=50&mask=circle)](https://github.com/zeryx)[![200401](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/200401?v=4&w=50&h=50&mask=circle)](https://github.com/arturdryomov)[![13770222](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/13770222?v=4&w=50&h=50&mask=circle)](https://github.com/ChickenTarm)[![2380665](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/2380665?v=4&w=50&h=50&mask=circle)](https://github.com/DavidMertz)[![24739949](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/24739949?v=4&w=50&h=50&mask=circle)](https://github.com/felixwang9817)[![10430635](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/10430635?v=4&w=50&h=50&mask=circle)](https://github.com/juandiegopalomino)[![31911175](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/31911175?v=4&w=50&h=50&mask=circle)](https://github.com/kanyesthaker)[![104152793](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/104152793?v=4&w=50&h=50&mask=circle)](https://github.com/marc-union)[![27818609](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/27818609?v=4&w=50&h=50&mask=circle)](https://github.com/michaeltinsley)[![6486584](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/6486584?v=4&w=50&h=50&mask=circle)](https://github.com/mucahitkantepe)[![321459](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/321459?v=4&w=50&h=50&mask=circle)](https://github.com/oyevtushok)[![35962310](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/35962310?v=4&w=50&h=50&mask=circle)](https://github.com/trishitapingolia)[![91927689](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/91927689?v=4&w=50&h=50&mask=circle)](https://github.com/Smartmind12)[![726061](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/726061?v=4&w=50&h=50&mask=circle)](https://github.com/huxuan)[![47872044](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/47872044?v=4&w=50&h=50&mask=circle)](https://github.com/privatedumbo)[![105229971](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/105229971?v=4&w=50&h=50&mask=circle)](https://github.com/tjKairos)[![405480](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/405480?v=4&w=50&h=50&mask=circle)](https://github.com/georgesnelling)[![1004789](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/1004789?v=4&w=50&h=50&mask=circle)](https://github.com/dschaller)[![82604841](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/82604841?v=4&w=50&h=50&mask=circle)](https://github.com/davidmirror-ops)[![480621](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/480621?v=4&w=50&h=50&mask=circle)](https://github.com/davidxia)[![1335881](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/1335881?v=4&w=50&h=50&mask=circle)](https://github.com/hoyajigi)[![100597998](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/100597998?v=4&w=50&h=50&mask=circle)](https://github.com/MrKrishnaAgarwal)[![4830700](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/4830700?v=4&w=50&h=50&mask=circle)](https://github.com/NitinAgg)[![69161722](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/69161722?v=4&w=50&h=50&mask=circle)](https://github.com/noobkid2411)[![43336767](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/43336767?v=4&w=50&h=50&mask=circle)](https://github.com/yongchand)[![25391173](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/25391173?v=4&w=50&h=50&mask=circle)](https://github.com/nicklofaso)[![66388192](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/66388192?v=4&w=50&h=50&mask=circle)](https://github.com/mounesi)[![14992189](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/14992189?v=4&w=50&h=50&mask=circle)](https://github.com/eanakhl)[![1175392](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/1175392?v=4&w=50&h=50&mask=circle)](https://github.com/adinin)[![7475946](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/7475946?v=4&w=50&h=50&mask=circle)](https://github.com/anton-malakhov)[![11796986](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/11796986?v=4&w=50&h=50&mask=circle)](https://github.com/avan-sh)[![304786](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/304786?v=4&w=50&h=50&mask=circle)](https://github.com/kinow)[![24402505](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/24402505?v=4&w=50&h=50&mask=circle)](https://github.com/Daeruin)[![1659415](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/1659415?v=4&w=50&h=50&mask=circle)](https://github.com/dav009)[![86911142](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/86911142?v=4&w=50&h=50&mask=circle)](https://github.com/idivyanshbansal)[![11456773](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/11456773?v=4&w=50&h=50&mask=circle)](https://github.com/fvde)[![7490199](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/7490199?v=4&w=50&h=50&mask=circle)](https://github.com/Lundez)[![10345184](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/10345184?v=4&w=50&h=50&mask=circle)](https://github.com/hasukmistry)[![29532638](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/29532638?v=4&w=50&h=50&mask=circle)](https://github.com/rokrokss)[![14008978](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/14008978?v=4&w=50&h=50&mask=circle)](https://github.com/jeremydonahue)[![9272376](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/9272376?v=4&w=50&h=50&mask=circle)](https://github.com/jonasdebeukelaer)[![1633460](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/1633460?v=4&w=50&h=50&mask=circle)](https://github.com/jmcarp)[![3033592](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/3033592?v=4&w=50&h=50&mask=circle)](https://github.com/kazesberger)[![19229049](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/19229049?v=4&w=50&h=50&mask=circle)](https://github.com/lsena)[![36594527](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/36594527?v=4&w=50&h=50&mask=circle)](https://github.com/mishmanners)[![8755869](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/8755869?v=4&w=50&h=50&mask=circle)](https://github.com/paravatha)[![6528449](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/6528449?v=4&w=50&h=50&mask=circle)](https://github.com/uschi2000)[![790725](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/790725?v=4&w=50&h=50&mask=circle)](https://github.com/rodrigobaron)[![576968](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/576968?v=4&w=50&h=50&mask=circle)](https://github.com/ronaldosaheki)[![36827492](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/36827492?v=4&w=50&h=50&mask=circle)](https://github.com/shahwar9)[![133936](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/133936?v=4&w=50&h=50&mask=circle)](https://github.com/shihgianlee)[![10438373](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/10438373?v=4&w=50&h=50&mask=circle)](https://github.com/SKalt)[![33272587](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/33272587?v=4&w=50&h=50&mask=circle)](https://github.com/samuel-sujith)[![580328](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/580328?v=4&w=50&h=50&mask=circle)](https://github.com/ilikedata)[![1027207](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/1027207?v=4&w=50&h=50&mask=circle)](https://github.com/orf)[![16526627](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/16526627?v=4&w=50&h=50&mask=circle)](https://github.com/vijaysaravana)[![10526540](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/10526540?v=4&w=50&h=50&mask=circle)](https://github.com/yubofredwang)[![5346764](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/5346764?v=4&w=50&h=50&mask=circle)](https://github.com/fsz285)[![22917741](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/22917741?v=4&w=50&h=50&mask=circle)](https://github.com/gigi-at-zymergen)[![40143026](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/40143026?v=4&w=50&h=50&mask=circle)](https://github.com/hampusrosvall)[![77197126](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/77197126?v=4&w=50&h=50&mask=circle)](https://github.com/hitarth01)[![300315](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/300315?v=4&w=50&h=50&mask=circle)](https://github.com/jcourteau)[![106815366](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/106815366?v=4&w=50&h=50&mask=circle)](https://github.com/jw0515)[![1568889](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/1568889?v=4&w=50&h=50&mask=circle)](https://github.com/leorleor)[![937967](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/937967?v=4&w=50&h=50&mask=circle)](https://github.com/moose007)[![114232404](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/114232404?v=4&w=50&h=50&mask=circle)](https://github.com/sanjaychouhan-adf)[![14996868](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/14996868?v=4&w=50&h=50&mask=circle)](https://github.com/v01dXYZ)[![93438190](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/93438190?v=4&w=50&h=50&mask=circle)](https://github.com/wanderer163)[![1043051](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/1043051?v=4&w=50&h=50&mask=circle)](https://github.com/kylewaynebenson)[![21953442](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/21953442?v=4&w=50&h=50&mask=circle)](https://github.com/Gui11aum3)[![16461847](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/16461847?v=4&w=50&h=50&mask=circle)](https://github.com/JakeNeyer)[![64676594](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/64676594?v=4&w=50&h=50&mask=circle)](https://github.com/abhijeet007rocks8)[![1174730](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/1174730?v=4&w=50&h=50&mask=circle)](https://github.com/mouuff)[![20135478](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/20135478?v=4&w=50&h=50&mask=circle)](https://github.com/Juneezee)[![151841](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/151841?v=4&w=50&h=50&mask=circle)](https://github.com/goodgravy)[![44368997](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/44368997?v=4&w=50&h=50&mask=circle)](https://github.com/radiantly)[![36989112](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/36989112?v=4&w=50&h=50&mask=circle)](https://github.com/nishantwrp)[![7144772](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/7144772?v=4&w=50&h=50&mask=circle)](https://github.com/sighingnow)[![697033](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/697033?v=4&w=50&h=50&mask=circle)](https://github.com/vglocus)[![2845540](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/2845540?v=4&w=50&h=50&mask=circle)](https://github.com/RustedBones)[![4056828](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/4056828?v=4&w=50&h=50&mask=circle)](https://github.com/pablocasares)[![1071153](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/1071153?v=4&w=50&h=50&mask=circle)](https://github.com/evdokim)[![5732047](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/5732047?v=4&w=50&h=50&mask=circle)](https://github.com/stormy-ua)[![471021](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/471021?v=4&w=50&h=50&mask=circle)](https://github.com/marschall)[![71284190](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/71284190?v=4&w=50&h=50&mask=circle)](https://github.com/gdungca-fn)[![26265392](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/26265392?v=4&w=50&h=50&mask=circle)](https://github.com/ttanay)[![85021780](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/85021780?v=4&w=50&h=50&mask=circle)](https://github.com/Abdullahi-Ahmed)[![48512530](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/48512530?v=4&w=50&h=50&mask=circle)](https://github.com/amaleelhamri)[![3275593](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/3275593?v=4&w=50&h=50&mask=circle)](https://github.com/pradyunsg)[![66853113](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/in/68672?v=4&w=50&h=50&mask=circle)](https://github.com/apps/pre-commit-ci)[![1834509](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/1834509?v=4&w=50&h=50&mask=circle)](https://github.com/jdknight)[![107893](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/107893?v=4&w=50&h=50&mask=circle)](https://github.com/kmike)[![1324225](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/1324225?v=4&w=50&h=50&mask=circle)](https://github.com/hugovk)[![1300022](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/1300022?v=4&w=50&h=50&mask=circle)](https://github.com/sirosen)[![244656](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/244656?v=4&w=50&h=50&mask=circle)](https://github.com/humitos)[![467294](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/467294?v=4&w=50&h=50&mask=circle)](https://github.com/bastimeyer)[![71486](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/71486?v=4&w=50&h=50&mask=circle)](https://github.com/asmeurer)[![20280470](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/20280470?v=4&w=50&h=50&mask=circle)](https://github.com/drewyh)[![3533182](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/3533182?v=4&w=50&h=50&mask=circle)](https://github.com/polyzen)[![199429](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/199429?v=4&w=50&h=50&mask=circle)](https://github.com/dvarrazzo)[![1032633](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/1032633?v=4&w=50&h=50&mask=circle)](https://github.com/dbitouze)[![1313087](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/1313087?v=4&w=50&h=50&mask=circle)](https://github.com/idryzhov)[![521097](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/521097?v=4&w=50&h=50&mask=circle)](https://github.com/pauloxnet)[![63936253](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/63936253?v=4&w=50&h=50&mask=circle)](https://github.com/ichard26)[![18519037](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/18519037?v=4&w=50&h=50&mask=circle)](https://github.com/sethmlarson)[![413772](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/413772?v=4&w=50&h=50&mask=circle)](https://github.com/graingert)[![11478411](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/11478411?v=4&w=50&h=50&mask=circle)](https://github.com/stonecharioteer)[![6739793](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/6739793?v=4&w=50&h=50&mask=circle)](https://github.com/yeraydiazdiaz)[![83365562](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/83365562?v=4&w=50&h=50&mask=circle)](https://github.com/eviau-sat)[![6670894](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/6670894?v=4&w=50&h=50&mask=circle)](https://github.com/rozsasarpi)[![86675](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/86675?v=4&w=50&h=50&mask=circle)](https://github.com/estan)[![4748863](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/4748863?v=4&w=50&h=50&mask=circle)](https://github.com/pseudomuto)[![181308](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/181308?v=4&w=50&h=50&mask=circle)](https://github.com/htdvisser)[![1390277](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/1390277?v=4&w=50&h=50&mask=circle)](https://github.com/jacobtolar)[![1391982](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/1391982?v=4&w=50&h=50&mask=circle)](https://github.com/ezimanyi)[![3880001](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/3880001?v=4&w=50&h=50&mask=circle)](https://github.com/lpabon)[![770392](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/770392?v=4&w=50&h=50&mask=circle)](https://github.com/ArcEye)[![6178510](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/6178510?v=4&w=50&h=50&mask=circle)](https://github.com/mingrammer)[![5111931](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/5111931?v=4&w=50&h=50&mask=circle)](https://github.com/aschrijver)[![873434](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/873434?v=4&w=50&h=50&mask=circle)](https://github.com/panzerfahrer)[![16724](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/16724?v=4&w=50&h=50&mask=circle)](https://github.com/glasser)[![17330872](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/17330872?v=4&w=50&h=50&mask=circle)](https://github.com/murph0)[![419419](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/419419?v=4&w=50&h=50&mask=circle)](https://github.com/zetaron)[![1014](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/1014?v=4&w=50&h=50&mask=circle)](https://github.com/sunfmin)[![504507](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/504507?v=4&w=50&h=50&mask=circle)](https://github.com/guozheng)[![8841470](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/8841470?v=4&w=50&h=50&mask=circle)](https://github.com/suusan2go)[![901479](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/901479?v=4&w=50&h=50&mask=circle)](https://github.com/mhaberler)[![6400253](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/6400253?v=4&w=50&h=50&mask=circle)](https://github.com/s4ichi)[![353644](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/353644?v=4&w=50&h=50&mask=circle)](https://github.com/dreampuf)[![12421077](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/12421077?v=4&w=50&h=50&mask=circle)](https://github.com/UnicodingUnicorn)[![809865](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/809865?v=4&w=50&h=50&mask=circle)](https://github.com/philiptzou)[![19378](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/19378?v=4&w=50&h=50&mask=circle)](https://github.com/timabell)[![1113245](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/1113245?v=4&w=50&h=50&mask=circle)](https://github.com/jasonhancock)[![101659](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/101659?v=4&w=50&h=50&mask=circle)](https://github.com/matryer)[![4730508](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/4730508?v=4&w=50&h=50&mask=circle)](https://github.com/piotrrojek)[![33036160](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/33036160?v=4&w=50&h=50&mask=circle)](https://github.com/jasonsattler)[![470810](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/470810?v=4&w=50&h=50&mask=circle)](https://github.com/sbward)[![7592392](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/7592392?v=4&w=50&h=50&mask=circle)](https://github.com/Pisush)[![94814](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/94814?v=4&w=50&h=50&mask=circle)](https://github.com/tamalsaha)[![8147854](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/8147854?v=4&w=50&h=50&mask=circle)](https://github.com/marianina8)[![1005](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/1005?v=4&w=50&h=50&mask=circle)](https://github.com/ernesto-jimenez)[![17263167](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/17263167?v=4&w=50&h=50&mask=circle)](https://github.com/jsteenb2)[![2807589](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/2807589?v=4&w=50&h=50&mask=circle)](https://github.com/darwayne)[![1683714](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/1683714?v=4&w=50&h=50&mask=circle)](https://github.com/naysayer)[![6386887](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/6386887?v=4&w=50&h=50&mask=circle)](https://github.com/AgrimPrasad)[![615811](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/615811?v=4&w=50&h=50&mask=circle)](https://github.com/dahernan)[![75184](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/75184?v=4&w=50&h=50&mask=circle)](https://github.com/jtarchie)[![469669](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/469669?v=4&w=50&h=50&mask=circle)](https://github.com/jdtobe)[![28523](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/28523?v=4&w=50&h=50&mask=circle)](https://github.com/alrs)[![10113228](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/10113228?v=4&w=50&h=50&mask=circle)](https://github.com/urisimchoni)[![5751464](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/5751464?v=4&w=50&h=50&mask=circle)](https://github.com/Xercoy)[![2405410](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/2405410?v=4&w=50&h=50&mask=circle)](https://github.com/marbergq)[![5082160](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/5082160?v=4&w=50&h=50&mask=circle)](https://github.com/anothrNick)[![11335612](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/11335612?v=4&w=50&h=50&mask=circle)](https://github.com/fermoya)[![23391642](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/23391642?v=4&w=50&h=50&mask=circle)](https://github.com/sbe-arg)[![1024762](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/1024762?v=4&w=50&h=50&mask=circle)](https://github.com/PeerXu)[![7390781](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/7390781?v=4&w=50&h=50&mask=circle)](https://github.com/reececomo)[![49680](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/49680?v=4&w=50&h=50&mask=circle)](https://github.com/dmerrick)[![87524](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/87524?v=4&w=50&h=50&mask=circle)](https://github.com/andrewcole)[![866505](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/866505?v=4&w=50&h=50&mask=circle)](https://github.com/phish108)[![2611549](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/2611549?v=4&w=50&h=50&mask=circle)](https://github.com/endrjuskr)[![49961058](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/49961058?v=4&w=50&h=50&mask=circle)](https://github.com/bevans-HD)[![5655837](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/5655837?v=4&w=50&h=50&mask=circle)](https://github.com/gukoff)[![8320753](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/8320753?v=4&w=50&h=50&mask=circle)](https://github.com/lovromazgon)[![16513382](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/16513382?v=4&w=50&h=50&mask=circle)](https://github.com/117)[![3807434](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/3807434?v=4&w=50&h=50&mask=circle)](https://github.com/tomsolem)[![118945041](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/118945041?v=4&w=50&h=50&mask=circle)](https://github.com/vq-ambiata)[![8232503](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/8232503?v=4&w=50&h=50&mask=circle)](https://github.com/sjauld)[![69170839](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/69170839?v=4&w=50&h=50&mask=circle)](https://github.com/adam-berrio)[![6388483](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/6388483?v=4&w=50&h=50&mask=circle)](https://github.com/zsedem)[![8296645](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/8296645?v=4&w=50&h=50&mask=circle)](https://github.com/imdanielsp)[![17337515](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/17337515?v=4&w=50&h=50&mask=circle)](https://github.com/fabricepipart)[![10090384](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/10090384?v=4&w=50&h=50&mask=circle)](https://github.com/ivanpk)[![2302957](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/2302957?v=4&w=50&h=50&mask=circle)](https://github.com/JeremyLWright)[![995707](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/995707?v=4&w=50&h=50&mask=circle)](https://github.com/OskarStark)[![25486791](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/25486791?v=4&w=50&h=50&mask=circle)](https://github.com/pavyarov)[![5067549](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/5067549?v=4&w=50&h=50&mask=circle)](https://github.com/pellared)[![53085803](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/53085803?v=4&w=50&h=50&mask=circle)](https://github.com/cuttingedge1109)[![62775347](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/62775347?v=4&w=50&h=50&mask=circle)](https://github.com/okozachenko1203)[![25625597](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/25625597?v=4&w=50&h=50&mask=circle)](https://github.com/zero-below)[![282792](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/282792?v=4&w=50&h=50&mask=circle)](https://github.com/asford)[![38894122](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/38894122?v=4&w=50&h=50&mask=circle)](https://github.com/bmcconeghy)[![16698198](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/16698198?v=4&w=50&h=50&mask=circle)](https://github.com/conda-forge-admin)[![36490558](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/36490558?v=4&w=50&h=50&mask=circle)](https://github.com/regro-cf-autotick-bot)[![79913779](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/in/102928?v=4&w=50&h=50&mask=circle)](https://github.com/apps/conda-forge-curator)[![41898282](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/in/15368?v=4&w=50&h=50&mask=circle)](https://github.com/apps/github-actions)[![18567580](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/18567580?v=4&w=50&h=50&mask=circle)](https://github.com/conda-forge-linter)[![26092524](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/26092524?v=4&w=50&h=50&mask=circle)](https://github.com/fellhorn) From 9eb94c301bb5571bf3a72b09eae22789e0848430 Mon Sep 17 00:00:00 2001 From: Samhita Alla Date: Wed, 26 Apr 2023 12:30:08 +0530 Subject: [PATCH 7/9] update emojis Signed-off-by: Samhita Alla --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index d82b215f40..f92c56fd29 100644 --- a/README.md +++ b/README.md @@ -7,7 +7,7 @@

- 💻 ⚙️ 🚀 + 🏗️ 🚀 📈

From 7708310fe4d78cb5214c7d724997b9fb2096fff3 Mon Sep 17 00:00:00 2001 From: Samhita Alla Date: Wed, 26 Apr 2023 12:42:59 +0530 Subject: [PATCH 8/9] update tagline Signed-off-by: Samhita Alla --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index f92c56fd29..5904b608a3 100644 --- a/README.md +++ b/README.md @@ -16,7 +16,7 @@

-Flyte is an **open-source orchestrator** that facilitates building production-grade data and ML pipelines. It operates in a distributed environment and is built for scalability and reproducibility, leveraging Kubernetes as its underlying platform. With Flyte, user teams can construct pipelines using the Python SDK, and seamlessly deploy them on both cloud and on-premises environments. +Flyte is an **open-source orchestrator** that facilitates building production-grade data and ML pipelines. It is built for scalability and reproducibility, leveraging Kubernetes as its underlying platform. With Flyte, user teams can construct pipelines using the Python SDK, and seamlessly deploy them on both cloud and on-premises environments, enabling distributed processing and efficient resource utilization.

From 728f2b0836b0959797f7c3998d804a84d37fa859 Mon Sep 17 00:00:00 2001 From: Samhita Alla Date: Wed, 26 Apr 2023 22:37:38 +0530 Subject: [PATCH 9/9] remove eks directory Signed-off-by: Samhita Alla --- eks/README.md | 25 ---- eks/tf/main.tf | 161 --------------------- eks/tf/modules/alb-ingress/main.tf | 183 ------------------------ eks/tf/modules/alb-ingress/outputs.tf | 0 eks/tf/modules/alb-ingress/variables.tf | 20 --- eks/tf/modules/flyte-eks/main.tf | 111 -------------- eks/tf/modules/flyte-eks/outputs.tf | 36 ----- eks/tf/modules/flyte-eks/variables.tf | 4 - eks/tf/modules/flyte-rds/main.tf | 22 --- eks/tf/modules/flyte-rds/outputs.tf | 8 -- eks/tf/modules/flyte-rds/variables.tf | 4 - eks/tf/outputs.tf | 49 ------- eks/tf/values.auto.tfvars | 4 - eks/tf/variables.tf | 12 -- 14 files changed, 639 deletions(-) delete mode 100644 eks/README.md delete mode 100644 eks/tf/main.tf delete mode 100644 eks/tf/modules/alb-ingress/main.tf delete mode 100644 eks/tf/modules/alb-ingress/outputs.tf delete mode 100644 eks/tf/modules/alb-ingress/variables.tf delete mode 100644 eks/tf/modules/flyte-eks/main.tf delete mode 100644 eks/tf/modules/flyte-eks/outputs.tf delete mode 100644 eks/tf/modules/flyte-eks/variables.tf delete mode 100644 eks/tf/modules/flyte-rds/main.tf delete mode 100644 eks/tf/modules/flyte-rds/outputs.tf delete mode 100644 eks/tf/modules/flyte-rds/variables.tf delete mode 100644 eks/tf/outputs.tf delete mode 100644 eks/tf/values.auto.tfvars delete mode 100644 eks/tf/variables.tf diff --git a/eks/README.md b/eks/README.md deleted file mode 100644 index f0e7c0d611..0000000000 --- a/eks/README.md +++ /dev/null @@ -1,25 +0,0 @@ - -Steps: -- Make sure kubectl and aws-cli are installed and working -- Make sure terraform is installed and working and references aws-cli permissions -- Run Terraform files. (There seems to be a race condition in one of the IAM role creation steps - you may need to run it twice.) -- Copy or update the kubectl config file and switch to that context. -- Create the webhook - - Create ECR repo for the webhook - - Build the image and push - - Run the make cluster-up command with the right image -- Create the example 2048 game on the EKS IAM page linked above. Keep in mind that even after an address shows up in the ingress, it may take a while to provision. -- Delete the game -- Create the spare datacatalog reference in the db. -- Follow the [Installation portion](https://github.com/aws/amazon-eks-pod-identity-webhook/blob/95808cffe6d801822dae122f2f2c87a258d70bb8/README.md#installation) of the webhook readme. You will need to make sure to use your own AWS account number, and will also need to build your own image and upload it to your ECR, which will probably require you to create that repository in your ECR. -- Go through all the overlays in the `kustomize/overlays/eks` folder and make sure all the service accounts and RDS addresses reference yours. (Do a grep for `111222333456` and `456123e6ivib`). -- Install Flyte with `kubectl apply -f deployment/eks/flyte_generated.yaml` - -This is the webhook used to inject IAM role credentials into pods. -https://github.com/aws/amazon-eks-pod-identity-webhook - -This is how you get pods to use the proper roles. (This is the KIAM replacement.) -https://docs.aws.amazon.com/eks/latest/userguide/iam-roles-for-service-accounts-technical-overview.html -The implementation of these steps is done for you in the `alb-ingress` submodule. - - diff --git a/eks/tf/main.tf b/eks/tf/main.tf deleted file mode 100644 index 0e05fc6d6b..0000000000 --- a/eks/tf/main.tf +++ /dev/null @@ -1,161 +0,0 @@ -terraform { - required_version = ">= 0.12.0" -} - -provider "aws" { - profile = "default" - region = var.region -} - -# Use the internal module to create an RDS instance with a user-supplied VPC -module "flyte_rds" { - source = "./modules/flyte-rds" - - rds_vpc = var.rds_vpc -} - -# Use the internal module to create an EKS cluster, which has its own VPC -module "flyte_eks" { - source = "./modules/flyte-eks" - - eks_cluster_name = var.eks_cluster_name -} - -# Get information about the two VPCs -data "aws_vpc" "rds_vpc" { - id = var.rds_vpc -} - -data "aws_vpc" "eks_vpc" { - id = module.flyte_eks.eks_vpc_id -} - -# Get information about the RDS instance -data "aws_db_instance" "flyte_rds" { - db_instance_identifier = module.flyte_rds.admin_rds_instance_id -} - -resource "aws_vpc_peering_connection" "eks_to_main_peering" { - peer_vpc_id = var.rds_vpc - vpc_id = module.flyte_eks.eks_vpc_id - auto_accept = true - - tags = { - Name = "VPC peering connection between Flyte RDS and EKS" - } - - accepter { - allow_remote_vpc_dns_resolution = true - } - - requester { - allow_remote_vpc_dns_resolution = true - } -} - -data "aws_route_table" "eks_public_route_table" { - vpc_id = module.flyte_eks.eks_vpc_id - filter { - name = "tag:Name" - values = ["${var.eks_cluster_name}-vpc-public"] - } -} - -resource "aws_route" "route_rds_cidr" { - route_table_id = data.aws_route_table.eks_public_route_table.id - destination_cidr_block = data.aws_vpc.rds_vpc.cidr_block - vpc_peering_connection_id = aws_vpc_peering_connection.eks_to_main_peering.id -} - -# Add a rule to the RDS security group to allow access from the EKS VPC -resource "aws_security_group_rule" "allow_eks_to_rds" { - type = "ingress" - from_port = 5432 - to_port = 5432 - protocol = "tcp" - cidr_blocks = [data.aws_vpc.eks_vpc.cidr_block] - security_group_id = data.aws_db_instance.flyte_rds.vpc_security_groups[0] -} - -# The following implements the instructions set forth by: -# https://github.com/aws/amazon-eks-pod-identity-webhook/blob/95808cffe6d801822dae122f2f2c87a258d70bb8/README.md -# This is a webhook that will allow pods to assume arbitrarily constrained roles via their service account. -# TODO: This should be moved into a separate module probably but will require further refactoring as the assume role -# policy used is also used further below in the ALB ingress module. - -# Create an oidc provider using the EKS cluster's public OIDC discovery endpoint -resource "aws_iam_openid_connect_provider" "eks_oidc_connection" { - client_id_list = ["sts.amazonaws.com"] - thumbprint_list = ["9e99a48a9960b14926bb7f3b02e22da2b0ab7280"] - url = module.flyte_eks.eks_oidc_issuer -} - -locals { - issuer_parsed = regex("^arn.*(?Poidc.eks.*)", aws_iam_openid_connect_provider.eks_oidc_connection.arn) -} - -# This is the trust document that will allow pods to use roles that they specify in their service account -data "aws_iam_policy_document" "let_pods_assume_roles" { - statement { - actions = ["sts:AssumeRoleWithWebIdentity"] - - principals { - type = "Federated" - identifiers = [aws_iam_openid_connect_provider.eks_oidc_connection.arn] - } - - condition { - test = "StringLike" - variable = "${local.issuer_parsed.trailing}:sub" - - values = [ - "system:serviceaccount:*:*", - ] - } - } -} - -# Make a role for Flyte components themselves to use -resource "aws_iam_role" "flyte_operator" { - name = "flyte-operator" - assume_role_policy = data.aws_iam_policy_document.let_pods_assume_roles.json -} - - -# Make a policy document -# TODO: Scope this down later -data "aws_iam_policy_document" "all_s3_access" { - statement { - actions = [ - "s3:*", - ] - - resources = [ - "*", - ] - } -} - -# Use the policy document to create a policy -resource "aws_iam_policy" "flyte_operator_s3_access" { - name = "flyte_operator_s3_access" - path = "/" - policy = data.aws_iam_policy_document.all_s3_access.json -} - -# Attach the policy to the flyte operator role -resource "aws_iam_role_policy_attachment" "flyte_operator_s3_attach" { - role = aws_iam_role.flyte_operator.name - policy_arn = aws_iam_policy.flyte_operator_s3_access.arn -} - -module "alb_ingress" { - source = "./modules/alb-ingress" - - region = var.region - eks_cluster_name = var.eks_cluster_name - cluster_id = module.flyte_eks.cluster_id - eks_vpc_id = module.flyte_eks.eks_vpc_id - assume_role_policy_string = data.aws_iam_policy_document.let_pods_assume_roles.json -} - diff --git a/eks/tf/modules/alb-ingress/main.tf b/eks/tf/modules/alb-ingress/main.tf deleted file mode 100644 index 2624ed9c43..0000000000 --- a/eks/tf/modules/alb-ingress/main.tf +++ /dev/null @@ -1,183 +0,0 @@ -# As required by https://docs.aws.amazon.com/eks/latest/userguide/alb-ingress.html -data "http" "alb_ingress_policy" { - url = "https://raw.githubusercontent.com/kubernetes-sigs/aws-alb-ingress-controller/v1.1.4/docs/examples/iam-policy.json" - - request_headers = { - Accept = "application/json" - } -} - -resource "aws_iam_policy" "k8s_alb_ingress_controller" { - name = "ALBIngressControllerIAMPolicy" - path = "/" - policy = data.http.alb_ingress_policy.body -} - -resource "aws_iam_role" "eks_alb_ingress_controller" { - name = "eks-alb-ingress-controller" - assume_role_policy = var.assume_role_policy_string -} - -# Attach the policy to the flyte operator role -resource "aws_iam_role_policy_attachment" "eks_alb_attachment" { - role = aws_iam_role.eks_alb_ingress_controller.name - policy_arn = aws_iam_policy.k8s_alb_ingress_controller.arn -} - -data "aws_eks_cluster" "cluster" { - name = var.cluster_id -} - -data "aws_eks_cluster_auth" "cluster" { - name = var.cluster_id -} - -provider "kubernetes" { - host = data.aws_eks_cluster.cluster.endpoint - cluster_ca_certificate = base64decode(data.aws_eks_cluster.cluster.certificate_authority.0.data) - token = data.aws_eks_cluster_auth.cluster.token - load_config_file = false - version = "~> 1.9" -} - -resource "kubernetes_cluster_role" "alb_ingress_controller" { - metadata { - name = "alb-ingress-controller" - - labels = { - "app.kubernetes.io/name" : "alb-ingress-controller" - } - } - - rule { - api_groups = [ - "", - "extensions", - ] - resources = [ - "configmaps", - "endpoints", - "events", - "ingresses", - "ingresses/status", - "services", - ] - verbs = [ - "create", - "get", - "list", - "update", - "watch", - "patch", - ] - } - - rule { - api_groups = [ - "", - "extensions", - ] - resources = [ - "nodes", - "pods", - "secrets", - "services", - "namespaces", - ] - verbs = [ - "get", - "list", - "watch", - ] - } -} - -resource "kubernetes_service_account" "alb_ingress_controller" { - metadata { - name = "alb-ingress-controller" - namespace = "kube-system" - - labels = { - "app.kubernetes.io/name" = "alb-ingress-controller" - } - - annotations = { - "eks.amazonaws.com/role-arn" = aws_iam_role.eks_alb_ingress_controller.arn - } - } -} - -resource "kubernetes_cluster_role_binding" "alb_ingress_controller" { - metadata { - name = "alb-ingress-controller" - - labels = { - "app.kubernetes.io/name" = "alb-ingress-controller" - } - } - - role_ref { - api_group = "rbac.authorization.k8s.io" - kind = "ClusterRole" - name = kubernetes_cluster_role.alb_ingress_controller.metadata[0].name - } - - subject { - kind = "ServiceAccount" - name = kubernetes_service_account.alb_ingress_controller.metadata[0].name - namespace = "kube-system" - } -} - -resource "kubernetes_deployment" "alb_ingress_controller" { - metadata { - name = "alb-ingress-controller" - namespace = "kube-system" - - labels = { - "app.kubernetes.io/name" = "alb-ingress-controller" - } - } - - spec { - selector { - match_labels = { - "app.kubernetes.io/name" = "alb-ingress-controller" - } - } - - template { - metadata { - name = "alb-ingress-controller" - namespace = "kube-system" - - labels = { - "app.kubernetes.io/name" = "alb-ingress-controller" - } - } - - spec { - container { - name = "alb-ingress-controller" - image = "docker.io/amazon/aws-alb-ingress-controller:v1.1.4" - args = [ - "--ingress-class=alb", - "--cluster-name=${var.eks_cluster_name}", - "--aws-vpc-id=${var.eks_vpc_id}", - "--aws-region=${var.region}", - "--feature-gates=waf=false", - ] - } - - service_account_name = kubernetes_service_account.alb_ingress_controller.metadata[0].name - automount_service_account_token = true - - node_selector = { - "beta.kubernetes.io/os" = "linux" - } - } - } - } -} - - diff --git a/eks/tf/modules/alb-ingress/outputs.tf b/eks/tf/modules/alb-ingress/outputs.tf deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/eks/tf/modules/alb-ingress/variables.tf b/eks/tf/modules/alb-ingress/variables.tf deleted file mode 100644 index 43a0e9219c..0000000000 --- a/eks/tf/modules/alb-ingress/variables.tf +++ /dev/null @@ -1,20 +0,0 @@ -variable "region" { - type = string -} - -variable "eks_cluster_name" { - type = string -} - -variable "eks_vpc_id" { - type = string -} - -variable "cluster_id" { - type = string -} - -variable "assume_role_policy_string" { - type = string -} - diff --git a/eks/tf/modules/flyte-eks/main.tf b/eks/tf/modules/flyte-eks/main.tf deleted file mode 100644 index edecace66a..0000000000 --- a/eks/tf/modules/flyte-eks/main.tf +++ /dev/null @@ -1,111 +0,0 @@ -data "aws_eks_cluster" "cluster" { - name = module.eks.cluster_id -} - -data "aws_availability_zones" "available" { -} - -resource "aws_security_group" "worker_group_mgmt_one" { - name_prefix = "worker_group_mgmt_one" - vpc_id = module.vpc.vpc_id - - ingress { - from_port = 22 - to_port = 22 - protocol = "tcp" - - cidr_blocks = [ - "10.0.0.0/8", - ] - } -} - -resource "aws_security_group" "worker_group_mgmt_two" { - name_prefix = "worker_group_mgmt_two" - vpc_id = module.vpc.vpc_id - - ingress { - from_port = 22 - to_port = 22 - protocol = "tcp" - - cidr_blocks = [ - "192.168.0.0/16", - ] - } -} - -resource "aws_security_group" "all_worker_mgmt" { - name_prefix = "all_worker_management" - vpc_id = module.vpc.vpc_id - - ingress { - from_port = 22 - to_port = 22 - protocol = "tcp" - - cidr_blocks = [ - "10.0.0.0/8", - "172.16.0.0/12", - "192.168.0.0/16", - ] - } -} - -module "vpc" { - source = "git::https://github.com/terraform-aws-modules/terraform-aws-vpc.git?ref=v2.6.0" - name = "${var.eks_cluster_name}-vpc" - - cidr = "10.0.0.0/16" - azs = data.aws_availability_zones.available.names - private_subnets = ["10.0.1.0/24", "10.0.2.0/24", "10.0.3.0/24"] - public_subnets = ["10.0.4.0/24", "10.0.5.0/24", "10.0.6.0/24"] - enable_nat_gateway = true - single_nat_gateway = true - enable_dns_hostnames = true - - public_subnet_tags = { - "kubernetes.io/cluster/${var.eks_cluster_name}" = "shared" - "kubernetes.io/role/elb" = "1" - } - - private_subnet_tags = { - "kubernetes.io/cluster/${var.eks_cluster_name}" = "shared" - "kubernetes.io/role/internal-elb" = "1" - } -} - -module "eks" { - source = "git::https://github.com/terraform-aws-modules/terraform-aws-eks.git?ref=v11.0.0" - - cluster_name = var.eks_cluster_name - subnets = module.vpc.private_subnets - - tags = { - Environment = "test" - GithubRepo = "terraform-aws-eks" - GithubOrg = "terraform-aws-modules" - } - - vpc_id = module.vpc.vpc_id - - worker_groups = [ - { - name = "worker-group-1" - instance_type = "t2.small" - additional_userdata = "flyte t2.small" - asg_desired_capacity = 2 - additional_security_group_ids = [aws_security_group.worker_group_mgmt_one.id] - }, - { - name = "worker-group-2" - instance_type = "t2.medium" - additional_userdata = "flyte t2.medium" - additional_security_group_ids = [aws_security_group.worker_group_mgmt_two.id] - asg_desired_capacity = 1 - }, - ] - - worker_additional_security_group_ids = [aws_security_group.all_worker_mgmt.id] -} - diff --git a/eks/tf/modules/flyte-eks/outputs.tf b/eks/tf/modules/flyte-eks/outputs.tf deleted file mode 100644 index 9e7cd30b94..0000000000 --- a/eks/tf/modules/flyte-eks/outputs.tf +++ /dev/null @@ -1,36 +0,0 @@ -output "cluster_endpoint" { - description = "Endpoint for EKS control plane." - value = module.eks.cluster_endpoint -} - -output "cluster_security_group_id" { - description = "Security group ids attached to the cluster control plane." - value = module.eks.cluster_security_group_id -} - -output "cluster_id" { - description = "The id of the EKS cluster created" - value = module.eks.cluster_id -} - -output "kubectl_config" { - description = "kubectl config as generated by the module." - value = module.eks.kubeconfig -} - -output "config_map_aws_auth" { - description = "A kubernetes configuration to authenticate to this EKS cluster." - value = module.eks.config_map_aws_auth -} - -output "eks_vpc_id" { - description = "The id of the VPC created for the EKS cluster" - value = module.vpc.vpc_id -} - -output "eks_oidc_issuer" { - # Basically this is the output of this command - # aws --region us-west-2 eks describe-cluster --name your-cluster --query cluster.identity.oidc.issuer - description = "Issuer endpoint provided by EKS" - value = data.aws_eks_cluster.cluster.identity.0.oidc.0.issuer -} diff --git a/eks/tf/modules/flyte-eks/variables.tf b/eks/tf/modules/flyte-eks/variables.tf deleted file mode 100644 index 810e6fd537..0000000000 --- a/eks/tf/modules/flyte-eks/variables.tf +++ /dev/null @@ -1,4 +0,0 @@ -variable "eks_cluster_name" { - type = string -} - diff --git a/eks/tf/modules/flyte-rds/main.tf b/eks/tf/modules/flyte-rds/main.tf deleted file mode 100644 index adceaad42d..0000000000 --- a/eks/tf/modules/flyte-rds/main.tf +++ /dev/null @@ -1,22 +0,0 @@ -resource "aws_rds_cluster_instance" "flyte_instances" { - count = 1 - identifier = "flyteadmin-instances-${count.index}" - cluster_identifier = aws_rds_cluster.flyteadmin.id - instance_class = "db.t3.medium" - engine = "aurora-postgresql" - engine_version = "11.6" -} - -resource "aws_rds_cluster" "flyteadmin" { - cluster_identifier = "flyteadmin-cluster" - engine = "aurora-postgresql" - engine_version = "11.6" - availability_zones = ["us-west-2a", "us-west-2b", "us-west-2c"] - database_name = "flyteadmin" - master_username = "flyteadmin" - master_password = "spongebob" - backup_retention_period = 1 - preferred_backup_window = "07:00-09:00" - skip_final_snapshot = true -} - diff --git a/eks/tf/modules/flyte-rds/outputs.tf b/eks/tf/modules/flyte-rds/outputs.tf deleted file mode 100644 index 10a40713e2..0000000000 --- a/eks/tf/modules/flyte-rds/outputs.tf +++ /dev/null @@ -1,8 +0,0 @@ -output "admin_rds_name" { - value = aws_rds_cluster.flyteadmin.endpoint -} - -output "admin_rds_instance_id" { - value = aws_rds_cluster_instance.flyte_instances[0].identifier -} - diff --git a/eks/tf/modules/flyte-rds/variables.tf b/eks/tf/modules/flyte-rds/variables.tf deleted file mode 100644 index 7f569fa0fc..0000000000 --- a/eks/tf/modules/flyte-rds/variables.tf +++ /dev/null @@ -1,4 +0,0 @@ -variable "rds_vpc" { - type = string -} - diff --git a/eks/tf/outputs.tf b/eks/tf/outputs.tf deleted file mode 100644 index 7e7105832a..0000000000 --- a/eks/tf/outputs.tf +++ /dev/null @@ -1,49 +0,0 @@ -output "rds_vpc_cidr_block" { - value = data.aws_vpc.rds_vpc.cidr_block -} - -output "cluster_endpoint" { - description = "Endpoint for EKS control plane." - value = module.flyte_eks.cluster_endpoint -} - -output "cluster_security_group_id" { - description = "Security group ids attached to the cluster control plane." - value = module.flyte_eks.cluster_security_group_id -} - -output "kubectl_config" { - description = "kubectl config as generated by the module." - value = module.flyte_eks.kubectl_config -} - -output "config_map_aws_auth" { - description = "A kubernetes configuration to authenticate to this EKS cluster." - value = module.flyte_eks.config_map_aws_auth -} - -output "eks_vpc_id" { - description = "The id of the VPC created for the EKS cluster" - value = module.flyte_eks.eks_vpc_id -} - -output "admin_rds_name" { - value = module.flyte_rds.admin_rds_name -} - -output "admin_rds_instance_id" { - value = module.flyte_rds.admin_rds_instance_id -} - -output "eks_cluster_oidc_connection_arn" { - value = aws_iam_openid_connect_provider.eks_oidc_connection.arn -} - -output "eks_cluster_oidc" { - value = module.flyte_eks.eks_oidc_issuer -} - -output "role_arn" { - value = aws_iam_role.flyte_operator.arn -} - diff --git a/eks/tf/values.auto.tfvars b/eks/tf/values.auto.tfvars deleted file mode 100644 index 68f3e57973..0000000000 --- a/eks/tf/values.auto.tfvars +++ /dev/null @@ -1,4 +0,0 @@ -region = "us-west-2" -rds_vpc = "vpc-1234567a" -eks_cluster_name = "flyte-demo" - diff --git a/eks/tf/variables.tf b/eks/tf/variables.tf deleted file mode 100644 index 640bb8c6da..0000000000 --- a/eks/tf/variables.tf +++ /dev/null @@ -1,12 +0,0 @@ -variable "region" { - type = string -} - -variable "rds_vpc" { - type = string -} - -variable "eks_cluster_name" { - type = string -} -