Freifunk Südholstein is a Freifunk community located in the south-east of Hamburg. Since it was founded in 2015 this initiative has built an open network with roughly 200+ nodes.

Originally I started as a normal node operator, so I had my own Freifunk node and actively attended the monthly meetings but I didn’t have any tasks. When the firmware building process which was back then fully manual, slowed down I decided to step in and learned about building the firmware, testing it and how to contribute to the configuration.

I then decided to automate the process of building the firmware, my first approach to this was a self-hosted Jenkins server on my own private server plus a python script that I had created myself to simplify the build process. I kept using Jenkins for a while, because it reduced the effort to build a new version to almost clicking one button. But Jenkins did have some disadvantages, for one while building the firmware it used all the recourses of my server, this was more a configuration issue with make, I could have reduced the amounts of cores that make was allowed to use via the -j flag but I wanted the load to be completely gone from my server. Also, Jenkins required a lot of attention almost every time I logged in, I would see warning messages about critical issues in the currently installed plugins. Automatically updating wasn’t really an option as plugin updates would regularly fail because of some incompatibilities. Jenkins is a great tool but for my use case it was too complex and bulky.

So for a while I was searching for an alternative, with the release of GitHub Actions I started to investigate if it was usable for our firmware builds, luckily for me the gluon project which our firmware is based on already used Actions for their automated build tests, with some modifications I was able to use almost the existing scripts, which will ensure that in the future a change to the gluon build process will be easily adapted to our firmware builds.

Today releasing a new version is not fully automated yet. It consists of tagging a commit with a new version, which will trigger Actions to automatically build all the supported targets. To collect the packed firmware files I crated a small python program that uses the GitHub API and takes over some finalizing tasks. This and the upload of the firmware images to the update server might be automated in the future.

Also, I helped to improve the documentation of the gateway servers by introducing a new format and doing a lot of cleanup.

I learned a lot in this Community and continue to discover new interesting topics.