diff --git a/.buildkite/pipeline.yml b/.buildkite/pipeline.yml new file mode 100644 index 00000000..6c1f30d1 --- /dev/null +++ b/.buildkite/pipeline.yml @@ -0,0 +1,15 @@ +steps: + - label: "Publish Simperium" + plugins: + docker#v3.8.0: + image: "public.ecr.aws/automattic/android-build-image:v1.1.0" + propagate-environment: true + environment: + # DO NOT MANUALLY SET THESE VALUES! + # They are passed from the Buildkite agent to the Docker container + - "AWS_ACCESS_KEY" + - "AWS_SECRET_KEY" + command: | + ./gradlew \ + :Simperium:prepareToPublishToS3 $(prepare_to_publish_to_s3_params) \ + :Simperium:publish diff --git a/.gitignore b/.gitignore index edc7552f..6d955b4d 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ +.DS_Store # ignore generated version file for ant Version.java diff --git a/README.md b/README.md index 82b49e2a..c3fae708 100644 --- a/README.md +++ b/README.md @@ -2,8 +2,6 @@ Trying to make using [Simperium][Simperium.com] in your Android app dead simple. -[![Build Status](https://travis-ci.org/Simperium/simperium-android.svg?branch=develop)](https://travis-ci.org/Simperium/simperium-android) - ## Using in an Android Project Simperium for Android is configured as an [Android Library Project][]. @@ -31,14 +29,6 @@ Please provide unit tests for your contributions. Run tests with gradle: Unit tests use a mock networking and storage stack so that different components can be tested in isolation. The unit tests should not connect to any external services. -## Publish the library to maven central - -Replace `CHANGEME` by a valid bintray user/key and run the following command line: - -``` -./gradlew assemble publishToMavenLocal bintrayUpload -PbintrayUser=CHANGEME -PbintrayKey=CHANGEME -PdryRun=false -``` - [Android Studio]: http://developer.android.com/sdk/installing/studio.html [Gradle]: http://www.gradleware.com [Simperium.com]: http://simperium.com diff --git a/Simperium/build.gradle b/Simperium/build.gradle index 8f1cc980..4cde0fed 100644 --- a/Simperium/build.gradle +++ b/Simperium/build.gradle @@ -1,23 +1,9 @@ -apply plugin: 'com.android.library' -apply plugin: 'com.novoda.bintray-release' // must be applied after your artifact generating plugin (eg. java / com.android.library) -apply plugin: 'maven' - -buildscript { - dependencies { - classpath 'com.android.tools.build:gradle:3.4.2' - classpath 'com.novoda:bintray-release:0.9.1' - } - - repositories { - google() - jcenter() - } +plugins { + id "com.android.library" + id "maven-publish" + id "com.automattic.android.publish-to-s3" } -version gitVersion() - -group "com.simperium" - repositories { google() jcenter() @@ -29,7 +15,6 @@ android { defaultConfig { minSdkVersion 23 targetSdkVersion 30 - versionName project.version // Calculating PIN for certificate: OU=Domain Control Validated, CN=*.simperium.com // Pin Value: e25695097d04927c9d90206333a687a7b1f99708 @@ -68,6 +53,29 @@ android { useLibrary 'org.apache.http.legacy' } +tasks.withType(Javadoc) { + options.addStringOption('Xdoclint:none', '-quiet') + options.addStringOption('encoding', 'UTF-8') +} + +afterEvaluate { + publishing { + publications { + release(MavenPublication) { + from components.clientRelease + groupId "com.automattic" + artifactId "simperium" + // version is set by 'publish-to-s3' plugin + } + } + } +} + +publishToS3Plugin { + mavenPublishGroupId "com.automattic" + mavenPublishArtifactId "simperium" +} + task versionConfig(group: "build", description: "Generate version class") { def dir = "${buildDir}/generated/source/version" def file = new File(dir, "com/simperium/Version.java") @@ -75,6 +83,7 @@ task versionConfig(group: "build", description: "Generate version class") { android.sourceSets.main.java.srcDir dir doLast { + def publishedVersion = project.ext.properties.extra_version_name def describe = gitDescribe() logger.info "Version: ${describe}" @@ -83,19 +92,13 @@ task versionConfig(group: "build", description: "Generate version class") { def writer = new FileWriter(file) writer.write("""/* auto-generated file do not modify */ package com.simperium; - public final class Version { - public static final String LIBRARY_NAME = "android"; - - public static final String NAME = "android-${project.version}"; - + public static final String NAME = "android-$publishedVersion"; /* project.version */ - public static final String NUMBER = "${project.version}"; - + public static final String NUMBER = "$publishedVersion"; /* git rev-parse --short --verify HEAD */ public static final String BUILD = "${gitHash()}"; - /* git describe --always --dirty=-dirty */ public static final String DESCRIBE = "${gitDescribe()}"; } @@ -105,17 +108,3 @@ public final class Version { } tasks.preBuild.dependsOn versionConfig - -publish { - artifactId = 'simperium' - userOrg = 'simperium' - groupId = 'com.simperium.android' - uploadName = 'simperium' - desc = 'Android library for building applications using Simperium' - publishVersion = android.defaultConfig.versionName - licences = ['MIT'] - website = 'https://github.com/Simperium/simperium-android' - dryRun = 'false' - autoPublish = 'true' - publications = ['clientRelease'] -} diff --git a/build.gradle b/build.gradle index 2f645678..aa0f2daf 100644 --- a/build.gradle +++ b/build.gradle @@ -1,10 +1,3 @@ -allprojects { - tasks.withType(Javadoc) { - options.addStringOption('Xdoclint:none', '-quiet') - options.addStringOption('encoding', 'UTF-8') - } -} - // Top-level build file where you can add configuration options common to all sub-projects/modules. def gitHash() { try { diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index 8c0fb64a..87b738cb 100644 Binary files a/gradle/wrapper/gradle-wrapper.jar and b/gradle/wrapper/gradle-wrapper.jar differ diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index ac59f4e3..af7be50b 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,5 @@ -#Thu Jun 13 15:16:26 MDT 2019 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-7.1.1-all.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-5.1.1-all.zip diff --git a/gradlew b/gradlew index 91a7e269..af6708ff 100755 --- a/gradlew +++ b/gradlew @@ -1,4 +1,4 @@ -#!/usr/bin/env bash +#!/usr/bin/env sh ############################################################################## ## @@ -6,20 +6,38 @@ ## ############################################################################## -# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -DEFAULT_JVM_OPTS="" +# Attempt to set APP_HOME +# Resolve links: $0 may be a link +PRG="$0" +# Need this for relative symlinks. +while [ -h "$PRG" ] ; do + ls=`ls -ld "$PRG"` + link=`expr "$ls" : '.*-> \(.*\)$'` + if expr "$link" : '/.*' > /dev/null; then + PRG="$link" + else + PRG=`dirname "$PRG"`"/$link" + fi +done +SAVED="`pwd`" +cd "`dirname \"$PRG\"`/" >/dev/null +APP_HOME="`pwd -P`" +cd "$SAVED" >/dev/null APP_NAME="Gradle" APP_BASE_NAME=`basename "$0"` +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS='"-Xmx64m"' + # Use the maximum available, or set MAX_FD != -1 to use that value. MAX_FD="maximum" -warn ( ) { +warn () { echo "$*" } -die ( ) { +die () { echo echo "$*" echo @@ -30,6 +48,7 @@ die ( ) { cygwin=false msys=false darwin=false +nonstop=false case "`uname`" in CYGWIN* ) cygwin=true @@ -40,31 +59,11 @@ case "`uname`" in MINGW* ) msys=true ;; + NONSTOP* ) + nonstop=true + ;; esac -# For Cygwin, ensure paths are in UNIX format before anything is touched. -if $cygwin ; then - [ -n "$JAVA_HOME" ] && JAVA_HOME=`cygpath --unix "$JAVA_HOME"` -fi - -# Attempt to set APP_HOME -# Resolve links: $0 may be a link -PRG="$0" -# Need this for relative symlinks. -while [ -h "$PRG" ] ; do - ls=`ls -ld "$PRG"` - link=`expr "$ls" : '.*-> \(.*\)$'` - if expr "$link" : '/.*' > /dev/null; then - PRG="$link" - else - PRG=`dirname "$PRG"`"/$link" - fi -done -SAVED="`pwd`" -cd "`dirname \"$PRG\"`/" >&- -APP_HOME="`pwd -P`" -cd "$SAVED" >&- - CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar # Determine the Java command to use to start the JVM. @@ -90,7 +89,7 @@ location of your Java installation." fi # Increase the maximum file descriptors if we can. -if [ "$cygwin" = "false" -a "$darwin" = "false" ] ; then +if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then MAX_FD_LIMIT=`ulimit -H -n` if [ $? -eq 0 ] ; then if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then @@ -114,6 +113,7 @@ fi if $cygwin ; then APP_HOME=`cygpath --path --mixed "$APP_HOME"` CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` + JAVACMD=`cygpath --unix "$JAVACMD"` # We build the pattern for arguments to be converted via cygpath ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` @@ -154,11 +154,19 @@ if $cygwin ; then esac fi -# Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules -function splitJvmOpts() { - JVM_OPTS=("$@") +# Escape application args +save () { + for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done + echo " " } -eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS -JVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME" +APP_ARGS=$(save "$@") + +# Collect all arguments for the java command, following the shell quoting and substitution rules +eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" + +# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong +if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then + cd "$(dirname "$0")" +fi -exec "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "$@" +exec "$JAVACMD" "$@" diff --git a/gradlew.bat b/gradlew.bat index aec99730..0f8d5937 100644 --- a/gradlew.bat +++ b/gradlew.bat @@ -8,14 +8,14 @@ @rem Set local scope for the variables with windows NT shell if "%OS%"=="Windows_NT" setlocal -@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -set DEFAULT_JVM_OPTS= - set DIRNAME=%~dp0 if "%DIRNAME%" == "" set DIRNAME=. set APP_BASE_NAME=%~n0 set APP_HOME=%DIRNAME% +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS="-Xmx64m" + @rem Find java.exe if defined JAVA_HOME goto findJavaFromJavaHome @@ -46,10 +46,9 @@ echo location of your Java installation. goto fail :init -@rem Get command-line arguments, handling Windowz variants +@rem Get command-line arguments, handling Windows variants if not "%OS%" == "Windows_NT" goto win9xME_args -if "%@eval[2+2]" == "4" goto 4NT_args :win9xME_args @rem Slurp the command line arguments. @@ -60,11 +59,6 @@ set _SKIP=2 if "x%~1" == "x" goto execute set CMD_LINE_ARGS=%* -goto execute - -:4NT_args -@rem Get arguments from the 4NT Shell from JP Software -set CMD_LINE_ARGS=%$ :execute @rem Setup the command line diff --git a/settings.gradle b/settings.gradle deleted file mode 100644 index c0b1d40e..00000000 --- a/settings.gradle +++ /dev/null @@ -1 +0,0 @@ -include ':Simperium' diff --git a/settings.gradle.kts b/settings.gradle.kts new file mode 100644 index 00000000..f2bb4561 --- /dev/null +++ b/settings.gradle.kts @@ -0,0 +1,19 @@ +pluginManagement { + plugins { + id("com.android.library") version "4.2.2" + id("com.automattic.android.publish-to-s3") version "0.6.1" + } + repositories { + maven { + url = uri("https://a8c-libs.s3.amazonaws.com/android") + content { + includeGroup("com.automattic.android") + includeGroup("com.automattic.android.publish-to-s3") + } + } + gradlePluginPortal() + google() + } +} + +include(":Simperium")