meta-arguments
Depends On

depends_on Meta-Argument

The depends_on meta-argument in Togomak establishes dependencies between stages, ensuring they execute in the specified order.

Usage

You can use the depends_on meta-argument in module blocks and in all stage blocks. It requires a list of references to other resources or child modules in the same calling module. This list cannot include arbitrary expressions because the depends_on value must be known before togomak knows resource relationships and thus before it can safely evaluate expressions.

We recommend always including a comment that explains why using depends_on is necessary.

stage "example" {
  script = "echo hello world"
  depends_on = [stage.dependency1, stage.dependency2]
}
💡

Case Study The following is a summarized version of github.com/srevinsaju/togomak's togomak.hcl pipeline:

togomak.hcl
stage "fmt" {
  script = "go fmt github.com/srevinsaju/togomak/v1/..."
  lifecycle {
    phase = ["default", "validate"]
  }
}
 
stage "vet" {
  script = "go vet github.com/srevinsaju/togomak/v1/..."
  lifecycle {
    phase = ["default", "validate"]
  }
}
 
stage "build" {
  depends_on = [stage.fmt, stage.vet]
  script     = "go build -v -o ./cmd/togomak/togomak github.com/srevinsaju/togomak/v1/cmd/togomak"
  lifecycle {
    phase = ["default", "build"]
  }
}
 
stage "install" {
  depends_on = [stage.build]
  script     = "go install github.com/srevinsaju/togomak/v1/cmd/togomak"
  lifecycle {
    phase = ["default", "install"]
}

In the above code, the stage.build will only execute after stage.fmt and stage.validate both run. stage.fmt and stage.validate will run concurrently. Meanwhile, stage.install will run only after all three: stage.fmt, stage.validate and stage.build stages complete successfully.