Architecture Council/Contributor Guide Recommendation
Under Construction: This page is still under construction. It should provide a recommendation for new projects to provide a Contributor Guide. See bug 397644 for more information.
Contributor Guide - Motivation
Having concise and clear information how to get involved in a project is very important for building the community around a project. Therefore, to simplify adoption and encourage contributions it is recommended that projects maintain a "Contributor Guide" page.
What a Contributor Guide Should / Could Contain?
Below are some hints what a contributor guide should contain.
Setting up the development environment
Make it easy for people who got interested in your project to start playing with it
- Provide a clear description how to get the sources in the IDE. See an example.
- Describe how to setup any additional tools needed for the development. See an example.
- Describe what the dependencites of the project are, or even better how to easily get all the necessary libraries the project depends on. Provide for example a target platform definition (see Tools below). See an example.
- Describe any necessary steps to build the artifacts of the project (e.g. bundles, features, standalone products). See an example.
Make it very clear what are the steps a contributor needs to follow, so that his contribution reaches the project and may be accepted
- Include very specific instructions on how contributions are accepted. For example, if the project accept contributions via Gerrit, describe the mechanics of using Gerrit for the contribution
- Indicate whether or not the project will accept GitHub pull requests. If yes, then describe the necessary steps to have the project honor those requests.
- Describe the legal part of the proccess for accepting contributions, e.g. the three questions which should be answered, references to the CLA / CoO (both still drafts)
- Provide a CONTRIBUTING file in the root of each repository
- Due to the nature of Git, repositories get copied around a lot. Mirrors are hosted in various locations that may or may not have a connection back to the project website. There is an evolving standard of putting "CONTRIBUTING" file in the root of each repository
- Keep the file in a "standard" location - the root of the repository. This could allow tools like the PMI to magically show the content on the project page
- Keep the guide as concise as possible - it should contain a few words and a link to the website/wiki for details and more information
- Use plain text, more complex structures can be provided in a Wiki
- Describe any further project specific rules, which the contributors should know, for example:
- preferences on code quality
- code formatting
- processes for code review
- Projects may slightly different rules for contributing to different repositories. Make this clear to the contributors.
Ideas what could be contributed to the project
It may help people who would like to contribute to the project if you list some ideas for improvements which the team already knows, some areas where help is needed.
Keeping this sort of thing up-to-date can be challenging. Consider including a Bugzilla query (e.g. for "helpwanted" bugs) rather than (or in addition to) specific work area recommendations.
This section contains brief information on concrete tools, frequently mentioned in the contribution guides.
Getting the Sources
- For projects in Git usually EGit is used. See the Contributor_Guide#From an installed EGit plugin
- For projects in SVN usually Subversive is used.
Project Set files (psf) should also be provided.
Using an Explicit Target Platform Definition
One technical possibility for projects to simplify the handling of dependencies is to provide one or more target definition files. Such files can be stored in the repository together with the sources and should be promoted on the "How to Contribute" page.
Using a target definition file, one can setup the workspace with a few steps:
- clone (or checkout) source from the repository
- import the projects (usually at this time there are compiling errors because of missing dependencies)
- open the target definition file and set it as target platform for the workspace - all dependencies are resolved
- start developing
In addition, projects using Tycho as a build technology can use exactly the same target definition during the build. This guarantees that the dependencies used in the IDE and the ones fetched during the build are the same.
Target definition files should contain the strict necessary dependencies for the project to compile and execute. It's recommended setting includeSources attribute to true in .target files to provide to developers access to sources of the dependencies, when available, in their development environment (PDE) without effort; for Tycho builds, this attribute is ignored and does not add sources to the build target-platform. Project could maintain several target defintions, for example to match several versions of Eclipse.
There are many projects at Eclipse which provide a "How to contribute" description. Just to name a few examples: