Skip to content

Commit

Permalink
reinstate cla pages
Browse files Browse the repository at this point in the history
  • Loading branch information
adam-cowley committed Aug 2, 2024
1 parent de2c7b6 commit 7894762
Show file tree
Hide file tree
Showing 7 changed files with 2,404 additions and 24 deletions.
2 changes: 1 addition & 1 deletion antora.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,11 @@ version: master
title: Developer Guides
nav:
- modules/ROOT/nav.adoc
- modules/genai-ecosystem/nav.adoc

asciidoc:
attributes:
page-theme: developer
page-layout: center-align
img: https://dist.neo4j.com/wp-content/uploads/
aura_signup: https://neo4j.com/cloud/aura/?ref=developer-guides
neo4j-version: 4.2.7
Expand Down
66 changes: 66 additions & 0 deletions modules/ROOT/pages/cla.adoc
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
= Contributor License Agreement
:author: Neo4j
:category: development
:tags: community, contributions, cla
:page-layout: center-align

[#cla-summary]
== Summary

We require all source code that is hosted on the Neo4j infrastructure to be contributed through the http://dist.neo4j.org/neo4j-cla.pdf[Neo4j Contributor License Agreement^] (CLA).

The purpose of the Neo4j Contributor License Agreement is to protect the integrity of the code base, which, in turn, protects the community around that code base: the founding entity (Neo4j, Inc.), the Neo4j developer community, and Neo4j users.

This kind of contributor agreement is common amongst free software and open source projects (it is, in fact, very similar to the widely-signed http://www.oracle.com/technetwork/community/oca-486395.html[Oracle Contributor Agreement^]).

Please see the below or send an email to [email protected] if you have any other questions about the intent of the CLA. If you have a legal question, please ask a lawyer.

If you work at *IBM*, please use this https://dev.assets.neo4j.com/wp-content/uploads/neo4j-cla_IBM_20231101_v2.1.pdf[CLA].

[#common-questions]
== Common questions

=== Am I losing the rights to my own code?

No, the http://dist.neo4j.org/neo4j-cla.pdf[Neo4j CLA^] only asks you to _share_ your rights, not relinquish them.

Unlike some contribution agreements that require you to transfer copyrights to another organization, the CLA does not take away your rights to your contributed intellectual property. When you agree to the CLA, you grant us joint ownership in copyright, and a patent license for your contributions. You retain all rights, title, and interest in your contributions and may use them for any purpose you wish. Other than revoking our rights, you can still do whatever you want with your code.

=== What can you do with my contribution?

We may exercise all rights that a copyright holder has, as well as the rights you grant in the http://dist.neo4j.org/neo4j-cla.pdf[Neo4j CLA^] to use any patents you have in your contributions. As the CLA provides for joint copyright ownership, you may exercise the same rights as we in your contributions.

=== What are the community benefits of this?

It allows us to sponsor the Neo4j projects and provide an infrastructure for the community, while making sure that we can include this in software that we ship to our customers without any nasty surprises. Without this ability, we as a small company would be hard pressed to release all our code as free software.

Moreover, the CLA lets us protect community members (both developers and users) from hostile intellectual property litigation should the need arise. This is in line with how other free software stewards like the http://www.fsf.org[Free Software Foundation -- FSF^] defend projects (except with the FSF, there's no shared copyright but instead you completely sign it over to the FSF). The contributor agreement also includes a "free software covenant," or a promise that a contribution will remain available as free software.

At the end of the day, you still retain all rights to your contribution and we can stand confident that we can protect the Neo4j community and the Neo4j, Inc. customers.

=== Can we discuss some items in the CLA?

Absolutely! Please give us feedback! But let's keep the legalese off the mailing lists. Please mail your feedback directly to [email protected] and we'll get back to you.

=== I still don't like this CLA

That's fine. You can still host it anywhere else, of course. Please do! We're only talking here about the rules for the infrastructure that we provide.

[#sign-cla]
== How to sign

When you've read through the CLA, please send a mail to [email protected].
Include the following information:

* Your full name.
* Your e-mail address.
* Your GitHub username.
* An attached copy of the https://dist.neo4j.org/neo4j-cla.pdf[Neo4j CLA^].
* That you agree to its terms.

For example:

----
Hi. My name is John Doe ([email protected], johndoe).
I agree to the terms in the attached Neo4j Contributor License Agreement.
----
124 changes: 124 additions & 0 deletions modules/ROOT/pages/contribute.adoc
Original file line number Diff line number Diff line change
@@ -0,0 +1,124 @@
= Contributing to Neo4j
:author: Neo4j
:category: development
:tags: community, contributions, share
:page-layout: center-align

[#neo4j-contribute]
Looking for a place to contribute to the Neo4j ecosystem?
This is a great place to start.
Here you will find guides from Neo4j’s community of contributors.

[#finding-help]
== Help Others in the Community

Want to help others?

There are a number of great resources the Neo4j community uses to get quick help from graph database experts.
Don't hesitate to ask when you’re stuck and looking for help. Also, if you're familiar with a particular topic area, please jump in and lend a hand for your fellow graphistas.

The primary home for Neo4j community discussion is our https://community.neo4j.com[Neo4j Forum^].

We also have some other places the community asks questions.

* http://stackoverflow.com/questions/tagged/neo4j[Neo4j on StackOverflow^]
* http://twitter.com/neo4j[Social: Neo4j on Twitter^]
* https://discord.gg/neo4j[Discord Chat^]
* http://github.com/neo4j/neo4j/issues[Raise Issues: GitHub Issues^]
[#ask-question-tips]
== Tips for Asking Good Questions

If you have technical questions, we would love to help you find the answers to them! Please help us help you by following the guidelines below.

*Write a title that summarizes the specific problem* +
The title may be the first and the last thing that potential viewers see of your post.
Make it count. Make it describe the problem, not your current state of mind.
ALL CAPS and lots of question and exclamation marks are an indication that you wear your underwear on your head ??? not that you have an urgent problem !!!

*Choose the correct "category" and add the relevant "tags"* +
Both of these serve to narrow down the problem area.
A database creation error on the "Neo4j Desktop" is quite possible, it is almost impossible if installed with a Yum package.
For installation questions specifying the OS is definitely useful. And so on.

*Explain First* +
What do you want to accomplish? What is the problem?
What have you tried (you have tried something, right...right?)?
Can you reproduce the situation? Which steps need to be followed to get there?

*Code Second* +
For some weird reason, Verdana 12pt does horrible things to code.
There are a ton of ways to add readable code in your posts, the easiest is to select it and use the </> preformatted text icon.
Reading hundreds of lines of code and Cypher-queries is the favorite hobby of most of the visitors of the forum.
Just in case it is one of the others that is trying to help you, provide the code that demonstrates the issue and no more.

*Proofread* +
Are you ready to press "Create"? Take a deep breath. Exhale.
Go once more over what you've just written. Does it look like the kind of question you could answer?

*I'm not sure my English is good enough...can I get help?* +
Just do the best you can! While technical questions should be in English, there are Local Groups on the forum.
Not only are those good for finding out about local activities, but there might be somebody else there that knows (for example) South-West England English and can help you translate it into six o'clock news English!

*Be Patient - Be Friendly - Be Polite - Help someone else in turn* +
Somebody is going to spend some of the single most valuable resources for a human on your question. Time.
Giving an indication that you understand the value of that is the least you can do.

[#speaking]
== Sharing your Love of Graphs

No matter where you live in the world, there are plenty of ways to share your love of graphs
and help others understand the importance of relationships.

With thousands of technology and business *conferences* occuring every year around the world,
you can present to your peers and become a recognized expert in your field. Neo4j, via the
link:/speaker-program/[*Neo4j Speaker Program*], can also help and reimburse
travel expenses for community members speaking at many of the top conferences.

There are also hundreds of face-to-face https://www.meetup.com/topics/neo4j/[*Neo4j meetup groups*] in communities
around the world. Many of these meetup groups regularly look for speakers to share their stories.

The https://www.meetup.com/Neo4j-Online-Meetup/[*Neo4j Online Meetup*] is a way for you to meet the global community online and share your story.

We select talks for the Online Meetup and stories for our link:/tag/twin4j/[*Developer Newsletter*] from https://community.neo4j.com/[*Neo4j Community Forum*]. To submit your story, post it in the `Projects & Collaboration` (if including a link to github or website) or `Community Content & Blogs` (if linking to a blog post,
slideshow, video, or article) categories.

[#contributing]
== Other Ways to Contribute

The Neo4j project is an open source effort to bring fast, complex data storage and processing to life.
Every form of help is highly appreciated by the community.
Note that you can contribute to Neo4j also by providing documentation or giving feedback on the current documentation.
Basically, in all the places where you can get help, there is also room for contributions.

* link:/developer/contributing-code/[Contributing Code^]
* link:/developer/cla/[Contributors License Agreement^]
* GitHub http://github.com/neo4j/neo4j/issues[Issues^] and http://github.com/neo4j/neo4j/pulls[Pull Requests^]
* See the https://github.com/neo4j/neo4j/graphs/contributors[list of contributors^]
[#develop-neo4j]
== Tools for Developing Neo4j

We are happy users of the following tools that we use daily to develop Neo4j.

* IDE: https://www.jetbrains.com/idea/[IntelliJ Idea by JetBrains^] - *Thank you so much for the https://www.jetbrains.com/idea/buy/choose_edition.jsp?license=OPEN_SOURCE[OSS license^]!* and Eclipse
* Build System: https://www.jetbrains.com/teamcity/[TeamCity by JetBrains^] - *Thank you so much for the https://www.jetbrains.com/teamcity/buy/choose_edition.jsp?license=OPEN_SOURCE[OSS license^]!*
* Profiler: Yourkit, VisualVM, jvmtop, Java Mission Control, Flight Recorder
* Version Control: Git & http://github.com/neo4j[GitHub^]
* Issue Management: Trello and http://github.com/neo4j/neo4j/issues[GitHub issues^]
* Team Communication: Neo4j Community Site, Discord, Google Hangouts, and Zoom
* Pair Programming: Team Viewer, join.me
* Documents: Google Docs
* Manual, GraphGists, Presentations: http://asciidoctor.org[AsciiDoctor^]
* Programming Language: Java, Build-Tool - Maven
* Libraries - JVM: Scala, Parboiled, Google Collections, JMH, Jetty, Jersey, Jackson, Apache Commons, JUnit
* Libs & Tools: Javascript: D3.js, Angular.js, Grunt, Bower
[#integration-dev]
== Tools, Libraries, and Drivers

Neo4j is supported by a rich ecosystem of libraries, tools, drivers and guides provided by partners, users and community contributors.
We want to give an overview about what is available and link to the original sources.
We try to focus on the freely available solutions here and provide links to commercial options where appropriate.

Read more about it in our link:/developer/integration/[Integrations section].
145 changes: 145 additions & 0 deletions modules/ROOT/pages/contributing-code.adoc
Original file line number Diff line number Diff line change
@@ -0,0 +1,145 @@
= Contributing Code
:author: Neo4j
:category: development
:tags: community, contributions, code
:page-layout: center-align

[#code-contrib]
== Intro

The Neo4j community is a free software and open source community centered around software and components for the Neo4j Graph Database.
It is sponsored by http://neo4j.com/company/[Neo Technology], which provides infrastructure (different kinds of hosting, documentation, 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 criteria of contribution.

Contribution can be in many forms (documentation, discussions, bug reports).
This document outlines the rules of governance for a contributor of code.

[#governance]
== Governance Fundamentals

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

* All software published by the Neo4j project must have been contributed under the Neo4j Code link:../cla[Contributors License Agreement^].
* Neo4j is a free software and open source community.
As a contributor, you are free to place your work under any license that has been approved by either the http://www.fsf.org/[Free Software Foundation^] or the http://opensource.org[Open Source Initiative^].
You still retain copyright, so in addition to that license you can of course release your work under any other license (for example a fully proprietary license), just not on the Neo4j infrastructure.
* The Neo4j software is split into components.
A Git repository holds either a single or multiple components.
* The source code should follow the Neo4j Code Style and "fit in" with the Neo4j infrastructure as much as is reasonable for the specific component.
[#contrib-roles]
== 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:

* A _patch submitter_ is a person who wishes to contribute a patch to an existing component.
See xref:workflow[] below.
* A _committer_ can contribute code directly to one or more components.
* A _component maintainer_ is in charge of a specific component.
They can:
** commit code in their component's repository,
** manage tickets for the repository,
** grant push rights to the repository.
* A _Neo4j admin_ manages the Neo4j infrastructure.
They:
** define new components and assign component maintainership,
** drive, mentor and coach Neo4j component development.
[#workflow]
== Contribution Workflow

Code contributions to Neo4j are normally done via Github Pull Requests, following the workflow shown below.
Please check the xref:pr-checklist[] before sending off a pull request as well.

. Fork the appropriate GitHub repository.
. Create a new branch for your specific feature or fix.
. xref:code-tests[Write unit tests for your code, even for small contributions].
. xref:code-styles[Write code].
. Write appropriate Javadocs and entries in the Neo4j Manual.
. xref:commit-messages[Commit changes].
. xref:pr-checklist[Send pull request].

[#pr-checklist]
== Pull Request Checklist

. xref:sign-cla[Sign the CLA].
. xref:use-rebase[Ensure that you have not added any merge commits].
. xref:use-rebase[Rebase against the latest master].
. xref:code-tests[Run all relevant tests].
. Send the request!

[#code-tests]
== Unit Tests

You have a much higher chance of getting your changes accepted if you supply us with small, readable unit tests covering the code you've written.
Also, make sure your code doesn't break any existing tests.
_Note that there may be downstream components that need to be tested as well,_ depending on what you change.

To run tests, use Maven rather than your IDE to ensure others can replicate your test run.
The command for running Neo4j tests in any given component is `mvn clean test`.

The general structure of a unit test looks like this:
[source,java]
--------------------------------------------
@Test
public void myTest()
{
// Given
[ Setup code here, setting the stage and
parameters that are relevant ]

// When
[ The code that is being tested, preferably
just one line, like calling a method ]

// Then
[ Assertions on the result ]
}
--------------------------------------------
[#code-styles]
== Code Style
The Neo4j Code style is maintained at http://neo4j.github.io/.
[#commit-messages]
== Commit Messages
Please take some care in providing good commit messages; an excellent summary of good practices can be found at http://chris.beams.io/posts/git-commit/.
Please also consider the following guidelines:
* 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 have to redo work, you might want to clean up your commit log before doing a pull request.
* 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 then changed that. This fixes #14."_
Just mentioning #xxx in the commit will connect it to the GitHub issue with that number, see https://github.com/blog/831-issues-2-0-the-next-generation[GitHub issues^].
Any of these synonyms will also work:
** fixes #xxx
** fixed #xxx
** fix #xxx
** closes #xxx
** close #xxx
** closed #xxx.
* Remember to convey _intent_.
Don't be too brief but don't provide too much detail, either.
That's what `git diff` is for.
[#sign-cla]
== Signing the CLA
One crucial aspect of contributing is the link:../cla[Contributors License Agreement].
In short: make sure to sign the CLA, or the Neo4j project won't be able to accept your contribution.
[#use-rebase]
== Don't merge, use rebase instead!
Because we would like each contribution to be contained in a single commit, merge commits are not allowed inside a pull request.
Merges are messy, and should only be done when necessary, e.g. when merging a branch into master to remember where the code came from.
If you want to update your development branch to incorporate the latest changes from master, use `git rebase`.
For details on how to use rebase, see Git manual on rebase: http://git-scm.com/book/en/Git-Branching-Rebasing[the Git Manual^].
Loading

0 comments on commit 7894762

Please sign in to comment.