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### Paperwork
 98
 99The software world changes rapidly and the future is always a little murky. With
100that murk in mind, I require contributors to sign a _**F**iduciary **L**icense
101**A**greement_, or an FLA, that allows me to change Willow's license at any time
102_without_ contributor input, but _with_ stipulations.
103
104Willow's FLA transfers the contributor's copyright over their contribution to
105Amolith and limits which licenses he can choose from to "licenses the Free
106Software Foundation classifies as Free Software License and which are approved
107by the Open Source Initiative as Open Source licenses".
108
109Essentially, it allows me to keep Willow's license(s) up-to-date without
110requiring me to contact every historical contributor and it does all that while
111ensuring Willow remains free software :)
112
113Alongside initial contributions, please sign the FLA and email a digital copy to
114amolith@secluded.site. You can sign the FLA by printing, signing, and scanning
115the document, by drawing your signature in a PDF editor like [the one built into
116Firefox],
117
118[the one built into Firefox]: https://www.mozilla.org/en-US/firefox/features/pdf-editor/
119
120- **Individuals** sign the [Individual FLA].
121- Companies, co-ops, non-profits, and other **entities** sign the [Entity FLA]
122  on behalf of their constituent individuals
123
124[Individual FLA]: .files/ifla.pdf
125[Entity FLA]: .files/efla.pdf
126
127### Configuring git...
128
129…for <code>git send-email</code>
130
131``` shell
132git config sendemail.to "~amolith/willow@lists.sr.ht"
133git send-email [HASH]
134```
135
136…for signing the [DCO]
137
138``` shell
139git config format.signOff yes
140```
141
142[DCO]: https://developercertificate.org/
143
144### Required tools
145
146- [Go](https://go.dev/)
147- [gofumpt](https://github.com/mvdan/gofumpt)
148  - Stricter formatting rules than the default `go fmt`
149- [golangci-lint](https://golangci-lint.run/)
150  - Aggregates various preinstalled Go linters, runs them in parallel, and makes
151    heavy use of the Go build cache
152- [Staticcheck](https://staticcheck.dev/)
153  - Uses static analysis to find bugs and performance issues, offer
154    simplifications, and enforce style rules
155
156### Suggested tools
157
158- [just](https://github.com/casey/just)
159  - Command runner to simplify use of the required tools
160- [air](https://github.com/cosmtrek/air)
161  - Watches source files and rebuilds/executes the project when sources change
162
163[goreportcard-badge]: https://goreportcard.com/badge/git.sr.ht/~amolith/willow
164[goreportcard]: https://goreportcard.com/report/git.sr.ht/~amolith/willow
165[reuse]: https://api.reuse.software/info/git.sr.ht/~amolith/willow
166[reuse-shield]: https://shields.io/reuse/compliance/git.sr.ht/~amolith/willow
167[fosspay]: https://secluded.site/donate/
168[fosspay-shield]: https://shields.io/badge/donate-fosspay-yellow