Skip to content

Releases: dogmatiq/ferrite

Version 1.7.0

01 May 05:43
v1.7.0
604d59d

Choose a tag to compare

Added

  • Added TextEncoded() and TextEncodedP() builders for environment variables with types that implement encoding.TextMarshaler and encoding.TextUnmarshaler.

Fixed

  • Environment variable values are now re-resolved when the environment changes, allowing t.Setenv() to work naturally in tests without any special helpers.
  • Preconditions (e.g., RelevantIf(), RelevantWhen()) are now re-evaluated on every call to Availability(), reflecting changes to dependent variables immediately.

Version 1.6.1

06 Apr 22:08
v1.6.1
128ef12

Choose a tag to compare

Fixed

  • Fixed heading anchor links in generated Markdown documentation to use lowercase slugs, matching GitHub's heading slug behavior.

Version 1.6.0

06 Apr 21:59
v1.6.0
74046eb

Choose a tag to compare

Added

  • Added WithExample() to all builder types, allowing custom example values to be included in generated documentation.
  • Added URLBuilder.WithConstraint() to allow user-defined validation of URL variables.

Changed

  • Variables from imported registries are now listed after variables from the default registry in generated documentation and validation output. Within each registry, variables are still sorted alphabetically by name.

Version 1.5.1

10 Apr 20:45
v1.5.1
29b61a0

Choose a tag to compare

Changed

  • Improved generated documentation for environment variables that use RelevantIf() or ReleventWhen() options.

Version 1.5.0

10 Apr 01:04
v1.5.0
840b5cd

Choose a tag to compare

Added

  • Added ReleventWhen() option, which conditionally enables an environment variable when another variable has a specific value.

Changed

The following changes are technically not backwards compatible from a Go perspective, but under normal usage (as per the examples) they do not actually alter the usage of the Ferrite API:

  • Changed the VariableSet to accept a type parameter for the value produced.
  • Changed ReleventIf(), SeeAlso() and SupersededBy() to accept a type parameter for the value produced.

Version 1.4.0

16 Aug 23:12
v1.4.0
c40bb23

Choose a tag to compare

Added

  • Added FileBuilder.WithMustExist() constraint.
  • Added Dir() builder for directory paths.

Changed

  • Bumped minimum Go version to v1.22.

Version 1.3.0

14 Mar 04:40
v1.3.0
769b1f6

Choose a tag to compare

Added

  • Added StringBuilder.WithMinimumLength(), WithMaximumLength(), WithLength().
  • Added BytesBuilder.WithMinimumLength(), WithMaximumLength(), WithLength().

Fixed

  • Fixed wording of error message when a variable exceeds the maximum length.

Version 1.2.1

13 Aug 23:59
v1.2.1
3a3d6be

Choose a tag to compare

Changed

  • Dropped support for Go v1.19, which reached end-of-life on 2023-08-08
  • Removed use of the slices and maps packages from golang.org/x/exp. These package are not versioned and as such breaking changes can cause conflicts with other dependencies. The experimental constraints package is still used, with the expectation that these will always remain valid for use as type parameter constraints.

Version 1.2.0

11 Jun 21:27
v1.2.0
4a4f23a

Choose a tag to compare

Added

  • Added Registry and NewRegistry()
  • Added RegistryOption and WithDocumentationURL()

Changed

  • Changed WithRegistry() to accept a ferrite.Registry instead of the experimental variable.Registry type
  • Passing WithRegistry() to Init() is now additive, instead of replacing the default registry

Removed

  • Removed the experimental maybe and variable sub-packages

Fixed

  • Prevent registration of multiple environment variables with the same name

Version 1.1.0

06 Jun 02:50
v1.1.0
c603cf6

Choose a tag to compare

Added

  • Added Binary() and BinaryAs() builders for binary variables
  • Added variable.LengthLimited schema for values that have minimum or maximum lengths

Changed

  • variable.String now implements the new LengthLimited interface
  • Rename the variable.[Min|Max]LengthError.String to ViolatedSchema and change its type to LengthLimited

Removed

  • Removed "platform" examples from generated documentation. These are too opinionated and organization-specific to be included in every project's documentation. Instead, we will provide different export modes that can be used to generate Docker/Kubernetes/etc configurations, similar to the existing export/dotenv mode.