Skip to content

Commit b7cbaa4

Browse files
authored
Merge pull request #253 from Philippus/keep-credentials-option
Add option to keep credentials for updating private dependencies
2 parents ae6e300 + d074f97 commit b7cbaa4

File tree

5 files changed

+44
-7
lines changed

5 files changed

+44
-7
lines changed

modules/core/src/main/scala/org/scalasteward/core/application/Cli.scala

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,8 @@ object Cli {
3737
whitelist: List[String] = Nil,
3838
readOnly: List[String] = Nil,
3939
disableSandbox: Boolean = false,
40-
doNotFork: Boolean = false
40+
doNotFork: Boolean = false,
41+
keepCredentials: Boolean = false
4142
)
4243

4344
def create[F[_]](implicit F: ApplicativeThrowable[F]): Cli[F] = new Cli[F] {

modules/core/src/main/scala/org/scalasteward/core/application/Config.scala

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,8 @@ final case class Config(
5454
whitelistedDirectories: List[String],
5555
readOnlyDirectories: List[String],
5656
disableSandbox: Boolean,
57-
doNotFork: Boolean
57+
doNotFork: Boolean,
58+
keepCredentials: Boolean
5859
) {
5960
def gitHubUser[F[_]](implicit F: Sync[F]): F[AuthenticatedUser] =
6061
util.uri.fromString[F](gitHubApiHost).flatMap { url =>
@@ -81,7 +82,8 @@ object Config {
8182
whitelistedDirectories = args.whitelist,
8283
readOnlyDirectories = args.readOnly,
8384
disableSandbox = args.disableSandbox,
84-
doNotFork = args.doNotFork
85+
doNotFork = args.doNotFork,
86+
keepCredentials = args.keepCredentials
8587
)
8688
}
8789
}

modules/core/src/main/scala/org/scalasteward/core/sbt/SbtAlg.scala

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ import better.files.File
2020
import cats.Monad
2121
import cats.implicits._
2222
import io.chrisdavenport.log4cats.Logger
23+
import org.scalasteward.core.application.Config
2324
import org.scalasteward.core.dependency.Dependency
2425
import org.scalasteward.core.dependency.parser.parseDependencies
2526
import org.scalasteward.core.github.data.Repo
@@ -44,6 +45,7 @@ trait SbtAlg[F[_]] {
4445
object SbtAlg {
4546
def create[F[_]](
4647
implicit
48+
config: Config,
4749
fileAlg: FileAlg[F],
4850
logger: Logger[F],
4951
processAlg: ProcessAlg[F],
@@ -85,7 +87,12 @@ object SbtAlg {
8587
override def getUpdatesForRepo(repo: Repo): F[List[Update.Single]] =
8688
for {
8789
repoDir <- workspaceAlg.repoDir(repo)
88-
cmd = sbtCmd(setCredentialsToNil, dependencyUpdates, reloadPlugins, dependencyUpdates)
90+
cmd = {
91+
if (config.keepCredentials)
92+
sbtCmd(dependencyUpdates, reloadPlugins, dependencyUpdates)
93+
else
94+
sbtCmd(setCredentialsToNil, dependencyUpdates, reloadPlugins, dependencyUpdates)
95+
}
8996
lines <- exec(cmd, repoDir)
9097
} yield parser.parseSingleUpdates(lines)
9198

modules/core/src/test/scala/org/scalasteward/core/mock/MockContext.scala

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,8 @@ object MockContext {
1919
whitelistedDirectories = Nil,
2020
readOnlyDirectories = Nil,
2121
disableSandbox = false,
22-
doNotFork = false
22+
doNotFork = false,
23+
keepCredentials = false
2324
)
2425

2526
implicit val fileAlg: MockFileAlg = new MockFileAlg

modules/core/src/test/scala/org/scalasteward/core/sbt/SbtAlgTest.scala

Lines changed: 28 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
11
package org.scalasteward.core.sbt
22

33
import better.files.File
4+
import org.scalasteward.core.application.Config
45
import org.scalasteward.core.github.data.Repo
5-
import org.scalasteward.core.mock.MockContext.sbtAlg
6-
import org.scalasteward.core.mock.MockState
6+
import org.scalasteward.core.mock.MockContext._
7+
import org.scalasteward.core.mock.{MockContext, MockState}
78
import org.scalatest.{FunSuite, Matchers}
89

910
class SbtAlgTest extends FunSuite with Matchers {
@@ -47,4 +48,29 @@ class SbtAlgTest extends FunSuite with Matchers {
4748
)
4849
)
4950
}
51+
52+
test("getUpdatesForRepo keeping credentials") {
53+
val repo = Repo("fthomas", "refined")
54+
implicit val config: Config = MockContext.config.copy(keepCredentials = true)
55+
val sbtAlgKeepingCredentials = SbtAlg.create
56+
val state =
57+
sbtAlgKeepingCredentials.getUpdatesForRepo(repo).runS(MockState.empty).unsafeRunSync()
58+
59+
state shouldBe MockState.empty.copy(
60+
commands = Vector(
61+
List("rm", "/tmp/ws/fthomas/refined/.jvmopts"),
62+
List("rm", "/tmp/ws/fthomas/refined/.sbtopts"),
63+
List(
64+
"firejail",
65+
"--whitelist=/tmp/ws/fthomas/refined",
66+
"sbt",
67+
"-batch",
68+
"-no-colors",
69+
";dependencyUpdates;reload plugins;dependencyUpdates"
70+
),
71+
List("restore", "/tmp/ws/fthomas/refined/.sbtopts"),
72+
List("restore", "/tmp/ws/fthomas/refined/.jvmopts")
73+
)
74+
)
75+
}
5076
}

0 commit comments

Comments
 (0)