Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Dependency formatting output, new lines included? #822

Closed
jaredsburrows opened this issue Dec 20, 2023 · 12 comments
Closed

Dependency formatting output, new lines included? #822

jaredsburrows opened this issue Dec 20, 2023 · 12 comments

Comments

@jaredsburrows
Copy link
Collaborator

Looks like there are new lines brought in or added to some dependencies

Repro:

git clone https://github.com/jaredsburrows/android-gif-search
cd android-gif-search
gradlew dependencyUpdates

Example output:

Failed to determine the latest version for the following dependencies (use --info for details):
 - androidx.activity:activity-compose
 - androidx.activity:activity-ktx
 - androidx.annotation:annotation
 - androidx.appcompat:appcompat
 ...
 - com.google.dagger:hilt-android
     2.46.1
 - com.google.dagger:hilt-android-testing
     2.46.1

Based on https://repo1.maven.org/maven2/com/google/dagger/hilt-android/2.46.1/, you can view the POM file here: https://repo1.maven.org/maven2/com/google/dagger/hilt-android/2.46.1/hilt-android-2.46.1.pom.

There is no new lines or white space:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<script/>
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.sonatype.oss</groupId>
<artifactId>oss-parent</artifactId>
<version>7</version>
</parent>
<groupId>com.google.dagger</groupId>
<artifactId>hilt-android</artifactId>
<name>Hilt Android</name>
<version>2.46.1</version>
@ben-manes
Copy link
Owner

I'm not sure what you mean. I tried and did not observe any problems.

Do you mean the xml format's indent (#818) or maybe the Gradle / Android xml incompatibility (gradle/gradle#26672)?

remote: Enumerating objects: 11581, done.
remote: Counting objects: 100% (780/780), done.
remote: Compressing objects: 100% (343/343), done.
remote: Total 11581 (delta 382), reused 666 (delta 295), pack-reused 10801
Receiving objects: 100% (11581/11581), 2.04 MiB | 3.27 MiB/s, done.
Resolving deltas: 100% (4992/4992), done.projects cd android-gif-searchandroid-gif-search git:(master) gradlew dependencyUpdates
zsh: command not found: gradlewandroid-gif-search git:(master) ./gradlew dependencyUpdates
Downloading https://services.gradle.org/distributions/gradle-8.1.1-bin.zip
...........10%............20%............30%............40%............50%............60%............70%............80%...........90%............100%

Welcome to Gradle 8.1.1!

Here are the highlights of this release:
 - Stable configuration cache
 - Experimental Kotlin DSL assignment syntax
 - Building with Java 20

For more details see https://docs.gradle.org/8.1.1/release-notes.html

Starting a Gradle Daemon (subsequent builds will be faster)

> Configure project :test-shared
w: file:///Users/ben/projects/android-gif-search/test-shared/build.gradle.kts:66:11: 'constructor URL(String!)' is deprecated. Deprecated in Java

> Task :dependencyUpdates

------------------------------------------------------------
: Project Dependency Updates (report to plain text file)
------------------------------------------------------------

The following dependencies are using the latest milestone version:
 - androidx.appcompat:appcompat:1.6.1
 - androidx.startup:startup-runtime:1.1.1
 - androidx.test:annotation:1.0.1
 - androidx.test:core:1.5.0
 - androidx.test:orchestrator:1.4.2
 - androidx.test:rules:1.5.0
 - androidx.test:runner:1.5.2
 - androidx.test.ext:junit:1.1.5
 - com.getkeepsafe.dexcount:com.getkeepsafe.dexcount.gradle.plugin:4.0.0
 - com.github.bumptech.glide:glide:4.16.0
 - com.github.bumptech.glide:ksp:4.16.0
 - com.github.bumptech.glide:okhttp3-integration:4.16.0
 - com.google.accompanist:accompanist-drawablepainter:0.32.0
 - com.google.accompanist:accompanist-swiperefresh:0.32.0
 - com.google.accompanist:accompanist-webview:0.32.0
 - com.google.android.material:material:1.9.0
 - com.google.code.findbugs:jsr305:3.0.2
 - com.google.dagger:hilt-android:2.46.1
 - com.google.dagger:hilt-android-compiler:2.46.1
 - com.google.dagger:hilt-android-testing:2.46.1
 - com.google.dagger:hilt-compiler:2.46.1
 - com.jakewharton.timber:timber:5.0.1
 - com.jaredsburrows.license:com.jaredsburrows.license.gradle.plugin:0.9.3
 - com.nhaarman.mockitokotlin2:mockito-kotlin:2.2.0
 - com.squareup.leakcanary:leakcanary-android-instrumentation:2.12
 - com.squareup.leakcanary:leakcanary-android-startup:2.12
 - com.squareup.moshi:moshi:1.15.0
 - com.squareup.moshi:moshi-adapters:1.15.0
 - com.squareup.moshi:moshi-kotlin-codegen:1.15.0
 - com.squareup.okhttp3:logging-interceptor:4.12.0
 - com.squareup.okhttp3:mockwebserver:4.12.0
 - com.squareup.okhttp3:okhttp:4.12.0
 - com.squareup.okhttp3:okhttp-bom:4.12.0
 - com.squareup.retrofit2:converter-moshi:2.9.0
 - com.squareup.retrofit2:retrofit:2.9.0
 - junit:junit:4.13.2
 - org.glassfish:javax.annotation:10.0-b28
 - org.jetbrains.kotlin:kotlin-bom:1.8.22
 - org.jetbrains.kotlin:kotlin-compiler-embeddable:1.8.22
 - org.jetbrains.kotlin:kotlin-klib-commonizer-embeddable:1.8.22
 - org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.8.22
 - org.jetbrains.kotlinx:kotlinx-coroutines-android:1.7.3
 - org.jetbrains.kotlinx:kotlinx-coroutines-bom:1.7.3
 - org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.3
 - org.jetbrains.kotlinx:kotlinx-coroutines-jdk8:1.7.3
 - org.jetbrains.kotlinx:kotlinx-coroutines-test:1.7.3
 - org.mockito:mockito-inline:5.2.0

