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

check if the version of the migrated artifact exists #2455

Merged
merged 4 commits into from
Jan 22, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
48 changes: 0 additions & 48 deletions modules/core/src/main/resources/artifact-migrations.conf
Original file line number Diff line number Diff line change
Expand Up @@ -3,288 +3,240 @@ changes = [
groupIdBefore = com.eed3si9n
groupIdAfter = com.github.sbt
artifactIdAfter = sbt-unidoc
initialVersion = 0.5.0
},
{
groupIdBefore = com.cavorite
groupIdAfter = com.github.sbt
artifactIdAfter = sbt-avro
initialVersion = 3.3.0
},
{
groupIdBefore = com.geirsson
groupIdAfter = com.github.sbt
artifactIdAfter = sbt-ci-release
initialVersion = 1.5.9
},
{
groupIdBefore = com.github.julien-truffaut
groupIdAfter = dev.optics
artifactIdAfter = monocle-core
initialVersion = 3.0.0
},
{
groupIdBefore = com.github.julien-truffaut
groupIdAfter = dev.optics
artifactIdAfter = monocle-macro
initialVersion = 3.0.0
},
{
groupIdBefore = com.github.julien-truffaut
groupIdAfter = dev.optics
artifactIdAfter = monocle-laws
initialVersion = 3.0.0
},
{
groupIdBefore = com.github.julien-truffaut
groupIdAfter = dev.optics
artifactIdAfter = monocle-refined
initialVersion = 3.0.0
},
{
groupIdBefore = com.pauldijou
groupIdAfter = com.github.jwt-scala
artifactIdAfter = jwt-argonaut
initialVersion = 6.0.0
},
{
groupIdBefore = com.pauldijou
groupIdAfter = com.github.jwt-scala
artifactIdAfter = jwt-circe
initialVersion = 6.0.0
},
{
groupIdBefore = com.pauldijou
groupIdAfter = com.github.jwt-scala
artifactIdAfter = jwt-core
initialVersion = 6.0.0
},
{
groupIdBefore = com.pauldijou
groupIdAfter = com.github.jwt-scala
artifactIdAfter = jwt-json-common
initialVersion = 6.0.0
},
{
groupIdBefore = com.pauldijou
groupIdAfter = com.github.jwt-scala
artifactIdAfter = jwt-json4s-common
initialVersion = 6.0.0
},
{
groupIdBefore = com.pauldijou
groupIdAfter = com.github.jwt-scala
artifactIdAfter = jwt-json4s-jackson
initialVersion = 6.0.0
},
{
groupIdBefore = com.pauldijou
groupIdAfter = com.github.jwt-scala
artifactIdAfter = jwt-json4s-native
initialVersion = 6.0.0
},
{
groupIdBefore = com.pauldijou
groupIdAfter = com.github.jwt-scala
artifactIdAfter = jwt-play-json
initialVersion = 6.0.0
},
{
groupIdBefore = com.pauldijou
groupIdAfter = com.github.jwt-scala
artifactIdAfter = jwt-play
initialVersion = 6.0.0
},
{
groupIdBefore = com.pauldijou
groupIdAfter = com.github.jwt-scala
artifactIdAfter = jwt-spray-json
initialVersion = 6.0.0
},
{
groupIdBefore = com.pauldijou
groupIdAfter = com.github.jwt-scala
artifactIdAfter = jwt-upickle
initialVersion = 6.0.0
},
{
groupIdBefore = com.github.gseitz
groupIdAfter = com.github.sbt
artifactIdAfter = sbt-protobuf
initialVersion = 0.7.0
},
{
groupIdBefore = com.github.gseitz
groupIdAfter = com.github.sbt
artifactIdAfter = sbt-release
initialVersion = 1.0.15
},
{
groupIdBefore = com.twilio
groupIdAfter = dev.guardrail
artifactIdAfter = guardrail
initialVersion = 0.65.2
},
{
groupIdBefore = com.twilio
groupIdAfter = dev.guardrail
artifactIdAfter = sbt-guardrail-core
initialVersion = 0.65.3
},
{
groupIdBefore = com.twilio
groupIdAfter = dev.guardrail
artifactIdAfter = sbt-guardrail
initialVersion = 0.65.3
},
{
groupIdBefore = com.typesafe.sbt
groupIdAfter = com.github.sbt
artifactIdAfter = sbt-native-packager
initialVersion = 1.9.0
},
{
groupIdBefore = com.jsuereth
groupIdAfter = com.github.sbt
artifactIdAfter = sbt-pgp
initialVersion = 2.1.2
},
{
groupIdBefore = com.geirsson
groupIdAfter = org.scalameta
artifactIdAfter = sbt-scalafmt
initialVersion = 2.0.0
},
{
groupIdBefore = com.github.mpilquist
groupIdAfter = org.typelevel
artifactIdAfter = simulacrum
initialVersion = 1.0.0
},
{
groupIdBefore = io.chrisdavenport
groupIdAfter = org.typelevel
artifactIdAfter = log4cats-core
initialVersion = 1.2.0
},
{
groupIdBefore = io.chrisdavenport
groupIdAfter = org.typelevel
artifactIdAfter = log4cats-noop
initialVersion = 1.2.0
},
{
groupIdBefore = io.chrisdavenport
groupIdAfter = org.typelevel
artifactIdAfter = log4cats-slf4j
initialVersion = 1.2.0
},
{
groupIdBefore = io.chrisdavenport
groupIdAfter = org.typelevel
artifactIdAfter = log4cats-testing
initialVersion = 1.2.0
},
{
groupIdBefore = net.ceedubs
groupIdAfter = com.iheart
artifactIdAfter = ficus
initialVersion = 1.3.4
},
{
groupIdBefore = org.spire-math
groupIdAfter = org.typelevel
artifactIdAfter = kind-projector
initialVersion = 0.10.0
},
{
groupIdAfter = org.scalatestplus
artifactIdBefore = junit-4-12
artifactIdAfter = junit-4-13
initialVersion = 3.2.3.0
},
{
groupIdAfter = org.scalatestplus
artifactIdBefore = mockito-3-3
artifactIdAfter = mockito-3-4
initialVersion = 3.2.3.0
},
{
groupIdAfter = org.scalatestplus
artifactIdBefore = scalacheck-1-14
artifactIdAfter = scalacheck-1-15
initialVersion = 3.2.2.0
},
{
groupIdBefore = io.github.nafg
groupIdAfter = io.github.nafg.slick-migration-api
artifactIdAfter = slick-migration-api
initialVersion = 0.8.2
},
{
groupIdBefore = io.github.nafg
groupIdAfter = io.github.nafg.slick-migration-api
artifactIdAfter = slick-migration-api-flyway
initialVersion = 0.8.1
},
{
groupIdAfter = com.github.alexarchambault
artifactIdBefore = scalacheck-shapeless_1.14
artifactIdAfter = scalacheck-shapeless_1.15
initialVersion = 1.3.0
},
{
groupIdAfter = com.github.alexarchambault
artifactIdBefore = argonaut-shapeless_6.2
artifactIdAfter = argonaut-shapeless_6.3
initialVersion = 1.3.0
},
{
groupIdAfter = com.github.alexarchambault
artifactIdBefore = argonaut-refined_6.2
artifactIdAfter = argonaut-refined_6.3
initialVersion = 1.3.0
},
{
groupIdBefore = com.kubukoz
groupIdAfter = org.polyvariant
artifactIdAfter = better-tostring
initialVersion = 0.3.8
},
{
groupIdBefore = com.novocode
groupIdAfter = com.github.sbt
artifactIdAfter = junit-interface
initialVersion = 0.13.2
},
{
groupIdBefore = com.xebia
groupIdAfter = nl.wehkamp.cakemix
artifactIdAfter = cakemix
initialVersion = 1.2.0
},
{
groupIdBefore = io.chrisdavenport
groupIdAfter = org.typelevel
artifactIdAfter = cats-time
initialVersion = 0.5.0
},
{
groupIdBefore = com.lightbend.sbt
groupIdAfter = com.github.sbt
artifactIdAfter = sbt-proguard
initialVersion = 0.5.0
},
{
groupIdBefore = ky.korins
groupIdAfter = pt.kcry
artifactIdAfter = sha
initialVersion = 2.0.0
},
{
groupIdBefore = ky.korins
groupIdAfter = pt.kcry
artifactIdAfter = blake3
initialVersion = 3.0.0
}
]
Original file line number Diff line number Diff line change
Expand Up @@ -21,8 +21,10 @@ import cats.syntax.all._
import org.scalasteward.core.coursier.VersionsCache
import org.scalasteward.core.data._
import org.scalasteward.core.repoconfig.RepoConfig
import org.scalasteward.core.update.artifact.ArtifactMigrationsFinder
import org.scalasteward.core.update.UpdateAlg.migratedDependency
import org.scalasteward.core.update.artifact.{ArtifactChange, ArtifactMigrationsFinder}
import org.scalasteward.core.util.Nel

