env-select

Releases

1.1.3 - 2024-02-13

v1.1.3 Feb 13 2024 at 13:45 UTC
  • Escape single quotes in variable names/values (#65)
  • Preserve quotes in command arguments passed to es run (#72)

1.1.2 - 2024-02-11

v1.1.2 Feb 11 2024 at 22:57 UTC

Changed

  • Fix some typos in docs and warning messages (oops)

1.1.1 - 2024-02-11

v1.1.1 Feb 11 2024 at 22:17 UTC

Changed

  • es set subcommand no longer requires --source-file arg
    • The intention is to make the command useful even without the wrapping function (and to provide helpful hint output)
  • Rename binary from env-select to es
    • I'm not considering this a breaking change, because running the binary directly was not considered a supported use case.

1.1.0 - 2024-02-09

v1.1.0 Feb 9 2024 at 01:34 UTC

Added

  • Pass a list of strings to multiple to filter which values are loaded from a mapping

Changed

  • Resolve values in parallel
    • This means profile resolution will only take as long as the slowest step, rather than the sum of all steps

1.0.0 - 2024-02-02

v1.0.0 Feb 2 2024 at 01:01 UTC

Added

Changed

  • Use es instead of env-select in CLI help output
  • es show config now accepts optional arguments to print for a single application or profile

v0.11.0

v0.11.0 Aug 24 2023 at 17:12 UTC

Breaking Changes

  • Remove the concept of native commands
    • The command value source is effectively gone, and the shell value source type has to renamed to command to replace the old one
      • In other words, the shell type is gone and the command field for the command type now takes a string instead of a string[]
    • Side effects can now only be shell commands (string literals)
    • This is to reduce the overall complexity of the tool. I don't thi nk there's a strong use case for native commands, where you can't just use shell commands

New Features

  • Add cwd option to command value source type, to force the command to execute in a particular directory
  • Modifications to the PATH variable will be prepended to the existing value, rather than replacing it
    • This special behavior is based on the variable name, and only applies to PATH

v0.10.0

v0.10.0 Aug 15 2023 at 13:15 UTC

Breaking Changes

  • Cascading config files are now only merged down to the profile level

New Features

  • Added side effects. See usage docs for more. Imperative environment configuration!

Other

  • Sourceable output from es set is now written to a temporary file instead of stdout. This difference is handled by the shell functions, so no change to behavior for users

v0.9.0

v0.9.0 Jul 31 2023 at 20:18 UTC

Breaking Changes

  • es show is now broken into sub-subcommands: es show config and es show shell
  • Unknown keys in config will now be rejected

New Features

  • Add --run-in-shell flag to es run
  • es run and es set no longer require an application name in the command; if not given, they will prompt, the same way they prompt for profile name

Other

  • Provide more context if the subprocess in es run fails

v0.8.0

v0.8.0 Jul 18 2023 at 13:13 UTC

New Features

  • Load multiple values from a single source with the multiple flag
    • Supported for all value source types
  • file value source, which loads value(s) from a file path (combine with multiple = true for maximum fun!)
  • Support non-string primitives for simple literal values
    • E.g. VARIABLE1 = 123 or VARIABLE2 = false
    • These values will simply be stringified before export, since shells only understand strings anyway

Other

  • Improve test coverage!

v0.7.0

v0.7.0 Jul 13 2023 at 10:55 UTC

This should be the last release with major breaking changes. The config layout has changed dramatically in order to support planned (and unplanned) future features.

Breaking Changes

  • Removed vars config section. You can no longer provide mappings for single variables. Instead, define a set of profiles with single variables
    • This feature didn't provide any additional functionality, it was just a slight convenience at the cost of complexity both for users and code
  • Restructured profile config:
    • Renamed apps field to applications
    • Add new profiles and variables subfields
    • Overall, this means apps.app1.profile1.VARIABLE1 will now be applications.app1.profiles.profile1.variables.VARIABLE1
    • This is more tedious, but allows for current and future features to fit into the config

New Features

  • Profile inheritance - profiles can now extend other profiles, eliminating the need to copy-paste a bunch of common content between profiles

Other

  • es shell function definitions now use the full path to the env-select binary rather than relying on PATH
    • This eliminates the need to add env-select to the PATH, and also guarantees that the copy of env-select that is being executed by es is the one that generated that es definition in the first place

v0.6.2

v0.6.2 Jul 8 2023 at 14:04 UTC

Other

  • Fix binaries being built for the wrong architecture

v0.6.1

v0.6.1 Jul 8 2023 at 13:14 UTC

Other

  • Defer shell path loading until it's needed. This will enable env-select init on systems that don't have the specified shell present

v0.6.0

v0.6.0 Jul 8 2023 at 10:48 UTC

I tried to fit all the foreseeable breaking changes into this release, there may be some more though.

Breaking Changes

  • Complex value sources (i.e. anything other than a simple string) now require the type field. E.g. type = "literal" or type = "command"
    • As value sources get more intricate, options start to collide. This field makes it easy to disambiguate between source types, which allows them to have overlapping option names
  • Rename --shell-path option back to --shell, and it once again only requires a shell name, rather than a full path
    • The full path for the shell will be grabbed via the which command now. This means whatever shell you use must be in your PATH
  • Rename command value source type to shell
    • The old command name is now used for commands that are executed natively

New Features

  • Add run subcommand, for one-off environment usage
    • This runs a single command in the configured environment, rather than modifying the shell environment. Similar to kubectl exec or poetry run
  • Add command value source type, which accepts an array of strings and executes a command natively, rather than via the shell
  • Add kubernetes value source type, which executes a command in a kubernetes pod via kubectl
  • Support complex literal values, enabling the sensitive option for literals
    • This option probably isn't that useful, but now the field is supported globally
  • Add a third level of verbosity (-vvv) to enable more granularity in log filtering

Other

  • Fix macOS x86 build in CI (the binary will appear on releases now)
  • Add a bunch of tests

v0.5.0

v0.5.0 Jun 30 2023 at 12:38 UTC

New Features

  • Shell configuration can now be loaded from env-select init function. Add this to your shell startup script to load it automatically. See installation instructions for more info.
  • --shell-path option allows you to override the $SHELL variable. This is rarely necessary, mostly useful for debugging.
  • Print configured variables to stderr to give some feedback when running es set
  • Add sensitive option to command value source, to mask data in information output
  • Support additional verbosity level with -vv

Other

  • Dynamic commands are now executed within the scope of env-select . Env-select will run your shell as a subprocess to execute the command, rather than print out a templated string (e.g. $(echo def)) to invoke a subshell. This reduces the surface area for bugs, and opens up options new kinds of dynamic values.

v0.4.1

v0.4.1 Jun 25 2023 at 17:02 UTC

Other

Fixed release process. Binaries for 0.4.0 are attached to this release

v0.4.0

v0.4.0 Jun 25 2023 at 14:04 UTC

Breaking Changes

  • Renamed binary from es to env-select (to facilitate shell plugins using es)
  • Moved main functionality under env-select set subcommand

New Features

  • Added fish plugin
  • Added show subcommand

Bug Fixes & Tweaks

  • Emit non-zero exit code for errors
  • Print available variables and applications for bare env-select set or an invalid variable/application name

v0.3.0

v0.3.0 Jun 25 2023 at 13:53 UTC

New Features

  • Add command variant for values, allowing lazily evaluated commands instead of static values

Other

  • Add aarch64-apple-darwin to release build
  • Upgrade to rust 1.67.1

v0.2.0

v0.2.0 Nov 12 2022 at 13:33 UTC
  • Reorient schema around named profiles (breaking change)
  • Fix terminal cursor disappearing after ctrl-c (#5)
  • Allow passing profile name (or literal value, for single variables) as a cmd arg to skip interactive prompt (#3)
  • Give profiles/variables consistent ordering in prompt (#2)
  • Clean up error handling a bit
  • Lots of doc improvements