The following dependencies have later milestone versions:
 - androidx.activity:activity-compose [1.7.2 -> 1.8.2]
     https://developer.android.com/jetpack/androidx/releases/activity#1.7.2
 - androidx.activity:activity-ktx [1.7.2 -> 1.8.2]
     https://developer.android.com/jetpack/androidx/releases/activity#1.7.2
 - androidx.annotation:annotation [1.6.0 -> 1.7.1]
     https://developer.android.com/jetpack/androidx/releases/annotation#1.7.1
 - androidx.compose:compose-bom [2023.06.00 -> 2023.10.01]
     https://developer.android.com/jetpack
 - androidx.compose.compiler:compiler [1.4.7 -> 1.5.7]
     https://developer.android.com/jetpack/androidx/releases/compose-compiler#1.4.7
 - androidx.compose.material:material [1.4.3 -> 1.5.4]
     https://developer.android.com/jetpack/androidx/releases/compose-material#1.5.4
 - androidx.compose.material3:material3 [1.1.0 -> 1.1.2]
     https://developer.android.com/jetpack/androidx/releases/compose-material3#1.1.2
 - androidx.compose.runtime:runtime [1.4.3 -> 1.5.4]
     https://developer.android.com/jetpack/androidx/releases/compose-runtime#1.5.4
 - androidx.compose.ui:ui [1.4.3 -> 1.5.4]
     https://developer.android.com/jetpack/androidx/releases/compose-ui#1.5.4
 - androidx.compose.ui:ui-test-junit4 [1.4.3 -> 1.5.4]
     https://developer.android.com/jetpack/androidx/releases/compose-ui#1.5.4
 - androidx.compose.ui:ui-test-manifest [1.4.3 -> 1.5.4]
     https://developer.android.com/jetpack/androidx/releases/compose-ui#1.5.4
 - androidx.compose.ui:ui-tooling [1.4.3 -> 1.5.4]
     https://developer.android.com/jetpack/androidx/releases/compose-ui#1.5.4
 - androidx.compose.ui:ui-tooling-preview [1.4.3 -> 1.5.4]
     https://developer.android.com/jetpack/androidx/releases/compose-ui#1.5.4
 - androidx.core:core-ktx [1.10.1 -> 1.12.0]
     https://developer.android.com/jetpack/androidx/releases/core#1.12.0
 - androidx.hilt:hilt-navigation-compose [1.0.0 -> 1.1.0]
     https://developer.android.com/jetpack/androidx/releases/hilt#1.1.0
 - androidx.lifecycle:lifecycle-viewmodel-ktx [2.6.1 -> 2.6.2]
     https://developer.android.com/jetpack/androidx/releases/lifecycle#2.6.2
 - androidx.navigation:navigation-compose [2.6.0 -> 2.7.6]
     https://developer.android.com/jetpack/androidx/releases/navigation#2.6.0
 - androidx.webkit:webkit [1.7.0 -> 1.9.0]
     https://developer.android.com/jetpack/androidx/releases/webkit#1.7.0
 - com.android.application:com.android.application.gradle.plugin [8.0.0-rc01 -> 8.3.0-alpha18]
     https://developer.android.com/studio/build
 - com.android.library:com.android.library.gradle.plugin [8.0.0-rc01 -> 8.3.0-alpha18]
     https://developer.android.com/studio/build
 - com.android.tools:desugar_jdk_libs [2.0.3 -> 2.0.4]
     https://github.com/google/desugar_jdk_libs
 - com.github.ben-manes.versions:com.github.ben-manes.versions.gradle.plugin [0.49.0 -> 0.50.0]
 - com.github.skydoves:landscapist-animation [2.2.12 -> 2.2.13]
     https://github.com/skydoves/landscapist
 - com.github.skydoves:landscapist-glide [2.2.12 -> 2.2.13]
     https://github.com/skydoves/landscapist
 - com.github.skydoves:landscapist-palette [2.2.12 -> 2.2.13]
     https://github.com/skydoves/landscapist
 - com.github.triplet.play:com.github.triplet.play.gradle.plugin [3.8.4 -> 3.8.6]
 - com.google.dagger.hilt.android:com.google.dagger.hilt.android.gradle.plugin [2.46.1 -> 2.50]
     https://github.com/google/dagger
 - com.google.devtools.ksp:com.google.devtools.ksp.gradle.plugin [1.8.22-1.0.11 -> 1.9.21-1.0.16]
     https://goo.gle/ksp
 - com.google.devtools.ksp:symbol-processing [1.8.22-1.0.11 -> 1.9.21-1.0.16]
     https://goo.gle/ksp
 - com.google.devtools.ksp:symbol-processing-api [1.8.22-1.0.11 -> 1.9.21-1.0.16]
     https://goo.gle/ksp
 - com.google.devtools.ksp:symbol-processing-cmdline [1.8.22-1.0.11 -> 1.9.21-1.0.16]
     https://goo.gle/ksp
 - com.google.truth:truth [1.1.5 -> 1.2.0]
     http://github.com/google/truth
 - com.pinterest:ktlint [0.47.1 -> 0.51.0-FINAL]
     https://github.com/pinterest/ktlint
 - com.pinterest.ktlint:ktlint-reporter-baseline [0.47.1 -> 0.51.0-FINAL]
     https://github.com/pinterest/ktlint
 - com.pinterest.ktlint:ktlint-ruleset-standard [0.47.1 -> 1.1.0]
     https://github.com/pinterest/ktlint
 - com.squareup.okio:okio [3.6.0 -> 3.7.0]
     https://github.com/square/okio/
 - javax.annotation:jsr250-api [1.0 -> 1.0-20050927.133100]
     https://jax-ws.dev.java.net/
 - org.jetbrains.kotlin.android:org.jetbrains.kotlin.android.gradle.plugin [1.8.22 -> 1.9.21]
     https://kotlinlang.org/
 - org.jetbrains.kotlin.jvm:org.jetbrains.kotlin.jvm.gradle.plugin [1.8.22 -> 1.9.21]
     https://kotlinlang.org/
 - org.jlleitschuh.gradle.ktlint:org.jlleitschuh.gradle.ktlint.gradle.plugin [11.6.1 -> 12.0.3]
 - org.robolectric:annotations [4.10.3 -> 4.11.1]
     http://robolectric.org
 - org.robolectric:robolectric [4.10.3 -> 4.11.1]
     http://robolectric.org

