RefreshVersions Versions Save

Life is too short to google for dependencies and versions

v0.60.5

3 months ago

Version 0.60.5 (2024-02-05)

New dependency notation

  • AndroidX.wear.watchFace.complications.data

Other change

Change the version key of all watchface complication dependencies to be centralized.

v0.60.4

3 months ago

Version 0.60.4 (2024-01-31)

Potentially breaking change

We now support only Gradle 8+. Use Gradle 8+ or stick to version 0.60.3 if you can't yet.

Bug fix

Update the priority of artifact version key rules so that the longest match takes precedence, rather than the final key length. That should fix the keys of androidx.wear.compose libraries.

v0.60.3

7 months ago

Version 0.60.3 (2023-09-27)

Bug fix

Fix a bug where version keys would be marked as unused in some projects.

New dependency notations

Click to expand (18)
  • AndroidX.bluetooth
  • AndroidX.bluetooth.testing

v0.60.2

8 months ago

Version 0.60.2 (2023-08-29)

Bug fix

Some version keys were wrongly marked as unused following version 0.60.0. That's now fixed. Thanks to the reporters and people that helped in reproducing the issue!

Removed dependency notations

Several Accompanist libraries were deprecated following this announcement. As a result, we updated removed them from refreshVersions. As usual, it won't break projects because we update the dependency notations with the equivalent string literal. Also, relevant inline comments with links will be added to assist migration.

New dependency notations

Click to expand (18)
  • AndroidX.core.performance.playServices
  • AndroidX.core.performance.testing
  • CashApp.sqlDelight.drivers.android
  • CashApp.sqlDelight.extensions.androidPaging3
  • CashApp.sqlDelight.extensions.coroutines
  • CashApp.sqlDelight.gradlePlugin
  • CashApp.sqlDelight.dialects.hSql
  • CashApp.sqlDelight.drivers.jdbc
  • CashApp.sqlDelight.dialects.mySql
  • CashApp.sqlDelight.drivers.native
  • CashApp.sqlDelight.dialects.postgreSql
  • CashApp.sqlDelight.extensions.rxJava2
  • CashApp.sqlDelight.extensions.rxJava3
  • CashApp.sqlDelight.drivers.jdbcSqlite
  • CashApp.sqlDelight.drivers.sqlJs
  • CashApp.sqlDelight.drivers.webWorker
  • Google.accompanist.adaptive
  • Google.accompanist.testHarness

v0.60.1

8 months ago

Version 0.60.1 (2023-08-24)

Bug fix

  • Fix crash on projects that had no version catalog.

New dependency notations:

Click to expand (25)
  • Google.android.play.appUpdateKtx
  • Google.android.play.appUpdate
  • Google.android.play.assetDeliveryKtx
  • Google.android.play.assetDelivery
  • Google.android.play.featureDeliveryKtx
  • Google.android.play.featureDelivery
  • Google.android.play.reviewKtx
  • Google.android.play.review
  • Google.horologist.annotations
  • Google.horologist.auth.composables
  • Google.horologist.auth.data.phone
  • Google.horologist.auth.data.watchOAuth
  • Google.horologist.auth.data
  • Google.horologist.auth.ui
  • Google.horologist.compose.material
  • Google.horologist.dataLayer.grpc
  • Google.horologist.dataLayer.phone
  • Google.horologist.dataLayer.watch
  • Google.horologist.healthComposables
  • Google.horologist.media3.audioOffload
  • Google.horologist.media3.logging
  • Google.horologist.media3.outputSwitcher
  • Google.horologist.networkAwareness.db
  • Google.horologist.networkAwareness.okHttp
  • Google.horologist.networkAwareness.ui

v0.60.0

8 months ago

Version 0.60.0 (2023-08-17)

Full configuration cache support for the refreshVersions task

Now, running the refreshVersions task repeatedly will be much faster, because it now supports configuration cache fully! That also means that it's ready for Gradle 9 when it'll be released.

