mirror of
https://github.com/moby/buildkit.git
synced 2025-04-18 18:04:03 +03:00
79 lines
1.7 KiB
Go
79 lines
1.7 KiB
Go
package git
|
|
|
|
import (
|
|
"path"
|
|
|
|
"github.com/moby/buildkit/solver/llbsolver/provenance"
|
|
provenancetypes "github.com/moby/buildkit/solver/llbsolver/provenance/types"
|
|
"github.com/moby/buildkit/source"
|
|
srctypes "github.com/moby/buildkit/source/types"
|
|
"github.com/moby/buildkit/util/gitutil"
|
|
)
|
|
|
|
type GitIdentifier struct {
|
|
Remote string
|
|
Ref string
|
|
Subdir string
|
|
KeepGitDir bool
|
|
AuthTokenSecret string
|
|
AuthHeaderSecret string
|
|
MountSSHSock string
|
|
KnownSSHHosts string
|
|
}
|
|
|
|
func NewGitIdentifier(remoteURL string) (*GitIdentifier, error) {
|
|
if !gitutil.IsGitTransport(remoteURL) {
|
|
remoteURL = "https://" + remoteURL
|
|
}
|
|
u, err := gitutil.ParseURL(remoteURL)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
repo := GitIdentifier{Remote: u.Remote}
|
|
if u.Fragment != nil {
|
|
repo.Ref = u.Fragment.Ref
|
|
repo.Subdir = u.Fragment.Subdir
|
|
}
|
|
if sd := path.Clean(repo.Subdir); sd == "/" || sd == "." {
|
|
repo.Subdir = ""
|
|
}
|
|
return &repo, nil
|
|
}
|
|
|
|
func (GitIdentifier) Scheme() string {
|
|
return srctypes.GitScheme
|
|
}
|
|
|
|
var _ source.Identifier = (*GitIdentifier)(nil)
|
|
|
|
func (id *GitIdentifier) Capture(c *provenance.Capture, pin string) error {
|
|
url := id.Remote
|
|
if id.Ref != "" {
|
|
url += "#" + id.Ref
|
|
}
|
|
c.AddGit(provenancetypes.GitSource{
|
|
URL: url,
|
|
Commit: pin,
|
|
})
|
|
if id.AuthTokenSecret != "" {
|
|
c.AddSecret(provenancetypes.Secret{
|
|
ID: id.AuthTokenSecret,
|
|
Optional: true,
|
|
})
|
|
}
|
|
if id.AuthHeaderSecret != "" {
|
|
c.AddSecret(provenancetypes.Secret{
|
|
ID: id.AuthHeaderSecret,
|
|
Optional: true,
|
|
})
|
|
}
|
|
if id.MountSSHSock != "" {
|
|
c.AddSSH(provenancetypes.SSH{
|
|
ID: id.MountSSHSock,
|
|
Optional: true,
|
|
})
|
|
}
|
|
return nil
|
|
}
|