1<!--
2SPDX-FileCopyrightText: Amolith <amolith@secluded.site>
3
4SPDX-License-Identifier: CC0-1.0
5-->
6
7# Willow
8
9[![Go report card status][goreportcard-badge]][goreportcard]
10[![REUSE status][reuse-shield]][reuse]
11[![Donate with fosspay][fosspay-shield]][fosspay]
12
13_Forge-agnostic software release tracker_
14
15
16
17_This UI is a minimal proof-of-concept, it's going to change drastically in the
18near future._
19
20## What is it?
21
22Willow tracks software releases across arbitrary forge platforms by trying to
23support one of the very few things they all have in common: the VCS. At the
24moment, git is the _only_ supported VCS, but I would be interested in adding
25Pijul, Fossil, Mercurial, etc. You can also track releases using RSS feeds.
26
27Willow exists because decentralisation can be annoying. One piece of software
28can be found on GitHub, another piece on GitLab, one on Bitbucket, a fourth on
29SourceHut, and a fifth on the developer's self-hosted Forgejo instance. Forgejo
30and GitHub have RSS feeds that only notify you of releases. GitLab doesn't
31support RSS feeds for anything, just an API you can poke. Some software updates
32might be on the developers' personal blog. Sometimes there are CVEs for specific
33software and they get published somewhere completely different before they're
34fixed in a release.
35
36I want to bring all that scattered information under one roof so a developer or
37sysadmin can pop open willow's web UI and immediately see what needs updating
38where. I've recorded some of my other ideas and plans in [my wiki].
39
40[my wiki]: https://wiki.secluded.site/hypha/willow
41
42## Installation and use
43
44* Clone the repo
45* Build the binary with `CGO_ENABLED=0 go build -ldflags="-s -w" -o willow ./cmd`
46* Upload it to a remote server
47* Execute the binary
48* Edit the `config.toml`
49* Create a user with `./willow -a <username>`
50* Execute the binary again
51* Reverse proxy `http://localhost:1313`
52* Open the web UI
53* Click `Track new project`
54* Fill out the form
55* Indicate which version you're currently on
56* That's it!
57
58Note that I still consider the project to be in _alpha_ state. There will be
59bugs; please help fix them!
60
61## Contributing
62
63Contributions are very much welcome! Please take a look at the [ticket
64tracker][todo] and see if there's anything you're interested in working on. If
65there's specific functionality you'd like to see implemented and it's not
66mentioned in the ticket tracker, please post to the [mailing list][email] and
67describe the feature.
68
69Questions, comments, and patches can always be sent to the [mailing
70list][email], but I'm also in the [IRC channel][irc]/[XMPP room][xmpp] pretty
71much 24/7. However, I might not see messages right away because I'm working on
72something else (or sleeping) so please stick around.
73
74If you're wanting to introduce a new feature and I don't feel like it fits with
75this project's goal, I encourage you to fork the repo and make whatever changes
76you like!
77
78- Email: [~amolith/willow@lists.sr.ht][email]
79- IRC: [irc.libera.chat/#willow][irc]
80- XMPP: [willow@muc.secluded.site][xmpp]
81
82[email]: mailto:~amolith/willow@lists.sr.ht
83[irc]: irc://irc.nixnet.services/#willow
84[xmpp]: xmpp:willow@muc.secluded.site?join
85[todo]: https://todo.sr.ht/~amolith/willow
86
87_If you haven't used mailing lists before, please take a look at [SourceHut's
88documentation](https://man.sr.ht/lists.sr.ht/), especially the etiquette
89section._
90
91### Required tools
92
93- [Go](https://go.dev/)
94- [gofumpt](https://github.com/mvdan/gofumpt)
95 - Stricter formatting rules than the default `go fmt`
96- [golangci-lint](https://golangci-lint.run/)
97 - Aggregates various preinstalled Go linters, runs them in parallel, and makes
98 heavy use of the Go build cache
99- [Staticcheck](https://staticcheck.dev/)
100 - Uses static analysis to find bugs and performance issues, offer
101 simplifications, and enforce style rules
102
103### Suggested tools
104
105- [just](https://github.com/casey/just)
106 - Command runner to simplify use of the required tools
107- [air](https://github.com/cosmtrek/air)
108 - Watches source files and rebuilds/executes the project when sources change
109
110### Configuring git for git send-email
111
112First, go through the tutorial on
113[git-send-email.io](https://git-send-email.io/).
114
115``` shell
116git config sendemail.to "~amolith/willow@lists.sr.ht"
117```
118
119[goreportcard-badge]: https://goreportcard.com/badge/git.sr.ht/~amolith/willow
120[goreportcard]: https://goreportcard.com/report/git.sr.ht/~amolith/willow
121[reuse]: https://api.reuse.software/info/git.sr.ht/~amolith/willow
122[reuse-shield]: https://shields.io/reuse/compliance/git.sr.ht/~amolith/willow
123[fosspay]: https://secluded.site/donate/
124[fosspay-shield]: https://shields.io/badge/donate-fosspay-yellow