Bug fixes

  • Fix "The root project is not yet available for build." error that would show up when using configuration cache in a project having refreshVersions configured for the buildSrc too.
  • For projects using refreshVersions in their buildSrc too, a log would claim that new files were created after running the refreshVersions task, when they were only modified, or not touched at all. We fixed it.
  • When no files were modified after running the refreshVersions task, there would still be a log saying that versions.properties and libs.versions.toml (if any) were updated or created. Now, it's only shown if there are actual changes.
  • When running the refreshVersions task, it would always claim that some versions were hardcoded as it counted project dependencies. We are now filtering those out, and we updated the wording to reflect that they might not be actually hardcoded, as is the case when versions come from a Gradle plugin.
  • Fix alignment of available update for versions catalogs for keys that are 3 characters long.

New dependency notations:

Click to expand (57)
  • AndroidX.appSearch.debugView
  • AndroidX.appSearch.ktx
  • AndroidX.benchmark.baselineProfileGradlePlugin
  • AndroidX.camera.viewFinder
  • AndroidX.core.i18n
  • AndroidX.core.locationAltitude
  • AndroidX.core.telecom
  • AndroidX.core.testing
  • AndroidX.credentials.playServicesAuth
  • AndroidX.credentials
  • AndroidX.emoji2.picker
  • AndroidX.glance.material3
  • AndroidX.glance.material
  • AndroidX.graphics.path
  • AndroidX.graphics.shapes
  • AndroidX.media3.container
  • AndroidX.media3.effect
  • AndroidX.media3.muxer
  • AndroidX.mediaRouter.testing
  • AndroidX.privacySandbox.plugins.library
  • AndroidX.privacySandbox.sdkRuntime.client
  • AndroidX.privacySandbox.sdkRuntime.core
  • AndroidX.privacySandbox.tools.apiCompiler
  • AndroidX.privacySandbox.tools.apiGenerator
  • AndroidX.privacySandbox.tools.apiPackager
  • AndroidX.privacySandbox.tools.core
  • AndroidX.privacySandbox.tools
  • AndroidX.privacySandbox.ui.client
  • AndroidX.privacySandbox.ui.core
  • AndroidX.privacySandbox.ui.provider
  • AndroidX.room.gradlePlugin
  • AndroidX.tracing.perfetto.handshake
  • AndroidX.wear.compose.material3
  • AndroidX.wear.compose.uiTooling
  • AndroidX.wear.protoLayout.expression
  • AndroidX.wear.protoLayout.material
  • AndroidX.wear.protoLayout.renderer
  • AndroidX.wear.protoLayout
  • AndroidX.window.extensions.core
  • Google.android.playServices.deviceToDeviceInteractions
  • Google.android.playServices.gamesV2.nativeC
  • Google.android.playServices.gamesV2
  • Google.android.playServices.matter
  • Google.android.playServices.mlKit.naturalLanguage.smartReply
  • Google.android.playServices.mlKit.vision.barcodeScanning.codeScanner
  • Google.android.playServices.mlKit.vision.textRecognition.chinese
  • Google.android.playServices.mlKit.vision.textRecognition.devanagari
  • Google.android.playServices.mlKit.vision.textRecognition.japanese
  • Google.android.playServices.mlKit.vision.textRecognition.korean
  • Google.android.playServices.tfLite.accelerationService
  • Google.android.playServices.tfLite.gpu
  • Google.android.playServices.tfLite.java
  • Google.android.playServices.tfLite.support
  • Google.android.playServices.threadNetwork
  • Google.mlKit.vision.entityExtraction
  • Google.mlKit.vision.faceMeshDetection
  • Kotlin.gradlePlugin

v0.51.0

1 year ago

Version 0.51.0 (2022-10-25)

Support Jetpack Compose BoM

Yesterday, Google released a BoM for Jetpack Compose. Today we're introducing first-class support for it.

To take advantage of it, you just need to add the dependency on platform(AndroidX.compose.bom). Just like Firebase.bom, make sure you add it before any dependent dependency:

dependencies {
    implementation(platform(AndroidX.compose.bom)) // Add this FIRST
    implementation(AndroidX.compose.material3) // Related dependencies AFTER
    implementation(AndroidX.compose.material3.windowSizeClass) // Same as above
}

In case you need to use a pre-release version (alpha, beta, rc…), use the withVersionPlaceholder() function as such:

dependencies {
    implementation(platform(AndroidX.compose.bom)) // Enables the BoM and depends on it
    implementation(AndroidX.compose.icons.extended) // Uses version defined in the BoM
    implementation(AndroidX.compose.material3.withVersionPlaceholder()) // Separate version in versions.properties
}

