From 37b00678e4f3cc0b9c8191a777512d0dc33bd2d5 Mon Sep 17 00:00:00 2001 From: Vera Xia Date: Wed, 27 Apr 2022 14:19:44 -0700 Subject: [PATCH] added the release scrtips --- codebuild/cd/promote-release.yml | 58 ++++++++++++++++++++++++++++ codebuild/cd/test-version-exists.sh | 23 +++++++++++ codebuild/cd/test-version-exists.yml | 10 +++++ 3 files changed, 91 insertions(+) create mode 100644 codebuild/cd/promote-release.yml create mode 100644 codebuild/cd/test-version-exists.sh create mode 100644 codebuild/cd/test-version-exists.yml 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 +