Releases: hairyhenderson/gomplate
pre-release v4.0.0-pre-2
This is a pre-release for v4.0.0 intended for testing. More changes will come before release!
(preliminary release notes follow - these will be updated for v4.0.0)
🥳 It's finally (almost) here! Welcome to gomplate v4.0.0-pre-2! This release is a (pre-release of a) major
release, with breaking changes. Read on for more details...
Probably the most important feature that's evolved in gomplate over the years is
its support for reading and parsing data from a variety of sources. Using URLs
to specify where to find data has proven to be quite flexible, and has allowed
for a lot of different data sources to be supported.
In early 2021, I took what I had learned from supporting all of these different
data sources, and I created a new module called
go-fsimpl
, which provides a
number of Go filesystem implementations that can be used with Go's filesystem
interfaces.
My goal with go-fsimpl
was always to use it in gomplate, and now that it
supports most of the data sources that gomplate supports, it's time to make the
switch! As a result, and because go-fsimpl
presents a much more consistent
and unified approach to data sources, I've had to drop support for one data
source, and in fixing some inconsistencies in how URLs have been handled by some
of the data sources, I've had to make some breaking changes there as well.
Please, if you're using gomplate in production, please read these release
notes carefully and in full, and review your usage of gomplate to make sure you
can adapt to these changes.
Breaking changes
Dropped support for the BoltDB data source
Support for the boltdb
URL scheme has been removed. The implementation was
never very robust, and I'm not aware of anyone using it. It had some unique
quirks that would have made it quite difficult to support in go-fsiml
as-is,
so I've decided to drop it.
No more slim
binaries
The slim
binaries were deprecated in v3.11, and will no longer be produced.
Stricter URL handling
Subpaths are now always relative URLs
When using the datasource
function with a subpath (second argument), the
subpath has previously been intepreted by some data sources as a simple addition
to the URL, and by others as a relative URL to be interpreted relative to the
data source's base URL (as specified by the --datasource
flag).
Now, all data sources will interpret the subpath as a relative URL, and will
resolve it relative to the data source's base URL. This means that, given a base
URL of git+https://github.com/hairyhenderson/gomplate//random
and a subpath of
random.go
, the resulting URL will be
git+https://github.com/hairyhenderson/gomplate//random.go
. To correct this,
make sure that base URLs end with a trailing slash when the last component is a
directory.
Also, if the subpath begins with a slash, it will be interpreted as an absolute
path, and will replace the base URL's path. For example, given a base URL of
git+file:///tmp/repos//myrepo/
and a subpath of /myfile.txt
, the resulting
URL will be git+file:///myfile.txt
. To correct this, make sure that subpaths
don't begin with a slash. Note that for the special //
separator indicating
the separation between a Git repository and the path within, a subpath should
now begin with .//
rather than //
.
This affects at least the git
and file
data sources.
Directories in datasource URLs must end with a slash
Previously, some data sources would assume URLs that end without a trailing
slash are directories, and relative lookups would be performed within that
directory. This was inconsistent with how URLs are normally interpreted, and
could lead to unexpected results.
Now, all data sources will always interpret URLs without a trailing slash as
files, and relative lookups will be performed within the parent directory of the
URL.
For example, given a base URL of vault:///secret
and a subpath of foo
, the
resulting URL will be vault:///foo
. To correct this, make sure that base URLs
end with a trailing slash when the last component is a directory.
Consistent data values
The aws+smp
data source previously returned the AWS output object, with
both metadata and data. Users needed to reference the Value
field to get the
actual data. Now, the aws+smp
data source will return the data directly.
The consul
data source supports directory semantics, but previously returned
all the data as a JSON array of key/value pair objects. Now, the consul
data
source will return directory listings like all other data sources, as a JSON
array of strings (the names of the keys).
Vault app-id auth support removed
Support for the Vault app-id auth method has been removed. This method was
deprecated in Vault 0.6.1, and removed in Vault 1.13. If you're still using this
method, you must switch to a different auth method.
Removed functions
The following functions have been removed:
- (TODO)
Deprecations
- A number of functions are deprecated, and will likely be removed in v5:
- the
slice
alias forcoll.Slice
(usecoll.Slice
instead) - The
net.Parse*
functions which produced values from theinet.af/netaddr
module have been deprecated and replaced with functions using the Go standard
library'snet/netip
package:net.ParseIP
(usenet.ParseAddr
instead)net.ParseIPPrefix
(usenet.ParsePrefix
insteadnet.ParseIPRange
(usenet.ParseRange
instead)
- the
- The array form of configuring nested templates is deprecated, and a new map-
based form is now available. This will be removed in a later v4 minor release
(i.e. not in v4.0.0, but before v5). - Support for the
AWS_META_ENDPOINT
environment variable for overriding the
IMDS endpoint inaws
functions has been deprecated in favor of the
AWS-nativeAWS_EC2_METADATA_SERVICE_ENDPOINT
. This will be removed in a
later v4 minor release (i.e. not in v4.0.0, but before v5).
Thanks
Plenty of people have contributed to gomplate by filing issues, suggesting new
features, or submitting pull requests. I'd like to especially thank the
following people for submitting pull requests in this release:
- @adriens
- @ahochsteger
- @AndrewSav
- @giorgiga
- @hartzell
- @horvski
- @iblancasa
- @isavcic
- @Juneezee
- @mayurwaghmode
- @mihaitodor
- @stefanb
- @sukhil-suresh
- @tenstad
- @wuhuizuo
- @xxxcoltxxx
- @zregvart
Be sure to also check out the multi-platform Docker images available at hairyhenderson/gomplate
.
If you've gained value out of gomplate and want to find a way to encourage development, please consider sponsoring gomplate!
v4.0.0-pre-2 (2024-01-23)
Full Changelog (since v3.11)
Changes since v4.0.0-pre-1
Release Notes
New features and changes
- #1336 Use go-fsimpl to read from datasources
- #1949 Add missing-key flag to manage behavior in case of non-existing key - thanks to @xxxcoltxxx!
- #1922 Flip to ltsc2022 image for windows variant
- #1781 Support for CUE
- #1837 Add support for Linux s390x - thanks to @iblancasa!
- #1700 Add tea.xyz package manager - thanks to @adriens!
- #1698 New plugin args option (implements #1552)
- #1668 Remove support for obsolete Vault app-id auth
- #1440 Added ppc64le support - thanks to @mayurwaghmode!
- #1615 Deprecate netaddr-based funcs
- #1538 Deprecate non-pipelineable strings aliases
- #1433 Removed slim (UPX-compressed) binary/image support
- #1397 Remove BoltDB support
New functions
v3.11.7
What's Changed
- [3.11.x] Update go-git dependency by @hairyhenderson in #1968
Full Changelog: v3.11.6...v3.11.7
v3.11.6
What's Changed
- Backport Go 1.21 and security updates to 3.11.x by @hairyhenderson in #1910
- backport: Add support for Linux s390x by @hairyhenderson in #1909
Full Changelog: v3.11.5...v3.11.6
v3.11.5
What's Changed
- Bump 3.11.x to Go 1.20 and Alpine 3.17 by @hairyhenderson in #1641
Full Changelog: v3.11.4...v3.11.5
v3.11.4
What's Changed
- Patch for unrelated CVEs by @hairyhenderson in #1639
Full Changelog: v3.11.3...v3.11.4
v3.11.3
This is a very minor patch release to update a dependency that's causing gomplate to trigger vulnerability scanners for CVE-2022-27664.
To the best of my understanding gomplate is not vulnerable, as it doesn't expose any HTTP servers - this patch release is purely to help vulnerability scans pass!
What's Changed
- Bump dependencies with unrelated CVEs by @hairyhenderson in #1501
Full Changelog: v3.11.2...v3.11.3
v3.11.2
Another patch release to allow gomplate to be compiled with Go 1.19.
What's Changed
- [3.11.x backport] Fixing flakey LookupIP test by @hairyhenderson in #1470
- [3.11.x backport] Update inet.af/netaddr so gomplate builds with Go 1.19 by @hairyhenderson in #1469
- [3.11.x backport] Switch to golangci-lint GitHub Action by @hairyhenderson in #1473
- Lint fixes (for 3.11.x) by @hairyhenderson in #1471
Full Changelog: v3.11.1...v3.11.2
v3.11.1
Just a simple patch release to fix a bug that prevented the go install
installation method.
What's Changed
- Enable CI for 3.11.x branch by @hairyhenderson in #1431
- Use temporary fork of gopkg.in/yaml.v3 by @hairyhenderson in #1430
Full Changelog: v3.11.0...v3.11.1
v3.11.0
👋 Welcome to another gomplate release! Once more, a number of bug fixes and new
features. Thanks to the community, gomplate is now available via
MacPorts as well!
Thanks
Plenty of people have contributed to gomplate by filing issues, suggesting new
features, or submitting pull requests. I'd like to especially thank the
following people for submitting pull requests in this release:
Deprecations
I'm starting to work on gomplate v4, the next major release (with breaking
changes). In preparation for this, I'm listing some features as deprecated (see
the deprecation policy). Note that some of these may have been
deprecated for a while, but I'd like to call them out explicitly here.
- The BoltDB
datasource is now deprecated (see this discussion),
and will be removed in v4.0.0. - The
slim
binaries are deprecated, and will no longer be produced starting
with v4.0.0. - A number of functions are deprecated, though not all will be removed in v4:
strings.Sort
(usecoll.Sort
instead)conv.Dict
(usecoll.Dict
instead)conv.Slice
(usecoll.Slice
instead)conv.Has
(usecoll.Has
instead)conv.Bool
(useconv.ToBool
instead)
- The array form of configuring nested templates is deprecated, and a new map-
based form is now available. This will be removed in v4.
Be sure to also check out the multi-platform Docker images available at hairyhenderson/gomplate
.
If you've gained value out of gomplate and want to find a way to encourage development, please consider sponsoring gomplate!
v3.11.0 (2022-06-12)
Release Notes
New features and changes
- #1422 New experimental
gomplate.Renderer
API is available for rendering templates programmatically. This should be of interest for developers wishing to use gomplate as a library. See the Go docs for examples. - #1410 Nested templates can now be referenced by URL and not just by path.
- Notes:
- Currently, only the
file:
URL scheme is supported. The full set of datasource URL schemes will be supported in a future release. - This also introduces a new format for the
templates
config option, and deprecates the previous format. See the docs fortemplates
for more information.
- Currently, only the
- Notes:
- #1402 Support for AWS IMDSv2 (EC2 instance metadata) is now available - thanks to @surki for the contribution!
- #1358 Adding warning messages when using deprecated functions and datasources.
- #1335 Now built with Go 1.18, which adds two new functions:
break
, andcontinue
. - #1317 Plugins now support piping input arguments to the plugin's stdin, rather than a commandline argument. This can be configured in the config file (see the docs for details).
- #1307 Missing directories are now automatically created for output files
New functions
- #1388 Two new experimental functions for generating ECDSA keys:
crypto.ECDSAGenerateKey
crypto.ECDSADerivePublicKey
- These are experimental as the semantics may change in a future release
- #1364 Two new template functions to help identify which template is being rendered:
- #1342 Four new functions in the
net
namespace for working with networks in CIDR notation - thanks to @bartoszj for the contribution! - #1306 Hashing functions that return raw bytes (like
crypto.SHA*
, but returns raw bytes instead of strings) - #1305 Two new functions to encrypt and decrypt with AES:
crypto.EncryptAES
crypto.DecryptAES
- These are experimental as the semantics may change in a future release
- #1287 New
listDatasources
function - thanks to @jeevansai502 for the contribution!
Bug fixes
- #1349 Fix bug in
JSON
andYAML
functions where escaped forward slashes (\/
) were not being correctly interpreted - #1350 Fix config merging when context/datasources are provided on the command line but not in the config file - thanks to @paddycarey for the contribution!
- #1334 Fix file directory reading (fixes #1333)
- #1310 Fix
strings.Title
to handle unicode punctuation (moves to alternate implementation after Go 1.18 deprecated the standard library function) - #1308 Fix bug where
strings.Indent
would not work correctly when a new-line character is used (now disallowed) - #1296 The
aws+sm
datasource will now correctly read a secret written as binary (SecretBinary
) rather than a string (SecretString
)
Documentation fixes/updates
- #1338 Clarify that
inputDir
is read recursively - #1313 Add MacPorts installation instructions - thanks to @herbygillot for the contribution!
- #1312 Improved plugin documentation
- #1309 Updated install docs to remove mention of the deprecated
slim
binary, and update the Go install instructions for recent Go versions - #1301
conv.URL
: Add example of how to redact the password - #1300
time.Now
: Add example of how to useTime.IsDST
- #1279
strings.Split
: More examples to clarify how to usestrings.Split
- thanks to @karlschriek for the contribution!
v3.10.0
🥳 It's high time for another gomplate release! This release contains quite a few
bug fixes and improvements.
Some packaging updates:
- There is now a binary built for macOS on the Apple Silicon (M1/etc -
darwin-arm64
) platform! - For Windows users, there is now a Chocolatey package available!
- Docker images are now also pushed to GitHub Container Registry
Be sure to also check out the multi-platform Docker images available at hairyhenderson/gomplate
.
If you've gained value out of gomplate and want to find a way to encourage development, please consider sponsoring gomplate!
v3.10.0 (2021-09-24)
Release Notes
New features and changes
- #1216
conv.ToInt
now returns-1
instead of overflowing on 32-bit systems to protect against CWE-190 and CWE-681 - #1214 The
crypto.RSAGenerateKey
function now enforces a minimum key size of 2048 bits to protect against CWE-326. - #1195 Now built with Go 1.17
- #1083 New
darwin-arm64
binary - #1058 #1092 Stop printing newline on stderr when outputting to stdout
New functions
- #1197 New IP/CIDR parsing functions:
Bug fixes
- #1217 Support git repos with default branches other than
master
(fixes #1049) - #1210 Fix
CONSUL_HTTP_ADDR
parsing (fixes #1209) - #1199 Fix a few filehandle leaks (fixes #995)
- #1128 Fix data race in
random
functions - #1127 Fix data race when gomplate is used programatically - fixed by removing use of globals in func namespaces (fixes #1126)
- #1104 Stop emitting ANSI colour codes on Windows in unsupported terminals (partial fix for #1095)
- #1082 Fix error when using
--input-dir=.
(found in #1081) - #1063 Fix difficulty in using gomplate programatically - bumped
k8s.io/client-go
to valid semver (fixes #1061)