Skip to content

Commit

Permalink
Merge branch 'master' into verbose-logging
Browse files Browse the repository at this point in the history
  • Loading branch information
jromero committed May 20, 2020
2 parents 6be9723 + 896eb4e commit d164cf7
Show file tree
Hide file tree
Showing 13 changed files with 202 additions and 98 deletions.
17 changes: 11 additions & 6 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -15,21 +15,25 @@ jobs:
strategy:
fail-fast: false
matrix:
os: [macos, linux, windows-lcow, windows-wcow]
config: [macos, linux, windows-lcow, windows-wcow]
include:
- os: macos
- config: macos
os: macos
runner: macos-latest
no_docker: "true"
pack_bin: pack
- os: linux
- config: linux
os: linux
runner: ubuntu-latest
no_docker: "false"
pack_bin: pack
- os: windows-lcow
- config: windows-lcow
os: windows
runner: [self-hosted, windows]
no_docker: "false"
pack_bin: pack.exe
- os: windows-wcow
- config: windows-wcow
os: windows
runner: windows-latest
no_docker: "false"
pack_bin: pack.exe
Expand All @@ -54,7 +58,7 @@ jobs:
echo "::add-path::$(go env GOPATH)/bin"
- name: Verify
# disabled for windows due to format verification failing
if: ${{ !contains(matrix.os, 'windows') }}
if: matrix.os != 'windows'
run: make verify
- name: Test
env:
Expand All @@ -71,6 +75,7 @@ jobs:
env:
PACK_BUILD: ${{ github.run_number }}
- uses: actions/upload-artifact@v1
if: matrix.config != 'windows-wcow'
with:
name: pack-${{ matrix.os }}
path: out/${{ env.PACK_BIN }}
Expand Down
45 changes: 25 additions & 20 deletions acceptance/acceptance_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@ type testWriter struct {
}

func (w *testWriter) Write(p []byte) (n int, err error) {
w.t.Log(string(p))
w.t.Logf(string(p))
return len(p), nil
}

Expand Down Expand Up @@ -263,13 +263,14 @@ func testWithoutSpecificBuilderRequirement(

when("suggest-builders", func() {
it("displays suggested builders", func() {
cmd := subjectPack("suggest-builders")
output, err := cmd.CombinedOutput()
if err != nil {
t.Fatalf("suggest-builders command failed: %s: %s", output, err)
}
h.AssertContains(t, string(output), "Suggested builders:")
h.AssertContains(t, string(output), "gcr.io/paketo-buildpacks/builder:base")
output := h.Run(t, subjectPack("suggest-builders"))

h.AssertContains(t, output, "Suggested builders:")
h.AssertMatch(t, output, `Google:\s+'gcr.io/buildpacks/builder'`)
h.AssertMatch(t, output, `Heroku:\s+'heroku/buildpacks:18'`)
h.AssertMatch(t, output, `Paketo Buildpacks:\s+'gcr.io/paketo-buildpacks/builder:base'`)
h.AssertMatch(t, output, `Paketo Buildpacks:\s+'gcr.io/paketo-buildpacks/builder:full-cf'`)
h.AssertMatch(t, output, `Paketo Buildpacks:\s+'gcr.io/paketo-buildpacks/builder:tiny'`)
})
})

Expand Down Expand Up @@ -496,6 +497,22 @@ func testWithoutSpecificBuilderRequirement(
})
})
})

when("build", func() {
when("default builder is not set", func() {
it("informs the user", func() {
cmd := subjectPack("build", "some/image", "-p", filepath.Join("testdata", "mock_app"))
output, err := h.RunE(cmd)
h.AssertNotNil(t, err)
h.AssertContains(t, output, `Please select a default builder with:`)
h.AssertMatch(t, output, `Google:\s+'gcr.io/buildpacks/builder'`)
h.AssertMatch(t, output, `Heroku:\s+'heroku/buildpacks:18'`)
h.AssertMatch(t, output, `Paketo Buildpacks:\s+'gcr.io/paketo-buildpacks/builder:base'`)
h.AssertMatch(t, output, `Paketo Buildpacks:\s+'gcr.io/paketo-buildpacks/builder:full-cf'`)
h.AssertMatch(t, output, `Paketo Buildpacks:\s+'gcr.io/paketo-buildpacks/builder:tiny'`)
})
})
})
}

func testAcceptance(
Expand Down Expand Up @@ -1432,18 +1449,6 @@ include = [ "*.jar", "media/mountain.jpg", "media/person.png" ]
})
})
})

