-
Notifications
You must be signed in to change notification settings - Fork 122
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Generating tags for multiple bake targets #398
Comments
You can use the matrix feature for this purpose, like: target "default" {
name = "build-${tgt}"
matrix = {
tgt = ["foo", "bar"]
}
dockerfile = "Dockerfile.${tgt}"
tags = ["my/${tgt}:latest"]
} |
@crazy-max sorry, I'm not sure I understand. How would I combine the matrix with the tags generated by
isn't that going to overwrite the whole tag |
Basically, I would need something like this: // docker-bake.hcl
target "default" {
name = "${tgt}-${version}"
matrix = {
tgt = ["foo", "bar"]
version = [...list of version tags generated by metadata-action...] // ???
}
dockerfile = "Dockerfile.${tgt}"
tags = ["my/${tgt}:${version}"]
} And then I'd call |
I could generate the tags for each target using for expression. Here are examples. Using string interpolation - uses: docker/metadata-action@v5
id: metadata
- uses: docker/bake-action@v5
env:
TAG_BASE: my/foo # something like ghcr.io/${{ github.repository }}
with:
push: true
files: |
./docker-bake.hcl
${{ steps.metadata.outputs.bake-file }} variable "TAG_BASE" {}
target "docker-metadata-action" {}
target "service1" {
inherits = ["docker-metadata-action"]
context = "."
dockerfile = "service1.dockerfile"
tags = [for tag in target.docker-metadata-action.tags : "${TAG_BASE}/service1:${tag}"]
}
target "service2" {
inherits = ["docker-metadata-action"]
context = "."
dockerfile = "service2.dockerfile"
tags = [for tag in target.docker-metadata-action.tags : "${TAG_BASE}/service2:${tag}"]
} It will build the image tags of Using replace function - uses: docker/metadata-action@v5
id: metadata
with:
images: ghcr.io/${{ github.repository }}/__service__
- uses: docker/bake-action@v5
with:
push: true
files: |
./docker-bake.hcl
${{ steps.metadata.outputs.bake-file }} target "docker-metadata-action" {}
target "service1" {
inherits = ["docker-metadata-action"]
context = "."
dockerfile = "service1.dockerfile"
tags = [for tag in target.docker-metadata-action.tags : replace(tag, "__service__", "service1")]
}
target "service2" {
inherits = ["docker-metadata-action"]
context = "."
dockerfile = "service2.dockerfile"
tags = [for tag in target.docker-metadata-action.tags : replace(tag, "__service__", "service2")]
} |
Thanks for the suggestion @int128, I will give it a try. |
Description
Let's say I have the following
docker-bake.hcl
:The tags listed above function a bit like defaults, i.e., they're used when I run bake locally for testing. On GitHub Actions, however, I'd like to use
docker/metadata-action
to generate a list of tags based on various criteria (semver, date, etc...). These generated tags should replace the:latest
tag fromdocker-bake.hcl
, but I still want to keep the base name of the two images (my/foo
andmy/bar
).This would be trivial to accomplish with a single target (using the
images
input), but I didn't find a way to do it for multiple targets, where each target has a distinct image name.Apologies if I missed something obvious (seems odd that this use case isn't already supported, since the whole point of bake is orchestrating the build of multiple targets).
The text was updated successfully, but these errors were encountered: