Project goal: Create a platform to build and host packages for OpenWrt (PPA, or Personal Package Archive) using Jenkins X
Skills to study/improve: Shell, Makefiles, Docker, Kubernetes
OpenWrt is a Linux distribution for off the shelf WiFi routers. People who want to make and distribute their personal packages, often for development purposes. So far the best option is to build the whole firmware from zero, but very few people use the OpenWrt SDKs. The idea behind this project is to build a platform to build and host those personal package repositories, possibility integrated with GIT farms, so that the end users can add a repository URL to use those packages, modeled on what Ubuntu PPA (Personal Package Archive) has been provided for years.
There is no such platform at the moment, packages are made via Pull Requests on a central repository, but that does not meet the requirements of a typical developer, which are:
Autonomy: no external person is needed to use the platform
Build with many different targets like: brcm2708, ar71xx, x86, sunxi, etc…
Generate an URL for each repository
CI/CD with green/red button: rebuild with latest commits
Optional: Deploy to a physical or virtual target device (see https://gitlab.com/zoobab/arduino-cli-esp8266)
Document the existing approaches, like cascading docker images (such as https://github.com/wlanslovenija/firmware-core)
Build a prototype where a developer can build and host packages by just providing a github URL
Integrate the build with a Docker image that contains the OpenWrt SDK, and build it in a Kubernetes cluster
Use Jenkins X as a backend system
These tasks require communication with the OpenWrt and Jenkins community, notably to find out issues regarding the build system or the SDK.
Document existing tools and strategies
Make a first Proof-Of-Concept (POC), even without authentication, with a simple API inside Kubernetes (CRD)
Make a web GUI on top of that API
Web development: html/js/css/python/django/flask or any other widely used web framework
Basic Knowledge of OpenWrt (should have compiled an image once before)
Basic Makefile knowledge