diff --git a/aws-iot-device-sdk-java-samples/pom.xml b/aws-iot-device-sdk-java-samples/pom.xml index 19e7f99331..3164780487 100644 --- a/aws-iot-device-sdk-java-samples/pom.xml +++ b/aws-iot-device-sdk-java-samples/pom.xml @@ -3,14 +3,14 @@ com.amazonaws aws-iot-device-sdk-java-pom - 1.3.9 + 0.0.1-dev aws-iot-device-sdk-java-samples com.amazonaws aws-iot-device-sdk-java - 1.3.9 + 0.0.1-dev commons-codec diff --git a/aws-iot-device-sdk-java-samples/samples-pom.xml b/aws-iot-device-sdk-java-samples/samples-pom.xml index ebed8c3d1c..4574ad7671 100644 --- a/aws-iot-device-sdk-java-samples/samples-pom.xml +++ b/aws-iot-device-sdk-java-samples/samples-pom.xml @@ -2,7 +2,7 @@ 4.0.0 com.amazonaws aws-iot-device-sdk-java-samples - 1.3.9 + 0.0.1-dev org.apache.maven.plugins @@ -12,7 +12,7 @@ com.amazonaws aws-iot-device-sdk-java - 1.3.9 + 0.0.1-dev com.fasterxml.jackson.core diff --git a/aws-iot-device-sdk-java/pom.xml b/aws-iot-device-sdk-java/pom.xml index 15949ef8b3..0e025d1726 100644 --- a/aws-iot-device-sdk-java/pom.xml +++ b/aws-iot-device-sdk-java/pom.xml @@ -3,7 +3,7 @@ com.amazonaws aws-iot-device-sdk-java-pom - 1.3.9 + 0.0.1-dev aws-iot-device-sdk-java diff --git a/aws-iot-device-sdk-java/src/main/java/com/amazonaws/services/iot/client/mqtt/AwsIotMqttConnection.java b/aws-iot-device-sdk-java/src/main/java/com/amazonaws/services/iot/client/mqtt/AwsIotMqttConnection.java index 2f002b7852..895e8e35fb 100644 --- a/aws-iot-device-sdk-java/src/main/java/com/amazonaws/services/iot/client/mqtt/AwsIotMqttConnection.java +++ b/aws-iot-device-sdk-java/src/main/java/com/amazonaws/services/iot/client/mqtt/AwsIotMqttConnection.java @@ -44,7 +44,8 @@ @Setter public class AwsIotMqttConnection extends AwsIotConnection { - private static final String USERNAME_METRIC_STRING = "?SDK=Java&Version=1.3.9"; + // Release Script will replace the version string on release. Refer to codebuild/cd/promote-release.yml + private static final String USERNAME_METRIC_STRING = "?SDK=Java&Version=0.0.1-dev"; private final SocketFactory socketFactory; private MqttAsyncClient mqttClient; diff --git a/codebuild/cd/promote-release.yml b/codebuild/cd/promote-release.yml new file mode 100644 index 0000000000..2f3160f64e --- /dev/null +++ b/codebuild/cd/promote-release.yml @@ -0,0 +1,58 @@ +version: 0.2 +#this buildspec assumes the ubuntu 16.04:x64 image +# This job is responsible for artifacting the JAR which will have all of the other shared libs stuffed +# into it once all platforms are built and artifacted +phases: + install: + commands: + - sudo add-apt-repository ppa:openjdk-r/ppa + - sudo apt-get update -y + - sudo apt-get install openjdk-8-jdk-headless maven -y -f + - sudo apt-get install jq -y + # need latest awscli for secretsmanager + - sudo pip3 install awscli --upgrade + + pre_build: + commands: + - cd $CODEBUILD_SRC_DIR/aws-iot-device-sdk-java + - export PKG_VERSION=$(git describe --tags | cut -f2 -dv) + - echo PKG_VERSION=$PKG_VERSION + # Set version to PKG_VERSION + - sed -i 's/0.0.1-dev/'"$PKG_VERSION"'/g' pom.xml + - sed -i 's/0.0.1-dev/'"$PKG_VERSION"'/g' aws-iot-device-sdk-java/pom.xml + - sed -i 's/0.0.1-dev/'"$PKG_VERSION"'/g' aws-iot-device-sdk-java-samples/pom.xml + - sed -i 's/0.0.1-dev/'"$PKG_VERSION"'/g' aws-iot-device-sdk-java/src/main/java/com/amazonaws/services/iot/client/mqtt/AwsIotMqttConnection.java + # Get java v1 gpg files + - aws s3 cp --recursive s3://code-sharing-aws-crt/gpg-java-v1/ maven-gpg + # manully copy the maven-gpg in subfolder, since codeBuild does not set localRepository correctly + - cp -r maven-gpg aws-iot-device-sdk-java/maven-gpg + - cp -r maven-gpg aws-iot-device-sdk-java-samples/maven-gpg + # install settings.xml to ~/.m2/settings.xml + - mkdir -p $HOME/.m2 + - aws s3 cp s3://code-sharing-aws-crt/iot-sdk-java-v1.settings.xml $HOME/.m2/settings.xml + - aws --query "SecretString" secretsmanager get-secret-value --secret-id Sonatype/JIRA/Password/V1 > sonatype_secret + - jq fromjson sonatype_secret > sonatype_json + - export ST_PASSWORD=$(jq -r '.password' sonatype_json) + - export ST_USERNAME=$(jq -r '.username' sonatype_json) + - aws --query "SecretString" secretsmanager get-secret-value --secret-id gpg/IoT/JAVA/V1 > gpg_secret + - jq fromjson gpg_secret > gpg_json + - export GPG_PRINCIPAL=$(jq -r '.username' gpg_json) + - export GPG_CREDENTIAL=$(jq -r '.password' gpg_json) + # Use the password from secret manager to update the settings + - sed -i 's/sonatype_Principal/'"$ST_USERNAME"'/g' $HOME/.m2/settings.xml + - sed -i 's/sonatype_Credential/'"$ST_PASSWORD"'/g' $HOME/.m2/settings.xml + - sed -i 's/gpg_Principal/'"$GPG_PRINCIPAL"'/g' $HOME/.m2/settings.xml + - sed -i 's/gpg_Credential/'"$GPG_CREDENTIAL"'/g' $HOME/.m2/settings.xml + + + build: + commands: + - cd $CODEBUILD_SRC_DIR/aws-iot-device-sdk-java + # Trigger the release of the last staged package in the staging repository + - mvn -s $HOME/.m2/settings.xml clean package -Dmaven.test.skip=true + - mvn -s $HOME/.m2/settings.xml clean deploy -P publishing -e -X + - mvn -s $HOME/.m2/settings.xml nexus-staging:release -e -X + +cache: + paths: + - "/root/.m2/**/*" diff --git a/codebuild/cd/test-version-exists.sh b/codebuild/cd/test-version-exists.sh new file mode 100644 index 0000000000..c3e8316ecc --- /dev/null +++ b/codebuild/cd/test-version-exists.sh @@ -0,0 +1,23 @@ +#!/usr/bin/env bash +set -e +set -x +# force a failure if there's no tag +git describe --tags +# now get the tag +CURRENT_TAG=$(git describe --tags | cut -f2 -dv) +# convert v0.2.12-2-g50254a9 to 0.2.12 +CURRENT_TAG_VERSION=$(git describe --tags | cut -f1 -d'-' | cut -f2 -dv) +# if there's a hash on the tag, then this is not a release tagged commit +if [ "$CURRENT_TAG" != "$CURRENT_TAG_VERSION" ]; then + echo "Current tag version is not a release tag, cut a new release if you want to publish." + exit 1 +fi + +PUBLISHED_TAG_VERSION=$(curl -s "https://repo.maven.apache.org/maven2/com/amazonaws/aws-iot-device-sdk-java/maven-metadata.xml" | grep "" | cut -f2 -d ">" | cut -f1 -d "<") +if [ "$PUBLISHED_TAG_VERSION" == "$CURRENT_TAG_VERSION" ]; then + echo "$CURRENT_TAG_VERSION is already in Sonatype, cut a new tag if you want to upload another version." + exit 1 +fi + +echo "$CURRENT_TAG_VERSION currently does not exist in Sonatype, allowing pipeline to continue." +exit 0 diff --git a/codebuild/cd/test-version-exists.yml b/codebuild/cd/test-version-exists.yml new file mode 100644 index 0000000000..a696eae15e --- /dev/null +++ b/codebuild/cd/test-version-exists.yml @@ -0,0 +1,10 @@ +version: 0.2 +#this build spec assumes the ubuntu 16.04:x64 image +#this build run simply verifies we haven't published something at this tag yet. +#if we have we fail the build and stop the pipeline, if we haven't we allow the pipeline to run. +phases: + build: + commands: + - cd $CODEBUILD_SRC_DIR/aws-iot-device-sdk-java + - bash ./codebuild/cd/test-version-exists.sh + diff --git a/pom.xml b/pom.xml index 212bd4552e..81edd50a29 100644 --- a/pom.xml +++ b/pom.xml @@ -2,7 +2,7 @@ 4.0.0 com.amazonaws aws-iot-device-sdk-java-pom - 1.3.9 + 0.0.1-dev pom AWS IoT Device SDK for Java The AWS IoT Device SDK for Java provides Java APIs for devices to connect to AWS IoT service using the MQTT protocol. The SDK also provides support for AWS IoT specific features, such as Thing Shadow and Thing Shadow abstraction. @@ -45,7 +45,7 @@ org.sonatype.plugins nexus-staging-maven-plugin - 1.6.3 + 1.6.8 true ossrh