Gradle release-candidate updates:
 - Gradle: [8.1.1 -> 8.5]

Generated report file build/dependencyUpdates/report.txt

BUILD SUCCESSFUL in 4m 26s
1 actionable task: 1 executed

Publishing build scan...
https://gradle.com/s/36lrnlqnshmuc

@jaredsburrows
Copy link
Collaborator Author

To help, I am trying to upgrade Gradle from 8.1.1 to 8.5.

Using Gradle 8.1.1 and Versions plugin 0.49.0, it works fine:

❯ gradlew dependencyUpdates
Configuration on demand is an incubating feature.

> Task :dependencyUpdates

------------------------------------------------------------
: Project Dependency Updates (report to plain text file)
------------------------------------------------------------

The following dependencies are using the latest milestone version:
 - androidx.activity:activity-compose:1.8.2
 - androidx.activity:activity-ktx:1.8.2
 - androidx.annotation:annotation:1.7.1
 - androidx.appcompat:appcompat:1.6.1
 - androidx.compose:compose-bom:2023.10.01
 - androidx.compose.material:material:1.5.4
 - androidx.compose.material3:material3:1.1.2
 - androidx.compose.runtime:runtime:1.5.4
 - androidx.compose.ui:ui:1.5.4
 - androidx.compose.ui:ui-test-junit4:1.5.4
 - androidx.compose.ui:ui-test-manifest:1.5.4
 - androidx.compose.ui:ui-tooling:1.5.4
 - androidx.compose.ui:ui-tooling-preview:1.5.4
 - androidx.core:core-ktx:1.12.0
 - androidx.hilt:hilt-navigation-compose:1.1.0
 - androidx.navigation:navigation-compose:2.7.6
 - androidx.startup:startup-runtime:1.1.1
 - androidx.test:annotation:1.0.1
 - androidx.test:core:1.5.0
 - androidx.test:orchestrator:1.4.2
 - androidx.test:rules:1.5.0
 - androidx.test:runner:1.5.2
 - androidx.test.ext:junit:1.1.5
 - androidx.webkit:webkit:1.9.0
 - com.android.tools:desugar_jdk_libs:2.0.4
 - com.getkeepsafe.dexcount:com.getkeepsafe.dexcount.gradle.plugin:4.0.0
 - com.github.ben-manes.versions:com.github.ben-manes.versions.gradle.plugin:0.50.0
 - com.github.bumptech.glide:glide:4.16.0
 - com.github.bumptech.glide:ksp:4.16.0
 - com.github.bumptech.glide:okhttp3-integration:4.16.0
 - com.github.triplet.play:com.github.triplet.play.gradle.plugin:3.8.6
 - com.google.accompanist:accompanist-drawablepainter:0.32.0
 - com.google.accompanist:accompanist-swiperefresh:0.32.0
 - com.google.accompanist:accompanist-webview:0.32.0
 - com.google.android.material:material:1.11.0
 - com.google.code.findbugs:jsr305:3.0.2
 - com.google.dagger:hilt-android:2.46.1
 - com.google.dagger:hilt-android-compiler:2.46.1
 - com.google.dagger:hilt-android-testing:2.46.1
 - com.google.dagger:hilt-compiler:2.46.1
 - com.google.truth:truth:1.2.0
 - com.jakewharton.timber:timber:5.0.1
 - com.jaredsburrows.license:com.jaredsburrows.license.gradle.plugin:0.9.3
 - com.nhaarman.mockitokotlin2:mockito-kotlin:2.2.0
 - com.squareup.leakcanary:leakcanary-android-instrumentation:2.12
 - com.squareup.leakcanary:leakcanary-android-startup:2.12
 - com.squareup.moshi:moshi:1.15.0
 - com.squareup.moshi:moshi-adapters:1.15.0
 - com.squareup.moshi:moshi-kotlin-codegen:1.15.0
 - com.squareup.okhttp3:logging-interceptor:4.12.0
 - com.squareup.okhttp3:mockwebserver:4.12.0
 - com.squareup.okhttp3:okhttp:4.12.0
 - com.squareup.okhttp3:okhttp-bom:4.12.0
 - com.squareup.okio:okio:3.7.0
 - com.squareup.retrofit2:converter-moshi:2.9.0
 - com.squareup.retrofit2:retrofit:2.9.0
 - io.github.detekt.sarif4k:sarif4k:0.5.0
 - junit:junit:4.13.2
 - org.glassfish:javax.annotation:10.0-b28
 - org.jetbrains.kotlin:kotlin-bom:1.8.22
 - org.jetbrains.kotlin:kotlin-compiler-embeddable:1.8.22
 - org.jetbrains.kotlin:kotlin-klib-commonizer-embeddable:1.8.22
 - org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.8.22
 - org.jetbrains.kotlinx:kotlinx-coroutines-android:1.7.3
 - org.jetbrains.kotlinx:kotlinx-coroutines-bom:1.7.3
 - org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.3
 - org.jetbrains.kotlinx:kotlinx-coroutines-jdk8:1.7.3
 - org.jetbrains.kotlinx:kotlinx-coroutines-test:1.7.3
 - org.jlleitschuh.gradle.ktlint:org.jlleitschuh.gradle.ktlint.gradle.plugin:12.0.3
 - org.mockito:mockito-inline:5.2.0
 - org.robolectric:annotations:4.11.1
 - org.robolectric:robolectric:4.11.1

