diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml new file mode 100644 index 0000000..e0e5c24 --- /dev/null +++ b/.github/workflows/build.yml @@ -0,0 +1,52 @@ +name: CI + +on: [push, pull_request] + +jobs: + build: + runs-on: ubuntu-latest + + strategy: + fail-fast: false + matrix: + java-version: + - 1.8 + - 9 + - 10 + - 11 + - 12 + - 13 + - 14 + - 15-ea + + steps: + - name: Checkout + uses: actions/checkout@v2 + + - name: Validate Gradle Wrapper + uses: gradle/wrapper-validation-action@v1 + + - name: Generate cache key + run: ./.github/workflows/checksum.sh checksum.txt + + - uses: actions/cache@v2 + with: + path: ~/.gradle/caches + key: ${{ runner.os }}-gradle-${{ matrix.java-version }}-${{ hashFiles('checksum.txt') }} + restore-keys: | + ${{ runner.os }}-gradle-${{ matrix.java-version }}- + + - name: Configure JDK + uses: actions/setup-java@v1 + with: + java-version: ${{ matrix.java-version }} + + - name: Test + run: ./gradlew build check + + - name: Publish (default branch only) + if: github.ref == 'refs/heads/master' && matrix.java-version == '1.7' + run: ./gradlew uploadArchives + env: + ORG_GRADLE_PROJECT_SONATYPE_NEXUS_USERNAME: ${{ secrets.SONATYPE_NEXUS_USERNAME }} + ORG_GRADLE_PROJECT_SONATYPE_NEXUS_PASSWORD: ${{ secrets.SONATYPE_NEXUS_PASSWORD }} diff --git a/.github/workflows/checksum.sh b/.github/workflows/checksum.sh new file mode 100755 index 0000000..5e15f61 --- /dev/null +++ b/.github/workflows/checksum.sh @@ -0,0 +1,24 @@ +#!/bin/bash + +RESULT_FILE=$1 + +if [[ -f ${RESULT_FILE} ]]; then + rm ${RESULT_FILE} +fi +touch ${RESULT_FILE} + +checksum_file() { + echo $(openssl md5 $1 | awk '{print $2}') +} + +FILES=() +while read -r -d ''; do + FILES+=("$REPLY") +done < <(find . -type f \( -name "build.gradle*" -o -name "settings.gradle*" -o -name "gradle-wrapper.properties" \) -print0) + +# Loop through files and append MD5 to result file +for FILE in ${FILES[@]}; do + echo $(checksum_file ${FILE}) >> ${RESULT_FILE} +done +# Now sort the file so that it is idempotent. +sort ${RESULT_FILE} -o ${RESULT_FILE} \ No newline at end of file diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index 167dbb9..0000000 --- a/.travis.yml +++ /dev/null @@ -1,31 +0,0 @@ -language: java - -jdk: - - openjdk8 - -script: - - ./gradlew build check - -after_success: - - .buildscript/deploy_snapshot.sh - -env: - global: - - secure: "TM2N/yo3azbA7+J6WG0W1RmK4vvS7b4JzvJP8NcXpoZCQw2Je1nQqmKS3F/04/DEUf8+SKVh2thKEeUxLN8knCO0OQLxeKIFj9PLvtgHnV8beB+pPxUdpEvMlB6ISeDsOZ098zoax28zfMwR7+uMeGe2VbtTSpwtqt4jkWx3ooA=" - - secure: "A5flBI/PCmmxuHjqG73CIXqHYg8X1GWloA3jv0zrhCAuK5m3nAvt7JY2qom22ttEY9JI32dlArxhusrKib18gKNgZbxzoN5PydkG6T0uuGZw+uZM6jPiTlvkC0F4ikL6lg1dBap4BoakDMwAPfb11UpETamBGKOWdopLqw6T6w0=" - -branches: - except: - - gh-pages - -notifications: - email: false - -before_cache: - - rm -f $HOME/.gradle/caches/modules-2/modules-2.lock - - rm -fr $HOME/.gradle/caches/*/plugin-resolution/ - -cache: - directories: - - $HOME/.gradle/caches/ - - $HOME/.gradle/wrapper/ \ No newline at end of file diff --git a/kotlin/tests/src/test/kotlin/com/squareup/moshi/kotlin/reflect/KotlinJsonAdapterTest.kt b/kotlin/tests/src/test/kotlin/com/squareup/moshi/kotlin/reflect/KotlinJsonAdapterTest.kt index 0bec5d0..40e1e63 100644 --- a/kotlin/tests/src/test/kotlin/com/squareup/moshi/kotlin/reflect/KotlinJsonAdapterTest.kt +++ b/kotlin/tests/src/test/kotlin/com/squareup/moshi/kotlin/reflect/KotlinJsonAdapterTest.kt @@ -688,7 +688,7 @@ class KotlinJsonAdapterTest { var a = 5 } - @Test fun objectExpressionsNotSupported() { + @Test fun anonymousClassesNotSupported() { val expression = object : Any() { var a = 5 } @@ -697,9 +697,16 @@ class KotlinJsonAdapterTest { moshi.adapter(expression.javaClass) fail() } catch (e: IllegalArgumentException) { + // anonymous/local classes are slightly different in bytecode across JVM versions + val javaVersion = System.getProperty("java.version") + val type = if (javaVersion.startsWith("1.8")) { + "local class or object expression" + } else { + "anonymous class" + } assertThat(e).hasMessage( - "Cannot serialize local class or object expression " + - "com.squareup.moshi.kotlin.reflect.KotlinJsonAdapterTest\$objectExpressionsNotSupported" + + "Cannot serialize $type " + + "com.squareup.moshi.kotlin.reflect.KotlinJsonAdapterTest\$anonymousClassesNotSupported" + "\$expression$1" ) } diff --git a/moshi/src/test/java/com/squareup/moshi/CircularAdaptersTest.java b/moshi/src/test/java/com/squareup/moshi/CircularAdaptersTest.java index 7e21a38..bd6dabc 100644 --- a/moshi/src/test/java/com/squareup/moshi/CircularAdaptersTest.java +++ b/moshi/src/test/java/com/squareup/moshi/CircularAdaptersTest.java @@ -53,7 +53,9 @@ public final class CircularAdaptersTest { JsonAdapter teamAdapter = moshi.adapter(Team.class); Team team = - new Team("Alice", new Project("King", new Team("Charlie", new Project("Delivery", null)))); + new Team( + "Alice", + new Project("King", new Team("Charlie", new Project("Delivery", (Team[]) null)))); assertThat(teamAdapter.toJson(team)) .isEqualTo( "{\"lead\":\"Alice\",\"projects\":[{\"name\":"