The Syncope team uses the
Apache Nexus repository for releasing SNAPSHOT and release artifacts.
More details on
releasing Maven artifacts
at The Apache Software Foundation.
Install GIT; binary packages for various platforms are available.
Install/Configure GPG - The artifacts that are deployed to the ASF central repository need to be signed. To do this you will need to have a public and private keypair. There is a very good guide that will walk you though this.
Install Apache Maven 3.0.3 or higher; we strongly encourage our committers to install the latest Apache Maven version available.
Maven allows you to encrypt your servers' passwords. We highly recommend that you follow this guide to set your master password and use it to encrypt your ASF password in the next section.
Using the instructions from the previous step encrypt your Apache Nexus repository password and add the following servers to your ~/.m2/settings.xml file. You may already have other servers in this file, if not just create the file.
<?xml version="1.0" encoding="UTF-8"?> <settings> ... <servers> <server> <id>apache.snapshots.https</id> <username>{put your ASF username here}</username> <password>{put your encrypted password here}</password> </server> <server> <id>apache.releases.https</id> <username>{put your ASF username here}</username> <password>{put your encrypted password here}</password> </server> </servers> ... <profiles> <profile> <id>apache</id> <activation> <activeByDefault>false</activeByDefault> </activation> <properties> <mavenExecutorId>forked-path</mavenExecutorId> <gpg.keyname>your-gpg-keyname</gpg.keyname> <!-- optional --> <gpg.passphrase>your-gpg-passphrase</gpg.passphrase> </properties> </profile> </profiles> ... </settings>
In the following, read
the version being released
the working directory containing the GIT clone repository for the branch under release
the working directory containing the GIT clone repository for the branch for site management
This is an optional step.
These verifications take some time and have quite strong environment requirements. However, it is of
fundamental importance to go through these at least once for every major release.
For more information please take a look at build instructions.
git commit -m "Updating CHANGES for release" CHANGES git push
git commit -a -m "Updating Eclipse files for release" git push
git commit -m "Updating downloads site page for release" src/site/xdoc/downloads.xml git push
Perform the steps below from $SYNCOPE_RELEASE_DIR.
mvn -P apache-release release:prepare -Darguments="-P all,docker -DbuildNumber=syncope-$VERSION" -DdryRun=true
If you cancel a release:prepare before it updates the pom.xml versions, then use the release:clean goal to just remove the extra files that were created.
git commit -a -m "Fixing formatting for release"
for file in `find . -type f -iname '*.asc'` do gpg --verify ${file} done
gpg: Good signature from ... gpg: Signature made ...
mvn -P apache-release release:rollback
mvn -P apache-release release:prepare -Darguments="-P all,docker -DbuildNumber=syncope-$VERSION"
cd .. tar -czf $VERSION.tar.gz $VERSION/ cd $VERSION
svn co https://dist.apache.org/repos/dist/dev/syncope syncope-dist-dev cd syncope-dist-dev mkdir $VERSION cd $VERSION cp $SYNCOPE_RELEASE_DIR/target/syncope-*-source-release.zip . cp $SYNCOPE_RELEASE_DIR/target/syncope-*-source-release.zip.asc . cp $SYNCOPE_RELEASE_DIR/standalone/target/syncope-standalone-*-distribution.zip . cp $SYNCOPE_RELEASE_DIR/standalone/target/syncope-standalone-*-distribution.zip.asc . cp $SYNCOPE_RELEASE_DIR/installer/target/syncope-installer-*-uber.jar . cp $SYNCOPE_RELEASE_DIR/installer/target/syncope-installer-*-uber.jar.asc . cp $SYNCOPE_RELEASE_DIR/deb/core/target/apache-syncope-*.deb . cp $SYNCOPE_RELEASE_DIR/deb/core/target/apache-syncope-*.deb.asc . cp $SYNCOPE_RELEASE_DIR/deb/console/target/apache-syncope-console-*.deb . cp $SYNCOPE_RELEASE_DIR/deb/console/target/apache-syncope-console-*.deb.asc . cp $SYNCOPE_RELEASE_DIR/deb/enduser/target/apache-syncope-enduser-*.deb . cp $SYNCOPE_RELEASE_DIR/deb/enduser/target/apache-syncope-enduser-*.deb.asc . cp $SYNCOPE_RELEASE_DIR/client/cli/target/syncope-client-cli-*.zip . cp $SYNCOPE_RELEASE_DIR/client/cli/target/syncope-client-cli-*.zip.asc . cp $SYNCOPE_RELEASE_DIR/ide/eclipse/releng/org.apache.syncope.ide.eclipse.site/target/org.apache.syncope.ide.eclipse.site-*.zip . cp $SYNCOPE_RELEASE_DIR/ide/eclipse/releng/org.apache.syncope.ide.eclipse.site/target/org.apache.syncope.ide.eclipse.site-*.zip.asc . cp $SYNCOPE_RELEASE_DIR/ide/netbeans/target/syncope-ide-netbeans-*.nbm . cp $SYNCOPE_RELEASE_DIR/ide/netbeans/target/syncope-ide-netbeans-*.nbm.asc . # only for 2_1_X cp $SYNCOPE_RELEASE_DIR/core/upgrade/target/syncope-core-upgrade-*.zip . cp $SYNCOPE_RELEASE_DIR/core/upgrade/target/syncope-core-upgrade-*.zip.asc . for file in `find . -type f -iname '*.asc'` do gpg --verify ${file} done for file in `find . -name '*.deb' -or -name '*.jar' -or -name '*.zip' -or -name '*.nbm'`; do openssl sha512 $file | sed 's/.*= //' > $file.sha512 done cd .. svn add $VERSION svn commit -m "Staging artifacts for $VERSION vote"
unzip $SYNCOPE_RELEASE_DIR/target/syncope-$VERSION-source-release.zip cd syncope-$VERSION mvn -PskipTests,all cd standalone/target/standalone/apache-tomcat-* && chmod 755 bin/*.sh && ./bin/startup.sh curl -o /tmp/syncope.wadl http://localhost:9080/syncope/syncope.wadl curl -o /tmp/index.html http://localhost:9080/syncope/index.html sed -i 's/\/syncope\/webjars\/jquery\/3.3.1-1\/jquery.min.js/https:\/\/code.jquery.com\/jquery-3.3.1.min.js/' /tmp/index.html sed -i 's/\/syncope\/webjars\/jquery-ui\/1.12.1\/jquery-ui.min.js/http:\/\/code.jquery.com\/ui\/1.12.1\/jquery-ui.min.js/' /tmp/index.html sed -i 's/\/syncope\/webjars\/jquery-ui-themes\/1.12.1\/smoothness\/jquery-ui.min.css/https:\/\/code.jquery.com\/ui\/1.12.1\/themes\/smoothness\/jquery-ui.css/' /tmp/index.html # if releasing from 2_0_X curl -o /tmp/schema_1_syncope2.html http://localhost:9080/syncope/schema_1_syncope2.html sed -i 's/\/syncope\/webjars\/highlightjs\/9.8.0\/styles\/default.min.css/http:\/\/cdnjs.cloudflare.com\/ajax\/libs\/highlight.js\/9.8.0\/styles\/default.min.css/' /tmp/schema_1_syncope2.html sed -i 's/\/syncope\/webjars\/highlightjs\/9.8.0\/highlight.min.js/http:\/\/cdnjs.cloudflare.com\/ajax\/libs\/highlight.js\/9.8.0\/highlight.min.js/' /tmp/schema_1_syncope2.html # else if releasing from 2_1_X curl -o /tmp/schema_1_syncope21.html http://localhost:9080/syncope/schema_1_syncope21.html sed -i 's/\/syncope\/webjars\/highlightjs\/9.8.0\/styles\/default.min.css/http:\/\/cdnjs.cloudflare.com\/ajax\/libs\/highlight.js\/9.8.0\/styles\/default.min.css/' /tmp/schema_1_syncope21.html sed -i 's/\/syncope\/webjars\/highlightjs\/9.8.0\/highlight.min.js/http:\/\/cdnjs.cloudflare.com\/ajax\/libs\/highlight.js\/9.8.0\/highlight.min.js/' /tmp/schema_1_syncope21.html ./bin/shutdown.sh && cd - svn checkout https://svn.apache.org/repos/asf/syncope/site/ site cd $SYNCOPE_SITE_DIR mvn -P site -Dsite.deploymentBaseUrl=file:///<absolute path to/site>/$VERSION cd <absolute path to/site>/$VERSION # if releasing from 2_0_X mkdir -p rest/2.0 mv /tmp/index.html rest/2.0 mv /tmp/schema_1_syncope2.html rest/2.0 mv /tmp/syncope.wadl rest/2.0 cp $SYNCOPE_SITE_DIR/target/generated-docs/getting-started.* docs/2.0/ cp $SYNCOPE_SITE_DIR/target/generated-docs/reference-guide.* docs/2.0/ cp -r $SYNCOPE_SITE_DIR/target/generated-docs/images docs/2.0/ cd docs ln -s 2.1/reference-guide.html . ln -s 2.1/getting-started.html . ln -s 2.1/images/ . cd ../.. svn add $VERSION svn copy apidocs/2.1 $VERSION/apidocs/ svn copy rest/2.1 $VERSION/rest/ svn copy docs/2.1/ $VERSION/docs/ # else if releasing from 2_1_X mkdir -p rest/2.1 mv /tmp/index.html rest/2.1 mv /tmp/schema_1_syncope21.html rest/2.1 mv /tmp/syncope.wadl rest/2.1 cp $SYNCOPE_SITE_DIR/target/generated-docs/getting-started.* docs/2.1/ cp $SYNCOPE_SITE_DIR/target/generated-docs/reference-guide.* docs/2.1/ cp -r $SYNCOPE_SITE_DIR/target/generated-docs/images docs/2.1/ cd docs ln -s 2.1/reference-guide.html . ln -s 2.1/getting-started.html . ln -s 2.1/images/ . cd ../.. svn add $VERSION svn copy apidocs/2.0 $VERSION/apidocs/ svn copy rest/2.0 $VERSION/rest/ svn copy docs/2.0/ $VERSION/docs/ svn commit -m "Staging site for release"
mvn -P apache-release release:perform -Darguments="-P all,docker -DbuildNumber=syncope-$VERSION" [-Duser.name=<your_apache_uid>]
If your local OS userid doesn't match your Apache userid, then you'll have to also override the value provided by the OS to Maven for the site-deploy step to work. This is known to work for Linux, but not for Mac and unknown for Windows.
git commit -a -m "Updating Eclipse files for next development iteration" git push
To: dev@syncope.apache.org Subject: [VOTE] Apache Syncope $VERSION I've created a $VERSION release, with the following artifacts up for a vote: GIT source tag (XXXXXXXXXXXXXXXX): https://gitbox.apache.org/repos/asf?p=syncope.git;a=tag;h=XXXXXXXXXXXXXXXX List of changes: https://gitbox.apache.org/repos/asf?p=syncope.git;a=blob_plain;f=CHANGES;h=XXXXXXXXXXXXXXXX;hb=YYYYYYYYYYYYYYYYYYYYY Staging artifacts: https://dist.apache.org/repos/dist/dev/syncope/$VERSION Maven staging repo: https://repository.apache.org/content/repositories/orgapachesyncope-ZZZZ/ Staging site: http://syncope.apache.org/$VERSION/ PGP release keys (signed using ABCDEFG): http://www.apache.org/dist/syncope/KEYS Vote will be open for 72 hours. [ ] +1 approve [ ] +0 no opinion [ ] -1 disapprove (and reason why)
To: dev@syncope.apache.org Subject: [RESULT] [VOTE] Apache Syncope $VERSION Hi all, after 72 hours, the vote for Syncope $VERSION [1] *passes* with ... PMC + ... non-PMC votes. +1 (PMC / binding) * ... +1 (non binding) * ... (or <none>) 0 * ... (or <none>) -1 * ... (or <none>) Thanks to everyone participating. I will now copy this release to Syncope' dist directory and promote the artifacts to the central Maven repository. Best regards. [1] <link to syncope-dev ML archives for the related [VOTE] thread>
svn mv -m "Moving the voted release artifacts to dist/release" \ https://dist.apache.org/repos/dist/dev/syncope/$VERSION https://dist.apache.org/repos/dist/release/syncope/ svn co https://dist.apache.org/repos/dist/release/syncope syncope-dist-release cd syncope-dist-release svn rm <any older release artifact (if present)> svn commit -m "Cleaning up older releases"
svn co https://svn.apache.org/repos/asf/syncope/site/ cd site svn rm *.html apidocs rest css images img js fonts docs svn mv $VERSION/* . svn rm $VERSION svn commit -m "Promoting the staging site"
Reply to the initial vote email prepending [CANCELED] to the original subject.
Rollback the version upgrades in trunk by either:
mvn -P apache-release release:rollback
Delete the GIT tag created by the release:perform step:
git tag -d $VERSION && git push origin
Delete the staging site:
svn remove https://svn.apache.org/repos/asf/syncope/site/$VERSION -m "Deleting staging site from rolled back release"
Drop the Nexus staging repo: