Skip to content

Commit fdf6fa5

Browse files
authored
Merge pull request #1634 from lwronski/fix-pre-release-version
Suggest to update only to stable version
2 parents 778ce6c + 1d09b6f commit fdf6fa5

File tree

3 files changed

+73
-10
lines changed

3 files changed

+73
-10
lines changed

modules/build/src/test/scala/scala/build/tests/ActionableDiagnosticTests.scala

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -105,4 +105,66 @@ class ActionableDiagnosticTests extends munit.FunSuite {
105105
}
106106
}
107107

108+
test("actionable actions suggest update only to stable version") {
109+
val testInputs = TestInputs(
110+
os.rel / "Foo.scala" ->
111+
s"""//> using lib "test-org::test-name-1:1.0.6"
112+
|
113+
|object Hello extends App {
114+
| println("Hello")
115+
|}
116+
|""".stripMargin
117+
)
118+
// create fake repository which contains hardcoded versions [1.0.6, 1.0.7, 1.0.7-M1] of test-name-1 library
119+
// scala-cli should skip non-stable version 1.0.7-M1 and suggest update 1.0.7
120+
val repoTmpDir = os.temp.dir(prefix = "scala-cli-tests-actionable-diagnostic-repo")
121+
os.write(
122+
repoTmpDir / "test-org" / "test-name-1_3" / "maven-metadata.xml",
123+
"""<?xml version="1.0" encoding="UTF-8"?>
124+
|<metadata>
125+
| <groupId>test-org</groupId>
126+
| <artifactId>test-name-1_3</artifactId>
127+
| <versioning>
128+
| <latest>1.0.7-M1</latest>
129+
| <release>1.0.7-M1</release>
130+
| <versions>
131+
| <version>1.0.6</version>
132+
| <version>1.0.7</version>
133+
| <version>1.0.7-M1</version>
134+
| </versions>
135+
| </versioning>
136+
|</metadata>
137+
|""".stripMargin,
138+
createFolders = true
139+
)
140+
os.write(
141+
repoTmpDir / "test-org" / "test-name-1_3" / "1.0.6" / "test-name-1_3-1.0.6.pom",
142+
"""<?xml version='1.0' encoding='UTF-8'?>
143+
|<project>
144+
| <groupId>test-org</groupId>
145+
| <artifactId>test-name-1_3</artifactId>
146+
| <version>1.0.6</version>
147+
|</project>""".stripMargin,
148+
createFolders = true
149+
)
150+
val withRepoBuildOptions = baseOptions.copy(
151+
classPathOptions =
152+
baseOptions.classPathOptions.copy(extraRepositories = Seq(s"file:${repoTmpDir.toString}"))
153+
)
154+
testInputs.withBuild(withRepoBuildOptions, buildThreads, None, actionableDiagnostics = true) {
155+
(_, _, maybeBuild) =>
156+
val build = maybeBuild.orThrow
157+
158+
val updateDiagnostics =
159+
ActionablePreprocessor.generateActionableDiagnostics(build.options).orThrow
160+
161+
val testLibDiagnosticOpt = updateDiagnostics.collectFirst {
162+
case diagnostic: ActionableDependencyUpdateDiagnostic => diagnostic
163+
}
164+
expect(testLibDiagnosticOpt.nonEmpty)
165+
val testLibDiagnostic = testLibDiagnosticOpt.get
166+
167+
expect(testLibDiagnostic.newVersion == "1.0.7")
168+
}
169+
}
108170
}

modules/options/src/main/scala/scala/build/actionable/ActionableDependencyHandler.scala

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,14 @@
11
package scala.build.actionable
22

33
import coursier.Versions
4+
import coursier.parse.RepositoryParser
45
import dependency._
56

67
import scala.build.EitherCps.{either, value}
78
import scala.build.Positioned
89
import scala.build.actionable.ActionableDiagnostic._
910
import scala.build.actionable.errors.ActionableHandlerError
10-
import scala.build.errors.BuildException
11+
import scala.build.errors.{BuildException, RepositoryFormatError}
1112
import scala.build.internal.Util._
1213
import scala.build.options.BuildOptions
1314
import scala.build.options.ScalaVersionUtil.versionsWithTtl0
@@ -40,12 +41,15 @@ case object ActionableDependencyHandler
4041
buildOptions: BuildOptions,
4142
dependency: AnyDependency
4243
): Either[BuildException, String] = either {
43-
val scalaParams = value(buildOptions.scalaParams)
44-
val cache = buildOptions.finalCache
45-
val csModule = value(dependency.toCs(scalaParams)).module
44+
val scalaParams = value(buildOptions.scalaParams)
45+
val cache = buildOptions.finalCache
46+
val csModule = value(dependency.toCs(scalaParams)).module
47+
val repositories = value(buildOptions.finalRepositories)
4648

4749
value {
48-
cache.versionsWithTtl0(csModule).versions.latest(coursier.core.Latest.Release).toRight {
50+
cache.versionsWithTtl0(csModule, repositories).versions.latest(
51+
coursier.core.Latest.Stable
52+
).toRight {
4953
new ActionableHandlerError(s"No latest version found for ${dependency.render}")
5054
}
5155
}

modules/options/src/main/scala/scala/build/options/ScalaVersionUtil.scala

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -46,12 +46,9 @@ object ScalaVersionUtil {
4646
repositories: Seq[Repository] = Seq.empty
4747
): Versions.Result =
4848
cache.withTtl(0.seconds).logger.use {
49-
val versionsWithModule = Versions(cache)
49+
Versions(cache)
5050
.withModule(module)
51-
val versionsWithRepositories =
52-
if repositories.nonEmpty then versionsWithModule.withRepositories(repositories)
53-
else versionsWithModule
54-
versionsWithRepositories
51+
.addRepositories(repositories: _*)
5552
.result()
5653
.unsafeRun()(cache.ec)
5754
}

0 commit comments

Comments
 (0)