💻 GitFlow 💻

Inspiration

As a project lead for ACM responsible for hosting various projects, each project (repo) is configured with continuous integration through Github Actions. These workflows are often copy pasted across multiple repositories. Adding, updating or deleting these workflows becomes cumbersome since there is no concept of "bulk updating" at an organization level. Instead, developers must manually configure them on a per repo basis introducing risk for inconsistencies and performance bottlenecks.

Many companies, projects, teams often do not invest in continuous integration / continuous development resources due to the initial friction in getting started. Scaling CI/CD can be an intensive process, but GitFlow aims to provide a foot in the door by simplifying the process with LLM generated workflows and Github automation to plug the generated workflows directly into their repos. Hopefully, resulting in more stable development, happier engineers, and less technical debt.

What it does

Creates a single platform, from which developers can access ALL organizational workflows. They can view which repositories have them installed and can optionally install them as needs arise. Developers can also "bulk delete" workflows and quickly install new workflows with a click of a button. It would then create pull requests on a specified Github Repository with the generated workflow, reducing the required intervention. Using TogetherAI and Llama 2, Github Action Workflows are generated with an LLM to open the possibilities. Developers can also share their workflows with special share links, which provide viewers with the source code and meta data, which can be useful for releasing workflow configurations to the public while protecting the primary source code.

How we built it

Built with Next.js and TailwindCSS and powered by Bun, Convex, Together AI, and the Github API. Next.js and TailwindCSS provide the React framework to develop the frontend and backend. Convex provides a realtime datastore solution used to store the various workflows and their installations. Together AI is utilized to create the workflows from an LLM, although it may not have the best outcomes, developers can still tweak the configurations before finalizing a workflow.

Challenges we ran into

Connecting to the Github API was the most challenging part as there are multiple methods of connecting either PAT (Personal Access Tokens), Github Actions, GitHub CLI, or a GitHub App. Ultimately, the GitHub App was chosen as it would work with multiple organizations looking to benefit from GitFlow.

Attempting to run SHELL/BASH commands on a Node.js environment was challenging as there were special packages and considerations. This would make accessing the repository difficult, since the GitHub App would create pull requests.

Accomplishments that we're proud of

Explored Shadcn, a TailwindCSS based component library, which drastically accelerated the development process. Although verbose it provided the necessary functionalities.

Understanding the Github API, having access to virtually every Git/Github operation is daunting, but also rewarding as GitFlow attempts to automate as much of the process as possible. Leaving the developers to focus their energy on more complicated problems.

What we learned

Sometimes the best way to learn was to try 3 different things and go with the best one. Attempting to get a concrete Youtube video or an article was impossible since each one did not fit the needs or was outdated. Playing around with the API gave me a deeper insight into how APIs are constructed, since Github provides both a GraphQL and REST API.

What's next for GitFlow

Flushing out the current functionalities would be the highest priority before introducing new features. There are surely ways to optimize/improve code written by a sleep deprived developer at 4AM 😅. The next biggest milestone for GitFlow will be to integrate Webhooks. This would allow push based notifications about particular Github events such as when a new repository was created or a pull request was deleted.

Built With

Share this project:

Updates