import scala.concurrent.duration.FiniteDuration

final class UpdateAlg[F[_]](implicit
Expand All @@ -36,13 +38,37 @@ final class UpdateAlg[F[_]](implicit
maxAge: Option[FiniteDuration]
): F[Option[Update.Single]] =
for {
versions <- versionsCache.getVersions(dependency, maxAge)
current = Version(dependency.value.version)
maybeNewerVersions = Nel.fromList(versions.filter(_ > current))
maybeUpdate = maybeNewerVersions
existingVersions <- versionsCache.getVersions(dependency, maxAge)
maybeUpdate = maybeNewerVersions(dependency, existingVersions)
.map(vs => Update.Single(CrossDependency(dependency.value), vs.map(_.value)))
.orElse(artifactMigrationsFinder.findUpdateWithRenamedArtifact(dependency.value))
} yield maybeUpdate
maybeUpdateOrRename <- maybeUpdate match {
case Some(update) => F.pure(Some(update))
case None =>
artifactMigrationsFinder.findUpdateWithRenamedArtifact(dependency.value) match {
case Some(artifactChange) => verifyVersion(dependency, artifactChange, maxAge)
case None => F.pure(None)
}
}
} yield maybeUpdateOrRename

private def verifyVersion(
dependency: Scope[Dependency],
artifactChange: ArtifactChange,
maxAge: Option[FiniteDuration]
): F[Option[Update.Single]] =
versionsCache
.getVersions(migratedDependency(dependency, artifactChange), maxAge)
.map { existingVersions =>
maybeNewerVersions(dependency, existingVersions)
.map(newerVersions =>
Update.Single(
CrossDependency(dependency.value),
newerVersions.map(_.value),
Some(artifactChange.groupIdAfter),
Some(artifactChange.artifactIdAfter)
)
)
}

