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:
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.