Releases: tetratelabs/func-e
v1.2.0
func-e 1.2.0 removes shutdown hooks and migrates api.Run
to func_e.Run
Replacing shutdown hooks with startup hooks
Shutdown hooks were very problematic in practice. To attempt them meant interfering with signal and context cancelation propagation, for limited value. Instead, we now collect the majority of info needed for XDS troubleshooting after reaching the startup line of envoy. This gives us most of the value without the problems.
As a consequence, func-e no longer self-zips its run directory on shutdown. However, this is not common practice with other tools and folks can do that on own as necessary.
api.Run
-> func_e.Run
In a previous release, we accidentally added an implementation to our api package, causing package cycle problems. This moves the impl from api.Run
to func_e.Run
. This also solves a problem in the former implementation which routed library commands through the cmd runner.
We made a breaking change because at the moment, there is only one user of this API and maintainers of func-e also work on that. This allows us to remove the problem for future library users before it gets too difficult to remove.
A side effect is we moved main.go -> cmd/func-e/main.go which allows the root package to be used as a library.
Tighter contract on api.RunFunc
Now, that the ai package is not also an implementation, we have a chance to clean up some interface issues. Before, if you canceled an envoy run, the error returned was vague. We now follow envoy conventions, which return exit code 0 on interrupt. To translate this to go, it means api.RunFunc
documents nil error in these cases, and func_e.Run
has tests to prove it.
Full Changelog: v1.1.5...v1.2.0
v1.1.5
This is mostly a maintenance release, especially focused on the internal refactoring.
v1.1.4
func-e 1.1.4 is a maintenance release built with Go 1.19.
Note: Recent versions of Envoy no longer run on the default build of CentOS 8, and attempts will result in the following error /lib64/libm.so.6: version 'GLIBC_2.29' not found
. This is not an issue func-e can resolve, so please contact Envoy with platform support concerns.
v1.1.3
func-e 1.1.3 is a maintenance release that was built with Go 1.18
v1.1.2
func-e 1.1.2 contains only version updates. This release is only to inform people that Envoy 1.21 is out, and that is the first version that allows M1 Macs to run without emulation.
Many thanks to @XuehaiPan who stuck in there several weeks until Envoy 1.21 could build on Homebrew.
FYI: You don't need to upgrade func-e to use Envoy 1.21, but since you are looking anyway, why not!
v1.1.1
func-e 1.1.1 includes no user facing changes, but you should still read this!
Envoy 1.20.1 works on macOS 12
If you aren't running OS/x aka macOS aka Darwin, you can skip this part.
Shortly after macOS 12 (Monterey) released in late October, users complained Envoy no longer works, resulting in a fix shortly after. However, this fix wasn't released until over a month later (yesterday) in 1.20.1. Anyone who upgraded to macOS 12 was out of commission for over a month, regardless of if they used homebrew or func-e to run envoy. While that period was regrettable, it is over now. Envoy 1.20.1 is available and that works on macOS 12. Note that 1.20.1 is the only version that works, as the patch wasn't made to other versions (such as 1.19.x).
Note: you do not have to upgrade func-e to use Envoy 1.20.1. That said, while you are here, you might as well upgrade!
Minor changes
The actual func-e release is only patches and minor maintenance. Thanks to @codefromthecrypt and @tranngoclam for the help on this.
v1.1.0
func-e 1.1.0 adds man pages and has a more resilient first time experience on OS/x.
Man pages
Users installing func-e using Debian or RPM packages now can enter man func-e
to see similar output to func-e help
. Thanks very much to @ginglis13 who added man page generation and integration tests!
Less first time failures on OS/x
Some unlucky users could fail a first-time install on OS/x, if they tried func-e right after an Envoy release. A version not found error would raise, and they'd have to use the last manually.
The culprit was the Envoy release process. While Linux and Windows are guaranteed by the project team, MacOS is not. Until official tarballs exist, MacOS Envoy binaries come from homebrew. Release updates are subject to build drift and community support, and have in practice taken over a week to resolve. First timers wouldn't expect MacOS to be unavailable, so the experience of having a failed download lets them down.
To bullet-proof first time installs, we no longer assume Envoy releases will be coherent. Instead of reading latestVersion
from envoy-versions.json, we scan all available versions and pick the semantically highest release for the current platform. Note that this only effects users who don't choose an Envoy version via func-e use
or otherwise.
Thanks very much to @codefromthecrypt from leading this as well @carlocab and @mathetake for feedback.
Minor changes
- edge case fixes when a minor version is chosen (ex.
func-e use 1.19
) - end-to-end tests now execute on arm64 on both Ubuntu and CentOS
v1.0.0
func-e 1.0.0 adds latest patch syntax and adds Linux packages.
We chose to call this 1.0 as things work pretty well. func-e has been downloaded over 50k times since it was relaunched 3 months ago. While we know things aren't perfect and new features will arise, 1.0 means stability. We won't delete commands or make them incompatible intentionally. If you notice otherwise, please raise an issue!
Check out our issues labeled hacktoberfest. You can join other newcomers, such as @clavinjune, who helped the project though hacking.
Also, if you are interested in learning more about Envoy with func-e, check out Tetrate's new Envoy Fundamentals class.
Finally, if you are enjoying func-e please star the repo as contributors like seeing them. Now, on to the changes!
Latest patch syntax
Before, you could leave out an Envoy version or choose a one, like func-e use 1.19.1
. You can now choose a minor version, like func-e use 1.19
. If there's ever a new patch, it will be downloaded automatically. This is helpful for matrix testing where you want to ensure your configuration is likely work, yet run with the latest fixes.
This was a lot of work! Thanks @clavinjune, @codefromthecrypt, @dio and @mathetake for developing various aspects of this.
Linux packages
Before, you could only install func-e on Linux using curl
or homebrew. We added RPM and Debian packages which you can download below and use on CentOS or Ubuntu. Thanks to @codefromthecrypt for leading this, @dio for helping with the integration tests and @mathetake for review.
Infrastructure
Notably, our end-to-end tests run on more realistic images, and edge cases like kill -9
are now tested. Our build is more coherent, moving a lot of logic from workflows and 3rd party tools into native Makefile
. This makes it easier to test distributions without publishing them, and also makes GOROOT selection more portable. Re-runs are faster as most targets use file prerequisites to eliminate redundant runs. Even the skeleton release notes are now generated. Thanks a lot to @codefromthecrypt, @dio and @mathetake for the hard work here. Better infrastructure means smoother and more reliable improvements.
Minor changes
v0.7.0
func-e v0.7.0 improves the Windows installation experience and adds a new which
command used in scripting. We also now automatically test CentOS 8 on each change.
Thanks very much to @codefromthecrypt and @mathetake for the work researching, reviewing and implementing these improvements!
Signed Windows installer
func-e is available as an MSI download. Before, this wasn't
signed, so there would be scary messages when you click it.
Thanks a lot to Jeff Moon from Tetrate, we now have a Digicert code signing
certificate. We
setup our release job to automatically sign each release, and remove those
scary banners!
winget packages
winget is the default package manager for Windows 11 and is scheduled for a Windows 10 service release
Each release automatically raises a pull request to update winget!
Installing this way is as easy as this:
C:\> winget install func-e
C:\> func-e run -c envoy.yaml
:: If you don't have a configuration file, you can start the admin port like this
C:\> func-e run --config-yaml "admin: {address: {socket_address: {address: '127.0.0.1', port_value: 9901}}}"
func-e which
This adds a which
command that prints the path to the Envoy binary
that would be run. This allows func-e to install, but not run envoy for
scenarios such as building other images.
Ex. the following are equivalent:
$ $(func-e which) --version
$ func-e run --version
v0.6.0
func-e v0.6.0 introduces Windows support! This means you can run Envoy on Windows without using Docker.
func-e is available as an MSI download or via winget.
winget
is the default package manager for Windows 11 and is scheduled for a Windows 10 service release
Installing this way is as easy as this:
C:\> winget install func-e
C:\> func-e run -c envoy.yaml
:: If you don't have a configuration file, you can start the admin port like this
C:\> func-e run --config-yaml "admin: {address: {socket_address: {address: '127.0.0.1', port_value: 9901}}}"
Background
The Envoy project supported Windows via Docker since version 1.18.3. However, this is a little harder than it sounds for first time users.
For example, Docker in Windows has compatibility rules that imply knowing details about how the images were built. Those using Windows 10 Home probably won't get it to work at all. The first step was repackaging envoy binaries into the Tetrate Labs archive so that you don't need Docker to run them.
The rest of the work was in the func-e
codebase itself. While golang has a decent amount of portability, there are many details left out before you can control the process and erase differences like newline consistency (\r\n
). It was more work than the go code, as we prioritize maintenance experience as much as user experience.
For example, we needed to setup CI and reorganize doc generation so that maintainers don't need to run windows in order to fix glitches or perform releases. All of the above, making things work, and not add risk into our build.. ended up as 2 months of small changes.
The primary thanks here goes to the Envoy team who of course make Windows possible via publishing images. The func-e
team on this effort were @codefromthecrypt and @mathetake. Of course, we also have the users to thank, especially their patience in waiting for us. We hope this helps you try Envoy!