Fix StabilityLevel calculation for number-less pre-versions

Since last changes in the Version class, versions like 1.7.20-RC and 1.7.20-Beta would be marked as stable instead of respectively ReleaseCandidate and Beta because the logic expected a number in all cases.

The number is now optional for all pre-versions, except milestones.

To prevent future recurrence of such regression, this commit also adds tests that assert the expected stability level of many known versions from various libraries.

New dependency notations:

Click to expand (11)
  • AndroidX.asyncLayoutInflater.appcompat
  • AndroidX.compose.bom
  • AndroidX.dataStore.core.okio
  • AndroidX.graphics.core
  • AndroidX.input.motionPrediction
  • AndroidX.paging.testing
  • AndroidX.test.espresso.device
  • AndroidX.tv.foundation
  • AndroidX.tv.material
  • Firebase.dynamicModuleSupport
  • Google.firebase.dynamicModuleSupport

v0.50.2

1 year ago

Version 0.50.2 (2022-09-24)

Minor change

Disable the old refreshVersionsDependenciesMapping and migrateToRefreshVersionsDependenciesConstants Gradle tasks.

Fixes

  • versionFor could not work as it should have if it was used in multiple modules with different values: the refreshVersions task would only display the updates of some of them, and mark the other ones as unused. This has been fixed.
  • Running the refreshVersionsCleanup task would log that the gradle/libs.versions.toml file was modified even if it wasn't, and didn't exist in the first place. This is now fixed.
  • Version ordering now recognizes random qualifiers instead of marking with an unknown stability level.

New dependency notations:

Click to expand (15)
  • AndroidX.media3.dataSource
  • ApolloGraphQL.adapters
  • ApolloGraphQL.api
  • ApolloGraphQL.ast
  • ApolloGraphQL.httpCache
  • ApolloGraphQL.idlingResource
  • ApolloGraphQL.mockserver
  • ApolloGraphQL.normalizedCacheSqlite
  • ApolloGraphQL.normalizedCache
  • ApolloGraphQL.runtime
  • ApolloGraphQL.testingSupport
  • Google.horologist.dataLayer
  • KotlinX.serialization.bom
  • KotlinX.serialization.json.okio
  • Spring.boot.web

Credits

Thanks to all the folks that contributed in this release!

  • Jacob Kwitkoski (@thederputy)
  • Florian Levis (@Gounlaf)
  • Seokjae Lee (@doljae)
  • solonovamax (@solonovamax)
  • Louis CAD (@LouisCAD)
  • Jean-Michel Fayard (@jmfayard)

v0.50.1

1 year ago

Version 0.50.1 (2022-09-11)

Fixes

  • Fix the "Extension of type 'VersionCatalogsExtension' does not exist." error.
  • Versions Catalog migration only worked properly if you ran it twice. This has now been fixed!

v0.50.0

1 year ago

Version 0.50.0 (2022-09-09)

Support for Versions Catalogs! 🎉

Versions Catalogs are Gradle 7.4+ solution for storing dependencies and versions in a centralized file. Gradle will automatically recognize the gradle/libs.versions.toml file… and so will refreshVersions!

It is similar in spirit to the versions.properties file, and we are happy to add support for it:

  • ./gradlew refreshVersions will now add available updates as comments inside the gradle/libs.versions.toml file.
  • ./gradlew refreshVersionsMigrate --mode=VersionCatalogAndVersionProperties will generate a versions catalog and migrate your build to use it if you don't have one already.

Currently, we only support the default versions catalog. If you need support for multiple versions catalogs, add your 👍 on this issue.

This is a big and new feature, so feel free to provide feedback in this thread, and report issues with the right info if there's no existing one here.

Better support for versionFor, and Jetpack Compose!

Before

versionFor was helpful when you need to access a version located in the versions.properties file, but if there was no dependency using it, you'd never see any updates. For projects/modules using Jetpack Compose from Google, that meant you'd never see any updates for the compiler, and you'd need to look it up yourself. Also, the version entry would be marked as unused, or would be the wrong one if you shared it with other Compose artifacts since the compiler now has its own versioning track.

