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

View File

@ -7,8 +7,9 @@ import (
) )
type buildOpts struct { type buildOpts struct {
force bool force bool
push bool push bool
release string
} }
// BuildOpt allows callers to specify options to Build // 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 // Build builds the package
func (p Pkg) Build(bos ...BuildOpt) error { func (p Pkg) Build(bos ...BuildOpt) error {
var bo buildOpts var bo buildOpts
@ -61,9 +70,16 @@ func (p Pkg) Build(bos ...BuildOpt) error {
return fmt.Errorf("Unknown arch %q", arch) return fmt.Errorf("Unknown arch %q", arch)
} }
release, err := gitCommitTag("HEAD") if bo.release == "" {
if err != nil { r, err := gitCommitTag("HEAD")
return err 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) d := newDockerRunner(p.trust, p.cache)
@ -119,12 +135,12 @@ func (p Pkg) Build(bos ...BuildOpt) error {
return err return err
} }
if release == "" { if bo.release == "" {
fmt.Printf("Build and push complete, not releasing, all done.\n") fmt.Printf("Build and push complete, not releasing, all done.\n")
return nil return nil
} }
relTag, err := p.ReleaseTag(release) relTag, err := p.ReleaseTag(bo.release)
if err != nil { if err != nil {
return err return err
} }
@ -137,7 +153,7 @@ func (p Pkg) Build(bos ...BuildOpt) error {
return err 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 return nil
} }