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
22_If you'd rather watch a video, I gave a [lightning talk on Willow] at the 2023
23Ubuntu Summit._
24
25[lightning talk on Willow]: https://youtu.be/XIGxKyekvBQ?t=29900
26
27Willow tracks software releases across arbitrary forge platforms by trying to
28support one of the very few things they all have in common: the VCS. At the
29moment, git is the _only_ supported VCS, but I would be interested in adding
30Pijul, Fossil, Mercurial, etc. You can also track releases using RSS feeds.
31
32Willow exists because decentralisation can be annoying. One piece of software
33can be found on GitHub, another piece on GitLab, one on Bitbucket, a fourth on
34SourceHut, and a fifth on the developer's self-hosted Forgejo instance. Forgejo
35and GitHub have RSS feeds that only notify you of releases. GitLab doesn't
36support RSS feeds for anything, just an API you can poke. Some software updates
37might be on the developers' personal blog. Sometimes there are CVEs for specific
38software and they get published somewhere completely different before they're
39fixed in a release.
40
41I want to bring all that scattered information under one roof so a developer or
42sysadmin can pop open willow's web UI and immediately see what needs updating
43where. I've recorded some of my other ideas and plans in [my wiki].
44
45[my wiki]: https://wiki.secluded.site/hypha/willow
46
47## Installation and use
48
49_**Note:** prebuilt binaries will be available after I release [v0.0.1]_
50
51[v0.0.1]: https://todo.sr.ht/~amolith/willow?search=status%3Aopen%20label%3A%22v0.0.1%22
52
53* Clone the repo
54* Build the binary with `CGO_ENABLED=0 go build -ldflags="-s -w" -o willow ./cmd`
55* Upload it to a remote server
56* Execute the binary
57* Edit the `config.toml`
58* Create a user with `./willow -a <username>`
59* Execute the binary again
60* Reverse proxy `http://localhost:1313`
61* Open the web UI
62* Click `Track new project`
63* Fill out the form
64* Indicate which version you're currently on
65* That's it!
66
67Note that I still consider the project to be in _alpha_ state. There will be
68bugs; please help fix them!
69
70## Contributing
71
72Contributions are very much welcome! Please take a look at the [ticket
73tracker][todo] and see if there's anything you're interested in working on. If
74there's specific functionality you'd like to see implemented and it's not
75mentioned in the ticket tracker, please send a description to the [mailing
76list][email] so we can discuss its inclusion. If I don't feel like it fits with
77Willow's goals, you're encouraged to fork the project and make whatever changes
78you like!
79
80Questions, comments, and patches can always be sent to the [mailing
81list][email], but I'm also in the [IRC channel][irc]/[XMPP room][xmpp] pretty
82much 24/7. I might not see messages right away, so please stick around.
83
84- Email: [~amolith/willow@lists.sr.ht][email]
85- IRC: [irc.libera.chat/#willow][irc]
86- XMPP: [willow@muc.secluded.site][xmpp]
87
88[email]: mailto:~amolith/willow@lists.sr.ht
89[irc]: ircs://irc.libera.chat/#willow
90[xmpp]: xmpp:willow@muc.secluded.site?join
91[todo]: https://todo.sr.ht/~amolith/willow
92
93_If you haven't used mailing lists before, please take a look at [SourceHut's
94documentation](https://man.sr.ht/lists.sr.ht/), especially the etiquette
95section._
96
97### Configuring git...
98
99…for <code>git send-email</code>
100
101``` shell
102git config sendemail.to "~amolith/willow@lists.sr.ht"
103git send-email [HASH]
104```
105
106…for signing the [DCO]
107
108``` shell
109git config format.signOff yes
110```
111
112[DCO]: https://developercertificate.org/
113
114### Required tools
115
116- [Go](https://go.dev/)
117- [gofumpt](https://github.com/mvdan/gofumpt)
118 - Stricter formatting rules than the default `go fmt`
119- [golangci-lint](https://golangci-lint.run/)
120 - Aggregates various preinstalled Go linters, runs them in parallel, and makes
121 heavy use of the Go build cache
122- [Staticcheck](https://staticcheck.dev/)
123 - Uses static analysis to find bugs and performance issues, offer
124 simplifications, and enforce style rules
125
126### Suggested tools
127
128- [just](https://github.com/casey/just)
129 - Command runner to simplify use of the required tools
130- [air](https://github.com/cosmtrek/air)
131 - Watches source files and rebuilds/executes the project when sources change
132
133[goreportcard-badge]: https://goreportcard.com/badge/git.sr.ht/~amolith/willow
134[goreportcard]: https://goreportcard.com/report/git.sr.ht/~amolith/willow
135[reuse]: https://api.reuse.software/info/git.sr.ht/~amolith/willow
136[reuse-shield]: https://shields.io/reuse/compliance/git.sr.ht/~amolith/willow
137[fosspay]: https://secluded.site/donate/
138[fosspay-shield]: https://shields.io/badge/donate-fosspay-yellow