mirror of
https://gitea.com/Lydanne/buildx.git
synced 2025-05-18 09:17:49 +08:00
build: loadInputs: extract resolving digest to a separate function
This makes the code slightly more idiomatic, but the errors produced will change slightly to prevent having to path NamedContext as argument. Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
This commit is contained in:
parent
55c86543ca
commit
38d7d36f0a
62
build/opt.go
62
build/opt.go
@ -494,44 +494,18 @@ func loadInputs(ctx context.Context, d *driver.DriverHandle, inp Inputs, addVCSL
|
|||||||
|
|
||||||
// handle OCI layout
|
// handle OCI layout
|
||||||
if strings.HasPrefix(v.Path, "oci-layout://") {
|
if strings.HasPrefix(v.Path, "oci-layout://") {
|
||||||
pathAlone := strings.TrimPrefix(v.Path, "oci-layout://")
|
localPath := strings.TrimPrefix(v.Path, "oci-layout://")
|
||||||
localPath := pathAlone
|
|
||||||
localPath, dig, hasDigest := strings.Cut(localPath, "@")
|
localPath, dig, hasDigest := strings.Cut(localPath, "@")
|
||||||
localPath, tag, hasTag := strings.Cut(localPath, ":")
|
localPath, tag, hasTag := strings.Cut(localPath, ":")
|
||||||
if !hasTag {
|
if !hasTag {
|
||||||
tag = "latest"
|
tag = "latest"
|
||||||
}
|
}
|
||||||
idx := ociindex.NewStoreIndex(localPath)
|
|
||||||
if !hasDigest {
|
if !hasDigest {
|
||||||
// lookup by name
|
dig, err = resolveDigest(localPath, tag)
|
||||||
desc, err := idx.Get(tag)
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, errors.Wrapf(err, "oci-layout reference %q could not be resolved", v.Path)
|
||||||
}
|
|
||||||
if desc != nil {
|
|
||||||
dig = string(desc.Digest)
|
|
||||||
hasDigest = true
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if !hasDigest {
|
|
||||||
// lookup single
|
|
||||||
desc, err := idx.GetSingle()
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
if desc != nil {
|
|
||||||
dig = string(desc.Digest)
|
|
||||||
hasDigest = true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if !hasDigest {
|
|
||||||
return nil, errors.Errorf("oci-layout reference %q could not be resolved", v.Path)
|
|
||||||
}
|
|
||||||
_, err := digest.Parse(dig)
|
|
||||||
if err != nil {
|
|
||||||
return nil, errors.Wrapf(err, "invalid oci-layout digest %s", dig)
|
|
||||||
}
|
|
||||||
|
|
||||||
store, err := local.NewStore(localPath)
|
store, err := local.NewStore(localPath)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, errors.Wrapf(err, "invalid store at %s", localPath)
|
return nil, errors.Wrapf(err, "invalid store at %s", localPath)
|
||||||
@ -564,12 +538,40 @@ func loadInputs(ctx context.Context, d *driver.DriverHandle, inp Inputs, addVCSL
|
|||||||
|
|
||||||
release := func() {
|
release := func() {
|
||||||
for _, dir := range toRemove {
|
for _, dir := range toRemove {
|
||||||
os.RemoveAll(dir)
|
_ = os.RemoveAll(dir)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return release, nil
|
return release, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func resolveDigest(localPath, tag string) (dig string, _ error) {
|
||||||
|
idx := ociindex.NewStoreIndex(localPath)
|
||||||
|
|
||||||
|
// lookup by name
|
||||||
|
desc, err := idx.Get(tag)
|
||||||
|
if err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
if desc == nil {
|
||||||
|
// lookup single
|
||||||
|
desc, err = idx.GetSingle()
|
||||||
|
if err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if desc == nil {
|
||||||
|
return "", errors.New("failed to resolve digest")
|
||||||
|
}
|
||||||
|
|
||||||
|
dig = string(desc.Digest)
|
||||||
|
_, err = digest.Parse(dig)
|
||||||
|
if err != nil {
|
||||||
|
return "", errors.Wrapf(err, "invalid digest %s", dig)
|
||||||
|
}
|
||||||
|
|
||||||
|
return dig, nil
|
||||||
|
}
|
||||||
|
|
||||||
func setLocalMount(name, root string, so *client.SolveOpt, addVCSLocalDir func(key, dir string, so *client.SolveOpt)) error {
|
func setLocalMount(name, root string, so *client.SolveOpt, addVCSLocalDir func(key, dir string, so *client.SolveOpt)) error {
|
||||||
lm, err := fsutil.NewFS(root)
|
lm, err := fsutil.NewFS(root)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user