コードコントリビュータ向けガイド

Neo4j Wiki から

目次

[edit] Intro

The Neo4j community is a free software and open source community centered around software and components for netbases and Neo. It is sponsored by Neo Technology, which provides infrastructure (subversion hosting, mailing lists, etc) as well as people to manage it. The Neo4j community is an open community, in so far as it welcomes any member that accepts the basic criterias of contribution and adheres to the community's Code of Conduct.

Contribution can be in many forms (documentation, discussions, bug reports). This document outlines the rules of governance for a contributor of code. It is very much a work in progress, so don't be too harsh if it's incomplete or not worded correctly yet.

[edit] The Fast Track

Follow the steps under Contributor License Agreement

[edit] Governance fundamentals

In a nutshell, you need to be aware of the following fundamentals if you wish to contribute code:

  • All software hosted on the Neo4j infrastructure must have been contributed under the Neo4j Code Contributor License Agreement (CLA).
  • Neo4j is a free software and open source community. Our entire subversion tree is open to anonymous read access. As a contributor, you are free to place your work under any license that has been approved by either the Free Software Foundation or the Open Source Initiative. You still retain full copyright, so in addition to that license you can course release your work under any other license (for example a fully proprietary license). But not on our infrastructure.
  • The software hosted on the Neo4j infrastructure is split into components. Every component has one or more designated maintainers and a single location in our subversion tree (svn.neo4j.org/components/some_component).
  • The source code should follow the Neo4j Coding Standard and "fit in" with the Neo4j infrastructure as much as is reasonable for the specific component.

[edit] Contributor roles

Every individual that contributes code does so in the context of a role (a single individual can have multiple roles). The role defines their responsibilities and privileges:

  1. A patch submitter is a person who is not a Neo4j user but that wishes to contribute a patch to an existing component. They attach the patch to a ticket. The patch is then reviewed and either accepted or rejected by a committer or maintainer of the component. See How to submit a patch.
  2. A committer can contribute code directly to one or more components. They are a Neo4j user that has been granted commit access to a component by a maintainer of that component. See How to become a committer. They can:
    • commit code in the svn locations of the components where they are committers.
  3. A component maintainer is in charge of a specific component. See How to become a component maintainer. They can:
    • commit code in their component's svn location.
    • manage tickets for their component.
    • grant commit rights to their component.
  4. A Neo4j admin manages the Neo4j infrastructure. See How to become a Neo4j admin. They:
    • approve new Neo4j users.
    • define new components and assign component maintainership.
    • drive, mentor and coach Neo4j component development.


[edit] Infrastructure

As a contributor, you have access to the Neo4j infrastructure. It consists of:

Neo4j's infrastructure is centered around the notion of components. A component has one or more maintainers, a single location in the subversion repository, a representation in trac and a site at http://components.neo4j.org.

[edit] Subversion

[edit] Layout of subversion repo

The subversion repository is in general open for anonymous reads, but requires a valid user for write (commit) access. The subversion repository has two top-level directories:

svn.neo4j.org
    /components
    /laboratory

The laboratory is open for writes by anyone with a subversion user. It has a user dir, where you can create a directory matching your username and keep test ("lab") stuff that's not yet a component but that you wish to still keep subverison-ified. Other project directories may come and go as direct subdirs of laboratory.

In components, however, there's a much stricter layout. There's a mandatory subdirectory for every neo4j component:

svn.neo4j.org
    /components
        /kernel
        /index
        /graph-matching
        ...
    /laboratory

Each component has the traditional trunk tags branches dirs. Commit access is granted to the component tree on a per-component basis. The component maintainers can grant existing users commit access to their respective components. The Neo4j admins are the only people with write access to the /components main dir. (And thus rename of a component has to be done by a Neo4j admin. Everything else can be done by a component maintainer.)

All the groups and permissions are managed automatically through the Trac-based Neo4j component administrator.

[edit] Commit messages

Please take some care in providing good commit messages. Use your common sense. In particular:

  • Use english. This includes proper punctuation and correct spelling. Commit messages are supposed to convey some information at a glance -- they're not a chat room.
  • Remember that a commit is a changeset, which describes a cohesive set of changes across potentially many files. Try to group every commit as a logical change. Explain what it changes.
  • If you fix a bug or an issue that's related to a ticket, then refer to the ticket in the message. For example, "Added this-and-that and then changed this-and-that. This fixes issue #14." The "#14" will resolve in Trac to a clickable link, which is great for tracking change.
  • Remember to convey intent. Don't be too brief but don't provide too much detail, either. That's what svn diff is for.

[edit] Trac

  • TODO: Component ownership
  • TODO: Milestones
  • TODO: Tickets / commit messages

[edit] The Neo4j component administrator

Use the Neo4j component administrator here.

How to create a component (neo4j admins):

  1. Create the component here.
  2. Then create a new dir in in components/ and the usual trunk tags branches in it, as such:
 /components
     /kernel
     ...
     /newcomponent
         /trunk
         /tags
         /branches
     ...

How to assign commitership (component maintainers):

  1. Edit commitership here.
  2. Choose your component.
  3. Add committers.

[edit] Maven

  • There's a parent POM at /components/pom.xml that all component POMs should inherit from. Please check the POMs of other components for a clue on how to do this.
  • Every hour, a bot will scrape all POMs in the component subtree and run mvn site:site to generate the sites at http://components.neo4j.org and mvn deploy to deploy the latest snapshot into http://m2.neo4j.org.
  • TODO: Guidelines for making the maven artifact Central Repository-able
  • TODO: Guidelines for how to use maven's site functionality for making a Neo4j component site

[edit] How to...

[edit] ... submit a patch

  1. Create a ticket or find an existing ticket that matches your patch.
  2. Attach the patch and write a comment that describes it.
  3. Wait for a committer to review and either accept or reject it.

[edit] ... become a committer

  1. Talk to a maintainer of the component you want commit access to.
  2. If they approve and you already have a Neo4j user, they can add you directly in the Trac Neo4j admin tool.
  3. If you don't have a user, you have to ask a Neo4j admin to give you a user. Send them a mail at admins (@) youknowwhatdomain.org.

[edit] ... become a component maintainer

Contact a Neo4j admin at admins (@) youknowwhatdomain.org.

[edit] ... become a Neo4j admin

Emil Eifrem and Johan Svensson are the current Neo4j admins. You can contact them at their-firstname (@) youknowwhatdomain.org, or send a mail to admins (@) thesamedomain.org. At this point, however, we are not looking to accept more admins.

Neo4j のサイト
ツールボックス