From 8fa9d0c0fa207d84cc353fed9c6757fefa087ad7 Mon Sep 17 00:00:00 2001 From: Miguel Juarez Lopez Date: Sat, 24 Aug 2024 16:44:30 -0400 Subject: [PATCH 1/7] [CI][ANDR] Use Gradle plugin to guard against including non-permitted licenses --- platform/jvm/allowed-licenses.json | 23 +++++++++++++++++++ platform/jvm/buildSrc/build.gradle.kts | 14 +++++++++++ .../dependency-license-config.gradle.kts | 13 +++++++++++ platform/jvm/capture-apollo3/build.gradle.kts | 2 ++ platform/jvm/capture-timber/build.gradle.kts | 2 ++ platform/jvm/capture/build.gradle.kts | 6 +++-- platform/jvm/common/build.gradle.kts | 2 ++ platform/jvm/gradle/libs.versions.toml | 2 +- platform/jvm/replay/build.gradle.kts | 5 ++-- 9 files changed, 64 insertions(+), 5 deletions(-) create mode 100644 platform/jvm/allowed-licenses.json create mode 100644 platform/jvm/buildSrc/build.gradle.kts create mode 100644 platform/jvm/buildSrc/src/main/kotlin/dependency-license-config.gradle.kts diff --git a/platform/jvm/allowed-licenses.json b/platform/jvm/allowed-licenses.json new file mode 100644 index 000000000..4912dd967 --- /dev/null +++ b/platform/jvm/allowed-licenses.json @@ -0,0 +1,23 @@ +{ + "allowedLicenses": [ + { + "moduleLicense": "Apache-2.0" + }, + { + "moduleLicense": "MIT" + }, + { + "moduleLicense": "ISC License" + }, + { + "moduleLicense": null, + "moduleVersion": "unspecified", + "moduleName": "capture-sdk:common" + }, + { + "moduleLicense": null, + "moduleVersion": "unspecified", + "moduleName": "capture-sdk:replay" + } + ] +} \ No newline at end of file diff --git a/platform/jvm/buildSrc/build.gradle.kts b/platform/jvm/buildSrc/build.gradle.kts new file mode 100644 index 000000000..38fc94bb3 --- /dev/null +++ b/platform/jvm/buildSrc/build.gradle.kts @@ -0,0 +1,14 @@ +plugins { + `kotlin-dsl` +} + +repositories { + mavenCentral() + maven("https://plugins.gradle.org/m2/") +} + +dependencies { + // Pulls in dependencies to be used across shared configurations via files in src/main/kotlin + // using precompiled script convention plugins: https://docs.gradle.org/current/userguide/sharing_build_logic_between_subprojects.html + implementation("com.github.jk1:gradle-license-report:2.9") +} diff --git a/platform/jvm/buildSrc/src/main/kotlin/dependency-license-config.gradle.kts b/platform/jvm/buildSrc/src/main/kotlin/dependency-license-config.gradle.kts new file mode 100644 index 000000000..1f4d53d89 --- /dev/null +++ b/platform/jvm/buildSrc/src/main/kotlin/dependency-license-config.gradle.kts @@ -0,0 +1,13 @@ +import com.github.jk1.license.filter.SpdxLicenseBundleNormalizer +import com.github.jk1.license.render.JsonReportRenderer + +plugins { + id("com.github.jk1.dependency-license-report") +} + +licenseReport { + configurations = arrayOf("releaseRuntimeClasspath") + allowedLicensesFile = project.rootProject.file("allowed-licenses.json") + renderers = arrayOf(JsonReportRenderer()) + filters = arrayOf(SpdxLicenseBundleNormalizer()) +} diff --git a/platform/jvm/capture-apollo3/build.gradle.kts b/platform/jvm/capture-apollo3/build.gradle.kts index a7133fb49..5f72883da 100644 --- a/platform/jvm/capture-apollo3/build.gradle.kts +++ b/platform/jvm/capture-apollo3/build.gradle.kts @@ -2,6 +2,8 @@ plugins { alias(libs.plugins.android.library) alias(libs.plugins.kotlin.android) alias(libs.plugins.detekt) + + id("dependency-license-config") } group = "io.bitdrift" diff --git a/platform/jvm/capture-timber/build.gradle.kts b/platform/jvm/capture-timber/build.gradle.kts index 8f1dcec0d..6fd02c774 100644 --- a/platform/jvm/capture-timber/build.gradle.kts +++ b/platform/jvm/capture-timber/build.gradle.kts @@ -6,6 +6,8 @@ plugins { // Publish alias(libs.plugins.dokka) // Must be applied here for publish plugin. alias(libs.plugins.maven.publish) + + id("dependency-license-config") } group = "io.bitdrift" diff --git a/platform/jvm/capture/build.gradle.kts b/platform/jvm/capture/build.gradle.kts index cf9041316..4429c3ce3 100644 --- a/platform/jvm/capture/build.gradle.kts +++ b/platform/jvm/capture/build.gradle.kts @@ -7,22 +7,24 @@ plugins { // Publish alias(libs.plugins.dokka) // Must be applied here for publish plugin. alias(libs.plugins.maven.publish) + + id("dependency-license-config") } group = "io.bitdrift" dependencies { - api(project(":replay")) + api(project(path = ":replay", configuration = "default")) api(libs.androidx.lifecycle.common) api(libs.androidx.lifecycle.process) api(libs.kotlin.result.jvm) api(libs.okhttp) + implementation(project(path = ":common", configuration = "default")) implementation(libs.androidx.core) implementation(libs.androidx.startup.runtime) implementation(libs.jsr305) implementation(libs.gson) - implementation("androidx.tracing:tracing-ktx:1.2.0") testImplementation(libs.junit) testImplementation(libs.assertj.core) diff --git a/platform/jvm/common/build.gradle.kts b/platform/jvm/common/build.gradle.kts index cfb59d21e..aec7e2bb8 100644 --- a/platform/jvm/common/build.gradle.kts +++ b/platform/jvm/common/build.gradle.kts @@ -1,6 +1,8 @@ plugins { alias(libs.plugins.android.library) alias(libs.plugins.kotlin.android) + + id("dependency-license-config") } android { diff --git a/platform/jvm/gradle/libs.versions.toml b/platform/jvm/gradle/libs.versions.toml index 8b4002200..9e8a5d227 100644 --- a/platform/jvm/gradle/libs.versions.toml +++ b/platform/jvm/gradle/libs.versions.toml @@ -60,4 +60,4 @@ detekt = { id = "io.gitlab.arturbosch.detekt", version.ref = "detektPlugin" } dokka = { id = "org.jetbrains.dokka", version.ref = "dokkaPlugin"} maven-publish = { id = "com.vanniktech.maven.publish", version.ref = "mavenPublishPlugin"} kotlin-android = { id = "org.jetbrains.kotlin.android", version.ref = "kotlinAndroidPlugin" } -rust-android = { id = "org.mozilla.rust-android-gradle.rust-android", version.ref = "rustAndroidPlugin"} +rust-android = { id = "org.mozilla.rust-android-gradle.rust-android", version.ref = "rustAndroidPlugin"} \ No newline at end of file diff --git a/platform/jvm/replay/build.gradle.kts b/platform/jvm/replay/build.gradle.kts index 1c16d3cfc..42932b7ee 100644 --- a/platform/jvm/replay/build.gradle.kts +++ b/platform/jvm/replay/build.gradle.kts @@ -1,11 +1,12 @@ plugins { alias(libs.plugins.android.library) alias(libs.plugins.kotlin.android) + + id("dependency-license-config") } dependencies { - api(project(":common")) - + implementation(project(":common")) implementation(libs.androidx.appcompat) implementation(libs.androidx.ui) implementation(libs.okhttp) From 2630f8bec2a042d330516d0e8aab29db06c5067a Mon Sep 17 00:00:00 2001 From: Miguel Juarez Lopez Date: Sat, 24 Aug 2024 16:49:55 -0400 Subject: [PATCH 2/7] add blank space to format --- platform/jvm/gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/platform/jvm/gradle/libs.versions.toml b/platform/jvm/gradle/libs.versions.toml index 9e8a5d227..8b4002200 100644 --- a/platform/jvm/gradle/libs.versions.toml +++ b/platform/jvm/gradle/libs.versions.toml @@ -60,4 +60,4 @@ detekt = { id = "io.gitlab.arturbosch.detekt", version.ref = "detektPlugin" } dokka = { id = "org.jetbrains.dokka", version.ref = "dokkaPlugin"} maven-publish = { id = "com.vanniktech.maven.publish", version.ref = "mavenPublishPlugin"} kotlin-android = { id = "org.jetbrains.kotlin.android", version.ref = "kotlinAndroidPlugin" } -rust-android = { id = "org.mozilla.rust-android-gradle.rust-android", version.ref = "rustAndroidPlugin"} \ No newline at end of file +rust-android = { id = "org.mozilla.rust-android-gradle.rust-android", version.ref = "rustAndroidPlugin"} From 6479f29cc50cba0005383917cea73d55430b3558 Mon Sep 17 00:00:00 2001 From: Miguel Juarez Lopez Date: Sat, 24 Aug 2024 16:52:21 -0400 Subject: [PATCH 3/7] Add checkLicenses to CI --- .github/workflows/android.yaml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/workflows/android.yaml b/.github/workflows/android.yaml index 27a8aafc9..af0c42455 100644 --- a/.github/workflows/android.yaml +++ b/.github/workflows/android.yaml @@ -96,6 +96,9 @@ jobs: - name: Gradle capture-timber unit tests working-directory: ./platform/jvm run: ./gradlew capture-timber:testReleaseUnitTest --info + - name: Check Licenses for all Modules + working-directory: ./platform/jvm + run: ./gradlew checkLicense --info - name: Instrumentation Tests uses: reactivecircus/android-emulator-runner@f0d1ed2dcad93c7479e8b2f2226c83af54494915 # pin@v2.32 with: From 598990298e9ae3349714395b66bae6611386e4d7 Mon Sep 17 00:00:00 2001 From: Miguel Juarez Lopez Date: Sat, 24 Aug 2024 16:53:39 -0400 Subject: [PATCH 4/7] Tmp commit to test CI failure --- platform/jvm/allowed-licenses.json | 3 --- 1 file changed, 3 deletions(-) diff --git a/platform/jvm/allowed-licenses.json b/platform/jvm/allowed-licenses.json index 4912dd967..cc9b2690f 100644 --- a/platform/jvm/allowed-licenses.json +++ b/platform/jvm/allowed-licenses.json @@ -6,9 +6,6 @@ { "moduleLicense": "MIT" }, - { - "moduleLicense": "ISC License" - }, { "moduleLicense": null, "moduleVersion": "unspecified", From 54f60ffe647e6bd551f52de5185d9d80f99f5990 Mon Sep 17 00:00:00 2001 From: Miguel Juarez Lopez Date: Mon, 26 Aug 2024 15:31:48 -0400 Subject: [PATCH 5/7] Re-add the ISC license required by the :capture module --- platform/jvm/allowed-licenses.json | 3 +++ platform/jvm/capture/build.gradle.kts | 4 ++-- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/platform/jvm/allowed-licenses.json b/platform/jvm/allowed-licenses.json index cc9b2690f..dbcd45464 100644 --- a/platform/jvm/allowed-licenses.json +++ b/platform/jvm/allowed-licenses.json @@ -6,6 +6,9 @@ { "moduleLicense": "MIT" }, + { + "moduleLicense": "ISC License", + }, { "moduleLicense": null, "moduleVersion": "unspecified", diff --git a/platform/jvm/capture/build.gradle.kts b/platform/jvm/capture/build.gradle.kts index 4429c3ce3..97c39a168 100644 --- a/platform/jvm/capture/build.gradle.kts +++ b/platform/jvm/capture/build.gradle.kts @@ -14,13 +14,13 @@ plugins { group = "io.bitdrift" dependencies { - api(project(path = ":replay", configuration = "default")) + api(project(":replay")) api(libs.androidx.lifecycle.common) api(libs.androidx.lifecycle.process) api(libs.kotlin.result.jvm) api(libs.okhttp) - implementation(project(path = ":common", configuration = "default")) + implementation(project(":common")) implementation(libs.androidx.core) implementation(libs.androidx.startup.runtime) implementation(libs.jsr305) From bbf4c11c4462acc60764be23955a22fb192fff8d Mon Sep 17 00:00:00 2001 From: Miguel Juarez Lopez Date: Mon, 26 Aug 2024 15:42:40 -0400 Subject: [PATCH 6/7] only enable working modules for now --- .github/workflows/android.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/android.yaml b/.github/workflows/android.yaml index af0c42455..b0046814c 100644 --- a/.github/workflows/android.yaml +++ b/.github/workflows/android.yaml @@ -96,9 +96,9 @@ jobs: - name: Gradle capture-timber unit tests working-directory: ./platform/jvm run: ./gradlew capture-timber:testReleaseUnitTest --info - - name: Check Licenses for all Modules + - name: Check Licenses for modules working-directory: ./platform/jvm - run: ./gradlew checkLicense --info + run: ./gradlew replay:checkLicense common:checkLicense # capture:checkLicense doesn't work at the moment - name: Instrumentation Tests uses: reactivecircus/android-emulator-runner@f0d1ed2dcad93c7479e8b2f2226c83af54494915 # pin@v2.32 with: From c96d7dbc0e62b5b0133ffb65953513c8b8b5dd75 Mon Sep 17 00:00:00 2001 From: Miguel Juarez Lopez Date: Mon, 26 Aug 2024 16:01:49 -0400 Subject: [PATCH 7/7] Add :common module to tests via androidTestImplementation --- platform/jvm/gradle-test-app/build.gradle.kts | 1 + 1 file changed, 1 insertion(+) diff --git a/platform/jvm/gradle-test-app/build.gradle.kts b/platform/jvm/gradle-test-app/build.gradle.kts index 978c18b0a..f76a707f5 100644 --- a/platform/jvm/gradle-test-app/build.gradle.kts +++ b/platform/jvm/gradle-test-app/build.gradle.kts @@ -25,6 +25,7 @@ dependencies { testImplementation("junit:junit:4.13.2") + androidTestImplementation(project(":common")) androidTestImplementation("com.google.truth:truth:1.1.4") androidTestImplementation("androidx.test:core:1.5.0") androidTestImplementation("androidx.test:core-ktx:1.5.0")