How To Get Started Contributing to OpenFaaS
New Year New You?
Don’t bother with the Gym. We all know you won’t keep it up.
Why not give back to the programming community by contributing to an open source project that you use?
When I first started out it took me a while to get my IDE setup, all the dependencies installed and then once I had this set up, picking a github issue and getting through the Pull Request (PR) process also seemed daunting. This still felt like a big deal even though I raise many PRs a day at work and push code into production frequently. For some reason this “open” and new space felt very exposed.
Fortunately, I was helped through the process by Alex, who was always helpful and patient with my early contributions.
This post focuses mainly on code contributions. There are other types of contributions that are just as important and would be welcomed. Things like documentation, user guides, blog posts and helping members of the community on slack.
There’s a good section in the OpenFaaS docs on contributing too.
Maintainers are amazing!
Maintaining an open source project is hard, time consuming and often done for free. There are a load of great resources on the internet about the things maintainers face.
It might be worth you doing a small amount of reading into this, so you know what to expect from a maintainer, and what they expect from your contribution(s).
Here are some examples:
- My condolences, you’re now the maintainer of a popular open source project - Daniel Bachhuber
- The Five Pressures of Leadership - Alex Ellis
- This twitter thread - Benjamin Lupton
Setting up Golang
OpenFaaS is almost exclusively written in Golang. If you’re not a strong Golang developer don’t worry, it’s quite easy to pick up. However, there are other contributions you could make to get started, then ease yourself into Golang at a later date.
I like using the Goland IDE by JetBrains, but you can use VSCode or any other IDE that has Golang support, or even Vim/Emacs.
To install Golang
This should install Golang 1.12 on a Macosx or Linux distribution. There’s a good section here on installing Golang on other CPU Architectures.
You should probably use a package manager to install golang. It should sort everything for you.
You probably want to add these lines to your .bashrc or .zshrc so that
go is available in new terminals and after you
export GOPATH=$HOME/go/ export PATH=$PATH:/usr/local/go/bin/
go version outputs correctly then you should have setup Golang correctly.
Docker & Kubernetes
You will probably will need access to Docker and Kubernetes while writing contributions to OpenFaaS. You can install Docker by following one of the many online guides.
If you are using Kubernetes you will need to install
kubectl. Best check online for the most up to date installation
method for your Operating System.
I usually use a tool called k3d for creating Kubernetes environments, it creates a single node k3s cluster (Kubernetes compliant) inside a docker container.
Once you have these tools installed you can create, connect to and delete kubernetes clusters like this
# Create a cluster k3d create # Connect to it export KUBECONFIG="$(k3d get-kubeconfig --name='k3s-default')" kubectl get nodes # Remove your cluster k3d delete
You should now have the tools to deploy an OpenFaaS installation quickly, and reset things when you need a fresh start.
Finding an issue to work on
The best way to find something to work on is to look through the various OpenFaaS Repositories for issues that have the
help wanted or
good first isse type labels.
This search should show
Issues in the main
openfaas/faas repository that have the
help wanted label.
There are loads of other moving parts of OpenFaaS ecosystem and projects maintained by Alex from OpenFaaS that have various open issues, some good places to look are:
- faas-cli The OpenFaaS CLI
- OpenFaaS Cloud (OFC)
- ofc-bootstrap a tool for provisioning OFC Clusters
- opwnfaas.github.io The OpenFaaS Website
- k3sup A tool by Alex that helps manage kubernetes applications
- inlets A reverse proxy tool
- faas-netes The Kubernetes specific components to OpenFaaS
And many, many more…
You can look in the contributing guide at what types of things you can get involved with
If in doubt, you can react out in the
#contributing channel in the OpenFaaS Slack
Forking the repository
To get started contributing you need to create your own copy of the repository you want to contribute to.
So, login to Github, and find the repository you are looking to contribute to then click the “fork” button.
Creating a branch and committing your code
Once you have cloned your fork to your computer you need to create a branch for you to work on.
You can do this by typing
git checkout -b <branch name>. This creates your local branch to work on.
Once you have written your contribution and written tests (if a code change) and tested the change manually you should commit your code,
git add <file names for you have changed/added> # then git commit -s
This should open a commit window in your chosen editor (Vim by default) In this file you should write the title, leave 2 lines and then a description. This is a good blog about commit messages
Your IDE may also provide a mechanism to commit not using the command line, so feel free to use whatever you’re most comfortable with
Opening your PR
Before you open a PR on github you should read the OpenFaaS Contributing guidelines. This is a requirement for opening a PR against OpenFaaS, and you have to check a box to confirm you have read it.
Once you have finished, you need to open a Pull Request (PR) on github.
Find your fork (copy of the repository) and then go to branches page. From here there’s a “New pull request” button.
You will probably find a “pull request template”, a list of questions you need to answer, like why you have make this change, how its been tested and the impact of the change on existing users.
If you are creating a PR that “Closes” and issue then you can add
Closes #<Issue Number> in the box and github will
close that issue when the PR is merged!
Fill in the questions inside the pull request box and submit!
After you have raised your PR someone should take a look at it, provide feedback or suggestions and let you know the next steps. You may need to make a change, update some docs or re-word commit messages.
You might want to post in the
#contributing channel on the OpenFaaS Slack
Check this out
Alex Ellis, the maintainer of OpenFaaS did a call in early 2019 about contributing, you can find the recording here