Skip to content

Commit

Permalink
zio-config-zio-aws for 2.x (#927)
Browse files Browse the repository at this point in the history
* zio-config-zio-aws for 2.x

* Upgrade Scala 3 version to match zio-aws's
  • Loading branch information
vigoo committed Sep 6, 2022
1 parent 2b76747 commit 10087c3
Show file tree
Hide file tree
Showing 6 changed files with 129 additions and 8 deletions.
6 changes: 3 additions & 3 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ jobs:
fail-fast: false
matrix:
java: ['adopt@1.8', 'adopt@1.11']
scala: ['2.11.12', '2.12.13', '2.13.5', '3.0.2']
scala: ['2.11.12', '2.12.13', '2.13.5', '3.1.0']
platform: ['JS', 'JVM', 'Native']
steps:
- name: Checkout current branch
Expand All @@ -62,13 +62,13 @@ jobs:
- name: Cache scala dependencies
uses: coursier/cache-action@v6
- name: Run tests
if: ${{ !startsWith(matrix.scala, '3.0.') && !startsWith(matrix.scala, '2.11.') }}
if: ${{ !startsWith(matrix.scala, '3.1.') && !startsWith(matrix.scala, '2.11.') }}
run: sbt ++${{ matrix.scala }}! test${{ matrix.platform }}
- name: Run 2.11 tests
if: ${{ startsWith(matrix.scala, '2.11.') }}
run: sbt ++${{ matrix.scala }}! test${{ matrix.platform }}211
- name: Run dotty tests
if: ${{ startsWith(matrix.scala, '3.0.') && matrix.platform == 'JVM' }}
if: ${{ startsWith(matrix.scala, '3.1.') && matrix.platform == 'JVM' }}
run: sbt ++${{ matrix.scala }}! testDotty

ci:
Expand Down
28 changes: 25 additions & 3 deletions build.sbt
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@ addCommandAlias(
)
addCommandAlias(
"testJVM",
";zioConfigJVM/test;zioConfigTypesafeJVM/test;zioConfigShapelessJVM/test;zioConfigDerivationJVM/test;zioConfigYamlJVM/test;zioConfigGenJVM/test;zioConfigRefinedJVM/test;zioConfigMagnoliaJVM/test;examplesJVM/test;zioConfigTypesafeMagnoliaTestsJVM/test;zioConfigAwsJVM/test"
";zioConfigJVM/test;zioConfigTypesafeJVM/test;zioConfigShapelessJVM/test;zioConfigDerivationJVM/test;zioConfigYamlJVM/test;zioConfigGenJVM/test;zioConfigRefinedJVM/test;zioConfigMagnoliaJVM/test;examplesJVM/test;zioConfigTypesafeMagnoliaTestsJVM/test;zioConfigAwsJVM/test;zioConfigZioAwsJVM/test"
)
addCommandAlias(
"testNative",
Expand All @@ -74,10 +74,11 @@ addCommandAlias(
)
addCommandAlias(
"testDotty",
";zioConfigJVM/test;zioConfigTypesafeJVM/test;zioConfigDerivationJVM/test;zioConfigYamlJVM/test;zioConfigAwsJVM/test"
";zioConfigJVM/test;zioConfigTypesafeJVM/test;zioConfigDerivationJVM/test;zioConfigYamlJVM/test;zioConfigAwsJVM/test;zioConfigZioAwsJVM/test"
)

lazy val awsVersion = "1.12.137"
lazy val zioAwsVersion = "4.17.104.2"
lazy val zioVersion = "1.0.9"
lazy val magnoliaVersion = "0.17.0"
lazy val refinedVersion = "0.9.28"
Expand Down Expand Up @@ -125,7 +126,8 @@ lazy val scala212projects = scala211projects ++ Seq[ProjectReference](
zioConfigRefinedJVM,
zioConfigMagnoliaJVM,
examplesJVM,
zioConfigTypesafeMagnoliaTestsJVM
zioConfigTypesafeMagnoliaTestsJVM,
zioConfigZioAwsJVM
)

lazy val scala213projects = scala212projects ++ Seq[ProjectReference](zioConfigScalazJVM)
Expand All @@ -134,6 +136,7 @@ lazy val scala3projects =
Seq[ProjectReference](
zioConfigJVM,
zioConfigAwsJVM,
zioConfigZioAwsJVM,
zioConfigCatsJVM,
zioConfigDerivationJVM,
zioConfigEnumeratumJVM,
Expand Down Expand Up @@ -216,6 +219,25 @@ lazy val zioConfigAws = crossProject(JVMPlatform)
lazy val zioConfigAwsJVM = zioConfigAws.jvm
.settings(dottySettings)

lazy val zioConfigZioAws = crossProject(JVMPlatform)
.in(file("zio-aws"))
.settings(stdSettings("zio-config-zio-aws"))
.settings(crossProjectSettings)
.settings(dottySettings)
.settings(
libraryDependencies ++= Seq(
"io.github.vigoo" %% "zio-aws-ssm" % zioAwsVersion,
"dev.zio" %% "zio-streams" % zioVersion,
"dev.zio" %% "zio-test" % zioVersion % Test,
"dev.zio" %% "zio-test-sbt" % zioVersion % Test
),
testFrameworks := Seq(new TestFramework("zio.test.sbt.ZTestFramework"))
)
.dependsOn(zioConfig % "compile->compile;test->test")

lazy val zioConfigZioAwsJVM = zioConfigZioAws.jvm
.settings(dottySettings)

lazy val zioConfigRefined = crossProject(JVMPlatform)
.in(file("refined"))
.settings(stdSettings("zio-config-refined"))
Expand Down
4 changes: 2 additions & 2 deletions project/BuildHelper.scala
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ object BuildHelper {
val Scala211: String = versions("2.11")
val Scala212: String = versions("2.12")
val Scala213: String = versions("2.13")
val ScalaDotty: String = versions("3.0")
val ScalaDotty: String = versions("3.1")

val SilencerVersion = "1.7.6"

Expand Down Expand Up @@ -196,7 +196,7 @@ object BuildHelper {
List("2.12", "2.11+", "2.12+", "2.11-2.12", "2.12-2.13", "2.x")
case Some((2, 13)) =>
List("2.13", "2.11+", "2.12+", "2.13+", "2.12-2.13", "2.x")
case Some((3, 0)) =>
case Some((3, _)) =>
List("dotty", "2.11+", "2.12+", "2.13+", "3.x")
case _ =>
List()
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package zio.config.aws.parameterstore

import io.github.vigoo.zioaws.ssm.Ssm
import zio.config.{ReadError, _}
import zio.{Has, Tag, ZIO, ZLayer}

object ParameterStoreConfig {
def from[A](
configDescriptor: ConfigDescriptor[A],
basePath: String
)(implicit tag: Tag[A]): ZLayer[Ssm, ReadError[String], Has[A]] =
ZConfig.fromConfigDescriptorM(
ZIO.service[Ssm.Service].map { ssm =>
configDescriptor from ParameterStoreConfigSource.from(basePath, ssm)
}
)
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
package zio.config.aws.parameterstore

import io.github.vigoo.zioaws.ssm.Ssm
import io.github.vigoo.zioaws.ssm.model.{GetParametersByPathRequest, Parameter}
import zio.config.{PropertyTreePath, ReadError, _}
import zio.{Chunk, ZIO, ZManaged}

import ConfigSource._

object ParameterStoreConfigSource {
def from(
basePath: String,
ssm: Ssm.Service
): ConfigSource = {
val effect: MemoizableManagedReader =
ZManaged.succeed {
ZManaged
.fromEffect(
ssm
.getParametersByPath(
GetParametersByPathRequest(path = basePath, recursive = Some(true), withDecryption = Some(true))
)
.runCollect
.map { result =>
ConfigSource
.getPropertyTreeFromMap(
convertParameterListToMap(result, basePath),
keyDelimiter = Some('/')
)
}
.mapBoth(
throwable => ReadError.SourceError(throwable.toString): ReadError[String],
tree => (path: PropertyTreePath[String]) => ZIO.succeed(tree.at(path))
)
)
}

ConfigSource
.Reader(
Set(ConfigSourceName("parameter-store")),
effect
)
}

private[config] def convertParameterListToMap(
list: Chunk[Parameter.ReadOnly],
basePath: String
): Map[String, String] = {
val str = s"$basePath/"
list.flatMap { parameter =>
parameter.nameValue.flatMap { name =>
parameter.valueValue.map { value =>
name.replaceFirst(str, "") -> value
}
}
}.toMap
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
package zio.config.aws

import io.github.vigoo.zioaws.ssm.Ssm
import izumi.reflect.Tag
import zio.config._
import zio.{Has, ZLayer}

package object parameterstore {
implicit class FromConfigTypesafe(c: ZConfig.type) {
def fromParameterStore[A](
configDescriptor: ConfigDescriptor[A],
basePath: String
)(implicit tag: Tag[A]): ZLayer[Ssm, ReadError[String], Has[A]] =
ParameterStoreConfig.from(configDescriptor, basePath)
}

implicit class FromConfigSourceTypesafe(c: ConfigSource.type) {
def fromParameterStore(
basePath: String,
ssm: Ssm.Service
): ConfigSource =
ParameterStoreConfigSource.from(basePath, ssm)
}
}

0 comments on commit 10087c3

Please sign in to comment.