Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
68 changes: 59 additions & 9 deletions client/client_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,7 @@ import (
"github.com/moby/buildkit/util/attestation"
"github.com/moby/buildkit/util/contentutil"
"github.com/moby/buildkit/util/entitlements"
"github.com/moby/buildkit/util/gitutil/gitobject"
"github.com/moby/buildkit/util/testutil"
containerdutil "github.com/moby/buildkit/util/testutil/containerd"
"github.com/moby/buildkit/util/testutil/echoserver"
Expand Down Expand Up @@ -11987,12 +11988,12 @@ func testGitResolveSourceMetadata(t *testing.T, sb integration.Sandbox) {
gitDir := t.TempDir()
gitCommands := []string{
"git init",
"git config --local user.email test",
"git config --local user.email test@example.com",
"git config --local user.name test",
"touch a",
"git add a",
"git commit -m a",
"git tag -a v0.1 -m v0.1",
"git commit -m msg",
"git tag -a v0.1 -m v0.1release",
"echo b > b",
"git add b",
"git commit -m b",
Expand Down Expand Up @@ -12040,6 +12041,8 @@ func testGitResolveSourceMetadata(t *testing.T, sb integration.Sandbox) {
require.Equal(t, "", md.Git.CommitChecksum) // not annotated tag
require.Equal(t, id, md.Op.Identifier)
require.Equal(t, server.URL+"/.git", md.Op.Attrs["git.fullurl"])
require.Nil(t, md.Git.CommitObject)
require.Nil(t, md.Git.TagObject)

id += "#v0.1"
md, err = c.ResolveSourceMetadata(ctx, &pb.SourceOp{
Expand All @@ -12058,7 +12061,60 @@ func testGitResolveSourceMetadata(t *testing.T, sb integration.Sandbox) {

require.Equal(t, id, md.Op.Identifier)
require.Equal(t, server.URL+"/.git", md.Op.Attrs["git.fullurl"])
require.Nil(t, md.Git.CommitObject)
require.Nil(t, md.Git.TagObject)

md, err = c.ResolveSourceMetadata(ctx, &pb.SourceOp{
Identifier: id,
Attrs: map[string]string{
"git.fullurl": server.URL + "/.git",
},
}, sourceresolver.Opt{
GitOpt: &sourceresolver.ResolveGitOpt{
ReturnObject: true,
},
})
if err != nil {
return nil, err
}
require.NotNil(t, md.Git)
require.Equal(t, "refs/tags/v0.1", md.Git.Ref)
require.Equal(t, commitTag, md.Git.Checksum) // annotated tag
require.Equal(t, commitTagCommit, md.Git.CommitChecksum)

require.Equal(t, id, md.Op.Identifier)
require.Equal(t, server.URL+"/.git", md.Op.Attrs["git.fullurl"])
require.NotNil(t, md.Git.CommitObject)
require.NotNil(t, md.Git.TagObject)

commitObj, err := gitobject.Parse(md.Git.CommitObject)
require.NoError(t, err)
require.NoError(t, commitObj.VerifyChecksum(md.Git.CommitChecksum))

commit, err := commitObj.ToCommit()
require.NoError(t, err)
require.Equal(t, "msg\n", commit.Message)
require.Equal(t, "test", commit.Author.Name)
require.Equal(t, "[email protected]", commit.Author.Email)
require.Equal(t, "test", commit.Committer.Name)
require.Equal(t, "[email protected]", commit.Committer.Email)
commitTime := commit.Committer.When
require.NotNil(t, commitTime)
require.WithinDuration(t, time.Now(), *commitTime, 2*time.Minute)

tagObj, err := gitobject.Parse(md.Git.TagObject)
require.NoError(t, err)
require.NoError(t, tagObj.VerifyChecksum(md.Git.Checksum))

tag, err := tagObj.ToTag()
require.NoError(t, err)
require.Equal(t, "v0.1release\n", tag.Message)
require.Equal(t, "v0.1", tag.Tag)
require.Equal(t, "test", tag.Tagger.Name)
require.Equal(t, "[email protected]", tag.Tagger.Email)
tagTime := tag.Tagger.When
require.NotNil(t, tagTime)
require.WithinDuration(t, time.Now(), *tagTime, 2*time.Minute)
return nil, nil
}, nil)
require.NoError(t, err)
Expand Down Expand Up @@ -12439,12 +12495,6 @@ func testGitResolveMutatedSource(t *testing.T, sb integration.Sandbox) {
err = runInDir(gitDir, gitCommands...)
require.NoError(t, err)

// cmd := exec.Command("git", "rev-parse", "HEAD")
// cmd.Dir = gitDir
// out, err := cmd.Output()
// require.NoError(t, err)
// commitHEAD := strings.TrimSpace(string(out))

cmd := exec.Command("git", "rev-parse", "v0.1")
cmd.Dir = gitDir
out, err := cmd.Output()
Expand Down
7 changes: 7 additions & 0 deletions client/llb/sourceresolver/types.go
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ type Opt struct {

ImageOpt *ResolveImageOpt
OCILayoutOpt *ResolveOCILayoutOpt
GitOpt *ResolveGitOpt
}

type MetaResponse struct {
Expand All @@ -47,10 +48,16 @@ type ResolveImageResponse struct {
Config []byte
}

type ResolveGitOpt struct {
ReturnObject bool
}

type ResolveGitResponse struct {
Checksum string
Ref string
CommitChecksum string
CommitObject []byte
TagObject []byte
}

type ResolveHTTPResponse struct {
Expand Down
8 changes: 8 additions & 0 deletions frontend/gateway/gateway.go
Original file line number Diff line number Diff line change
Expand Up @@ -636,6 +636,12 @@ func (lbf *llbBridgeForwarder) ResolveSourceMeta(ctx context.Context, req *pb.Re
resolveopt.ImageOpt = &sourceresolver.ResolveImageOpt{
ResolveMode: req.ResolveMode,
}
if req.Git != nil {
resolveopt.GitOpt = &sourceresolver.ResolveGitOpt{
ReturnObject: req.Git.ReturnObject,
}
}

resp, err := lbf.llbBridge.ResolveSourceMetadata(ctx, req.Source, resolveopt)
if err != nil {
return nil, err
Expand All @@ -656,6 +662,8 @@ func (lbf *llbBridgeForwarder) ResolveSourceMeta(ctx context.Context, req *pb.Re
Checksum: resp.Git.Checksum,
Ref: resp.Git.Ref,
CommitChecksum: resp.Git.CommitChecksum,
CommitObject: resp.Git.CommitObject,
TagObject: resp.Git.TagObject,
}
}
if resp.HTTP != nil {
Expand Down
8 changes: 8 additions & 0 deletions frontend/gateway/grpcclient/client.go
Original file line number Diff line number Diff line change
Expand Up @@ -514,6 +514,12 @@ func (c *grpcClient) ResolveSourceMetadata(ctx context.Context, op *opspb.Source
LogName: opt.LogName,
SourcePolicies: opt.SourcePolicies,
}
if opt.GitOpt != nil {
req.Git = &pb.ResolveSourceGitRequest{
ReturnObject: opt.GitOpt.ReturnObject,
}
}

resp, err := c.client.ResolveSourceMeta(ctx, req)
if err != nil {
return nil, err
Expand All @@ -533,6 +539,8 @@ func (c *grpcClient) ResolveSourceMetadata(ctx context.Context, op *opspb.Source
Checksum: resp.Git.Checksum,
Ref: resp.Git.Ref,
CommitChecksum: resp.Git.CommitChecksum,
CommitObject: resp.Git.CommitObject,
TagObject: resp.Git.TagObject,
}
}
if resp.HTTP != nil {
Expand Down
Loading