Releases: 7mind/izumi
0.10.10
What is it?
Izumi (jp. 泉水, spring) is an ecosystem of independent libraries and frameworks allowing you to significantly increase productivity of your Scala development.
including the following components:
- distage – Transparent and debuggable Dependency Injection framework for pure FP Scala,
- distage-testkit – Hyper-pragmatic pure FP Test framework. Shares heavy resources globally across all test suites; lets you easily swap implementations of component; uses your effect type for parallelism.
- distage-framework-docker – A distage extension for using docker containers in tests or for local application runs, comes with example Postgres, Cassandra, Kafka & DynamoDB containers.
- LogStage – Automatic structural logs from Scala string interpolations,
- BIO - A typeclass hierarchy for tagless final style with Bifunctor and Trifunctor effect types. Focused on ergonomics and ease of use with zero boilerplate.
- izumi-reflect (moved to zio/izumi-reflect) - Portable, lightweight and kind-polymorphic alternative to
scala-reflect
's Typetag for Scala, Scala.js, Scala Native and (soon) Dotty - IdeaLingua (moved to 7mind/idealingua-v1) – API Definition, Data Modeling and RPC language, optimized for fast prototyping – like gRPC or Swagger, but with a human face. Generates RPC servers and clients for Go, TypeScript, C# and Scala,
- Opinionated SBT plugins (moved to 7mind/sbtgen) – Reduces verbosity of SBT builds and introduces new features – inter-project shared test scopes and BOM plugins (from Maven)
- Percept-Plan-Execute-Repeat (PPER) – A pattern that enables modeling very complex domains and orchestrate deadly complex processes a lot easier than you're used to.
Changes since 0.10.9
distage-testkit:
- Hotfix for a case when if there was an error during planning of a memoization environment, testing was stopped abruptly without correctly reporting the failure
Pull requests merged since 0.10.9:
- distage-testkit: Catch errors from
groupTests
. Skip environment if an exception was thrown (#1081)
0.10.9
What is it?
Izumi (jp. 泉水, spring) is an ecosystem of independent libraries and frameworks allowing you to significantly increase productivity of your Scala development.
including the following components:
- distage – Transparent and debuggable Dependency Injection framework for pure FP Scala,
- distage-testkit – Hyper-pragmatic pure FP Test framework. Shares heavy resources globally across all test suites; lets you easily swap implementations of component; uses your effect type for parallelism.
- distage-framework-docker – A distage extension for using docker containers in tests or for local application runs, comes with example Postgres, Cassandra, Kafka & DynamoDB containers.
- LogStage – Automatic structural logs from Scala string interpolations,
- BIO - A typeclass hierarchy for tagless final style with Bifunctor and Trifunctor effect types. Focused on ergonomics and ease of use with zero boilerplate.
- izumi-reflect (moved to zio/izumi-reflect) - Portable, lightweight and kind-polymorphic alternative to
scala-reflect
's Typetag for Scala, Scala.js, Scala Native and (soon) Dotty - IdeaLingua (moved to 7mind/idealingua-v1) – API Definition, Data Modeling and RPC language, optimized for fast prototyping – like gRPC or Swagger, but with a human face. Generates RPC servers and clients for Go, TypeScript, C# and Scala,
- Opinionated SBT plugins (moved to 7mind/sbtgen) – Reduces verbosity of SBT builds and introduces new features – inter-project shared test scopes and BOM plugins (from Maven)
- Percept-Plan-Execute-Repeat (PPER) – A pattern that enables modeling very complex domains and orchestrate deadly complex processes a lot easier than you're used to.
Changes since 0.10.8
distage-testkit:
- Smart merging of memoization environments by @Caparow (#1072)
distage-testkit
allows designating components asmemoization roots
, these 'memoized' components will then be instantiated just before all tests start and shared between them. In practice, becauseTestConfig
allows overriding component implementations and changing dependency injection parameters, memoized components couldn't be safely shared between tests with differentTestConfig
s; to mitigate that, nearly any difference inTestConfig
fields between tests would result in creation of a separatememoization environment
that would reacquire global resources again. This split of memoization environments meant it was hard to ensure global sharing and easy to break it. e.g. by usingTestConfig#moduleOverrides
to override a component implementation within a suite.- New smart merging strategy solved this brittleness by changing the criteria for splitting into multiple environments. Instead of splitting by the input (TestConfig) in fear of potential changes to the output (the shared components sub-graph), we first compute the dependency injection plan for all
TestConfig
s and then compare the results - if the plans are equal we can safely conclude that the output object graphs will be equal as well and merge the memoization environments. In practice this means that now, inversely, nearly all changes toTestConfig
will NOT cause global component sharing to break, unless they directly affect thememoization root
components OR their dependencies.
- New smart merging strategy solved this brittleness by changing the criteria for splitting into multiple environments. Instead of splitting by the input (TestConfig) in fear of potential changes to the output (the shared components sub-graph), we first compute the dependency injection plan for all
- Added option to specify a fixed level of parallelism for tests, suites and memoization environments in
TestConfig
in addition to unlimited parallelism / sequential only execution. by @Caparow (#1064) - New logs were added to enumerate the memoization environments and the suite classes included in them.
distage-framework-docker:
- Randomized port numbers are now passed into docker containers as environment variables of form
export DISTAGE_PORT_TCP_8080=38553
where 8080 is the exposed port. by @Caparow (#1079) - Added
ElasticMQDocker
for softwaremill/elasticmq as a usage example for port environment variables. by @Caparow (#1079) ContainerConfig#cmd
was renamedContainerConfig#entrypoint
by @Caparow (#1079)- Use default
Docker.ClientConfig
ifdocker
config section is not found instead of failing (#1075) DockerContainerModule
was renamed toDockerSupportModule
(#1070)
distage-extension-config:
- Add
makeConfigWithDefault
,wireConfig
,wireConfigWithDefault
toConfigModuleDef
(#1075)
distage-core:
GCMode
was renamed toRoots
(#1059)- add
DIKey.apply
short-hand (writeDIKey[T]
/DIKey[T]("x")
instead ofDIKey.get[T]
/DIKey.get[T].named("x")
) (#1059)
Pull requests merged since 0.10.8:
- distage-testkit-scalatest: Add ability to alter test discovery configuration in SBT runner (#1080)
- distage-testkit-docker: Pass bind ports into container env. Fix entrypoint builder. (#1079)
- distage-testkit: add config for parallelism level (#1078)
- distage-testkit: Fix merged environments mixing up correct Activations for tests (#1077)
- Remove deprecated method
addImplicit[T](name)
(replaced byaddImplicit[T].named(name)
) (#1076) - remove inter-test dependencies on distage-core/test module to build more modules in parallel (#1064)
- distage-testkit: Add
TestConfig#debugOutput
, renameTestConfig#testRunnerLogLevel
->logLevel
, choose lowestlogLevel
among all tests envs for test runner logs (allow silencing config load log). (#1074) - distage-framework-docker: Use default
Docker.ClientConfig
if dockerconfig section is not found, addmakeConfigWithDefault
,wireConfig
,wireConfigWithDefault
toConfigModuleDef
(#1075) - distage-testkit: Smart memoization group merging. (#1072)
- Add BIOParallel to ZIODIEffectModule
- Use
FiniteDuration
in PortCheck instead (#1071) - distage-framework-docker: rename DockerContainerModule to DockerSupportModule (#1070)
- Rename
PortCheck#timeout
toPortCheck#timeoutMillis
(#1069) - Update zio to 1.0.0-RC19-2 (#1068)
- distage-framework-docker: alias Config object in ContainerDef/NetworkDef to not force imports of ContainerConfig (#1065)
- Rename GCMode to Roots (#1059)
- Update izumi-reflect to 1.0.0-M2 (#1062)
0.10.8
What is it?
Izumi (jp. 泉水, spring) is an ecosystem of independent libraries and frameworks allowing you to significantly increase productivity of your Scala development.
including the following components:
- distage – Transparent and debuggable Dependency Injection framework for pure FP Scala,
- distage-testkit – Hyper-pragmatic pure FP Test framework. Shares heavy resources globally across all test suites; lets you easily swap implementations of component; uses your effect type for parallelism.
- distage-framework-docker – A distage extension for using docker containers in tests or for local application runs, comes with example Postgres, Cassandra, Kafka & DynamoDB containers.
- LogStage – Automatic structural logs from Scala string interpolations,
- BIO - A typeclass hierarchy for tagless final style with Bifunctor and Trifunctor effect types. Focused on ergonomics and ease of use with zero boilerplate.
- izumi-reflect (moved to zio/izumi-reflect) - Portable, lightweight and kind-polymorphic alternative to
scala-reflect
's Typetag for Scala, Scala.js, Scala Native and (soon) Dotty - IdeaLingua (moved to 7mind/idealingua-v1) – API Definition, Data Modeling and RPC language, optimized for fast prototyping – like gRPC or Swagger, but with a human face. Generates RPC servers and clients for Go, TypeScript, C# and Scala,
- Opinionated SBT plugins (moved to 7mind/sbtgen) – Reduces verbosity of SBT builds and introduces new features – inter-project shared test scopes and BOM plugins (from Maven)
- Percept-Plan-Execute-Repeat (PPER) – A pattern that enables modeling very complex domains and orchestrate deadly complex processes a lot easier than you're used to.
Changes since 0.10.7
all:
- Updated to ZIO 1.0.0-RC19 & Scala.js 1.0
BIO:
- New
BIOParallel
typeclass courtesy of @Adriani277 ! parTraverse*
methods have been moved fromBIOAsync
toBIOParallel
- Added
tailRecM
method toBIOMonad
by @Adriani277
The current BIO hierarchy now looks like this:
fundamentals-reflection:
Tag
is now shared withizumi-reflect
, not duplicated infundamentals-reflection
. Replace imports forimport izumi.fundamentals.reflection.Tags.Tag*
withimport izumi.reflect.Tag*
if any.
Pull requests merged since 0.10.7:
- Squash microsite URLs - move
/latest/release/doc/distage/
to/distage/
(#1061) - Update to ZIO RC19 (#1060)
- Add
@open
annotation to fundamentals-platform (#1053) - Silence 2.13 collection warnings (#1027)
- BIO: remove all redundant variances on typeclass instance methods (#1052)
- Split ZIO BIOLocal instance from BIOAsync (#1045)
- Add bio parallel syntax (#1041)
- Added tailRecM to BIOMonad (#1043)
- Fix Throwable errors being wrapped in
BIOBadBranch
inBIORunner#unsafeRun
(#1040) - Add StringRenderingPolicy constructors to RenderingPolicy companion object (#1038)
- Add cats Parallel (#1035)
- Remove methods deprecated since 0.10.3, 0.10.5 (#1037)
- Remove ModuleBase#Self type member, use implicit priority-based scheme instead (#1036)
- Added zipWithPar and derived zipPar, zipParLeft and zipParRight (#1029)
0.10.7
What is it?
Izumi (jp. 泉水, spring) is an ecosystem of independent libraries and frameworks allowing you to significantly increase productivity of your Scala development.
including the following components:
- distage – Transparent and debuggable Dependency Injection framework for pure FP Scala,
- distage-testkit – Hyper-pragmatic pure FP Test framework. Shares heavy resources globally across all test suites; lets you easily swap implementations of component; uses your effect type for parallelism.
- distage-framework-docker – A distage extension for using docker containers in tests or for local application runs, comes with example Postgres, Cassandra, Kafka & DynamoDB containers.
- LogStage – Automatic structural logs from Scala string interpolations,
- BIO - A typeclass hierarchy for tagless final style with Bifunctor and Trifunctor effect types. Focused on ergonomics and ease of use with zero boilerplate.
- izumi-reflect (moved to zio/izumi-reflect) - Portable, lightweight and kind-polymorphic alternative to
scala-reflect
's Typetag for Scala, Scala.js, Scala Native and (soon) Dotty - IdeaLingua (moved to 7mind/idealingua-v1) – API Definition, Data Modeling and RPC language, optimized for fast prototyping – like gRPC or Swagger, but with a human face. Generates RPC servers and clients for Go, TypeScript, C# and Scala,
- Opinionated SBT plugins (moved to 7mind/sbtgen) – Reduces verbosity of SBT builds and introduces new features – inter-project shared test scopes and BOM plugins (from Maven)
- Percept-Plan-Execute-Repeat (PPER) – A pattern that enables modeling very complex domains and orchestrate deadly complex processes a lot easier than you're used to.
Pull requests merged since 0.10.6:
distage-core:
- Make arguments for DIResource.Of/OfCats/OfZIO by-name, to workaround scala/bug#11969 (#1026)
- Allow access to internal state of
Locator
throughLocatorRef
if you really need it (#984)
0.10.6
What is it?
Izumi (jp. 泉水, spring) is an ecosystem of independent libraries and frameworks allowing you to significantly increase productivity of your Scala development.
including the following components:
- distage – Transparent and debuggable Dependency Injection framework for pure FP Scala,
- distage-testkit – Hyper-pragmatic pure FP Test framework. Shares heavy resources globally across all test suites; lets you easily swap implementations of component; uses your effect type for parallelism.
- distage-framework-docker – A distage extension for using docker containers in tests or for local application runs, comes with example Postgres, Cassandra, Kafka & DynamoDB containers.
- LogStage – Automatic structural logs from Scala string interpolations,
- BIO - A typeclass hierarchy for tagless final style with Bifunctor and Trifunctor effect types. Focused on ergonomics and ease of use with zero boilerplate.
- izumi-reflect (moved to zio/izumi-reflect) - Portable, lightweight and kind-polymorphic alternative to
scala-reflect
's Typetag for Scala, Scala.js, Scala Native and (soon) Dotty - IdeaLingua (moved to 7mind/idealingua-v1) – API Definition, Data Modeling and RPC language, optimized for fast prototyping – like gRPC or Swagger, but with a human face. Generates RPC servers and clients for Go, TypeScript, C# and Scala,
- Opinionated SBT plugins (moved to 7mind/sbtgen) – Reduces verbosity of SBT builds and introduces new features – inter-project shared test scopes and BOM plugins (from Maven)
- Percept-Plan-Execute-Repeat (PPER) – A pattern that enables modeling very complex domains and orchestrate deadly complex processes a lot easier than you're used to.
Changes since 0.10.5
distage:
- Can now chain
.aliased
afteraddImplicit
, as inaddImplicit[Monad[F]].aliased[Applicative[F]].aliased[Functor[F]]
- distage-testkit-scalatest: Fix a case when a test could fail to launch in
sbt test
, if it was inherited fromDistageAbstractScalatestSpec
indirectly through a subclass from another library jar.
Pull requests merged since 0.10.5:
0.10.5
What is it?
Izumi (jp. 泉水, spring) is an ecosystem of independent libraries and frameworks allowing you to significantly increase productivity of your Scala development.
including the following components:
- distage – Transparent and debuggable Dependency Injection framework for pure FP Scala,
- distage-testkit – Hyper-pragmatic pure FP Test framework. Shares heavy resources globally across all test suites; lets you easily swap implementations of component; uses your effect type for parallelism.
- distage-framework-docker – A distage extension for using docker containers in tests or for local application runs, comes with example Postgres, Cassandra, Kafka & DynamoDB containers.
- LogStage – Automatic structural logs from Scala string interpolations,
- BIO - A typeclass hierarchy for tagless final style with Bifunctor and Trifunctor effect types. Focused on ergonomics and ease of use with zero boilerplate.
- izumi-reflect (moved to zio/izumi-reflect) - Portable, lightweight and kind-polymorphic alternative to
scala-reflect
's Typetag for Scala, Scala.js, Scala Native and (soon) Dotty - IdeaLingua (moved to 7mind/idealingua-v1) – API Definition, Data Modeling and RPC language, optimized for fast prototyping – like gRPC or Swagger, but with a human face. Generates RPC servers and clients for Go, TypeScript, C# and Scala,
- Opinionated SBT plugins (moved to 7mind/sbtgen) – Reduces verbosity of SBT builds and introduces new features – inter-project shared test scopes and BOM plugins (from Maven)
- Percept-Plan-Execute-Repeat (PPER) – A pattern that enables modeling very complex domains and orchestrate deadly complex processes a lot easier than you're used to.
Pull requests merged since 0.10.4:
v0.10.4
What is it?
Izumi (jp. 泉水, spring) is an ecosystem of independent libraries and frameworks allowing you to significantly increase productivity of your Scala development.
including the following components:
- distage – Transparent and debuggable Dependency Injection framework for pure FP Scala,
- distage-testkit – Hyper-pragmatic pure FP Test framework. Shares heavy resources globally across all test suites; lets you easily swap implementations of component; uses your effect type for parallelism.
- distage-framework-docker – A distage extension for using docker containers in tests or for local application runs, comes with example Postgres, Cassandra, Kafka & DynamoDB containers.
- LogStage – Automatic structural logs from Scala string interpolations,
- BIO - A typeclass hierarchy for tagless final style with Bifunctor and Trifunctor effect types. Focused on ergonomics and ease of use with zero boilerplate.
- izumi-reflect (moved to zio/izumi-reflect) - Portable, lightweight and kind-polymorphic alternative to
scala-reflect
's Typetag for Scala, Scala.js, Scala Native and (soon) Dotty - IdeaLingua (moved to 7mind/idealingua-v1) – API Definition, Data Modeling and RPC language, optimized for fast prototyping – like gRPC or Swagger, but with a human face. Generates RPC servers and clients for Go, TypeScript, C# and Scala,
- Opinionated SBT plugins (moved to 7mind/sbtgen) – Reduces verbosity of SBT builds and introduces new features – inter-project shared test scopes and BOM plugins (from Maven)
- Percept-Plan-Execute-Repeat (PPER) – A pattern that enables modeling very complex domains and orchestrate deadly complex processes a lot easier than you're used to.
Pull requests merged since 0.10.3:
0.10.3
What is it?
Izumi (jp. 泉水, spring) is an ecosystem of independent libraries and frameworks allowing you to significantly increase productivity of your Scala development.
including the following components:
- distage – Transparent and debuggable Dependency Injection framework for pure FP Scala,
- distage-testkit – Hyper-pragmatic pure FP Test framework. Shares heavy resources globally across all test suites; lets you easily swap implementations of component; uses your effect type for parallelism.
- distage-framework-docker – A distage extension for using docker containers in tests or for local application runs, comes with example Postgres, Cassandra, Kafka & DynamoDB containers.
- LogStage – Automatic structural logs from Scala string interpolations,
- BIO - A typeclass hierarchy for tagless final style with Bifunctor and Trifunctor effect types. Focused on ergonomics and ease of use with zero boilerplate.
- izumi-reflect (moved to zio/izumi-reflect) - Portable, lightweight and kind-polymorphic alternative to
scala-reflect
's Typetag for Scala, Scala.js, Scala Native and (soon) Dotty - IdeaLingua (moved to 7mind/idealingua-v1) – API Definition, Data Modeling and RPC language, optimized for fast prototyping – like gRPC or Swagger, but with a human face. Generates RPC servers and clients for Go, TypeScript, C# and Scala,
- Opinionated SBT plugins (moved to 7mind/sbtgen) – Reduces verbosity of SBT builds and introduces new features – inter-project shared test scopes and BOM plugins (from Maven)
- Percept-Plan-Execute-Repeat (PPER) – A pattern that enables modeling very complex domains and orchestrate deadly complex processes a lot easier than you're used to.
Changes since 0.10.3-M2:
distage-framework-docker:
- remote docker connectivity fix
- docker startup timeout added so the tests wouldn't lock forever on bad but running containers
- API: changed type of field
DockerContainer#availablePorts
- it's now a case class containing a NonEmptyList
Pull requests merged since 0.10.3-M2:
0.10.3-M2
What is it?
Izumi (jp. 泉水, spring) is an ecosystem of independent libraries and frameworks allowing you to significantly increase productivity of your Scala development.
including the following components:
- distage – Transparent and debuggable Dependency Injection framework for pure FP Scala,
- distage-testkit – Hyper-pragmatic pure FP Test framework. Shares heavy resources globally across all test suites; lets you easily swap implementations of component; uses your effect type for parallelism.
- distage-framework-docker – A distage extension for using docker containers in tests or for local application runs, comes with example Postgres, Cassandra, Kafka & DynamoDB containers.
- LogStage – Automatic structural logs from Scala string interpolations,
- BIO - A typeclass hierarchy for tagless final style with Bifunctor and Trifunctor effect types. Focused on ergonomics and ease of use with zero boilerplate.
- izumi-reflect (moved to zio/izumi-reflect) - Portable, lightweight and kind-polymorphic alternative to
scala-reflect
's Typetag for Scala, Scala.js, Scala Native and (soon) Dotty - IdeaLingua (moved to 7mind/idealingua-v1) – API Definition, Data Modeling and RPC language, optimized for fast prototyping – like gRPC or Swagger, but with a human face. Generates RPC servers and clients for Go, TypeScript, C# and Scala,
- Opinionated SBT plugins (moved to 7mind/sbtgen) – Reduces verbosity of SBT builds and introduces new features – inter-project shared test scopes and BOM plugins (from Maven)
- Percept-Plan-Execute-Repeat (PPER) – A pattern that enables modeling very complex domains and orchestrate deadly complex processes a lot easier than you're used to.
Pull requests merged since 0.10.3-M1:
- Document
LogstageZIO.log
ZIO env accessor; addLogIO.log
for accessing implicit logger without naming a variable, addedLogBIOEnv.make
&LogBIOEnv.log
for tagless final environment access (#978) - Document
logstage.strict
mode, Correctly findLogstageCodec[T]
instance inlogstage.strict
loggers when argument is an expression (#980) - Add
BIOBracket.guaranteeCase
, add syntax forbracketCase
(#982) - Add
LogIOModule
,LogBIOModule
,LogBIO3Module
indistage-extension-logstage
(#981) - Stop publishing for 2.11 (#979)
0.10.3-M1
What is it?
Izumi (jp. 泉水, spring) is an ecosystem of independent libraries and frameworks allowing you to significantly increase productivity of your Scala development.
including the following components:
- distage – Transparent and debuggable Dependency Injection framework for pure FP Scala,
- distage-testkit – Hyper-pragmatic pure FP Test framework. Shares heavy resources globally across all test suites; lets you easily swap implementations of component; uses your effect type for parallelism.
- distage-framework-docker – A distage extension for using docker containers in tests or for local application runs, comes with example Postgres, Cassandra, Kafka & DynamoDB containers.
- LogStage – Automatic structural logs from Scala string interpolations,
- BIO - A typeclass hierarchy for tagless final style with Bifunctor and Trifunctor effect types. Focused on ergonomics and ease of use with zero boilerplate.
- izumi-reflect (moved to zio/izumi-reflect) - Portable, lightweight and kind-polymorphic alternative to
scala-reflect
's Typetag for Scala, Scala.js, Scala Native and (soon) Dotty - IdeaLingua (moved to 7mind/idealingua-v1) – API Definition, Data Modeling and RPC language, optimized for fast prototyping – like gRPC or Swagger, but with a human face. Generates RPC servers and clients for Go, TypeScript, C# and Scala,
- Opinionated SBT plugins (moved to 7mind/sbtgen) – Reduces verbosity of SBT builds and introduces new features – inter-project shared test scopes and BOM plugins (from Maven)
- Percept-Plan-Execute-Repeat (PPER) – A pattern that enables modeling very complex domains and orchestrate deadly complex processes a lot easier than you're used to.