/ CONTRIBUTING.md
CONTRIBUTING.md
  1  <!--
  2  SPDX-FileCopyrightText: Amolith <amolith@secluded.site>
  3  
  4  SPDX-License-Identifier: CC0-1.0
  5  -->
  6  
  7  # Contributing to Willow
  8  
  9  _Let us know if anything's missing from here and we'll expand it!_
 10  
 11  Contributions are very much welcome! Please take a look at the [ticket
 12  tracker][todo] and see if there's anything you're interested in working on. If
 13  there's specific functionality you'd like to see implemented and it's not
 14  mentioned in the ticket tracker, please describe it through one of [the
 15  communication platforms](#communication) below so we can discuss its inclusion.
 16  If we don't feel like it fits with Willow's goals, you're encouraged to fork the
 17  project and make whatever changes you like!
 18  
 19  ### Collaboration
 20  
 21  Some people dislike GitHub, some people dislike SourceHut, and some people
 22  dislike both. Collaboration happens on multiple platforms so anyone can
 23  contribute to Willow however they like. Any of the following are suitable, but
 24  they're listed in order of Amolith's preference:
 25  
 26  - [SourceHut]
 27    - **Distributed:** contributions are either through [git send-email], which
 28      requires you to have SMTP access to an email address, or through SourceHut's
 29      web UI, which requires a SourceHut account.
 30    - **Open source:** SourceHut components are licenced under AGPL, BSD, and
 31      possibly others.
 32    - <details><summary>Configuring git for <code>git send-email</code> (click to expand)</summary>
 33      <a href="https://git-send-email.io">git-send-email.io</a> is a great resource for getting started. Please run the following commands before submitting patches to Willow.
 34      <pre>
 35      git config sendemail.to "~amolith/willow@lists.sr.ht"
 36      git config format.subjectPrefix "PATCH willow"
 37      </pre>
 38      </details>
 39  - [Radicle]
 40    - **Distributed:** contributions are through the [Heartwood protocol], which
 41      requires you to at least set up a local Radicle node.
 42    - **Open source:** Radicle components are licenced under Apache, MIT, GPL, and
 43      possibly others.
 44  - [Codeberg]
 45    - **Centralised:** contributions are through Codeberg pull requests and
 46      require a Codeberg account.
 47    - **Open source:** Codeberg is powered by Forgejo, which is licensed under
 48      GPLv3.
 49  - [GitHub]
 50    - **Centralised:** contributions are through GitHub pull requests and require
 51      a GitHub account.
 52    - **Mixed:** _components_ of GitHub are open source, such as the syntax
 53      highlighter, but everything that makes GitHub _useful_ is proprietary.
 54  
 55  [SourceHut]: https://sr.ht/~amolith/willow
 56  [git send-email]: https://git-send-email.io
 57  [Radicle]: https://radicle.secluded.site/nodes/seed.secluded.site/rad:z2R511nZ7T9wNg4L148JALPEZY8dx
 58  [Heartwood protocol]: https://radicle.xyz/guides/protocol
 59  [Codeberg]: https://codeberg.org/Amolith/willow
 60  [GitHub]: https://github.com/Amolith/willow
 61  
 62  ### Communication
 63  
 64  Questions, comments, and patches can always go to the [mailing list][email], but
 65  there's also an [IRC channel][irc] and an [XMPP MUC][xmpp] for real-time
 66  interactions.
 67  
 68  - Email: [~amolith/willow@lists.sr.ht][email]
 69  - IRC: [irc.libera.chat/#willow][irc]
 70  - XMPP: [willow@muc.secluded.site][xmpp]
 71  
 72  [email]: mailto:~amolith/willow@lists.sr.ht
 73  [irc]: ircs://irc.libera.chat/#willow
 74  [xmpp]: xmpp:willow@muc.secluded.site?join
 75  [todo]: https://todo.sr.ht/~amolith/willow
 76  
 77  _If you haven't used mailing lists before, please take a look at [SourceHut's
 78  documentation](https://man.sr.ht/lists.sr.ht/), especially the etiquette
 79  section._
 80  
 81  ### Before committing anything...
 82  
 83  Please make sure you configure git to sign [the DCO] in each commit. We won't
 84  accept contributions without DCO signatures.
 85  
 86  ``` shell
 87  git config format.signOff yes
 88  ```
 89  
 90  [the DCO]: https://developercertificate.org/
 91  
 92  ### Required tools
 93  
 94  - [Go](https://go.dev/)
 95  - [gofumpt](https://github.com/mvdan/gofumpt)
 96    - Stricter formatting rules than the default `go fmt`
 97  - [golangci-lint](https://golangci-lint.run/)
 98    - Aggregates various preinstalled Go linters, runs them in parallel, and makes
 99      heavy use of the Go build cache
100  - [Staticcheck](https://staticcheck.dev/)
101    - Uses static analysis to find bugs and performance issues, offer
102      simplifications, and enforce style rules
103  
104  ### Suggested tools
105  
106  - [just](https://github.com/casey/just)
107    - Command runner to simplify use of the required tools
108  - [air](https://github.com/cosmtrek/air)
109    - Watches source files and rebuilds/executes the project when sources change
110  
111  #### Using Air
112  
113  Running `air` with no arguments from inside Willow's repo launches Air using our
114  supplied config. Willow runs on [localhost:1313](http://localhost:1313) directly
115  and Air proxies Willow at [localhost:8888](http://localhost:8888) to provide
116  live reloading. Air notices when you save source files, rebuilds and re-launches
117  the binary automatically, and reloads the page in your browser for you.