The following dependencies have later milestone versions:
 - androidx.compose.compiler:compiler [1.4.7 -> 1.5.7]
     https://developer.android.com/jetpack/androidx/releases/compose-compiler#1.5.7
 - androidx.lifecycle:lifecycle-viewmodel-ktx [2.6.1 -> 2.6.2]
     https://developer.android.com/jetpack/androidx/releases/lifecycle#2.6.2
 - com.android.application:com.android.application.gradle.plugin [8.0.0-rc01 -> 8.3.0-alpha18]
     https://developer.android.com/studio/build
 - com.android.library:com.android.library.gradle.plugin [8.0.0-rc01 -> 8.3.0-alpha18]
     https://developer.android.com/studio/build
 - com.github.skydoves:landscapist-animation [2.2.12 -> 2.2.13]
     https://github.com/skydoves/landscapist
 - com.github.skydoves:landscapist-glide [2.2.12 -> 2.2.13]
     https://github.com/skydoves/landscapist
 - com.github.skydoves:landscapist-palette [2.2.12 -> 2.2.13]
     https://github.com/skydoves/landscapist
 - com.google.dagger.hilt.android:com.google.dagger.hilt.android.gradle.plugin [2.46.1 -> 2.50]
     https://github.com/google/dagger
 - com.google.devtools.ksp:com.google.devtools.ksp.gradle.plugin [1.8.22-1.0.11 -> 1.9.21-1.0.16]
     https://goo.gle/ksp
 - com.google.devtools.ksp:symbol-processing [1.8.22-1.0.11 -> 1.9.21-1.0.16]
     https://goo.gle/ksp
 - com.google.devtools.ksp:symbol-processing-api [1.8.22-1.0.11 -> 1.9.21-1.0.16]
     https://goo.gle/ksp
 - com.google.devtools.ksp:symbol-processing-cmdline [1.8.22-1.0.11 -> 1.9.21-1.0.16]
     https://goo.gle/ksp
 - com.pinterest.ktlint:ktlint-cli [1.0.1 -> 1.1.0]
     https://github.com/pinterest/ktlint
 - com.pinterest.ktlint:ktlint-cli-reporter-baseline [1.0.1 -> 1.1.0]
     https://github.com/pinterest/ktlint
 - com.pinterest.ktlint:ktlint-ruleset-standard [1.0.1 -> 1.1.0]
     https://github.com/pinterest/ktlint
 - io.github.oshai:kotlin-logging [5.1.0 -> 6.0.1]
     https://github.com/oshai/kotlin-logging
 - javax.annotation:jsr250-api [1.0 -> 1.0-20050927.133100]
     https://jax-ws.dev.java.net/
 - org.jetbrains.kotlin.android:org.jetbrains.kotlin.android.gradle.plugin [1.8.22 -> 1.9.21]
     https://kotlinlang.org/
 - org.jetbrains.kotlin.jvm:org.jetbrains.kotlin.jvm.gradle.plugin [1.8.22 -> 1.9.21]
     https://kotlinlang.org/

Gradle release-candidate updates:
 - Gradle: [8.1.1 -> 8.5]

Generated report file build/dependencyUpdates/report.txt

Deprecated Gradle features were used in this build, making it incompatible with Gradle 9.0.

You can use '--warning-mode all' to show the individual deprecation warnings and determine if they come from your own scripts or plugins.

See https://docs.gradle.org/8.1.1/userguide/command_line_interface.html#sec:command_line_warnings

BUILD SUCCESSFUL in 6s
1 actionable task: 1 executed

Publishing build scan...
https://gradle.com/s/wwiejiis4qqbq

With Gradle 8.5, it fails:

❯ gradlew dependencyUpdates
Configuration on demand is an incubating feature.
Internal error in Gradle Enterprise Gradle plugin: finished notification
com.gradle.scan.plugin.BuildScanException: Internal error in Gradle Enterprise Gradle plugin: finished notification
        at com.gradle.scan.plugin.BuildScanException.a(SourceFile:25)
        at com.gradle.scan.plugin.internal.operations.d.a(SourceFile:116)
        at com.gradle.scan.plugin.internal.operations.h.a(SourceFile:51)
        at com.gradle.scan.plugin.internal.r.a$a.a(SourceFile:31)
        at com.gradle.scan.plugin.internal.r.a$a.a(SourceFile:20)
        at com.gradle.scan.plugin.internal.r.a.c(SourceFile:67)
        at java.base@17.0.6/java.lang.Thread.run(Thread.java:833)
Caused by: java.lang.RuntimeException: Problems reading data from Binary store in /Users/<>/.gradle/.tmp/gradle9769773125808749359.bin offset 70039 exists? true
        at org.gradle.api.internal.artifacts.ivyservice.resolveengine.store.DefaultBinaryStore$SimpleBinaryData.read(DefaultBinaryStore.java:136)
        at org.gradle.api.internal.artifacts.ivyservice.resolveengine.result.StreamingResolutionResultBuilder$RootFactory.lambda$create$0(StreamingResolutionResultBuilder.java:184)
        at org.gradle.api.internal.artifacts.ivyservice.resolveengine.store.CachedStoreFactory$SimpleStore.load(CachedStoreFactory.java:101)
        at org.gradle.api.internal.artifacts.ivyservice.resolveengine.result.StreamingResolutionResultBuilder$RootFactory.create(StreamingResolutionResultBuilder.java:182)
        at org.gradle.api.internal.artifacts.result.DefaultResolutionResult.getRoot(DefaultResolutionResult.java:48)
        at org.gradle.api.internal.artifacts.configurations.ResolveConfigurationResolutionBuildOperationResult.getRootComponent(ResolveConfigurationResolutionBuildOperationResult.java:60)
        at java.base/java.util.Optional.map(Optional.java:260)
        at com.gradle.scan.plugin.internal.c.i.a.e$a.b(SourceFile:115)
        at com.gradle.scan.plugin.internal.c.i.a.e$a.a(SourceFile:72)
        at com.gradle.scan.plugin.internal.c.i.a.e.a(SourceFile:51)
        at com.gradle.scan.plugin.internal.c.i.a.d.a(SourceFile:181)
        at com.gradle.scan.plugin.internal.c.i.c.a(SourceFile:140)
        at com.gradle.scan.plugin.internal.operations.b$c.finished(SourceFile:154)
        at com.gradle.scan.plugin.internal.operations.b.a(SourceFile:65)
        at com.gradle.scan.plugin.internal.operations.n.a(SourceFile:56)
        at com.gradle.scan.plugin.internal.operations.d.a(SourceFile:114)
        ... 5 more
Caused by: java.lang.RuntimeException: Problems loading the resolution results (0.0 secs). Read 88 values, last was: 5
        at org.gradle.api.internal.artifacts.ivyservice.resolveengine.result.StreamingResolutionResultBuilder$RootFactory.deserialize(StreamingResolutionResultBuilder.java:239)
        at org.gradle.api.internal.artifacts.ivyservice.resolveengine.store.DefaultBinaryStore$SimpleBinaryData.read(DefaultBinaryStore.java:134)
        ... 20 more
