Merge pull request #2589 from ijc/linuxkit-pkg-release

linuxkit pkg: Support --release option to pkg push.
This commit is contained in:
Ian Campbell 2017-10-11 11:10:23 +01:00 committed by GitHub
commit 2eb5dfffaa
2 changed files with 28 additions and 9 deletions

View File

@ -20,6 +20,7 @@ func pkgPush(args []string) {
}
force := flags.Bool("force", false, "Force rebuild")
release := flags.String("release", "", "Release the given version")
p, err := pkglib.NewFromCLI(flags, args...)
if err != nil {
@ -34,7 +35,9 @@ func pkgPush(args []string) {
if *force {
opts = append(opts, pkglib.WithBuildForce())
}
if *release != "" {
opts = append(opts, pkglib.WithRelease(*release))
}
if err := p.Build(opts...); err != nil {
fmt.Fprintf(os.Stderr, "%v\n", err)
os.Exit(1)

View File

@ -7,8 +7,9 @@ import (
)
type buildOpts struct {
force bool
push bool
force bool
push bool
release string
}
// BuildOpt allows callers to specify options to Build
@ -30,6 +31,14 @@ func WithBuildPush() BuildOpt {
}
}
// WithRelease releases as the given version after push
func WithRelease(r string) BuildOpt {
return func(bo *buildOpts) error {
bo.release = r
return nil
}
}
// Build builds the package
func (p Pkg) Build(bos ...BuildOpt) error {
var bo buildOpts
@ -61,9 +70,16 @@ func (p Pkg) Build(bos ...BuildOpt) error {
return fmt.Errorf("Unknown arch %q", arch)
}
release, err := gitCommitTag("HEAD")
if err != nil {
return err
if bo.release == "" {
r, err := gitCommitTag("HEAD")
if err != nil {
return err
}
bo.release = r
}
if bo.release != "" && !bo.push {
return fmt.Errorf("Cannot release %q if not pushing", bo.release)
}
d := newDockerRunner(p.trust, p.cache)
@ -119,12 +135,12 @@ func (p Pkg) Build(bos ...BuildOpt) error {
return err
}
if release == "" {
if bo.release == "" {
fmt.Printf("Build and push complete, not releasing, all done.\n")
return nil
}
relTag, err := p.ReleaseTag(release)
relTag, err := p.ReleaseTag(bo.release)
if err != nil {
return err
}
@ -137,7 +153,7 @@ func (p Pkg) Build(bos ...BuildOpt) error {
return err
}
fmt.Printf("Build, push and release complete, all done.\n")
fmt.Printf("Build, push and release of %q complete, all done.\n", bo.release)
return nil
}