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 Amolith's attempt at a balance between simple, pleasant, and
18functional. Amolith is not a UX professional and would **very** much welcome
19input from someone more knowledgeable!_
20
21## What is it?
22
23_If you'd rather watch a short video, Amolith gave a 5-minute [lightning talk on
24Willow] at the 2023 Ubuntu Summit._
25
26[lightning talk on Willow]: https://youtu.be/XIGxKyekvBQ?t=29900
27
28Willow helps developers, sysadmins, and homelabbers keep up with software
29releases across arbitrary forge platforms, including full-featured forges like
30GitHub, GitLab, or [Forgejo] as well as more minimal options like [cgit] or
31[stagit].
32
33[Forgejo]: https://forgejo.org/
34[cgit]: https://git.zx2c4.com/cgit/
35[stagit]: https://codemadness.org/stagit.html
36
37It exists because decentralisation, as wonderful as it is, does have some pain
38points. One piece of software is on GitHub, another piece is on GitLab, one on
39Bitbucket, a fourth on [SourceHut], a fifth on the developer's self-hosted
40Forgejo instance.
41
42[SourceHut]: https://sourcehut.org/
43
44The capabilities of each platform can also differ, further complicating the
45space. For example, Forgejo and GitHub have APIs and RSS release feeds,
46SourceHut has an API and RSS feeds that notify you of _all_ activity in the
47repo, GitLab only has an API, and there's no standard for discovering the
48capabilities of arbitrary git frontends like [legit].
49
50[legit]: https://github.com/icyphox/legit
51
52And _then_ you have different pieces of information in different places; some
53developers might publish release announcements on their personal blog and some
54projects might release security advisories on an external platform prior to
55publishing a release.
56
57All this important info is scattered all over the internet. Willow brings some
58order to that chaos by supporting both RSS and one of the _very_ few things all
59the forges and frontends have in common: their **V**ersion **C**ontrol
60**S**ystem. At the moment, [Git] is the _only_ supported VCS, but we're
61definitely interested in adding support for [Pijul], [Fossil], [Mercurial], and
62potentially others.
63
64[Git]: https://git-scm.com/
65[Pijul]: https://pijul.org/
66[Fossil]: https://www.fossil-scm.org/
67[Mercurial]: https://www.mercurial-scm.org/
68
69Amolith (the creator) has recorded some of his other ideas, thoughts, and plans
70in [his wiki].
71
72[his wiki]: https://wiki.secluded.site/hypha/willow
73
74## Installation and use
75
76**Disclaimers:**
77- Docker image coming soon™
78- We consider the project _alpha-quality_. There will be bugs.
79- Amolith has tried to make the web UI accessible, but is unsure of its current
80 usability.
81- The app is not localised yet and English is the only available language.
82- Help with any/all of the above is most welcome!
83
84### Installation
85
86This assumes Willow will run on an always-on server, like a VPS.
87
88- Obtain the binary appropriate for your system from one of the release pages
89 (they're all the same)
90 - [SourceHut](https://git.sr.ht/~amolith/willow/refs)
91 - [Codeberg](https://codeberg.org/Amolith/willow/releases)
92 - [GitHub](https://github.com/Amolith/willow/releases)
93- Make sure you're in the same folder as the binary when running the following
94 commands
95- Mark the binary as executable with `chmod +x willow`
96- Execute the binary with `./willow`
97- Edit the config with `nano config.toml`
98- Daemonise Willow using systemd, OpenRC, etc.
99- Reverse-proxy the web UI (defaults to `localhost:1313`) with Caddy, NGINX,
100 etc.
101
102### Use
103
104- Create a user with `./willow -a <username>`
105- Open the web UI (defaults to `localhost:1313`, but [installation] had you put
106 a proxy in front)
107- Click `Track new project`
108- Fill out the form and press `Next`
109- Indicate which version you're currently on and press `Track releases`
110- You're now tracking that project's releases!
111
112[installation]: #installation
113
114If you no longer use that project, click the `Delete?` link to remove it, and,
115if applicable, Willow's copy of its repo.
116
117If you're no longer running the version Willow says you've selected, click the
118`Modify?` link to select a different version.
119
120If there are projects where your selected version does _not_ match what Willow
121thinks is latest, they'll show up at the top under the **Outdated projects**
122heading and have a link at the bottom of the card to `View release notes`.
123Clicking that link populates the right column with those release notes.
124
125If there are projects where your selected version _does_ match what Willow
126thinks is latest, they'll show up at the bottom under the **Up-to-date
127projects** heading.
128
129## Contributing
130
131Contributions are very much welcome! Please take a look at the [ticket
132tracker][todo] and see if there's anything you're interested in working on. If
133there's specific functionality you'd like to see implemented and it's not
134mentioned in the ticket tracker, please describe it through one of [the
135communication platforms](#communication) below so we can discuss its inclusion.
136If we don't feel like it fits with Willow's goals, you're encouraged to fork the
137project and make whatever changes you like!
138
139### Collaboration
140
141Some people dislike GitHub, some people dislike SourceHut, and some people
142dislike both. Collaboration happens on multiple platforms so anyone can
143contribute to Willow however they like. Any of the following are suitable, but
144they're listed in order of Amolith's preference:
145
146- [SourceHut]
147 - **Distributed:** contributions are either through [git send-email], which
148 requires you to have SMTP access to an email address, or through SourceHut's
149 web UI, which requires a SourceHut account.
150 - **Open source:** SourceHut components are licenced under AGPL, BSD, and
151 possibly others.
152 - Configuring git for `git send-email`
153 ``` shell
154git config sendemail.to "~amolith/willow@lists.sr.ht"
155git config format.subjectPrefix "PATCH willow"
156 ```
157- [Radicle]
158 - **Distributed:** contributions are through the [Heartwood protocol], which
159 requires you to at least set up a local Radicle node.
160 - **Open source:** Radicle components are licenced under Apache, MIT, GPL, and
161 possibly others.
162- [Codeberg]
163 - **Centralised:** contributions are through Codeberg pull requests and
164 require a Codeberg account.
165 - **Open source:** Codeberg is powered by Forgejo, which is licensed under MIT.
166- [GitHub]
167 - **Centralised:** contributions are through GitHub pull requests and require
168 a GitHub account.
169 - **Mixed:** _components_ of GitHub are open source, such as the syntax
170 highlighter, but everything that makes GitHub _useful_ is proprietary.
171
172[SourceHut]: https://sr.ht/~amolith/willow
173[git send-email]: https://git-send-email.io
174[Radicle]: https://radicle.secluded.site/nodes/seed.secluded.site/rad:z34saeE8jnN5KbGRuLSggJ3eeLtew
175[Heartwood protocol]: https://radicle.xyz/guides/protocol
176[Codeberg]: https://codeberg.org/Amolith/willow
177[GitHub]: https://github.com/Amolith/willow
178
179### Communication
180
181Questions, comments, and patches can always go to the [mailing list][email], but
182there's also an [IRC channel][irc] and an [XMPP MUC][xmpp] for real-time
183interactions.
184
185- Email: [~amolith/willow@lists.sr.ht][email]
186- IRC: [irc.libera.chat/#willow][irc]
187- XMPP: [willow@muc.secluded.site][xmpp]
188
189[email]: mailto:~amolith/willow@lists.sr.ht
190[irc]: ircs://irc.libera.chat/#willow
191[xmpp]: xmpp:willow@muc.secluded.site?join
192[todo]: https://todo.sr.ht/~amolith/willow
193
194_If you haven't used mailing lists before, please take a look at [SourceHut's
195documentation](https://man.sr.ht/lists.sr.ht/), especially the etiquette
196section._
197
198### Before committing anything...
199
200Please make sure you configure git to sign [the DCO] in each commit. We won't
201accept contributions without DCO signatures.
202
203``` shell
204git config format.signOff yes
205```
206
207[the DCO]: https://developercertificate.org/
208
209### Required tools
210
211- [Go](https://go.dev/)
212- [gofumpt](https://github.com/mvdan/gofumpt)
213 - Stricter formatting rules than the default `go fmt`
214- [golangci-lint](https://golangci-lint.run/)
215 - Aggregates various preinstalled Go linters, runs them in parallel, and makes
216 heavy use of the Go build cache
217- [Staticcheck](https://staticcheck.dev/)
218 - Uses static analysis to find bugs and performance issues, offer
219 simplifications, and enforce style rules
220
221### Suggested tools
222
223- [just](https://github.com/casey/just)
224 - Command runner to simplify use of the required tools
225- [air](https://github.com/cosmtrek/air)
226 - Watches source files and rebuilds/executes the project when sources change
227
228[goreportcard-badge]: https://goreportcard.com/badge/git.sr.ht/~amolith/willow
229[goreportcard]: https://goreportcard.com/report/git.sr.ht/~amolith/willow
230[reuse]: https://api.reuse.software/info/git.sr.ht/~amolith/willow
231[reuse-shield]: https://shields.io/reuse/compliance/git.sr.ht/~amolith/willow
232[fosspay]: https://secluded.site/donate/
233[fosspay-shield]: https://shields.io/badge/donate-fosspay-yellow