Caused by: java.lang.IllegalStateException: Corrupt serialized resolution result. Cannot find selected component (7055) for constraint debugAndroidTestCompileClasspathCopy2 -> androidx.annotation:annotation:{strictly 1.7.1}
        at org.gradle.api.internal.artifacts.ivyservice.resolveengine.result.DefaultResolutionResultBuilder.visitOutgoingEdges(DefaultResolutionResultBuilder.java:125)
        at org.gradle.api.internal.artifacts.ivyservice.resolveengine.result.StreamingResolutionResultBuilder$RootFactory.deserialize(StreamingResolutionResultBuilder.java:231)
        ... 21 more

> Task :dependencyUpdates

------------------------------------------------------------
: Project Dependency Updates (report to plain text file)
------------------------------------------------------------

The following dependencies are using the latest milestone version:
 - com.google.dagger:hilt-android-compiler:2.46.1
 - com.google.dagger:hilt-compiler:2.46.1
 - org.jetbrains.kotlin:kotlin-bom:1.8.22
 - org.jetbrains.kotlin:kotlin-compiler-embeddable:1.8.22
 - org.jetbrains.kotlin:kotlin-klib-commonizer-embeddable:1.8.22
 - org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.8.22

Failed to determine the latest version for the following dependencies (use --info for details):
 - androidx.activity:activity-compose
 - androidx.activity:activity-ktx
 - androidx.annotation:annotation
 - androidx.appcompat:appcompat
 - androidx.compose:compose-bom
 - androidx.compose.compiler:compiler
 - androidx.compose.material:material
 - androidx.compose.material3:material3
 - androidx.compose.runtime:runtime
 - androidx.compose.ui:ui
 - androidx.compose.ui:ui-test-junit4
 - androidx.compose.ui:ui-test-manifest
 - androidx.compose.ui:ui-tooling
 - androidx.compose.ui:ui-tooling-preview
 - androidx.core:core-ktx
 - androidx.hilt:hilt-navigation-compose
 - androidx.lifecycle:lifecycle-viewmodel-ktx
 - androidx.navigation:navigation-compose
 - androidx.startup:startup-runtime
 - androidx.test:annotation
 - androidx.test:core
 - androidx.test:orchestrator
 - androidx.test:rules
 - androidx.test:runner
 - androidx.test.ext:junit
 - androidx.webkit:webkit
 - com.android.application:com.android.application.gradle.plugin
 - com.android.library:com.android.library.gradle.plugin
 - com.android.tools:desugar_jdk_libs
 - com.getkeepsafe.dexcount:com.getkeepsafe.dexcount.gradle.plugin
 - com.github.ben-manes.versions:com.github.ben-manes.versions.gradle.plugin
 - com.github.bumptech.glide:glide
 - com.github.bumptech.glide:ksp
 - com.github.bumptech.glide:okhttp3-integration
 - com.github.skydoves:landscapist-animation
 - com.github.skydoves:landscapist-glide
 - com.github.skydoves:landscapist-palette
 - com.github.triplet.play:com.github.triplet.play.gradle.plugin
 - com.google.accompanist:accompanist-drawablepainter
 - com.google.accompanist:accompanist-swiperefresh
 - com.google.accompanist:accompanist-webview
 - com.google.android.material:material
 - com.google.code.findbugs:jsr305
 - com.google.dagger:hilt-android
     2.46.1
 - com.google.dagger:hilt-android-testing
     2.46.1
 - com.google.dagger.hilt.android:com.google.dagger.hilt.android.gradle.plugin
 - com.google.devtools.ksp:com.google.devtools.ksp.gradle.plugin
 - com.google.devtools.ksp:symbol-processing
 - com.google.devtools.ksp:symbol-processing-api
 - com.google.devtools.ksp:symbol-processing-cmdline
 - com.google.truth:truth
 - com.jakewharton.timber:timber
 - com.jaredsburrows.license:com.jaredsburrows.license.gradle.plugin
 - com.nhaarman.mockitokotlin2:mockito-kotlin
 - com.pinterest.ktlint:ktlint-cli
 - com.pinterest.ktlint:ktlint-cli-reporter-baseline
 - com.pinterest.ktlint:ktlint-ruleset-standard
 - com.squareup.leakcanary:leakcanary-android-instrumentation
 - com.squareup.leakcanary:leakcanary-android-startup
 - com.squareup.moshi:moshi
 - com.squareup.moshi:moshi-adapters
 - com.squareup.moshi:moshi-kotlin-codegen
 - com.squareup.okhttp3:logging-interceptor
 - com.squareup.okhttp3:mockwebserver
 - com.squareup.okhttp3:okhttp
 - com.squareup.okhttp3:okhttp-bom
 - com.squareup.okio:okio
 - com.squareup.retrofit2:converter-moshi
 - com.squareup.retrofit2:retrofit
 - io.github.detekt.sarif4k:sarif4k
 - io.github.oshai:kotlin-logging
 - javax.annotation:jsr250-api
 - junit:junit
 - org.glassfish:javax.annotation
 - org.jetbrains.kotlin.android:org.jetbrains.kotlin.android.gradle.plugin
 - org.jetbrains.kotlin.jvm:org.jetbrains.kotlin.jvm.gradle.plugin
 - org.jetbrains.kotlinx:kotlinx-coroutines-android
 - org.jetbrains.kotlinx:kotlinx-coroutines-bom
 - org.jetbrains.kotlinx:kotlinx-coroutines-core
 - org.jetbrains.kotlinx:kotlinx-coroutines-jdk8
 - org.jetbrains.kotlinx:kotlinx-coroutines-test
 - org.jlleitschuh.gradle.ktlint:org.jlleitschuh.gradle.ktlint.gradle.plugin
 - org.mockito:mockito-inline
 - org.robolectric:annotations
 - org.robolectric:robolectric

Gradle release-candidate updates:
 - Gradle: [8.5: UP-TO-DATE]

Generated report file build/dependencyUpdates/report.txt

Deprecated Gradle features were used in this build, making it incompatible with Gradle 9.0.

You can use '--warning-mode all' to show the individual deprecation warnings and determine if they come from your own scripts or plugins.

