diff --git a/build.sbt b/build.sbt index d54cf52f34..5b90c4c412 100644 --- a/build.sbt +++ b/build.sbt @@ -130,7 +130,6 @@ lazy val core = myCrossProject("core") Dependencies.catsParse, Dependencies.circeConfig, Dependencies.circeGeneric, - Dependencies.circeGenericExtras, Dependencies.circeParser, Dependencies.circeRefined, Dependencies.commonsIo, diff --git a/docs/repo-specific-configuration.md b/docs/repo-specific-configuration.md index 7fa70064f3..b28cc5c7df 100644 --- a/docs/repo-specific-configuration.md +++ b/docs/repo-specific-configuration.md @@ -130,7 +130,7 @@ updates.allowPreReleases = [ { groupId = "com.example", artifactId="foo" } ] updates.limit = 5 # The extensions of files that should be updated. -# Default: [".mill-version",".sbt",".sbt.shared",".sc",".scala",".scalafmt.conf",".sdkmanrc",".yml","build.properties","mill-version","pom.xml"] +# Default: [".mill",".mill-version",".sbt",".sbt.shared",".sc",".scala",".scalafmt.conf",".sdkmanrc",".yml","build.properties","mill-version","pom.xml"] updates.fileExtensions = [".scala", ".sbt", ".sbt.shared", ".sc", ".yml", ".md", ".markdown", ".txt"] # If "on-conflicts", Scala Steward will update the PR it created to resolve conflicts as diff --git a/modules/benchmark/src/main/scala/org/scalasteward/benchmark/UpdatesConfigBenchmark.scala b/modules/benchmark/src/main/scala/org/scalasteward/benchmark/UpdatesConfigBenchmark.scala index bfec02fb25..382c6c8f88 100644 --- a/modules/benchmark/src/main/scala/org/scalasteward/benchmark/UpdatesConfigBenchmark.scala +++ b/modules/benchmark/src/main/scala/org/scalasteward/benchmark/UpdatesConfigBenchmark.scala @@ -36,9 +36,9 @@ class UpdatesConfigBenchmark { val update = Update.ForArtifactId(dependency, newerVersions) UpdatesConfig().keep(update) - UpdatesConfig(allow = List(UpdatePattern(groupId, None, None))).keep(update) + UpdatesConfig(allow = Some(List(UpdatePattern(groupId, None, None)))).keep(update) UpdatesConfig(allow = - List(UpdatePattern(groupId, None, Some(VersionPattern(prefix = Some("6.0"))))) + Some(List(UpdatePattern(groupId, None, Some(VersionPattern(prefix = Some("6.0")))))) ).keep(update) } } diff --git a/modules/core/src/main/scala/org/scalasteward/core/application/Cli.scala b/modules/core/src/main/scala/org/scalasteward/core/application/Cli.scala index c7eb1d5501..c174b029fc 100644 --- a/modules/core/src/main/scala/org/scalasteward/core/application/Cli.scala +++ b/modules/core/src/main/scala/org/scalasteward/core/application/Cli.scala @@ -320,7 +320,7 @@ object Cli { private val defaultMavenRepo: Opts[Resolver] = { val default = Resolver.mavenCentral option[String]("default-maven-repo", s"default: ${default.location}") - .map(location => Resolver.MavenRepository("default", location, None, Nil)) + .map(location => Resolver.MavenRepository("default", location, None, None)) .withDefault(default) } diff --git a/modules/core/src/main/scala/org/scalasteward/core/buildtool/maven/parser.scala b/modules/core/src/main/scala/org/scalasteward/core/buildtool/maven/parser.scala index 2925ad64f2..d95ce1cc89 100644 --- a/modules/core/src/main/scala/org/scalasteward/core/buildtool/maven/parser.scala +++ b/modules/core/src/main/scala/org/scalasteward/core/buildtool/maven/parser.scala @@ -72,7 +72,7 @@ object parser { id <- stringNoSpace _ <- wsp.rep0 ~ Parser.string("url:") ~ wsp url <- stringNoSpace - } yield Resolver.MavenRepository(id, url, None, Nil) + } yield Resolver.MavenRepository(id, url, None, None) def parseResolvers(input: List[String]): List[Resolver] = input.mkString.split("""\[INFO]""").toList.flatMap { line => diff --git a/modules/core/src/main/scala/org/scalasteward/core/buildtool/mill/parser.scala b/modules/core/src/main/scala/org/scalasteward/core/buildtool/mill/parser.scala index 0932884b9d..b06dbe9c84 100644 --- a/modules/core/src/main/scala/org/scalasteward/core/buildtool/mill/parser.scala +++ b/modules/core/src/main/scala/org/scalasteward/core/buildtool/mill/parser.scala @@ -54,7 +54,7 @@ object parser { * * @param artifactName * name of the artifact parsed from the build file - * @param millVerion + * @param millVersion * the current Mill version being used * @return * the newly put together ArtifactId @@ -127,13 +127,13 @@ object MillModule { url <- c.downField("url").as[String] creds <- c.downField("auth").as[Option[Resolver.Credentials]] headers <- c.downField("headers").as[Option[List[Resolver.Header]]] - } yield Resolver.MavenRepository(url, url, creds, headers.getOrElse(Nil)) + } yield Resolver.MavenRepository(url, url, creds, headers) case "ivy" => for { url <- c.downField("pattern").as[String] creds <- c.downField("auth").as[Option[Resolver.Credentials]] headers <- c.downField("headers").as[Option[List[Resolver.Header]]] - } yield Resolver.IvyRepository(url, url, creds, headers.getOrElse(Nil)) + } yield Resolver.IvyRepository(url, url, creds, headers) case typ => Left(DecodingFailure(s"Not a matching resolver type, $typ", c.history)) } } diff --git a/modules/core/src/main/scala/org/scalasteward/core/buildtool/sbt/data/SbtVersion.scala b/modules/core/src/main/scala/org/scalasteward/core/buildtool/sbt/data/SbtVersion.scala index eccd65d292..5a94099952 100644 --- a/modules/core/src/main/scala/org/scalasteward/core/buildtool/sbt/data/SbtVersion.scala +++ b/modules/core/src/main/scala/org/scalasteward/core/buildtool/sbt/data/SbtVersion.scala @@ -18,14 +18,16 @@ package org.scalasteward.core.buildtool.sbt.data import cats.Order import cats.syntax.all._ -import io.circe.Codec -import io.circe.generic.extras.semiauto._ +import io.circe.{Decoder, Encoder} final case class SbtVersion(value: String) object SbtVersion { - implicit val sbtVersionCodec: Codec[SbtVersion] = - deriveUnwrappedCodec + implicit val sbtVersionDecoder: Decoder[SbtVersion] = + Decoder[String].map(SbtVersion.apply) + + implicit val sbtVersionEncoder: Encoder[SbtVersion] = + Encoder[String].contramap(_.value) implicit val sbtVersionOrder: Order[SbtVersion] = Order[String].contramap(_.value) diff --git a/modules/core/src/main/scala/org/scalasteward/core/buildtool/sbt/data/ScalaVersion.scala b/modules/core/src/main/scala/org/scalasteward/core/buildtool/sbt/data/ScalaVersion.scala index 859dfc4e23..2cbdf3a09c 100644 --- a/modules/core/src/main/scala/org/scalasteward/core/buildtool/sbt/data/ScalaVersion.scala +++ b/modules/core/src/main/scala/org/scalasteward/core/buildtool/sbt/data/ScalaVersion.scala @@ -18,14 +18,16 @@ package org.scalasteward.core.buildtool.sbt.data import cats.Order import cats.syntax.all._ -import io.circe.Codec -import io.circe.generic.extras.semiauto._ +import io.circe.{Decoder, Encoder} final case class ScalaVersion(value: String) object ScalaVersion { - implicit val scalaVersionCodec: Codec[ScalaVersion] = - deriveUnwrappedCodec + implicit val scalaVersionDecoder: Decoder[ScalaVersion] = + Decoder[String].map(ScalaVersion.apply) + + implicit val scalaVersionEncoder: Encoder[ScalaVersion] = + Encoder[String].contramap(_.value) implicit val scalaVersionOrder: Order[ScalaVersion] = Order[String].contramap(_.value) diff --git a/modules/core/src/main/scala/org/scalasteward/core/coursier/CoursierAlg.scala b/modules/core/src/main/scala/org/scalasteward/core/coursier/CoursierAlg.scala index 9f8913f508..d768e80d62 100644 --- a/modules/core/src/main/scala/org/scalasteward/core/coursier/CoursierAlg.scala +++ b/modules/core/src/main/scala/org/scalasteward/core/coursier/CoursierAlg.scala @@ -123,10 +123,10 @@ object CoursierAlg { private def toCoursierRepository(resolver: Resolver): Either[String, coursier.Repository] = resolver match { case Resolver.MavenRepository(_, location, creds, headers) => - val authentication = toCoursierAuthentication(creds, headers) + val authentication = toCoursierAuthentication(creds, headers.getOrElse(Nil)) Right(coursier.maven.SbtMavenRepository.apply(location, authentication)) case Resolver.IvyRepository(_, pattern, creds, headers) => - val authentication = toCoursierAuthentication(creds, headers) + val authentication = toCoursierAuthentication(creds, headers.getOrElse(Nil)) coursier.ivy.IvyRepository.parse(pattern, authentication = authentication) } diff --git a/modules/core/src/main/scala/org/scalasteward/core/data/CrossDependency.scala b/modules/core/src/main/scala/org/scalasteward/core/data/CrossDependency.scala index ef78361b88..8d90238b37 100644 --- a/modules/core/src/main/scala/org/scalasteward/core/data/CrossDependency.scala +++ b/modules/core/src/main/scala/org/scalasteward/core/data/CrossDependency.scala @@ -18,8 +18,7 @@ package org.scalasteward.core.data import cats.Order import cats.syntax.all._ -import io.circe.Codec -import io.circe.generic.extras.semiauto._ +import io.circe.{Decoder, Encoder} import org.scalasteward.core.util.Nel /** A list of dependencies with the same groupId, (non-cross) artifactId, and version. */ @@ -44,9 +43,12 @@ object CrossDependency { .map(grouped => CrossDependency(grouped.sorted)) .toList - implicit val crossDependencyCodec: Codec[CrossDependency] = - deriveUnwrappedCodec + implicit val crossDependencyDecoder: Decoder[CrossDependency] = + Decoder[Nel[Dependency]].map(CrossDependency.apply) + + implicit val crossDependencyEncoder: Encoder[CrossDependency] = + Encoder[Nel[Dependency]].contramap(_.dependencies) implicit val crossDependencyOrder: Order[CrossDependency] = - Order.by((_: CrossDependency).dependencies) + Order.by(_.dependencies) } diff --git a/modules/core/src/main/scala/org/scalasteward/core/data/Resolver.scala b/modules/core/src/main/scala/org/scalasteward/core/data/Resolver.scala index 0944815b32..ec1ecd8ca4 100644 --- a/modules/core/src/main/scala/org/scalasteward/core/data/Resolver.scala +++ b/modules/core/src/main/scala/org/scalasteward/core/data/Resolver.scala @@ -18,8 +18,6 @@ package org.scalasteward.core.data import cats.Order import io.circe.Codec -import io.circe.generic.extras.Configuration -import io.circe.generic.extras.semiauto.deriveConfiguredCodec import io.circe.generic.semiauto._ import org.scalasteward.core.data.Resolver._ @@ -41,28 +39,27 @@ object Resolver { } final case class Header(key: String, value: String) object Header { - implicit val headerCodec: Codec[Header] = deriveCodec + implicit val headerCodec: Codec[Header] = + deriveCodec } final case class MavenRepository( name: String, location: String, credentials: Option[Credentials], - headers: List[Header] = Nil + headers: Option[List[Header]] ) extends Resolver final case class IvyRepository( name: String, pattern: String, credentials: Option[Credentials], - headers: List[Header] = Nil + headers: Option[List[Header]] ) extends Resolver val mavenCentral: MavenRepository = - MavenRepository("public", "https://repo1.maven.org/maven2/", None, Nil) + MavenRepository("public", "https://repo1.maven.org/maven2/", None, None) - implicit val resolverCodec: Codec[Resolver] = { - implicit val customConfig: Configuration = Configuration.default.withDefaults - deriveConfiguredCodec - } + implicit val resolverCodec: Codec[Resolver] = + deriveCodec implicit val resolverOrder: Order[Resolver] = Order.by { diff --git a/modules/core/src/main/scala/org/scalasteward/core/data/Version.scala b/modules/core/src/main/scala/org/scalasteward/core/data/Version.scala index 22c005d6a0..40edf369d7 100644 --- a/modules/core/src/main/scala/org/scalasteward/core/data/Version.scala +++ b/modules/core/src/main/scala/org/scalasteward/core/data/Version.scala @@ -19,8 +19,7 @@ package org.scalasteward.core.data import cats.Order import cats.implicits._ import cats.parse.{Numbers, Parser, Rfc5234} -import io.circe.Codec -import io.circe.generic.extras.semiauto.deriveUnwrappedCodec +import io.circe.{Decoder, Encoder} import org.scalasteward.core.data.Version.startsWithDate final case class Version(value: String) { @@ -128,8 +127,11 @@ object Version { val tagNames: List[Version => String] = List("v" + _, _.value, "release-" + _) - implicit val versionCodec: Codec[Version] = - deriveUnwrappedCodec + implicit val versionDecoder: Decoder[Version] = + Decoder[String].map(Version.apply) + + implicit val versionEncoder: Encoder[Version] = + Encoder[String].contramap(_.value) implicit val versionOrder: Order[Version] = Order.from[Version] { (v1, v2) => diff --git a/modules/core/src/main/scala/org/scalasteward/core/edit/EditAlg.scala b/modules/core/src/main/scala/org/scalasteward/core/edit/EditAlg.scala index 614b76d167..c95fc8335b 100644 --- a/modules/core/src/main/scala/org/scalasteward/core/edit/EditAlg.scala +++ b/modules/core/src/main/scala/org/scalasteward/core/edit/EditAlg.scala @@ -113,14 +113,14 @@ final class EditAlg[F[_]](implicit fileAlg.editFile(repoDir / path, Substring.Replacement.applyAll[F](replacements)) } _ <- reformatChangedFiles(data) - msgTemplate = data.config.commits.messageOrDefault + msgTemplate = data.config.commitsOrDefault.messageOrDefault commitMsg = CommitMsg.replaceVariables(msgTemplate)(update, data.repo.branch) maybeCommit <- gitAlg.commitAllIfDirty(data.repo, commitMsg, data.config.signoffCommits) } yield maybeCommit.map(UpdateEdit(update, _)) private def reformatChangedFiles(data: RepoData): F[Unit] = { - val reformat = - data.config.scalafmt.runAfterUpgradingOrDefault && data.cache.dependsOn(List(scalafmtModule)) + val reformat = data.config.scalafmtOrDefault.runAfterUpgradingOrDefault && + data.cache.dependsOn(List(scalafmtModule)) F.whenA(reformat) { data.config.buildRootsOrDefault(data.repo).traverse_ { buildRoot => logger.attemptWarn.log_(s"Reformatting changed files failed in ${buildRoot.relativePath}") { diff --git a/modules/core/src/main/scala/org/scalasteward/core/edit/hooks/HookExecutor.scala b/modules/core/src/main/scala/org/scalasteward/core/edit/hooks/HookExecutor.scala index d3f3d85038..89ccba54ed 100644 --- a/modules/core/src/main/scala/org/scalasteward/core/edit/hooks/HookExecutor.scala +++ b/modules/core/src/main/scala/org/scalasteward/core/edit/hooks/HookExecutor.scala @@ -173,7 +173,7 @@ object HookExecutor { useSandbox = false, commitMessage = update => CommitMsg(s"Reformat with scalafmt ${update.nextVersion}"), enabledByCache = _ => true, - enabledByConfig = _.scalafmt.runAfterUpgradingOrDefault, + enabledByConfig = _.scalafmtOrDefault.runAfterUpgradingOrDefault, addToGitBlameIgnoreRevs = true, signoffCommits = signoffCommits ) diff --git a/modules/core/src/main/scala/org/scalasteward/core/edit/scalafix/ScalafixMigrations.scala b/modules/core/src/main/scala/org/scalasteward/core/edit/scalafix/ScalafixMigrations.scala index cb9fa4e10e..ce24e5c73e 100644 --- a/modules/core/src/main/scala/org/scalasteward/core/edit/scalafix/ScalafixMigrations.scala +++ b/modules/core/src/main/scala/org/scalasteward/core/edit/scalafix/ScalafixMigrations.scala @@ -17,17 +17,11 @@ package org.scalasteward.core.edit.scalafix import io.circe.Decoder -import io.circe.generic.extras.Configuration -import io.circe.generic.extras.semiauto._ +import io.circe.generic.semiauto._ -final case class ScalafixMigrations( - migrations: List[ScalafixMigration] = List.empty -) +final case class ScalafixMigrations(migrations: List[ScalafixMigration]) object ScalafixMigrations { - implicit val configuration: Configuration = - Configuration.default.withDefaults - implicit val scalafixMigrationsDecoder: Decoder[ScalafixMigrations] = - deriveConfiguredDecoder + deriveDecoder } diff --git a/modules/core/src/main/scala/org/scalasteward/core/edit/update/ScannerAlg.scala b/modules/core/src/main/scala/org/scalasteward/core/edit/update/ScannerAlg.scala index 8caef2659d..31615ed164 100644 --- a/modules/core/src/main/scala/org/scalasteward/core/edit/update/ScannerAlg.scala +++ b/modules/core/src/main/scala/org/scalasteward/core/edit/update/ScannerAlg.scala @@ -66,7 +66,7 @@ final class ScannerAlg[F[_]](implicit Stream.eval(workspaceAlg.repoDir(repo)).flatMap { repoDir => Stream .evalSeq(gitAlg.findFilesContaining(repo, string)) - .filter(path => config.updates.fileExtensionsOrDefault.exists(path.endsWith)) + .filter(path => config.updatesOrDefault.fileExtensionsOrDefault.exists(path.endsWith)) .evalMapFilter(path => fileAlg.readFile(repoDir / path).map(_.map(FileData(path, _)))) } } diff --git a/modules/core/src/main/scala/org/scalasteward/core/forge/data/NewPullRequestData.scala b/modules/core/src/main/scala/org/scalasteward/core/forge/data/NewPullRequestData.scala index 125c7fdc2e..d742b2806a 100644 --- a/modules/core/src/main/scala/org/scalasteward/core/forge/data/NewPullRequestData.scala +++ b/modules/core/src/main/scala/org/scalasteward/core/forge/data/NewPullRequestData.scala @@ -270,7 +270,7 @@ object NewPullRequestData { ): NewPullRequestData = NewPullRequestData( title = CommitMsg - .replaceVariables(data.repoConfig.commits.messageOrDefault)( + .replaceVariables(data.repoConfig.commitsOrDefault.messageOrDefault)( data.update, data.repoData.repo.branch ) @@ -287,8 +287,8 @@ object NewPullRequestData { head = branchName, base = data.baseBranch, labels = if (addLabels) labels else List.empty, - assignees = data.repoConfig.assignees, - reviewers = data.repoConfig.reviewers + assignees = data.repoConfig.assigneesOrDefault, + reviewers = data.repoConfig.reviewersOrDefault ) def updateTypeLabels(anUpdate: Update): List[String] = { diff --git a/modules/core/src/main/scala/org/scalasteward/core/forge/data/PullRequestNumber.scala b/modules/core/src/main/scala/org/scalasteward/core/forge/data/PullRequestNumber.scala index ede996ca4d..2fec40d112 100644 --- a/modules/core/src/main/scala/org/scalasteward/core/forge/data/PullRequestNumber.scala +++ b/modules/core/src/main/scala/org/scalasteward/core/forge/data/PullRequestNumber.scala @@ -16,14 +16,16 @@ package org.scalasteward.core.forge.data -import io.circe.Codec -import io.circe.generic.extras.semiauto.deriveUnwrappedCodec +import io.circe.{Decoder, Encoder} final case class PullRequestNumber(value: Int) { override def toString: String = value.toString } object PullRequestNumber { - implicit val pullRequestNumberCodec: Codec[PullRequestNumber] = - deriveUnwrappedCodec + implicit val pullRequestNumberDecoder: Decoder[PullRequestNumber] = + Decoder[Int].map(PullRequestNumber.apply) + + implicit val pullRequestNumberEncoder: Encoder[PullRequestNumber] = + Encoder[Int].contramap(_.value) } diff --git a/modules/core/src/main/scala/org/scalasteward/core/nurture/NurtureAlg.scala b/modules/core/src/main/scala/org/scalasteward/core/nurture/NurtureAlg.scala index ea07b921bc..b723055199 100644 --- a/modules/core/src/main/scala/org/scalasteward/core/nurture/NurtureAlg.scala +++ b/modules/core/src/main/scala/org/scalasteward/core/nurture/NurtureAlg.scala @@ -51,7 +51,7 @@ final class NurtureAlg[F[_]](config: ForgeCfg)(implicit _ <- logger.info(s"Nurture ${data.repo.show}") baseBranch <- cloneAndSync(data.repo, fork) (grouped, notGrouped) = Update.groupByPullRequestGroup( - data.config.pullRequests.grouping, + data.config.pullRequestsOrDefault.groupingOrDefault, updates.toList ) finalUpdates = Update.groupByGroupId(notGrouped) ++ grouped @@ -80,7 +80,7 @@ final class NurtureAlg[F[_]](config: ForgeCfg)(implicit val updateData = UpdateData(data, fork, update, baseBranch, baseSha1, updateBranch) processUpdate(updateData) } - .through(util.takeUntilMaybe(0, data.config.updates.limit.map(_.value)) { + .through(util.takeUntilMaybe(0, data.config.updatesOrDefault.limit.map(_.value)) { case Ignored => 0 case Updated => 1 case Created(_) => 1 @@ -231,7 +231,8 @@ final class NurtureAlg[F[_]](config: ForgeCfg)(implicit .flatTraverse(gitAlg.findFilesContaining(data.repo, _)) .map(_.distinct) allLabels = labelsFor(data.update, edits, filesWithOldVersion, artifactIdToVersionScheme) - labels = filterLabels(allLabels, data.repoData.config.pullRequests.includeMatchedLabels) + labels = + filterLabels(allLabels, data.repoData.config.pullRequestsOrDefault.includeMatchedLabels) } yield NewPullRequestData.from( data = data, branchName = config.tpe.pullRequestHeadFor(data.fork, data.updateBranch), @@ -240,7 +241,7 @@ final class NurtureAlg[F[_]](config: ForgeCfg)(implicit artifactIdToUpdateInfoUrls = artifactIdToUpdateInfoUrls.toMap, filesWithOldVersion = filesWithOldVersion, addLabels = config.addLabels, - labels = data.repoData.config.pullRequests.customLabels ++ labels + labels = data.repoData.config.pullRequestsOrDefault.customLabelsOrDefault ++ labels ) private def createPullRequest(data: UpdateData, edits: List[EditAttempt]): F[ProcessResult] = @@ -309,7 +310,7 @@ final class NurtureAlg[F[_]](config: ForgeCfg)(implicit def closeRetractedPullRequests(data: RepoData): F[Unit] = pullRequestRepository - .getRetractedPullRequests(data.repo, data.config.updates.retracted) + .getRetractedPullRequests(data.repo, data.config.updatesOrDefault.retractedOrDefault) .flatMap { _.traverse_ { case (oldPr, retractedArtifact) => closeRetractedPullRequest(data, oldPr, retractedArtifact) diff --git a/modules/core/src/main/scala/org/scalasteward/core/repoconfig/CommitsConfig.scala b/modules/core/src/main/scala/org/scalasteward/core/repoconfig/CommitsConfig.scala index c17e090d76..00885c52b2 100644 --- a/modules/core/src/main/scala/org/scalasteward/core/repoconfig/CommitsConfig.scala +++ b/modules/core/src/main/scala/org/scalasteward/core/repoconfig/CommitsConfig.scala @@ -18,11 +18,10 @@ package org.scalasteward.core.repoconfig import cats.{Eq, Monoid} import io.circe.Codec -import io.circe.generic.extras.Configuration -import io.circe.generic.extras.semiauto._ +import io.circe.generic.semiauto.deriveCodec final case class CommitsConfig( - message: Option[String] = None + private val message: Option[String] = None ) { def messageOrDefault: String = message.getOrElse(CommitsConfig.defaultMessage) @@ -34,11 +33,8 @@ object CommitsConfig { implicit val commitsConfigEq: Eq[CommitsConfig] = Eq.fromUniversalEquals - implicit val commitsConfigConfiguration: Configuration = - Configuration.default.withDefaults - implicit val commitsConfigCodec: Codec[CommitsConfig] = - deriveConfiguredCodec + deriveCodec implicit val commitsConfigMonoid: Monoid[CommitsConfig] = Monoid.instance(CommitsConfig(), (x, y) => CommitsConfig(message = x.message.orElse(y.message))) diff --git a/modules/core/src/main/scala/org/scalasteward/core/repoconfig/GroupRepoConfig.scala b/modules/core/src/main/scala/org/scalasteward/core/repoconfig/GroupRepoConfig.scala index 97e7c69057..134725f803 100644 --- a/modules/core/src/main/scala/org/scalasteward/core/repoconfig/GroupRepoConfig.scala +++ b/modules/core/src/main/scala/org/scalasteward/core/repoconfig/GroupRepoConfig.scala @@ -17,7 +17,6 @@ package org.scalasteward.core.repoconfig import io.circe.Codec -import io.circe.generic.extras.Configuration import io.circe.generic.semiauto.deriveCodec import org.scalasteward.core.data.Update import org.scalasteward.core.util.string.indentLines @@ -28,9 +27,6 @@ final case class GroupRepoConfig( ) object GroupRepoConfig { - implicit val groupPullConfigCodecConfig: Configuration = - Configuration.default.withDefaults - implicit val groupPullConfigCodec: Codec[GroupRepoConfig] = deriveCodec diff --git a/modules/core/src/main/scala/org/scalasteward/core/repoconfig/PostUpdateHookConfig.scala b/modules/core/src/main/scala/org/scalasteward/core/repoconfig/PostUpdateHookConfig.scala index 077254220f..f5db495c60 100644 --- a/modules/core/src/main/scala/org/scalasteward/core/repoconfig/PostUpdateHookConfig.scala +++ b/modules/core/src/main/scala/org/scalasteward/core/repoconfig/PostUpdateHookConfig.scala @@ -17,8 +17,7 @@ package org.scalasteward.core.repoconfig import io.circe.Codec -import io.circe.generic.extras.Configuration -import io.circe.generic.extras.semiauto.deriveConfiguredCodec +import io.circe.generic.semiauto.deriveCodec import org.scalasteward.core.data.{ArtifactId, GroupId} import org.scalasteward.core.edit.hooks.PostUpdateHook import org.scalasteward.core.git.CommitMsg @@ -47,9 +46,6 @@ final case class PostUpdateHookConfig( } object PostUpdateHookConfig { - implicit val postUpdateHooksConfigConfiguration: Configuration = - Configuration.default.withDefaults - implicit val postUpdateHooksConfigCodec: Codec[PostUpdateHookConfig] = - deriveConfiguredCodec + deriveCodec } diff --git a/modules/core/src/main/scala/org/scalasteward/core/repoconfig/PullRequestsConfig.scala b/modules/core/src/main/scala/org/scalasteward/core/repoconfig/PullRequestsConfig.scala index 39fef7b22c..a1f3f1ec32 100644 --- a/modules/core/src/main/scala/org/scalasteward/core/repoconfig/PullRequestsConfig.scala +++ b/modules/core/src/main/scala/org/scalasteward/core/repoconfig/PullRequestsConfig.scala @@ -19,20 +19,24 @@ package org.scalasteward.core.repoconfig import cats.implicits._ import cats.{Eq, Monoid} import io.circe.Codec -import io.circe.generic.extras.Configuration -import io.circe.generic.extras.semiauto.deriveConfiguredCodec - +import io.circe.generic.semiauto.deriveCodec import java.util.regex.PatternSyntaxException import scala.util.matching.Regex final case class PullRequestsConfig( frequency: Option[PullRequestFrequency] = None, - grouping: List[PullRequestGroup] = Nil, + private val grouping: Option[List[PullRequestGroup]] = None, includeMatchedLabels: Option[Regex] = None, - customLabels: List[String] = Nil + private val customLabels: Option[List[String]] = None ) { def frequencyOrDefault: PullRequestFrequency = frequency.getOrElse(PullRequestsConfig.defaultFrequency) + + def groupingOrDefault: List[PullRequestGroup] = + grouping.getOrElse(Nil) + + def customLabelsOrDefault: List[String] = + customLabels.getOrElse(Nil) } object PullRequestsConfig { @@ -41,16 +45,13 @@ object PullRequestsConfig { implicit val pullRequestsConfigEq: Eq[PullRequestsConfig] = Eq.fromUniversalEquals - implicit val pullRequestsConfigConfiguration: Configuration = - Configuration.default.withDefaults - implicit val regexCodec: Codec[Regex] = Codec .from[String](implicitly, implicitly) .iemap(s => Either.catchOnly[PatternSyntaxException](s.r).leftMap(_.getMessage))(_.regex) implicit val pullRequestsConfigCodec: Codec[PullRequestsConfig] = - deriveConfiguredCodec + deriveCodec implicit val pullRequestsConfigMonoid: Monoid[PullRequestsConfig] = Monoid.instance( diff --git a/modules/core/src/main/scala/org/scalasteward/core/repoconfig/RepoConfig.scala b/modules/core/src/main/scala/org/scalasteward/core/repoconfig/RepoConfig.scala index 46b20122a5..3e0b502630 100644 --- a/modules/core/src/main/scala/org/scalasteward/core/repoconfig/RepoConfig.scala +++ b/modules/core/src/main/scala/org/scalasteward/core/repoconfig/RepoConfig.scala @@ -19,8 +19,7 @@ package org.scalasteward.core.repoconfig import cats.syntax.all._ import cats.{Eq, Monoid} import io.circe.Codec -import io.circe.generic.extras.Configuration -import io.circe.generic.extras.semiauto._ +import io.circe.generic.semiauto._ import io.circe.syntax._ import org.scalasteward.core.buildtool.BuildRoot import org.scalasteward.core.data.Repo @@ -28,24 +27,45 @@ import org.scalasteward.core.edit.hooks.PostUpdateHook import org.scalasteward.core.repoconfig.RepoConfig.defaultBuildRoots final case class RepoConfig( - commits: CommitsConfig = CommitsConfig(), - pullRequests: PullRequestsConfig = PullRequestsConfig(), - scalafmt: ScalafmtConfig = ScalafmtConfig(), - updates: UpdatesConfig = UpdatesConfig(), - postUpdateHooks: Option[List[PostUpdateHookConfig]] = None, - updatePullRequests: Option[PullRequestUpdateStrategy] = None, - buildRoots: Option[List[BuildRootConfig]] = None, - assignees: List[String] = List.empty, - reviewers: List[String] = List.empty, - dependencyOverrides: List[GroupRepoConfig] = List.empty, + private val commits: Option[CommitsConfig] = None, + private val pullRequests: Option[PullRequestsConfig] = None, + private val scalafmt: Option[ScalafmtConfig] = None, + private val updates: Option[UpdatesConfig] = None, + private val postUpdateHooks: Option[List[PostUpdateHookConfig]] = None, + private val updatePullRequests: Option[PullRequestUpdateStrategy] = None, + private val buildRoots: Option[List[BuildRootConfig]] = None, + private val assignees: Option[List[String]] = None, + private val reviewers: Option[List[String]] = None, + private val dependencyOverrides: Option[List[GroupRepoConfig]] = None, signoffCommits: Option[Boolean] = None ) { + def commitsOrDefault: CommitsConfig = + commits.getOrElse(CommitsConfig()) + + def pullRequestsOrDefault: PullRequestsConfig = + pullRequests.getOrElse(PullRequestsConfig()) + + def scalafmtOrDefault: ScalafmtConfig = + scalafmt.getOrElse(ScalafmtConfig()) + + def updatesOrDefault: UpdatesConfig = + updates.getOrElse(UpdatesConfig()) + def buildRootsOrDefault(repo: Repo): List[BuildRoot] = buildRoots .map(_.filterNot(_.relativePath.contains(".."))) .getOrElse(defaultBuildRoots) .map(cfg => BuildRoot(repo, cfg.relativePath)) + def assigneesOrDefault: List[String] = + assignees.getOrElse(Nil) + + def reviewersOrDefault: List[String] = + reviewers.getOrElse(Nil) + + def dependencyOverridesOrDefault: List[GroupRepoConfig] = + dependencyOverrides.getOrElse(Nil) + def postUpdateHooksOrDefault: List[PostUpdateHook] = postUpdateHooks.getOrElse(Nil).map(_.toHook) @@ -53,7 +73,7 @@ final case class RepoConfig( updatePullRequests.getOrElse(PullRequestUpdateStrategy.default) def show: String = - this.asJson.spaces2 + this.asJson.deepDropNullValues.spaces2 } object RepoConfig { @@ -65,11 +85,8 @@ object RepoConfig { implicit val repoConfigEq: Eq[RepoConfig] = Eq.fromUniversalEquals - implicit val repoConfigConfiguration: Configuration = - Configuration.default.withDefaults - implicit val repoConfigCodec: Codec[RepoConfig] = - deriveConfiguredCodec + deriveCodec implicit val repoConfigMonoid: Monoid[RepoConfig] = Monoid.instance( diff --git a/modules/core/src/main/scala/org/scalasteward/core/repoconfig/ScalafmtConfig.scala b/modules/core/src/main/scala/org/scalasteward/core/repoconfig/ScalafmtConfig.scala index e1f72dcec1..e5e05391c9 100644 --- a/modules/core/src/main/scala/org/scalasteward/core/repoconfig/ScalafmtConfig.scala +++ b/modules/core/src/main/scala/org/scalasteward/core/repoconfig/ScalafmtConfig.scala @@ -18,11 +18,10 @@ package org.scalasteward.core.repoconfig import cats.{Eq, Monoid} import io.circe.Codec -import io.circe.generic.extras.Configuration -import io.circe.generic.extras.semiauto.deriveConfiguredCodec +import io.circe.generic.semiauto.deriveCodec final case class ScalafmtConfig( - runAfterUpgrading: Option[Boolean] = None + private val runAfterUpgrading: Option[Boolean] = None ) { def runAfterUpgradingOrDefault: Boolean = runAfterUpgrading.getOrElse(ScalafmtConfig.defaultRunAfterUpgrading) @@ -34,11 +33,8 @@ object ScalafmtConfig { implicit val scalafmtConfigEq: Eq[ScalafmtConfig] = Eq.fromUniversalEquals - implicit val scalafmtConfigConfiguration: Configuration = - Configuration.default.withDefaults - implicit val scalafmtConfigCodec: Codec[ScalafmtConfig] = - deriveConfiguredCodec + deriveCodec implicit val scalafmtConfigMonoid: Monoid[ScalafmtConfig] = Monoid.instance( diff --git a/modules/core/src/main/scala/org/scalasteward/core/repoconfig/UpdatesConfig.scala b/modules/core/src/main/scala/org/scalasteward/core/repoconfig/UpdatesConfig.scala index a2521ce487..624ae2112e 100644 --- a/modules/core/src/main/scala/org/scalasteward/core/repoconfig/UpdatesConfig.scala +++ b/modules/core/src/main/scala/org/scalasteward/core/repoconfig/UpdatesConfig.scala @@ -19,8 +19,7 @@ package org.scalasteward.core.repoconfig import cats.implicits._ import cats.{Eq, Monoid} import eu.timepit.refined.types.numeric.NonNegInt -import io.circe.generic.extras.Configuration -import io.circe.generic.extras.semiauto._ +import io.circe.generic.semiauto.deriveCodec import io.circe.refined._ import io.circe.{Codec, Decoder} import org.scalasteward.core.buildtool.maven.pomXmlName @@ -38,14 +37,29 @@ import org.scalasteward.core.update.FilterAlg.{ import org.scalasteward.core.util.{combineOptions, intellijThisImportIsUsed, Nel} final case class UpdatesConfig( - pin: List[UpdatePattern] = List.empty, - allow: List[UpdatePattern] = List.empty, - allowPreReleases: List[UpdatePattern] = List.empty, - ignore: List[UpdatePattern] = List.empty, - retracted: List[RetractedArtifact] = List.empty, + private val pin: Option[List[UpdatePattern]] = None, + private val allow: Option[List[UpdatePattern]] = None, + private val allowPreReleases: Option[List[UpdatePattern]] = None, + private val ignore: Option[List[UpdatePattern]] = None, + private val retracted: Option[List[RetractedArtifact]] = None, limit: Option[NonNegInt] = defaultLimit, - fileExtensions: Option[List[String]] = None + private val fileExtensions: Option[List[String]] = None ) { + private[repoconfig] def pinOrDefault: List[UpdatePattern] = + pin.getOrElse(Nil) + + private def allowOrDefault: List[UpdatePattern] = + allow.getOrElse(Nil) + + def allowPreReleasesOrDefault: List[UpdatePattern] = + allowPreReleases.getOrElse(Nil) + + private def ignoreOrDefault: List[UpdatePattern] = + ignore.getOrElse(Nil) + + def retractedOrDefault: List[RetractedArtifact] = + retracted.getOrElse(Nil) + def fileExtensionsOrDefault: Set[String] = fileExtensions.fold(UpdatesConfig.defaultFileExtensions)(_.toSet) @@ -56,14 +70,14 @@ final case class UpdatesConfig( isAllowedPreReleases(update) private def isAllowedPreReleases(update: Update.ForArtifactId): FilterResult = { - val m = UpdatePattern.findMatch(allowPreReleases, update, include = true) + val m = UpdatePattern.findMatch(allowPreReleasesOrDefault, update, include = true) if (m.filteredVersions.nonEmpty) Right(update) else Left(NotAllowedByConfig(update)) } private def isAllowed(update: Update.ForArtifactId): FilterResult = { - val m = UpdatePattern.findMatch(allow, update, include = true) + val m = UpdatePattern.findMatch(allowOrDefault, update, include = true) if (m.filteredVersions.nonEmpty) Right(update.copy(newerVersions = Nel.fromListUnsafe(m.filteredVersions))) else if (allow.isEmpty) @@ -72,7 +86,7 @@ final case class UpdatesConfig( } private def isPinned(update: Update.ForArtifactId): FilterResult = { - val m = UpdatePattern.findMatch(pin, update, include = true) + val m = UpdatePattern.findMatch(pinOrDefault, update, include = true) if (m.filteredVersions.nonEmpty) Right(update.copy(newerVersions = Nel.fromListUnsafe(m.filteredVersions))) else if (m.byArtifactId.isEmpty) @@ -81,7 +95,7 @@ final case class UpdatesConfig( } private def isIgnored(update: Update.ForArtifactId): FilterResult = { - val m = UpdatePattern.findMatch(ignore, update, include = false) + val m = UpdatePattern.findMatch(ignoreOrDefault, update, include = false) if (m.filteredVersions.nonEmpty) Right(update.copy(newerVersions = Nel.fromListUnsafe(m.filteredVersions))) else @@ -92,6 +106,7 @@ final case class UpdatesConfig( object UpdatesConfig { val defaultFileExtensions: Set[String] = Set( + ".mill", MillAlg.millVersionName, MillAlg.millVersionNameInConfig, ".sbt", @@ -110,11 +125,8 @@ object UpdatesConfig { implicit val updatesConfigEq: Eq[UpdatesConfig] = Eq.fromUniversalEquals - implicit val updatesConfigConfiguration: Configuration = - Configuration.default.withDefaults - implicit val updatesConfigCodec: Codec[UpdatesConfig] = - deriveConfiguredCodec + deriveCodec implicit val updatesConfigMonoid: Monoid[UpdatesConfig] = Monoid.instance( @@ -125,7 +137,7 @@ object UpdatesConfig { allow = mergeAllow(x.allow, y.allow), allowPreReleases = mergeAllow(x.allowPreReleases, y.allowPreReleases), ignore = mergeIgnore(x.ignore, y.ignore), - retracted = x.retracted ::: y.retracted, + retracted = x.retracted |+| y.retracted, limit = x.limit.orElse(y.limit), fileExtensions = mergeFileExtensions(x.fileExtensions, y.fileExtensions) ) @@ -133,12 +145,13 @@ object UpdatesConfig { // Strategy: union with repo preference in terms of revision private[repoconfig] def mergePin( - x: List[UpdatePattern], - y: List[UpdatePattern] - ): List[UpdatePattern] = + x: Option[List[UpdatePattern]], + y: Option[List[UpdatePattern]] + ): Option[List[UpdatePattern]] = combineOptions(x, y) { (x, y) => x.filterNot { p1 => y.exists(p2 => p1.groupId === p2.groupId && p1.artifactId === p2.artifactId) } ::: y + } private[repoconfig] val nonExistingUpdatePattern: List[UpdatePattern] = List(UpdatePattern(GroupId("non-exist"), None, None)) @@ -146,9 +159,9 @@ object UpdatesConfig { // Strategy: superset // Xa.Ya.Za |+| Xb.Yb.Zb private[repoconfig] def mergeAllow( - x: List[UpdatePattern], - y: List[UpdatePattern] - ): List[UpdatePattern] = + x: Option[List[UpdatePattern]], + y: Option[List[UpdatePattern]] + ): Option[List[UpdatePattern]] = combineOptions(x, y) { (x, y) => (x, y) match { case (Nil, second) => second case (first, Nil) => first @@ -168,6 +181,7 @@ object UpdatesConfig { if (builder.isEmpty) nonExistingUpdatePattern else builder.distinct.toList } + } // merge UpdatePattern for same group id private def mergeAllowGroupId( @@ -207,10 +221,11 @@ object UpdatesConfig { // Strategy: union private[repoconfig] def mergeIgnore( - x: List[UpdatePattern], - y: List[UpdatePattern] - ): List[UpdatePattern] = + x: Option[List[UpdatePattern]], + y: Option[List[UpdatePattern]] + ): Option[List[UpdatePattern]] = combineOptions(x, y) { (x, y) => x ::: y.filterNot(x.contains) + } private[repoconfig] def mergeFileExtensions( x: Option[List[String]], diff --git a/modules/core/src/main/scala/org/scalasteward/core/update/FilterAlg.scala b/modules/core/src/main/scala/org/scalasteward/core/update/FilterAlg.scala index ca600df4e2..edfc4aa697 100644 --- a/modules/core/src/main/scala/org/scalasteward/core/update/FilterAlg.scala +++ b/modules/core/src/main/scala/org/scalasteward/core/update/FilterAlg.scala @@ -66,7 +66,10 @@ object FilterAlg { final case class IgnoreScalaNext(update: Update.ForArtifactId) extends RejectionReason def localFilter(update: Update.ForArtifactId, repoConfig: RepoConfig): FilterResult = - repoConfig.updates.keep(update).flatMap(scalaLTSFilter).flatMap(globalFilter(_, repoConfig)) + repoConfig.updatesOrDefault + .keep(update) + .flatMap(scalaLTSFilter) + .flatMap(globalFilter(_, repoConfig)) def scalaLTSFilter(update: Update.ForArtifactId): FilterResult = if (!isScala3Lang(update)) @@ -107,7 +110,7 @@ object FilterAlg { repoConfig: RepoConfig ): FilterResult = { val newerVersions = update.newerVersions.toList - val maybeNext = repoConfig.updates.preRelease(update) match { + val maybeNext = repoConfig.updatesOrDefault.preRelease(update) match { case Left(_) => update.currentVersion.selectNext(newerVersions) case Right(_) => update.currentVersion.selectNext(newerVersions, allowPreReleases = true) } diff --git a/modules/core/src/main/scala/org/scalasteward/core/update/PruningAlg.scala b/modules/core/src/main/scala/org/scalasteward/core/update/PruningAlg.scala index d8cbc9872c..d1fc340146 100644 --- a/modules/core/src/main/scala/org/scalasteward/core/update/PruningAlg.scala +++ b/modules/core/src/main/scala/org/scalasteward/core/update/PruningAlg.scala @@ -166,7 +166,7 @@ final class PruningAlg[F[_]](implicit repoConfig: RepoConfig ): F[Boolean] = { val (frequencyz: Option[PullRequestFrequency], lastPrCreatedAt: Option[Timestamp]) = - repoConfig.dependencyOverrides + repoConfig.dependencyOverridesOrDefault .collectFirstSome { groupRepoConfig => val matchResult = UpdatePattern .findMatch(List(groupRepoConfig.dependency), dependencyOutdated.update, include = true) @@ -174,7 +174,7 @@ final class PruningAlg[F[_]](implicit (groupRepoConfig.pullRequests.frequency, artifactLastPrCreatedAt) ) } - .getOrElse((repoConfig.pullRequests.frequency, repoLastPrCreatedAt)) + .getOrElse((repoConfig.pullRequestsOrDefault.frequency, repoLastPrCreatedAt)) val frequency = frequencyz.getOrElse(PullRequestFrequency.Asap) val dep = dependencyOutdated.crossDependency.head diff --git a/modules/core/src/main/scala/org/scalasteward/core/update/artifact/ArtifactChange.scala b/modules/core/src/main/scala/org/scalasteward/core/update/artifact/ArtifactChange.scala index 4b886e5ca9..54c502a294 100644 --- a/modules/core/src/main/scala/org/scalasteward/core/update/artifact/ArtifactChange.scala +++ b/modules/core/src/main/scala/org/scalasteward/core/update/artifact/ArtifactChange.scala @@ -17,7 +17,7 @@ package org.scalasteward.core.update.artifact import io.circe.Decoder -import io.circe.generic.extras.{semiauto, Configuration} +import io.circe.generic.semiauto import org.scalasteward.core.data.GroupId final case class ArtifactChange( @@ -28,12 +28,9 @@ final case class ArtifactChange( ) object ArtifactChange { - implicit val configuration: Configuration = - Configuration.default.withDefaults - - implicit val decoder: Decoder[ArtifactChange] = + implicit val artifactChangeDecoder: Decoder[ArtifactChange] = semiauto - .deriveConfiguredDecoder[ArtifactChange] + .deriveDecoder[ArtifactChange] .ensure( change => change.groupIdBefore.isDefined || change.artifactIdBefore.isDefined, "At least one of groupIdBefore and/or artifactIdBefore must be set" diff --git a/modules/core/src/main/scala/org/scalasteward/core/update/artifact/ArtifactChanges.scala b/modules/core/src/main/scala/org/scalasteward/core/update/artifact/ArtifactChanges.scala index b258ba7c91..03680296e8 100644 --- a/modules/core/src/main/scala/org/scalasteward/core/update/artifact/ArtifactChanges.scala +++ b/modules/core/src/main/scala/org/scalasteward/core/update/artifact/ArtifactChanges.scala @@ -17,14 +17,11 @@ package org.scalasteward.core.update.artifact import io.circe.Decoder -import io.circe.generic.extras.{semiauto, Configuration} +import io.circe.generic.semiauto._ final case class ArtifactChanges(changes: List[ArtifactChange]) object ArtifactChanges { - implicit val configuration: Configuration = - Configuration.default.withDefaults - implicit val artifactChangesDecoder: Decoder[ArtifactChanges] = - semiauto.deriveConfiguredDecoder + deriveDecoder } diff --git a/modules/core/src/main/scala/org/scalasteward/core/util/Timestamp.scala b/modules/core/src/main/scala/org/scalasteward/core/util/Timestamp.scala index 012e279486..38762de6c1 100644 --- a/modules/core/src/main/scala/org/scalasteward/core/util/Timestamp.scala +++ b/modules/core/src/main/scala/org/scalasteward/core/util/Timestamp.scala @@ -17,8 +17,7 @@ package org.scalasteward.core.util import cats.Order -import io.circe.Codec -import io.circe.generic.extras.semiauto.deriveUnwrappedCodec +import io.circe.{Decoder, Encoder} import java.time.{Instant, LocalDateTime, ZoneOffset} import java.util.concurrent.TimeUnit import scala.concurrent.duration.FiniteDuration @@ -38,8 +37,11 @@ object Timestamp { def fromLocalDateTime(ldt: LocalDateTime): Timestamp = Timestamp(ldt.toInstant(ZoneOffset.UTC).toEpochMilli) - implicit val timestampCodec: Codec[Timestamp] = - deriveUnwrappedCodec + implicit val timestampDecoder: Decoder[Timestamp] = + Decoder[Long].map(Timestamp.apply) + + implicit val timestampEncoder: Encoder[Timestamp] = + Encoder[Long].contramap(_.millis) implicit val timestampOrder: Order[Timestamp] = Order.by(_.millis) diff --git a/modules/core/src/test/scala/org/scalasteward/core/TestInstances.scala b/modules/core/src/test/scala/org/scalasteward/core/TestInstances.scala index ef87a73f46..e7f66e9a7a 100644 --- a/modules/core/src/test/scala/org/scalasteward/core/TestInstances.scala +++ b/modules/core/src/test/scala/org/scalasteward/core/TestInstances.scala @@ -150,9 +150,9 @@ object TestInstances { limit <- Arbitrary.arbitrary[Option[NonNegInt]] fileExtensions <- Arbitrary.arbitrary[Option[List[String]]] } yield UpdatesConfig( - pin = pin, - allow = allow, - ignore = ignore, + pin = Some(pin), + allow = Some(allow), + ignore = Some(ignore), limit = limit, fileExtensions = fileExtensions ) @@ -161,10 +161,10 @@ object TestInstances { implicit val repoConfigArbitrary: Arbitrary[RepoConfig] = Arbitrary( for { - commits <- Arbitrary.arbitrary[CommitsConfig] - pullRequests <- Arbitrary.arbitrary[PullRequestsConfig] - scalafmt <- Arbitrary.arbitrary[ScalafmtConfig] - updates <- Arbitrary.arbitrary[UpdatesConfig] + commits <- Arbitrary.arbitrary[Option[CommitsConfig]] + pullRequests <- Arbitrary.arbitrary[Option[PullRequestsConfig]] + scalafmt <- Arbitrary.arbitrary[Option[ScalafmtConfig]] + updates <- Arbitrary.arbitrary[Option[UpdatesConfig]] updatePullRequests <- Arbitrary.arbitrary[Option[PullRequestUpdateStrategy]] } yield RepoConfig( commits = commits, diff --git a/modules/core/src/test/scala/org/scalasteward/core/TestSyntax.scala b/modules/core/src/test/scala/org/scalasteward/core/TestSyntax.scala index 125830752b..d8718acfa7 100644 --- a/modules/core/src/test/scala/org/scalasteward/core/TestSyntax.scala +++ b/modules/core/src/test/scala/org/scalasteward/core/TestSyntax.scala @@ -7,7 +7,7 @@ import org.scalasteward.core.util.Nel object TestSyntax { val sbtPluginReleases: IvyRepository = { val pattern = "https://repo.scala-sbt.org/scalasbt/sbt-plugin-releases/[defaultPattern]" - IvyRepository("sbt-plugin-releases", pattern, None) + IvyRepository("sbt-plugin-releases", pattern, None, None) } implicit class GenericOps[A](val self: A) extends AnyVal { diff --git a/modules/core/src/test/scala/org/scalasteward/core/buildtool/maven/parserTest.scala b/modules/core/src/test/scala/org/scalasteward/core/buildtool/maven/parserTest.scala index 797579d8cc..a2ffcbaa51 100644 --- a/modules/core/src/test/scala/org/scalasteward/core/buildtool/maven/parserTest.scala +++ b/modules/core/src/test/scala/org/scalasteward/core/buildtool/maven/parserTest.scala @@ -64,10 +64,10 @@ class parserTest extends FunSuite { "sonatype-nexus-snapshots", "https://oss.sonatype.org/content/repositories/snapshots", None, - Nil + None ), - MavenRepository("bintrayakkamaven", "https://dl.bintray.com/akka/maven/", None, Nil), - MavenRepository("apache.snapshots", "http://repository.apache.org/snapshots", None, Nil) + MavenRepository("bintrayakkamaven", "https://dl.bintray.com/akka/maven/", None, None), + MavenRepository("apache.snapshots", "http://repository.apache.org/snapshots", None, None) ) assertEquals(resolvers, expected) } diff --git a/modules/core/src/test/scala/org/scalasteward/core/buildtool/mill/MillDepParserTest.scala b/modules/core/src/test/scala/org/scalasteward/core/buildtool/mill/MillDepParserTest.scala index 4afae0611d..cd7c4f334a 100644 --- a/modules/core/src/test/scala/org/scalasteward/core/buildtool/mill/MillDepParserTest.scala +++ b/modules/core/src/test/scala/org/scalasteward/core/buildtool/mill/MillDepParserTest.scala @@ -2,6 +2,7 @@ package org.scalasteward.core.buildtool.mill import munit.FunSuite import org.scalasteward.core.TestSyntax._ +import org.scalasteward.core.data.Resolver class MillDepParserTest extends FunSuite { test("parse dependencies from https://github.com/lihaoyi/requests-scala") { @@ -137,4 +138,13 @@ class MillDepParserTest extends FunSuite { assertEquals(result.find(_.name == "requests[2.13.0]").map(_.dependencies), Some(dep13)) } + + test("parse an IvyRepository") { + val pattern = + "https://repo.scala-sbt.org/scalasbt/sbt-plugin-releases/[organisation]/[module]/(scala_[scalaVersion]/)(sbt_[sbtVersion]/)([branch]/)[revision]/[type]s/[artifact](-[classifier]).[ext]" + val json = s""" { "pattern": "$pattern", "type": "ivy", "headers": [] } """ + val obtained = io.circe.parser.decode(json)(MillModule.resolverDecoder) + val expected = Right(Resolver.IvyRepository(pattern, pattern, None, Some(Nil))) + assertEquals(obtained, expected) + } } diff --git a/modules/core/src/test/scala/org/scalasteward/core/buildtool/sbt/parserTest.scala b/modules/core/src/test/scala/org/scalasteward/core/buildtool/sbt/parserTest.scala index 8d19646ff1..f35b0b9e17 100644 --- a/modules/core/src/test/scala/org/scalasteward/core/buildtool/sbt/parserTest.scala +++ b/modules/core/src/test/scala/org/scalasteward/core/buildtool/sbt/parserTest.scala @@ -28,7 +28,7 @@ class parserTest extends FunSuite { |[info] { "groupId": "com.dwijnand", "artifactId": { "name": "sbt-travisci", "maybeCrossName": null }, "version": "1.1.3", "sbtVersion": "1.0" } |[info] { "groupId": "com.eed3si9n", "artifactId": { "name": "sbt-assembly", "maybeCrossName": null }, "version": "0.14.8", "sbtVersion": "1.0", "configurations": "foo" } |{ "groupId": "org.scalameta", "artifactId": { "name": "sbt-scalafmt", "maybeCrossName": null }, "version": "2.4.6", "sbtVersion": "1.0", "scalaVersion": "2.12", "configurations": null } - |[info] { "IvyRepository" : { "name": "sbt-plugin-releases", "pattern": "https://repo.scala-sbt.org/scalasbt/sbt-plugin-releases/[organisation]/[module]/(scala_[scalaVersion]/)(sbt_[sbtVersion]/)([branch]/)[revision]/[type]s/[artifact](-[classifier]).[ext]", "headers": [] } } + |[info] { "IvyRepository" : { "name": "sbt-plugin-releases", "pattern": "https://repo.scala-sbt.org/scalasbt/sbt-plugin-releases/[organisation]/[module]/(scala_[scalaVersion]/)(sbt_[sbtVersion]/)([branch]/)[revision]/[type]s/[artifact](-[classifier]).[ext]" } } |[info] { "IvyRepository" : { "name": "sbt-plugin-releases-with-creds", "pattern": "https://repo.scala-sbt.org/scalasbt/sbt-plugin-releases/[organisation]/[module]/(scala_[scalaVersion]/)(sbt_[sbtVersion]/)([branch]/)[revision]/[type]s/[artifact](-[classifier]).[ext]", "credentials": { "user": "tony", "pass": "m0ntana" }, "headers": [] } } |[info] --- snip --- |""".stripMargin.linesIterator.toList @@ -45,19 +45,19 @@ class parserTest extends FunSuite { "bintray-ovotech-maven", "https://dl.bintray.com/ovotech/maven/", None, - Nil + Some(Nil) ), MavenRepository( "confluent-release", "http://packages.confluent.io/maven/", Some(Credentials("donny", "brasc0")), - Nil + Some(Nil) ), MavenRepository( "gitlab-internal", "http://gitlab.example.com/maven/", None, - List(Resolver.Header("private-token", "token123")) + Some(List(Resolver.Header("private-token", "token123"))) ) ) ), @@ -76,13 +76,13 @@ class parserTest extends FunSuite { "sbt-plugin-releases", "https://repo.scala-sbt.org/scalasbt/sbt-plugin-releases/[organisation]/[module]/(scala_[scalaVersion]/)(sbt_[sbtVersion]/)([branch]/)[revision]/[type]s/[artifact](-[classifier]).[ext]", None, - Nil + None ), IvyRepository( "sbt-plugin-releases-with-creds", "https://repo.scala-sbt.org/scalasbt/sbt-plugin-releases/[organisation]/[module]/(scala_[scalaVersion]/)(sbt_[sbtVersion]/)([branch]/)[revision]/[type]s/[artifact](-[classifier]).[ext]", Some(Credentials("tony", "m0ntana")), - Nil + Some(Nil) ) ) ) diff --git a/modules/core/src/test/scala/org/scalasteward/core/coursier/CoursierAlgTest.scala b/modules/core/src/test/scala/org/scalasteward/core/coursier/CoursierAlgTest.scala index b6e516f069..ed981d97aa 100644 --- a/modules/core/src/test/scala/org/scalasteward/core/coursier/CoursierAlgTest.scala +++ b/modules/core/src/test/scala/org/scalasteward/core/coursier/CoursierAlgTest.scala @@ -103,7 +103,7 @@ class CoursierAlgTest extends CatsEffectSuite { test("getMetadata: resolver with headers") { val dep = "org.typelevel".g % ("cats-effect", "cats-effect_2.12").a % "1.0.0" val resolvers = - List(Resolver.mavenCentral.copy(headers = List(Resolver.Header("X-Foo", "bar")))) + List(Resolver.mavenCentral.copy(headers = Some(List(Resolver.Header("X-Foo", "bar"))))) val obtained = coursierAlg.getMetadata(dep, resolvers).runA(MockState.empty).map(_.repoUrl.isDefined) assertIOBoolean(obtained) diff --git a/modules/core/src/test/scala/org/scalasteward/core/edit/hooks/HookExecutorTest.scala b/modules/core/src/test/scala/org/scalasteward/core/edit/hooks/HookExecutorTest.scala index 7aa0de4acb..f6164df406 100644 --- a/modules/core/src/test/scala/org/scalasteward/core/edit/hooks/HookExecutorTest.scala +++ b/modules/core/src/test/scala/org/scalasteward/core/edit/hooks/HookExecutorTest.scala @@ -93,7 +93,7 @@ class HookExecutorTest extends CatsEffectSuite { test("scalafmt: disabled by config") { val repoConfig = - RepoConfig.empty.copy(scalafmt = ScalafmtConfig(runAfterUpgrading = Some(false))) + RepoConfig.empty.copy(scalafmt = ScalafmtConfig(runAfterUpgrading = Some(false)).some) val data = RepoData(repo, dummyRepoCache, repoConfig) val update = (scalafmtGroupId % scalafmtArtifactId % "2.7.4" %> "2.7.5").single val state = hookExecutor.execPostUpdateHooks(data, update).runS(MockState.empty) diff --git a/modules/core/src/test/scala/org/scalasteward/core/forge/data/NewPullRequestDataTest.scala b/modules/core/src/test/scala/org/scalasteward/core/forge/data/NewPullRequestDataTest.scala index 3ae0a0f50f..8c05d78009 100644 --- a/modules/core/src/test/scala/org/scalasteward/core/forge/data/NewPullRequestDataTest.scala +++ b/modules/core/src/test/scala/org/scalasteward/core/forge/data/NewPullRequestDataTest.scala @@ -11,8 +11,8 @@ import org.scalasteward.core.edit.scalafix.ScalafixMigration import org.scalasteward.core.forge.data.NewPullRequestData._ import org.scalasteward.core.git.{Branch, Commit} import org.scalasteward.core.nurture.UpdateInfoUrl -import org.scalasteward.core.util.Nel import org.scalasteward.core.repoconfig.RepoConfig +import org.scalasteward.core.util.Nel class NewPullRequestDataTest extends FunSuite { test("bodyFor()") { @@ -736,7 +736,7 @@ class NewPullRequestDataTest extends FunSuite { repoData = RepoData( repo = Repo("foo", "bar"), cache = dummyRepoCache, - config = RepoConfig(assignees = List("foo"), reviewers = List("bar")) + config = RepoConfig(assignees = Some(List("foo")), reviewers = Some(List("bar"))) ), fork = Repo("scala-steward", "bar"), update = ("ch.qos.logback".g % "logback-classic".a % "1.2.0" %> "1.2.3").single, @@ -844,7 +844,7 @@ class NewPullRequestDataTest extends FunSuite { repoData = RepoData( repo = Repo("foo", "bar"), cache = dummyRepoCache, - config = RepoConfig(assignees = List("foo"), reviewers = List("bar")) + config = RepoConfig(assignees = Some(List("foo")), reviewers = Some(List("bar"))) ), fork = Repo("scala-steward", "bar"), update = update, diff --git a/modules/core/src/test/scala/org/scalasteward/core/nurture/NurtureAlgTest.scala b/modules/core/src/test/scala/org/scalasteward/core/nurture/NurtureAlgTest.scala index 1cdf3e6e6c..7fd62721d3 100644 --- a/modules/core/src/test/scala/org/scalasteward/core/nurture/NurtureAlgTest.scala +++ b/modules/core/src/test/scala/org/scalasteward/core/nurture/NurtureAlgTest.scala @@ -22,8 +22,11 @@ class NurtureAlgTest extends CatsEffectSuite with Http4sDsl[MockEff] { val repoCache = dummyRepoCache.copy(dependencyInfos = List(List(DependencyInfo(dependency, Nil)).withMavenCentral) ) - val repoData = - RepoData(repo, repoCache, RepoConfig(assignees = List("foo"), reviewers = List("bar"))) + val repoData = RepoData( + repo, + repoCache, + RepoConfig(assignees = List("foo").some, reviewers = List("bar").some) + ) val fork = Repo("scala-steward", "scala-steward") val update = (dependency %> "3.4.0").single val baseBranch = Branch("main") @@ -134,8 +137,11 @@ class NurtureAlgTest extends CatsEffectSuite with Http4sDsl[MockEff] { val repoCache = dummyRepoCache.copy(dependencyInfos = List(List(DependencyInfo(dependency, Nil)).withMavenCentral) ) - val repoData = - RepoData(repo, repoCache, RepoConfig(assignees = List("foo"), reviewers = List("bar"))) + val repoData = RepoData( + repo, + repoCache, + RepoConfig(assignees = List("foo").some, reviewers = List("bar").some) + ) val fork = Repo("scala-steward", "scala-steward") val update = (dependency %> "3.4.0").single val baseBranch = Branch("main") @@ -171,11 +177,8 @@ class NurtureAlgTest extends CatsEffectSuite with Http4sDsl[MockEff] { RepoData( repo = Repo("scala-steward-org", "scala-steward"), cache = dummyRepoCache, - config = RepoConfig( - pullRequests = PullRequestsConfig( - customLabels = customLabels - ) - ) + config = + RepoConfig(pullRequests = PullRequestsConfig(customLabels = customLabels.some).some) ) val update = (dependency %> "3.4.0").single val baseBranch = Branch("main") diff --git a/modules/core/src/test/scala/org/scalasteward/core/repoconfig/RepoConfigAlgTest.scala b/modules/core/src/test/scala/org/scalasteward/core/repoconfig/RepoConfigAlgTest.scala index b63b789fe5..afbbb018f3 100644 --- a/modules/core/src/test/scala/org/scalasteward/core/repoconfig/RepoConfigAlgTest.scala +++ b/modules/core/src/test/scala/org/scalasteward/core/repoconfig/RepoConfigAlgTest.scala @@ -110,10 +110,10 @@ class RepoConfigAlgTest extends FunSuite { PullRequestUpdateFilter("*".some).getOrElse(fail("Should not be called")) ) ) - ) - ), + ).some + ).some, updates = UpdatesConfig( - allow = List(UpdatePattern("eu.timepit".g, None, None)), + allow = List(UpdatePattern("eu.timepit".g, None, None)).some, pin = List( UpdatePattern("eu.timepit".g, Some("refined.1"), Some(VersionPattern(Some("0.8.")))), UpdatePattern("eu.timepit".g, Some("refined.2"), Some(VersionPattern(Some("0.8.")))), @@ -127,15 +127,15 @@ class RepoConfigAlgTest extends FunSuite { Some("refined.4"), Some(VersionPattern(Some("0.8."), Some("jre"))) ) - ), - ignore = List(UpdatePattern("org.acme".g, None, Some(VersionPattern(Some("1.0"))))), - allowPreReleases = List(UpdatePattern("eu.timepit".g, None, None)), + ).some, + ignore = List(UpdatePattern("org.acme".g, None, Some(VersionPattern(Some("1.0"))))).some, + allowPreReleases = List(UpdatePattern("eu.timepit".g, None, None)).some, limit = Some(NonNegInt.unsafeFrom(4)), fileExtensions = Some(List(".txt")) - ), + ).some, commits = CommitsConfig( message = Some("Update ${artifactName} from ${currentVersion} to ${nextVersion}") - ), + ).some, buildRoots = Some(List(BuildRootConfig.repoRoot, BuildRootConfig("subfolder/subfolder"))), dependencyOverrides = List( GroupRepoConfig( @@ -160,9 +160,9 @@ class RepoConfigAlgTest extends FunSuite { frequency = Some(PullRequestFrequency.Timespan(7.days)) ) ) - ), - assignees = List("scala.steward"), - reviewers = List("scala.steward") + ).some, + assignees = List("scala.steward").some, + reviewers = List("scala.steward").some ) assertEquals(obtained, expected) } @@ -213,7 +213,9 @@ class RepoConfigAlgTest extends FunSuite { val content = """pullRequests.frequency = "@asap" """ val config = RepoConfigAlg.parseRepoConfig(content) val expected = - RepoConfig(pullRequests = PullRequestsConfig(frequency = Some(PullRequestFrequency.Asap))) + RepoConfig(pullRequests = + PullRequestsConfig(frequency = Some(PullRequestFrequency.Asap)).some + ) assertEquals(config, Right(expected)) } @@ -221,7 +223,7 @@ class RepoConfigAlgTest extends FunSuite { val content = """pullRequests.frequency = "@daily" """ val config = RepoConfigAlg.parseRepoConfig(content) val expected = RepoConfig(pullRequests = - PullRequestsConfig(frequency = Some(PullRequestFrequency.Timespan(1.day))) + PullRequestsConfig(frequency = Some(PullRequestFrequency.Timespan(1.day))).some ) assertEquals(config, Right(expected)) } @@ -230,7 +232,7 @@ class RepoConfigAlgTest extends FunSuite { val content = """pullRequests.frequency = "@monthly" """ val config = RepoConfigAlg.parseRepoConfig(content) val expected = RepoConfig(pullRequests = - PullRequestsConfig(frequency = Some(PullRequestFrequency.Timespan(30.days))) + PullRequestsConfig(frequency = Some(PullRequestFrequency.Timespan(30.days))).some ) assertEquals(config, Right(expected)) } @@ -238,7 +240,7 @@ class RepoConfigAlgTest extends FunSuite { test("config with 'scalafmt.runAfterUpgrading = true'") { val content = "scalafmt.runAfterUpgrading = true" val config = RepoConfigAlg.parseRepoConfig(content) - val expected = RepoConfig(scalafmt = ScalafmtConfig(runAfterUpgrading = Some(true))) + val expected = RepoConfig(scalafmt = ScalafmtConfig(runAfterUpgrading = Some(true)).some) assertEquals(config, Right(expected)) } @@ -343,8 +345,9 @@ class RepoConfigAlgTest extends FunSuite { val config = RepoConfigAlg .parseRepoConfig(RepoConfigAlg.configToIgnoreFurtherUpdates(update)) .getOrElse(RepoConfig()) - val expected = - RepoConfig(updates = UpdatesConfig(ignore = List(UpdatePattern("a".g, Some("b"), None)))) + val expected = RepoConfig(updates = + UpdatesConfig(ignore = List(UpdatePattern("a".g, Some("b"), None)).some).some + ) assertEquals(config, expected) } @@ -354,7 +357,7 @@ class RepoConfigAlgTest extends FunSuite { .parseRepoConfig(RepoConfigAlg.configToIgnoreFurtherUpdates(update)) .getOrElse(RepoConfig()) val expected = - RepoConfig(updates = UpdatesConfig(ignore = List(UpdatePattern("a".g, None, None)))) + RepoConfig(updates = UpdatesConfig(ignore = List(UpdatePattern("a".g, None, None)).some).some) assertEquals(config, expected) } @@ -370,8 +373,8 @@ class RepoConfigAlgTest extends FunSuite { List( UpdatePattern(groupId = "a".g, artifactId = "b".some, None), UpdatePattern(groupId = "c".g, artifactId = "d".some, None) - ) - ) + ).some + ).some ) assertEquals(config, expected) } diff --git a/modules/core/src/test/scala/org/scalasteward/core/repoconfig/RepoConfigLoaderTest.scala b/modules/core/src/test/scala/org/scalasteward/core/repoconfig/RepoConfigLoaderTest.scala index fd3ce988a6..b3f11f6261 100644 --- a/modules/core/src/test/scala/org/scalasteward/core/repoconfig/RepoConfigLoaderTest.scala +++ b/modules/core/src/test/scala/org/scalasteward/core/repoconfig/RepoConfigLoaderTest.scala @@ -37,6 +37,9 @@ class RepoConfigLoaderTest extends FunSuite { .unsafeRunSync() .getOrElse(None) assert(clue(repoConfig).isDefined) - assertEquals(repoConfig.get.updates.pin.head.version, Some(VersionPattern(Some("3.4.")))) + assertEquals( + repoConfig.get.updatesOrDefault.pinOrDefault.head.version, + Some(VersionPattern(Some("3.4."))) + ) } } diff --git a/modules/core/src/test/scala/org/scalasteward/core/repoconfig/UpdatesConfigTest.scala b/modules/core/src/test/scala/org/scalasteward/core/repoconfig/UpdatesConfigTest.scala index 3c35d8de1f..0f491c6a65 100644 --- a/modules/core/src/test/scala/org/scalasteward/core/repoconfig/UpdatesConfigTest.scala +++ b/modules/core/src/test/scala/org/scalasteward/core/repoconfig/UpdatesConfigTest.scala @@ -1,6 +1,7 @@ package org.scalasteward.core.repoconfig import cats.kernel.laws.discipline.MonoidTests +import cats.syntax.all._ import munit.DisciplineSuite import org.scalasteward.core.TestInstances._ import org.scalasteward.core.data.GroupId @@ -23,15 +24,15 @@ class UpdatesConfigTest extends DisciplineSuite { private val b00 = UpdatePattern(groupIdB, None, None) test("mergePin: basic checks") { - assertEquals(UpdatesConfig.mergePin(Nil, Nil), Nil) - assertEquals(UpdatesConfig.mergePin(List(a00), Nil), List(a00)) - assertEquals(UpdatesConfig.mergePin(Nil, List(b00)), List(b00)) - assertEquals(UpdatesConfig.mergePin(List(a00), List(b00)), List(a00, b00)) + assertEquals(UpdatesConfig.mergePin(Nil.some, Nil.some), Nil.some) + assertEquals(UpdatesConfig.mergePin(List(a00).some, Nil.some), List(a00).some) + assertEquals(UpdatesConfig.mergePin(Nil.some, List(b00).some), List(b00).some) + assertEquals(UpdatesConfig.mergePin(List(a00).some, List(b00).some), List(a00, b00).some) - assertEquals(UpdatesConfig.mergePin(List(aa1), List(aa1, ac3)), List(aa1, ac3)) + assertEquals(UpdatesConfig.mergePin(List(aa1).some, List(aa1, ac3).some), List(aa1, ac3).some) - assertEquals(UpdatesConfig.mergePin(List(aa1), List(aa2)), List(aa2)) - assertEquals(UpdatesConfig.mergePin(List(aa2), List(aa1)), List(aa1)) + assertEquals(UpdatesConfig.mergePin(List(aa1).some, List(aa2).some), List(aa2).some) + assertEquals(UpdatesConfig.mergePin(List(aa2).some, List(aa1).some), List(aa1).some) } test("mergePin: scala 3 LTS") { @@ -45,7 +46,7 @@ class UpdatesConfigTest extends DisciplineSuite { default: List[UpdatePattern], local: List[UpdatePattern] ): List[UpdatePattern] = - UpdatesConfig.mergePin(default, local) + UpdatesConfig.mergePin(default.some, local.some).getOrElse(Nil) assertEquals(mergeDefaultWithLocal(default = List(s33), local = Nil), List(s33)) assertEquals(mergeDefaultWithLocal(default = List(s33), local = List(s34)), List(s34)) @@ -58,40 +59,58 @@ class UpdatesConfigTest extends DisciplineSuite { } test("mergeAllow: basic checks") { - assertEquals(UpdatesConfig.mergeAllow(Nil, Nil), Nil) - assertEquals(UpdatesConfig.mergeAllow(List(a00), Nil), List(a00)) - assertEquals(UpdatesConfig.mergeAllow(Nil, List(a00)), List(a00)) + assertEquals(UpdatesConfig.mergeAllow(Nil.some, Nil.some), Nil.some) + assertEquals(UpdatesConfig.mergeAllow(List(a00).some, Nil.some), List(a00).some) + assertEquals(UpdatesConfig.mergeAllow(Nil.some, List(a00).some), List(a00).some) - assertEquals(UpdatesConfig.mergeAllow(List(a00), List(a00)), List(a00)) + assertEquals(UpdatesConfig.mergeAllow(List(a00).some, List(a00).some), List(a00).some) assertEquals( - UpdatesConfig.mergeAllow(List(a00), List(b00)), - UpdatesConfig.nonExistingUpdatePattern + UpdatesConfig.mergeAllow(List(a00).some, List(b00).some), + UpdatesConfig.nonExistingUpdatePattern.some ) - assertEquals(UpdatesConfig.mergeAllow(List(a00), List(aa1, ab0, ac3)), List(aa1, ab0, ac3)) - assertEquals(UpdatesConfig.mergeAllow(List(aa1, ab0, ac3), List(a00)), List(aa1, ab0, ac3)) + assertEquals( + UpdatesConfig.mergeAllow(List(a00).some, List(aa1, ab0, ac3).some), + List(aa1, ab0, ac3).some + ) + assertEquals( + UpdatesConfig.mergeAllow(List(aa1, ab0, ac3).some, List(a00).some), + List(aa1, ab0, ac3).some + ) - assertEquals(UpdatesConfig.mergeAllow(List(aa0), List(aa1, aa2)), List(aa1, aa2)) - assertEquals(UpdatesConfig.mergeAllow(List(aa1, aa2), List(aa0)), List(aa1, aa2)) + assertEquals(UpdatesConfig.mergeAllow(List(aa0).some, List(aa1, aa2).some), List(aa1, aa2).some) + assertEquals(UpdatesConfig.mergeAllow(List(aa1, aa2).some, List(aa0).some), List(aa1, aa2).some) - assertEquals(UpdatesConfig.mergeAllow(List(aa0), List(aa0, ab0)), List(aa0)) - assertEquals(UpdatesConfig.mergeAllow(List(aa0, ab0), List(aa0, ab0)), List(aa0, ab0)) + assertEquals(UpdatesConfig.mergeAllow(List(aa0).some, List(aa0, ab0).some), List(aa0).some) + assertEquals( + UpdatesConfig.mergeAllow(List(aa0, ab0).some, List(aa0, ab0).some), + List(aa0, ab0).some + ) - assertEquals(UpdatesConfig.mergeAllow(List(aa1), List(aa1)), List(aa1)) + assertEquals(UpdatesConfig.mergeAllow(List(aa1).some, List(aa1).some), List(aa1).some) assertEquals( - UpdatesConfig.mergeAllow(List(aa1), List(aa2)), - UpdatesConfig.nonExistingUpdatePattern + UpdatesConfig.mergeAllow(List(aa1).some, List(aa2).some), + UpdatesConfig.nonExistingUpdatePattern.some ) - assertEquals(UpdatesConfig.mergeAllow(List(aa1, ab0, ac0), List(aa2, ac0)), List(ac0)) - assertEquals(UpdatesConfig.mergeAllow(List(aa1, aa2), List(aa1, aa2)), List(aa1, aa2)) - assertEquals(UpdatesConfig.mergeAllow(List(aa1, aa2), List(aa1, ac3)), List(aa1)) + assertEquals( + UpdatesConfig.mergeAllow(List(aa1, ab0, ac0).some, List(aa2, ac0).some), + List(ac0).some + ) + assertEquals( + UpdatesConfig.mergeAllow(List(aa1, aa2).some, List(aa1, aa2).some), + List(aa1, aa2).some + ) + assertEquals(UpdatesConfig.mergeAllow(List(aa1, aa2).some, List(aa1, ac3).some), List(aa1).some) } test("mergeIgnore: basic checks") { - assertEquals(UpdatesConfig.mergeIgnore(Nil, Nil), Nil) - assertEquals(UpdatesConfig.mergeIgnore(List(a00), Nil), List(a00)) - assertEquals(UpdatesConfig.mergeIgnore(Nil, List(b00)), List(b00)) - assertEquals(UpdatesConfig.mergeIgnore(List(aa1, b00), List(aa1, aa2)), List(aa1, b00, aa2)) + assertEquals(UpdatesConfig.mergeIgnore(Some(Nil), Some(Nil)), Some(Nil)) + assertEquals(UpdatesConfig.mergeIgnore(Some(List(a00)), Some(Nil)), Some(List(a00))) + assertEquals(UpdatesConfig.mergeIgnore(Some(Nil), Some(List(b00))), Some(List(b00))) + assertEquals( + UpdatesConfig.mergeIgnore(Some(List(aa1, b00)), Some(List(aa1, aa2))), + Some(List(aa1, b00, aa2)) + ) } test("mergeFileExtensions: basic checks") { diff --git a/modules/core/src/test/scala/org/scalasteward/core/update/FilterAlgTest.scala b/modules/core/src/test/scala/org/scalasteward/core/update/FilterAlgTest.scala index c3065f4de7..ba9b4a3ab4 100644 --- a/modules/core/src/test/scala/org/scalasteward/core/update/FilterAlgTest.scala +++ b/modules/core/src/test/scala/org/scalasteward/core/update/FilterAlgTest.scala @@ -52,10 +52,11 @@ class FilterAlgTest extends FunSuite { test("localFilter: allowed update to pre-releases of a different series") { val update = ("com.jsuereth".g % "sbt-pgp".a % "1.1.2-1" %> Nel.of("2.0.1-M3")).single - val allowedPreReleases = - UpdatePattern("com.jsuereth".g, Some("sbt-pgp"), None) :: config.updates.allowPreReleases - val configWithAllowed = - config.copy(updates = config.updates.copy(allowPreReleases = allowedPreReleases)) + val allowedPreReleases = UpdatePattern("com.jsuereth".g, Some("sbt-pgp"), None) :: + config.updatesOrDefault.allowPreReleasesOrDefault + val configWithAllowed = config.copy(updates = + config.updatesOrDefault.copy(allowPreReleases = allowedPreReleases.some).some + ) val expected = Right(update.copy(newerVersions = Nel.of("2.0.1-M3".v))) assertEquals(localFilter(update, configWithAllowed), expected) @@ -64,7 +65,9 @@ class FilterAlgTest extends FunSuite { test("ignore update via config updates.ignore") { val update = ("eu.timepit".g % "refined".a % "0.8.0" %> "0.8.1").single val config = RepoConfig(updates = - UpdatesConfig(ignore = List(UpdatePattern(GroupId("eu.timepit"), Some("refined"), None))) + UpdatesConfig(ignore = + List(UpdatePattern(GroupId("eu.timepit"), Some("refined"), None)).some + ).some ) val initialState = MockState.empty @@ -89,8 +92,8 @@ class FilterAlgTest extends FunSuite { Some("scala-compiler"), Some(VersionPattern(exact = Some("2.13.8"))) ) - ) - ) + ).some + ).some ) val expected = Right(update.copy(newerVersions = Nel.of("2.13.7".v))) assertEquals(localFilter(update, config), expected) @@ -109,8 +112,8 @@ class FilterAlgTest extends FunSuite { Some("refined"), Some(VersionPattern(Some("0.8"))) ) - ) - ) + ).some + ).some ) val filtered1 = filterAlg @@ -146,8 +149,8 @@ class FilterAlgTest extends FunSuite { UpdatePattern(GroupId("org.my1"), None, Some(VersionPattern(Some("0.8")))), UpdatePattern(GroupId("org.my2"), None, None), UpdatePattern(GroupId("org.my3"), Some("artifact"), None) - ) - ) + ).some + ).some ) included.foreach { update => @@ -180,8 +183,8 @@ class FilterAlgTest extends FunSuite { Some(update.artifactId.name), Some(VersionPattern(suffix = Some("jre8"))) ) - ) - ) + ).some + ).some ) val filtered = localFilter(update, config) @@ -200,8 +203,8 @@ class FilterAlgTest extends FunSuite { Some(update.artifactId.name), Some(VersionPattern(suffix = Some("jre11"))) ) - ) - ) + ).some + ).some ) val filtered = localFilter(update, config) @@ -220,8 +223,8 @@ class FilterAlgTest extends FunSuite { Some(update.artifactId.name), Some(VersionPattern(Some("7.2."), Some("jre8"))) ) - ) - ) + ).some + ).some ) assertEquals(localFilter(update, config), Left(VersionPinnedByConfig(update))) diff --git a/modules/core/src/test/scala/org/scalasteward/core/update/PruningAlgTest.scala b/modules/core/src/test/scala/org/scalasteward/core/update/PruningAlgTest.scala index 5b5e2066db..1e69473aee 100644 --- a/modules/core/src/test/scala/org/scalasteward/core/update/PruningAlgTest.scala +++ b/modules/core/src/test/scala/org/scalasteward/core/update/PruningAlgTest.scala @@ -191,7 +191,7 @@ class PruningAlgTest extends FunSuite { DependencyInfo("org.scala-lang".g % "scala-library".a % "2.12.14", List("build.sbt")), DependencyInfo("org.scala-lang".g % "scala-library".a % "2.13.5", List("build.sbt")) ), - List(MavenRepository("public", "https://repo5.org/maven/", None, Nil)) + List(MavenRepository("public", "https://repo5.org/maven/", None, None)) ) ) ) diff --git a/project/Dependencies.scala b/project/Dependencies.scala index 73498b413e..2aaa0e6776 100644 --- a/project/Dependencies.scala +++ b/project/Dependencies.scala @@ -9,7 +9,6 @@ object Dependencies { val catsParse = "org.typelevel" %% "cats-parse" % "1.1.0" val circeConfig = "io.circe" %% "circe-config" % "0.10.1" val circeGeneric = "io.circe" %% "circe-generic" % "0.14.10" - val circeGenericExtras = "io.circe" %% "circe-generic-extras" % "0.14.4" val circeLiteral = "io.circe" %% "circe-literal" % circeGeneric.revision val circeParser = "io.circe" %% "circe-parser" % circeGeneric.revision val circeRefined = "io.circe" %% "circe-refined" % "0.15.1" @@ -33,7 +32,7 @@ object Dependencies { val jjwtApi = "io.jsonwebtoken" % "jjwt-api" % "0.12.6" val jjwtImpl = "io.jsonwebtoken" % "jjwt-impl" % jjwtApi.revision val jjwtJackson = "io.jsonwebtoken" % "jjwt-jackson" % jjwtApi.revision - val millMain = "com.lihaoyi" % "mill-main_2.13" % "0.12.4" + val millMain = "com.lihaoyi" % "mill-main_2.13" % "0.12.5" val monocleCore = "dev.optics" %% "monocle-core" % "3.3.0" val munit = "org.scalameta" %% "munit" % "1.0.3" val munitCatsEffect = "org.typelevel" %% "munit-cats-effect" % "2.0.0"