README.md

  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![screenshot of willow's current web UI](screenshots/2023-10-29.png)
 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_**Note:** prebuilt binaries will be available after I release [v0.0.1]_
 45
 46[v0.0.1]: https://todo.sr.ht/~amolith/willow?search=status%3Aopen%20label%3A%22v0.0.1%22
 47
 48* Clone the repo
 49* Build the binary with `CGO_ENABLED=0 go build -ldflags="-s -w" -o willow ./cmd`
 50* Upload it to a remote server
 51* Execute the binary
 52* Edit the `config.toml`
 53* Create a user with `./willow -a <username>`
 54* Execute the binary again
 55* Reverse proxy `http://localhost:1313`
 56* Open the web UI
 57* Click `Track new project`
 58* Fill out the form
 59* Indicate which version you're currently on
 60* That's it!
 61
 62Note that I still consider the project to be in _alpha_ state. There will be
 63bugs; please help fix them!
 64
 65## Contributing
 66
 67Contributions are very much welcome! Please take a look at the [ticket
 68tracker][todo] and see if there's anything you're interested in working on. If
 69there's specific functionality you'd like to see implemented and it's not
 70mentioned in the ticket tracker, please post to the [mailing list][email] and
 71describe the feature.
 72
 73Questions, comments, and patches can always be sent to the [mailing
 74list][email], but I'm also in the [IRC channel][irc]/[XMPP room][xmpp] pretty
 75much 24/7. However, I might not see messages right away because I'm working on
 76something else (or sleeping) so please stick around.
 77
 78If you're wanting to introduce a new feature and I don't feel like it fits with
 79this project's goal, I encourage you to fork the repo and make whatever changes
 80you like!
 81
 82- Email: [~amolith/willow@lists.sr.ht][email]
 83- IRC: [irc.libera.chat/#willow][irc]
 84- XMPP: [willow@muc.secluded.site][xmpp]
 85
 86[email]: mailto:~amolith/willow@lists.sr.ht
 87[irc]: irc://irc.nixnet.services/#willow
 88[xmpp]: xmpp:willow@muc.secluded.site?join
 89[todo]: https://todo.sr.ht/~amolith/willow
 90
 91_If you haven't used mailing lists before, please take a look at [SourceHut's
 92documentation](https://man.sr.ht/lists.sr.ht/), especially the etiquette
 93section._
 94
 95### Required tools
 96
 97- [Go](https://go.dev/)
 98- [gofumpt](https://github.com/mvdan/gofumpt)
 99  - Stricter formatting rules than the default `go fmt`
100- [golangci-lint](https://golangci-lint.run/)
101  - Aggregates various preinstalled Go linters, runs them in parallel, and makes
102    heavy use of the Go build cache
103- [Staticcheck](https://staticcheck.dev/)
104  - Uses static analysis to find bugs and performance issues, offer
105    simplifications, and enforce style rules
106
107### Suggested tools
108
109- [just](https://github.com/casey/just)
110  - Command runner to simplify use of the required tools
111- [air](https://github.com/cosmtrek/air)
112  - Watches source files and rebuilds/executes the project when sources change
113
114### Configuring git for git send-email
115
116First, go through the tutorial on
117[git-send-email.io](https://git-send-email.io/).
118
119``` shell
120git config sendemail.to "~amolith/willow@lists.sr.ht"
121```
122
123[goreportcard-badge]: https://goreportcard.com/badge/git.sr.ht/~amolith/willow
124[goreportcard]: https://goreportcard.com/report/git.sr.ht/~amolith/willow
125[reuse]: https://api.reuse.software/info/git.sr.ht/~amolith/willow
126[reuse-shield]: https://shields.io/reuse/compliance/git.sr.ht/~amolith/willow
127[fosspay]: https://secluded.site/donate/
128[fosspay-shield]: https://shields.io/badge/donate-fosspay-yellow