Now

Now, passing a dependency notation such as AndroidX.compose.compiler to versionFor is exactly the same as if you used the dependency somewhere in the project:

You'll get all the updates, and if the version is not yet specified in the versions.properties file, as usual, refreshVersions will try to find the latest most stable version available, plus it will also add the available comments for any newer, less stable version. That makes it even easier to start a project with Jetpack Compose!

With this in a build.gradle.kts file:

android {
    composeOptions {
        kotlinCompilerExtensionVersion = versionFor(AndroidX.compose.compiler) // Kotlin DSL
        kotlinCompilerExtensionVersion = versionFor(project, AndroidX.compose.compiler) // Groovy DSL
    }
}

AndroidX.compose.compiler is equivalent to "androidx.compose.compiler:compiler:_".

You'll get that in the versions.properties file if you were on version 1.3.0-rc01:

version.androidx.compose.compiler=1.3.0-rc01
##                    # available=1.3.0-rc02
##                    # available=1.3.0

New page for all the built-in dependency notations 📕

To make it easy to start new projects, new modules, or using a common library, we spent a lot of time adding built-in dependency notations for Kotlin, kotlinx, AndroidX, and more.

However, it wasn't so easy to know that they exist. That's why we made a dedicated page where you can find them all! Let us know how helpful it is to you!

Fixes

  • rejectVersionIf { … } had an issue: its removal would not be taken into account until the Gradle daemon would be killed. This now behaves correctly.
  • We were ignoring repositories defined in pluginManagement { … }, which might have led to Gradle plugin updates being missed by refreshVersions. Now, we look up these repositories as well.

New dependency notations:

