Skip to content

0.10.9

Compare
Choose a tag to compare
@neko-kai neko-kai released this 24 May 23:01
· 1704 commits to develop since this release

Izumi

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:

  1. distage – Transparent and debuggable Dependency Injection framework for pure FP Scala,
  2. 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.
  3. 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.
  4. LogStage – Automatic structural logs from Scala string interpolations,
  5. BIO - A typeclass hierarchy for tagless final style with Bifunctor and Trifunctor effect types. Focused on ergonomics and ease of use with zero boilerplate.
  6. 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
  7. 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,
  8. 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)
  9. 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 as memoization roots, these 'memoized' components will then be instantiated just before all tests start and shared between them. In practice, because TestConfig allows overriding component implementations and changing dependency injection parameters, memoized components couldn't be safely shared between tests with different TestConfigs; to mitigate that, nearly any difference in TestConfig fields between tests would result in creation of a separate memoization 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 using TestConfig#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 TestConfigs 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 to TestConfig will NOT cause global component sharing to break, unless they directly affect the memoization root components OR their dependencies.
  • 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 renamed ContainerConfig#entrypoint by @Caparow (#1079)
  • Use default Docker.ClientConfig if docker config section is not found instead of failing (#1075)
  • DockerContainerModule was renamed to DockerSupportModule (#1070)

distage-extension-config:

  • Add makeConfigWithDefault, wireConfig, wireConfigWithDefault to ConfigModuleDef (#1075)

distage-core:

  • GCMode was renamed to Roots (#1059)
  • add DIKey.apply short-hand (write DIKey[T]/DIKey[T]("x") instead of DIKey.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 by addImplicit[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, rename TestConfig#testRunnerLogLevel->logLevel, choose lowest logLevel 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, add makeConfigWithDefault, wireConfig, wireConfigWithDefault to ConfigModuleDef (#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 to PortCheck#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)