All Versions
33
Latest Version
Avg Release Cycle
88 days
Latest Release
-

Changelog History
Page 1

  • v1.9.0 Changes

    • ⬇️ Drop support for Elixir 1.10. Elixir >= 1.11 is now required. Dropping support for older versions of Elixir simply means that this package is no longer tested with them in CI, and that compatibility issues are not considered bugs.
    • 😌 Relax supported versions of postgrex to allow ~> 0.16.
    • Use Application.compile_env/3 to read the persistence config at compile time, which is used to configure the DB table name when using the Ecto persistence adapter (among other things). This fixes another instance of the issue where users of the package would change the config after compilation and observe unexpected inconsistencies and errors. (pull/130)
    • Redis adapters: add support to configure Redis Sentinel. Please see the Redix docs for more details. (Thanks parkdoyeon, pull/107.)
    • More precise conditional checks when deciding whether Ecto files should be compiled. (pull/140)
    • Improved documentation for running the package in a custom supervision tree, when using releases. (Thanks zaid, pull/139)
  • v1.8.1 Changes

    • 🔒 Lock postgrex dependency to < 0.16. Version 0.16 requires Elixir 1.11 (changelog) and it doesn't compile with Elixit 1.10, which FunWithFlags still supports.
  • v1.8.0 Changes

    • ➕ Add support for Elixir 1.13. Drop support for Elixir 1.9. Elixir >= 1.10 is now required. Dropping support for older versions of Elixir simply means that this package is no longer tested with them in CI, and that compatibility issues are not considered bugs.
    • Removed all uses of defdelegate/2. They caused some references to configured modules (that can change according to the config) to be reified at compile time, which lead to unexpected behaviour. They've been replaced with plain old function definitions that do the same job. (Thanks connorlay, pull/111.)
    • ⚡️ Local dev: Update the config for the library to use Config instead of the deprecated Mix.Config. For the avoidance of doubt: this has no effect when using the package in your projects, because the config/*.exs files are not present in the bundles downloaded from Hex.pm.
    • Use Application.compile_env/3 to read the cache configuration at compile-time, which is used to define a module attribute (therefore, set at compile-time). That part of the config is compiled into a module attribute for performance reasons, and it has been a long standing issue because users of the package would get confused by their config changes not being reflected in an already compiled application (link to relevant section in previous version of the readme). Now, if the relevant configuration changes, users will get a clear error.
    • Improve error handling in different layers of the package. From the persistence adapters all the way to the public functions of the top-level module. In practice, this means that some situations that would have caused a MatchError now instead will bubble up an error tuple. Most importantly, this does not affect the signature or behaviour of the FunWithFlags.enabled?/2 function, which continues to return a simple boolean. (pull/120)
    • Typespec improvements. These include new typespecs for previously unspecced functions, amended typespecs for the new error tuples that are now bubbled up (see previous point) and fixed typespec that incorrectly ignored a returned error tuple. (pull/120)
    • The typespecs for the FunWithFlags.Store.Persistence Elixir behaviour have been updated (see previous point). Users of the package who implemented their own custom persistence adapters are encouraged to double-check that these respect the typespecs. (pull/120)
  • v1.7.0 Changes

    • ➕ Add support for Elixir 1.12. Drop support for Elixir 1.8. Elixir >= 1.9 is now required. Dropping support for older versions of Elixir simply means that this package is no longer tested with them in CI, and that compatibility issues are not considered bugs.
    • ⬇️ Drop support for Erlang/OTP 21, and Erlang/OTP >= 22 is now required. Dropping support for older versions of Erlang/OTP simply means that this package is not tested with them in CI, and that no compatibility issues are considered bugs.
    • ➕ Added support for the Erlang dialyzer (via the dialyxir package).
    • ➕ Addressed all dialyzer warnings. Fixed some incorrect typespecs and simplified the implementation of some functions.
    • Miscellaneous documentation fixes and improvements. (Thanks kianmeng, pull/89, pull/90 and pull/112.)
    • 📦 Documented the FunWithFlags.Store.Cache module, and its Cache.flush/0 and Cache.dump/0 functions. They're now part of the public API of the package.
    • Introduced a new FunWithFlags.Supervisor module to manage the supervision tree for the package. The supervision strategy and configuration are unchanged, and host applications don't need to do anything to upgrade. However, this module is part of the public API of the package and can be used to better control the start behaviour of FunWithFlags. This has also been documented in a new section of the readme.
    • Internal changes to stop using an undocumented feature of Elixir that will go away in future versions. This affects how the function to calculate Actor scores for the %-of-actors gate is invoked, but that's an internal change, so it won't affect users of the package unless they're using undocumented features. (Thanks kelvinst, pull/105.)
  • v1.6.0 Changes

    • ➕ Add support for Elixir 1.11. Drop support for Elixir 1.7. Elixir >= 1.8 is now required. Dropping support for older versions of Elixir simply means that this package is no longer tested with them in CI, and that compatibility issues are not considered bugs.
    • 🚀 More internal changes to not compile in the package configuration. Removed compile-time references to the Ecto repo and the Ecto table name. See the release notes for v1.5.1 (below) for more details on this type of changes.
    • ⚡️ Ecto and Postgres persistence: when updating percentage gates, use a flag-scoped advisory lock rather than locking the entire table. With the old system the entire table was locked when setting or changing any percentage gate, across all flags. With this change, the lock is scoped to one flag and the table is never fully locked.
    • 📦 Dev and test fixes to support Phoenix.PubSub on OTP 23 and Elixir >= 1.10.3. This was only an issue when working locally, and there should be no problems when using the previous version of the package in a host application.
    • ⚡️ Update Redix to 1.0. As its changelog says this doesn't introduce breaking changes, but it's a major version bump that should be documented here, as it will require changes in the host applications mix files.
  • v1.5.2 Changes

    • 📦 Dev and test fixes to support Phoenix.PubSub on OTP 23 and Elixir >= 1.10.3. This was only an issue when working locally, and there should be no problems when using the previous version of the package in a host application.
  • v1.5.1 Changes

    May 02, 2020
    • 🔧 Internal changes to not compile in the persistence adapter config. This has no effect on the functionality of the package, but now the Ecto or Redis adapter configurantion is not memoized anymore, and it can be changed with no need to recompile the package.
  • v1.5.0 Changes

    April 26, 2020
    • ⬇️ Drop support for Elixir 1.6. Elixir >= 1.7 is now required.
    • ⬇️ Drop support for Erlang/OTP 20, and Erlang/OTP >= 21 is now required. An older Erlang/OTP might still work with older versions of Elixir, but Elixir 1.10 requires Erlang/OTP >= 21. Dropping support for older versions of Erlang/OTP simply means that this package is not tested with them in CI, and that no compatibility issues are considered bugs.
    • ⬆️ Upgrade Phoenix.PubSub dependency to 2.0. This provides compatibility with Phoenix 1.5.
    • Typespec improvements. (Thanks skylerparr, pull/57)
    • 🚀 Internal changes to how flag data is cached in the ETS table. This has no effect on the functionality of the package, with two exceptions. First, the cache: [ttl: seconds] config value is not memoized anymore and it can be changed without recompiling. Second, since the TTL is now stored with the ETS entries, old and new ETS data is not compatible; this is not an issue if you restart/rotate your application nodes/instances when deploying, but it will be an issue if you perform hot code upgrades. In that case, you have to first empty the ETS table, for example with FunWithFlags.Store.Cache.flush/0.
    • New config option to set a custom name for the DB table when using the Ecto persistence adapter. (Thanks BobbyMcWho, pull/64 and pull/77)
  • v1.4.1 Changes

    November 21, 2019
  • v1.4.0 Changes

    May 15, 2019

    🚀 This release focuses on making it easier to extend the package, for example with custom persistence adapters.

    • Define a behaviour in the FunWithFlags.Store.Persistence module that can be implemented by custom persistence adapters. The builtin Redis and Ecto adapters now formally implement this new behaviour.
    • 🔨 Refactor how cache-busting change notifications are published: move the logic out of the two builtin persistence adapters and into the level above them. While this is just an internal change, it narrows the responsibilities of the persistence adapters and simplifies implementing custom ones.
    • 💅 Update the supervision tree to use Elixir v1.5 style child specs.
    • 🔧 Print a helpful error if a project is configured to use a persistence adapter without including its dependency packages. This mirrors what happens when the dependencies for a notifications adapter are missing.
    • Document the Flag and Gate types, previously private.
    • 🚀 Redis persistence: relax Redix version lock to ~> 0.9, which allows to use Redix 0.10. It was previously locked to ~> 0.9.1 because of breaking changes in the last few Redix minor version releases, but going forward if it happens again it can be handled with a patch level release on FunWithFlags.