docker / buildx

Docker CLI plugin for extended build capabilities with BuildKit
Apache License 2.0
3.53k stars 475 forks source link

bakefile: mark variables as required #1346

Open tnaroska opened 2 years ago

tnaroska commented 2 years ago

Current

There seems to be no way in current hcl bakefile syntax to mark a variable as required. There is a way to specify defaults:

# docker-bake.hcl
variable "TAG" {
  default = "latest"
}

Or without explicit default the variable defaults to empty:

# docker-bake.hcl
variable "TAG" {
}

Proposed Enhancement

I'm trying to define a variable that is required to be set by the caller (i.e. through environment variable). Something like:

# docker-bake.hcl
variable "TAG" {
  required = true
}

Where the user needs to specify the tag when executing buildx bake through either env-var or by passing multiple bake files (where the variable needs to be set to a value in at least one of the bake files).

Expectation:

# docker-bake.hcl
variable "TAG" {
  required = true
}

$ buildx bake              # -> error: required variable "TAG" not defined
$ TAG=latest buildx bake   # -> success
crazy-max commented 2 years ago

Having something as suggested in https://github.com/docker/buildx/pull/491#issue-773693934 with type constraints and validation like terraform does would be more aligned I think:

variable "slugs" {
  type = list(string)
  default = [
    "crazymax/diun",
    "ghcr.io/crazy-max/diun"
  ]
  validation {
    condition = length(var.slugs) > 0
    error_message = "At least one slug is required."
  }
}
tnaroska commented 2 years ago

💯 that would be a nicer, more general approach!

thompson-shaun commented 1 month ago

We'll move forward with this issue as-is, likely with the suggested modifications from @crazy-max, but we'll keep the work scoped to addressing the required case. Other work items will cover additional cases such as validation and typing.

/cc @crazy-max @tonistiigi @colinhemmings