For more on this, please refer to https://docs.gradle.org/8.5/userguide/command_line_interface.html#sec:command_line_warnings in the Gradle documentation.

BUILD SUCCESSFUL in 30s
1 actionable task: 1 executed

A build scan cannot be produced as an error occurred gathering build data.
Please report this problem via https://gradle.com/help/plugin and include the following via copy/paste:

----------
Gradle version: 8.5
Plugin version: 3.15.1

com.gradle.scan.plugin.internal.operations.a: Build operation dispatch of finished notification failed.
Operation context: 
        org.gradle.launcher.exec.RunAsBuildOperationBuildActionExecutor$1 (24184): {}
        org.gradle.execution.RunRootBuildWorkBuildOperationType$Details (29176): {getBuildStartTime=1703094265414}
        org.gradle.api.internal.tasks.execution.ExecuteTaskBuildOperationDetails (29178): {buildPath=:, taskPath=:dependencyUpdates, taskClass=com.github.benmanes.gradle.versions.updates.DependencyUpdatesTask, taskId=19}
        org.gradle.internal.execution.steps.ExecuteStep$1$1 (29182): {getIdentity=org.gradle.api.internal.tasks.execution.TaskExecution$$Lambda$2402/0x000000080178de88@3f982d8, getWorkType=class org.gradle.api.internal.tasks.execution.TaskExecution}
        org.gradle.api.internal.tasks.execution.ExecuteTaskActionBuildOperationType$1 (29183): {}
        org.gradle.api.internal.artifacts.configurations.ResolveConfigurationResolutionBuildOperationDetails (29487): {describe error: java.lang.IllegalAccessException: class com.gradle.scan.plugin.internal.operations.a cannot access a member of class org.gradle.api.internal.artifacts.configurations.ResolveConfigurationResolutionBuildOperationDetails with modifiers "public"}
Caused by: java.lang.RuntimeException: Problems reading data from Binary store in /Users/<>/.gradle/.tmp/gradle9769773125808749359.bin offset 70039 exists? true
        at org.gradle.api.internal.artifacts.ivyservice.resolveengine.store.DefaultBinaryStore$SimpleBinaryData.read(DefaultBinaryStore.java:136)
        at org.gradle.api.internal.artifacts.ivyservice.resolveengine.result.StreamingResolutionResultBuilder$RootFactory.lambda$create$0(StreamingResolutionResultBuilder.java:184)
        at org.gradle.api.internal.artifacts.ivyservice.resolveengine.store.CachedStoreFactory$SimpleStore.load(CachedStoreFactory.java:101)
        at org.gradle.api.internal.artifacts.ivyservice.resolveengine.result.StreamingResolutionResultBuilder$RootFactory.create(StreamingResolutionResultBuilder.java:182)
        at org.gradle.api.internal.artifacts.result.DefaultResolutionResult.getRoot(DefaultResolutionResult.java:48)
        at org.gradle.api.internal.artifacts.configurations.ResolveConfigurationResolutionBuildOperationResult.getRootComponent(ResolveConfigurationResolutionBuildOperationResult.java:60)
        at com.gradle.scan.plugin.internal.c.i.a.e$a.b(SourceFile:115)
        at com.gradle.scan.plugin.internal.c.i.a.e$a.a(SourceFile:72)
        at com.gradle.scan.plugin.internal.c.i.a.e.a(SourceFile:51)
        at com.gradle.scan.plugin.internal.c.i.a.d.a(SourceFile:181)
        at com.gradle.scan.plugin.internal.c.i.c.a(SourceFile:140)
        at com.gradle.scan.plugin.internal.operations.b$c.finished(SourceFile:154)
        at com.gradle.scan.plugin.internal.operations.b.a(SourceFile:65)
        at com.gradle.scan.plugin.internal.operations.n.a(SourceFile:56)
        at com.gradle.scan.plugin.internal.operations.d.a(SourceFile:114)
        at com.gradle.scan.plugin.internal.operations.h.a(SourceFile:51)
        at com.gradle.scan.plugin.internal.r.a$a.a(SourceFile:31)
        at com.gradle.scan.plugin.internal.r.a$a.a(SourceFile:20)
        at com.gradle.scan.plugin.internal.r.a.c(SourceFile:67)
Caused by: java.lang.RuntimeException: Problems loading the resolution results (0.0 secs). Read 88 values, last was: 5
        at org.gradle.api.internal.artifacts.ivyservice.resolveengine.result.StreamingResolutionResultBuilder$RootFactory.deserialize(StreamingResolutionResultBuilder.java:239)
        at org.gradle.api.internal.artifacts.ivyservice.resolveengine.store.DefaultBinaryStore$SimpleBinaryData.read(DefaultBinaryStore.java:134)
        ... 18 more
Caused by: java.lang.IllegalStateException: Corrupt serialized resolution result. Cannot find selected component (7055) for constraint debugAndroidTestCompileClasspathCopy2 -> androidx.annotation:annotation:{strictly 1.7.1}
        at org.gradle.api.internal.artifacts.ivyservice.resolveengine.result.DefaultResolutionResultBuilder.visitOutgoingEdges(DefaultResolutionResultBuilder.java:125)
        at org.gradle.api.internal.artifacts.ivyservice.resolveengine.result.StreamingResolutionResultBuilder$RootFactory.deserialize(StreamingResolutionResultBuilder.java:231)
        ... 19 more
----------

@ben-manes
Copy link
Owner

I think that is a Gradle bug. There's a random thread attached to an existing, unrelated issue where someone ran into that recently. It looked like a problem with a corrupt dependency graph and something you'd need to get the Gradle teams help on.

These issues are usually caused by corner cases in the dependency graph computation. That's why changing declaration order or adding / removing dependencies can make the problem go away.
Unfortunately, these issues are hard to track without an isolated reproducer.
-- gradle/gradle#14220

@jaredsburrows
Copy link
Collaborator Author

I think you are right. I was able to reproduce it for a while. I ended up reverting the changes and upgraded gradle, android gradle plugin and the versions plugin individually.

Gradle - 8.5
AGP - 8.2.0
Version plugin - 0.50.0

This passes now:

❯ gradlew wrapper && gradlew dependencyUpdates
Configuration on demand is an incubating feature.

Deprecated Gradle features were used in this build, making it incompatible with Gradle 9.0.

