v0.8.0-alpha.1
Pre-releaseThis release includes experimental support for CUE Modules (more details below), as well as a number of improvements and fixes.
More CLs and refactors have also landed for the core evaluator's performance work; they aren't enabled yet as the work isn't complete.
As a reminder: users can register their projects with Unity, our regression and performance testing setup. Unity is used to ensure that a project's CUE evaluations do not unexpectedly stop working, or regress in terms of performance. It continues to catch multiple issues with each release. Adding your project to Unity not only guarantees that we will not break your tests (if we do, we will work with you to fix your CUE code), but it also helps to improve the quality of each CUE release. Follow this link to learn more about Unity, install it, or get in touch with any questions.
Thank you to @4ad, @cedricgc, @jpluscplusm, @martingreber, @mpvl, @mvdan, @myitcv, @nickfiggins, @nnnkkk7, @rogpeppe, and @vikstrous for contributing to this release!
Modules
This release includes experimental support for CUE modules in cmd/cue
, as outlined in the Modules and package management proposal. We are also working on v3 of the modules proposal docs to coincide with the release of v0.8.0.
Alongside this release, we have published a tutorial on the new website which shows how to publish and fetch modules with a custom module registry.
We have also published the first version of the Modules reference documentation, the canonical documentation page describing how CUE modules work in detail.
Note that support for CUE modules is still experimental and subject to change, and needs to be explicitly enabled via CUE_EXPERIMENT=modules
. See cue help environment
for more information on the environment variables used below.
The cue mod tidy
command is introduced, which rewrites cue.mod/module.cue
in its canonical format, adds any missing module dependency requirements, and removes unused ones.
The cue mod publish
command is also added. This publishes a version of the current module to a module registry.
When running commands like cue export
with CUE_EXPERIMENT=modules
, dependencies are automatically fetched from module registries following $CUE_REGISTRY
and cached on disk.
Note that support for fetching modules from OCI registries via cue/load
isn't ready yet; support for Go library users will be announced at a later time.
Go API
Note that this version of CUE requires Go 1.21 or later, following our policy to support the latest two stable Go releases just like upstream.
CL 1173271 drops support for legacy pkg
directories, which have been deprecated since the transition to a cue.mod
directory in 2019.
CL 1174069 replaces a few more uses of the deprecated cue.Instance
type with cue.InstanceOrValue
.
CL 1175779 deprecates the FileOffset
and File.Base
APIs in cue/token
, which were inherited from go/token
but never had any effect.
Language
There are no changes to the language in this version.
Spec
CL 1173197 makes the use of the term "builtin function" consistent across the document.
Core Evaluator
CL 1173262 fixed a regression introduced by v0.7.0's upgrade to github.com/cockroachdb/apd/v3
where some arithmetic operations would result in an extra 0
digit.
Encoders
CL 1173689 fixed the YAML encoder so that strings looking like hexadecimal numbers are properly quoted.
Builtins
CL 1173735 replaces the uses of Go's net
package with net/netip
when dealing with IP addresses, which makes them immutable, comparable, and take less memory.
CL 1173926 adds an IPv6
API to net
to check that a value is a valid IPv6 address, mirroring IPv4
and taking advantage of the switch to the Go net/netip
package.
CL 1174339 fixes tool/exec
so that it correctly applies env
defaults in CUE values.
CL 1174623 fixes tool/exec
so that it accepts env
list values as documented.
cmd/cue
CL 1173892 adds a cue help environment
section to document the environment variables used by the CLI, such as CUE_EXPERIMENT
and CUE_REGISTRY
.
CL 1176665 fixes cue cmd
so that legacy commands always get the corresponding CUE schema unified.
CL 1176194 starts adding a language.version
field to cue.mod/module.cue
, to start tracking what CUE language version a module's config files were written for. This will become necessary to make future language changes as smooth as possible for CUE users. For example, running cue mod init
or cue mod tidy
with the future CUE v0.8.0 release should add language: version: "v0.8.0"
when the field isn't present.
Full list of changes since v0.7.1
- README: briefly document that we support two Go versions by @mvdan in e69d893
- cue/interpreter/wasm: rework the way we test Wasm by @4ad in 41b9e66
- cue/interpreter/wasm: remove Wazero global state by @4ad in 6d68b3a
- cue/interpreter/wasm: add support for Wasm functions that take and return structs by @4ad in 2ce1036
- cue/interpreter/wasm: add support for arbitrary types in extern attributes by @4ad in c896078
- internal/core/runtime: expand runtime.Compile signature to accomodate non-builtins by @4ad in 063b8c1
- cmd/cue,pkg/tool/exec: rely on cue schema for exec.Run defaults by @nickfiggins in b460e71
- cmd/cue: unhide mod tidy and mod publish by @myitcv in d37ea66
- internal/ci: run the end-to-end tests with -race by @mvdan in a948eb5
- cmd/cue: add testscript for registry auth via logins.json by @mvdan in 64c5656
- cmd/cue: fix registry client race by @rogpeppe in 3d1c0cb
- cmd/cue: add mod registry server command by @rogpeppe in 649c7f6
- clarify that we require Go 1.21 or later now by @mvdan in bef7c4e
- internal/ci: upgrade Go matrix include go1.22.0 by @myitcv in 63dbc2d
- internal/ci: use node.js 20-compatible action versions by @myitcv in 15a4b3e
- README: simplify "install from source" instructions by @mvdan in 5037afc
- README: add Docker badge and instructions by @mvdan in b6a6f67
- bump cuelabs.dev/go/oci/ociregistry dependency by @mvdan in 0eb0106
- cmd/cue: simplify exec trimming in TestX by @nnnkkk7 in eafeb11
- pkg/path: fix package comment by @jpluscplusm in 4818cf7
- cue/load: allow conversion of module-local paths to OS paths by @rogpeppe in 20451a6
- cmd/cue: add test for self import in modules mode by @rogpeppe in 707c6d7
- internal/e2e: switch all tests to
cue mod publish
by @mvdan in 2930a8e - README: remove obsolete mention of Google by @jpluscplusm in 64a117c
- cue/load: make the tests less noisy by @mvdan in 079532c
- cue/load: use fewer absolute paths in tests by @mvdan in a25c24b
- cue/parser: make the example self-contained by @mvdan in fc77363
- internal/mod/modload: fix panic on error in tidy by @rogpeppe in 3146f22
- internal/mod: fix tidy in the presence of local code by @rogpeppe in 2a56875
- cmd/cue: make the config directory configurable by @mvdan in 22b1ca3
- internal/e2e: start using
cue mod tidy
by @mvdan in 34db9eb - cmd/cue: add version to module.cue file by @rogpeppe in 9ceec10
- cue/load: fix crash when there is no module file by @rogpeppe in ec7ca0a
- internal/e2e: start using
cue mod init modpath@version
by @mvdan in 7855e15 - cue/token: deprecate base offset by @rogpeppe in b0358a6
- cmd/cue/cmd: support major versions in module path by @rogpeppe in e8efa7e
- internal/mod/modload: support adding language version by @rogpeppe in 2120803
- internal/mod/modpkgload: support gen directories by @rogpeppe in c6e4adf
- internal/e2e: tweak expected error string after the cue/load changes by @mvdan in b67300b
- cue/load: use modpkgload to resolve dependencies by @rogpeppe in fa12218
- cmd/cue/cmd: add (failing) submodule test by @rogpeppe in 8889d6a
- cue/load: implement io/fs.FS for overlay filesystem by @rogpeppe in 83a70c6
- cue/load: remove unused code by @rogpeppe in 2be5931
- cmd/cue: use tokens from "cue login" before docker's config.json by @mvdan in 0e4ec67
- cmd/cue: store tokens once "cue login" succeeds by @mvdan in 786095f
- internal/mod: track dependencies at package level by @rogpeppe in af405f0
- cue/load: use module.ParseImportPath by @rogpeppe in 36a4ce4
- internal/mod/module: add ParseImportPath by @rogpeppe in 22cf402
- cmd/cmd: add environment help by @rogpeppe in ed4fcdc
- internal/mod/modpkgload: add test for package-level dependencies by @rogpeppe in b6032be
- pkg/tool/exec: update env spec to support lists by @nickfiggins in 92d99d0
- internal/core/adt: use ConjunctGroup in fields by @mpvl in a849212
- internal/mod/modresolve: allow other forms of IPv6 localhost by @rogpeppe in 522eb97
- cue/errors: remove unused field by @rogpeppe in 693cc0e
- internal/mod: remove TODOs that have been done by @rogpeppe in 1fff098
- internal/core/adt: remove disallowedField by @mpvl in 657ae6b
- internal/core/adt: use OpContext instead of nodeContext for decDependant by @mpvl in 1df027b
- pkg: fix CUE source escaping TODO by @mvdan in 1dda25a
- internal/e2e: write the rest of an inline comment by @mvdan in 97826df
- tools/flow: use atomic.Bool by @mvdan in fefadfc
- internal/ci: add a TODO about "goreleaser test" by @mvdan in 21086d0
- cue: replace Instance.value with Instance.Value by @mvdan in 20a4505
- encoding/gocode: replace cue.Instance with InstanceOrValue by @mvdan in dbf2b75
- internal/ci: support co-authors in the signed-off-by check by @mvdan in 87a2e5c
- pkg/tool/exec: support defaults in env values by @nickfiggins in e7c2ede
- internal/core/adt: implement checks for closedness counters by @mpvl in 928ff3e
- internal/core/adt: reorganize for field checks by @mpvl in 2b483d7
- internal/core/adt: move rootCloseContext to Vertex by @mpvl in 596adda
- internal/core/adt: copy node method for comprehensions by @mpvl in 122b11f
- internal/core/adt: only show stats for old evaluator by @mpvl in ce798a7
- internal/core/adt: pass flags needed for new evaluator by @mpvl in 7fcc936
- internal/core/adt: fix typo in insertion.txtar by @mpvl in 409ab1e
- internal/core/adt: add positions of ConjunctGroup by @mpvl in d06d126
- internal/core/adt: handle comprehension cycle errors by @mpvl in 0b90ccc
- internal/core/adt: add tests to pass for new evaluator by @mpvl in 7453a50
- internal/code/adt: hoist position to different line by @mpvl in 106ce1a
- internal/core/adt: bail out early from resolve upon error by @mpvl in 6ead06a
- internal/core/adt: hoist hasConjuncts by @mpvl in cbcabcf
- internal/core/adt: don't match patters for non-regular fields by @mpvl in ca725a8
- internal/core/runtime: move EvaluatorVersion to Runtime by @mpvl in 53ed0f6
- internal/core/adt: move OpContext out of nodeContext by @mpvl in 200c994
- internal/core/adt: add scheduler implementation by @mpvl in 9728b7d
- all: update Wazero to 1.6.0 by @4ad in 5c5d291
- internal/cli: improve error message on parse issue by @cedricgc in b55e471
- internal/core/adt: hoist getNonCyclicCount by @mpvl in 4cc7bc7
- internal/cuetxtar: use go-internal diff by @mpvl in 54e1699
- internal/core/adt: include ConjunctGroup in addPositions by @mpvl in d5431b2
- internal/core/adt: modify some tests by @mpvl in 82e4cef
- internal/core/adt: prep for new evaluator by @mpvl in 8146191
- internal/core/adt: introduce ConjunctGroup by @mpvl in afed6ae
- internal/core/adt: unroll Evaluate in OpContext.concrete by @mpvl in 8933b8c
- internal/core/adt: add String implementation for ArcType by @mpvl in cc76012
- pkg/net: add IPv6 check by @martingreber in bc91ca7
- internal/core: remove unused argument by @mpvl in da0eab4
- internal/e2e: use cue mod publish by @rogpeppe in 3d09a4a
- cmd/cue: add hidden login command by @mvdan in 0a5e225
- cmd/cue/cmd: amend the default for CUE_REGISTRY by @mvdan in b01d129
- cmd/cue: rename mod upload to mod publish by @rogpeppe in cc1eaf0
- cmd/cue: allow cue mod tidy in non-module root by @rogpeppe in f260855
- internal/registrytest: upload deterministically by @rogpeppe in c4c064d
- internal/mod/modfile: avoid unnecessary braces by @rogpeppe in 7bcfd0b
- internal/mod/modregistry: add Module.Version method by @rogpeppe in 72766c2
- internal/registrytest: add Upload function by @rogpeppe in 414695f
- internal/mod/modregistry: add GetModuleWithManifest method by @rogpeppe in 76298d4
- pkg/net: replace net with net/netip by @martingreber in 87a3b17
- internal/cmd: add cue-ast-print to visualize syntax trees by @mvdan in bf94b66
- deps: upgrade to latest cuelabs.dev/go/oci/ociregistry by @myitcv in c84175b
- go.mod: bump non-user-facing dependencies by @mvdan in 3594d13
- internal/encoding/yaml: quote hexadecimal-looking strings by @vikstrous in 0b3455c
- internal/e2e: set CUE_MODCACHE in TestScript's Setup by @mvdan in db98219
- cue/load: use cached registry by @rogpeppe in 7dc80ff
- cmd/cue: use cached registry for cue mod tidy by @rogpeppe in 400f829
- internal/mod/modfile: guard against cue.Value race by @rogpeppe in 53d036a
- internal/mod/modcache: use robustio by @rogpeppe in c5e1342
- internal/mod/modcache: new package by @rogpeppe in c3ec30c
- cmd/cue: remove a stale TODO on marshaler types by @mvdan in a567677
- internal/mod/modregistry: avoid round trip by @rogpeppe in e090abf
- internal/mod/module: add support for escaping by @rogpeppe in 576c564
- internal/mod/modregistry: add ManifestDigest by @rogpeppe in 3c187c5
- doc/ref: use builtin instead of built-in by @jpluscplusm in 7ed1bca
- internal/mod/modload: support major version defaults by @rogpeppe in ac248f4
- internal/maps: new package by @rogpeppe in 1958c32
- internal/mod/modpkgload: support packages without major versions by @rogpeppe in 3cfb6e2
- internal/mod/modrequirements: support major version defaults by @rogpeppe in 7afd472
- internal/mod/modregistry: support cross-major-version queries by @rogpeppe in 4773bf6
- modfile: support major version defaults by @rogpeppe in faf7cd5
- cmd/cue: prevent failures if /tmp/cue.mod exists by @mvdan in c8073f4
- cue/load: drop support for legacy pkg directories by @mvdan in e81d181
- cmd/cue: cue mod tidy command by @rogpeppe in 2635119
- internal/mod/modload: new package by @rogpeppe in 6bd89dc
- internal/mod/modpkgload: new package by @rogpeppe in 3632c1f
- internal/core: use precise apd.Decimal by @myitcv in 8271724
- internal/mod/modrequirements: add GraphIsLoaded and RootModules by @rogpeppe in 74d7664
- internal/mod/module: add Version.IsValid by @rogpeppe in 71ab88a
- internal/mod/modregistry: return no tags for non-existent repo by @rogpeppe in 0c2c730
- internal/mod/modfile: add Format by @rogpeppe in 7d588b9
- internal/mod/modimports: discard package qualifier in import paths by @rogpeppe in 4edbf9d
- README: drop golangci badge by @mvdan in 967c9c6
- update ociregistry dependency by @rogpeppe in e07c4b8
- internal/slices: add Equal by @rogpeppe in 4f4f718
- internal/mod/modimports: support scanning single directory by @rogpeppe in 413d0d5
- internal/mod/modrequirements: new package by @rogpeppe in 0e0d638
- internal/ci: limit goreleaser to doing release drafts by @mvdan in f3411b4