buildx icon indicating copy to clipboard operation
buildx copied to clipboard

bakefile: mark variables as required

Open tnaroska opened this issue 3 years ago • 3 comments

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

tnaroska avatar Oct 05 '22 02:10 tnaroska

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."
  }
}

crazy-max avatar Oct 05 '22 11:10 crazy-max

💯 that would be a nicer, more general approach!

tnaroska avatar Oct 05 '22 20:10 tnaroska