WIP forge-agnostic software release tracker https://earl.run/willow
Go to file
Amolith ff3b5fc7fa
correct image link
2023-12-21 00:29:12 -05:00
.files Introduce FLA, mention in README, improve README 2023-12-21 00:26:25 -05:00
.reuse initial sourcehut commit 2023-09-21 14:03:21 -04:00
LICENSES Introduce FLA, mention in README, improve README 2023-12-21 00:26:25 -05:00
cmd add dark mode, css reset and normalise links 2023-10-28 13:12:29 -04:00
db link SQL script for initial schema 2023-12-20 14:32:33 -05:00
git Use FlexVer to sort by tag instead of date 2023-11-28 19:19:14 -05:00
project mvoe ID generation logic to helper function 2023-12-20 14:18:12 -05:00
rss finish implementing authentication 2023-10-25 20:16:36 -04:00
users finish implementing authentication 2023-10-25 20:16:36 -04:00
ws Fix error handling bug introduced in last commit 2023-11-28 20:18:56 -05:00
.air.toml ignore future website directory 2023-12-20 14:17:00 -05:00
.gitignore Beeg refactor for database and users and auth 2023-10-25 00:14:32 -04:00
.golangci.toml add justfile and ci-lint config 2023-09-24 17:07:42 -04:00
README.md correct image link 2023-12-21 00:29:12 -05:00
go.mod Use FlexVer to sort by tag instead of date 2023-11-28 19:19:14 -05:00
go.sum Use FlexVer to sort by tag instead of date 2023-11-28 19:19:14 -05:00
go.sum.license reuse compliance 2023-09-24 16:57:56 -04:00
justfile Beeg refactor for database and users and auth 2023-10-25 00:14:32 -04:00

README.md

Willow

Go report card status REUSE status Donate with fosspay

Forge-agnostic software release tracker

screenshot of willow's current web UI

This UI is a minimal proof-of-concept, it's going to change drastically in the near future.

What is it?

If you'd rather watch a video, I gave a lightning talk on Willow at the 2023 Ubuntu Summit.

Willow tracks software releases across arbitrary forge platforms by trying to support one of the very few things they all have in common: the VCS. At the moment, git is the only supported VCS, but I would be interested in adding Pijul, Fossil, Mercurial, etc. You can also track releases using RSS feeds.

Willow exists because decentralisation can be annoying. One piece of software can be found on GitHub, another piece on GitLab, one on Bitbucket, a fourth on SourceHut, and a fifth on the developer's self-hosted Forgejo instance. Forgejo and GitHub have RSS feeds that only notify you of releases. GitLab doesn't support RSS feeds for anything, just an API you can poke. Some software updates might be on the developers' personal blog. Sometimes there are CVEs for specific software and they get published somewhere completely different before they're fixed in a release.

I want to bring all that scattered information under one roof so a developer or sysadmin can pop open willow's web UI and immediately see what needs updating where. I've recorded some of my other ideas and plans in my wiki.

Installation and use

Note: prebuilt binaries will be available after I release v0.0.1

  • Clone the repo
  • Build the binary with CGO_ENABLED=0 go build -ldflags="-s -w" -o willow ./cmd
  • Upload it to a remote server
  • Execute the binary
  • Edit the config.toml
  • Create a user with ./willow -a <username>
  • Execute the binary again
  • Reverse proxy http://localhost:1313
  • Open the web UI
  • Click Track new project
  • Fill out the form
  • Indicate which version you're currently on
  • That's it!

Note that I still consider the project to be in alpha state. There will be bugs; please help fix them!

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 send a description to the mailing list so we can discuss its inclusion. If I don't feel like it fits with Willow's goals, you're encouraged to fork the project and make whatever changes you like!

Questions, comments, and patches can always be sent to the mailing list, but I'm also in the IRC channel/XMPP room pretty much 24/7. I might not see messages right away, so please stick around.

If you haven't used mailing lists before, please take a look at SourceHut's documentation, especially the etiquette section.

Paperwork

The software world changes rapidly and the future is always a little murky. With that murk in mind, I require contributors to sign a Fiduciary License Agreement, or an FLA, that allows me to change Willow's license at any time without contributor input, but with stipulations.

Willow's FLA transfers the contributor's copyright over their contribution to Amolith and limits which licenses he can choose from to "licenses the Free Software Foundation classifies as Free Software License and which are approved by the Open Source Initiative as Open Source licenses".

Essentially, it allows me to keep Willow's license(s) up-to-date without requiring me to contact every historical contributor and it does all that while ensuring Willow remains free software :)

Alongside initial contributions, please sign the FLA and email a digital copy to amolith@secluded.site. You can sign the FLA by printing, signing, and scanning the document, by drawing your signature in a PDF editor like the one built into Firefox,

  • Individuals sign the Individual FLA.
  • Companies, co-ops, non-profits, and other entities sign the Entity FLA on behalf of their constituent individuals

Configuring git...

…for git send-email

git config sendemail.to "~amolith/willow@lists.sr.ht"
git send-email [HASH]

…for signing the DCO

git config format.signOff yes

Required tools

  • Go
  • gofumpt
    • Stricter formatting rules than the default go fmt
  • 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

Suggested tools

  • just
    • Command runner to simplify use of the required tools
  • air
    • Watches source files and rebuilds/executes the project when sources change