Click to expand (145)
  • AndroidX.appSearch.builtInTypes
  • AndroidX.compose.runtime.tracing
  • AndroidX.core.uwb
  • AndroidX.core.uwb.rxJava3
  • AndroidX.health.connect.client
  • AndroidX.javascriptEngine
  • AndroidX.lifecycle.runtime.compose
  • AndroidX.room.paging.guava
  • AndroidX.room.paging.rxJava2
  • AndroidX.room.paging.rxJava3
  • AndroidX.tracing.perfetto
  • CashApp.molecule.gradlePlugin
  • CashApp.molecule.runtime
  • CashApp.molecule.test
  • Google.accompanist.drawablePainter
  • Google.accompanist.flowLayout
  • Google.accompanist.navigationAnimation
  • Google.accompanist.navigationMaterial
  • Google.accompanist.permissions
  • Google.accompanist.placeholder
  • Google.accompanist.placeholder.material
  • Google.accompanist.webView
  • Google.ambient.crossDevice
  • Google.horologist.audio
  • Google.horologist.audio.ui
  • Google.horologist.composables
  • Google.horologist.compose.layout
  • Google.horologist.compose.tools
  • Google.horologist.media
  • Google.horologist.media.data
  • Google.horologist.media.ui
  • Google.horologist.media3.backend
  • Google.horologist.networkAwareness
  • Google.horologist.tiles
  • Square.okHttp3.mockWebServer3
  • Square.okHttp3.mockWebServer3.junit4
  • Square.okHttp3.mockWebServer3.junit5
  • Square.okHttp3.android
  • Square.okHttp3.brotli
  • Square.okHttp3.coroutines
  • Square.okHttp3.dnsOverHttps
  • Square.okHttp3.sse
  • Square.okHttp3.tls
  • Square.okHttp3.urlConnection
  • Arrow.core
  • Arrow.fx.coroutines
  • Arrow.fx.stm
  • Arrow.optics
  • Arrow.optics.kspPlugin
  • Arrow.optics.reflect
  • Arrow.stack
  • Arrow.analysis.gradlePlugin
  • Koin.navigation
  • Testing.kotest.extensions.property.arbs
  • Testing.kotest.extensions.property.datetime
  • Ktor.client.contentNegotiation
  • Ktor.client.contentNegotiationTests
  • Ktor.client.gson
  • Ktor.client.jackson
  • Ktor.client.java
  • Ktor.client.okHttp
  • Ktor.client.resources
  • Ktor.plugins.events
  • Ktor.plugins.http
  • Ktor.plugins.http.cio
  • Ktor.plugins.io
  • Ktor.plugins.network
  • Ktor.plugins.networkTls
  • Ktor.plugins.networkTlsCertificates
  • Ktor.plugins.resources
  • Ktor.plugins.serialization
  • Ktor.plugins.serialization.gson
  • Ktor.plugins.serialization.jackson
  • Ktor.plugins.serialization.kotlinx
  • Ktor.plugins.serialization.kotlinx.cbor
  • Ktor.plugins.serialization.kotlinx.json
  • Ktor.plugins.serialization.kotlinx.tests
  • Ktor.plugins.serialization.kotlinx.xml
  • Ktor.server.auth
  • Ktor.server.auth.jwt
  • Ktor.server.auth.ldap
  • Ktor.server.autoHeadResponse
  • Ktor.server.cachingHeaders
  • Ktor.server.callId
  • Ktor.server.callLogging
  • Ktor.server.cio
  • Ktor.server.compression
  • Ktor.server.conditionalHeaders
  • Ktor.server.contentNegotiation
  • Ktor.server.cors
  • Ktor.server.dataConversion
  • Ktor.server.defaultHeaders
  • Ktor.server.doubleReceive
  • Ktor.server.forwardedHeader
  • Ktor.server.freeMarker
  • Ktor.server.hostCommon
  • Ktor.server.hsts
  • Ktor.server.htmlBuilder
  • Ktor.server.httpRedirect
  • Ktor.server.httpRedirect
  • Ktor.server.jte
  • Ktor.server.locations
  • Ktor.server.methodOverride
  • Ktor.server.metrics
  • Ktor.server.metricsMicrometer
  • Ktor.server.mustache
  • Ktor.server.partialContent
  • Ktor.server.pebble
  • Ktor.server.resources
  • Ktor.server.sessions
  • Ktor.server.statusPages
  • Ktor.server.testSuites
  • Ktor.server.thymeleaf
  • Ktor.server.velocity
  • Ktor.server.webjars
  • Ktor.server.websockets
  • Ktor.server
  • Ktor.plugins.websocketSerialization
  • Ktor.plugins.websockets
  • Testing.assertj.core
  • Testing.assertj.db
  • Testing.assertj.guava
  • Testing.assertj.jodaTime
  • Testing.assertj.swing
  • Testing.hamcrest
  • Testing.hamcrest.core
  • Testing.hamcrest.library
  • JetBrains.exposed.core
  • JetBrains.exposed.dao
  • JetBrains.exposed.jdbc
  • KotlinX.dataframe
  • KotlinX.dataframe.arrow
  • KotlinX.dataframe.core
  • KotlinX.dataframe.excel
  • KotlinX.dataframe.dataframe
  • KotlinX.deeplearning.api
  • KotlinX.deeplearning.onnx
  • KotlinX.deeplearning.visualization
  • KotlinX.lincheck
  • KotlinX.lincheck.jvm
  • KotlinX.multik.api
  • KotlinX.multik.default
  • KotlinX.multik.jvm
  • KotlinX.multik.native
  • Spring.boms.springCloud

Credits

Thanks to all the folks that contributed in updating the built-in dependency notations!

  • Jacob Kwitkoski (@thederputy) for CashApp.molecule
  • Rémi Latapy (@rlatapy-luna) for Google.accompanist
  • Yuri Schimke (@rlatapy-luna) for Google.horologist and Square.okHttp3
  • Brady Aiello (@brady-aiello) for Ktor
  • Kamalesh (@imashnake0) for JetBrains.exposed, Testing.assertj, Testing.hamcrest
  • @doljae for Spring.boms.springCloud
  • Johan Reitan (@joharei) for KotlinX.multik, KotlinX.lincheck, KotlinX.deeplearning
  • Ryan Fonzi (@RFonzi) for Arrow

And thanks to the GitHub sponsors of the maintainers @LouisCAD and @jmfayard who didn't count the hours spent on this project since 2018-2019!

We hope you save a lot of time thanks to this project and can therefore leave work early, or pursue more valuable tasks and projects. 😉

If you're not a sponsor yet, please consider becoming one, as a company, as an individual, or even both, it means a lot to us! Just click the heart button at the top of the GitHub repo webpage, follow the steps, and your heart. Thank you!