Skip to content

Commit

Permalink
Support ZIO 2 (#735)
Browse files Browse the repository at this point in the history
* Support ZIO 2

* Fix docs

* scalafix

* Fix compilation errors and improve Dotty

* Fix error in CoproductTest

* Increase heap

* Reduce samples

* Fix

* Purge unsafeRun and ignore two formatting difference failures

* Exclude compiler-crashing shapeless test from 2.11, 2.12; simplify workflow

* Exclude a 2.12 compiler crasher

* Remove 2.12 compiler crasher

* Try again

* Third time's the charm
  • Loading branch information
jdegoes authored Jan 14, 2022
1 parent 8ce4d16 commit 4c06c23
Show file tree
Hide file tree
Showing 82 changed files with 935 additions and 955 deletions.
30 changes: 18 additions & 12 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
name: CI

env:
JDK_JAVA_OPTIONS: '-XX:+PrintCommandLineFlags -Xmx2G' # JDK_JAVA_OPTIONS is _the_ env. variable to use for modern Java
JVM_OPTS: '-XX:+PrintCommandLineFlags -Xmx2G' # for Java 8 only (sadly, it is not modern enough for JDK_JAVA_OPTIONS)
JDK_JAVA_OPTIONS: '-XX:+PrintCommandLineFlags -Xmx4G' # JDK_JAVA_OPTIONS is _the_ env. variable to use for modern Java
JVM_OPTS: '-XX:+PrintCommandLineFlags -Xmx4G' # for Java 8 only (sadly, it is not modern enough for JDK_JAVA_OPTIONS)

on:
pull_request:
Expand Down Expand Up @@ -48,7 +48,7 @@ jobs:
fail-fast: false
matrix:
java: ['[email protected]', '[email protected]']
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 @@ -61,15 +61,21 @@ jobs:
java-version: ${{ matrix.java }}
- name: Cache scala dependencies
uses: coursier/cache-action@v6
- name: Run tests
if: ${{ !startsWith(matrix.scala, '3.0.') && !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' }}
run: sbt ++${{ matrix.scala }}! testDotty
- name: Run JS tests
if: ${{ matrix.platform == 'JS' && !startsWith(matrix.scala, '3.') }}
run: sbt ++${{ matrix.scala }}! testJS
- name: Run 2.11 JVM tests
if: ${{ matrix.platform == 'JVM' && startsWith(matrix.scala, '2.11') }}
run: sbt ++${{ matrix.scala }}! testJVM211
- name: Run 2.12 JVM tests
if: ${{ matrix.platform == 'JVM' && startsWith(matrix.scala, '2.12') }}
run: sbt ++${{ matrix.scala }}! testJVM212
- name: Run 2.13 JVM tests
if: ${{ matrix.platform == 'JVM' && startsWith(matrix.scala, '2.13') }}
run: sbt ++${{ matrix.scala }}! testJVM213
- name: Run 3.x JVM tests
if: ${{ matrix.platform == 'JVM' && startsWith(matrix.scala, '3.') }}
run: sbt ++${{ matrix.scala }}! testJVM3x

ci:
runs-on: ubuntu-20.04
Expand Down
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ project/project/
.bloop
.metals
.sbtopts
null
project/.sbt
project/travis-deploy-key
project/secrets.tar.xz
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,15 +4,15 @@ import com.amazonaws.services.simplesystemsmanagement.{
AWSSimpleSystemsManagement,
AWSSimpleSystemsManagementClientBuilder
}
import zio._
import zio.config.{ReadError, _}
import zio.{Has, Layer, Tag, Task}

object ParameterStoreConfig {
def from[A](
configDescriptor: ConfigDescriptor[A],
basePath: String,
getClient: Task[AWSSimpleSystemsManagement] = Task(AWSSimpleSystemsManagementClientBuilder.defaultClient())
)(implicit tag: Tag[A]): Layer[ReadError[String], Has[A]] =
)(implicit tag: Tag[A], ev: IsNotIntersection[A]): Layer[ReadError[String], A] =
ZConfig.fromConfigDescriptor(
configDescriptor from ParameterStoreConfigSource.from(basePath, getClient)
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ object ParameterStoreConfigSource {
val effect: MemoizableManagedReader =
ZManaged.succeed {
ZManaged
.fromEffect(
.fromZIO(
getClient.flatMap { ssm =>
val request =
new GetParametersByPathRequest()
Expand All @@ -29,7 +29,7 @@ object ParameterStoreConfigSource {
.withWithDecryption(true)

ZIO
.effect(ssm.getParametersByPath(request).getParameters)
.attempt(ssm.getParametersByPath(request).getParameters)
.map(_.asScala.toList)
.map { list =>
ConfigSource
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,16 +5,16 @@ import com.amazonaws.services.simplesystemsmanagement.{
AWSSimpleSystemsManagementClientBuilder
}
import izumi.reflect.Tag
import zio._
import zio.config._
import zio.{Has, Layer, Task}

package object parameterstore {
implicit class FromConfigTypesafe(c: ZConfig.type) {
def fromParameterStore[A](
configDescriptor: ConfigDescriptor[A],
basePath: String,
getClient: Task[AWSSimpleSystemsManagement] = Task(AWSSimpleSystemsManagementClientBuilder.defaultClient())
)(implicit tag: Tag[A]): Layer[ReadError[String], Has[A]] =
)(implicit tag: Tag[A], ev: IsNotIntersection[A]): Layer[ReadError[String], A] =
ParameterStoreConfig.from(configDescriptor, basePath, getClient)
}

Expand Down
27 changes: 9 additions & 18 deletions build.sbt
Original file line number Diff line number Diff line change
Expand Up @@ -53,32 +53,24 @@ addCommandAlias(
";zioConfigJS/test"
)
addCommandAlias(
"testJVM",
";zioConfigJVM/test;zioConfigTypesafeJVM/test;zioConfigShapelessJVM/test;zioConfigDerivationJVM/test;zioConfigYamlJVM/test;zioConfigGenJVM/test;zioConfigRefinedJVM/test;zioConfigMagnoliaJVM/test;examplesJVM/test;zioConfigTypesafeMagnoliaTestsJVM/test;zioConfigAwsJVM/test"
)
addCommandAlias(
"testNative",
";zioConfigNative/compile"
)
addCommandAlias(
"testJS211",
";zioConfigJS/test"
"testJVM211",
";zioConfigJVM/test;zioConfigTypesafeJVM/test;zioConfigDerivationJVM/test;zioConfigYamlJVM/test;zioConfigAwsJVM/test"
)
addCommandAlias(
"testJVM211",
";zioConfigJVM/test;zioConfigTypesafeJVM/test;zioConfigShapelessJVM/test;zioConfigDerivationJVM/test;zioConfigYamlJVM/test;zioConfigAwsJVM/test"
"testJVM212",
";zioConfigJVM/test;zioConfigTypesafeJVM/test;zioConfigDerivationJVM/test;zioConfigYamlJVM/test;examplesJVM/test;zioConfigAwsJVM/test"
)
addCommandAlias(
"testNative211",
";zioConfigNative/compile"
"testJVM213",
";zioConfigJVM/test;zioConfigTypesafeJVM/test;zioConfigShapelessJVM/test;zioConfigDerivationJVM/test;zioConfigYamlJVM/test;zioConfigGenJVM/test;zioConfigRefinedJVM/test;zioConfigMagnoliaJVM/test;examplesJVM/test;zioConfigTypesafeMagnoliaTestsJVM/test;zioConfigAwsJVM/test"
)
addCommandAlias(
"testDotty",
"testJVM3x",
";zioConfigJVM/test;zioConfigTypesafeJVM/test;zioConfigDerivationJVM/test;zioConfigYamlJVM/test;zioConfigAwsJVM/test"
)

lazy val awsVersion = "1.12.137"
lazy val zioVersion = "1.0.9"
lazy val zioVersion = "2.0.0-RC1"
lazy val magnoliaVersion = "0.17.0"
lazy val refinedVersion = "0.9.28"
lazy val pureconfigVersion = "0.16.0"
Expand Down Expand Up @@ -124,8 +116,7 @@ lazy val scala212projects = scala211projects ++ Seq[ProjectReference](
zioConfigCatsJVM,
zioConfigRefinedJVM,
zioConfigMagnoliaJVM,
examplesJVM,
zioConfigTypesafeMagnoliaTestsJVM
examplesJVM
)

lazy val scala213projects = scala212projects ++ Seq[ProjectReference](zioConfigScalazJVM)
Expand Down
67 changes: 34 additions & 33 deletions core/js/src/main/scala/zio/config/ConfigStringModule.scala
Original file line number Diff line number Diff line change
@@ -1,8 +1,7 @@
package zio.config

import com.github.ghik.silencer.silent
import zio.system.System
import zio.{Has, Layer, Tag, ZLayer}
import zio._

import java.time.{Instant, LocalDate, LocalDateTime, LocalTime}
import java.util.{Properties, UUID}
Expand Down Expand Up @@ -428,7 +427,7 @@ trait ConfigStringModule extends ConfigModule with ConfigSourceModule {
*/
def uuid(path: String): ConfigDescriptor[UUID] = nested(path)(uuid)

val zioDuration: ConfigDescriptor[zio.duration.Duration] =
val zioDuration: ConfigDescriptor[java.time.Duration] =
sourceDesc(ConfigSource.empty, PropertyType.ZioDurationType) ?? "value of type duration"

/**
Expand All @@ -448,7 +447,7 @@ trait ConfigStringModule extends ConfigModule with ConfigSourceModule {
*
* }}}
*/
def zioDuration(path: String): ConfigDescriptor[zio.duration.Duration] = nested(path)(zioDuration)
def zioDuration(path: String): ConfigDescriptor[java.time.Duration] = nested(path)(zioDuration)

}

Expand Down Expand Up @@ -556,7 +555,7 @@ trait ConfigStringModule extends ConfigModule with ConfigSourceModule {
configDescriptor: ConfigDescriptor[A],
keyDelimiter: Option[Char] = None,
valueDelimiter: Option[Char] = None
)(implicit tag: Tag[A]): Layer[ReadError[String], Has[A]] =
)(implicit tag: Tag[A], ev: IsNotIntersection[A]): Layer[ReadError[String], A] =
fromConfigDescriptor(
configDescriptor from ConfigSource.fromCommandLineArgs(args, keyDelimiter, valueDelimiter)
)
Expand Down Expand Up @@ -589,7 +588,7 @@ trait ConfigStringModule extends ConfigModule with ConfigSourceModule {
keyDelimiter: Option[Char] = None,
valueDelimiter: Option[Char] = None,
filterKeys: String => Boolean = _ => true
)(implicit tag: Tag[A]): Layer[ReadError[String], Has[A]] =
)(implicit tag: Tag[A], ev: IsNotIntersection[A]): Layer[ReadError[String], A] =
fromConfigDescriptor(
configDescriptor from ConfigSource.fromMap(
map,
Expand Down Expand Up @@ -625,7 +624,7 @@ trait ConfigStringModule extends ConfigModule with ConfigSourceModule {
source: String,
keyDelimiter: Option[Char] = None,
filterKeys: String => Boolean = _ => true
)(implicit tag: Tag[A]): Layer[ReadError[String], Has[A]] =
)(implicit tag: Tag[A], ev: IsNotIntersection[A]): Layer[ReadError[String], A] =
fromConfigDescriptor(
configDescriptor from ConfigSource.fromMultiMap(map, source, keyDelimiter, filterKeys)
)
Expand Down Expand Up @@ -658,7 +657,7 @@ trait ConfigStringModule extends ConfigModule with ConfigSourceModule {
keyDelimiter: Option[Char] = None,
valueDelimiter: Option[Char] = None,
filterKeys: String => Boolean = _ => true
)(implicit tag: Tag[A]): Layer[ReadError[String], Has[A]] =
)(implicit tag: Tag[A], ev: IsNotIntersection[A]): Layer[ReadError[String], A] =
fromConfigDescriptor(
configDescriptor from ConfigSource.fromProperties(
properties,
Expand Down Expand Up @@ -696,7 +695,7 @@ trait ConfigStringModule extends ConfigModule with ConfigSourceModule {
keyDelimiter: Option[Char] = None,
valueDelimiter: Option[Char] = None,
filterKeys: String => Boolean = _ => true
)(implicit tag: Tag[A]): Layer[ReadError[String], Has[A]] =
)(implicit tag: Tag[A], ev: IsNotIntersection[A]): Layer[ReadError[String], A] =
fromConfigDescriptor(
configDescriptor from ConfigSource
.fromPropertiesFile(filePath, keyDelimiter, valueDelimiter, filterKeys)
Expand Down Expand Up @@ -731,17 +730,18 @@ trait ConfigStringModule extends ConfigModule with ConfigSourceModule {
keyDelimiter: Option[Char] = None,
valueDelimiter: Option[Char] = None,
filterKeys: String => Boolean = _ => true
)(implicit tag: Tag[A]): ZLayer[System, ReadError[String], Has[A]] =
ZLayer.fromServiceM((system: System.Service) =>
read(
configDescriptor from ConfigSource.fromSystemEnv(
keyDelimiter,
valueDelimiter,
filterKeys,
system
)
)
)
)(implicit tag: Tag[A], ev: IsNotIntersection[A]): ZLayer[System, ReadError[String], A] =
(for {
system <- ZIO.service[System]
result <- read(
configDescriptor from ConfigSource.fromSystemEnv(
keyDelimiter,
valueDelimiter,
filterKeys,
system
)
)
} yield result).toLayer

/**
* Consider providing keyDelimiter if you need to consider flattened config as a nested config.
Expand Down Expand Up @@ -770,22 +770,23 @@ trait ConfigStringModule extends ConfigModule with ConfigSourceModule {
keyDelimiter: Option[Char] = None,
valueDelimiter: Option[Char] = None,
filterKeys: String => Boolean = _ => true
)(implicit tag: Tag[A]): ZLayer[System, ReadError[String], Has[A]] =
ZLayer.fromServiceM((system: System.Service) =>
read(
configDescriptor from ConfigSource.fromSystemProps(
keyDelimiter,
valueDelimiter,
filterKeys,
system
)
)
)
)(implicit tag: Tag[A], ev: IsNotIntersection[A]): ZLayer[System, ReadError[String], A] =
(for {
system <- ZIO.service[System]
result <- read(
configDescriptor from ConfigSource.fromSystemProps(
keyDelimiter,
valueDelimiter,
filterKeys,
system
)
)
} yield result).toLayer

private[config] def fromConfigDescriptor[A](
configDescriptor: ConfigDescriptor[A]
)(implicit tag: Tag[A]): Layer[ReadError[K], Has[A]] =
ZLayer.fromEffect(read(configDescriptor))
)(implicit tag: Tag[A], ev: IsNotIntersection[A]): Layer[ReadError[K], A] =
ZLayer.fromZIO(read(configDescriptor))
}

}
Loading

0 comments on commit 4c06c23

Please sign in to comment.