You can use '--warning-mode all' to show the individual deprecation warnings and determine if they come from your own scripts or plugins.

For more on this, please refer to https://docs.gradle.org/8.5/userguide/command_line_interface.html#sec:command_line_warnings in the Gradle documentation.

BUILD SUCCESSFUL in 393ms
1 actionable task: 1 up-to-date

Publishing build scan...
https://gradle.com/s/yaht6et3tuedu

Configuration on demand is an incubating feature.

> Task :dependencyUpdates

------------------------------------------------------------
: Project Dependency Updates (report to plain text file)
------------------------------------------------------------

The following dependencies are using the latest milestone version:
 - androidx.activity:activity-compose:1.8.2
 - androidx.activity:activity-ktx:1.8.2
 - androidx.annotation:annotation:1.7.1
 - androidx.appcompat:appcompat:1.6.1
 - androidx.compose:compose-bom:2023.10.01
 - androidx.compose.material:material:1.5.4
 - androidx.compose.material3:material3:1.1.2
 - androidx.compose.runtime:runtime:1.5.4
 - androidx.compose.ui:ui:1.5.4
 - androidx.compose.ui:ui-test-junit4:1.5.4
 - androidx.compose.ui:ui-test-manifest:1.5.4
 - androidx.compose.ui:ui-tooling:1.5.4
 - androidx.compose.ui:ui-tooling-preview:1.5.4
 - androidx.core:core-ktx:1.12.0
 - androidx.hilt:hilt-navigation-compose:1.1.0
 - androidx.lifecycle:lifecycle-viewmodel-ktx:2.6.2
 - androidx.navigation:navigation-compose:2.7.6
 - androidx.startup:startup-runtime:1.1.1
 - androidx.test:annotation:1.0.1
 - androidx.test:core:1.5.0
 - androidx.test:orchestrator:1.4.2
 - androidx.test:rules:1.5.0
 - androidx.test:runner:1.5.2
 - androidx.test.ext:junit:1.1.5
 - androidx.webkit:webkit:1.9.0
 - com.android.library:com.android.library.gradle.plugin:8.2.0
 - com.android.tools:desugar_jdk_libs:2.0.4
 - com.getkeepsafe.dexcount:com.getkeepsafe.dexcount.gradle.plugin:4.0.0
 - com.github.ben-manes.versions:com.github.ben-manes.versions.gradle.plugin:0.50.0
 - com.github.bumptech.glide:glide:4.16.0
 - com.github.bumptech.glide:ksp:4.16.0
 - com.github.bumptech.glide:okhttp3-integration:4.16.0
 - com.github.skydoves:landscapist-animation:2.2.13
 - com.github.skydoves:landscapist-glide:2.2.13
 - com.github.skydoves:landscapist-palette:2.2.13
 - com.github.triplet.play:com.github.triplet.play.gradle.plugin:3.8.6
 - com.google.accompanist:accompanist-drawablepainter:0.32.0
 - com.google.accompanist:accompanist-swiperefresh:0.32.0
 - com.google.accompanist:accompanist-webview:0.32.0
 - com.google.android.material:material:1.11.0
 - com.google.code.findbugs:jsr305:3.0.2
 - com.google.dagger:hilt-android-compiler:2.46.1
 - com.google.dagger:hilt-compiler:2.46.1
 - com.google.truth:truth:1.2.0
 - com.jakewharton.timber:timber:5.0.1
 - com.jaredsburrows.license:com.jaredsburrows.license.gradle.plugin:0.9.3
 - com.nhaarman.mockitokotlin2:mockito-kotlin:2.2.0
 - com.squareup.leakcanary:leakcanary-android-instrumentation:2.12
 - com.squareup.leakcanary:leakcanary-android-startup:2.12
 - com.squareup.moshi:moshi:1.15.0
 - com.squareup.moshi:moshi-adapters:1.15.0
 - com.squareup.moshi:moshi-kotlin-codegen:1.15.0
 - com.squareup.okhttp3:logging-interceptor:4.12.0
 - com.squareup.okhttp3:mockwebserver:4.12.0
 - com.squareup.okhttp3:okhttp:4.12.0
 - com.squareup.okhttp3:okhttp-bom:4.12.0
 - com.squareup.okio:okio:3.7.0
 - com.squareup.retrofit2:converter-moshi:2.9.0
 - com.squareup.retrofit2:retrofit:2.9.0
 - io.github.detekt.sarif4k:sarif4k:0.5.0
 - junit:junit:4.13.2
 - org.glassfish:javax.annotation:10.0-b28
 - org.jetbrains.kotlin:kotlin-bom:1.8.22
 - org.jetbrains.kotlin:kotlin-compiler-embeddable:1.8.22
 - org.jetbrains.kotlin:kotlin-klib-commonizer-embeddable:1.8.22
 - org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.8.22
 - org.jetbrains.kotlinx:kotlinx-coroutines-android:1.7.3
 - org.jetbrains.kotlinx:kotlinx-coroutines-bom:1.7.3
 - org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.3
 - org.jetbrains.kotlinx:kotlinx-coroutines-jdk8:1.7.3
 - org.jetbrains.kotlinx:kotlinx-coroutines-test:1.7.3
 - org.jlleitschuh.gradle.ktlint:org.jlleitschuh.gradle.ktlint.gradle.plugin:12.0.3
 - org.mockito:mockito-inline:5.2.0
 - org.robolectric:annotations:4.11.1
 - org.robolectric:robolectric:4.11.1

