Skip to content

Releases: 7mind/izumi

1.0.1

14 Jan 13:16
Compare
Choose a tag to compare

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 1.0.0

distage

  • Fixed performance issues and a bug in handling of weak set bindings in compile-time checker

LogStage

  • Add extension methods .fail & .terminate to LogIO2, they support a pattern of logging an error message and immediately failing or terminating with the same message (#1351)

Pull Requests merged since 1.0.0

  • Add LogIO2#fail, LogIO2#terminate utility methods (#1351)
  • Qualify names in IzArtifactMaterializer (#1339)
  • Disable searching roles by subtype if -Dizumi.distage.roles.reflection=false, reduces launch time by omitting unnecessary work (#1349)

1.0.0

14 Dec 21:49
Compare
Choose a tag to compare

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.

We're happy to present Izumi 1.0 release! There are a lot of features included this release that we have not anticipated we'd be able to include in 1.0, and even some that we did not consider possible to actually implement in Scala. It happened to be quite delayed because of that, but we believe that in the end it was worth the wait.

Key highlights: Compile-time checks, GraalVM/Native Image support and a massive improvement of BIO hierarchy.

Compatibilty note: there are multiple renames for all kinds of entities in this release, old names are preserved as deprecated aliases to ease migration from 1.0.

Thanks to all our contributors and especially @Caparow, @coreyoconnor and @VladPodilnyk!

Major Features since 0.10.18

distage

Compile-time safety

Total compile-time safety lands for distage in 1.0, although previously we thought it was impossible to implement!

The new compile-time checks provide fast feedback during development and remove the need to launch tests or launch application itself or write special tests to check the correctness of wiring.

For users of distage-extension-config, config parsing will be verified at compile-time against the default config files in resource folder. There is an option to disable config checking or check against a specific resource file instead of defaults.

Checking is not enabled out-of-the-box, you must enable it by adding a “trigger” object in test scope. This object will emit compile-time errors for any issues or omissions in your ModuleDefs. It will recompile itself as necessary to provide feedback during development.

See “Compile-time checks” chapter for details.

Mutators

Since 1.0 you may add "mutator" bindings to your module definitions. Mutators apply functions to an object before it's visible to others in the object graph, they may also request additional dependencies for use in the function. Mutators provide a way to do partial overrides or slight modifications of some existing component without redefining it fully.

Motivating example: Suppose you're using a config case class in your distage-testkit tests, and for one of the test you want to use a modified value for one of the fields in it. Before 1.0 you'd have to duplicate the config binding into a new key and apply the modifying function to it:

import distage.{Id, ModuleDef}
import distage.config.ConfigModuleDef
import izumi.distage.testkit.TestConfig
import izumi.distage.testkit.scalatest.SpecIdentity

class MyTest extends SpecIdentity {
  override def config: TestConfig = super.config.copy(
    moduleOverrides = new ConfigModuleDef {
      makeConfig[Config]("config.myconfig").named("duplicate")
      make[Config].from {
        (thatConfig: Config @Id("duplicate")) =>
          modifyingFunction(thatConfig)
      }
    }
  )
}

Now instead of overriding the entire binding, we may use a mutator:

class MyTest extends SpecIdentity {
  override def config: TestConfig = super.config.copy(
    moduleOverrides = new ModuleDef {
      modify[Config](modifyingFunction(_))
    }
  )
}

See “Mutator Bindings” chapter for details.

Out-of-the-box typeclass instances

Before 1.0, it was a major chore to have to add bindings for typeclass instances such as Sync[F] and ContextShift[F] for your effect type to use them in DI. While pre-made modules existed in distage-framework library, they were hard to discover and had to be manually included into your own modules.

Since 1.0, instances for BIO & cats-effect typeclass hierarchies are added automatically when you specify the effect type for your wiring and can be summoned in the object graph without adding them manually, out of the box.

See “Out-of-the-box typeclass instances” chapter for details.

distage-testkit

Multi-Level Memoization

distage-testkit's memoization mechanism allows you to share heavy components, such as docker containers managed by distage-framework-docker, globally across all test suites, or across a defined subset of test suites. The scope of sharing is derived implicitly from parameters set in test suite's TestConfig, test suites with compatible TestConfig's — compatible in a way that executing them will result in identical memoized components — will acquire those memoized components only once and share them.

This scheme had a weakness in that incompatible TestConfigs would cause a re-creation of all memoized instances, even very heavy ones.

Since 1.0, memoization has been generalized to support unlimited nesting, with new strategy, the memoization environment may be manually partitioned into levels and if a change in TestConfig does not cause a divergence at one of the levels, the nested levels may then fully reuse the object sub-graph of all parent levels that do not diverge.

For clarity, the memoization tree structure is printed before test runs. For example, a memoization tree of a project with the following test suites:

class SameLevel_1_WithActivationsOverride extends Spec3[ZIO] {
  override protected def config: TestConfig = {
    super.config.copy(
        memoizationRoots = Map(
          1 -> Set(DIKey[MemoizedInstance], DIKey[MemoizedLevel1]),
          2 -> Set(DIKey[MemoizedLevel2]),
        ),
    )
  }
}

class SameLevel_1_2_WithAdditionalLevel3 extends SameLevel_1_WithActivationsOverride {
  override protected def config: TestConfig = {
    super.config.copy(
      memoizationRoots =
        super.config.memoizationRoots ++
        Set(DIKey[MemoizedLevel3]),
    )
  }
}

May be visualized as follows:

Memoization Tree Log during tests

See "Memoization Levels" chapter for details.

distage-testkit documentation

@coreyoconnor has contributed a brand new, shining microsite page for distage-testkit! It contains both reference material and a tutorial to get started, so check it out on "distage-testkit" section!

distage-framework-docker

You can now set Docker.ContainerConfig alwaysPull field to false to disable pulling docker images for the container by @vilunov (#1300)

BIO

BIO is an hierarchy of typeclasses for tagless final style with bifunctor and trifunctor effects. In 1.0 it has been majorly restructured.

First, all classes have been renamed according to a new naming convention:

  • Bifunctor class naming pattern has changed from BIO<name> to <name>2. e.g. BIOFunctor is now Functor2, BIO class is now IO2
  • Trifunctor class naming pattern has changed from BIO<name>3 to <name>3, e.g. BIOMonadAsk3 is now MonadAsk3, BIO3 is now IO3

When using old names, deprecation warnings will guide towards the new names.

Second, Parallel*, Concurrent* and Temporal* capabilities now do not require IO* (an analogue of cats-effect's Sync), enablin...

Read more

0.10.18

20 Aug 20:09
Compare
Choose a tag to compare

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.17:

distage-framework:

  • Improved compatibility with Graal Native Image compiler by @pshirshov
  • Added non-reflective way to define roles via RoleModuleDef & RoleModuleDef#makeRole. Reflective auto-detection of Roles (automatic addition of all inheritors of RoleService/RoleTask to roles list) is now deprecated. Please declare roles explicitly via RoleModuleDef:
    def rolesModule[F[+_, +_]: TagKK]: ModuleDef = new RoleModuleDef {
      makeRole[LeaderboardRole[F]]
    }
  • Fixed config loader priority: all explicit configs override all reference configs, instead of role references having a higher priority than common config (#1175)

distage-core:

  • Now full stacktraces are printed by default for all errors during creation of the object graph. This can be disabled by overriding key Boolean @Id("izumi.distage.interpreter.full-stacktraces") in BootstrapModules or setting system property -Dizumi.distage.interpreter.full-stacktraces=false (#1192)
  • Backported new ModuleDef ops from 0.11.0 - --(Set), filter, filterBindings, tagged, removeTags, untagged, removed tagwiseMerge

distage-framework-docker:

distage-testkit:

  • Added activation axis qualifier to TestConfig#forcedRoots and TestConfig#memoizationRoots. Now it's possible to specify memoization Roots for multiple Activation configurations at once within a single TestConfig. By @Caparow (#1153)

fundamentals-bio

  • Added BIOExit.map/.leftMap/.flatMap & BIO typeclass instances for BIOExit (#1190)

All changes merged since 0.10.17:

  • Make printing full stacktraces in PlanInterpreter configurable via BoostrapModules & system properties (#1192)
  • Backport new ModuleDef ops from 0.11 - --(Set), filter, filterBindings, tagged, removeTags, untagged, remove tagwiseMerge
  • Change axis keys activation rules (#1191)
  • Add BIOExit.map/.leftMap/.flatMap (#1190)
  • Update zio to 1.0.1 (#1187)
  • Print full exception stacktrace wherever possible instead of just getMessage (#1186)
  • Add activation axis to forced and memoization roots. (#1153)
  • Update magnolia to 0.17.0 (#1180)
  • Fix config loader priority: all explicit configs override all reference configs, instead of role references having a higher priority than common config (#1175)
  • distage-framework-docker: add default parameters and default convenience object to PostgresFlyWayDocker
  • distage-framework-docker: Postgres with FlyWay container. (#1170)
  • Update scalatest to 3.2.1 (#1173)
  • native-image fixes & workarounds

0.10.17

05 Aug 21:56
Compare
Choose a tag to compare

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.16

logstage:

Multiplie large contributions to LogStage by @catostrophe, thank you!

  • Add .raw namespace to loggers by @catostrophe.
    This allows using a .raw form for LogStage loggers that does not process input string interpolations. Also added logstage.Message.raw method for easier creation of Message's (#1165)
  • add contramap to LogstageCodec by @catostrophe (#1168)
  • logstage-rendering-circe: make JSON key overridable by @tuleism (#1167)
  • added LogstageCodec for Throwable by @pshirshov

distage-framework-docker:

  • Move bundled docker container definitions from examples package to bundled (#1155)
  • Better docker diagnostics by @pshirshov (#1132)

distage-testkit:

  • Handle Throwable#getMessage == null case in DistageScalatestReporter (#1136)

fundamentals-bio

  • Fix AttachBIOParallel. BIOParallel methods would only be attached to F summoner if a BIOMonad or larger constraint was present, now it's enough for BIOFunctor constraint to be present, as for other attachments (#1141)

all:

Pull requests merged since 0.10.16:

  • Update to ZIO 1.0, ZIO cats interop 2.1.4.0 (#1171)
  • logstage-rendering-circe: make JSON key overridable (#1167)
  • add contramap to LogstageCodec (#1168)
  • [Logstage] Add raw namespace to loggers (#1165)
  • Move bundled docker container definitions from examples package to bundled (#1155)
  • Update cats-effect to 2.1.4 (#1144)
  • Fix AttachBIOParallel (#1141)
  • Feature/better docker diagnostics (#1132)
  • Handle Throwable#getMessage == null case in DistageScalatestReporter (#1136)
  • Update scalafmt-core to 2.6.2 (#1134)

0.10.16

03 Jul 20:08
Compare
Choose a tag to compare

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.15

all:

  • Update to latest dependencies - ZIO RC21-2, pureconfig 0.13.0, Scala 2.13.3 (#1131)

0.10.15

25 Jun 15:08
Compare
Choose a tag to compare

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.14

distage-framework-docker:

  • Fixed compatibility with remote docker configurations by @pshirshov

0.10.14

19 Jun 13:28
Compare
Choose a tag to compare

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.12

distage-framework-docker:

  • Added shiny new documentation microsite for distage docker module! - https://izumi.7mind.io/distage/distage-framework-docker - by @coreyoconnor (#1057)
  • Added ability to reuse 'one-shot', non-daemonic, docker containers - e.g. flyway migrations - within a JVM. If a docker container enables reuse AND exposes no ports, it will be started only once within and will not be restarted upon exit, for this JVM. by @Caparow (#1104)
  • Switch to asynchronous file locks in docker reuse mechanism by @Caparow (#1117)

distage-testkit:

other:

Pull requests merged since 0.10.12:

  • Add async methods to DIEffectAsync, use async file lock for file mutex. (#1117)
  • distage-testkit: Add TestConfig#bootstrapFactory configuration (#1116)
  • distage-docker documentation (#1057)
  • Fix docker port label names. (#1112)
  • distage-docker: reuse exited containers (#1104)
  • Add Tinkoff to users (#1107)

0.10.12

06 Jun 10:03
Compare
Choose a tag to compare

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.11

distage-framework-docker:

  • Added support for dynamic container ports - allows passing randomly generated port to the container and then exposing that same port, it may be easier to configure some containers that way than by port remapping. by @Caparow (#1097)
  • Hotfixed JDK 1.8 compatbility broken in 0.10.11 (#1100)

Pull requests merged since 0.10.10:

  • Enable docker tests on CI (#1101)
  • Fix Java 1.8 compatibility for PostreSqlProtocolCheck, run CI under JDK 8 (#1100)
  • Better availablePorts API, postgresSqlPortcheck API (#1099)
  • distage-docker: dynamic ports (#1097)

0.10.11

05 Jun 12:59
Compare
Choose a tag to compare

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.10

distage-framework-docker:

  • Added support for custom docker container readiness checks by @Caparow (#1094)
  • Bundled PostgresDocker container now uses a custom check that suceeds only once SQL protocol is truly available (postgres docker re-launches twice during normal bootup - first time to setup schema and users, making port check insufficient to assert readiness - postgres connection will fail if connected during the first boot-up) by @Caparow

Pull requests merged since 0.10.10:

  • Fix port mapping in bundled Kafka docker (#1096)
  • distage-docker: custom readiness checks (#1094)
  • distage-framework-docker: add defaults to Docker.ClientConfig constructor (#1085)
  • Request SourceFilePosition in distage-testkit-scalatest instead of full CodePosition (#1084)
  • Update zio to 1.0.0-RC20 (#1082)

0.10.10

25 May 16:39
Compare
Choose a tag to compare

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.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)