Files
podman/pkg/bindings/artifacts/pull.go
Lewis Roy 5dc87663a9 feat: add Podman artifact support to Go bindings and remote clients
Add the Go bindings implementation necessary to support Artifacts.
Implement the tunnel interface that consumes the Artifacts Go bindings.

With this patch, users of the Podman remote clients will now be able to
manage OCI artifacts via the Podman CLI and Podman machine.

Jira: https://issues.redhat.com/browse/RUN-2714#

Signed-off-by: Lewis Roy <lewis@redhat.com>
2025-08-08 09:21:45 -04:00

53 lines
1.1 KiB
Go

package artifacts
import (
"context"
"net/http"
imageTypes "github.com/containers/image/v5/types"
"github.com/containers/podman/v5/pkg/auth"
"github.com/containers/podman/v5/pkg/bindings"
"github.com/containers/podman/v5/pkg/domain/entities"
)
func Pull(ctx context.Context, name string, options *PullOptions) (*entities.ArtifactPullReport, error) {
if options == nil {
options = new(PullOptions)
}
conn, err := bindings.GetClient(ctx)
if err != nil {
return nil, err
}
params, err := options.ToParams()
if err != nil {
return nil, err
}
params.Set("name", name)
header, err := auth.MakeXRegistryAuthHeader(
&imageTypes.SystemContext{
AuthFilePath: options.GetAuthfile(),
},
options.GetUsername(),
options.GetPassword(),
)
if err != nil {
return nil, err
}
response, err := conn.DoRequest(ctx, nil, http.MethodPost, "/artifacts/pull", params, header)
if err != nil {
return nil, err
}
defer response.Body.Close()
var report entities.ArtifactPullReport
if err := response.Process(&report); err != nil {
return nil, err
}
return &report, nil
}