1
0
mirror of https://github.com/drone/drone-cli.git synced 2026-01-25 20:38:01 +01:00
drone-cli/vendor/docker.io/go-docker/container_commit.go

56 lines
1.4 KiB
Go
Raw Normal View History

package docker // import "docker.io/go-docker"
2017-05-15 13:59:26 +02:00
import (
"encoding/json"
"errors"
"net/url"
"github.com/docker/distribution/reference"
"docker.io/go-docker/api/types"
2017-05-15 13:59:26 +02:00
"golang.org/x/net/context"
)
// ContainerCommit applies changes into a container and creates a new tagged image.
func (cli *Client) ContainerCommit(ctx context.Context, container string, options types.ContainerCommitOptions) (types.IDResponse, error) {
var repository, tag string
if options.Reference != "" {
ref, err := reference.ParseNormalizedNamed(options.Reference)
2017-05-15 13:59:26 +02:00
if err != nil {
return types.IDResponse{}, err
}
if _, isCanonical := ref.(reference.Canonical); isCanonical {
2017-05-15 13:59:26 +02:00
return types.IDResponse{}, errors.New("refusing to create a tag with a digest reference")
}
ref = reference.TagNameOnly(ref)
2017-05-15 13:59:26 +02:00
if tagged, ok := ref.(reference.Tagged); ok {
tag = tagged.Tag()
}
repository = reference.FamiliarName(ref)
2017-05-15 13:59:26 +02:00
}
query := url.Values{}
query.Set("container", container)
query.Set("repo", repository)
query.Set("tag", tag)
query.Set("comment", options.Comment)
query.Set("author", options.Author)
for _, change := range options.Changes {
query.Add("changes", change)
}
if !options.Pause {
2017-05-15 13:59:26 +02:00
query.Set("pause", "0")
}
var response types.IDResponse
resp, err := cli.post(ctx, "/commit", query, options.Config, nil)
if err != nil {
return response, err
}
err = json.NewDecoder(resp.body).Decode(&response)
ensureReaderClosed(resp)
return response, err
}