when("default builder is not set", func() {
it("informs the user", func() {
cmd := subjectPack("build", repoName, "-p", filepath.Join("testdata", "mock_app"))
output, err := h.RunE(cmd)
h.AssertNotNil(t, err)
h.AssertContains(t, output, `Please select a default builder with:`)
h.AssertMatch(t, output, `Paketo Buildpacks:\s+'gcr.io/paketo-buildpacks/builder:base'`)
h.AssertMatch(t, output, `Paketo Buildpacks:\s+'gcr.io/paketo-buildpacks/builder:full-cf'`)
h.AssertMatch(t, output, `Heroku:\s+'heroku/buildpacks:18'`)
})
})
})

when("inspect-builder", func() {
Expand Down
6 changes: 3 additions & 3 deletions acceptance/github_asset_fetcher.go
Original file line number Diff line number Diff line change
Expand Up @@ -84,7 +84,7 @@ func NewGithubAssetFetcher(githubToken string, logger logging.Logger) (*GithubAs
// The return value is the location of the asset on disk, or any error encountered.
func (f *GithubAssetFetcher) FetchReleaseAsset(owner, repo, version string, expr *regexp.Regexp, extract bool) (string, error) {
if destPath, _ := f.cachedAsset(owner, repo, version, expr); destPath != "" {
f.logger.Infof("found %s in cache for %s/%s %s", destPath, owner, repo, version)
f.logger.Infof("found %s in cache for %s/%s@%s", destPath, owner, repo, version)
return destPath, nil
}

Expand Down Expand Up @@ -159,7 +159,7 @@ func extractType(extract bool, assetName string) string {

func (f *GithubAssetFetcher) FetchReleaseSource(owner, repo, version string) (string, error) {
if destDir, _ := f.cachedSource(owner, repo, version); destDir != "" {
f.logger.Infof("found %s in cache for %s/%s %s", destDir, owner, repo, version)
f.logger.Infof("found %s in cache for %s/%s@%s", destDir, owner, repo, version)
return destDir, nil
}

Expand Down Expand Up @@ -191,7 +191,7 @@ func (f *GithubAssetFetcher) FetchReleaseSource(owner, repo, version string) (st
// Ex: when n is -1, the latest patch of the previous minor version is returned.
func (f *GithubAssetFetcher) FetchReleaseVersion(owner, repo string, n int) (string, error) {
if version, _ := f.cachedVersion(owner, repo, n); version != "" {
f.logger.Infof("found %s in cache for %s/%s %d", version, owner, repo, n)
f.logger.Infof("found %s in cache for %s/%s n%d", version, owner, repo, n)
return version, nil
}

Expand Down
28 changes: 25 additions & 3 deletions builder/config_reader_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -42,19 +42,41 @@ func testConfig(t *testing.T, when spec.G, it spec.S) {
it.Before(func() {
h.AssertNil(t, ioutil.WriteFile(builderConfigPath, []byte(`
[[buildpacks]]
id = "some.buildpack"
id = "buildpack/1"
version = "0.0.1"
uri = "https://example.com/buildpack-1.tgz"
[[buildpacks]]
image = "example.com/buildpack:2"
[[buildpacks]]
uri = "https://example.com/buildpack-3.tgz"
[[order]]
[[order.group]]
id = "some.buildpack"
id = "buildpack/1"
`), 0666))
})

it("returns a builder config", func() {
builderConfig, warns, err := builder.ReadConfig(builderConfigPath)
h.AssertNil(t, err)
h.AssertEq(t, len(warns), 0)
h.AssertEq(t, builderConfig.Buildpacks[0].ID, "some.buildpack")

h.AssertEq(t, builderConfig.Buildpacks[0].ID, "buildpack/1")
h.AssertEq(t, builderConfig.Buildpacks[0].Version, "0.0.1")
h.AssertEq(t, builderConfig.Buildpacks[0].URI, "https://example.com/buildpack-1.tgz")
h.AssertEq(t, builderConfig.Buildpacks[0].ImageName, "")

h.AssertEq(t, builderConfig.Buildpacks[1].ID, "")
h.AssertEq(t, builderConfig.Buildpacks[1].URI, "")
h.AssertEq(t, builderConfig.Buildpacks[1].ImageName, "example.com/buildpack:2")

h.AssertEq(t, builderConfig.Buildpacks[2].ID, "")
h.AssertEq(t, builderConfig.Buildpacks[2].URI, "https://example.com/buildpack-3.tgz")
h.AssertEq(t, builderConfig.Buildpacks[2].ImageName, "")

h.AssertEq(t, builderConfig.Order[0].Group[0].ID, "buildpack/1")
})
})

Expand Down
18 changes: 18 additions & 0 deletions codecov.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
codecov:
notify:
after_n_builds: 4

coverage:
round: up
status:
project:
default:
threshold: 1%
patch:
default:
threshold: 1%

comment:
layout: "reach,diff,flags"
require_changes: yes
after_n_builds: 4
23 changes: 15 additions & 8 deletions create_builder.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,11 +8,10 @@ import (
"github.com/buildpacks/imgutil"
"github.com/pkg/errors"

"github.com/buildpacks/pack/internal/buildpack"
"github.com/buildpacks/pack/internal/buildpackage"

pubbldr "github.com/buildpacks/pack/builder"
"github.com/buildpacks/pack/internal/builder"
"github.com/buildpacks/pack/internal/buildpack"
"github.com/buildpacks/pack/internal/buildpackage"
"github.com/buildpacks/pack/internal/dist"
"github.com/buildpacks/pack/internal/image"
"github.com/buildpacks/pack/internal/layer"
Expand All @@ -34,19 +33,19 @@ func (c *Client) CreateBuilder(ctx context.Context, opts CreateBuilderOptions) e
return err
}

builder, err := c.createBaseBuilder(ctx, opts)
bldr, err := c.createBaseBuilder(ctx, opts)
if err != nil {
return errors.Wrap(err, "failed to create builder")
}

if err := c.addBuildpacksToBuilder(ctx, opts, builder); err != nil {
if err := c.addBuildpacksToBuilder(ctx, opts, bldr); err != nil {
return errors.Wrap(err, "failed to add buildpacks to builder")
}

builder.SetOrder(opts.Config.Order)
builder.SetStack(opts.Config.Stack)
bldr.SetOrder(opts.Config.Order)
bldr.SetStack(opts.Config.Stack)

return builder.Save(c.logger)
return bldr.Save(c.logger)
}

func (c *Client) validateConfig(ctx context.Context, opts CreateBuilderOptions) error {
Expand Down Expand Up @@ -176,6 +175,8 @@ func (c *Client) fetchLifecycle(ctx context.Context, config pubbldr.LifecycleCon

func (c *Client) addBuildpacksToBuilder(ctx context.Context, opts CreateBuilderOptions, bldr *builder.Builder) error {
for _, b := range opts.Config.Buildpacks {
c.logger.Debugf("Looking up buildpack %s", style.Symbol(b.FullName()))

locator := b.URI
if locator == "" && b.ImageName != "" {
locator = b.ImageName
Expand All @@ -189,6 +190,8 @@ func (c *Client) addBuildpacksToBuilder(ctx context.Context, opts CreateBuilderO
var bps []dist.Buildpack
switch locatorType {
case buildpack.RegistryLocator:
c.logger.Debugf("Downloading buildpack from registry: %s", style.Symbol(b.URI))

registryCache, err := c.getRegistry(c.logger, opts.Registry)
if err != nil {
return errors.Wrapf(err, "invalid registry '%s'", opts.Registry)
Expand All @@ -206,13 +209,17 @@ func (c *Client) addBuildpacksToBuilder(ctx context.Context, opts CreateBuilderO

bps = append([]dist.Buildpack{mainBP}, depBPs...)
case buildpack.PackageLocator:
c.logger.Debugf("Downloading buildpack from image: %s", style.Symbol(b.ImageName))

mainBP, depBPs, err := extractPackagedBuildpacks(ctx, b.ImageName, c.imageFetcher, opts.Publish, opts.NoPull)
if err != nil {
return err
}

bps = append([]dist.Buildpack{mainBP}, depBPs...)
case buildpack.URILocator:
c.logger.Debugf("Downloading buildpack from URI: %s", style.Symbol(b.URI))

err := ensureBPSupport(b.URI)
if err != nil {
return err
Expand Down
5 changes: 5 additions & 0 deletions internal/builder/builder.go
Original file line number Diff line number Diff line change
Expand Up @@ -260,6 +260,11 @@ func (b *Builder) SetStack(stackConfig builder.StackConfig) {

// Save saves the builder
func (b *Builder) Save(logger logging.Logger) error {
logger.Debugf("Saving builder with the following buildpacks:")
for _, bpInfo := range b.metadata.Buildpacks {
logger.Debugf("-> %s", style.Symbol(bpInfo.FullName()))
}

resolvedOrder, err := processOrder(b.metadata.Buildpacks, b.order)
if err != nil {
return errors.Wrap(err, "processing order")
Expand Down
2 changes: 1 addition & 1 deletion internal/commands/inspect_builder_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -367,7 +367,7 @@ Stack:
h.AssertNotNil(t, command.Execute())
h.AssertContains(t, outBuf.String(), `Please select a default builder with:
pack set-default-builder <builder image>`)
pack set-default-builder <builder-image>`)
h.AssertMatch(t, outBuf.String(), `Paketo Buildpacks:\s+'gcr.io/paketo-buildpacks/builder:base'`)
h.AssertMatch(t, outBuf.String(), `Paketo Buildpacks:\s+'gcr.io/paketo-buildpacks/builder:full-cf'`)
h.AssertMatch(t, outBuf.String(), `Heroku:\s+'heroku/buildpacks:18'`)
Expand Down

0 comments on commit d164cf7

Please sign in to comment.