-
Notifications
You must be signed in to change notification settings - Fork 14
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
* Documentation Website Move * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --------- Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
- Loading branch information
1 parent
aa72bad
commit 34a6a53
Showing
12 changed files
with
14 additions
and
1,010 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,222 +1,3 @@ | ||
# Contributing to Draupnir | ||
|
||
## Welcome | ||
|
||
Hi, thank you for considering to contribute to Draupnir. | ||
We want this process to be as welcoming as possible, no matter your | ||
experience level, or the kind of contribution that you want to make. | ||
|
||
If you believe that your experience is anything but that, please let | ||
us know! | ||
|
||
Do not worry about following the guidance in this document to the | ||
letter, we'd much rather you get involved than avoid doing so | ||
because of a technicality. Please keep this in mind throughout. | ||
|
||
## Getting Started | ||
|
||
What kind of contribution are you trying to make? | ||
|
||
If you are looking to document an issue, request a feature, develop | ||
a feature, please proceed into the [Issue](#issue) section. | ||
|
||
If you are looking to develop or contribute a fix, feature, | ||
or documentation for an existing issue, please proceed to the | ||
[Fixing or implementing an existing issue](#fixing-or-implementing-an-existing-issue) section. | ||
|
||
### Issue | ||
|
||
If you can, just open the issue on the repository and we'll see it | ||
and come speak to you. | ||
|
||
Alternatively, if you aren't comfortable doing so or can't phrase | ||
the problem or feature, then come speak to us in our support room. | ||
We'll probably end up creating the issue for you! | ||
|
||
In either case, you should join our support room [#draupnir:matrix.org](https://matrix.to/#/#draupnir:matrix.org) :3 | ||
|
||
Do not worry about making duplicates or alignment with project | ||
goals, the triage process is supposed to find that for you. | ||
|
||
### Fixing or implementing an existing issue | ||
|
||
If we have triaged the issue, even without writing our own context or | ||
clarifications, then the issue is likely ready to implement. | ||
|
||
You should write a small statement in the issue or a quick message to | ||
our support room about how you intend to resolve the issue before getting | ||
started. | ||
|
||
If you don't know how to get started or what to change, please ask! | ||
We'd love nothing more than to help you, or at the least, make | ||
our documentation and process better. | ||
|
||
## Where to start | ||
|
||
Join our room [#draupnir:matrix.org](https://matrix.to/#/#draupnir:matrix.org)! | ||
|
||
### How Draupnir works | ||
|
||
Checkout our [context document](./docs/context.md). | ||
|
||
### Code | ||
|
||
Checkout our [development guide](./docs/development.md). | ||
|
||
### Issues & Triaging | ||
|
||
We don't have a specific guide for opening issues, just go ahead. | ||
|
||
You can read about our issue triaging process [here](./docs/triaging.md) | ||
|
||
### Documentation | ||
|
||
WIP, our documentation isn't great! | ||
|
||
If you know how we can improve that then let us know! | ||
|
||
Currently we just have markdown documents, but maybe we need | ||
something more complete? like a markdown book? | ||
|
||
Go ahead and edit anything. | ||
|
||
## Making Pull Requests | ||
|
||
The preferred and easiest way to contribute changes to Matrix is to fork the | ||
relevant project on github, and then [create a pull request]( | ||
https://help.github.com/articles/using-pull-requests/) to ask us to pull | ||
your changes into our repo. | ||
|
||
We use Github Actions for continuous integration. | ||
If your change breaks the build, this will be shown in GitHub, so | ||
please keep an eye on the pull request for feedback. | ||
|
||
## Sign off | ||
|
||
In order to have a concrete record that your contribution is intentional | ||
and you agree to license it under the same terms as the project's license, we've adopted the | ||
same lightweight approach that the Linux Kernel | ||
[submitting patches process]( | ||
https://www.kernel.org/doc/html/latest/process/submitting-patches.html#sign-your-work-the-developer-s-certificate-of-origin>), | ||
[Docker](https://github.com/docker/docker/blob/master/CONTRIBUTING.md), and many other | ||
projects use: the DCO (Developer Certificate of Origin: | ||
http://developercertificate.org/). This is a simple declaration that you wrote | ||
the contribution or otherwise have the right to contribute it to Matrix: | ||
|
||
``` | ||
Developer Certificate of Origin | ||
Version 1.1 | ||
Copyright (C) 2004, 2006 The Linux Foundation and its contributors. | ||
660 York Street, Suite 102, | ||
San Francisco, CA 94110 USA | ||
Everyone is permitted to copy and distribute verbatim copies of this | ||
license document, but changing it is not allowed. | ||
Developer's Certificate of Origin 1.1 | ||
By making a contribution to this project, I certify that: | ||
(a) The contribution was created in whole or in part by me and I | ||
have the right to submit it under the open source license | ||
indicated in the file; or | ||
(b) The contribution is based upon previous work that, to the best | ||
of my knowledge, is covered under an appropriate open source | ||
license and I have the right under that license to submit that | ||
work with modifications, whether created in whole or in part | ||
by me, under the same open source license (unless I am | ||
permitted to submit under a different license), as indicated | ||
in the file; or | ||
(c) The contribution was provided directly to me by some other | ||
person who certified (a), (b) or (c) and I have not modified | ||
it. | ||
(d) I understand and agree that this project and the contribution | ||
are public and that a record of the contribution (including all | ||
personal information I submit with it, including my sign-off) is | ||
maintained indefinitely and may be redistributed consistent with | ||
this project or the open source license(s) involved. | ||
``` | ||
|
||
If you agree to this for your contribution, then all that's needed is to | ||
include the line in your commit or pull request comment: | ||
|
||
``` | ||
Signed-off-by: Your Name <[email protected]> | ||
``` | ||
|
||
We accept contributions under a legally identifiable name, such as | ||
your name on government documentation or common-law names (names | ||
claimed by legitimate usage or repute). Unfortunately, we cannot | ||
accept anonymous contributions at this time. | ||
|
||
Git allows you to add this signoff automatically when using the `-s` | ||
flag to `git commit`, which uses the name and email set in your | ||
`user.name` and `user.email` git configs. | ||
|
||
## Conclusion | ||
|
||
That's it! Matrix is a very open and collaborative project as you might expect | ||
given our obsession with open communication. If we're going to successfully | ||
matrix together all the fragmented communication technologies out there we are | ||
reliant on contributions and collaboration from the community to do so. So | ||
please get involved - and we hope you have as much fun hacking on Matrix as we | ||
do! | ||
|
||
## Further notes on license and its relation to business in general | ||
|
||
Ultimately most open source software contributions start by gifting | ||
labour without any obligation or transaction. | ||
|
||
There is no ethical way to directly sell this labour. | ||
|
||
Many so called post open source[^post-open-source] ideas fixate on | ||
finding a way to conduct business in an ethical way, | ||
and this is problematic. | ||
|
||
Once you start working within capitalism with capitalism, and exchange | ||
your power and influence over a work to monitize the work itself, | ||
the work will gain inertia and a power of its own that you cannot control. | ||
You will work for the work, for external interests, and these won't | ||
be the interests of your powerless users who you were among to begin with. | ||
|
||
It would be extreme, but I am tempted to suggest that by performing a | ||
buisness this way, you are part of an effort | ||
which not only reinforces capitalism but works to make it more | ||
efficient. Effectively working to make capitalism more powerful. | ||
Congratulations. | ||
|
||
Another point that is often brought up in these discussions is how | ||
software licensing relies on an appeal to state power, the power of | ||
the law. | ||
|
||
Therefore I propose a new licensing model, one which appeals | ||
to the power of public pressure rather than the law. | ||
|
||
Such a license would be liberal, allowing incorperation into | ||
proprietary works provided it retained a notice. | ||
However, any work which is used in any way to conduct business must | ||
report all software being used by the buisness with this license, | ||
all turnover made by the buisness, all profit made by the buisness | ||
and an estimation of both profit and turnover made by the buisness in | ||
relation to the collection of software reported. | ||
|
||
It is not clear to me how often these figures should be reported | ||
and when, or even where they should be reported to (ideally they could | ||
be found centrally). It is also unclear how to create the legalise | ||
required. | ||
|
||
With the information these licenses would provide, public pressure | ||
could then be used to demand reperations for the profits made by | ||
pillaging and destructive businesses. | ||
It is not clear yet how any reperations would be distributed, | ||
probably through some system of | ||
[venture communes](https://wiki.p2pfoundation.net/Venture_Commune). | ||
The idea is to ensure that the developers and users of projects | ||
would not be distracted from providing each other mutual | ||
support and to give them a hope of escaping. | ||
|
||
[^post-open-source] https://applied-langua.ge/posts/the-poverty-of-post-open-source.html. | ||
Our contributing guidelines can be found as part of our documentation. [This link](https://the-draupnir-project.github.io/draupnir-documentation/docs/contributing) leads to the contributing guidelines. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,70 +1 @@ | ||
Draupnir can be run as an appservice, allowing users you trust or on your homeserver to run their own Draupnir without hosting anything themselves. | ||
This module is currently alpha quality and is subject to rapid changes, | ||
it is not recommended currently and support will be limited. | ||
|
||
Usage of the [matrix-docker-ansible-deploy](https://github.com/spantaleev/matrix-docker-ansible-deploy/blob/master/docs/configuring-playbook-bot-draupnir.md) role for Draupnir for all is recommended instead of trying to deploy Draupnir for all from scratch as much more support is offered when taking this route. Especially if not deviating from defaults. | ||
|
||
# Prerequisites | ||
|
||
This guide assumes you will be using Docker and that you are able to provide a postgres database for Draupnir to connect to in application service mode. | ||
|
||
Please note that Draupnir in appservice mode does not support E2EE nor support use of an E2EE proxy like [pantalaimon](https://github.com/matrix-org/pantalaimon) as there is currently no proxy for appservices like there is for /sync | ||
|
||
# Setup | ||
|
||
1. Create a new temporarily public Matrix room that will act as a combined Policy List and Management room for the appservice. | ||
FIXME: Currently required to be aliased. | ||
FIXME: Should ideally be an Admin Room and a separate Policy list, but waiting for command refactor before doing that. | ||
|
||
2. Give the room from step 1 an alias that you put in your configuration that you will create later. `$MANAGEMENT_ALIAS` is how we will refer to this room in the remaining instructions. | ||
FIXME: Make it so we can just invite the bot to the room and give the bot a room ID in it’s config instead. (Inviting the bot to the room makes the bot think you want to provision not just grant it access to it’s own management room.) | ||
|
||
3. Decide on a spare local TCP port number to use that will listen for messages from the matrix homeserver. Take care to configure firewalls appropriately. We will call this port `$MATRIX_PORT` in the remaining instructions. | ||
|
||
4. Create a `config/config.appservice.yaml` file that can be copied from the example in `src/appservice/config/config.example.yaml`. Your config file needs to be accessible to the docker container later on. To do this you could create a directory called `draupnir-data` so we can map it to a volume when we launch the container later on. The `$MANAGEMENT_ALIAS` created earlier on is added to this file under the `adminRoom` key in the config. Please note that the whole config is needed to keep Draupnir happy D4A happy. It will crash if any non-commented out in the template part is missing. | ||
|
||
5. Generate the appservice registration file. This will be used by both the appservice and your homeserver. | ||
Here, you must specify the direct link the Matrix Homeserver can use to access the appservice, including the Matrix port it will send messages through (if this bridge runs on the same machine you can use `localhost` as the `$HOST` name): | ||
|
||
`docker run --rm -v /your/path/to/draupnir-data:/data gnuxie/draupnir appservice -r -u "http://$HOST:$MATRIX_PORT" -f /data/config/draupnir-registration.yaml` | ||
|
||
6. Create a `config/config.production.yaml` file that can be copied from the example in `config/default.yaml` just like in step 4. The file also needs to be accessible to the container so whatever path is used for `config/config.appservice.yaml` can be reused to also house this file. | ||
|
||
The provisioned Draupnirs only inherit a subset of the configuration options that are accessible to Bot mode Draupnir. Those are the following options. If there's `:` as a suffix to a config option that means there are sub options like how under commands in the default config you also find `additionalPrefixes:` with a value of `draupnir`. | ||
``` | ||
logLevel | ||
syncOnStartup | ||
fasterMembershipChecks | ||
automaticallyRedactForReasons: | ||
protectAllJoinedRooms | ||
backgroundDelayMS | ||
commands: | ||
protections: | ||
``` | ||
|
||
7. Start the application service `docker run -v /your/path/to/draupnir-data/:/data/ gnuxie/draupnir appservice -c /data/config/config.appservice.yaml -f /data/config/draupnir-registration.yaml -p $MATRIX_PORT --draupnir-config /data/config/production.yaml` | ||
|
||
8. Copy the `draupnir-registration.yaml` to your matrix homeserver and refer to it in `homeserver.yaml` like so: | ||
``` | ||
app_service_config_files: | ||
- "/data/draupnir-registration.yaml" | ||
``` | ||
|
||
# Post Install Setup and Configuration. | ||
|
||
If you successfully followed Steps 1-8 or got to the point your running the bot through other means congratulations. Then there are some post install steps and configuration that you should apply to your appservice | ||
|
||
1. If your successfully at this point it’s assumed that your `draupnir-moderation` or `draupnir-main` bot is in the admin room (the room with designated by `$MANAGEMENT_ALIAS`). So go back up and follow those steps if you haven't got there yet. | ||
|
||
2. Set your appservice management room to private, if you didn't already. Anyone with access to this room can manage access to the appservice, so be careful who you share this with. | ||
|
||
3. Set your appservice to have powerlevel 50 or greater in the appservice management room as to allow it to write policies into this room. The bot uses these policies to control who is allowed to use the bot. | ||
|
||
4. Decide if you want to allow provisioning per homeserver or per user. If you choose to only provision per user skip to step 6. | ||
|
||
5. Allow provisioning per homeserver. To provision per homeserver you write in your control room /plain MXID_OF_APPSERVICE_HERE allow @*:homeserver_to_allow | ||
|
||
6. Allow provisioning per user. To Provision per user you write in your control room /plain MXID_OF_APPSERVICE_HERE allow MXID_TO_ALLOW | ||
FIXME: If the client is being dumb and adding escapes to lone instances of * in the command strip them out so you don't have to mandate /plain use to guarantee the client doesn’t screw the user over. | ||
|
||
7. Provisioning a Draupnir is done via inviting your main draupnir into a room. If the user who did it is allowed to Draupnir rejects the invite and provisions a Draupnir shortly and invites the user to the newly created policy list and control room for this Draupnir. | ||
This Document has moved to https://the-draupnir-project.github.io/draupnir-documentation/docs/appservice |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,68 +1,3 @@ | ||
# Code style | ||
|
||
For now we don't have many objective code recommendations. | ||
Just try to stay consistent with the rest of the project, | ||
if that is alien to you, it's ok, just try. In the worst case we will | ||
clean things up for you. | ||
|
||
We give some general advice about style below. | ||
|
||
## Code style: optimisation | ||
|
||
One of the most important things a Draupnir developer should do is let | ||
to go of any tendencies that they may have towards micro optimisation. | ||
We want clear code so much more than anything else, optimisation should | ||
not be a concern at all when actually writing code. | ||
|
||
If you are somewhat unseasoned, you may find this somewhat puzzling. | ||
|
||
We believe the only way to effectively optimise is through design, | ||
and the use of a profiler. There are very few things more inefficient | ||
for programmers to work with than code written with overbearing | ||
concerns about performance. Using idioms and data structures | ||
appropriate for the programming language and problem being solved | ||
will always be enough. And I invite you to believe that, | ||
if micro optimisation is something you struggle with, | ||
then tell yourself that it does not matter. | ||
|
||
## Code style: scope | ||
|
||
You might notice that we try to keep the scope (which by "scope" | ||
here we really mean "how much stuff" is in a function/method) | ||
as small as possible. This is something you should stick to aswell. | ||
|
||
It really helps to introduce local functions if your method body starts | ||
getting too large. I can't really tell you how large too large is, | ||
but this quote captures the spirit well. | ||
|
||
> A friend of mine was once interviewing an engineer for a programming | ||
job and asked him a typical interview question: how do you know when a | ||
function or method is too big? Well, said the candidate, I don't like | ||
any method to be bigger than my head. You mean you can't keep all the | ||
details in your head? No, I mean I put my head up against my monitor, | ||
and the code shouldn't be bigger than my head. | ||
|
||
(Quote from Peter Seibel's [Practical Common Lisp](https://gigamonkeys.com/book/). | ||
|
||
## Code style: `const` | ||
|
||
Something you may notice is that we almost always try to use `const`. | ||
`const` should be the default when introducing a lexical variable | ||
(that's to say use `const` instead of `let` and `var`). | ||
|
||
You will very likely reach a point where you need to reassign a | ||
lexical variable. Don't stress too much about it, give it a try | ||
but if it's not practical then don't worry about using `let`, | ||
it's ok. | ||
|
||
A common hack that we use is an [IIFE](https://developer.mozilla.org/en-US/docs/Glossary/IIFE) | ||
if you have to, or just make local helper functions like so: | ||
|
||
### Why we do this? | ||
|
||
This improves the quality of code in numerous ways. | ||
First of all, we don't have to check if a variable is null, undefined, | ||
or some other default value because the variable is always initialized. | ||
Second of all it signals that we cannot reassign anything half | ||
way down the function body, and that takes off some mental load we'd | ||
otherwise have to worry about. | ||
This Document has moved to https://the-draupnir-project.github.io/draupnir-documentation/docs/contributing/code-style |
Oops, something went wrong.