Compare commits

..

4 Commits

2 changed files with 72 additions and 30 deletions

100
README.md
View File

@ -14,9 +14,9 @@ _Forge-agnostic software release tracker_
![screenshot of willow's current web UI](.files/2024-02-24.png) ![screenshot of willow's current web UI](.files/2024-02-24.png)
_This UI is Amolith's attempt at something simple and functional, yet still _This UI is Amolith's attempt at a balance between simple, pleasant, and
friendly and pleasant. Amolith is not a UX professional and would **very** much functional. Amolith is not a UX professional and would **very** much welcome
welcome input from one!_ input from someone more knowledgeable!_
## What is it? ## What is it?
@ -37,18 +37,26 @@ GitHub, GitLab, or [Forgejo] as well as more minimal options like [cgit] or
It exists because decentralisation, as wonderful as it is, does have some pain It exists because decentralisation, as wonderful as it is, does have some pain
points. One piece of software is on GitHub, another piece is on GitLab, one on points. One piece of software is on GitHub, another piece is on GitLab, one on
Bitbucket, a fourth on [SourceHut], a fifth on the developer's self-hosted Bitbucket, a fourth on [SourceHut], a fifth on the developer's self-hosted
Forgejo instance. The capabilities of each platform can differ as well, making Forgejo instance.
the problem even more difficult to solve. Forgejo and GitHub have RSS feeds that
notify you of releases as well as APIs. SourceHut has both an API and firehose
RSS feeds that notify you of _all_ activity in the repo. GitLab only has an API.
Some release announcements might be on the developer's personal blog. Sometimes
there's a CVE announcement prior to a release and those get published on a
different platform entirely. It's a mess to keep up with.
[SourceHut]: https://sourcehut.org/ [SourceHut]: https://sourcehut.org/
Willow brings some order to that mess by supporting both RSS and one of the The capabilities of each platform can also differ, further complicating the
_very_ few things all the forges have in common: their **V**ersion **C**ontrol space. For example, Forgejo and GitHub have APIs and RSS release feeds,
SourceHut has an API and RSS feeds that notify you of _all_ activity in the
repo, GitLab only has an API, and there's no standard for discovering the
capabilities of arbitrary git frontends like [legit].
[legit]: https://github.com/icyphox/legit
And _then_ you have different pieces of information in different places; some
developers might publish release announcements on their personal blog and some
projects might release security advisories on an external platform prior to
publishing a release.
All this important info is scattered all over the internet. Willow brings some
order to that chaos by supporting both RSS and one of the _very_ few things all
the forges and frontends have in common: their **V**ersion **C**ontrol
**S**ystem. At the moment, [Git] is the _only_ supported VCS, but we're **S**ystem. At the moment, [Git] is the _only_ supported VCS, but we're
definitely interested in adding support for [Pijul], [Fossil], [Mercurial], and definitely interested in adding support for [Pijul], [Fossil], [Mercurial], and
potentially others. potentially others.
@ -58,40 +66,74 @@ potentially others.
[Fossil]: https://www.fossil-scm.org/ [Fossil]: https://www.fossil-scm.org/
[Mercurial]: https://www.mercurial-scm.org/ [Mercurial]: https://www.mercurial-scm.org/
Amolith has recorded some of his other ideas, thoughts, and plans in [his wiki]. Amolith (the creator) has recorded some of his other ideas, thoughts, and plans
in [his wiki].
[his wiki]: https://wiki.secluded.site/hypha/willow [his wiki]: https://wiki.secluded.site/hypha/willow
## Installation and use ## Installation and use
_**Note:** prebuilt binaries will be available after we release [v0.0.1]_ **Disclaimers:**
1. Prebuilt binaries will be available with the [v0.0.1] release, greatly
simplifying installation.
2. We consider the project _alpha-quality_. There will be bugs.
3. Amolith has tried to make the web UI accessible, but is unsure of its current
usability.
4. The app is not localised yet and English is the only available language.
5. Help with any/all of the above is most welcome!
[v0.0.1]: https://todo.sr.ht/~amolith/willow?search=status%3Aopen%20label%3A%22v0.0.1%22 [v0.0.1]: https://todo.sr.ht/~amolith/willow?search=status%3Aopen%20label%3A%22v0.0.1%22
[communication platforms]: #contributing
### Installation
This assumes Willow will run on an always-on server, like a VPS.
* Clone the repo with `git clone https://git.sr.ht/~amolith/willow`
* Enter the repo's folder with `cd willow`
* Build the binary with `CGO_ENABLED=0 go build -ldflags="-s -w" -o willow
./cmd`
* Transfer the binary to the server however you like
* Execute the binary with `./willow`
* Edit the config with `vim config.toml`
* Daemonise Willow using systemd or OpenRC or whatever you prefer
* Reverse-proxy the web UI (defaults to `localhost:1313`) with Caddy or NGINX or
whatever you prefer
### Use
* Clone the repo
* Build the binary with `CGO_ENABLED=0 go build -ldflags="-s -w" -o willow ./cmd`
* Upload it to a remote server
* Execute the binary
* Edit the `config.toml`
* Create a user with `./willow -a <username>` * Create a user with `./willow -a <username>`
* Execute the binary again * Open the web UI (defaults to `localhost:1313`, but [installation] had you put
* Reverse proxy `http://localhost:1313` a proxy in front)
* Open the web UI
* Click `Track new project` * Click `Track new project`
* Fill out the form * Fill out the form and press `Next`
* Indicate which version you're currently on * Indicate which version you're currently on and press `Track releases`
* That's it! * You're now tracking that project's releases!
Note that we still consider the project to be in _alpha_ state. There _will_ be [installation]: #installation
bugs; please help fix them!
If you no longer use that project, click the `Delete?` link to remove it, and,
if applicable, Willow's copy of its repo.
If you're no longer running the version Willow says you've selected, click the
`Modify?` link to select a different version.
If there are projects where your selected version does _not_ match what Willow
thinks is latest, they'll show up at the top under the **Outdated projects**
heading and have a link at the bottom of the card to `View release notes`.
Clicking that link populates the right column with those release notes.
If there are projects where your selected version _does_ match what Willow
thinks is latest, they'll show up at the bottom under the **Up-to-date
projects** heading.
## Contributing ## Contributing
Contributions are very much welcome! Please take a look at the [ticket 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 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 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 mentioned in the ticket tracker, please describe it through one of the platforms
list][email] so we can discuss its inclusion. If we don't feel like it fits with below so we can discuss its inclusion. If we don't feel like it fits with
Willow's goals, you're encouraged to fork the project and make whatever changes Willow's goals, you're encouraged to fork the project and make whatever changes
you like! you like!

View File

@ -44,7 +44,7 @@
<input type="hidden" name="name" value="{{ .Name }}"> <input type="hidden" name="name" value="{{ .Name }}">
<input type="hidden" name="forge" value="{{ .Forge }}"> <input type="hidden" name="forge" value="{{ .Forge }}">
<input type="hidden" name="id" value="{{ .ID }}"> <input type="hidden" name="id" value="{{ .ID }}">
<input class="button" type="submit" formaction="/new" value="Track future releases"> <input class="button" type="submit" formaction="/new" value="Track releases">
</form> </form>
<!-- Append these if they ever start limiting RSS entries: `(eq $forge "gitea") (eq $forge "forgejo")` --> <!-- Append these if they ever start limiting RSS entries: `(eq $forge "gitea") (eq $forge "forgejo")` -->
{{- if or (eq $forge "github") -}} {{- if or (eq $forge "github") -}}