From 61bf5b701be2114891099d1447986d0451fa088e 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] Remove options compile deps in cli-options module --- build.sc | 7 ++----- .../publish/MaybeConfigPasswordOption.scala | 8 ++------ .../publish/PublishParamsOptions.scala | 2 -- .../scala/scala/cli/util/ArgParsers.scala | 3 +-- .../scala/cli/commands/publish/Publish.scala | 7 ++++--- .../publish/checks/PgpSecretKeyCheck.scala | 12 ++++++++--- .../cli/commands/util/PublishUtils.scala | 20 +++++++++++++++++++ ...cala => ConfigPasswordOptionHelpers.scala} | 11 +++++----- ...ingPublishContextualDirectiveHandler.scala | 7 ++++--- .../options/PublishContextualOptions.scala | 6 +++--- .../publish/ConfigPasswordOption.scala | 15 ++++++++++++++ 11 files changed, 66 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..30ed488222 --- /dev/null +++ b/modules/cli/src/main/scala/scala/cli/commands/util/PublishUtils.scala @@ -0,0 +1,20 @@ +package scala.cli.commands.util + +import java.io.File +import scala.build.options.publish.ConfigPasswordOption +import scala.build.{Os, Position, Positioned} +import scala.cli.commands.SharedOptions +import scala.cli.commands.publish.MaybeConfigPasswordOption +import scala.cli.commands.publish.MaybeConfigPasswordOption.* +import scala.util.Properties + +object PublishUtils { + + implicit class SharedOptionsOps(v: MaybeConfigPasswordOption) { + def configPasswordOptions() = + v match { + case ActualOption(option) => ConfigPasswordOption.ActualOption(option) + case 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 + } +}