mirror of
https://gitea.com/Lydanne/buildx.git
synced 2025-07-10 13:37:08 +08:00
build: add --annotation shortcut flag
This extracts the same logic for parsing annotations from the imagetools create command, and allows the same flags to be attached to the build command. These annotations are then merged into all provided exporters. Signed-off-by: Justin Chadwell <me@jedevc.com>
This commit is contained in:
@ -20,6 +20,7 @@ import (
|
||||
"github.com/moby/buildkit/util/testutil/integration"
|
||||
"github.com/opencontainers/go-digest"
|
||||
"github.com/pkg/errors"
|
||||
"github.com/stretchr/testify/assert"
|
||||
"github.com/stretchr/testify/require"
|
||||
)
|
||||
|
||||
@ -40,6 +41,7 @@ var buildTests = []func(t *testing.T, sb integration.Sandbox){
|
||||
testBuildMobyFromLocalImage,
|
||||
testBuildDetailsLink,
|
||||
testBuildProgress,
|
||||
testBuildAnnotations,
|
||||
}
|
||||
|
||||
func testBuild(t *testing.T, sb integration.Sandbox) {
|
||||
@ -313,3 +315,46 @@ func testBuildProgress(t *testing.T, sb integration.Sandbox) {
|
||||
require.Contains(t, string(plainOutput), "[internal] load build definition from Dockerfile")
|
||||
require.Contains(t, string(plainOutput), "[base 1/3] FROM docker.io/library/busybox:latest")
|
||||
}
|
||||
|
||||
func testBuildAnnotations(t *testing.T, sb integration.Sandbox) {
|
||||
if sb.Name() == "docker" {
|
||||
t.Skip("annotations not supported on docker worker")
|
||||
}
|
||||
|
||||
dir := createTestProject(t)
|
||||
|
||||
registry, err := sb.NewRegistry()
|
||||
if errors.Is(err, integration.ErrRequirements) {
|
||||
t.Skip(err.Error())
|
||||
}
|
||||
require.NoError(t, err)
|
||||
target := registry + "/buildx/registry:latest"
|
||||
|
||||
annotations := []string{
|
||||
"--annotation", "example1=www",
|
||||
"--annotation", "index:example2=xxx",
|
||||
"--annotation", "manifest:example3=yyy",
|
||||
"--annotation", "manifest-descriptor[" + platforms.DefaultString() + "]:example4=zzz",
|
||||
}
|
||||
out, err := buildCmd(sb, withArgs(annotations...), withArgs(fmt.Sprintf("--output=type=image,name=%s,push=true", target), dir))
|
||||
require.NoError(t, err, string(out))
|
||||
|
||||
desc, provider, err := contentutil.ProviderFromRef(target)
|
||||
require.NoError(t, err)
|
||||
imgs, err := testutil.ReadImages(sb.Context(), provider, desc)
|
||||
require.NoError(t, err)
|
||||
|
||||
pk := platforms.Format(platforms.Normalize(platforms.DefaultSpec()))
|
||||
img := imgs.Find(pk)
|
||||
require.NotNil(t, img)
|
||||
|
||||
require.NotNil(t, imgs.Index)
|
||||
assert.Equal(t, "xxx", imgs.Index.Annotations["example2"])
|
||||
|
||||
require.NotNil(t, img.Manifest)
|
||||
assert.Equal(t, "www", img.Manifest.Annotations["example1"])
|
||||
assert.Equal(t, "yyy", img.Manifest.Annotations["example3"])
|
||||
|
||||
require.NotNil(t, img.Desc)
|
||||
assert.Equal(t, "zzz", img.Desc.Annotations["example4"])
|
||||
}
|
||||
|
Reference in New Issue
Block a user