From 31e4b3df25b966c450d1b1b5ee55dd289d02a7a4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=81ukasz=20Wro=C5=84ski?= Date: Mon, 5 Sep 2022 14:26:06 +0200 Subject: [PATCH 1/6] Dump scala to 3.2.0 --- project/deps.sc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/project/deps.sc b/project/deps.sc index 055f34fefe..4160eda290 100644 --- a/project/deps.sc +++ b/project/deps.sc @@ -6,7 +6,7 @@ import scala.util.Properties object Scala { def scala212 = "2.12.16" def scala213 = "2.13.8" - def scala3 = "3.1.3" + def scala3 = "3.2.0" val allScala2 = Seq(scala213, scala212) val all = allScala2 ++ Seq(scala3) val mainVersions = Seq(scala3, scala213) From 9617d6ffd4a7717b46245fc019101940203e694f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=81ukasz=20Wro=C5=84ski?= Date: Mon, 5 Sep 2022 14:28:50 +0200 Subject: [PATCH 2/6] Fix compilation error after dump scala to 3.2.0 --- .../scala/scala/build/actionable/ActionablePreprocessor.scala | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/modules/options/src/main/scala/scala/build/actionable/ActionablePreprocessor.scala b/modules/options/src/main/scala/scala/build/actionable/ActionablePreprocessor.scala index c88b873f5a..2325838ea2 100644 --- a/modules/options/src/main/scala/scala/build/actionable/ActionablePreprocessor.scala +++ b/modules/options/src/main/scala/scala/build/actionable/ActionablePreprocessor.scala @@ -17,6 +17,7 @@ object ActionablePreprocessor { .map(handler => handler.createActionableDiagnostics(options)) .sequence .left.map(CompositeBuildException(_)) - .map(_.flatten) + .map((v: Seq[Seq[Any]]) => v.flatten) + .asInstanceOf[Either[BuildException, Seq[ActionableDiagnostic]]] } From 021916b110bd108534fce7a8ff3350e8fa2761a0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=81ukasz=20Wro=C5=84ski?= Date: Mon, 5 Sep 2022 14:30:04 +0200 Subject: [PATCH 3/6] Set explicitly version of Scala for ammonite --- project/deps.sc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/project/deps.sc b/project/deps.sc index 4160eda290..00e4924f57 100644 --- a/project/deps.sc +++ b/project/deps.sc @@ -64,7 +64,7 @@ object Deps { def scalaPackager = "0.1.27" def signingCli = "0.1.9" } - def ammonite = ivy"com.lihaoyi:::ammonite:2.5.4-19-cd76521f" + def ammonite = ivy"com.lihaoyi:ammonite_3.1.3:2.5.4-19-cd76521f" def asm = ivy"org.ow2.asm:asm:9.3" // Force using of 2.13 - is there a better way? def bloopConfig = ivy"io.github.alexarchambault.bleep:bloop-config_2.13:1.5.3-sc-1" From ca93e68d5799e53b8c20041d1d18a6b8be7fc51e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=81ukasz=20Wro=C5=84ski?= Date: Mon, 5 Sep 2022 14:33:08 +0200 Subject: [PATCH 4/6] Remove options compile deps in cli-options module --- build.sc | 7 ++----- .../publish/MaybeConfigPasswordOption.scala | 8 ++------ .../commands/publish/PublishParamsOptions.scala | 2 -- .../main/scala/scala/cli/util/ArgParsers.scala | 3 +-- .../scala/cli/commands/publish/Publish.scala | 7 ++++--- .../publish/checks/PgpSecretKeyCheck.scala | 12 +++++++++--- .../scala/cli/commands/util/PublishUtils.scala | 17 +++++++++++++++++ ....scala => ConfigPasswordOptionHelpers.scala} | 11 ++++++----- ...UsingPublishContextualDirectiveHandler.scala | 7 ++++--- .../options/PublishContextualOptions.scala | 6 +++--- .../options/publish/ConfigPasswordOption.scala | 15 +++++++++++++++ 11 files changed, 63 insertions(+), 32 deletions(-) rename modules/{options/src/main/scala/scala/build/options => cli-options/src/main/scala/scala/cli/commands}/publish/MaybeConfigPasswordOption.scala (68%) create mode 100644 modules/cli/src/main/scala/scala/cli/commands/util/PublishUtils.scala rename modules/cli/src/main/scala/scala/cli/util/{MaybeConfigPasswordOptionHelpers.scala => ConfigPasswordOptionHelpers.scala} (63%) create mode 100644 modules/options/src/main/scala/scala/build/options/publish/ConfigPasswordOption.scala diff --git a/build.sc b/build.sc index 1c750f386c..f847bb7d04 100644 --- a/build.sc +++ b/build.sc @@ -595,11 +595,8 @@ trait CliOptions extends SbtModule with ScalaCliPublishModule with ScalaCliCompi Deps.jsoniterMacros ) private def scalaVer = Scala.scala213 - def compileModuleDeps = Seq( - options - ) - def scalaVersion = scalaVer - def repositories = super.repositories ++ customRepositories + def scalaVersion = scalaVer + def repositories = super.repositories ++ customRepositories } trait Cli extends SbtModule with ProtoBuildModule with CliLaunchers diff --git a/modules/options/src/main/scala/scala/build/options/publish/MaybeConfigPasswordOption.scala b/modules/cli-options/src/main/scala/scala/cli/commands/publish/MaybeConfigPasswordOption.scala similarity index 68% rename from modules/options/src/main/scala/scala/build/options/publish/MaybeConfigPasswordOption.scala rename to modules/cli-options/src/main/scala/scala/cli/commands/publish/MaybeConfigPasswordOption.scala index d57c2ca25c..ca6c262053 100644 --- a/modules/options/src/main/scala/scala/build/options/publish/MaybeConfigPasswordOption.scala +++ b/modules/cli-options/src/main/scala/scala/cli/commands/publish/MaybeConfigPasswordOption.scala @@ -1,4 +1,4 @@ -package scala.build.options.publish +package scala.cli.commands.publish import scala.cli.signing.shared.PasswordOption @@ -7,11 +7,7 @@ sealed abstract class MaybeConfigPasswordOption extends Product with Serializabl object MaybeConfigPasswordOption { final case class ActualOption(option: PasswordOption) extends MaybeConfigPasswordOption - final case class ConfigOption(fullName: String) extends MaybeConfigPasswordOption { - private lazy val split = fullName.split('.') - def prefix: Seq[String] = split.dropRight(1).toSeq - def name: String = split.last - } + final case class ConfigOption(fullName: String) extends MaybeConfigPasswordOption def parse(input: String): Either[String, MaybeConfigPasswordOption] = if (input.startsWith("config:")) diff --git a/modules/cli-options/src/main/scala/scala/cli/commands/publish/PublishParamsOptions.scala b/modules/cli-options/src/main/scala/scala/cli/commands/publish/PublishParamsOptions.scala index c05c857df0..d51d7daed7 100644 --- a/modules/cli-options/src/main/scala/scala/cli/commands/publish/PublishParamsOptions.scala +++ b/modules/cli-options/src/main/scala/scala/cli/commands/publish/PublishParamsOptions.scala @@ -1,8 +1,6 @@ package scala.cli.commands.publish import caseapp._ - -import scala.build.options.publish.MaybeConfigPasswordOption import scala.cli.signing.shared.PasswordOption import scala.cli.signing.util.ArgParsers._ import scala.cli.util.ArgParsers._ diff --git a/modules/cli-options/src/main/scala/scala/cli/util/ArgParsers.scala b/modules/cli-options/src/main/scala/scala/cli/util/ArgParsers.scala index c7503a6c29..c5a77f8a82 100644 --- a/modules/cli-options/src/main/scala/scala/cli/util/ArgParsers.scala +++ b/modules/cli-options/src/main/scala/scala/cli/util/ArgParsers.scala @@ -2,8 +2,7 @@ package scala.cli.util import caseapp.core.argparser.ArgParser import caseapp.core.argparser.SimpleArgParser - -import scala.build.options.publish.MaybeConfigPasswordOption +import scala.cli.commands.publish.MaybeConfigPasswordOption import scala.cli.signing.shared.PasswordOption abstract class LowPriorityArgParsers { diff --git a/modules/cli/src/main/scala/scala/cli/commands/publish/Publish.scala b/modules/cli/src/main/scala/scala/cli/commands/publish/Publish.scala index f02e931087..c7ab5df64b 100644 --- a/modules/cli/src/main/scala/scala/cli/commands/publish/Publish.scala +++ b/modules/cli/src/main/scala/scala/cli/commands/publish/Publish.scala @@ -38,6 +38,7 @@ import scala.cli.commands.util.CommonOps.SharedDirectoriesOptionsOps import scala.cli.commands.util.MainClassOptionsUtil._ import scala.cli.commands.util.ScalaCliSttpBackend import scala.cli.commands.util.SharedOptionsUtil._ +import scala.cli.commands.util.PublishUtils._ import scala.cli.commands.{ MainClassOptions, Package => PackageCmd, @@ -54,7 +55,7 @@ import scala.cli.errors.{ } import scala.cli.packaging.Library import scala.cli.publish.BouncycastleSignerMaker -import scala.cli.util.MaybeConfigPasswordOptionHelpers._ +import scala.cli.util.ConfigPasswordOptionHelpers._ object Publish extends ScalaCommand[PublishOptions] { @@ -79,8 +80,8 @@ object Publish extends ScalaCommand[PublishOptions] { docJar = sharedPublish.doc, gpgSignatureId = sharedPublish.gpgKey.map(_.trim).filter(_.nonEmpty), gpgOptions = sharedPublish.gpgOption, - secretKey = publishParams.secretKey, - secretKeyPassword = publishParams.secretKeyPassword, + secretKey = publishParams.secretKey.map(_.configPasswordOptions()), + secretKeyPassword = publishParams.secretKeyPassword.map(_.configPasswordOptions()), repoUser = publishRepo.user, repoPassword = publishRepo.password, repoRealm = publishRepo.realm, diff --git a/modules/cli/src/main/scala/scala/cli/commands/publish/checks/PgpSecretKeyCheck.scala b/modules/cli/src/main/scala/scala/cli/commands/publish/checks/PgpSecretKeyCheck.scala index a62ad7292c..8f55670d33 100644 --- a/modules/cli/src/main/scala/scala/cli/commands/publish/checks/PgpSecretKeyCheck.scala +++ b/modules/cli/src/main/scala/scala/cli/commands/publish/checks/PgpSecretKeyCheck.scala @@ -19,7 +19,8 @@ import scala.cli.commands.util.JvmUtils import scala.cli.config.{ConfigDb, Keys} import scala.cli.errors.MissingPublishOptionError import scala.cli.signing.shared.PasswordOption -import scala.cli.util.MaybeConfigPasswordOptionHelpers._ +import scala.cli.util.ConfigPasswordOptionHelpers._ +import scala.cli.commands.util.PublishUtils._ final case class PgpSecretKeyCheck( options: PublishSetupOptions, @@ -64,7 +65,10 @@ final case class PgpSecretKeyCheck( case Some(secretKey) => val pubKeyOpt = options.publicKey.map(_.get()) val passwordOpt = - value(options.publishParams.secretKeyPassword.map(_.get(configDb())).sequence) + value(options.publishParams.secretKeyPassword + .map(_.configPasswordOptions()) + .map(_.get(configDb())) + .sequence) (pubKeyOpt, Left(secretKey), passwordOpt) case None => value(configDb().get(Keys.pgpSecretKey)) match { @@ -83,6 +87,7 @@ final case class PgpSecretKeyCheck( val res = value { options.publishParams .secretKeyPassword + .map(_.configPasswordOptions()) .map(_.get(configDb())) .sequence } @@ -221,7 +226,8 @@ final case class PgpSecretKeyCheck( Seq(SetSecret( "PUBLISH_SECRET_KEY", secretKey match { - case Left(p) => value(p.get(configDb())).getBytes().map(maybeEncodeBase64) + case Left(p) => + value(p.configPasswordOptions().get(configDb())).getBytes().map(maybeEncodeBase64) case Right(p) => p.getBytes().map(maybeEncodeBase64) }, force = true diff --git a/modules/cli/src/main/scala/scala/cli/commands/util/PublishUtils.scala b/modules/cli/src/main/scala/scala/cli/commands/util/PublishUtils.scala new file mode 100644 index 0000000000..71256407cf --- /dev/null +++ b/modules/cli/src/main/scala/scala/cli/commands/util/PublishUtils.scala @@ -0,0 +1,17 @@ +package scala.cli.commands.util + +import scala.build.options.publish.ConfigPasswordOption +import scala.cli.commands.publish.MaybeConfigPasswordOption + +object PublishUtils { + + implicit class ConfigPasswordOptionsOps(v: MaybeConfigPasswordOption) { + def configPasswordOptions() = + v match { + case MaybeConfigPasswordOption.ActualOption(option) => + ConfigPasswordOption.ActualOption(option) + case MaybeConfigPasswordOption.ConfigOption(fullName) => + ConfigPasswordOption.ConfigOption(fullName) + } + } +} diff --git a/modules/cli/src/main/scala/scala/cli/util/MaybeConfigPasswordOptionHelpers.scala b/modules/cli/src/main/scala/scala/cli/util/ConfigPasswordOptionHelpers.scala similarity index 63% rename from modules/cli/src/main/scala/scala/cli/util/MaybeConfigPasswordOptionHelpers.scala rename to modules/cli/src/main/scala/scala/cli/util/ConfigPasswordOptionHelpers.scala index 9d7c9ebfe2..87b249a026 100644 --- a/modules/cli/src/main/scala/scala/cli/util/MaybeConfigPasswordOptionHelpers.scala +++ b/modules/cli/src/main/scala/scala/cli/util/ConfigPasswordOptionHelpers.scala @@ -1,20 +1,21 @@ package scala.cli.util import scala.build.errors.BuildException -import scala.build.options.publish.MaybeConfigPasswordOption +import scala.cli.commands.publish.MaybeConfigPasswordOption +import scala.build.options.publish.ConfigPasswordOption import scala.cli.config.{ConfigDb, Key} import scala.cli.errors.MissingConfigEntryError import scala.cli.signing.shared.PasswordOption -object MaybeConfigPasswordOptionHelpers { +object ConfigPasswordOptionHelpers { - implicit class MaybeConfigPasswordOptionOps(private val opt: MaybeConfigPasswordOption) + implicit class ConfigPasswordOptionOps(private val opt: ConfigPasswordOption) extends AnyVal { def get(configDb: => ConfigDb): Either[BuildException, PasswordOption] = opt match { - case a: MaybeConfigPasswordOption.ActualOption => + case a: ConfigPasswordOption.ActualOption => Right(a.option) - case c: MaybeConfigPasswordOption.ConfigOption => + case c: ConfigPasswordOption.ConfigOption => val key = new Key.PasswordEntry(c.prefix, c.name) configDb.get(key).flatMap { case None => Left(new MissingConfigEntryError(c.fullName)) diff --git a/modules/directives/src/main/scala/scala/build/preprocessing/directives/UsingPublishContextualDirectiveHandler.scala b/modules/directives/src/main/scala/scala/build/preprocessing/directives/UsingPublishContextualDirectiveHandler.scala index d59dc7b021..a8e0974301 100644 --- a/modules/directives/src/main/scala/scala/build/preprocessing/directives/UsingPublishContextualDirectiveHandler.scala +++ b/modules/directives/src/main/scala/scala/build/preprocessing/directives/UsingPublishContextualDirectiveHandler.scala @@ -3,7 +3,8 @@ package scala.build.preprocessing.directives import scala.build.EitherCps.{either, value} import scala.build.Logger import scala.build.errors.{BuildException, MalformedInputError, UnexpectedDirectiveError} -import scala.build.options.publish.{ComputeVersion, MaybeConfigPasswordOption} +import scala.build.options.publish.ComputeVersion +import scala.build.options.publish.ConfigPasswordOption import scala.build.options.{ BuildOptions, PostBuildOptions, @@ -101,13 +102,13 @@ case object UsingPublishContextualDirectiveHandler extends UsingDirectiveHandler case "secretKey" => PublishContextualOptions(secretKey = Some( - MaybeConfigPasswordOption.ActualOption(value(parsePasswordOption(singleValue.value))) + ConfigPasswordOption.ActualOption(value(parsePasswordOption(singleValue.value))) ) ) case "secretKeyPassword" => PublishContextualOptions( secretKeyPassword = Some( - MaybeConfigPasswordOption.ActualOption(value(parsePasswordOption(singleValue.value))) + ConfigPasswordOption.ActualOption(value(parsePasswordOption(singleValue.value))) ) ) case "user" => diff --git a/modules/options/src/main/scala/scala/build/options/PublishContextualOptions.scala b/modules/options/src/main/scala/scala/build/options/PublishContextualOptions.scala index 68d24fc84f..ca65eeae24 100644 --- a/modules/options/src/main/scala/scala/build/options/PublishContextualOptions.scala +++ b/modules/options/src/main/scala/scala/build/options/PublishContextualOptions.scala @@ -1,6 +1,6 @@ package scala.build.options -import scala.build.options.publish.{ComputeVersion, MaybeConfigPasswordOption, Signer} +import scala.build.options.publish.{ComputeVersion, Signer, ConfigPasswordOption} import scala.cli.signing.shared.PasswordOption /** Publishing-related options, that can have different values locally and on CIs */ @@ -12,8 +12,8 @@ final case class PublishContextualOptions( gpgSignatureId: Option[String] = None, gpgOptions: List[String] = Nil, signer: Option[Signer] = None, - secretKey: Option[MaybeConfigPasswordOption] = None, - secretKeyPassword: Option[MaybeConfigPasswordOption] = None, + secretKey: Option[ConfigPasswordOption] = None, + secretKeyPassword: Option[ConfigPasswordOption] = None, repoUser: Option[PasswordOption] = None, repoPassword: Option[PasswordOption] = None, repoRealm: Option[String] = None, diff --git a/modules/options/src/main/scala/scala/build/options/publish/ConfigPasswordOption.scala b/modules/options/src/main/scala/scala/build/options/publish/ConfigPasswordOption.scala new file mode 100644 index 0000000000..dae6d2bc61 --- /dev/null +++ b/modules/options/src/main/scala/scala/build/options/publish/ConfigPasswordOption.scala @@ -0,0 +1,15 @@ +package scala.build.options.publish + +import scala.cli.signing.shared.PasswordOption + +/** Can be either a [[PasswordOption]], or something like "config:…" pointing at a config entry */ +sealed abstract class ConfigPasswordOption extends Product with Serializable + +object ConfigPasswordOption { + final case class ActualOption(option: PasswordOption) extends ConfigPasswordOption + final case class ConfigOption(fullName: String) extends ConfigPasswordOption { + private lazy val split = fullName.split('.') + def prefix: Seq[String] = split.dropRight(1).toSeq + def name: String = split.last + } +} From cd0ad415ce082a4b85013138de7f1670535c3464 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=81ukasz=20Wro=C5=84ski?= Date: Mon, 5 Sep 2022 14:53:10 +0200 Subject: [PATCH 5/6] Update to scala 3.2.0 in docs --- website/docs/reference/scala-versions.md | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/website/docs/reference/scala-versions.md b/website/docs/reference/scala-versions.md index 595314c071..22e21bb6fd 100644 --- a/website/docs/reference/scala-versions.md +++ b/website/docs/reference/scala-versions.md @@ -6,11 +6,12 @@ sidebar_position: 7 Currently, Scala CLI supports Scala 3, 2.13 and 2.12. The table below lists the last supported version of Scala in Scala CLI. If you want to use a newer Scala version, it is recommended to update scala-cli. -| Scala CLI versions | Scala 3 | Scala 2.13 | Scala 2.12 | -|---------------------|:-----------------:|------------:|-----------:| -| 0.0.9 | 3.0.2 | 2.13.7 | 2.12.7 | -| 0.1.0 - 0.1.3 | 3.1.1 | 2.13.8 | 2.12.15 | -| 0.1.4 - 0.1.7 | 3.1.2 | 2.13.8 | 2.12.15 | -| 0.1.8 | 3.1.2 | 2.13.8 | 2.12.16 | -| 0.1.9 - current | 3.1.3 | 2.13.8 | 2.12.16 | +| Scala CLI versions | Scala 3 | Scala 2.13 | Scala 2.12 | +|--------------------|:-------:|------------:|-----------:| +| 0.0.9 | 3.0.2 | 2.13.7 | 2.12.7 | +| 0.1.0 - 0.1.3 | 3.1.1 | 2.13.8 | 2.12.15 | +| 0.1.4 - 0.1.7 | 3.1.2 | 2.13.8 | 2.12.15 | +| 0.1.8 | 3.1.2 | 2.13.8 | 2.12.16 | +| 0.1.9 - 0.1.12 | 3.1.3 | 2.13.8 | 2.12.16 | +| 0.1.13 - current | 3.2.0 | 2.13.8 | 2.12.16 | From a2060604d6285e9973cf38cf90f3b1aaaf8217b9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=81ukasz=20Wro=C5=84ski?= Date: Mon, 5 Sep 2022 15:35:55 +0200 Subject: [PATCH 6/6] Read minor latest scala version from constants --- build.sc | 16 ++++++++++++++++ .../scala/build/tastylib/TastyVersions.scala | 8 +++----- 2 files changed, 19 insertions(+), 5 deletions(-) diff --git a/build.sc b/build.sc index f847bb7d04..55917c5afe 100644 --- a/build.sc +++ b/build.sc @@ -1034,7 +1034,23 @@ class TastyLib(val crossScalaVersion: String) extends ScalaCliCrossSbtModule else Nil } ) + def constantsFile = T.persistent { + val dir = T.dest / "constants" + val dest = dir / "Constants.scala" + val code = + s"""package scala.build.tastylib.internal + | + |/** Build-time constants. Generated by mill. */ + |object Constants { + | def latestSupportedScala = "${Scala.defaultInternal}" + |} + |""".stripMargin + if (!os.isFile(dest) || os.read(dest) != code) + os.write.over(dest, code, createFolders = true) + PathRef(dir) + } + def generatedSources = super.generatedSources() ++ Seq(constantsFile()) } object `local-repo` extends LocalRepo { diff --git a/modules/tasty-lib/src/main/scala/scala/build/tastylib/TastyVersions.scala b/modules/tasty-lib/src/main/scala/scala/build/tastylib/TastyVersions.scala index 5c58d20cd1..cda48d7e18 100644 --- a/modules/tasty-lib/src/main/scala/scala/build/tastylib/TastyVersions.scala +++ b/modules/tasty-lib/src/main/scala/scala/build/tastylib/TastyVersions.scala @@ -1,15 +1,13 @@ package scala.build.tastylib +import scala.build.tastylib.internal.Constants + object TastyVersions { // Every time tasty version is updated, please update LatestSupportedScala as well! - final val MajorVersion: Int = 28 - final val MinorVersion: Int = 1 - final val ExperimentalVersion: Int = 0 - object LatestSupportedScala { final val MajorVersion: Int = 3 - final val MinorVersion: Int = 1 + final val MinorVersion: Int = Constants.latestSupportedScala.split('.')(1).toInt } def shouldRunPreprocessor(