The easiest way to start taking advantage of CUE’s powerful validation is to use it to check existing configuration files. By adding this check to your development or deployment process you can catch and fix errors before they affect downstream systems.

This guide shows you how to use the cue command to validate a GoReleaser configuration file using a curated module from the CUE Central Registry – all without writing any schemas or policies in CUE.

The latest pre-release of the cue command is required – please upgrade to this version if it’s not already installed:

TERMINAL
$ cue version
cue version v0.13.0-alpha.3
...

Login to the Central Registry

TERMINAL
$ cue login # only during beta

The Central Registry requires authentication while it’s in beta testing, so you need to login before you can use its schemas.

Choose a GoReleaser configuration file

This example is adapted from the goreleaser/example repository, but you should use any GoReleaser configuration file that’s relevant to your situation.

goreleaser.yml
# filepath: goreleaser.yml

project_name: example
builds:
  - goos: [ linux, windows, darwin ]
    goarch: [ amd64, arm64 ]
    env:
      - CGO_ENABLED=0
dockers:
  - dockerfile: Dockerfile
    image_templates:
      - ghcr.io/goreleaser/example:{{ .Version }}
    build_flag_templates:
      - --label=org.opencontainers.image.title={{ .ProjectName }}
      - --label=org.opencontainers.image.url=https://github.com/goreleaser/example
nfpms:
  - formats: [ deb, rpm, apk ]
    homepage: https://github.com/caarlos0/tasktimer
    maintainer: Carlos A Becker <root@carlosbecker.dev>
    description: Sample project.
    license: MIT

Validate the configuration file

TERMINAL
$ cue vet -c -d '#Project' test.cue.works/x1/goreleaser@latest goreleaser.yml

This command uses the #Project definition from the goreleaser package to check the goreleaser.yml file. Because cue vet doesn’t display any errors, you know that the curated module has validated your configuration file.

Next steps

Validating your existing configuration files with CUE can help make development and deployments safer, but defining those same files in CUE lets you build on its first-class templating, referencing, and policy features. Take the first step with Getting started with GoReleaser + CUE