The following dependencies have later milestone versions:
 - androidx.compose.compiler:compiler [1.4.7 -> 1.5.7]
     https://developer.android.com/jetpack/androidx/releases/compose-compiler#1.4.7
 - com.android.application:com.android.application.gradle.plugin [8.2.0 -> 8.3.0-alpha18]
     https://developer.android.com/studio/build
 - com.google.dagger.hilt.android:com.google.dagger.hilt.android.gradle.plugin [2.46.1 -> 2.50]
     https://github.com/google/dagger
 - com.google.devtools.ksp:com.google.devtools.ksp.gradle.plugin [1.8.22-1.0.11 -> 1.9.21-1.0.16]
     https://goo.gle/ksp
 - com.google.devtools.ksp:symbol-processing [1.8.22-1.0.11 -> 1.9.21-1.0.16]
     https://goo.gle/ksp
 - com.google.devtools.ksp:symbol-processing-api [1.8.22-1.0.11 -> 1.9.21-1.0.16]
     https://goo.gle/ksp
 - com.google.devtools.ksp:symbol-processing-cmdline [1.8.22-1.0.11 -> 1.9.21-1.0.16]
     https://goo.gle/ksp
 - com.pinterest.ktlint:ktlint-cli [1.0.1 -> 1.1.0]
     https://github.com/pinterest/ktlint
 - com.pinterest.ktlint:ktlint-cli-reporter-baseline [1.0.1 -> 1.1.0]
     https://github.com/pinterest/ktlint
 - com.pinterest.ktlint:ktlint-ruleset-standard [1.0.1 -> 1.1.0]
     https://github.com/pinterest/ktlint
 - io.github.oshai:kotlin-logging [5.1.0 -> 6.0.1]
     https://github.com/oshai/kotlin-logging
 - javax.annotation:jsr250-api [1.0 -> 1.0-20050927.133100]
     https://jax-ws.dev.java.net/
 - org.jetbrains.kotlin.android:org.jetbrains.kotlin.android.gradle.plugin [1.8.22 -> 1.9.21]
     https://kotlinlang.org/
 - org.jetbrains.kotlin.jvm:org.jetbrains.kotlin.jvm.gradle.plugin [1.8.22 -> 1.9.21]
     https://kotlinlang.org/

Failed to determine the latest version for the following dependencies (use --info for details):
 - com.google.dagger:hilt-android
     2.46.1
 - com.google.dagger:hilt-android-testing
     2.46.1

Gradle release-candidate updates:
 - Gradle: [8.5: UP-TO-DATE]

Generated report file build/dependencyUpdates/report.txt

Deprecated Gradle features were used in this build, making it incompatible with Gradle 9.0.

You can use '--warning-mode all' to show the individual deprecation warnings and determine if they come from your own scripts or plugins.

For more on this, please refer to https://docs.gradle.org/8.5/userguide/command_line_interface.html#sec:command_line_warnings in the Gradle documentation.

BUILD SUCCESSFUL in 1s
1 actionable task: 1 executed

Publishing build scan...
https://gradle.com/s/simj4k3oafmxa

But is this a concern?

Failed to determine the latest version for the following dependencies (use --info for details):
 - com.google.dagger:hilt-android
     2.46.1
 - com.google.dagger:hilt-android-testing
     2.46.1

Should it be?

Failed to determine the latest version for the following dependencies (use --info for details):
 - com.google.dagger:hilt-android:2.46.1
 - com.google.dagger:hilt-android-testing:2.46.1

@ben-manes
Copy link
Owner

I suppose we should trim it before printing, for whatever reason.

For me I got that binary error as you described and then applied the gradle.properties xml overrides and it went away. Maybe they are hitting their own SAX security exception, since the older Android plugins bring in an incompatible xml library (xerces).

I didn't get that hilt-android error when trying to reproduce though

 - com.google.dagger:hilt-android [2.46.1 -> 2.50]
     https://github.com/google/dagger
 - com.google.dagger:hilt-android-testing [2.46.1 -> 2.50]
     https://github.com/google/dagger

@jaredsburrows
Copy link
Collaborator Author

jaredsburrows commented Dec 20, 2023

I ran with --info, I am getting the SAX error, why aren't you?

Caused by: org.xml.sax.SAXNotRecognizedException: Property 'http://javax.xml.XMLConstants/property/accessExternalSchema' is not recognized.
        at org.apache.xerces.parsers.AbstractSAXParser.getProperty(Unknown Source)
        at org.apache.xerces.jaxp.SAXParserImpl$JAXPSAXParser.setProperty(Unknown Source)
        at org.apache.ivy.util.XMLHelper.newSAXParser(XMLHelper.java:92)
        at org.apache.ivy.util.XMLHelper.parse(XMLHelper.java:170)
        at org.apache.ivy.util.XMLHelper.parse(XMLHelper.java:149)
        at org.apache.ivy.util.XMLHelper.parse(XMLHelper.java:144)
        at org.apache.ivy.util.XMLHelper.parse(XMLHelper.java:138)
        at org.gradle.api.internal.artifacts.repositories.maven.MavenMetadataLoader$2.doExecute(MavenMetadataLoader.java:77)
        at org.gradle.api.internal.artifacts.repositories.maven.MavenMetadataLoader$2.doExecute(MavenMetadataLoader.java:74)
        at org.gradle.internal.ErroringAction.execute(ErroringAction.java:36)
        ... 195 more

@ben-manes
Copy link
Owner

I had those gradle properties set and reverted it, maybe the daemon remembered them. Can you add that workaround?

@jaredsburrows
Copy link
Collaborator Author

Sorry, which gradle properties? My home gradle.properties is very basic.

@ben-manes
Copy link
Owner

Gradle 8.4 is incompatible with xml dependencies and breaks things randomly. I found a workaround, gradle/gradle#26672, so you can add this to your props and it will force the JDK's to be used.

systemProp.javax.xml.parsers.SAXParserFactory=com.sun.org.apache.xerces.internal.jaxp.SAXParserFactoryImpl
systemProp.javax.xml.transform.TransformerFactory=com.sun.org.apache.xalan.internal.xsltc.trax.TransformerFactoryImpl
systemProp.javax.xml.parsers.DocumentBuilderFactory=com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderFactoryImpl

@jaredsburrows
Copy link
Collaborator Author

@ben-manes Thanks. That does work.

For this issue, we want to change the output of those versions being on new lines or close this?

@ben-manes
Copy link
Owner

I think we can close and, if worth the brain cells, you're welcome to open a new one so we can avoid this noise. I agree it would look nicer to fix that styling but I think most users are focused on the error so making it prettier isn't really a concern for them 😄

@johnjohndoe
Copy link
Contributor

Same issue in my Android project: Failed to determine the latest version for the following dependencies. This is my configuration:

  • Gradle wrapper 8.5
  • Android Gradle Plugin 8.2.2
  • JDK 17
  • Gradle Versions Plugin 50

Once, I add the systemProp to the root gradle.properties then the report outputs versions.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants