Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ require (
github.com/Microsoft/go-winio v0.6.0
github.com/apex/log v1.9.0
github.com/buildpacks/imgutil v0.0.0-20230324153732-a6c0ed910692
github.com/buildpacks/lifecycle v0.16.1
github.com/buildpacks/lifecycle v0.16.1-0.20230331210422-21fb915dcefc
github.com/docker/cli v23.0.3+incompatible
github.com/docker/docker v23.0.2+incompatible
github.com/docker/go-connections v0.4.0
Expand Down
4 changes: 2 additions & 2 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -86,8 +86,8 @@ github.com/awslabs/amazon-ecr-credential-helper/ecr-login v0.0.0-20230110223219-
github.com/aybabtme/rgbterm v0.0.0-20170906152045-cc83f3b3ce59/go.mod h1:q/89r3U2H7sSsE2t6Kca0lfwTK8JdoNGS/yzM/4iH5I=
github.com/buildpacks/imgutil v0.0.0-20230324153732-a6c0ed910692 h1:QaSg0ifVdMjapbMAuyGjzHTP1d7Jf3xOop3qDnzhhRg=
github.com/buildpacks/imgutil v0.0.0-20230324153732-a6c0ed910692/go.mod h1:zL5lZzgFuv9l36n52FjomVrUHpyuZf6r1UHKaZ4LeSQ=
github.com/buildpacks/lifecycle v0.16.1 h1:Mv4gmq4wILpLYpDWx52o/nOWSjlcPp7taA4eBqznfBU=
github.com/buildpacks/lifecycle v0.16.1/go.mod h1:bKq16qBt8V9ci8h1/GCdAiKEHbFH/Z6fxsKux8jvkLs=
github.com/buildpacks/lifecycle v0.16.1-0.20230331210422-21fb915dcefc h1:30PImZyz1H57ySK9Ujz2lPD4i5arRZLA2qZ28CGBzJw=
github.com/buildpacks/lifecycle v0.16.1-0.20230331210422-21fb915dcefc/go.mod h1:tRwE4AcK98sRafXiR85I239X+D9PQoLQZHVlL6SaybM=
github.com/bwesterb/go-ristretto v1.2.0/go.mod h1:fUIoIZaG73pV5biE2Blr2xEzDoMj7NFEuV9ekS419A0=
github.com/checkpoint-restore/go-criu/v5 v5.3.0/go.mod h1:E/eQpaFtUKGOOSEBZgmKAcn+zUUwWxqcaKZlF54wK8E=
github.com/chrismellard/docker-credential-acr-env v0.0.0-20230304212654-82a0ddb27589 h1:krfRl01rzPzxSxyLyrChD+U+MzsBXbm0OwYYB67uF+4=
Expand Down
8 changes: 4 additions & 4 deletions internal/commands/inspect_image_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ var (
expectedLocalImageInfo = &client.ImageInfo{
StackID: "local.image.stack",
Buildpacks: nil,
Base: platform.RunImageMetadata{},
Base: platform.RunImageForRebase{},
BOM: nil,
Stack: platform.StackMetadata{},
Processes: client.ProcessDetails{},
Expand All @@ -41,7 +41,7 @@ var (
expectedRemoteImageInfo = &client.ImageInfo{
StackID: "remote.image.stack",
Buildpacks: nil,
Base: platform.RunImageMetadata{},
Base: platform.RunImageForRebase{},
BOM: nil,
Stack: platform.StackMetadata{},
Processes: client.ProcessDetails{},
Expand All @@ -51,7 +51,7 @@ var (
StackID: "local.image.stack",
Buildpacks: nil,
Extensions: nil,
Base: platform.RunImageMetadata{},
Base: platform.RunImageForRebase{},
BOM: nil,
Stack: platform.StackMetadata{},
Processes: client.ProcessDetails{},
Expand All @@ -61,7 +61,7 @@ var (
StackID: "remote.image.stack",
Buildpacks: nil,
Extensions: nil,
Base: platform.RunImageMetadata{},
Base: platform.RunImageForRebase{},
BOM: nil,
Stack: platform.StackMetadata{},
Processes: client.ProcessDetails{},
Expand Down
1 change: 1 addition & 0 deletions internal/commands/rebase.go
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,7 @@ func Rebase(logger logging.Logger, cfg config.Config, pack PackClient) *cobra.Co
cmd.Flags().StringVar(&opts.RunImage, "run-image", "", "Run image to use for rebasing")
cmd.Flags().StringVar(&policy, "pull-policy", "", "Pull policy to use. Accepted values are always, never, and if-not-present. The default is always")
cmd.Flags().StringVar(&opts.ReportDestinationDir, "report-output-dir", "", "Path to export build report.toml.\nOmitting the flag yield no report file.")
cmd.Flags().BoolVar(&opts.Force, "force", false, "Perform rebase operation without target validation (only available for API >= 0.12)")

AddHelpFlag(cmd, "rebase")
return cmd
Expand Down
9 changes: 9 additions & 0 deletions internal/commands/rebase_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -148,6 +148,15 @@ func testRebaseCommand(t *testing.T, when spec.G, it spec.S) {
h.AssertNil(t, command.Execute())
})
})
when("rebase is true", func() {
it("passes it through", func() {
opts.Force = true
mockClient.EXPECT().Rebase(gomock.Any(), opts).Return(nil)
command = commands.Rebase(logger, cfg, mockClient)
command.SetArgs([]string{repoName, "--force"})
h.AssertNil(t, command.Execute())
})
})
})
})
})
Expand Down
2 changes: 1 addition & 1 deletion internal/inspectimage/info_display.go
Original file line number Diff line number Diff line change
Expand Up @@ -95,7 +95,7 @@ func getConfigMirrors(info *client.ImageInfo, imageMirrors []config.RunImage) []
return nil
}

func displayBase(base platform.RunImageMetadata) BaseDisplay {
func displayBase(base platform.RunImageForRebase) BaseDisplay {
return BaseDisplay{
TopLayer: base.TopLayer,
Reference: base.Reference,
Expand Down
16 changes: 8 additions & 8 deletions internal/inspectimage/writer/human_readable_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -171,12 +171,12 @@ Processes:
{ID: "test.bp.two.remote", Version: "2.0.0", Homepage: "https://some-homepage-two"},
{ID: "test.bp.three.remote", Version: "3.0.0"},
},
Base: platform.RunImageMetadata{
Base: platform.RunImageForRebase{
TopLayer: "some-remote-top-layer",
Reference: "some-remote-run-image-reference",
},
Stack: platform.StackMetadata{
RunImage: platform.StackRunImageMetadata{
RunImage: platform.RunImageForExport{
Image: "some-remote-run-image",
Mirrors: []string{"some-remote-mirror", "other-remote-mirror"},
},
Expand Down Expand Up @@ -227,12 +227,12 @@ Processes:
{ID: "test.bp.two.local", Version: "2.0.0", Homepage: "https://some-homepage-two"},
{ID: "test.bp.three.local", Version: "3.0.0"},
},
Base: platform.RunImageMetadata{
Base: platform.RunImageForRebase{
TopLayer: "some-local-top-layer",
Reference: "some-local-run-image-reference",
},
Stack: platform.StackMetadata{
RunImage: platform.StackRunImageMetadata{
RunImage: platform.RunImageForExport{
Image: "some-local-run-image",
Mirrors: []string{"some-local-mirror", "other-local-mirror"},
},
Expand Down Expand Up @@ -282,12 +282,12 @@ Processes:
{ID: "test.bp.two.remote", Version: "2.0.0", Homepage: "https://some-homepage-two"},
{ID: "test.bp.three.remote", Version: "3.0.0"},
},
Base: platform.RunImageMetadata{
Base: platform.RunImageForRebase{
TopLayer: "some-remote-top-layer",
Reference: "some-remote-run-image-reference",
},
Stack: platform.StackMetadata{
RunImage: platform.StackRunImageMetadata{
RunImage: platform.RunImageForExport{
Image: "some-remote-run-image",
Mirrors: []string{"some-remote-mirror", "other-remote-mirror"},
},
Expand Down Expand Up @@ -343,12 +343,12 @@ Processes:
{ID: "test.bp.two.local", Version: "2.0.0", Homepage: "https://some-homepage-two"},
{ID: "test.bp.three.local", Version: "3.0.0"},
},
Base: platform.RunImageMetadata{
Base: platform.RunImageForRebase{
TopLayer: "some-local-top-layer",
Reference: "some-local-run-image-reference",
},
Stack: platform.StackMetadata{
RunImage: platform.StackRunImageMetadata{
RunImage: platform.RunImageForExport{
Image: "some-local-run-image",
Mirrors: []string{"some-local-mirror", "other-local-mirror"},
},
Expand Down
8 changes: 4 additions & 4 deletions internal/inspectimage/writer/json_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -178,12 +178,12 @@ func testJSON(t *testing.T, when spec.G, it spec.S) {
{ID: "test.bp.one.remote", Version: "1.0.0", Homepage: "https://some-homepage-one"},
{ID: "test.bp.two.remote", Version: "2.0.0", Homepage: "https://some-homepage-two"},
},
Base: platform.RunImageMetadata{
Base: platform.RunImageForRebase{
TopLayer: "some-remote-top-layer",
Reference: "some-remote-run-image-reference",
},
Stack: platform.StackMetadata{
RunImage: platform.StackRunImageMetadata{
RunImage: platform.RunImageForExport{
Image: "some-remote-run-image",
Mirrors: []string{"some-remote-mirror", "other-remote-mirror"},
},
Expand Down Expand Up @@ -233,12 +233,12 @@ func testJSON(t *testing.T, when spec.G, it spec.S) {
{ID: "test.bp.one.local", Version: "1.0.0", Homepage: "https://some-homepage-one"},
{ID: "test.bp.two.local", Version: "2.0.0", Homepage: "https://some-homepage-two"},
},
Base: platform.RunImageMetadata{
Base: platform.RunImageForRebase{
TopLayer: "some-local-top-layer",
Reference: "some-local-run-image-reference",
},
Stack: platform.StackMetadata{
RunImage: platform.StackRunImageMetadata{
RunImage: platform.RunImageForExport{
Image: "some-local-run-image",
Mirrors: []string{"some-local-mirror", "other-local-mirror"},
},
Expand Down
8 changes: 4 additions & 4 deletions internal/inspectimage/writer/toml_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -162,12 +162,12 @@ working-dir = "/other-test-work-dir"
{ID: "test.bp.one.remote", Version: "1.0.0", Homepage: "https://some-homepage-one"},
{ID: "test.bp.two.remote", Version: "2.0.0", Homepage: "https://some-homepage-two"},
},
Base: platform.RunImageMetadata{
Base: platform.RunImageForRebase{
TopLayer: "some-remote-top-layer",
Reference: "some-remote-run-image-reference",
},
Stack: platform.StackMetadata{
RunImage: platform.StackRunImageMetadata{
RunImage: platform.RunImageForExport{
Image: "some-remote-run-image",
Mirrors: []string{"some-remote-mirror", "other-remote-mirror"},
},
Expand Down Expand Up @@ -217,12 +217,12 @@ working-dir = "/other-test-work-dir"
{ID: "test.bp.one.local", Version: "1.0.0", Homepage: "https://some-homepage-one"},
{ID: "test.bp.two.local", Version: "2.0.0", Homepage: "https://some-homepage-two"},
},
Base: platform.RunImageMetadata{
Base: platform.RunImageForRebase{
TopLayer: "some-local-top-layer",
Reference: "some-local-run-image-reference",
},
Stack: platform.StackMetadata{
RunImage: platform.StackRunImageMetadata{
RunImage: platform.RunImageForExport{
Image: "some-local-run-image",
Mirrors: []string{"some-local-mirror", "other-local-mirror"},
},
Expand Down
8 changes: 4 additions & 4 deletions internal/inspectimage/writer/yaml_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -132,12 +132,12 @@ remote_info:
{ID: "test.bp.one.remote", Version: "1.0.0", Homepage: "https://some-homepage-one"},
{ID: "test.bp.two.remote", Version: "2.0.0", Homepage: "https://some-homepage-two"},
},
Base: platform.RunImageMetadata{
Base: platform.RunImageForRebase{
TopLayer: "some-remote-top-layer",
Reference: "some-remote-run-image-reference",
},
Stack: platform.StackMetadata{
RunImage: platform.StackRunImageMetadata{
RunImage: platform.RunImageForExport{
Image: "some-remote-run-image",
Mirrors: []string{"some-remote-mirror", "other-remote-mirror"},
},
Expand Down Expand Up @@ -187,12 +187,12 @@ remote_info:
{ID: "test.bp.one.local", Version: "1.0.0", Homepage: "https://some-homepage-one"},
{ID: "test.bp.two.local", Version: "2.0.0", Homepage: "https://some-homepage-two"},
},
Base: platform.RunImageMetadata{
Base: platform.RunImageForRebase{
TopLayer: "some-local-top-layer",
Reference: "some-local-run-image-reference",
},
Stack: platform.StackMetadata{
RunImage: platform.StackRunImageMetadata{
RunImage: platform.RunImageForExport{
Image: "some-local-run-image",
Mirrors: []string{"some-local-mirror", "other-local-mirror"},
},
Expand Down
6 changes: 3 additions & 3 deletions pkg/client/inspect_image.go
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ type ImageInfo struct {
// the first 1 to k layers all belong to the run image,
// the last k+1 to n layers are added by buildpacks.
// the sum of all of these is our app image.
Base platform.RunImageMetadata
Base platform.RunImageForRebase

// BOM or Bill of materials, contains dependency and
// version information provided by each buildpack.
Expand All @@ -68,8 +68,8 @@ type ProcessDetails struct {

// Deserialize just the subset of fields we need to avoid breaking changes
type layersMetadata struct {
RunImage platform.RunImageMetadata `json:"runImage" toml:"run-image"`
Stack platform.StackMetadata `json:"stack" toml:"stack"`
RunImage platform.RunImageForRebase `json:"runImage" toml:"run-image"`
Stack platform.StackMetadata `json:"stack" toml:"stack"`
}

const (
Expand Down
10 changes: 5 additions & 5 deletions pkg/client/inspect_image_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -219,7 +219,7 @@ func testInspectImage(t *testing.T, when spec.G, it spec.S) {
h.AssertNil(t, err)
h.AssertEq(t, info.Stack,
platform.StackMetadata{
RunImage: platform.StackRunImageMetadata{
RunImage: platform.RunImageForExport{
Image: "some-run-image",
Mirrors: []string{
"some-mirror",
Expand All @@ -235,7 +235,7 @@ func testInspectImage(t *testing.T, when spec.G, it spec.S) {
h.AssertNil(t, err)
h.AssertEq(t, infoWithExtension.Stack,
platform.StackMetadata{
RunImage: platform.StackRunImageMetadata{
RunImage: platform.RunImageForExport{
Image: "some-run-image",
Mirrors: []string{
"some-mirror",
Expand All @@ -250,7 +250,7 @@ func testInspectImage(t *testing.T, when spec.G, it spec.S) {
info, err := subject.InspectImage("some/image", useDaemon)
h.AssertNil(t, err)
h.AssertEq(t, info.Base,
platform.RunImageMetadata{
platform.RunImageForRebase{
TopLayer: "some-top-layer",
Reference: "some-run-image-reference",
},
Expand All @@ -261,7 +261,7 @@ func testInspectImage(t *testing.T, when spec.G, it spec.S) {
infoWithExtension, err := subject.InspectImage("some/imageWithExtension", useDaemon)
h.AssertNil(t, err)
h.AssertEq(t, infoWithExtension.Base,
platform.RunImageMetadata{
platform.RunImageForRebase{
TopLayer: "some-top-layer",
Reference: "some-run-image-reference",
},
Expand Down Expand Up @@ -847,7 +847,7 @@ func testInspectImage(t *testing.T, when spec.G, it spec.S) {
info, err := subject.InspectImage("old/image", true)
h.AssertNil(t, err)
h.AssertEq(t, info.Base,
platform.RunImageMetadata{
platform.RunImageForRebase{
TopLayer: "some-top-layer",
Reference: "",
},
Expand Down
6 changes: 5 additions & 1 deletion pkg/client/rebase.go
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,10 @@ type RebaseOptions struct {

// If provided, directory to which report.toml will be copied
ReportDestinationDir string

// Pass-through force flag to lifecycle rebase command to skip target data
// validated (will not have any effect if API < 0.12).
Force bool
}

// Rebase updates the run image layers in an app image.
Expand Down Expand Up @@ -85,7 +89,7 @@ func (c *Client) Rebase(ctx context.Context, opts RebaseOptions) error {
}

c.logger.Infof("Rebasing %s on run image %s", style.Symbol(appImage.Name()), style.Symbol(baseImage.Name()))
rebaser := &lifecycle.Rebaser{Logger: c.logger, PlatformAPI: build.SupportedPlatformAPIVersions.Latest()}
rebaser := &lifecycle.Rebaser{Logger: c.logger, PlatformAPI: build.SupportedPlatformAPIVersions.Latest(), Force: opts.Force}
report, err := rebaser.Rebase(appImage, baseImage, appImage.Name(), nil)
if err != nil {
return err
Expand Down