Tools/Preparation
Development
Releasing Curator
Curator is built using Maven and Git. You should be familiar with both of these tools. For publishing, you also need to install GPG and create a key that is available from a well known public site.
Download GPG from http://www.gnupg.org/download/.
If you are not already a member of the Web Of Trust (WOT) it would be a good idea to do so. You can read more about key signing here.
Ensure that you have setup your ssh keys on people.apache.org, otherwise you'll have to enter your login password a number of times (best use ssh-agent for this as well). A good overview of this process can be found here (ssh-copy-id and ssh-agent in particular).
NOTE: when doing a release you will be asked for your PGP password multiple times unless you set up the gpg-agent. Mac users have reported trouble getting gpg-agent to work. You can also set your gpg-password in the Maven settings file (see below).
Your Maven settings (~/.m2/settings.xml
) file should have the following (note: curator-website-checkout-path
is used as a temporary path when deploying the Curator website):
<settings> ... <servers> ... <server> <id>apache.website.svnpub</id> <username>Your Apache Username</username> <privateKey>${user.home}/.ssh/id_rsa</privateKey> </server> <server> <id>apache.releases.https</id> <username>Your Apache Username</username> <password>APACHE-PASSWORD-ENCODED</password> </server> <server> <id>apache.snapshots.https</id> <username>Your Apache Username</username> <password>APACHE-PASSWORD-ENCODED</password> </server> ... </servers> <profiles> <profile> <properties> ... <gpg.keyname>id-of-your-pgp-key</gpg.keyname> <gpg.passphrase>your-pgp-password</gpg.passphrase> <!-- use this if pgp-agent doesn't work for you --> ... </properties> ... </profile> ... </profiles> ... </settings> |
Note: you can store encrypted passwords your settings.xml if you want. Read the details here: http://maven.apache.org/guides/mini/guide-encryption.html
Apache has a good guide on how to prepare your environment for interacting with the Curator Git repo: https://git-wip-us.apache.org/.
While Curator mainly uses git for source control, certain components required by Apache use SVN. You should checkout the following SVN projects into unique local directories:
svn co https://dist.apache.org/repos/dist/dev/curator/
svn co https://dist.apache.org/repos/dist/release/curator/
You must add your GPG key to the KEYS file in "repos/dist/release/curator/" and commit the changes. E.g. (replace NAME with the user name you used to generate the keys)
cd DIST RELEASE CURATOR directory (gpg --list-sigs NAME && gpg --armor --export NAME) >> KEYS svn commit -m "Added my keys" |
Curator loosely uses GitHub Flow. The short form:
Curator uses the very popular "JZ" style. For IntelliJ IDEA users, here's a code style file: JZ.xml
Curator uses semantic versioning. The best description of this is from Curator committer Eric Tschetter:
Essentially, it tells you the API compatibility between multiple dependencies. For example,
If you have version 1.0.0 and 1.0.1, you can use either one and you will not run into errors due to API conflicts (i.e. in Java, no ClassNotFound or NoSuchMethod type exceptions)
If you have 1.0.0 and 1.1.0, you can replace 1.0.0 with 1.1.0 and you will not have errors due to API conflicts. If you try to swap 1.0.0 in place of something that depends on 1.1.0, however, you *might* have errors due to API conflicts. I.e. you can go forward without errors, but not backwards
If you have 1.0.0 and 2.0.0, you will likely have errors due to API conflicts if you replace either one with the other.
Make sure you choose an appropriate version for each release. The Maven build will output messages if there are API compatibility issues (look for the "clirr-maven-plugin" messages).
Curator's source is mirrored on GitHub at: https://github.com/apache/curator. Non-committers are asked to fork this repository and submit pull requests (PR) for changes. When a PR is received, a Curator committer can test and possibly merge it by:
git checkout -b <branch name>
- the branch name is usually the JIRA ID of the issuegit pull https://github.com/<users-name>/exhibitor.git <branch>
git push -u origin <branch name>
git merge --squash
as this makes it easier to read the history and do cherry-picks.If a Curator committer wants to close a PR without merging, it can be accomplished via:
git commit --allow-empty -m "closes #NN *Reason PR is being declined*"
git push
There is a continuous integration job for Curator at
For all but minor changes, there should be a Jira "ticket" created at https://issues.apache.org/jira/browse/CURATOR.
Regardless of which IDE you use, you should periodically perform a mvn clean install
to validate that the various configured checks (such as license headers, etc.) are passing as well as the unit tests.
To release Curator, the following steps must be followed:
mvn -P apache-release release:prepare -DdryRun=true
. The dry run will not commit any changes back to Git and gives you the opportunity to verify that the release process will complete as expected. If you need to cancel, execute mvn release:clean
and then reset via git reset --hard
.pom.xml.tag
files which contain the changes that would have been committed to SVN. The only differences between pom.xml.tag
and its corresponding pom.xml
file should be the version number.mvn release:rollback
mvn -P apache-release release:prepare
mvn -P apache-release release:perform
git push --tags
target
directory.cp
the files to this directory
Create a VOTE email thread on dev@curator.apache.org to record votes as replies (see Example Emails).
git tag -d <tag>
git push origin :refs/tags/<tag>
cp
the files to this directory and then svn commit
Per http://www.apache.org/dev/release.html#when-to-archive - remove old releases from the https://dist.apache.org/repos/dist/release/curator/ and https://dist.apache.org/repos/dist/dev/curator/ repos using svn rm
.
Update the currentStableVersion in the main POM:
pom.xml
currentStableVersion
in the properties sectionTo prepare for publishing the curator website, clone the master using git svn:
cd
to a directory of your choosingAssuming you have a clean compile/install of Curator, from the root of the Curator directory:
git checkout master mvn site site:stage |
Have a look at the staged site and make sure it's good. Then:
cd
to the curator-website directoryDelete any old files from svn:
svn st | grep ^! | awk '{print " --force "$2}' | xargs svn rm
Add any new files to svn:
svn add --force * --auto-props --parents --depth infinity -q
Commit the changes:
svn commit -m "Update for Curator version N.N.N"
You may need to make sure you've authenticated to the Apache Subversion server before you can push the site, else you may get an error along the lines of authorization failed: Could not authenticate to server: rejected Basic challenge
. More reading material on how to secure your SVN credentials can be found here.
Also note if you get an error complaining that Server certificate verification failed: issuer is not trusted
, you can add the repo certificate to the list of certificates accepted to your local svn
client by simply listing the repository and accepting the cert permanently.
svn list https://svn.apache.org/repos/asf/curator/site/trunk Error validating server certificate for 'https://svn.apache.org:443': - The certificate is not issued by a trusted authority. Use the fingerprint to validate the certificate manually! Certificate information: - Hostname: *.apache.org - Valid: from Tue, 20 Dec 2011 00:00:00 GMT until Mon, 17 Feb 2014 23:59:59 GMT - Issuer: Thawte, Inc., US - Fingerprint: bc:5f:40:92:fd:6a:49:aa:f8:b8:35:0d:ed:27:5e:a6:64:c1:7a:1b (R)eject, accept (t)emporarily or accept (p)ermanently? p |