Willow
Forge-agnostic software release tracker

This UI is Amolith's attempt at a balance between simple, pleasant, and functional. Amolith is not a UX professional and would very much welcome input from someone more knowledgeable!
What is it?
If you'd rather watch a short video, Amolith gave a 5-minute lightning talk on Willow at the 2023 Ubuntu Summit.
Willow helps developers, sysadmins, and homelabbers keep up with software releases across arbitrary forge platforms, including full-featured forges like GitHub, GitLab, or Forgejo as well as more minimal options like cgit or stagit.
It exists because decentralisation, as wonderful as it is, does have some pain points. One piece of software is on GitHub, another piece is on GitLab, one on Bitbucket, a fourth on SourceHut, a fifth on the developer's self-hosted Forgejo instance.
The capabilities of each platform can also differ, further complicating the space. For example, Forgejo and GitHub have APIs and RSS release feeds, SourceHut has an API and RSS feeds that notify you of all activity in the repo, GitLab only has an API, and there's no standard for discovering the capabilities of arbitrary git frontends like legit.
And then you have different pieces of information in different places; some developers might publish release announcements on their personal blog and some projects might release security advisories on an external platform prior to publishing a release.
All this important info is scattered all over the internet. Willow brings some order to that chaos by supporting both RSS and one of the very few things all the forges and frontends have in common: their Version Control System. At the moment, Git is the only supported VCS, but we're definitely interested in adding support for Pijul, Fossil, Mercurial, and potentially others.
Amolith (the creator) has recorded some of his other ideas, thoughts, and plans in his wiki.
Installation and use
Disclaimers:
- Docker image coming soon™
- We consider the project alpha-quality. There will be bugs.
- Amolith has tried to make the web UI accessible, but is unsure of its current usability.
- The app is not localised yet and English is the only available language.
- Help with any/all of the above is most welcome!
Installation
This assumes Willow will run on an always-on server, like a VPS.
- Obtain the binary appropriate for your system from one of the release pages (they're all the same)
- Make sure you're in the same folder as the binary when running the following commands
- Mark the binary as executable with
chmod +x willow - Execute the binary with
./willow - Edit the config with
nano config.toml - Daemonise Willow using systemd, OpenRC, etc.
- Reverse-proxy the web UI (defaults to
localhost:1313) with Caddy, NGINX, etc.
Use
- Create a user with
./willow -a <username> - Open the web UI (defaults to
localhost:1313, but installation had you put a proxy in front) - Click
Track new project - Fill out the form and press
Next - Indicate which version you're currently on and press
Track releases - You're now tracking that project's releases!
If you no longer use that project, click the Delete? link to remove it, and,
if applicable, Willow's copy of its repo.
If you're no longer running the version Willow says you've selected, click the
Modify? link to select a different version.
If there are projects where your selected version does not match what Willow
thinks is latest, they'll show up at the top under the Outdated projects
heading and have a link at the bottom of the card to View release notes.
Clicking that link populates the right column with those release notes.
If there are projects where your selected version does match what Willow thinks is latest, they'll show up at the bottom under the Up-to-date projects heading.
Contributing
Contributions are very much welcome! Please take a look at the ticket tracker and see if there's anything you're interested in working on. If there's specific functionality you'd like to see implemented and it's not mentioned in the ticket tracker, please describe it through one of the communication platforms below so we can discuss its inclusion. If we don't feel like it fits with Willow's goals, you're encouraged to fork the project and make whatever changes you like!
Collaboration
Some people dislike GitHub, some people dislike SourceHut, and some people dislike both. Collaboration happens on multiple platforms so anyone can contribute to Willow however they like. Any of the following are suitable, but they're listed in order of Amolith's preference:
- SourceHut
- Distributed: contributions are either through git send-email, which requires you to have SMTP access to an email address, or through SourceHut's web UI, which requires a SourceHut account.
- Open source: SourceHut components are licenced under AGPL, BSD, and possibly others.
- Configuring git for
git send-email
git config sendemail.to "~amolith/willow@lists.sr.ht" git config format.subjectPrefix "PATCH willow" ```
- Radicle
- Distributed: contributions are through the Heartwood protocol, which requires you to at least set up a local Radicle node.
- Open source: Radicle components are licenced under Apache, MIT, GPL, and possibly others.
- Codeberg
- Centralised: contributions are through Codeberg pull requests and require a Codeberg account.
- Open source: Codeberg is powered by Forgejo, which is licensed under MIT.
- GitHub
- Centralised: contributions are through GitHub pull requests and require a GitHub account.
- Mixed: components of GitHub are open source, such as the syntax highlighter, but everything that makes GitHub useful is proprietary.
Communication
Questions, comments, and patches can always go to the mailing list, but there's also an IRC channel and an XMPP MUC for real-time interactions.
- Email: ~amolith/willow@lists.sr.ht
- IRC: irc.libera.chat/#willow
- XMPP: willow@muc.secluded.site
If you haven't used mailing lists before, please take a look at SourceHut's documentation, especially the etiquette section.
Before committing anything...
Please make sure you configure git to sign the DCO in each commit. We won't accept contributions without DCO signatures.
git config format.signOff yes
Required tools
- Go
- gofumpt
- Stricter formatting rules than the default
go fmt
- Stricter formatting rules than the default
- golangci-lint
- Aggregates various preinstalled Go linters, runs them in parallel, and makes heavy use of the Go build cache
- Staticcheck
- Uses static analysis to find bugs and performance issues, offer simplifications, and enforce style rules