willow/README.md

169 lines
6.3 KiB
Markdown
Raw Normal View History

2023-09-21 18:03:21 +00:00
<!--
SPDX-FileCopyrightText: Amolith <amolith@secluded.site>
SPDX-License-Identifier: CC0-1.0
-->
2023-09-22 02:26:56 +00:00
# Willow
2023-09-21 18:03:21 +00:00
[![Go report card status][goreportcard-badge]][goreportcard]
[![REUSE status][reuse-shield]][reuse]
[![Donate with fosspay][fosspay-shield]][fosspay]
2023-09-24 21:34:48 +00:00
_Forge-agnostic software release tracker_
2023-09-21 18:03:21 +00:00
![screenshot of willow's current web UI](files/2023-10-29.png)
2023-09-24 20:52:42 +00:00
_This UI is a minimal proof-of-concept, it's going to change drastically in the
2023-09-24 21:34:48 +00:00
near future._
2023-09-24 20:52:42 +00:00
2023-09-22 02:26:56 +00:00
## What is it?
2023-11-28 17:03:51 +00:00
_If you'd rather watch a video, I gave a [lightning talk on Willow] at the 2023
Ubuntu Summit._
[lightning talk on Willow]: https://youtu.be/XIGxKyekvBQ?t=29900
2023-09-22 02:26:56 +00:00
Willow tracks software releases across arbitrary forge platforms by trying to
support one of the very few things they all have in common: the VCS. At the
moment, git is the _only_ supported VCS, but I would be interested in adding
Pijul, Fossil, Mercurial, etc. You can also track releases using RSS feeds.
Willow exists because decentralisation can be annoying. One piece of software
can be found on GitHub, another piece on GitLab, one on Bitbucket, a fourth on
SourceHut, and a fifth on the developer's self-hosted Forgejo instance. Forgejo
and GitHub have RSS feeds that only notify you of releases. GitLab doesn't
support RSS feeds for anything, just an API you can poke. Some software updates
might be on the developers' personal blog. Sometimes there are CVEs for specific
software and they get published somewhere completely different before they're
fixed in a release.
I want to bring all that scattered information under one roof so a developer or
sysadmin can pop open willow's web UI and immediately see what needs updating
where. I've recorded some of my other ideas and plans in [my wiki].
[my wiki]: https://wiki.secluded.site/hypha/willow
## Installation and use
2023-11-22 20:34:50 +00:00
_**Note:** prebuilt binaries will be available after I release [v0.0.1]_
2023-11-22 20:35:21 +00:00
[v0.0.1]: https://todo.sr.ht/~amolith/willow?search=status%3Aopen%20label%3A%22v0.0.1%22
2023-11-22 20:34:50 +00:00
2023-09-22 02:26:56 +00:00
* Clone the repo
2023-10-26 19:15:40 +00:00
* Build the binary with `CGO_ENABLED=0 go build -ldflags="-s -w" -o willow ./cmd`
2023-09-22 02:26:56 +00:00
* Upload it to a remote server
* Execute the binary
2023-10-26 19:15:40 +00:00
* Edit the `config.toml`
* Create a user with `./willow -a <username>`
* Execute the binary again
* Reverse proxy `http://localhost:1313`
2023-09-22 02:26:56 +00:00
* Open the web UI
* Click `Track new project`
* Fill out the form
* Indicate which version you're currently on
* That's it!
2023-10-26 19:15:40 +00:00
Note that I still consider the project to be in _alpha_ state. There will be
bugs; please help fix them!
2023-09-21 18:03:21 +00:00
2023-09-24 21:32:51 +00:00
## Contributing
2023-09-21 18:03:21 +00:00
2023-09-24 21:32:51 +00:00
Contributions are very much welcome! Please take a look at the [ticket
tracker][todo] and see if there's anything you're interested in working on. If
there's specific functionality you'd like to see implemented and it's not
mentioned in the ticket tracker, please send a description to the [mailing
list][email] so we can discuss its inclusion. If I don't feel like it fits with
Willow's goals, you're encouraged to fork the project and make whatever changes
you like!
2023-09-24 21:32:51 +00:00
Questions, comments, and patches can always be sent to the [mailing
list][email], but I'm also in the [IRC channel][irc]/[XMPP room][xmpp] pretty
much 24/7. I might not see messages right away, so please stick around.
2023-09-21 18:03:21 +00:00
2023-09-24 21:32:51 +00:00
- Email: [~amolith/willow@lists.sr.ht][email]
- IRC: [irc.libera.chat/#willow][irc]
- XMPP: [willow@muc.secluded.site][xmpp]
[email]: mailto:~amolith/willow@lists.sr.ht
[irc]: ircs://irc.libera.chat/#willow
2023-09-24 21:32:51 +00:00
[xmpp]: xmpp:willow@muc.secluded.site?join
[todo]: https://todo.sr.ht/~amolith/willow
2023-09-21 18:03:21 +00:00
_If you haven't used mailing lists before, please take a look at [SourceHut's
documentation](https://man.sr.ht/lists.sr.ht/), especially the etiquette
section._
2023-12-21 05:27:19 +00:00
### Paperwork
The software world changes rapidly and the future is always a little murky. With
that murk in mind, I require contributors to sign a _**F**iduciary **L**icense
**A**greement_, or an FLA, that allows me to change Willow's license at any time
_without_ contributor input, but _with_ stipulations.
Willow's FLA transfers the contributor's copyright over their contribution to
Amolith and limits which licenses he can choose from to "licenses the Free
Software Foundation classifies as Free Software License and which are approved
by the Open Source Initiative as Open Source licenses".
Essentially, it allows me to keep Willow's license(s) up-to-date without
requiring me to contact every historical contributor and it does all that while
ensuring Willow remains free software :)
Alongside initial contributions, please sign the FLA and email a digital copy to
amolith@secluded.site. You can sign the FLA by printing, signing, and scanning
the document, by drawing your signature in a PDF editor like [the one built into
Firefox],
[the one built into Firefox]: https://www.mozilla.org/en-US/firefox/features/pdf-editor/
- **Individuals** sign the [Individual FLA].
- Companies, co-ops, non-profits, and other **entities** sign the [Entity FLA]
on behalf of their constituent individuals
[Individual FLA]: .files/ifla.pdf
[Entity FLA]: .files/efla.pdf
### Configuring git...
…for <code>git send-email</code>
``` shell
git config sendemail.to "~amolith/willow@lists.sr.ht"
git send-email [HASH]
```
…for signing the [DCO]
``` shell
git config format.signOff yes
```
[DCO]: https://developercertificate.org/
2023-09-24 21:32:51 +00:00
### Required tools
- [Go](https://go.dev/)
- [gofumpt](https://github.com/mvdan/gofumpt)
- Stricter formatting rules than the default `go fmt`
- [golangci-lint](https://golangci-lint.run/)
- Aggregates various preinstalled Go linters, runs them in parallel, and makes
heavy use of the Go build cache
- [Staticcheck](https://staticcheck.dev/)
- Uses static analysis to find bugs and performance issues, offer
simplifications, and enforce style rules
### Suggested tools
- [just](https://github.com/casey/just)
- Command runner to simplify use of the required tools
2023-10-28 17:05:25 +00:00
- [air](https://github.com/cosmtrek/air)
- Watches source files and rebuilds/executes the project when sources change
2023-09-24 21:32:51 +00:00
2023-09-22 02:26:56 +00:00
[goreportcard-badge]: https://goreportcard.com/badge/git.sr.ht/~amolith/willow
[goreportcard]: https://goreportcard.com/report/git.sr.ht/~amolith/willow
[reuse]: https://api.reuse.software/info/git.sr.ht/~amolith/willow
[reuse-shield]: https://shields.io/reuse/compliance/git.sr.ht/~amolith/willow
2023-09-21 18:03:21 +00:00
[fosspay]: https://secluded.site/donate/
[fosspay-shield]: https://shields.io/badge/donate-fosspay-yellow