def findUpdates(
dependencies: List[Scope.Dependency],
Expand All @@ -52,6 +78,14 @@ final class UpdateAlg[F[_]](implicit
val updates = dependencies.traverseFilter(findUpdate(_, maxAge))
updates.flatMap(filterAlg.localFilterMany(repoConfig, _))
}

private def maybeNewerVersions(
dependency: Scope[Dependency],
existingVersions: List[Version]
): Option[Nel[Version]] = {
val current = Version(dependency.value.version)
Nel.fromList(existingVersions.filter(_ > current))
}
}

object UpdateAlg {
Expand All @@ -61,4 +95,24 @@ object UpdateAlg {
update.currentVersion === dependency.version &&
update.artifactIds.contains_(dependency.artifactId)
}

def migratedDependency(
dependency: Scope[Dependency],
artifactChange: ArtifactChange
): Scope[Dependency] = {
val oldArtifactId = dependency.value.artifactId
val newGroupId = artifactChange.groupIdAfter
val newArtifactId = ArtifactId(
artifactChange.artifactIdAfter,
oldArtifactId.maybeCrossName.map(
_.replace(oldArtifactId.name, artifactChange.artifactIdAfter)
)
)
dependency.copy(value =
dependency.value.copy(
groupId = newGroupId,
artifactId = newArtifactId
)
)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -24,8 +24,7 @@ final case class ArtifactChange(
groupIdBefore: Option[GroupId],
groupIdAfter: GroupId,
artifactIdBefore: Option[String],
artifactIdAfter: String,
initialVersion: String
artifactIdAfter: String
)

object ArtifactChange {
Expand Down
Loading