147d6569a26edc3914fd39100a57fa294a9d8732amikesamuel#!/bin/bash
247d6569a26edc3914fd39100a57fa294a9d8732amikesamuel
33a7234c895e586dcbd9fa3b1a464f025a8cd9617mikesamuelfunction requireLocalRepoUpToDate() {
43a7234c895e586dcbd9fa3b1a464f025a8cd9617mikesamuel  local LOCAL_CHANGES="$(svn status -u | egrep -v '^Status against revision:')"
53a7234c895e586dcbd9fa3b1a464f025a8cd9617mikesamuel  # -u causes status differences from head to be reported.
63a7234c895e586dcbd9fa3b1a464f025a8cd9617mikesamuel  if [[ -n "$LOCAL_CHANGES" ]]; then
73a7234c895e586dcbd9fa3b1a464f025a8cd9617mikesamuel      echo "Repo is not up-to-date or not committed."
83a7234c895e586dcbd9fa3b1a464f025a8cd9617mikesamuel      echo ========================================
93a7234c895e586dcbd9fa3b1a464f025a8cd9617mikesamuel      echo "$LOCAL_CHANGES"
103a7234c895e586dcbd9fa3b1a464f025a8cd9617mikesamuel      echo ========================================
113a7234c895e586dcbd9fa3b1a464f025a8cd9617mikesamuel
123a7234c895e586dcbd9fa3b1a464f025a8cd9617mikesamuel      echo "Aborting."
133a7234c895e586dcbd9fa3b1a464f025a8cd9617mikesamuel      echo
143a7234c895e586dcbd9fa3b1a464f025a8cd9617mikesamuel      exit -1
153a7234c895e586dcbd9fa3b1a464f025a8cd9617mikesamuel  fi
163a7234c895e586dcbd9fa3b1a464f025a8cd9617mikesamuel}
173a7234c895e586dcbd9fa3b1a464f025a8cd9617mikesamuel
183a7234c895e586dcbd9fa3b1a464f025a8cd9617mikesamuelrequireLocalRepoUpToDate
193a7234c895e586dcbd9fa3b1a464f025a8cd9617mikesamuel
2047d6569a26edc3914fd39100a57fa294a9d8732amikesamuelPROJECT_DIR="$(pushd "$(dirname "$0")/../.." >& /dev/null; pwd -P; popd >& /dev/null)"
2147d6569a26edc3914fd39100a57fa294a9d8732amikesamuel
2247d6569a26edc3914fd39100a57fa294a9d8732amikesamuelVERSION="$1"
2347d6569a26edc3914fd39100a57fa294a9d8732amikesamuel
2447d6569a26edc3914fd39100a57fa294a9d8732amikesamuelPASSPHRASE="$2"
2547d6569a26edc3914fd39100a57fa294a9d8732amikesamuel
26c8c80c512a678b9f18c7897de28b7f13db149cc1mikesamuelKEYNAME=41449802
2747d6569a26edc3914fd39100a57fa294a9d8732amikesamuel
2847d6569a26edc3914fd39100a57fa294a9d8732amikesamuelfunction usageAndExit() {
2947d6569a26edc3914fd39100a57fa294a9d8732amikesamuel  echo "Usage: $0 <version> <passphrase>"
3047d6569a26edc3914fd39100a57fa294a9d8732amikesamuel  echo
3147d6569a26edc3914fd39100a57fa294a9d8732amikesamuel  echo "Stages a release for deployment into Maven central"
3247d6569a26edc3914fd39100a57fa294a9d8732amikesamuel  echo
3347d6569a26edc3914fd39100a57fa294a9d8732amikesamuel  echo "<version> is the current SVN revision number."
3447d6569a26edc3914fd39100a57fa294a9d8732amikesamuel  echo "svn info gives more info about the state of trunk."
3547d6569a26edc3914fd39100a57fa294a9d8732amikesamuel  echo
3647d6569a26edc3914fd39100a57fa294a9d8732amikesamuel  echo "<passphrase> is the passphrase for the GPG key $KEYNAME."
3747d6569a26edc3914fd39100a57fa294a9d8732amikesamuel  echo "gpg --list-keys for more details on the key."
3847d6569a26edc3914fd39100a57fa294a9d8732amikesamuel  echo
3947d6569a26edc3914fd39100a57fa294a9d8732amikesamuel  echo "For example: $0 r123 ELIDED"
4047d6569a26edc3914fd39100a57fa294a9d8732amikesamuel  exit -1
4147d6569a26edc3914fd39100a57fa294a9d8732amikesamuel}
4247d6569a26edc3914fd39100a57fa294a9d8732amikesamuel
4347d6569a26edc3914fd39100a57fa294a9d8732amikesamuelif ! [ -d "$PROJECT_DIR/maven" ]; then
4447d6569a26edc3914fd39100a57fa294a9d8732amikesamuel  echo "Cannot determine script directory.  $PROJECT_DIR"
4547d6569a26edc3914fd39100a57fa294a9d8732amikesamuel  usageAndExit
4647d6569a26edc3914fd39100a57fa294a9d8732amikesamuelfi
4747d6569a26edc3914fd39100a57fa294a9d8732amikesamuel
4847d6569a26edc3914fd39100a57fa294a9d8732amikesamuelif ! [[ "$VERSION" =~ r[0-9]+ ]]; then
4947d6569a26edc3914fd39100a57fa294a9d8732amikesamuel  echo "Bad version $VERSION"
5047d6569a26edc3914fd39100a57fa294a9d8732amikesamuel  echo
5147d6569a26edc3914fd39100a57fa294a9d8732amikesamuel  usageAndExit
5247d6569a26edc3914fd39100a57fa294a9d8732amikesamuelfi
5347d6569a26edc3914fd39100a57fa294a9d8732amikesamuel
5447d6569a26edc3914fd39100a57fa294a9d8732amikesamuelif [ -z "$PASSPHRASE" ]; then
5547d6569a26edc3914fd39100a57fa294a9d8732amikesamuel  echo "Missing passphrase"
5647d6569a26edc3914fd39100a57fa294a9d8732amikesamuel  echo
5747d6569a26edc3914fd39100a57fa294a9d8732amikesamuel  usageAndExit
5847d6569a26edc3914fd39100a57fa294a9d8732amikesamuelfi
5947d6569a26edc3914fd39100a57fa294a9d8732amikesamuel
6047d6569a26edc3914fd39100a57fa294a9d8732amikesamuelPOMFILE="$PROJECT_DIR/maven/owasp-java-html-sanitizer/owasp-java-html-sanitizer/$VERSION/owasp-java-html-sanitizer-$VERSION.pom"
6147d6569a26edc3914fd39100a57fa294a9d8732amikesamuel
6247d6569a26edc3914fd39100a57fa294a9d8732amikesamuelJAR_NO_EXT="$PROJECT_DIR/maven/owasp-java-html-sanitizer/owasp-java-html-sanitizer/$VERSION/owasp-java-html-sanitizer-$VERSION"
6347d6569a26edc3914fd39100a57fa294a9d8732amikesamuel
6447d6569a26edc3914fd39100a57fa294a9d8732amikesamuelfunction requireFile() {
6547d6569a26edc3914fd39100a57fa294a9d8732amikesamuel  local FILE="$1"
6647d6569a26edc3914fd39100a57fa294a9d8732amikesamuel  if ! [ -e "$FILE" ]; then
6747d6569a26edc3914fd39100a57fa294a9d8732amikesamuel      echo "Missing file : $FILE"
6847d6569a26edc3914fd39100a57fa294a9d8732amikesamuel      echo
6947d6569a26edc3914fd39100a57fa294a9d8732amikesamuel      usageAndExit
7047d6569a26edc3914fd39100a57fa294a9d8732amikesamuel  fi
7147d6569a26edc3914fd39100a57fa294a9d8732amikesamuel}
7247d6569a26edc3914fd39100a57fa294a9d8732amikesamuel
7347d6569a26edc3914fd39100a57fa294a9d8732amikesamuelrequireFile "$POMFILE"
7447d6569a26edc3914fd39100a57fa294a9d8732amikesamuelrequireFile "$JAR_NO_EXT".jar
7547d6569a26edc3914fd39100a57fa294a9d8732amikesamuelrequireFile "$JAR_NO_EXT"-sources.jar
7647d6569a26edc3914fd39100a57fa294a9d8732amikesamuelrequireFile "$JAR_NO_EXT"-javadoc.jar
7747d6569a26edc3914fd39100a57fa294a9d8732amikesamuel
7847d6569a26edc3914fd39100a57fa294a9d8732amikesamuelmvn -X -e \
7947d6569a26edc3914fd39100a57fa294a9d8732amikesamuel  gpg:sign-and-deploy-file \
8047d6569a26edc3914fd39100a57fa294a9d8732amikesamuel  -Dgpg.keyname="$KEYNAME" \
8147d6569a26edc3914fd39100a57fa294a9d8732amikesamuel  -Dgpg.passphrase="$PASSPHRASE" \
8247d6569a26edc3914fd39100a57fa294a9d8732amikesamuel  -DgeneratePom=false \
8347d6569a26edc3914fd39100a57fa294a9d8732amikesamuel  -DpomFile="$POMFILE" \
8447d6569a26edc3914fd39100a57fa294a9d8732amikesamuel  -Dfile="$JAR_NO_EXT".jar \
8547d6569a26edc3914fd39100a57fa294a9d8732amikesamuel  -Dfiles="$JAR_NO_EXT"-sources.jar,"$JAR_NO_EXT"-javadoc.jar \
8647d6569a26edc3914fd39100a57fa294a9d8732amikesamuel  -Dtypes=jar,jar \
8747d6569a26edc3914fd39100a57fa294a9d8732amikesamuel  -Dclassifiers=sources,javadoc \
8847d6569a26edc3914fd39100a57fa294a9d8732amikesamuel  -Durl=https://oss.sonatype.org/service/local/staging/deploy/maven2/ \
8947d6569a26edc3914fd39100a57fa294a9d8732amikesamuel  -DrepositoryId=sonatype-nexus-staging \
9047d6569a26edc3914fd39100a57fa294a9d8732amikesamuel&& \
9147d6569a26edc3914fd39100a57fa294a9d8732amikesamuelecho "Follow instructions at https://docs.sonatype.org/display/Repository/Sonatype+OSS+Maven+Repository+Usage+Guide#SonatypeOSSMavenRepositoryUsageGuide-8a.ReleaseIt"
92