Browse Source

Merge pull request #458 from mikeashley/contributing

Updated contribution guidelines
Sven Neuhaus 8 years ago
parent
commit
24e9175fab
1 changed files with 59 additions and 5 deletions
  1. 59
    5
      CONTRIBUTING.md

+ 59
- 5
CONTRIBUTING.md View File

1
 # Contributing to Sovereign
1
 # Contributing to Sovereign
2
 
2
 
3
-_This document will be expanded upon._
4
-
5
-You'll want to set up a [local development environment](https://github.com/sovereign/sovereign/wiki/Development-Environment) so that you don’t have to test on a remote server.
3
+## Intellectual property
6
 
4
 
7
 Make sure you agree with the license (GPLv3). See [LICENSE.md](./LICENSE.md) for details.
5
 Make sure you agree with the license (GPLv3). See [LICENSE.md](./LICENSE.md) for details.
8
 
6
 
9
-If you issue a pull request, please specify what distribution you used for testing (if any).
10
-Code that is committed to the master branch should work with both Debian 7 and Ubuntu 14.04 LTS (Debian 8 support is coming up).
7
+## Development environment
8
+
9
+You'll want to set up a [local development environment](https://github.com/sovereign/sovereign/wiki/Development-Environment) so that you don't have to test on a remote server.
10
+
11
+## Module design principles
12
+
13
+Sovereign is an Ansible playbook that uses the modules in this repository to configure a server. Modules should conform to the following design principles.
14
+
15
+### Making decisions
16
+
17
+A module exists to make decisions about how a service should be installed and configured. Make these decisions and minimize or eliminate configuration options exposed to the user. When in doubt, make a decision, and if the community feedback is vocal enough, only then expose an option.
18
+
19
+### Idempotency
20
+
21
+A module must be idempotent. If it's run once or many times, the result should be the same. This means that in some cases the user will be left with post-installation finalization work to do. Post-install finalization should be reduced or eliminated if possible, but not at the cost of idempotency.
22
+
23
+### Databases
24
+
25
+A module that introduces a database-backed service must use PostgreSQL if possible.  In order to minimize server load of having two database servers running, MySQL should not be used unless absolutely necessary. Sqlite may be used if persistent data requirements are bounded for all users and are within Sqlite's design limits.
26
+
27
+### Registrations
28
+
29
+A module should configure the server in a way that minimizes the data posted to other services. This includes names, email addresses, and other personally-identifable information. 
30
+
31
+### Upgrades
32
+
33
+A module's design should anticipate upgrades to the services it provides. Configuration files that work for the current version of the service may become out of date on future versions of the service and lead to difficult-to-find bugs. This also introduces work for maintaining the module.  Whenever possible, design the module to use the service to handle initial configuration and upgrades.
34
+
35
+### Performance
36
+
37
+A module should be designed and implemented to run as quickly as possible in order to minimize the time to run an entire playbook or even the role itself. A small performance penalty here and a small penalty there eventually adds to a very slow deployment system. Performance is important.
38
+
39
+### Tests
40
+
41
+A module should have tests. TBD: more about this and what the expectation is.
42
+
43
+### Design document
44
+
45
+A module should have a design description explaining the approach to implementing a service and what tradeoffs were made when choosing the design that was implemented. Do not leave this for comments in a pull request as we want this close to the code for the sake of future maintainers.
46
+
47
+The design description should be succinct and to the point. Assume the reader is familiar with Sovereign but not your module. As a rule of thumb, 500-1000 words is about the right length for a module design description.
48
+
49
+## Design checklist
50
+
51
+Consider the following checklist when reviewing a module's design.
52
+
53
+- Does the role create data on the server that is impossible or difficult to reproduce, e.g., private keys? If so, update the tarsnap role to include precious data in backups.
54
+- Does the role need an SSL certificate for a new subdomain?  If so, update the letsencrypt tasklist in the common role.
55
+- Does the role add an Apache virtual site?  If so, has somebody knowledgable in Apache configuration and security reviewed the configuration?
56
+- Does README.md need to be updated based on new or changed finalization instructions?
57
+
58
+## Submitting pull requests
59
+
60
+Verify that your changes pass [ansible-lint](https://github.com/willthames/ansible-lint) before submitting a pull request.
61
+
62
+Use good commit practices to document your changes. Don't assume the developer reviewing your commits has access to GitHub. The developer could be a future maintainer in a different environment. Similarly, as you address feedback on the pull request, do not assume the reviewer has access to GitHub.
63
+
64
+When you issue a pull request, please specify what distribution you used for testing (if any).  Code that is committed to the master branch should work with both Debian 7 and Ubuntu 14.04 LTS.  Support for Debian 8 is coming.

Loading…
Cancel
Save