diff --git a/.github/pipeline-descriptor.yml b/.github/pipeline-descriptor.yml index 0a7fd07c..ec83f04f 100644 --- a/.github/pipeline-descriptor.yml +++ b/.github/pipeline-descriptor.yml @@ -32,6 +32,8 @@ actions: target: ghcr.io/paketo-buildpacks/actions/cf-java-index-dependency - source: clojure-tools-dependency target: ghcr.io/paketo-buildpacks/actions/clojure-tools-dependency +- source: draft-release + target: ghcr.io/paketo-buildpacks/actions/draft-release - source: foojay-dependency target: ghcr.io/paketo-buildpacks/actions/foojay-dependency - source: gcs-dependency diff --git a/.github/workflows/create-action-draft-release.yml b/.github/workflows/create-action-draft-release.yml new file mode 100644 index 00000000..a4aa7e5d --- /dev/null +++ b/.github/workflows/create-action-draft-release.yml @@ -0,0 +1,55 @@ +name: Create Action draft-release +"on": + pull_request: + paths: + - actions/* + - actions/draft-release/* + push: + branches: + - main + paths: + - actions/* + - actions/draft-release/* + release: + types: + - published +jobs: + create-action: + name: Create Action + runs-on: + - ubuntu-latest + steps: + - name: Docker login ghcr.io + if: ${{ (github.event_name != 'pull_request' || ! github.event.pull_request.head.repo.fork) && (github.actor != 'dependabot[bot]') }} + uses: docker/login-action@v1 + with: + password: ${{ secrets.JAVA_GITHUB_TOKEN }} + registry: ghcr.io + username: ${{ secrets.JAVA_GITHUB_USERNAME }} + - uses: actions/checkout@v3 + - name: Create Action + run: | + #!/usr/bin/env bash + + set -euo pipefail + + echo "::group::Building ${TARGET}:${VERSION}" + docker build \ + --file actions/Dockerfile \ + --build-arg "SOURCE=${SOURCE}" \ + --tag "${TARGET}:${VERSION}" \ + . + echo "::endgroup::" + + if [[ "${PUSH}" == "true" ]]; then + echo "::group::Pushing ${TARGET}:${VERSION}" + docker push "${TARGET}:${VERSION}" + echo "::endgroup::" + else + echo "Skipping push" + fi + env: + PUSH: ${{ github.event_name != 'pull_request' }} + SOURCE: draft-release + TARGET: ghcr.io/paketo-buildpacks/actions/draft-release + VERSION: main diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 33ea0334..3037484a 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -5,6 +5,85 @@ name: Tests branches: - main jobs: + integration: + name: Integration Test + runs-on: + - ubuntu-latest + steps: + - uses: actions/checkout@v2 + - uses: actions/cache@v2 + with: + key: ${{ runner.os }}-go-${{ hashFiles('**/go.sum') }} + path: ${{ env.HOME }}/go/pkg/mod + restore-keys: ${{ runner.os }}-go- + - uses: actions/setup-go@v2 + with: + go-version: "1.17" + - name: Install create-package + run: | + #!/usr/bin/env bash + + set -euo pipefail + + GO111MODULE=on go get -u -ldflags="-s -w" github.com/paketo-buildpacks/libpak/cmd/create-package + - name: Install pack + run: | + #!/usr/bin/env bash + + set -euo pipefail + + echo "Installing pack ${PACK_VERSION}" + + mkdir -p "${HOME}"/bin + echo "${HOME}/bin" >> "${GITHUB_PATH}" + + curl \ + --location \ + --show-error \ + --silent \ + "https://github.com/buildpacks/pack/releases/download/v${PACK_VERSION}/pack-v${PACK_VERSION}-linux.tgz" \ + | tar -C "${HOME}"/bin -xz pack + env: + PACK_VERSION: 0.24.0 + - name: Enable pack Experimental + if: ${{ false }} + run: | + #!/usr/bin/env bash + + set -euo pipefail + + echo "Enabling pack experimental features" + + mkdir -p "${HOME}"/.pack + echo "experimental = true" >> "${HOME}"/.pack/config.toml + - name: Install richgo + run: | + #!/usr/bin/env bash + + set -euo pipefail + + echo "Installing richgo ${RICHGO_VERSION}" + + mkdir -p "${HOME}"/bin + echo "${HOME}/bin" >> "${GITHUB_PATH}" + + curl \ + --location \ + --show-error \ + --silent \ + "https://github.com/kyoh86/richgo/releases/download/v${RICHGO_VERSION}/richgo_${RICHGO_VERSION}_linux_amd64.tar.gz" \ + | tar -C "${HOME}"/bin -xz richgo + env: + RICHGO_VERSION: 0.3.10 + - name: Run Tests + run: | + #!/usr/bin/env bash + + set -euo pipefail + + richgo test ./integration/... -run Integration + env: + RICHGO_FORCE_COLOR: "1" unit: name: Unit Test runs-on: @@ -44,6 +123,6 @@ jobs: set -euo pipefail - richgo test ./... + richgo test ./... -run Unit env: RICHGO_FORCE_COLOR: "1" diff --git a/actions/action.go b/actions/action.go index cfa3e374..0ef4741b 100644 --- a/actions/action.go +++ b/actions/action.go @@ -29,7 +29,7 @@ import ( type Inputs map[string]string func NewInputs() Inputs { - re := regexp.MustCompile("^INPUT_([A-Z0-9-_]+)=(.+)$") + re := regexp.MustCompile("^INPUT_([A-Z0-9-_]+)=((?s).+)$") i := make(Inputs) for _, s := range os.Environ() { diff --git a/actions/draft-release/draft.template b/actions/draft-release/draft.template new file mode 100644 index 00000000..e340d43d --- /dev/null +++ b/actions/draft-release/draft.template @@ -0,0 +1,67 @@ +**ID**: `{{ .PrimaryBuildpack.Info.ID }}` +**Digest**: + +{{ if .NestedBuildpacks -}} +#### Included Buildpackages: +Name | ID | Version +:--- | :- | :------ +{{ range .NestedBuildpacks -}} +{{ .Info.Name }} | `{{ .Info.ID }}` | `{{ .Info.Version }}` +{{ end -}} +{{ end -}} + +{{ if .PrimaryBuildpack.Stacks }} +#### Supported Stacks: +{{ range .PrimaryBuildpack.Stacks -}} +- `{{ .ID }}` +{{ end -}} +{{ end }} + +{{ if .PrimaryBuildpack.Dependencies }} +#### Dependencies: +Name | Version | SHA256 +:--- | :------ | :----- +{{ range .PrimaryBuildpack.Dependencies -}} +{{ .Name }} | `{{ .Version }}` | `{{ .SHA256 }}` +{{ end }} +{{ end }} +{{ if .PrimaryBuildpack.OrderGroups }} +
+Order Groupings + +{{ range .PrimaryBuildpack.OrderGroups -}} +ID | Version | Optional +:- | :------ | :------- +{{ range .Groups -}} +`{{ .ID }}` | `{{ .Version }}` | `{{ .Optional }}` +{{ end }} +{{ end -}} +
+{{ end }} +--- + +{{ range .NestedBuildpacks -}} +
+{{- .Info.Name }} {{ .Info.Version -}} + +**ID**: `{{ .Info.ID }}` + +{{ if .Stacks -}} +#### Supported Stacks: +{{ range .Stacks -}} +- `{{ .ID }}` +{{ end -}} +{{ end }} +{{ if .Dependencies -}} +#### Dependencies: +Name | Version | SHA256 +:--- | :------ | :----- +{{ range .Dependencies -}} +{{ .Name }} | `{{ .Version }}` | `{{ .SHA256 }}` +{{ end -}} +{{ end -}} + +--- +
+{{ end }} +{{ .Release.Body -}} \ No newline at end of file diff --git a/actions/draft-release/main.go b/actions/draft-release/main.go new file mode 100644 index 00000000..41ef8742 --- /dev/null +++ b/actions/draft-release/main.go @@ -0,0 +1,90 @@ +/* + * Copyright 2018-2022 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package main + +import ( + _ "embed" + + "fmt" + "io/ioutil" + "path/filepath" + + "github.com/paketo-buildpacks/libpak/effect" + "github.com/paketo-buildpacks/pipeline-builder/actions" + "github.com/paketo-buildpacks/pipeline-builder/drafts" +) + +//go:embed "draft.template" +var templateContents string + +func main() { + inputs := actions.NewInputs() + + drafter := drafts.Drafter{Loader: drafts.RegistryBuildpackLoader{}} + payload, err := drafter.CreatePayload(inputs, ".") + if err != nil { + panic(err) + } + + scratchDir, err := ioutil.TempDir("", "drafts") + if err != nil { + panic(err) + } + + err = drafter.BuildAndWriteReleaseToFileDraftFromTemplate( + filepath.Join(scratchDir, "body"), templateContents, payload) + if err != nil { + panic(err) + } + + name := payload.Release.Name + if payload.PrimaryBuildpack.Info.Name != "" { + name = fmt.Sprintf("%s %s", payload.PrimaryBuildpack.Info.Name, payload.Release.Name) + } + + err = ioutil.WriteFile(filepath.Join(scratchDir, "name"), []byte(name), 0644) + if err != nil { + panic(err) + } + + execution := effect.Execution{ + Command: "gh", + Args: []string{ + "api", + "--method", "PATCH", + fmt.Sprintf("/repos/:owner/:repo/releases/%s", payload.Release.ID), + "--field", fmt.Sprintf("tag_name=%s", payload.Release.Tag), + "--field", fmt.Sprintf("name=@%s/name", scratchDir), + "--field", fmt.Sprintf("body=@%s/body", scratchDir), + }, + } + if _, dryRun := inputs["dry_run"]; dryRun { + bits, err := ioutil.ReadFile(filepath.Join(scratchDir, "body")) + if err != nil { + panic(err) + } + + fmt.Println("Title:", name) + fmt.Println("Body:", string(bits)) + fmt.Println("Would execute:", execution) + } else { + err = effect.NewExecutor().Execute(execution) + if err != nil { + panic(fmt.Errorf("unable to execute %s\n%w", execution, err)) + } + } +} diff --git a/drafts/drafts.go b/drafts/drafts.go new file mode 100644 index 00000000..e558d565 --- /dev/null +++ b/drafts/drafts.go @@ -0,0 +1,404 @@ +/* + * Copyright 2018-2022 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package drafts + +import ( + "archive/tar" + "bytes" + "fmt" + "io" + "io/ioutil" + "os" + "path/filepath" + "strings" + "text/template" + + "github.com/BurntSushi/toml" + "github.com/buildpacks/libcnb" + "github.com/google/go-containerregistry/pkg/authn" + "github.com/google/go-containerregistry/pkg/name" + "github.com/google/go-containerregistry/pkg/v1/mutate" + "github.com/google/go-containerregistry/pkg/v1/remote" + "github.com/paketo-buildpacks/libpak" + "github.com/paketo-buildpacks/pipeline-builder/actions" +) + +type Payload struct { + PrimaryBuildpack Buildpack + Builder Builder + NestedBuildpacks []Buildpack + OrderGroups [][]libcnb.BuildpackOrderBuildpack + Release Release +} + +type Buildpack struct { + libcnb.Buildpack + OrderGroups []libcnb.BuildpackOrder `toml:"order"` + Dependencies []libpak.BuildpackDependency +} + +type Builder struct { + Description string + Buildpacks []struct { + URI string + } + OrderGroups []libcnb.BuildpackOrder `toml:"order"` + Stack BuilderStack `toml:"stack"` +} + +type BuilderStack struct { + ID string `toml:"id"` + BuildImage string `toml:"build-image"` + RunImage string `toml:"run-image"` +} + +func (b Builder) Flatten() []string { + tmp := []string{} + + for _, bp := range b.Buildpacks { + tmp = append(tmp, strings.TrimPrefix(bp.URI, "docker://")) + } + + return tmp +} + +type Package struct { + Dependencies []struct { + URI string `toml:"uri"` + } +} + +func (b Package) Flatten() []string { + tmp := []string{} + + for _, bp := range b.Dependencies { + tmp = append(tmp, strings.TrimPrefix(bp.URI, "docker://")) + } + + return tmp +} + +type Release struct { + ID string + Name string + Body string + Tag string +} + +//go:generate mockery --name BuildpackLoader --case=underscore + +type BuildpackLoader interface { + LoadBuildpack(id string) (Buildpack, error) + LoadBuildpacks(uris []string) ([]Buildpack, error) +} + +type Drafter struct { + Loader BuildpackLoader +} + +func (d Drafter) BuildAndWriteReleaseToFileDraftFromTemplate(outputPath, templateContents string, context interface{}) error { + fp, err := os.Create(outputPath) + if err != nil { + return fmt.Errorf("unable to create file %s\n%w", outputPath, err) + } + defer fp.Close() + + return d.BuildAndWriteReleaseDraftFromTemplate(fp, templateContents, context) +} + +func (d Drafter) BuildAndWriteReleaseDraftFromTemplate(output io.Writer, templateContents string, context interface{}) error { + tmpl, err := template.New("draft").Parse(templateContents) + if err != nil { + return fmt.Errorf("unable to parse template %q\n%w", templateContents, err) + } + + err = tmpl.Execute(output, context) + if err != nil { + return fmt.Errorf("unable to execute template %q\n%w", templateContents, err) + } + + return nil +} + +func (d Drafter) CreatePayload(inputs actions.Inputs, buildpackPath string) (Payload, error) { + release := Release{ + ID: inputs["release_id"], + Name: inputs["release_name"], + Body: inputs["release_body"], + Tag: inputs["release_tag_name"], + } + + builder, err := loadBuilderTOML(buildpackPath) + if err != nil { + return Payload{}, err + } + + if builder != nil { + bps, err := d.Loader.LoadBuildpacks(builder.Flatten()) + if err != nil { + return Payload{}, fmt.Errorf("unable to load buildpacks\n%w", err) + } + + return Payload{ + PrimaryBuildpack: Buildpack{}, + Builder: *builder, + NestedBuildpacks: bps, + Release: release, + }, nil + } + + bp, err := loadBuildpackTOMLFromFile(buildpackPath) + if err != nil { + return Payload{}, err + } + + pkg, err := loadPackage(buildpackPath) + if err != nil { + return Payload{}, err + } + + if bp != nil && pkg == nil { // component + return Payload{ + PrimaryBuildpack: *bp, + Release: release, + }, nil + } else if bp != nil && pkg != nil { // composite + bps, err := d.Loader.LoadBuildpacks(pkg.Flatten()) + if err != nil { + return Payload{}, fmt.Errorf("unable to load buildpacks\n%w", err) + } + + return Payload{ + NestedBuildpacks: bps, + PrimaryBuildpack: *bp, + Release: release, + }, nil + } + + return Payload{}, fmt.Errorf("unable to generate payload, need buildpack.toml or buildpack.toml + package.toml or builder.toml") +} + +func loadBuildpackTOMLFromFile(buildpackPath string) (*Buildpack, error) { + rawTOML, err := ioutil.ReadFile(filepath.Join(buildpackPath, "buildpack.toml")) + if err != nil && os.IsNotExist(err) { + return nil, nil + } else if err != nil { + return nil, fmt.Errorf("unable to read buildpack toml\n%w", err) + } + + return loadBuildpackTOML(rawTOML) +} + +func loadBuildpackTOML(TOML []byte) (*Buildpack, error) { + bp := &Buildpack{} + if err := toml.Unmarshal(TOML, bp); err != nil { + return nil, fmt.Errorf("unable to parse buildpack TOML\n%w", err) + } + + if deps, found := bp.Metadata["dependencies"]; found { + if depList, ok := deps.([]map[string]interface{}); ok { + for _, dep := range depList { + bpDep := libpak.BuildpackDependency{ + ID: asString(dep, "id"), + Name: asString(dep, "name"), + Version: asString(dep, "version"), + URI: asString(dep, "uri"), + SHA256: asString(dep, "sha256"), + PURL: asString(dep, "purl"), + } + + if stacks, ok := dep["stacks"].([]interface{}); ok { + for _, stack := range stacks { + if stack, ok := stack.(string); ok { + bpDep.Stacks = append(bpDep.Stacks, stack) + } + } + } + + if cpes, ok := dep["cpes"].([]interface{}); ok { + for _, cpe := range cpes { + if cpe, ok := cpe.(string); ok { + bpDep.CPEs = append(bpDep.CPEs, cpe) + } + } + } + + if licenses, ok := dep["licenses"].([]map[string]interface{}); ok { + for _, license := range licenses { + bpDep.Licenses = append(bpDep.Licenses, libpak.BuildpackDependencyLicense{ + Type: asString(license, "type"), + URI: asString(license, "uri"), + }) + } + } + + bp.Dependencies = append(bp.Dependencies, bpDep) + } + } else { + return nil, fmt.Errorf("unable to read dependencies from %v", bp.Metadata) + } + } + + return bp, nil +} + +func asString(m map[string]interface{}, key string) string { + if tmp, ok := m[key].(string); ok { + return tmp + } + + return "" +} + +func loadPackage(buildpackPath string) (*Package, error) { + rawTOML, err := ioutil.ReadFile(filepath.Join(buildpackPath, "package.toml")) + if err != nil && os.IsNotExist(err) { + return nil, nil + } else if err != nil { + return nil, fmt.Errorf("unable to read package toml\n%w", err) + } + + pkg := &Package{} + if err := toml.Unmarshal(rawTOML, pkg); err != nil { + return nil, fmt.Errorf("unable to parse package TOML\n%w", err) + } + + return pkg, nil +} + +func loadBuilderTOML(buildpackPath string) (*Builder, error) { + rawTOML, err := ioutil.ReadFile(filepath.Join(buildpackPath, "builder.toml")) + if err != nil && os.IsNotExist(err) { + return nil, nil + } else if err != nil { + return nil, fmt.Errorf("unable to read builder toml\n%w", err) + } + + builder := &Builder{} + if err := toml.Unmarshal(rawTOML, builder); err != nil { + return nil, fmt.Errorf("unable to parse builder TOML\n%w", err) + } + + return builder, nil +} + +type RegistryBuildpackLoader struct{} + +func (r RegistryBuildpackLoader) LoadBuildpacks(uris []string) ([]Buildpack, error) { + buildpacks := []Buildpack{} + + for _, uri := range uris { + bp, err := r.LoadBuildpack(uri) + if err != nil { + return []Buildpack{}, fmt.Errorf("unable to process %s\n%w", uri, err) + } + buildpacks = append(buildpacks, bp) + } + + return buildpacks, nil +} + +func (r RegistryBuildpackLoader) LoadBuildpack(uri string) (Buildpack, error) { + tarFile, err := ioutil.TempFile("", "tarfiles") + if err != nil { + return Buildpack{}, fmt.Errorf("unable to create tempfile\n%w", err) + } + defer os.Remove(tarFile.Name()) + + err = loadBuildpackImage(uri, tarFile) + if err != nil { + return Buildpack{}, fmt.Errorf("unable to load %s\n%w", uri, err) + } + + _, err = tarFile.Seek(0, 0) + if err != nil { + return Buildpack{}, fmt.Errorf("unable to reset file pointer\n%w", err) + } + + bpTOML, err := readBuildpackTOML(tarFile) + if err != nil { + return Buildpack{}, err + } + + bp, err := loadBuildpackTOML(bpTOML) + if err != nil { + return Buildpack{}, fmt.Errorf("unable to load buildpack toml from image\n%w", err) + } + + return *bp, nil +} + +func loadBuildpackImage(ref string, to io.Writer) error { + reference, err := name.ParseReference(ref) + if err != nil { + return fmt.Errorf("unable to parse reference for existing buildpack tag\n%w", err) + } + + img, err := remote.Image(reference, remote.WithAuthFromKeychain(authn.DefaultKeychain)) + if err != nil { + return fmt.Errorf("unable to fetch remote image\n%w", err) + } + + layers, err := img.Layers() + if err != nil { + return fmt.Errorf("unable to fetch layer\n%w", err) + } + + if len(layers) == 1 { + l := layers[0] + rc, err := l.Uncompressed() + if err != nil { + return fmt.Errorf("unable to get uncompressed reader\n%w", err) + } + _, err = io.Copy(to, rc) + return err + } + + fs := mutate.Extract(img) + _, err = io.Copy(to, fs) + return err +} + +func readBuildpackTOML(tarFile *os.File) ([]byte, error) { + t := tar.NewReader(tarFile) + for { + f, err := t.Next() + if err != nil && err == io.EOF { + break + } else if err != nil { + return []byte{}, fmt.Errorf("unable to read TAR file\n%w", err) + } + + if strings.HasSuffix(f.Name, "buildpack.toml") { + info := f.FileInfo() + + if info.IsDir() || (info.Mode()&os.ModeSymlink != 0) { + return []byte{}, fmt.Errorf("unable to read buildpack.toml, unexpected file type (directory or symlink)") + } + + buf := &bytes.Buffer{} + _, err := io.Copy(buf, t) + if err != nil { + return []byte{}, fmt.Errorf("unable to read buildpack.toml\n%w", err) + } + + return buf.Bytes(), nil + } + } + + return []byte{}, fmt.Errorf("unable to find buildpack.toml in image") +} diff --git a/drafts/drafts_test.go b/drafts/drafts_test.go new file mode 100644 index 00000000..3213b754 --- /dev/null +++ b/drafts/drafts_test.go @@ -0,0 +1,373 @@ +/* + * Copyright 2018-2022 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package drafts_test + +import ( + "bytes" + "io/ioutil" + "os" + "testing" + + "github.com/buildpacks/libcnb" + . "github.com/onsi/gomega" + "github.com/paketo-buildpacks/libpak" + "github.com/paketo-buildpacks/pipeline-builder/actions" + "github.com/paketo-buildpacks/pipeline-builder/drafts" + "github.com/paketo-buildpacks/pipeline-builder/drafts/mocks" + "github.com/sclevine/spec" + "github.com/stretchr/testify/mock" +) + +func testDrafts(t *testing.T, context spec.G, it spec.S) { + var ( + Expect = NewWithT(t).Expect + + dir string + + bpLoader mocks.BuildpackLoader + ) + + context("draft a release", func() { + it.Before(func() { + var err error + dir, err = ioutil.TempDir("", "drafts") + Expect(err).To(Not(HaveOccurred())) + }) + + it.After(func() { + Expect(os.RemoveAll(dir)).To(Succeed()) + }) + + context("payloads", func() { + it("creates a payload for a component buildpack", func() { + d := drafts.Drafter{Loader: &bpLoader} + + p, err := d.CreatePayload(actions.Inputs{ + "release_id": "foo-id", + "release_name": "foo-name", + "release_body": "foo-body", + "release_tag_name": "foo-tag", + }, "testdata/component") + Expect(err).ToNot(HaveOccurred()) + + Expect(p.Release).To(Equal(drafts.Release{ + ID: "foo-id", + Name: "foo-name", + Body: "foo-body", + Tag: "foo-tag", + })) + Expect(p.NestedBuildpacks).To(HaveLen(0)) + Expect(p.Builder.OrderGroups).To(HaveLen(0)) + Expect(p.Builder.Stack.ID).To(BeEmpty()) + Expect(p.Builder.Buildpacks).To(HaveLen(0)) + Expect(p.PrimaryBuildpack.OrderGroups).To(HaveLen(0)) + Expect(p.PrimaryBuildpack.Info.ID).To(Equal("example/component")) + Expect(p.PrimaryBuildpack.Info.Version).To(Equal("2.1.1")) + Expect(p.PrimaryBuildpack.Info.Name).To(Equal("Example Component Buildpack")) + Expect(p.PrimaryBuildpack.Stacks).To(ContainElements( + libcnb.BuildpackStack{ID: "stack1"}, + libcnb.BuildpackStack{ID: "stack2"}, + libcnb.BuildpackStack{ID: "*"})) + Expect(p.PrimaryBuildpack.Dependencies).To(HaveLen(2)) + Expect(p.PrimaryBuildpack.Dependencies[0].ID).To(Equal("dep")) + Expect(p.PrimaryBuildpack.Dependencies[0].Version).To(Equal("8.5.78")) + Expect(p.PrimaryBuildpack.Dependencies[0].Version).To(Equal("8.5.78")) + Expect(p.PrimaryBuildpack.Dependencies[1].Version).To(Equal("9.0.62")) + Expect(p.PrimaryBuildpack.Dependencies[0].Stacks).To(Equal([]string{"stack1", "stack2", "*"})) + Expect(p.PrimaryBuildpack.Dependencies[1].CPEs).To(Equal([]string{"cpe:2.3:a:example:dep:9.0.62:*:*:*:*:*:*:*"})) + Expect(p.PrimaryBuildpack.Dependencies[0].Licenses).To(HaveLen(1)) + Expect(p.PrimaryBuildpack.Dependencies[0].Licenses[0]).To( + Equal(libpak.BuildpackDependencyLicense{Type: "Apache-2.0", URI: "https://www.apache.org/licenses/"})) + }) + + it("creates a payload for a component buildpack without dependencies", func() { + d := drafts.Drafter{Loader: &bpLoader} + + p, err := d.CreatePayload(actions.Inputs{ + "release_id": "foo-id", + "release_name": "foo-name", + "release_body": "foo-body", + "release_tag_name": "foo-tag", + }, "testdata/component-no-deps") + Expect(err).ToNot(HaveOccurred()) + + Expect(p.Release).To(Equal(drafts.Release{ + ID: "foo-id", + Name: "foo-name", + Body: "foo-body", + Tag: "foo-tag", + })) + Expect(p.NestedBuildpacks).To(HaveLen(0)) + Expect(p.Builder.OrderGroups).To(HaveLen(0)) + Expect(p.Builder.Stack.ID).To(BeEmpty()) + Expect(p.Builder.Buildpacks).To(HaveLen(0)) + Expect(p.PrimaryBuildpack.OrderGroups).To(HaveLen(0)) + Expect(p.PrimaryBuildpack.Info.ID).To(Equal("example/component")) + Expect(p.PrimaryBuildpack.Info.Version).To(Equal("2.1.1")) + Expect(p.PrimaryBuildpack.Info.Name).To(Equal("Example Component Buildpack")) + Expect(p.PrimaryBuildpack.Stacks).To(ContainElements( + libcnb.BuildpackStack{ID: "stack1"}, + libcnb.BuildpackStack{ID: "stack2"}, + libcnb.BuildpackStack{ID: "*"})) + Expect(p.PrimaryBuildpack.Dependencies).To(HaveLen(0)) + }) + + it("creates a payload for a composite buildpack", func() { + bpLoader.On("LoadBuildpacks", mock.Anything).Return([]drafts.Buildpack{ + {Buildpack: libcnb.Buildpack{Info: libcnb.BuildpackInfo{ID: "bp1"}}}, + {Buildpack: libcnb.Buildpack{Info: libcnb.BuildpackInfo{ID: "bp2"}}}, + {Buildpack: libcnb.Buildpack{Info: libcnb.BuildpackInfo{ID: "bp3"}}}, + {Buildpack: libcnb.Buildpack{Info: libcnb.BuildpackInfo{ID: "bp4"}}}, + }, nil) + + d := drafts.Drafter{Loader: &bpLoader} + + p, err := d.CreatePayload(actions.Inputs{ + "release_id": "foo-id", + "release_name": "foo-name", + "release_body": "foo-body", + "release_tag_name": "foo-tag", + }, "testdata/composite") + Expect(err).ToNot(HaveOccurred()) + + Expect(p.Release).To(Equal(drafts.Release{ + ID: "foo-id", + Name: "foo-name", + Body: "foo-body", + Tag: "foo-tag", + })) + Expect(p.Builder.OrderGroups).To(HaveLen(0)) + Expect(p.Builder.Stack.ID).To(BeEmpty()) + Expect(p.Builder.Buildpacks).To(HaveLen(0)) + + Expect(p.PrimaryBuildpack.Info.ID).To(Equal("example/composite")) + Expect(p.PrimaryBuildpack.Info.Version).To(Equal("1.1.8")) + Expect(p.PrimaryBuildpack.Info.Name).To(Equal("Example Composite Buildpack")) + Expect(p.PrimaryBuildpack.Stacks).To(HaveLen(0)) + Expect(p.PrimaryBuildpack.OrderGroups).To(HaveLen(2)) + Expect(p.PrimaryBuildpack.OrderGroups[0].Groups).To(Equal([]libcnb.BuildpackOrderBuildpack{ + {ID: "example/bp1", Version: "3.1.0", Optional: true}, + {ID: "example/bp2", Version: "9.3.1", Optional: false}, + {ID: "example/bp3", Version: "1.10.0", Optional: true}, + })) + Expect(p.PrimaryBuildpack.OrderGroups[1].Groups).To(Equal([]libcnb.BuildpackOrderBuildpack{ + {ID: "example/bp1", Version: "3.1.0", Optional: true}, + {ID: "example/bp3", Version: "1.10.0", Optional: true}, + {ID: "example/bp4", Version: "6.5.0", Optional: true}, + })) + + Expect(p.NestedBuildpacks).To(HaveLen(4)) + for i, expectedBp := range []string{"bp1", "bp2", "bp3", "bp4"} { + Expect(p.NestedBuildpacks[i].Info.ID).To(Equal(expectedBp)) + } + }) + + it("creates a payload for a builder", func() { + bpLoader.On("LoadBuildpacks", mock.Anything).Return([]drafts.Buildpack{ + {Buildpack: libcnb.Buildpack{Info: libcnb.BuildpackInfo{ID: "bp1"}}}, + {Buildpack: libcnb.Buildpack{Info: libcnb.BuildpackInfo{ID: "bp2"}}}, + {Buildpack: libcnb.Buildpack{Info: libcnb.BuildpackInfo{ID: "bp3"}}}, + {Buildpack: libcnb.Buildpack{Info: libcnb.BuildpackInfo{ID: "bp4"}}}, + }, nil) + + d := drafts.Drafter{Loader: &bpLoader} + + p, err := d.CreatePayload(actions.Inputs{ + "release_id": "foo-id", + "release_name": "foo-name", + "release_body": "foo-body", + "release_tag_name": "foo-tag", + }, "testdata/builder") + Expect(err).ToNot(HaveOccurred()) + + Expect(p.Release).To(Equal(drafts.Release{ + ID: "foo-id", + Name: "foo-name", + Body: "foo-body", + Tag: "foo-tag", + })) + + Expect(p.PrimaryBuildpack.Info.ID).To(BeEmpty()) + Expect(p.PrimaryBuildpack.Info.Name).To(BeEmpty()) + Expect(p.PrimaryBuildpack.Info.Version).To(BeEmpty()) + Expect(p.PrimaryBuildpack.Stacks).To(HaveLen(0)) + Expect(p.PrimaryBuildpack.OrderGroups).To(HaveLen(0)) + + Expect(p.Builder.Stack).To(Equal(drafts.BuilderStack{ + ID: "stack1", + BuildImage: "example.com/example/build:base-cnb", + RunImage: "example.com/example/run:base-cnb", + })) + + Expect(p.Builder.Buildpacks).To(HaveLen(4)) + for i, expected := range []string{ + "docker://example.com/example/bp1:1.1.2", + "docker://example.com/example/bp2:1.4.1", + "docker://example.com/example/bp3:0.2.1", + "docker://example.com/example/bp4:5.0.3", + } { + Expect(p.Builder.Buildpacks[i].URI).To(Equal(expected)) + } + + Expect(p.Builder.OrderGroups).To(HaveLen(1)) + Expect(p.Builder.OrderGroups[0].Groups).To(Equal([]libcnb.BuildpackOrderBuildpack{ + {ID: "example/bp1"}, + {ID: "example/bp2"}, + {ID: "example/bp3"}, + {ID: "example/bp4"}, + })) + + Expect(p.NestedBuildpacks).To(HaveLen(4)) + for i, expectedBp := range []string{"bp1", "bp2", "bp3", "bp4"} { + Expect(p.NestedBuildpacks[i].Info.ID).To(Equal(expectedBp)) + } + }) + }) + + context("generates body", func() { + var templateContent string + + it.Before(func() { + tc, err := ioutil.ReadFile("../actions/draft-release/draft.template") + Expect(err).ToNot(HaveOccurred()) + templateContent = string(tc) + }) + + it("generates component", func() { + d := drafts.Drafter{Loader: &bpLoader} + + p, err := d.CreatePayload(actions.Inputs{ + "release_id": "foo-id", + "release_name": "foo-name", + "release_body": "foo-body", + "release_tag_name": "foo-tag", + "dry_run": "true", + }, "testdata/component") + Expect(err).ToNot(HaveOccurred()) + + buf := &bytes.Buffer{} + err = d.BuildAndWriteReleaseDraftFromTemplate(buf, templateContent, p) + Expect(err).ToNot(HaveOccurred()) + + body := buf.String() + Expect(body).To(ContainSubstring("**ID**: `example/component`")) + Expect(body).To(ContainSubstring("**Digest**: ")) + Expect(body).To(ContainSubstring("#### Supported Stacks:")) + Expect(body).To(ContainSubstring("- `stack1`")) + Expect(body).To(ContainSubstring("- `stack2`")) + Expect(body).To(ContainSubstring("- `*`")) + Expect(body).To(ContainSubstring("#### Dependencies:")) + Expect(body).To(ContainSubstring("Example Dep | `8.5.78` | `84c7707db0ce495473df2efdc93da21b6d47bf25cd0a79de52e5472ff9e5f094`")) + Expect(body).To(ContainSubstring("Example Dep | `9.0.62` | `03157728a832cf9c83048cdc28d09600cbb3e4fa087f8b97d74c8b4f34cd89bb`")) + Expect(body).To(ContainSubstring("foo-body")) + }) + + it.Focus("generates composite", func() { + bpLoader.On("LoadBuildpacks", mock.Anything).Return([]drafts.Buildpack{ + {Buildpack: libcnb.Buildpack{Info: libcnb.BuildpackInfo{ID: "bp1", Name: "BP 1", Version: "3.1.0"}}}, + {Buildpack: libcnb.Buildpack{Info: libcnb.BuildpackInfo{ID: "bp2", Name: "BP 2", Version: "9.3.1"}}}, + {Buildpack: libcnb.Buildpack{Info: libcnb.BuildpackInfo{ID: "bp3", Name: "BP 3", Version: "1.10.0"}}}, + {Buildpack: libcnb.Buildpack{Info: libcnb.BuildpackInfo{ID: "bp4", Name: "BP 4", Version: "6.5.0"}}}, + }, nil) + + d := drafts.Drafter{Loader: &bpLoader} + + p, err := d.CreatePayload(actions.Inputs{ + "release_id": "foo-id", + "release_name": "foo-name", + "release_body": "foo-body", + "release_tag_name": "foo-tag", + "dry_run": "true", + }, "testdata/composite") + Expect(err).ToNot(HaveOccurred()) + + buf := &bytes.Buffer{} + err = d.BuildAndWriteReleaseDraftFromTemplate(buf, templateContent, p) + Expect(err).ToNot(HaveOccurred()) + + body := buf.String() + Expect(body).To(ContainSubstring("**ID**: `example/composite`")) + Expect(body).To(ContainSubstring("**Digest**: ")) + Expect(body).ToNot(ContainSubstring("#### Supported Stacks:")) + Expect(body).To(ContainSubstring("#### Included Buildpackages:")) + Expect(body).To(ContainSubstring("BP 1 | `bp1` | `3.1.0`")) + Expect(body).To(ContainSubstring("BP 2 | `bp2` | `9.3.1`")) + Expect(body).To(ContainSubstring("BP 3 | `bp3` | `1.10.0`")) + Expect(body).To(ContainSubstring("BP 4 | `bp4` | `6.5.0`")) + Expect(body).To(ContainSubstring("Order Groupings")) + Expect(body).To(ContainSubstring("`example/bp1` | `3.1.0` | `true`")) + Expect(body).To(ContainSubstring("`example/bp2` | `9.3.1` | `false`")) + Expect(body).To(ContainSubstring("`example/bp3` | `1.10.0` | `true`")) + Expect(body).To(ContainSubstring("BP 1 3.1.0")) + Expect(body).To(ContainSubstring("**ID**: `bp1`")) + Expect(body).To(ContainSubstring("BP 2 9.3.1")) + Expect(body).To(ContainSubstring("**ID**: `bp2`")) + Expect(body).To(ContainSubstring("BP 3 1.10.0")) + Expect(body).To(ContainSubstring("**ID**: `bp3`")) + Expect(body).To(ContainSubstring("BP 4 6.5.0")) + Expect(body).To(ContainSubstring("**ID**: `bp4`")) + }) + + it("generates builder", func() { + bpLoader.On("LoadBuildpacks", mock.Anything).Return([]drafts.Buildpack{ + {Buildpack: libcnb.Buildpack{Info: libcnb.BuildpackInfo{ID: "bp1", Name: "BP 1", Version: "3.1.0"}}}, + {Buildpack: libcnb.Buildpack{Info: libcnb.BuildpackInfo{ID: "bp2", Name: "BP 2", Version: "9.3.1"}}}, + {Buildpack: libcnb.Buildpack{Info: libcnb.BuildpackInfo{ID: "bp3", Name: "BP 3", Version: "1.10.0"}}}, + {Buildpack: libcnb.Buildpack{Info: libcnb.BuildpackInfo{ID: "bp4", Name: "BP 4", Version: "6.5.0"}}}, + }, nil) + + d := drafts.Drafter{Loader: &bpLoader} + + p, err := d.CreatePayload(actions.Inputs{ + "release_id": "foo-id", + "release_name": "foo-name", + "release_body": "foo-body", + "release_tag_name": "foo-tag", + "dry_run": "true", + }, "testdata/builder") + Expect(err).ToNot(HaveOccurred()) + + buf := &bytes.Buffer{} + err = d.BuildAndWriteReleaseDraftFromTemplate(buf, templateContent, p) + Expect(err).ToNot(HaveOccurred()) + + body := buf.String() + Expect(body).To(ContainSubstring("**ID**: `example/builder`")) + Expect(body).To(ContainSubstring("**Digest**: ")) + Expect(body).ToNot(ContainSubstring("#### Supported Stacks:")) + Expect(body).To(ContainSubstring("#### Included Buildpackages:")) + Expect(body).To(ContainSubstring("BP 1 | `bp1` | `3.1.0`")) + Expect(body).To(ContainSubstring("BP 2 | `bp2` | `9.3.1`")) + Expect(body).To(ContainSubstring("BP 3 | `bp3` | `1.10.0`")) + Expect(body).To(ContainSubstring("BP 4 | `bp4` | `6.5.0`")) + Expect(body).To(ContainSubstring("Order Groupings")) + Expect(body).To(ContainSubstring("`example/bp1` | `3.1.0` | `true`")) + Expect(body).To(ContainSubstring("`example/bp2` | `9.3.1` | `false`")) + Expect(body).To(ContainSubstring("`example/bp3` | `1.10.0` | `true`")) + Expect(body).To(ContainSubstring("BP 1 3.1.0")) + Expect(body).To(ContainSubstring("**ID**: `bp1`")) + Expect(body).To(ContainSubstring("BP 2 9.3.1")) + Expect(body).To(ContainSubstring("**ID**: `bp2`")) + Expect(body).To(ContainSubstring("BP 3 1.10.0")) + Expect(body).To(ContainSubstring("**ID**: `bp3`")) + Expect(body).To(ContainSubstring("BP 4 6.5.0")) + Expect(body).To(ContainSubstring("**ID**: `bp4`")) + }) + }) + }) + +} diff --git a/drafts/init_test.go b/drafts/init_test.go new file mode 100644 index 00000000..cc4818f5 --- /dev/null +++ b/drafts/init_test.go @@ -0,0 +1,30 @@ +/* + * Copyright 2018-2020 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package drafts_test + +import ( + "testing" + + "github.com/sclevine/spec" + "github.com/sclevine/spec/report" +) + +func TestUnit(t *testing.T) { + suite := spec.New("drafts", spec.Report(report.Terminal{})) + suite("Tests", testDrafts) + suite.Run(t) +} diff --git a/drafts/mocks/buildpack_loader.go b/drafts/mocks/buildpack_loader.go new file mode 100644 index 00000000..e6bd9cd6 --- /dev/null +++ b/drafts/mocks/buildpack_loader.go @@ -0,0 +1,57 @@ +// Code generated by mockery v2.10.0. DO NOT EDIT. + +package mocks + +import ( + drafts "github.com/paketo-buildpacks/pipeline-builder/drafts" + mock "github.com/stretchr/testify/mock" +) + +// BuildpackLoader is an autogenerated mock type for the BuildpackLoader type +type BuildpackLoader struct { + mock.Mock +} + +// LoadBuildpack provides a mock function with given fields: id +func (_m *BuildpackLoader) LoadBuildpack(id string) (drafts.Buildpack, error) { + ret := _m.Called(id) + + var r0 drafts.Buildpack + if rf, ok := ret.Get(0).(func(string) drafts.Buildpack); ok { + r0 = rf(id) + } else { + r0 = ret.Get(0).(drafts.Buildpack) + } + + var r1 error + if rf, ok := ret.Get(1).(func(string) error); ok { + r1 = rf(id) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + +// LoadBuildpacks provides a mock function with given fields: uris +func (_m *BuildpackLoader) LoadBuildpacks(uris []string) ([]drafts.Buildpack, error) { + ret := _m.Called(uris) + + var r0 []drafts.Buildpack + if rf, ok := ret.Get(0).(func([]string) []drafts.Buildpack); ok { + r0 = rf(uris) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).([]drafts.Buildpack) + } + } + + var r1 error + if rf, ok := ret.Get(1).(func([]string) error); ok { + r1 = rf(uris) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} diff --git a/drafts/testdata/builder/builder.toml b/drafts/testdata/builder/builder.toml new file mode 100644 index 00000000..186a67f8 --- /dev/null +++ b/drafts/testdata/builder/builder.toml @@ -0,0 +1,37 @@ +description = "description" + +[[buildpacks]] + id = "example/bp1" + uri = "docker://example.com/example/bp1:1.1.2" + +[[buildpacks]] + id = "example/bp2" + uri = "docker://example.com/example/bp2:1.4.1" + +[[buildpacks]] + id = "example/bp3" + uri = "docker://example.com/example/bp3:0.2.1" + +[[buildpacks]] + id = "example/bp4" + uri = "docker://example.com/example/bp4:5.0.3" + +[[order]] + + [[order.group]] + id = "example/bp1" + + [[order.group]] + id = "example/bp2" + + [[order.group]] + id = "example/bp3" + + [[order.group]] + id = "example/bp4" + optional = false + +[stack] + build-image = "example.com/example/build:base-cnb" + id = "stack1" + run-image = "example.com/example/run:base-cnb" diff --git a/drafts/testdata/component-no-deps/buildpack.toml b/drafts/testdata/component-no-deps/buildpack.toml new file mode 100644 index 00000000..2efcdb3a --- /dev/null +++ b/drafts/testdata/component-no-deps/buildpack.toml @@ -0,0 +1,41 @@ +# Copyright 2018-2020 the original author or authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +api = "0.7" + +[buildpack] + description = "description" + homepage = "https://example.com/example/component" + id = "example/component" + keywords = ["example", "component"] + name = "Example Component Buildpack" + sbom-formats = ["application/vnd.cyclonedx+json", "application/vnd.syft+json"] + version = "2.1.1" + + [[buildpack.licenses]] + type = "Apache-2.0" + uri = "https://example.com/example/component/blob/main/LICENSE" + +[metadata] + include-files = ["LICENSE", "NOTICE", "README.md", "bin/build", "bin/detect", "bin/helper", "bin/main", "buildpack.toml", "resources/context.xml", "resources/logging.properties", "resources/server.xml", "resources/web.xml"] + pre-package = "scripts/build.sh" + +[[stacks]] + id = "stack1" + +[[stacks]] + id = "stack2" + +[[stacks]] + id = "*" \ No newline at end of file diff --git a/drafts/testdata/component/buildpack.toml b/drafts/testdata/component/buildpack.toml new file mode 100644 index 00000000..f9c22da7 --- /dev/null +++ b/drafts/testdata/component/buildpack.toml @@ -0,0 +1,68 @@ +# Copyright 2018-2020 the original author or authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +api = "0.7" + +[buildpack] + description = "description" + homepage = "https://example.com/example/component" + id = "example/component" + keywords = ["example", "component"] + name = "Example Component Buildpack" + sbom-formats = ["application/vnd.cyclonedx+json", "application/vnd.syft+json"] + version = "2.1.1" + + [[buildpack.licenses]] + type = "Apache-2.0" + uri = "https://example.com/example/component/blob/main/LICENSE" + +[metadata] + include-files = ["LICENSE", "NOTICE", "README.md", "bin/build", "bin/detect", "bin/helper", "bin/main", "buildpack.toml", "resources/context.xml", "resources/logging.properties", "resources/server.xml", "resources/web.xml"] + pre-package = "scripts/build.sh" + + [[metadata.dependencies]] + id = "dep" + name = "Example Dep" + purl = "pkg:generic/example-dep@8.5.78" + sha256 = "84c7707db0ce495473df2efdc93da21b6d47bf25cd0a79de52e5472ff9e5f094" + stacks = ["stack1", "stack2", "*"] + uri = "https://archive.example.org/dist/dep/dep-8/v8.5.78/bin/example-dep-8.5.78.tar.gz" + version = "8.5.78" + + [[metadata.dependencies.licenses]] + type = "Apache-2.0" + uri = "https://www.apache.org/licenses/" + + [[metadata.dependencies]] + cpes = ["cpe:2.3:a:example:dep:9.0.62:*:*:*:*:*:*:*"] + id = "dep" + name = "Example Dep" + purl = "pkg:generic/example-dep@9.0.62" + sha256 = "03157728a832cf9c83048cdc28d09600cbb3e4fa087f8b97d74c8b4f34cd89bb" + stacks = ["stack1", "stack2", "*"] + uri = "https://archive.example.org/dist/dep/dep-9/v9.0.62/bin/example-dep-9.0.62.tar.gz" + version = "9.0.62" + + [[metadata.dependencies.licenses]] + type = "Apache-2.0" + uri = "https://www.apache.org/licenses/" + +[[stacks]] + id = "stack1" + +[[stacks]] + id = "stack2" + +[[stacks]] + id = "*" \ No newline at end of file diff --git a/drafts/testdata/composite/buildpack.toml b/drafts/testdata/composite/buildpack.toml new file mode 100644 index 00000000..184e5059 --- /dev/null +++ b/drafts/testdata/composite/buildpack.toml @@ -0,0 +1,62 @@ +# Copyright 2018-2022 the original author or authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +api = "0.7" + +[buildpack] + description = "description" + homepage = "https://example.com/homepage" + id = "example/composite" + keywords = ["example", "composite"] + name = "Example Composite Buildpack" + version = "1.1.8" + + [[buildpack.licenses]] + type = "Apache-2.0" + uri = "https://example.com/example/example-composite/blob/main/LICENSE" + +[metadata] + include-files = ["LICENSE", "NOTICE", "README.md", "buildpack.toml"] + +[[order]] + + [[order.group]] + id = "example/bp1" + optional = true + version = "3.1.0" + + [[order.group]] + id = "example/bp2" + version = "9.3.1" + + [[order.group]] + id = "example/bp3" + optional = true + version = "1.10.0" + +[[order]] + [[order.group]] + id = "example/bp1" + optional = true + version = "3.1.0" + + [[order.group]] + id = "example/bp3" + optional = true + version = "1.10.0" + + [[order.group]] + id = "example/bp4" + optional = true + version = "6.5.0" diff --git a/drafts/testdata/composite/package.toml b/drafts/testdata/composite/package.toml new file mode 100644 index 00000000..ed3675ac --- /dev/null +++ b/drafts/testdata/composite/package.toml @@ -0,0 +1,22 @@ +# Copyright 2018-2022 the original author or authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +[[dependencies]] + uri = "docker://example.com/example/foo:3.1.0" + +[[dependencies]] + uri = "docker://example.com/example/bar:9.3.1" + +[[dependencies]] + uri = "docker://example.com/example/baz:1.10.0" diff --git a/go.mod b/go.mod index 1c1c573a..d5f1d27e 100644 --- a/go.mod +++ b/go.mod @@ -3,11 +3,11 @@ module github.com/paketo-buildpacks/pipeline-builder go 1.17 require ( - cloud.google.com/go/storage v1.21.0 - github.com/BurntSushi/toml v1.0.0 + cloud.google.com/go/storage v1.22.0 + github.com/BurntSushi/toml v1.1.0 github.com/Masterminds/semver/v3 v3.1.1 - github.com/aws/aws-sdk-go v1.43.27 - github.com/buildpacks/libcnb v1.25.5 + github.com/aws/aws-sdk-go v1.43.39 + github.com/buildpacks/libcnb v1.26.0 github.com/disiqueira/gotree v1.0.0 github.com/gocolly/colly v1.2.0 github.com/google/go-containerregistry v0.8.0 @@ -18,11 +18,22 @@ require ( github.com/rakyll/statik v0.1.7 github.com/sclevine/spec v1.4.0 github.com/spf13/pflag v1.0.5 - golang.org/x/oauth2 v0.0.0-20220309155454-6242fa91716a - google.golang.org/api v0.73.0 + github.com/stretchr/testify v1.7.1 + golang.org/x/oauth2 v0.0.0-20220411215720-9780585627b5 + google.golang.org/api v0.74.0 gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b ) +require ( + github.com/creack/pty v1.1.18 // indirect + github.com/googleapis/go-type-adapters v1.0.0 // indirect + github.com/heroku/color v0.0.6 // indirect + github.com/imdario/mergo v0.3.12 // indirect + github.com/mattn/go-colorable v0.1.12 // indirect + github.com/mattn/go-isatty v0.0.14 // indirect + github.com/mitchellh/hashstructure/v2 v2.0.2 // indirect +) + require ( cloud.google.com/go v0.100.2 // indirect cloud.google.com/go/compute v1.5.0 // indirect @@ -30,40 +41,44 @@ require ( github.com/PuerkitoBio/goquery v1.8.0 // indirect github.com/andybalholm/cascadia v1.3.1 // indirect github.com/antchfx/htmlquery v1.2.4 // indirect - github.com/antchfx/xmlquery v1.3.9 // indirect + github.com/antchfx/xmlquery v1.3.10 // indirect github.com/antchfx/xpath v1.2.0 // indirect - github.com/containerd/stargz-snapshotter/estargz v0.11.1 // indirect - github.com/docker/cli v20.10.12+incompatible // indirect - github.com/docker/distribution v2.8.0+incompatible // indirect - github.com/docker/docker v20.10.12+incompatible // indirect + github.com/containerd/stargz-snapshotter/estargz v0.11.3 // indirect + github.com/davecgh/go-spew v1.1.1 // indirect + github.com/docker/cli v20.10.14+incompatible // indirect + github.com/docker/distribution v2.8.1+incompatible // indirect + github.com/docker/docker v20.10.14+incompatible // indirect github.com/docker/docker-credential-helpers v0.6.4 // indirect github.com/gobwas/glob v0.2.3 // indirect github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect github.com/golang/protobuf v1.5.2 // indirect github.com/google/go-cmp v0.5.7 // indirect github.com/google/go-querystring v1.1.0 // indirect - github.com/googleapis/gax-go/v2 v2.1.1 // indirect + github.com/googleapis/gax-go/v2 v2.3.0 // indirect github.com/jmespath/go-jmespath v0.4.0 // indirect github.com/kennygrant/sanitize v1.2.4 // indirect - github.com/klauspost/compress v1.14.4 // indirect + github.com/klauspost/compress v1.15.1 // indirect github.com/mitchellh/go-homedir v1.1.0 // indirect github.com/opencontainers/go-digest v1.0.0 // indirect github.com/opencontainers/image-spec v1.0.2 // indirect + github.com/paketo-buildpacks/libpak v1.59.0 github.com/pkg/errors v0.9.1 // indirect + github.com/pmezard/go-difflib v1.0.0 // indirect github.com/saintfish/chardet v0.0.0-20120816061221-3af4cd4741ca // indirect github.com/sirupsen/logrus v1.8.1 // indirect + github.com/stretchr/objx v0.3.0 // indirect github.com/temoto/robotstxt v1.1.2 // indirect github.com/vbatts/tar-split v0.11.2 // indirect go.opencensus.io v0.23.0 // indirect - golang.org/x/crypto v0.0.0-20220214200702-86341886e292 // indirect - golang.org/x/net v0.0.0-20220225172249-27dd8689420f // indirect + golang.org/x/crypto v0.0.0-20220411220226-7b82a4e95df4 // indirect + golang.org/x/net v0.0.0-20220412020605-290c469a71a5 // indirect golang.org/x/sync v0.0.0-20210220032951-036812b2e83c // indirect - golang.org/x/sys v0.0.0-20220310020820-b874c991c1a5 // indirect + golang.org/x/sys v0.0.0-20220412211240-33da011f77ad // indirect golang.org/x/text v0.3.7 // indirect - golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 // indirect + golang.org/x/xerrors v0.0.0-20220411194840-2f41105eb62f // indirect google.golang.org/appengine v1.6.7 // indirect - google.golang.org/genproto v0.0.0-20220310185008-1973136f34c6 // indirect + google.golang.org/genproto v0.0.0-20220413183235-5e96e2839df9 // indirect google.golang.org/grpc v1.45.0 // indirect - google.golang.org/protobuf v1.27.1 // indirect + google.golang.org/protobuf v1.28.0 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect ) diff --git a/go.sum b/go.sum index 5eaed26a..80788f31 100644 --- a/go.sum +++ b/go.sum @@ -28,7 +28,6 @@ cloud.google.com/go v0.94.1/go.mod h1:qAlAugsXlC+JWO+Bke5vCtc9ONxjQT3drlTTnAplMW cloud.google.com/go v0.97.0/go.mod h1:GF7l59pYBVlXQIBLx3a761cZ41F9bBH3JUlihCt2Udc= cloud.google.com/go v0.98.0/go.mod h1:ua6Ush4NALrHk5QXDWnjvZHN93OuF0HfuEPq9I1X0cM= cloud.google.com/go v0.99.0/go.mod h1:w0Xx2nLzqWJPuozYQX+hFfCSI8WioryfRDzkoI/Y2ZA= -cloud.google.com/go v0.100.1/go.mod h1:fs4QogzfH5n2pBXBP9vRiU+eCny7lD2vmFZy79Iuw1U= cloud.google.com/go v0.100.2 h1:t9Iw5QH5v4XtlEQaCtUY7x6sCABps8sW0acw7e2WQ6Y= cloud.google.com/go v0.100.2/go.mod h1:4Xra9TjzAeYHrl5+oeLlzbM2k3mjVhZh4UqTZ//w99A= cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o= @@ -38,14 +37,12 @@ cloud.google.com/go/bigquery v1.5.0/go.mod h1:snEHRnqQbz117VIFhE8bmtwIDY80NLUZUM cloud.google.com/go/bigquery v1.7.0/go.mod h1://okPTzCYNXSlb24MZs83e2Do+h+VXtc4gLoIoXIAPc= cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ= cloud.google.com/go/compute v0.1.0/go.mod h1:GAesmwr110a34z04OlxYkATPBEfVhkymfTBXtfbBFow= -cloud.google.com/go/compute v1.2.0/go.mod h1:xlogom/6gr8RJGBe7nT2eGsQYAFUbbv8dbC29qE3Xmw= cloud.google.com/go/compute v1.3.0/go.mod h1:cCZiE1NHEtai4wiufUhW8I8S1JKkAnhnQJWM7YD99wM= cloud.google.com/go/compute v1.5.0 h1:b1zWmYuuHz7gO9kDcM/EpHGr06UgsYNRpNJzI2kFiLM= cloud.google.com/go/compute v1.5.0/go.mod h1:9SMHyhJlzhlkJqrPAc839t2BZFTSk6Jdj6mkzQJeu0M= cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE= cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk= cloud.google.com/go/firestore v1.6.1/go.mod h1:asNXNOzBdyVQmEU+ggO8UPodTkEVFW5Qx+rwHnAz+EY= -cloud.google.com/go/iam v0.1.1/go.mod h1:CKqrcnI/suGpybEHxZ7BMehL0oA4LpdyJdUlTl9jVMw= cloud.google.com/go/iam v0.3.0 h1:exkAomrVUuzx9kWFI1wm3KI0uoDeUFPB4kKGzx6x+Gc= cloud.google.com/go/iam v0.3.0/go.mod h1:XzJPvDayI+9zsASAFO68Hk07u3z+f+JrT2xXNdp4bnY= cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I= @@ -57,8 +54,8 @@ cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0Zeo cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk= cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs= cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0= -cloud.google.com/go/storage v1.21.0 h1:HwnT2u2D309SFDHQII6m18HlrCi3jAXhUMTLOWXYH14= -cloud.google.com/go/storage v1.21.0/go.mod h1:XmRlxkgPjlBONznT2dDUU/5XlpU2OjMnKuqnZI01LAA= +cloud.google.com/go/storage v1.22.0 h1:NUV0NNp9nkBuW66BFRLuMgldN60C57ET3dhbwLIYio8= +cloud.google.com/go/storage v1.22.0/go.mod h1:GbaLEoMqbVm6sx3Z0R++gSiBlgMv6yUi2q1DeGFKQgE= dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= github.com/Azure/azure-sdk-for-go v16.2.1+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc= github.com/Azure/go-ansiterm v0.0.0-20170929234023-d6e3b3328b78/go.mod h1:LmzpDX56iTiv29bbRTIsUNlaFfuhWRQBWjQdVyAevI8= @@ -73,8 +70,9 @@ github.com/Azure/go-autorest/autorest/mocks v0.4.1/go.mod h1:LTp+uSrOhSkaKrUy935 github.com/Azure/go-autorest/logger v0.2.0/go.mod h1:T9E3cAhj2VqvPOtCYAvby9aBXkZmbF5NWuPV8+WeEW8= github.com/Azure/go-autorest/tracing v0.6.0/go.mod h1:+vhtPC754Xsa23ID7GlGsrdKBpUA79WCAKPPZVC2DeU= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= -github.com/BurntSushi/toml v1.0.0 h1:dtDWrepsVPfW9H/4y7dDgFc2MBUSeJhlaDtK13CxFlU= github.com/BurntSushi/toml v1.0.0/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ= +github.com/BurntSushi/toml v1.1.0 h1:ksErzDEI1khOiGPgpwuI7x2ebx/uXQNw7xJpn9Eq1+I= +github.com/BurntSushi/toml v1.1.0/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ= github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= github.com/DataDog/datadog-go v3.2.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ= github.com/Masterminds/semver/v3 v3.1.1 h1:hLg3sBzpNErnxhQtUy/mmLR2I9foDujNK030IGemrRc= @@ -114,8 +112,8 @@ github.com/andybalholm/cascadia v1.3.1 h1:nhxRkql1kdYCc8Snf7D5/D3spOX+dBgjA6u8x0 github.com/andybalholm/cascadia v1.3.1/go.mod h1:R4bJ1UQfqADjvDa4P6HZHLh/3OxWWEqc0Sk8XGwHqvA= github.com/antchfx/htmlquery v1.2.4 h1:qLteofCMe/KGovBI6SQgmou2QNyedFUW+pE+BpeZ494= github.com/antchfx/htmlquery v1.2.4/go.mod h1:2xO6iu3EVWs7R2JYqBbp8YzG50gj/ofqs5/0VZoDZLc= -github.com/antchfx/xmlquery v1.3.9 h1:Y+zyMdiUZ4fasTQTkDb3DflOXP7+obcYEh80SISBmnQ= -github.com/antchfx/xmlquery v1.3.9/go.mod h1:wojC/BxjEkjJt6dPiAqUzoXO5nIMWtxHS8PD8TmN4ks= +github.com/antchfx/xmlquery v1.3.10 h1:U2yMwr8U0KmGM2iDG2Ky/3LfxNsiK4uw1bSBkeMO9+g= +github.com/antchfx/xmlquery v1.3.10/go.mod h1:wojC/BxjEkjJt6dPiAqUzoXO5nIMWtxHS8PD8TmN4ks= github.com/antchfx/xpath v1.2.0 h1:mbwv7co+x0RwgeGAOHdrKy89GvHaGvxxBtPK0uF9Zr8= github.com/antchfx/xpath v1.2.0/go.mod h1:i54GszH55fYfBmoZXapTHN8T8tkcHfRgLyVwwqzXNcs= github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= @@ -127,8 +125,8 @@ github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj github.com/armon/go-radix v1.0.0/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= github.com/asaskevich/govalidator v0.0.0-20190424111038-f61b66f89f4a/go.mod h1:lB+ZfQJz7igIIfQNfa7Ml4HSf2uFQQRzpGGRXenZAgY= github.com/aws/aws-sdk-go v1.15.11/go.mod h1:mFuSZ37Z9YOHbQEwBWztmVzqXrEkub65tZoCYDt7FT0= -github.com/aws/aws-sdk-go v1.43.27 h1:de0u6uSrtjPtSZ7I/452GUU2iNDdbYIawR2qkYoD1z0= -github.com/aws/aws-sdk-go v1.43.27/go.mod h1:y4AeaBuwd2Lk+GepC1E9v0qOiTws0MIWAX4oIKwKHZo= +github.com/aws/aws-sdk-go v1.43.39 h1:5W8pton/8OuS5hpbAkzfr7e+meAAFkK7LsUehB39L3I= +github.com/aws/aws-sdk-go v1.43.39/go.mod h1:y4AeaBuwd2Lk+GepC1E9v0qOiTws0MIWAX4oIKwKHZo= github.com/beorn7/perks v0.0.0-20160804104726-4c0e84591b9a/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= @@ -144,8 +142,9 @@ github.com/buger/jsonparser v0.0.0-20180808090653-f4dd9f5a6b44/go.mod h1:bbYlZJ7 github.com/bugsnag/bugsnag-go v0.0.0-20141110184014-b1d153021fcd/go.mod h1:2oa8nejYd4cQ/b0hMIopN0lCRxU0bueqREvZLWFrtK8= github.com/bugsnag/osext v0.0.0-20130617224835-0dd3f918b21b/go.mod h1:obH5gd0BsqsP2LwDJ9aOkm/6J86V6lyAXCoQWGw3K50= github.com/bugsnag/panicwrap v0.0.0-20151223152923-e2c28503fcd0/go.mod h1:D/8v3kj0zr8ZAKg1AQ6crr+5VwKN5eIywRkfhyM/+dE= -github.com/buildpacks/libcnb v1.25.5 h1:D8UoXv39+0jkG4M+u/pfxYjLWZMOQv1TH6dZDRFpVsg= github.com/buildpacks/libcnb v1.25.5/go.mod h1:KUVN17jE9c+iLqz8FHwfYyCEossLkKEbz1ixPYqwFNI= +github.com/buildpacks/libcnb v1.26.0 h1:DIXbU5ofxPxPsWNvwQ5Uj/rBN7EPl82X7uF6t32GRx0= +github.com/buildpacks/libcnb v1.26.0/go.mod h1:Y+uoFTeAmumUXR3CPzJdjPfmQ8Cq+bBw5e8ZVSlGFUo= github.com/cenkalti/backoff/v4 v4.1.1/go.mod h1:scbssz8iZGpm3xbr14ovlUdkxfGXNInqkPWOWmG2CLw= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/census-instrumentation/opencensus-proto v0.3.0/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= @@ -237,8 +236,8 @@ github.com/containerd/nri v0.0.0-20201007170849-eb1350a75164/go.mod h1:+2wGSDGFY github.com/containerd/nri v0.0.0-20210316161719-dbaa18c31c14/go.mod h1:lmxnXF6oMkbqs39FiCt1s0R2HSMhcLel9vNL3m4AaeY= github.com/containerd/nri v0.1.0/go.mod h1:lmxnXF6oMkbqs39FiCt1s0R2HSMhcLel9vNL3m4AaeY= github.com/containerd/stargz-snapshotter/estargz v0.10.1/go.mod h1:aE5PCyhFMwR8sbrErO5eM2GcvkyXTTJremG883D4qF0= -github.com/containerd/stargz-snapshotter/estargz v0.11.1 h1:mNQqxcAWmDrV6d6yUvzFhfY8puNzoQz9v4diW+Pmei4= -github.com/containerd/stargz-snapshotter/estargz v0.11.1/go.mod h1:6VoPcf4M1wvnogWxqc4TqBWWErCS+R+ucnPZId2VbpQ= +github.com/containerd/stargz-snapshotter/estargz v0.11.3 h1:k2kN16Px6LYuv++qFqK+JTcYqc8bEVxzGpf8/gFBL5M= +github.com/containerd/stargz-snapshotter/estargz v0.11.3/go.mod h1:7vRJIcImfY8bpifnMjt+HTJoQxASq7T28MYbP15/Nf0= github.com/containerd/ttrpc v0.0.0-20190828154514-0e0f228740de/go.mod h1:PvCDdDGpgqzQIzDW1TphrGLssLDZp2GuS+X5DkEJB8o= github.com/containerd/ttrpc v0.0.0-20190828172938-92c8520ef9f8/go.mod h1:PvCDdDGpgqzQIzDW1TphrGLssLDZp2GuS+X5DkEJB8o= github.com/containerd/ttrpc v0.0.0-20191028202541-4f1b8fe65a5c/go.mod h1:LPm1u0xBw8r8NOKoOdNMeVHSawSsltak+Ihv+etqsE8= @@ -283,6 +282,9 @@ github.com/cpuguy83/go-md2man/v2 v2.0.1/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46t github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/creack/pty v1.1.11/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= +github.com/creack/pty v1.1.17/go.mod h1:MOBLtS5ELjhRRrroQr9kyvTxUAFNvYEK993ew/Vr4O4= +github.com/creack/pty v1.1.18 h1:n56/Zwd5o6whRC5PMGretI4IdRLlmBXYNjScPaBgsbY= +github.com/creack/pty v1.1.18/go.mod h1:MOBLtS5ELjhRRrroQr9kyvTxUAFNvYEK993ew/Vr4O4= github.com/cyphar/filepath-securejoin v0.2.2/go.mod h1:FpkQEhXnPnOthhzymB7CGsFk2G9VLXONKD9G7QGMM+4= github.com/d2g/dhcp4 v0.0.0-20170904100407-a1d1b6c41b1c/go.mod h1:Ct2BUK8SB0YC1SMSibvLzxjeJLnrYEVLULFNiHY9YfQ= github.com/d2g/dhcp4client v1.0.0/go.mod h1:j0hNfjhrt2SxUOw55nL0ATM/z4Yt3t2Kd1mW34z5W5s= @@ -299,15 +301,17 @@ github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8 github.com/disiqueira/gotree v1.0.0 h1:en5wk87n7/Jyk6gVME3cx3xN9KmUCstJ1IjHr4Se4To= github.com/disiqueira/gotree v1.0.0/go.mod h1:7CwL+VWsWAU95DovkdRZAtA7YbtHwGk+tLV/kNi8niU= github.com/dnaeon/go-vcr v1.0.1/go.mod h1:aBB1+wY4s93YsC3HHjMBMrwTj2R9FHDzUr9KyGc8n1E= -github.com/docker/cli v20.10.12+incompatible h1:lZlz0uzG+GH+c0plStMUdF/qk3ppmgnswpR5EbqzVGA= github.com/docker/cli v20.10.12+incompatible/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8= +github.com/docker/cli v20.10.14+incompatible h1:dSBKJOVesDgHo7rbxlYjYsXe7gPzrTT+/cKQgpDAazg= +github.com/docker/cli v20.10.14+incompatible/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8= github.com/docker/distribution v0.0.0-20190905152932-14b96e55d84c/go.mod h1:0+TTO4EOBfRPhZXAeF1Vu+W3hHZ8eLp8PgKVZlcvtFY= github.com/docker/distribution v2.7.1-0.20190205005809-0d3efadf0154+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= github.com/docker/distribution v2.7.1+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= -github.com/docker/distribution v2.8.0+incompatible h1:l9EaZDICImO1ngI+uTifW+ZYvvz7fKISBAKpg+MbWbY= -github.com/docker/distribution v2.8.0+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= -github.com/docker/docker v20.10.12+incompatible h1:CEeNmFM0QZIsJCZKMkZx0ZcahTiewkrgiwfYD+dfl1U= +github.com/docker/distribution v2.8.1+incompatible h1:Q50tZOPR6T/hjNsyc9g8/syEs6bk8XXApsHjKukMl68= +github.com/docker/distribution v2.8.1+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= github.com/docker/docker v20.10.12+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= +github.com/docker/docker v20.10.14+incompatible h1:+T9/PRYWNDo5SZl5qS1r9Mo/0Q8AwxKKPtu9S1yxM0w= +github.com/docker/docker v20.10.14+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= github.com/docker/docker-credential-helpers v0.6.4 h1:axCks+yV+2MR3/kZhAmy07yC56WZ2Pwu/fKWtKuZB0o= github.com/docker/docker-credential-helpers v0.6.4/go.mod h1:ofX3UI0Gz1TteYBjtgs07O36Pyasyp66D2uKT7H8W1c= github.com/docker/go-connections v0.4.0/go.mod h1:Gbd7IOopHjR8Iph03tsViu4nIes5XhDvyHbTtUxmeec= @@ -474,9 +478,13 @@ github.com/google/uuid v1.2.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+ github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= github.com/googleapis/gax-go/v2 v2.1.0/go.mod h1:Q3nei7sK6ybPYH7twZdmQpAd1MKb7pfu6SK+H1/DsU0= -github.com/googleapis/gax-go/v2 v2.1.1 h1:dp3bWCh+PPO1zjRRiCSczJav13sBvG4UhNyVTa1KqdU= github.com/googleapis/gax-go/v2 v2.1.1/go.mod h1:hddJymUZASv3XPyGkUpKj8pPO47Rmb0eJc8R6ouapiM= +github.com/googleapis/gax-go/v2 v2.2.0/go.mod h1:as02EH8zWkzwUoLbBaFeQ+arQaj/OthfcblKl4IGNaM= +github.com/googleapis/gax-go/v2 v2.3.0 h1:nRJtk3y8Fm770D42QV6T90ZnvFZyk7agSo3Q+Z9p3WI= +github.com/googleapis/gax-go/v2 v2.3.0/go.mod h1:b8LNqSzNabLiUpXKkY7HAR5jr6bIT99EXz9pXxye9YM= github.com/googleapis/gnostic v0.4.1/go.mod h1:LRhVm6pbyptWbWbuZ38d1eyptfvIytN3ir6b65WBswg= +github.com/googleapis/go-type-adapters v1.0.0 h1:9XdMn+d/G57qq1s8dNc5IesGCXHf6V2HZ2JwRxfA2tA= +github.com/googleapis/go-type-adapters v1.0.0/go.mod h1:zHW75FOG2aur7gAO2B+MLby+cLsWGBF62rFAi7WjWO4= github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= github.com/gorilla/handlers v0.0.0-20150720190736-60c7bfde3e33/go.mod h1:Qkdc/uu4tH4g6mTK6auzZ766c4CA0Ng8+o/OAirnOIQ= github.com/gorilla/mux v1.7.2/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= @@ -491,6 +499,7 @@ github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgf github.com/grpc-ecosystem/grpc-gateway v1.9.0/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= github.com/grpc-ecosystem/grpc-gateway v1.9.5/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw= +github.com/h2non/filetype v1.1.3/go.mod h1:319b3zT68BvV+WRj7cwy856M2ehB3HqNOt6sy1HndBY= github.com/hashicorp/consul/api v1.11.0/go.mod h1:XjsvQN+RJGWI2TWy1/kqaE16HrR2J/FWgkYjdZQsX9M= github.com/hashicorp/consul/sdk v0.8.0/go.mod h1:GBvyrGALthsZObzUGsfgHZQDXjg4lOjagTIwIR1vPms= github.com/hashicorp/errwrap v0.0.0-20141028054710-7554cd9344ce/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= @@ -523,6 +532,8 @@ github.com/hashicorp/memberlist v0.2.2/go.mod h1:MS2lj3INKhZjWNqd3N0m3J+Jxf3DAOn github.com/hashicorp/memberlist v0.3.0/go.mod h1:MS2lj3INKhZjWNqd3N0m3J+Jxf3DAOnAH9VT3Sh9MUE= github.com/hashicorp/serf v0.9.5/go.mod h1:UWDWwZeL5cuWDJdl0C6wrvrUwEqtQ4ZKBKKENpqIUyk= github.com/hashicorp/serf v0.9.6/go.mod h1:TXZNMjZQijwlDvp+r0b63xZ45H7JmCmgg4gpTwn9UV4= +github.com/heroku/color v0.0.6 h1:UTFFMrmMLFcL3OweqP1lAdp8i1y/9oHqkeHjQ/b/Ny0= +github.com/heroku/color v0.0.6/go.mod h1:ZBvOcx7cTF2QKOv4LbmoBtNl5uB17qWxGuzZrsi1wLU= github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= github.com/iancoleman/strcase v0.2.0 h1:05I4QRnGpI0m37iZQRuskXh+w77mr6Z41lwQzuHLwW0= github.com/iancoleman/strcase v0.2.0/go.mod h1:iwCmte+B7n89clKwxIoIXy/HfoL7AsD47ZCWhYzw7ho= @@ -532,6 +543,7 @@ github.com/imdario/mergo v0.3.5/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJ github.com/imdario/mergo v0.3.8/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= github.com/imdario/mergo v0.3.10/go.mod h1:jmQim1M+e3UYxmgPu/WyfjB3N3VflVyUjjjwH0dnCYA= github.com/imdario/mergo v0.3.11/go.mod h1:jmQim1M+e3UYxmgPu/WyfjB3N3VflVyUjjjwH0dnCYA= +github.com/imdario/mergo v0.3.12 h1:b6R2BslTbIEToALKP7LxUvijTsNI9TAe80pLWN2g/HU= github.com/imdario/mergo v0.3.12/go.mod h1:jmQim1M+e3UYxmgPu/WyfjB3N3VflVyUjjjwH0dnCYA= github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= github.com/j-keck/arping v0.0.0-20160618110441-2cf9dc699c56/go.mod h1:ymszkNOg6tORTn+6F6j+Jc8TOr5osrynvN6ivFWZ2GA= @@ -561,9 +573,8 @@ github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+o github.com/klauspost/compress v1.11.3/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= github.com/klauspost/compress v1.11.13/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= github.com/klauspost/compress v1.13.6/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk= -github.com/klauspost/compress v1.14.3/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk= -github.com/klauspost/compress v1.14.4 h1:eijASRJcobkVtSt81Olfh7JX43osYLwy5krOJo6YEu4= -github.com/klauspost/compress v1.14.4/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk= +github.com/klauspost/compress v1.15.1 h1:y9FcTHGyrebwfP0ZZqFiaxTaiDnUrGkJkI+f583BL1A= +github.com/klauspost/compress v1.15.1/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/konsorten/go-windows-terminal-sequences v1.0.2/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= @@ -586,9 +597,11 @@ github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e/go.mod h1:C1wdFJiN github.com/mailru/easyjson v0.7.0/go.mod h1:KAzv3t3aY1NaHWoQz1+4F1ccyAH66Jk7yos7ldAVICs= github.com/marstr/guid v1.1.0/go.mod h1:74gB1z2wpxxInTG6yaqA7KrtM0NZ+RbrcqDvYHefzho= github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= +github.com/mattn/go-colorable v0.1.2/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= github.com/mattn/go-colorable v0.1.4/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= github.com/mattn/go-colorable v0.1.6/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= github.com/mattn/go-colorable v0.1.9/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= +github.com/mattn/go-colorable v0.1.12 h1:jF+Du6AlPIjs2BiUiQlKOX0rt3SujHxPnksPKZbaA40= github.com/mattn/go-colorable v0.1.12/go.mod h1:u5H1YNBxpqRaxsYJYSkiCWKzEfiAb1Gb520KVy5xxl4= github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= github.com/mattn/go-isatty v0.0.4/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= @@ -596,6 +609,7 @@ github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hd github.com/mattn/go-isatty v0.0.10/go.mod h1:qgIWMr58cqv1PHHyhnkY9lrL7etaEgOFcMEpPG5Rm84= github.com/mattn/go-isatty v0.0.11/go.mod h1:PhnuNfih5lzO57/f3n+odYbM4JtupLOxQOAqxQCu2WE= github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= +github.com/mattn/go-isatty v0.0.14 h1:yVuAays6BHfxijgZPzw+3Zlu5yQgKGP2/hcQbHb7S9Y= github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94= github.com/mattn/go-runewidth v0.0.2/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= github.com/mattn/go-shellwords v1.0.3/go.mod h1:3xCvwCdWdlDJUrvuMn7Wuy9eWs4pE8vqg+NOMyg4B2o= @@ -610,6 +624,8 @@ github.com/mitchellh/cli v1.1.0/go.mod h1:xcISNoH86gajksDmfB23e/pu+B+GeFRMYmoHXx github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y= github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= github.com/mitchellh/go-testing-interface v1.0.0/go.mod h1:kRemZodwjscx+RGhAo8eIhFbs2+BFgRtFPeD/KE+zxI= +github.com/mitchellh/hashstructure/v2 v2.0.2 h1:vGKWl0YJqUNxE8d+h8f6NJLcCJrgbhC4NcD46KavDd4= +github.com/mitchellh/hashstructure/v2 v2.0.2/go.mod h1:MG3aRVU/N29oo/V/IhBX8GR/zz4kQkprJgF2EVszyDE= github.com/mitchellh/mapstructure v0.0.0-20160808181253-ca63d7c062ee/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= github.com/mitchellh/mapstructure v1.4.3/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= @@ -642,6 +658,7 @@ github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+W github.com/onsi/ginkgo v1.10.1/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.10.3/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.11.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= +github.com/onsi/ginkgo v1.12.1 h1:mFwc4LvZ0xpSvDZ3E+k8Yte0hLOMxXUlP+yXtJqkYfQ= github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk= github.com/onsi/ginkgo v1.16.4 h1:29JGrr5oVBm5ulCWet69zQkzWipVXIol6ygQUe/EzNc= github.com/onsi/ginkgo v1.16.4/go.mod h1:dX+/inL/fNMqNlz0e9LfyB9TswhZpCVdJM/Z6Vvnwo0= @@ -685,6 +702,8 @@ github.com/opencontainers/runtime-tools v0.0.0-20181011054405-1d69bd0f9c39/go.mo github.com/opencontainers/selinux v1.6.0/go.mod h1:VVGKuOLlE7v4PJyT6h7mNWvq1rzqiriPsEqVhc+svHE= github.com/opencontainers/selinux v1.8.0/go.mod h1:RScLhm78qiWa2gbVCcGkC7tCGdgk3ogry1nUQF8Evvo= github.com/opencontainers/selinux v1.8.2/go.mod h1:MUIHuUEvKB1wtJjQdOyYRgOnLD2xAPP8dBsCoU0KuF8= +github.com/paketo-buildpacks/libpak v1.59.0 h1:9Kt1G0IZZbnIrgsfxU9SuAqJB5EBnVwNJqMgw5qFMa0= +github.com/paketo-buildpacks/libpak v1.59.0/go.mod h1:hqdnjXrMRmt25/tw+FLC3UbT2uQXH1et2zZ8Br3ZXAo= github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= github.com/pascaldekloe/goe v0.1.0/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= @@ -789,16 +808,18 @@ github.com/stefanberger/go-pkcs11uri v0.0.0-20201008174630-78d3cae3a980/go.mod h github.com/stretchr/objx v0.0.0-20180129172003-8a3f7159479f/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/objx v0.2.0 h1:Hbg2NidpLE8veEBkEZTL3CvlkUIVzuU9jDplZO54c48= github.com/stretchr/objx v0.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE= +github.com/stretchr/objx v0.3.0 h1:NGXK3lHquSN08v5vWalVI/L8XU9hdzE/G6xsrze47As= +github.com/stretchr/objx v0.3.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE= github.com/stretchr/testify v0.0.0-20180303142811-b89eecf5ca5d/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY= github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.7.1 h1:5TQK59W5E3v0r2duFAb7P95B6hEeOyEnHRa8MjYSMTY= +github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw= github.com/syndtr/gocapability v0.0.0-20170704070218-db04d3cc01c8/go.mod h1:hkRG7XYTFWNJGYcbNJQlaLq0fg1yr4J4t/NcTQtrfww= github.com/syndtr/gocapability v0.0.0-20180916011248-d98352740cb2/go.mod h1:hkRG7XYTFWNJGYcbNJQlaLq0fg1yr4J4t/NcTQtrfww= @@ -828,6 +849,7 @@ github.com/willf/bitset v1.1.11/go.mod h1:83CECat5yLh5zVOf4P1ErAgKA5UDvKtgyUABdr github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU= github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415/go.mod h1:GwrjFmJcFw6At/Gs6z4yjiIwzuJ1/+UwLxMQDVQXShQ= github.com/xeipuuv/gojsonschema v0.0.0-20180618132009-1d523034197f/go.mod h1:5yf86TLmAcydyeJq5YvxkGPE2fm/u4myDekKRoLuqhs= +github.com/xi2/xz v0.0.0-20171230120015-48954b6210f8/go.mod h1:HUYIGzjTL3rfEspMxjDjgmT5uz5wzYJKVo23qUhYTos= github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q= github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= @@ -880,8 +902,8 @@ golang.org/x/crypto v0.0.0-20200728195943-123391ffb6de/go.mod h1:LzIPMQfyMNhhGPh golang.org/x/crypto v0.0.0-20201002170205-7f63de1d35b0/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20210322153248-0c34fe9e7dc2/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= golang.org/x/crypto v0.0.0-20210817164053-32db794688a5/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= -golang.org/x/crypto v0.0.0-20220214200702-86341886e292 h1:f+lwQ+GtmgoY+A2YaQxlSOnDjXcQ7ZRLWOHbC6HtRqE= -golang.org/x/crypto v0.0.0-20220214200702-86341886e292/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= +golang.org/x/crypto v0.0.0-20220411220226-7b82a4e95df4 h1:kUhD7nTDoI3fVd9G4ORWrbV5NY0liEs/Jg2pv5f+bBA= +golang.org/x/crypto v0.0.0-20220411220226-7b82a4e95df4/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= @@ -979,8 +1001,10 @@ golang.org/x/net v0.0.0-20211015210444-4f30a5c0130f/go.mod h1:9nx3DQGgdP8bBQD5qx golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20211216030914-fe4d6282115f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= -golang.org/x/net v0.0.0-20220225172249-27dd8689420f h1:oA4XRj0qtSt8Yo1Zms0CUlsT3KG69V2UGQWPBxujDmc= golang.org/x/net v0.0.0-20220225172249-27dd8689420f/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= +golang.org/x/net v0.0.0-20220325170049-de3da57026de/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= +golang.org/x/net v0.0.0-20220412020605-290c469a71a5 h1:bRb386wvrE+oBNdF1d/Xh9mQrfQ4ecYhW5qJ5GvTGT4= +golang.org/x/net v0.0.0-20220412020605-290c469a71a5/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= @@ -998,8 +1022,10 @@ golang.org/x/oauth2 v0.0.0-20210805134026-6f1e6394065a/go.mod h1:KelEdhl1UZF7XfJ golang.org/x/oauth2 v0.0.0-20210819190943-2bc19b11175f/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/oauth2 v0.0.0-20211005180243-6b3c2da341f1/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20220309155454-6242fa91716a h1:qfl7ob3DIEs3Ml9oLuPwY2N04gymzAW04WsUQHIClgM= +golang.org/x/oauth2 v0.0.0-20220223155221-ee480838109b/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc= golang.org/x/oauth2 v0.0.0-20220309155454-6242fa91716a/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc= +golang.org/x/oauth2 v0.0.0-20220411215720-9780585627b5 h1:OSnWWcOd/CtWQC2cYSBgbTSJv3ciqd8r54ySIW2y3RE= +golang.org/x/oauth2 v0.0.0-20220411215720-9780585627b5/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -1115,11 +1141,12 @@ golang.org/x/sys v0.0.0-20211124211545-fe61309f8881/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20211205182925-97ca703d548d/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211210111614-af8b64212486/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220114195835-da31bd327af9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220128215802-99c3d69c2c27/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220209214540-3681064d5158/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220310020820-b874c991c1a5 h1:y/woIyUBFbpQGKS0u1aHF/40WUDnek3fPOyD08H5Vng= -golang.org/x/sys v0.0.0-20220310020820-b874c991c1a5/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220227234510-4e6760a101f9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220328115105-d36c6a25d886/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220412211240-33da011f77ad h1:ntjMns5wyP/fN65tdBD4g8J5w8n015+iIIs9rtjXkY0= +golang.org/x/sys v0.0.0-20220412211240-33da011f77ad/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -1202,8 +1229,9 @@ golang.org/x/tools v0.1.8/go.mod h1:nABZi5QlRsZVlzPpHl034qft6wpY4eDcsTt5AaioBiU= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE= golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20220411194840-2f41105eb62f h1:GGU+dLjvlC3qDwqYgL6UgRmHXhOOgns0bZu2Ty5mm6U= +golang.org/x/xerrors v0.0.0-20220411194840-2f41105eb62f/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= google.golang.org/api v0.0.0-20160322025152-9bf6e6e569ff/go.mod h1:4mhQ8q/RsB7i+udVvVy5NUi08OU8ZlA0gRVgrF7VFY0= google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M= @@ -1238,13 +1266,11 @@ google.golang.org/api v0.59.0/go.mod h1:sT2boj7M9YJxZzgeZqXogmhfmRWDtPzT31xkieUb google.golang.org/api v0.61.0/go.mod h1:xQRti5UdCmoCEqFxcz93fTl338AVqDgyaDRuOZ3hg9I= google.golang.org/api v0.62.0/go.mod h1:dKmwPCydfsad4qCH08MSdgWjfHOyfpd4VtDGgRFdavw= google.golang.org/api v0.63.0/go.mod h1:gs4ij2ffTRXwuzzgJl/56BdwJaA194ijkfn++9tDuPo= -google.golang.org/api v0.64.0/go.mod h1:931CdxA8Rm4t6zqTFGSsgwbAEZ2+GMYurbndwSimebM= -google.golang.org/api v0.66.0/go.mod h1:I1dmXYpX7HGwz/ejRxwQp2qj5bFAz93HiCU1C1oYd9M= google.golang.org/api v0.67.0/go.mod h1:ShHKP8E60yPsKNw/w8w+VYaj9H6buA5UqDp8dhbQZ6g= -google.golang.org/api v0.69.0/go.mod h1:boanBiw+h5c3s+tBPgEzLDRHfFLWV0qXxRHz3ws7C80= google.golang.org/api v0.70.0/go.mod h1:Bs4ZM2HGifEvXwd50TtW70ovgJffJYw2oRCOFU/SkfA= -google.golang.org/api v0.73.0 h1:O9bThUh35K1rvUrQwTUQ1eqLC/IYyzUpWavYIO2EXvo= -google.golang.org/api v0.73.0/go.mod h1:lbd/q6BRFJbdpV6OUCXstVeiI5mL/d3/WifG7iNKnjI= +google.golang.org/api v0.71.0/go.mod h1:4PyU6e6JogV1f9eA4voyrTY2batOLdgZ5qZ5HOCc4j8= +google.golang.org/api v0.74.0 h1:ExR2D+5TYIrMphWgs5JCgwRhEDlPDXXrLwHHMgPHTXE= +google.golang.org/api v0.74.0/go.mod h1:ZpfMZOVRMywNyvJFeqL9HRWBgAuRfSjJFpe9QtRRyDs= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= @@ -1296,6 +1322,7 @@ google.golang.org/genproto v0.0.0-20210222152913-aa3ee6e6a81c/go.mod h1:FWY/as6D google.golang.org/genproto v0.0.0-20210303154014-9728d6b83eeb/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20210310155132-4ce2db91004e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20210319143718-93e7006c17a6/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20210329143202-679c6ae281ee/go.mod h1:9lPAdzaEmUacj36I+k7YKbEc5CXzPIeORRgDAUOu28A= google.golang.org/genproto v0.0.0-20210402141018-6c239bbf2bb1/go.mod h1:9lPAdzaEmUacj36I+k7YKbEc5CXzPIeORRgDAUOu28A= google.golang.org/genproto v0.0.0-20210513213006-bf773b8c8384/go.mod h1:P3QM42oQyzQSnHPnZ/vqoCdDmzH28fzWByN9asMeM8A= google.golang.org/genproto v0.0.0-20210602131652-f16073e35f0c/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= @@ -1321,18 +1348,17 @@ google.golang.org/genproto v0.0.0-20211203200212-54befc351ae9/go.mod h1:5CzLGKJ6 google.golang.org/genproto v0.0.0-20211206160659-862468c7d6e0/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= google.golang.org/genproto v0.0.0-20211208223120-3a66f561d7aa/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= google.golang.org/genproto v0.0.0-20211221195035-429b39de9b1c/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= -google.golang.org/genproto v0.0.0-20211223182754-3ac035c7e7cb/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= -google.golang.org/genproto v0.0.0-20220111164026-67b88f271998/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= -google.golang.org/genproto v0.0.0-20220114231437-d2e6a121cae0/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= google.golang.org/genproto v0.0.0-20220126215142-9970aeb2e350/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= -google.golang.org/genproto v0.0.0-20220201184016-50beb8ab5c44/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= google.golang.org/genproto v0.0.0-20220207164111-0872dc986b00/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= -google.golang.org/genproto v0.0.0-20220211171837-173942840c17/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= -google.golang.org/genproto v0.0.0-20220216160803-4663080d8bc8/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= google.golang.org/genproto v0.0.0-20220218161850-94dd64e39d7c/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= google.golang.org/genproto v0.0.0-20220222213610-43724f9ea8cf/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= -google.golang.org/genproto v0.0.0-20220310185008-1973136f34c6 h1:FglFEfyj61zP3c6LgjmVHxYxZWXYul9oiS1EZqD5gLc= +google.golang.org/genproto v0.0.0-20220304144024-325a89244dc8/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= google.golang.org/genproto v0.0.0-20220310185008-1973136f34c6/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= +google.golang.org/genproto v0.0.0-20220324131243-acbaeb5b85eb/go.mod h1:hAL49I2IFola2sVEjAn7MEwsja0xp51I0tlGAf9hz4E= +google.golang.org/genproto v0.0.0-20220405205423-9d709892a2bf/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= +google.golang.org/genproto v0.0.0-20220407144326-9054f6ed7bac/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= +google.golang.org/genproto v0.0.0-20220413183235-5e96e2839df9 h1:XGQ6tc+EnM35IAazg4y6AHmUg4oK8NXsXaILte1vRlk= +google.golang.org/genproto v0.0.0-20220413183235-5e96e2839df9/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= google.golang.org/grpc v0.0.0-20160317175043-d3ddb4469d5a/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= @@ -1381,8 +1407,9 @@ google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGj google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= -google.golang.org/protobuf v1.27.1 h1:SnqbnDw1V7RiZcXPx5MEeqPv2s79L9i7BJUlG/+RurQ= google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= +google.golang.org/protobuf v1.28.0 h1:w43yiav+6bVFTBQFZX0r7ipe9JQ1QsbMgHwbBziscLw= +google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= gopkg.in/airbrake/gobrake.v2 v2.0.9/go.mod h1:/h5ZAUhDkGaJfjzjKLSjv6zCL6O0LLBxU4K+aSYdM/U= gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= diff --git a/integration/drafts_test.go b/integration/drafts_test.go new file mode 100644 index 00000000..9336aa09 --- /dev/null +++ b/integration/drafts_test.go @@ -0,0 +1,34 @@ +package integration_test + +import ( + "testing" + + "github.com/paketo-buildpacks/pipeline-builder/drafts" + "github.com/sclevine/spec" + + . "github.com/onsi/gomega" +) + +func testDrafts(t *testing.T, context spec.G, it spec.S) { + var ( + Expect = NewWithT(t).Expect + ) + + context("registry buildpack loader", func() { + it("fetches buildpack.toml from a remote buildpack", func() { + bp, err := drafts.RegistryBuildpackLoader{}.LoadBuildpack("gcr.io/paketo-buildpacks/bellsoft-liberica:latest") + Expect(err).ToNot(HaveOccurred()) + + Expect(bp.Info.ID).To(Equal("paketo-buildpacks/bellsoft-liberica")) + Expect(bp.Dependencies).ToNot(BeEmpty()) + Expect(bp.OrderGroups).To(BeEmpty()) + Expect(bp.Stacks).ToNot(BeEmpty()) + }) + + it("fails fetching an image that does not exist", func() { + _, err := drafts.RegistryBuildpackLoader{}.LoadBuildpack("lasjdflaksdjfl") + Expect(err).To(HaveOccurred()) + Expect(err).To(MatchError(HavePrefix("unable to load lasjdflaksdjfl"))) + }) + }) +} diff --git a/integration/init_test.go b/integration/init_test.go new file mode 100644 index 00000000..c556938b --- /dev/null +++ b/integration/init_test.go @@ -0,0 +1,18 @@ +package integration_test + +import ( + "testing" + + "github.com/sclevine/spec" + "github.com/sclevine/spec/report" +) + +func TestIntegration(t *testing.T) { + if testing.Short() { + t.Skip("Skip integration tests in short mode") + } + + suite := spec.New("Integration", spec.Report(report.Terminal{}), spec.Parallel()) + suite("Default", testDrafts) + suite.Run(t) +} diff --git a/octo/draft_release.go b/octo/draft_release.go index 746c1887..37ae086d 100644 --- a/octo/draft_release.go +++ b/octo/draft_release.go @@ -139,13 +139,13 @@ func ContributeDraftRelease(descriptor Descriptor) ([]Contribution, error) { }, actions.Step{ Name: "Update draft release with buildpack information", - Run: StatikString("/update-draft-release-buildpack.sh"), - Env: map[string]string{ - "GITHUB_TOKEN": descriptor.GitHub.Token, - "RELEASE_ID": "${{ steps.release-drafter.outputs.id }}", - "RELEASE_TAG_NAME": "${{ steps.release-drafter.outputs.tag_name }}", - "RELEASE_NAME": "${{ steps.release-drafter.outputs.name }}", - "RELEASE_BODY": "${{ steps.release-drafter.outputs.body }}", + Uses: "ghcr.io/paketo-buildpacks/actions/draft-release", + With: map[string]interface{}{ + "github_token": descriptor.GitHub.Token, + "release_id": "${{ steps.release-drafter.outputs.id }}", + "release_tag_name": "${{ steps.release-drafter.outputs.tag_name }}", + "release_name": "${{ steps.release-drafter.outputs.name }}", + "release_body": "${{ steps.release-drafter.outputs.body }}", }, }, ) diff --git a/octo/statik/statik.go b/octo/statik/statik.go index dbd0ca7c..77d5eeef 100644 --- a/octo/statik/statik.go +++ b/octo/statik/statik.go @@ -8,7 +8,7 @@ import ( func init() { - data := "PK\x03\x04\x14\x00\x08\x00\x08\x00\xe4VKT\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1a\x00 \x00check-republish-version.shUT\x05\x00\x01\x8d@\x06bt\x92Ao\x1a?\x10\xc5\xef\xf3)\xde\xdf\xe1\x00\x7fi\xa1\xe9q#\x0e(\"\x88C\x9a\nhT)\x8a*\xb3\x0c\x8b\xc5\xd6^ymT\x89\xf8\xbbW\xde5\xc9\xd2\xaa7\xdb\xf3f\xfc\xfc{\xbe\xf9o\xe2\x1b;\xd9*=a}\xc2V6\x07\xa2\x86\x1d2\xf6\x06\xb5\xaay/UET\x18\xed\xa4\xd2\xcdp\x843\x01\x95)d\x85\xcdl1\x15\x83\xf3m\x10\x84v38of\x8b\x9bSxW,\x1fg\x8b\xf9:\x8a>\x07A\x04\xec\x8d\xed\x0e\xa14\x06\xe7\xae\x1e\xee\xb03\x04\x00j\x8f\x97\x17\x88vN\x10\x98N\xe3\xba\x15\x05\x81\xd7\xd7;\xb8\x03\xebV pq0\x10y\xbe\xe3\xad/\xf3\xfc\xc1x\xbdC\xeaL\x12\xcb\xce[\x8dO\xedv\xaf\x08\xd8\x19\xcd\xd1G\xaa\xdcR J&\x07\xc3\xc2J\xcd\xa8\x9a\xce\xc0j1\xdf\x041\"\x8a\x9e7\xb3E\xebxX*\x07'KdU\xb2\xf9\xe3\xebj\xfe\xb0\xfc\x1e\xfe\x17xCc\xacC\xf6\x8c\xccb\x94\x1e\xf5<_\xad\x97O_\x12\x9b\xeb\x1e\x11\xae\x04i\x15\x01R\xcb\xe2B=^\x95\x8aA\xbc#Y\x07\xd1\x03\xd2\xe1\xe8S\x18c}Tu\xadt9\x16\xd4'\xd6\xb0\xcb\x8cw\xb5w\xd0\xf2'O\x9b\xa3\xaa\xf3\xdcY\xcfI\xf7K9j\x81\xd1GSi\x8d\xaf\xf3\xfc\xfe\xc0\xc5Q\xe9\x12\xc6\xbb+\xda\x11L\x11\x8b\xb1\x90e\x18\xff}*>\xf4\x97\xa9\xacwip\xff\xf4O\x83N\xda\x92]\x9e\xf7(\x10\xb0\xb5,\x8f\xd4%\xda\xfd\xab\x94Q?\xc7\xf5\xd3\xb7\xd5}\xfc=o(-\xd7\xc8N\x10\x95t\xdc\xb8\xeb\xbc.q\xfd\x93\x91\xf1\xb6\xe0ha\xf9\x98\x9e\x10)\xb5\xb7\xff\x0e\x00\x00\xff\xffPK\x07\x08\xe6=dt\xb0\x01\x00\x00E\x03\x00\x00PK\x03\x04\x14\x00\x08\x00\x08\x00\xe4VKT\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x18\x00 \x00checkout-next-version.shUT\x05\x00\x01\x8d@\x06bd\x91O\x8f\xda0\x10\xc5\xef\xf3)^\xbd\x1c\xa0R\xa0\xdb\xa3W\x1cP\xc5F\x1c\xfaG\x80V\x95V\xab*$&X\xa4v\xe4?\xa8\x12\xf5w\xafl\xbcK\xe8\xdef\xe6\xbd\x99\xbc\xfc|\xf7a\xe6\xad\x99\xed\xa4\x9a u\xc2\xae\xb2\x07\"+\x1c\n\xe15z\xd9\x8b}%;\xa2Z+WIe\xc7\x13\x9c \xe8t]u\xd8.\xca9\x1b\x9d\xef\x03#\xa4ft\xde.\xca\xbbSxs\xac\xbe.\xca\xe5&\x9a>\x07F\x04\xec\xb5\xb9\x0c!\x15F\xe7\x8b\x1e\x1e\xd0h\x02\x00\xb9\xc7\xf33X\xba\x13\x18\xe6\xf3X'S`xyy\x80;\x08\x95\x9c\x80\xa8\x0f\x1a\x8c\xf3F\xec|\xcb\xf9\xa3\xf6\xaaA\xde\xcc\x16#\x9c7\n\x9fR\xbb\x97\x044Z\x89\x98#+\xf7\x14\x88r\xc8\xd1\xb86\x95\x12\xe8\xec%\xc0\xba\\n\x03\x9b\x10\xc5\xcc\xdbE\x99\x12\x8f[\xe9\xe0\xaa\x16E\x97c\xfe\xfa\xb1^>\xae~\x86\x8f\x0c\x7fa\xb5q(\x9eP\x18L\xf2O=-\xd7\x9b\xd5\xf7o\x99\xcd\xcdJ\xb8\x91s\x15\xf1Q\"\xf1\xca<~(\x8b\x81\xbd\x01\xd9\x046\xc0q\x811d0\xc5\xe6(\xfb^\xaav\xcah\xc8\xcb\nWh\xefz\xef\xa0\xaa\xdfbn\x8f\xb2\xe7\xdc\x19/\xb2\xef\x8ft\x94p\xd1u\xa95\xda\xf7\x9c\x7f9\x88\xfa(U\x0b\xed\xdd\x0d\xeb\x88\xa5\x8eb\x14\x8a\x02\xd3\xf7Sv\xf5\xbf^\x15\xaa\xc9\x87\x87\xd3\xff\x03\x9e\x84\xb1R+\xce\x07\x18(\xe7L\xef\xf9/\x00\x00\xff\xffPK\x07\x08\x9f\xa1C{}\x01\x00\x00\xc5\x02\x00\x00PK\x03\x04\x14\x00\x08\x00\x08\x00\xceQ~T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x12\x00 \x00compute-version.shUT\x05\x00\x01\x84-Db\x9c\x91\xcfn\xd3@\x18\xc4\xef\xfb\x14\xc3b) ecZ\xa9\x07\x0cAr!\xc5AJ+%\x85\x8b\xb1\"\xa7\xf9\\/8^kwm\xfe\x98\xe5\xd9\x91\x93B\x9c\x0bT\x9c,\x8dgF\xbfo\xf6\xf1#\xbf6\xda_\xcb\xd2\xa7\xb2\xc1:59c\x86,\x04\xd5\n\x95\xac(Ke\xc1\x98\xcc\x10C|\x07\xf7\xda\xb7\xb3\x9b\xe8\xfd\xc5j1\xbd<1d\x1dG\xf2\x026\xa7\x92\x01t\x9b+\xf0\x83\x01]\x93U\x88\xfb)\xf1\xb2.\x0d\xd9W.y\x8aumarU\x17\x1b\x94\xd4\x90\xc6\x9a@\xdb\xca~\x83\xd2\xd8\xd9xW\xfbUZ\x9c\x9d\x9f\xb3L\xeeIb\xf4\x0b\x1d&?\xa1)3\xbeM\xef\x8c\xdf\x0c\xe3g\xe2yr\xf2q|\xfc\x1d!9\x90~\x98.\x96\xb3\xeb\xab\x89\xd7^\x84\xcbh\xb5\x98\xce\xc3\x9b\xd7Q|\x9a8\xc6\x80y\xf8\xeez\xb1\xfa\xed\xe1\xdep\x7f\x98\xd7\xdeK\x8e\xe3\x07\xd2/\x9f!.1\x18\x0f0h+-K\x0b\xef\x14n0\xea\x90\xe7\xb3\xab\xffm\xe0c\x0e\xefl_\xf4g\xd3 0d\x85\xaamU[\x94\xe9\x96&\x0di#U)\xb6\xe9'\xa5\x83\xc0k\x8f\xa0\x1d\x7fHT\x96\xf7\xd1>\xad\xe3\x8c\x8a\xbf\xad\x9cS\xba1\xfep\xfc\xe0E\xa90\xd4w\x0c\xef\xa4\x85\xa6FT\xa96\x04!L\xae\xb4E4\x0d\xdf\x8cvo\xfc\x0f\xf0\x0e\xb9\x07\xbb3/\xa9\xa0[K\x1b\x1c~!\xd3j\xcb\x80'\x1dvp|\xccN6y\xda\x93\x97Q\xe8\x18g\xbf\x02\x00\x00\xff\xffPK\x07\x08jI\xb5)\x85\x01\x00\x00\x12\x03\x00\x00PK\x03\x04\x14\x00\x08\x00\x08\x00V}\x17S\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00 \x00create-action.shUT\x05\x00\x01\xf4\xc1#a|\x8f=O\x84@\x10\x86\xfb\xf9\x15\xaf+-\xd2c(\xfc j\xe3]\xe0\xce\xe6\xbc\x82\x8f\x01&G\x96\x0d\xcb\xda\x10\xfe\xbb\x01Or1j\xb7\xd9yf\xde\xe7\xbd\xbe\n\x9c\xed\x83\\t\xc0\xfa\x03yf\x1b\"\xcb\x03|v\x1d\x8c\x18\xae2i\x89\xb8h:\xa80\xac\xfb\xce\x990\xbcw\xd2\x96\xa2kx\xe3\xee.y\x8awS\xe8\x8doq\x92\xbel^'E@\xd9\x15'\xee\x91\xcf\x1c\xde \x00|\xbf\x92\x96\x91\x15\x83t\xda\x06\x8f\x0b\xb1|}\xcf\x17\xda\xcf\xfa\x1a*\xdd\xec\x93\x878\xf2\xc6\xaf\xc7\xa4Vh\xc8j\xa8_c\xcf\xc8\xcd*\xcb\xba<\xfb*\"\xa9p8\xcc\x9b\xdb}\xfa<)D\x11\xd4\xd0;V8\x1eo14\xac \xf8Qs\xebl\xf3_\xcb\xb5\xa7q\xb6\xf9\xc3\xea\xe2\xea\xa5\x0f\xb7\x96\xd7Qz\x12c\xe6\xa0\xf9\x8e\xa2J\xe83\x00\x00\xff\xffPK\x07\x08_n\x1bS\xe6\x00\x00\x00\x98\x01\x00\x00PK\x03\x04\x14\x00\x08\x00\x08\x00V}\x17S\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x11\x00 \x00create-builder.shUT\x05\x00\x01\xf4\xc1#a\xac\x8e\xcdJ\x031\x18E\xf7y\x8ak\x9c\x85\"q\xf6\x117\xc5\x82\x03E\xa5\xa5nj\x17\x99\xf4\x9b\xce\x87i\x12&\x89\x08\xc3\xbc\xbb\x0c\xfe\xec\xdcuy9\x1c\xee\xb9\xbc\xa8K\x1a\xea\x96}M\xfe\x03\xadI\xbd\x10\x892\x14\x95\x80\xc8\x91:\xc3N\x08\xee\xb0\xdbAy\xc8j|\xd9.V\xcd\xe6\xf1\xe6s\x92\xd8\xef\xef\x90{\xf2\x02\x88\xc6\xbe\xa3-\xec\x0e4\xc0\x0ed2\xe1M\x00\x98\x9d\xc5\xb6Y=,\xd7\x93\xae\xc6\xd7\xe5z\xd3\x01\x00\x00\x81\x02\x00\x00PK\x03\x04\x14\x00\x08\x00\x08\x00V}\x17S\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1b\x00 \x00enable-pack-experimental.shUT\x05\x00\x01\xf4\xc1#a\\\xccO\xaa\xc20\x10\x80\xf1\xfd\x9cb^\x9e\xdb6'\xb0\xbb\x82\x1b\xf1\x0c\xd38i\x87&\x93\x90?\"\x88w\x17\xc1\x8d\xee\xbf\xdf\xf7\xffg{-v\x11\xb5\xac7\\\xa8n\x00\x95\x1b\x0e\xdc\x13f\xc9\xecI\x02\x00\xbb-\xa1\x99\x95\x96 \xbab&\xb7#\xdf3\x17\x89\xac\x8d\x02z\xa6\xd6\x0bW\x03\x10\xf7\xab\x14\x1c2\x9a\xc3\xe3t9\xcfOc\xc77\xf8L\xbe\xd8\x11[\xe9lp\x9a~k\xeb\x92zY\xc7\x96b\x80W\x00\x00\x00\xff\xffPK\x07\x08hy\x98\xea\x84\x00\x00\x00\xa7\x00\x00\x00PK\x03\x04\x14\x00\x08\x00\x08\x00D\x80fT\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00 \x00install-crane.shUT\x05\x00\x01\x00\xdb$bl\x90AO\x021\x10\x85\xef\xfd\x15c\xe5Zz1\xc4x AB\x84D\xc1 z\"\xd9\x942v\x1bKg3\xed\xc2\n\xf2\xdf\xcd\xeaz!\x1e\xdf\x97\xbc\x97|\xef\xfaJ\xd7\x89\xf5\xc6G\x8dq\x0f\x1b\x93J!\x12fPX\x13T\xbe\xc2w\xe3\x83\x10hK\x029\x8b)\x9b\x10|t`\xd9D\x84\xdei\xbc\x1c\xcd'\xc5\xdbd\xf92[\xcc\xcfR\x88\xdd\xc7\xd63\xa8\nd\xef4]`\xcc]\x08dM\xf6\x14\x7f\xa2,s\xae\xd2\x9d\xd6\xce\xe7\xb2\xde\xf4-\xed\xb4#r\x01\xb5#e)f\xe3#2\xa3\xf3)\xf3\xa7f\x0ch\x12&\xbd\xa5C\x0cd\xb6z\x7f\xa9\xf2o\xb1x\xf4\xb1n\x8a\xe6vP\x0cn\xfa\xd9p\xdf\x1d%\xac\xc5\x17d\xc3\xa0\xc6\x17\x86\xaa9\xfe\x1e%\xbe\x03\x00\x00\xff\xffPK\x07\x08\x85\"\x0ei\xfb\x00\x00\x00h\x01\x00\x00PK\x03\x04\x14\x00\x08\x00\x08\x00rsKT\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x19\x00 \x00install-create-package.shUT\x05\x00\x01Yr\x06b\x14\xca\xc1\x0e\x820\x0c\x00\xd0\xfb\xbe\xa2\xe2\xb96|\x007\x8d\x17\x0d'?\xa0\x1be4\x0c\xb6\xd0M\x7f\xdfp}y\xd7\x0b5;\xc8\xebN\xb2\x7f\xc1\xb3-\xce\x99T@i\x19\x8a\x16\x99Y\x93s\xcf\xb1\xef\xfb\xf7x\xff\xbc\x1eC\xde!f\x88gj\x80i\x9a\x13G\x1b:4\xc0_\x07Q\xeb\xd2\xfc-\xe4\x8d\n\xafR3\xfa\xa6i*\x1cV\xa3\xa4\xbe\xf0Ja\x9b(\x1c\xc2U\xf0t\x8e\xe2\xfe\x01\x00\x00\xff\xffPK\x07\x08&\x95T\xcd}\x00\x00\x00\x89\x00\x00\x00PK\x03\x04\x14\x00\x08\x00\x08\x00rsKT\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0f\x00 \x00install-octo.shUT\x05\x00\x01Yr\x06b$\xcc?\xae\xc20\x0c\x80\xf1=\xa7\xf0\xeb\x9b\x83\xd5\x03t\x03\xb1\x80:q\x80\xfcqS\xabi\x1c\xd5 \\\x1fU\xac\x9f>\xfd\xfe\xff\xb0\xeb\x81\x9e\x0bRy\x83w\xba\x1a\xa3\xd4\xc0R\x17\xa8\\iq\x9c\x8d\xb9\xcf\xe38>\xe7\xeb\xebq\x9b\xa4@\x12H\xe7\xd4\xc1\xe6\xb8d\x97t\x1a\xac\x82\xfd\x0c\x90\xb8\xad\xdd_\x82\xecX\xddFM\xac\xef\x9ccuaS<\xc1\xcc\x85~\x8d\x0e\x0c{D M\xcc7\x00\x00\xff\xffPK\x07\x08\xc6\xd7y\xcb~\x00\x00\x00\x89\x00\x00\x00PK\x03\x04\x14\x00\x08\x00\x08\x00V}\x17S\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0f\x00 \x00install-pack.shUT\x05\x00\x01\xf4\xc1#a\\\x90\xcfk\xfa@\x10\xc5\xef\xfbW\xccw\xbf^\xd7\xbd\xf7 X\x91&\x94VimO\x82l\x92i28\xee\x86\xfd\xa1\xa2\xf5\x7f/\x1b\xd2C\xbd\x0c\xbc\x0f\xf3\x867\xef\xff?\x9d\x82\xd7\x15Y\x8d\xf6\x08\x95 \x9d\x10\x01#(L\x0ez\xea\xf1\xcb\x10\x0b\x81u\xe7@\x966D\xc3L\xb6\x85\xde\xd4{\x98\\\xd7\xf3\xc5\xf3\xees\xf9\xf6^\xae^oR\x88\xc3\xbe!\x0f\xaa\x079\xb9\x16\xab\x97\xe5M\xe6\xdb\xa3}D\x99H\x98\xcd2x*7\xc5\xc7\xe3n=\xdf\x14\xd9^'\xcf\xb0\x15\x00J\xb1\xabM$gG\x19:wR\xe8\xbd\xf3\xbf\x80\x18m\x1c\x84\xecb\xec\xc3\x83\xd6-\xc5.U\xd3\xda\x1dt\x95\x88\x9b\x1c2\xe8<\xb5GF\x130\xe8\xc6\x9d,;\xd3\xe8\xe3]\xfaaO\xddS\xc5d\xd3y\x1a\xdb\x8b\x84\xad\xf8\x86h<\xa8\xc5\xdf\xf7@\x9d/C!\xe2'\x00\x00\xff\xffPK\x07\x08\xdbZX\xfe\xeb\x00\x00\x00O\x01\x00\x00PK\x03\x04\x14\x00\x08\x00\x08\x00V}\x17S\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x11\x00 \x00install-richgo.shUT\x05\x00\x01\xf4\xc1#ad\x901O\xc30\x10\x85w\xff\x8a\xc3tu\xbc\xa0\n1T\x82\xaaj2@P)L\x95\"'1\xb1U\xc7\x17\x9d\x9d\xb6\xb4\xf4\xbf\xa3@\x18\xaa\x8e\xef\xbb\xbb\xa7w\xef\xf6F\xf6\x81di\xbd\xd4~\x07\xa5\n\x86\xb1\xa0#\x08\xdd#t\xb6\xd3\x9f\xca:\xc6te\x10x\xe6CT\xceY\xdf\x00\xd9\xca4\x08\x93\xd3*\x9b\xa7\xcb\xbc\xf8X\xac\xde\xb2\xfc\xe5\xcc\x19k\xb7\xb5%\x10\x1d\xf0\xc9)\xcd\x9f\x17g>\xf8\x8f\x16#\x1a\x08\x87\xd9l\x00\xcbl\x9d\xbe?\x15\xaf\x8f\xebt8\xafzr\xb0a\x00B8\xacT\xb4\xe8G\x19\x0c\xee\x85&B\xfa\x07\xd6i\x1f\x7f\x0571v\xe1A\xca\xc6F\xd3\x97I\x85\xad\xdc~\xa1\xb9\x9f\xca\xbf\xa8\x92\xb4\xd3*\xe8 k\xdc{\x87\xaa\x96\xbb\xab\xf4\xe3nq5(\x9c\xf5\xfd\xa1Pm=\xbdK\xa2\xa2\xa49r\xd8\xb0o\x88\x8a@\xcc/_\x05q8\x8e\x05\xb1\x9f\x00\x00\x00\xff\xffPK\x07\x08-\xdb\xfd\x81\xf6\x00\x00\x00a\x01\x00\x00PK\x03\x04\x14\x00\x08\x00\x08\x00rsKT\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00(\x00 \x00install-update-build-image-dependency.shUT\x05\x00\x01Yr\x06b$\xca\xb1\x0e\xc2 \x10\x00\xd0\x9d\xaf8\xeb\x8c\x97~@7\x8d\x8b\xa6\x93\x1fp\xc0\x95^J\xe1\"\xa0\xf1\xef\x8dq~\xefx\xc0^\x9f\xe8$#\xe7\x178\xaa\xab1\x95\x1bX\xee\x05T\x94\x17\x92d\xccu\x1e\xc7\xf1>\x9f\x1f\xb7\xcbT2\xc4\x02\xf1\x97:\xd8\x14\x96D\xb1N\x83\xad`\xdf\x03Dikw'_vT\xda\xb8\x15\xeb\xba\xa4\xa0\xe4\xb7\x8aI\x9c\xd2\x86~\x0f\xd85P\xe3?Z\xd9)\xb2\x0d\xac\x9c\x03g\xff1\xdf\x00\x00\x00\xff\xffPK\x07\x08\x80\xfd\xc2u\x86\x00\x00\x00\x98\x00\x00\x00PK\x03\x04\x14\x00\x08\x00\x08\x00\x97}fT\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00&\x00 \x00install-update-buildpack-dependency.shUT\x05\x00\x01\xee\xd6$bD\xca\xb1\x0e\xc2 \x10\x00\xd0\x9d\xaf8\xeb\x8c\x97~@7\x8d\x8b\xa6\x93\x1fp\xc0\x95\x92R\xb8\x08\xa7\xf1\xef\x8d\x93\xf3{\xc7\x03j{\xa2K\x05\xb9\xbc\xc0Q[\x8di\xdc\xc1\xb2V\x90$\xbcP\xca\xc6\\\xe7q\x1c\xef\xf3\xf9q\xbbL\xb5@\xac\x10\x7fI\xc1\xe6\xb0d\x8am\x1al\x03\xfb\x1e \xa6\xbe\xaa;\xf9\xba\xa3\xd0\xc6\xbdZ\xa7)\x07!\xbf5\xcc\xc9 m\xe8\xf7\x80*\x81:\xff\xd1\x06\x16.\x81\x8b\xff\x98o\x00\x00\x00\xff\xffPK\x07\x08D\x9aU\x15\x83\x00\x00\x00\x96\x00\x00\x00PK\x03\x04\x14\x00\x08\x00\x08\x00rsKT\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00$\x00 \x00install-update-buildpack-image-id.shUT\x05\x00\x01Yr\x06bD\xcc1\x0e\xc20\x0c@\xd1=\xa70e6V\x0f\xd0\x0d\xc4\x02\xea\xc4\x01\x9c\xc6M\xad\xa6I\xd4$p}T1\xb0~=\xfd\xf3\x89Z\xd9\xc9j$\x89o\xb0\\\x16c\x8aT@i \xb2f\x99Y\x831\xf7\xb1\xef\xfb\xe7x}=nC\x8a\xe0\x13\xf8\x035\xc0\xe0\xe6\xc0\xbe\x0c\x1d\x16\xc0O\x07^\xeb\xd2\xeceJ\x1be^\xa5&\xb4M\x83\xcb<\xad\x85\x8ea\xd0(\xbf&;M\x9b\xa3\x96\x1dW\xf93\xd4\x8d\xbd\xa0:\xf3\x0d\x00\x00\xff\xffPK\x07\x08\x81i\"\xe9\x86\x00\x00\x00\x9e\x00\x00\x00PK\x03\x04\x14\x00\x08\x00\x08\x00rsKT\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00&\x00 \x00install-update-lifecycle-dependency.shUT\x05\x00\x01Yr\x06b\x14\xca\xb1\x0e\xc2 \x10\x00\xd0\x9d\xaf8\xeb\x8c\xa4\x1f\xd0M\xe3\xa2\xe9\xe4\x07\x1cp\xa5\x97^\xe1\"\xa0\xe9\xdf\x1b\xf7w>\xb9^\xdf\xcesv\x94?\xe0\xb1\xae\xc6Tj`\xa9\x17PVZ\x90\xc5\x98\xfb<\x8e\xe3s\xbe\xbe\x1e\xb7\xa9dH\x05\xd2\x1fu\xb0\x12\x17\xc1T\xa7\xc1V\xb0\xdf\x01\x12\xb7\xb5\xfbK(\xbbS\xdc\xa8\x15\xeb;KT\x0c[u\xc2^qsa\x8f\xaek\xc4FVx\xa1p\x04!\x1bI)G\xca\xe10\xbf\x00\x00\x00\xff\xffPK\x07\x08[\xf5\xeb\xb7\x86\x00\x00\x00\x96\x00\x00\x00PK\x03\x04\x14\x00\x08\x00\x08\x00rsKT\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00$\x00 \x00install-update-package-dependency.shUT\x05\x00\x01Yr\x06b\x14\xca\xb1\x0e\xc2 \x10\x00\xd0\x9d\xaf8\xeb|^\xfa\x01\xdd4.\x9aN~\xc0\x01WJJ\xe1\"\xa0\xf1\xefM\xd7\x97w>Q\xafo\xb21\x93\xe4\x0fX\xae\xab1U\x1a\xa0\xf4\x02\x1aU\x16\x8e\xc9\x98\xfb<\x8e\xe3s\xbe\xbe\x1e\xb7\xa9d\x08\x05\xc2\x91:`\xf2K\xe2P\xa7\x01+\xe0w\x80\x10\xdb\xda\xed\xc5\x95\x9d\x947i\x05m\x8f\xc9+\xbb\xadR\x8aVy#\xb7{\xea\xea\xb9 \x1e\xceA\xd0\x8bJ\xf6\x92\xdd\xcf\xfc\x03\x00\x00\xff\xffPK\x07\x08(\x19B-\x84\x00\x00\x00\x94\x00\x00\x00PK\x03\x04\x14\x00\x08\x00\x08\x00V}\x17S\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0d\x00 \x00install-yj.shUT\x05\x00\x01\xf4\xc1#ad\x8fMK\xc3@\x10\x86\xef\xfb+\xc6\xb57Y\xe7\xee\xa1\xa0PL\x04\xadh\x15\x04\xa1l\x92\xb1\xbbq\xb3\x13\xf6#m(\xfd\xef\x12\x89\x87\xe2\xf1}\x86w\x9e\x99\xcb\x0b\xcc1`e=\x92\x1f\xa0\xd2\xd1\x08\x11)\x81\xa2\xcc\xd0\xdb\x9e\xbe\xb4uBPm\x18d\xe9c\xd2\xceY\xbf\x83\xb1\x85\xc5\xf1\xe3a\xfb\xbezy-\xd7O')D\xf7\xdd\xd8\x00\xaa\x07\xb98\x16\xeb\xc7\xd5IN{\xe7\xea\x8c&\"a\xb9\x9c\xc0}\xb9)\xde\xee\xb6\xcf\xb7\x9bb\xaa\xd798\xf8\x14\x00J9\xaeu\xb2\xec\xe7\x18\x0d\xef\x15\x85\xc0\xe1\x0fXG>\xcd\x81s\xeas:\x97\xe2\xd8\xfeN\xa5I\xa9\x8f7\x88;\x9bL\xae\xaek\xee0\xd6\x8e\x06\xeb \xc7\x16\x039\xd2\x91\"6\xbc\xf7\x8eu\x83\xc3\xd9W8\xb6\xcaY\x9f\x0f\xd3}\xa6\xe3\x06\xae\x0e\xffL\xe2'\x00\x00\xff\xffPK\x07\x08Z}\x1a\x0e\xe4\x00\x00\x00E\x01\x00\x00PK\x03\x04\x14\x00\x08\x00\x08\x00\x9bX~T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x14\x00 \x00package-buildpack.shUT\x05\x00\x01V9Db\xbc\x93Qo\xd30\x14\x85\xdf\xfd+\xce\xbc\xa8j\x1fBy\x0e\x8aD\x81B\x0b\xebZ\xb5\x83\x97RMNr\x93ZK\xed\xc8v\xd0P\x95\xff\x8e\x92\xb4!\x9b4\x18 \xd1\x17\xd7\xb1\xcfwo\xce\xb9\xb9\xbc\x18\x97\xd6\x8c#\xa9\xc6\xa4\xbe!\x12v\xcf\x98%\x07\x9fJ\x8dB\x16\x94\n\x993\xc6V\x93\xb7\x9f&\x1f\xa6\xb7W\xf3\xcdM8\xf4N\xdb\xcd\x88]bz\xef\x8c\x88\x1dRi\xac\x83\xa1Bc\xf8N\xc7wd0+\xa3\x11\x84\x85\xdb\x13\x0eB*8\x8dB\xc4w\"#\x0c`(\x93\xd6\x919\xc3C\xef\xd8/\xb3}\xb9\xab\x18\x93)\xb6[p\xef\xb8\xfa\xfc\xe6j\xbe\x99\x05\xfe}\xc5\x11\x86\xe0\xce\x94\xc4\xb1\xdb\xbd\xaa\xf1\x8a\xa1!#*e\x9e4\xff\xce\x85\xbe2\x00\x0d\xa1\x85W\x81w\xfc2]o\xe6\xcb\xeb\x8a\x9fN}?\xd6*\x95Y}m\xb6\\L+>>\xc9_8}\xc8\xbb[E\x19\xe5\xb2\xf6\x08h\x1b\xf3\x15:\xda\xedb~\xbd\\\x07~\x85\xc1\xe0\xd1\xc1\xe4c{\xd0\xeb\x16\x88\x8dP\x04'\xb2'\x9b\xe3\x8f\xd8\x15\xff\x0ba]\xbb\x11\xa6\x92=G\x9b\x0bG\xd61\x80\xe2\xbd\x06\x0f\x02K\xce\xd7\xa5+J\x07%\x0e\x14&2#\xeb\x82\xc0\x1b\xb6\xb0v\xff\x14o\xc4k\xb7.\x11\xeb\xe2{\x9d\xbfv{2\xcd\x98X\xe9\xb4\x91da\x0b\x8ae*)\xa9\x9b\xd4\x06+H\xd5\xc3\xb5\xd3\xf0zwz\xfbD7K\x9b\x00\xb8\xb7\xe2\xb8\x08\xeb\xb5\xbd\xcd\xd1\xf7\xf8\xa7]M\xfd_\xf8\xb5z\xf0\xa4\x13\xff{\xcc\x0f\xba8\x1b\xff\xac\x9c\xffP\xd9\x05\xdd\xfe\x9a\xb8\x7fO\xe8\xe2\xeei\x12\xad\x881\xca-\xfd\x9f\xcf*\xd5\xe6 \x9a z\xbf\\/&7\x15g\xa9\xfc\x11\x00\x00\xff\xffPK\x07\x08J\xed3\xf2\xc0\x01\x00\x00\x9c\x04\x00\x00PK\x03\x04\x14\x00\x08\x00\x08\x00\xe4VKT\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x12\x00 \x00republish-image.shUT\x05\x00\x01\x8d@\x06btQ\xcdJ\xf3@\x14\xdd\xcfS\x9co>\x97\x0d\x01\xa1\x9b\x91.\xc4\x06\xe9\xc2\x16\xdaZ\x17*2\xed\xdc&\x17\xeb$d&\x8d\x8b>\xbc\x98\x98Q\x12\xb2\x0b\xe7\xef\xe6\x9c\xf9\xff/\xae\\\x19\xef\xd9\xc6d\xcf\xd8k\x97 \xe1\xc8#\xa2*G\xc1\x05\x1d5\x9f\x84\xe0#\x9e!\xaf6\xab\xc7\xf5]\"1\x9bAJ\xbc\xe2ri\xe0\xed\xed\xfa>\xd9\x0e\xe0V\xfd\xb6K\xd6\x9b\xc5j9\xe2\x1a\xa5\x97\xc9\xd3b\x1e\xd0\x1b\xf8\x8c\xac\x00\x00:d9\xe4\x03;\xc76\x85\xcb\xab\xf2@\x13x]\xa6\xe4'8S\xe98\xb7\xd0\xd6\xc4y K5\x1b%\xff\x18\xbf\xbf\xb0i\\\n]\xa3\x1e\xbfkC\x02\x1f~\xb2\x9f\xb3m\xae*t\x13\x8c\xe6\xf4\xca\xf6s\x96Tc1W\xf8i\xdd\xd2\x9f\xecq=\x9d\x8a#\x0bQ\x15F{\x8a\xf6\x15\x9fL\xa1\x0f\xef\x11\x7f\xe8\x94\"6xi\xc4Q\x0b\x84\xd5\xd5`\xfd\xa03\xbf\xe3vX7\xda\xf0Q:\x85\xa5:\\h5j\xd0\xe9+\x00\x00\xff\xffPK\x07\x08\xcd\x81\x9d\xa8\x08\x01\x00\x00M\x02\x00\x00PK\x03\x04\x14\x00\x08\x00\x08\x00\xceQ~T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x18\x00 \x00run-integration-tests.shUT\x05\x00\x01\x84-DbD\xc8\xc1\x0d\xc5 \x08\x00\xd0;S\xf0\xf3\xcf\xc2\x1c\x1dC\x1b\xaa$\x0d\x1a\xc0\xce\xdfc\xaf\xef\xff\xe3\x1d\xceM\x8d\xc5\x1el5\x06@Hb\x91=q\xe9\x92\xab\xea\x0d\xe0z\x8e>1%\x12\x89\xd5R\xba\xd7\xd4iLDX|\x1b\x1e\x1f\xc2\x1b\x00\x00\xff\xffPK\x07\x08t4b\x1aN\x00\x00\x00W\x00\x00\x00PK\x03\x04\x14\x00\x08\x00\x08\x00V}\x17S\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0c\x00 \x00run-tests.shUT\x05\x00\x01\xf4\xc1#a\x04\xc0A\x0e\x84 \x0c\x05\xd0}O\xf1'\xb3\xb6=\x13\x98\xaf41@h\xf1\xfc\xbe\xff\xcfv,\xab\xde\x8d\xfdE-\xd1D\x82\x89\x83{`\xfa\xe4U\xfc\x11Y~\xb6{ \x19 5U\x95/\x00\x00\xff\xffPK\x07\x08\xa4\xd5!O?\x00\x00\x00:\x00\x00\x00PK\x03\x04\x14\x00\x08\x00\x08\x00\xceQ~T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x11\x00 \x00run-unit-tests.shUT\x05\x00\x01\x84-Db\x04\xc0\xc1\x0d\xc5 \x08\x06\xe0;S\xfc/\xef,L\xd3\x01\xb4\xa1\x95\xa4A#\xd8\xf9\xfb\xfd\x7f\xb2cI3\x17\xf5\x17\xadF'\nM\x14\xdd\x03\xd3\xa6^\xd5\x1e\xa2eg\xbf\x07R#\xc1\xc2\xcc(k;\x0e\xb7\xa4/\x00\x00\xff\xffPK\x07\x08!\xdd\xeceF\x00\x00\x00D\x00\x00\x00PK\x03\x04\x14\x00\x08\x00\x08\x00\xe4VKT\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00 \x00 \x00update-build-image-dependency.shUT\x05\x00\x01\x8d@\x06b\x9c\x91Qk\xdb0\x14\x85\xdf\xf5+N5C\xe2\x0d9\xb4\x8f^\xb3\x91m\xee\x08d-4\xd0=\xccc(\xf6M\xac\xc4\x965IN)\x89\xff\xfbp\x92\x0d\x87\xd1\xc2\xf6\xaa\xc3w\xefwt_]\x8c\x1agG\x0b\xa5G\xa4\xb7XHW0\xe6\xc8CPS\xc3(CK\xa9J\xc6\xeef\x9f~<$\xf7\xf3\xe9\xdd\xed8\x18>\xad!\xfc\x1a\xd7X4\xaa\xcc\xc9F\xbe\xaeJ\xec\xb1\xfe a\xc1#\xe7e\xb6\x89R~\x88\x85\xaa\xe4\x8aR\x8e=2i|ci\x98\xf2`7\xfd2\xf9\x9c\xb4\xf1\xf0\xfd\xf5\x96\xacS\xb5~\x17\xbd\x11\xc1\xee\xe3l2\x9fOo\xa6\xc9}\x1b\xa6<\xc4\x1e\xd1)\xe7!\xbbM\xbe\xf6,2+5\xa1t\xf83\xad\xdb\xb1\xb2d\xc0\xa3\xd7\xe7\xb3\xba\xc4\xd5\xd6C<`\x0f/U \xa1q\x192\xd6\x98\\z\x12=U\x91\x93!\x9d\x93\xce\x9e\x902@\x88SMq\xa8y\xd6\xf9\x98\x9f\x0c;\x91\x9eb\xcb\x19[)\x0f\x99\xe7g\xd0\xe11+(\xdb\xd4\x8d\x87\x10\x88\x18SK|\x03\x0f\x86\x94\x155x\xd0\xfb\xee\xce\\>n n0\x88\x06\x18\xec\x8cU\xda#\xb8l\x07!\xc7\xc5\xb8G\xf5v\xbfL}\x7f\x0b_\x90f\xc0l\xf2!\x99\x8d\xb9\xa3jK6\xae\xe4\xba\xb6\x9cQ\xf9\xef:W\xff\xa5s\xf5\xb2\x8e\xd2G\x1dG\x7feF\xfa\xac\xe0l\xa9\x18;\xae\x8bcG^\xd4\x8d7\x8d\x87\x96\x15\x8d\xeb2\xff}\x998\x0ev\xbd\x12-\x7f\x16\xd2\xf4\xd8\x87\xce\xcf\xf9\x1ct\x02D)\x17Tv\xd8\xc1\xb5\xe5\xecW\x00\x00\x00\xff\xffPK\x07\x08t\x02$\xb3\x98\x01\x00\x00_\x03\x00\x00PK\x03\x04\x14\x00\x08\x00\x08\x00\xe4VKT\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1e\x00 \x00update-buildpack-dependency.shUT\x05\x00\x01\x8d@\x06b\x94\x92]o\xda0\x18\x85\xef\xfd+N\xbdH\xc0\x85\x83\x86\xd4^d\xcb\x05\x1bLCB-\xa2\xedn\xba\xaa2\xf1\xcbb\x08\x8e\x17;T\x15\xf0\xdf'>\xe5\xb1\xcf\xde\x9es\x9e\xf8q\xe47\x17\xed\xdaU\xed\x896m2KL\xa4\xcb\x19s\xe4!\xa8.a\xb5\xa5\xa9\xd4\x05c7\xc3\xde\xd3\x97\xfe\xf8vps\x9dF\xcd\x97\x19\x84\x9f\xe1=&\xb5.\x94\x95\xd9<\xf6\xe5\xa2\xc0\x1a\xb3\xef\x10\x158\x03\xe2\x05y\xa9\xa4\x97\xb1\"KF\x91\xc94\xb9\x87G\xac\x19\xe0\xa8\xa0\xcc7\x11k\x854\x05\x99e<\xe8\xa1\xf5s\xb7\xa4\xca\xe9\xd2`\x0dO\xce7w\xab\x83\xc3\xd3\xa8{w\xd7\x1f_\xa3u\x80\x8ec\xdeb\xac\xb6Jz\x12'7q\x12x\xc1W\x06\x88\xa0\xdai\x9f\xddb\xbf\xd1\n\xc8\x83g\xe1F\x8a0b<\xa4\xfc\x1bDX^;\x8e\xa4\n|\xbaI e)]b\x16;\xce\xf9\xf0\xcb\xe9\xd9pt\x88~\xdc!\xc7aK\xb8\xbc\x04\x9fB\xb4a1I\xf1\xe2k\xa0\x92u\x0c\xb3\xd9\x1bP\xd7\x94;\x00\xf9\x81\x8e{\xf3'\xf8\x1c|\x01S\x07\x00\xc0\xf7\xb1X\xdd\xc8\x84\xe7&\x80:?\xec\xcf;\xd40z\xf7\xfb\xe4tt>|\xff+\xa0\x8e\xbb\xbd\x01_\xdd\xc0\xa0\x16\xd7\xcb\x8f\x01t;\xb9\xd7\x1d\x04\xa9`k,\xb6p\x08\x9d\xc2M\xd7s\x96\xac\xce\x80\x8a\x7f\x17\xff\xf8S\x13\xbd\x8d\xf9T\xec\xe3O]\xcfq\x00\x96\x89(i\xc28t\\s\xbc\x86\xf2\x898KA\xf3\x88A\xa1\xad\xbc\x9c\x05\x1b\xc1`\x07\x0b\x9c\xaa\x8d\xa0.r\xdf\xf6\x83\xe7\xfd0\xf4\xde\xbao\x07l\x8dW\xf4(x\xee!O#6\x9f]\x07\xc0{\x03$1\xee\x17\x02s\n\xf4{\x9a\x08\xa5\xc3\x17\xc0\xef\x10\xf8\xb0\x03\x85\x05|_\x82\xaf\xc1F2\x897\x8a\xfa\x1c\xaf\xa9\xd4\xf0\xa5\x12,\xf5\x17\xc9:M8\xe5J\xc2\xff\xc1\xf7oYL\x16X\x10 (\\\xf0(\xdc\x83\x0d{a/\xac\xd6\x05r\x00H\xc2i5\xe3z\x1b\xafh#\xe3ZY\x8dmx<\xcet5\xf9\x82A\xf5\xc0\xce(-\xa0\x1b\x10\x9aRN(_0\xfa\x8f\x94j\x97\xc9\xa2\xf8\xefD\"\xfb\x06\x93e\x89n\xafYLa\xf2\xe1\xe2\x10\x04\xc5D\xeb\xe0\x13\xe8v\xe1\xc3\xe4t\\\xd0im\x9d'\x17\xe5c\xed\x8f:?t\xc4;\xd4\xd6=%\xf8\xcf\x0f\xe1\xb2\xd4\xff0\xebz\x961\x0c`\xe0.\x19\xaf\xb05\xd2\xd6\xe7\x9a\x9f\n\xc6\xd5\xff\xb2\xd1Q!\xf5\x04B\xc6\x04>\x8dO\xc7\xc3\x8b\xf1\xfc\xe3\xf0\xb7\xb1\xb6)\x7f[\xc3\xae\x0b\x92\xc6t\xa1\xdc\xf6\x9e\x0c4<]Dh\xfa\xb8\xd5\xd4\xed\x94\xc3x\x08<\x08Cs\xb4\xba\xde5\xf1\x8f4\xae\x933\x8d'\xd4\x0e~\x96\xea\xbb\xb3\xd1\x972U\xfd\x9dSu\x08]\x02#n\xe4\xf5\x1d\xc8iG%\x06\x8c\x18\x96\xbd\xded\xd4\xeb\xf5\xe1jZ\xdf\xbdB\xce\x1b's\xc3\x17\xf1\x86P2/\xf6\xf1\x8aJ\xed\x1a.\x1d\x00tppp\x00\x13k\x04\xef\xcaF}\xf4B[|\xd49\xdf\xc1D\xd7\xce\x1fTH\x96\xf0l\xa3\xef\xfb\xba\x05\xfb\xd9?\xf3g6\\\x88`\x072\x11j\x1em\xdd\x9a\xf0\xb0\x03,\x17\x8c\xcdIr\xcb\x17X\x9a|\xadq\xea\xa2i\xddT\xef\\UV5\xb3\xc6\xe2\xb7\x0c\x93w\x85<\xf0\x0c0\xe4\xcc,{\xa9t\xdd\xba\xb2\xc2\xf6b\x93\xeaaB \\\x98\xed\xbeE-\xcb\xa8\x19iG\xea\x1b\x04F\xe6fHB\x97x\x13\xaby1\x01\xb7s\x8bP\xba\xa4\x82c\x94Y\xc2\xa8\xb0\xcc\xf5\xcd\xa5\xbfO\xf3\x86\xd8\x1a\xa8J\xe6\x94+\xc1h\x85\xc3W\xbam'\xa1)|\xa5\xdbB\xd0o8\xde\xd0\x16F\xfbY\xde\xa0\xb0\xdf\xaa\x96\x8bE\x0d;\xb88\x19\xbe|\xf5\xbaV2\xe6\xaf\xf8UbR\x807\xc5\x12\x86\xf0`&\xa6\x15\xbb\xbc`\x8a\x8a\xb0\xdf\xf2\x1a\xbf|\xf5Zs\xabSK\x04\xa1b\xbe\x12\xc9&e|%\xdd$g7 Ta\x16\xcb\xa3\x0c\xf7@n\xd6z\x8a\x1c\x9d\xe9\x03p\x9c\x1f\x18\x84\xf9Ffg\x89$\x16\xdf\xa5\x19\xbf\x954\xc2\x0e\xceR\xc5\x12\x8ecc\\\xcb\xe9\xfe\x97o\xb7]\x08\x0c\xbe\xdc%\xa0\xbc\xf8\xf4\x08x\x01\xae\x9d\x0f\x05k\xbd\\Q\x01y/\xa0\x98\x9eAb\xa3\x1b\xbbL\x9fb\xe9J\x0f\xc1\x99\xbe\xc6\x13\xc6]\x04\xc8\xb3\xd5`D\x03\x98Y\x01\x07aU\x9e\xbd\xa0v\xda\xee\xa7\x8d\x9bZI\x19q\xd3|\x18g^z\xbd\x11[Q\xa9\xf4\x08\x1b<\xf3}\x18M\x8e\xc7\x17\x9f\xe1\xfct\xf8~|rf^\x86\xbe_U\xd6\xb2HK\x97\x98&\xd22\xe5\xaaf^\xcdE~3dCB\xbb\xb1\xe3\xa2\xb9\xd5vtM\x15&X\xe1\x00\xd9\xb6\xf7\xf3^7\x8f\x99\x87f\xc1\x13\x9d<\x1a\xb9\xdc\x9dY\xccR\xb7>j\xdf\xe6\xde4\x86vW\xef\x90\x86I\xddC51H\x17rc\xa2p*U9Y\xfb\xeb\xa8\xad\xef\xaa7\\~\x83G\xf7\\\x03\xf7\xb6\xa4\xb9L\xef\xa9\xa3\xa8\x99\xfc\xa8%\xe9\xd1\xcf$\xfb\x91\xc3\xad\x91\x1eLn\xab]\xdd]k2\xa3J\x12Q>t\x10z\xa0\xcbK/I\x9d\xb1f\xc3\x07\xd5\xf0\xb5\x82\xb8\xac\xbc?\xff\xfe3\xa1Q:\x81\xa7GV)\xb95\x1a\x9d\xf2\x0b\xcb\xd1\xc3m\x19c\xa5(/\xc6\xdc\x94#\xcf\xe9V^xQB\xb6\x8e\xb3\xba\x06\x9c2\xfbx[Su\x9d\x108\x1f~~\x7fb\x96P(h\x9a\xc8\xb0\x9f\xdcr*\xc2\xbe\xfe\n\x05\x8d)\x96T\x86\xfb\x97\xddd\xff\x00\\2\x1a\x13@\n\xaf\xe6\x9a\xe4\xe1\xde\xe8\xf3\xf0\xb8\xfc\xda-L\x8d\xd9/\x16\x97yx\xd6\x0c4\xd2\xbd\x81\xfeB\xce_\x01\x00\x00\xff\xffPK\x07\x08p\xe2\xc0a\x1a\x05\x00\x00\xb8\x10\x00\x00PK\x03\x04\x14\x00\x08\x00\x08\x00\xe4VKT\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1e\x00 \x00update-lifecycle-dependency.shUT\x05\x00\x01\x8d@\x06b\x94\x91Q\x8b\x131\x10\xc7\xdf\xe7S\xfc/.lKI\x16\xefq\xbd*\x8a'\x08\xc5\x03\x05_n\x0fIw\xa7nzi6f\x93\x1e\xa5\xedw\x17\xdbUz\x8az}\x0b\x99\xf9M~\xff\xcc\xb3\x8b\"\xf5\xa1\x98\x1bW\xb0[c\xae\xfb\x96\xa8\xe7\x08\xc9\xa9\x837\x9e\x17\xdaX\xa2\x9b\xd9\xdb/\x9f\xaf?~z\x7f\xf3a\x9a\x8d6K\xc8\xb8\xc4\x15\xe6\xc9\xd8\x86\x83\x8a\xdd\xcab\x87\xe57\xc8\x80\\Y\xb3\xe0zS[V)\x18\xecPk\x1fS\xe0\x91P\x93b=zu\xb5\xe6\xd0\x9b\xce\xbd\xbc\xad\xaa\xe6nRU\xea\xb7\xc3\xb8P\x131\xc6\x0ej\xe8\xcc\xc7D\xc97:\xb2\xfc5[6\xec\xd95\xec\xea\x0d*\x02\xa4\x1cl\xe4\xc1\xe6\x91\xda\xb1>\x0c\x83\xc8\xb6C\x96\xbd \xfaj\"t\xd3<\x02\x0e\x97u\xcb\xf5}\x97\"\xa4\x84\"2\x0b\xdcBd#\xae\xdb\x0e\";\xf9\x11\x81\x1d\xf4\xc3=\xe4;\xe4*G\xbe\xf5\xc1\xb8\x88\xec\xf9>\x1f\x0b\\LO\xa8'\x11w/\x10[v\x04\xcc^\xbf\xb9\x9eME\xcf\xab5\x87r\xa5\x97]\x10\xc4\xf6|\x95\xcb\xb3U.\xff\xadb\xdcQ\xa5\xe7?j^\xc7\xba\x15\xb40D\xc7\xa7\xca\xb2\xe7(\xbb\x14}\x8apz\xc5\xd3\xce6?\xb7Q\x96\xd9\xf6$\xc0^\xfc\x15r\xfcp\n\xfd\x1f\x18\x9a\xa5\xd5s\xb6?\x90\x83\xe7^\xd0\xf7\x00\x00\x00\xff\xffPK\x07\x08\xd2/:\xe4d\x01\x00\x00\xf6\x02\x00\x00PK\x03\x04\x14\x00\x08\x00\x08\x00V}\x17S\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0f\x00 \x00update-netrc.shUT\x05\x00\x01\xf4\xc1#a\x14\xcb1\xae\xc2 \x18\x07\xf0\x9dS\xfc\x1f\x8fU\xb9A\x93&\x92\xb8\xd4\x9a\xa2q\xa6\xf8)$\x15\x08\xb4:\x10\xeen<\xc0\xef\xffOn%\xcb\xd9\x07I\xe1\x8d\xd9\x14\xc7X\xa1\x15;\xda\"\x92O\xf40~a\x8c\xac\x8b\xe0/c\x9d\x0f\x04Q\x8f\xa3\xbe4,\xf1\xe9\x03D\xbdj5\x9d\xfaA5$S\xca'\xe6;D=\xf7Z\xdf\xc6\xe9\xd08\xba\x0e\xfcg\x06\xd5\xb8\xdc\x07Z\xb3e\xdf\x00\x00\x00\xff\xffPK\x07\x08\xab\xefq\n{\x00\x00\x00z\x00\x00\x00PK\x03\x04\x14\x00\x08\x00\x08\x00\xe4VKT\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1c\x00 \x00update-package-dependency.shUT\x05\x00\x01\x8d@\x06b\xbc\x93Qo\xda>\x14\xc5\xdf\xfd)N\xfd\x8f\x04\xfc'\xa7j\x1f\xb3\xb2i]\xb3i\x1a\xa2h\x93:M\x80*\x93\\\xc0\x10\x9c\xccv\xa8*\xc2w\x9f\x12`$\xea\xda\xad\x9b\xb4G|\xef\xf1\xf9\xf9\x1c\xf2\xdf\xc9in\xcd\xe9D\xe9S\xd2kL\xa4\x9d3f\xc9AP\x9e\"S\x19M\xa5J\x18\xeb\x87_no\xc2O\x9f?\\\xf7\xbb^;2R\x13\x12\x0b\xeem\xae\xc2A\xd8\xbf\n\xfbo\xbfn9\n\xcc\x0ce\x10k$\xd2\x91u(`S\xe3 nP\xc0I\x95@h\x9cu\x18SS\x0c\x87\x10\x84I\xae\x92\x98\x8c\xef\xd2U\x82\xf1\xf8%\xdc\x9c4\x03\xae{W5\xc3\xfb\x05\x84[\xe0\xa2\xb9^`\xf1\x0d\xc2\x80\xfb\xd5q&\xa3\xa5\x1d\x8e\xfd\xdc(\x14\x88d\xe6rC\xed\x11\xf7\xffoP\x06\xed\xd7\x17k2V\xa5\xfa\x95\xff\xa23\xe2\x1d\x14\xf0\xf7'\xbc\xc3\x18\x90g\xb1t$\xca\x0b\xe5\x8cDL\x19\xe9\x98tt\x8f\x11\x03\x00!\xf6\x1c\xa2\xe2h@\x1d6T\xfc \x9d\xc3h\xefU\xcek\xb9nyi=S\x0e2\x8e\x1bw\xb2\xa9\xaa%\xb6\xa7\xfa\xdd\xc4\x1a\xeb\xc7\xc4~\xbcI\xd1?\xcd\xac\x9c\xd7R+\x7f\xfe,\xb7\xcb\xc1\xed\xd1>\x10\xde\xb3s\xfc5\xceaT\xb97Rj\xa2\x0c>\xbe\xffK\x96F\xa7\xc7\x17\xd7=\xab\x8a\xcb\xbdhN\xd12\xcd\x1d\x84\x80\xbfk\x1d\xdckS4O\xc1\xbdZ\xc7\xe5\xc7&\xef\x96\x10\xef\xd0\xf2[hm2\xa3\xb4\x83w\xb6mu8N\xba5U\x0d\xe8i\xd5\xf1\xcf\xd4{s\x19\xf6\xba\xdc\xd2jM&X\xc9Ej8\xa3\xe4\xf98\xe7\x7f\x84s\xfe4\x8e\xd2;\x1cK\x0ff\x99t\xd1\x9cWq\xee\xec\x82\xc0\x92\x13i\xee\xb2\xdcA\xcb\x15u\xd3$>\xd4\x15\x04\xde\xa6\xf6\x88-\x7fT\xa4\xe9\xae.jv\xfc\x98h/\x10\x89\x9cPR\xca*\xd6-g\xdf\x03\x00\x00\xff\xffPK\x07\x08d\xb7\xc2\xd1\xe7\x01\x00\x00w\x05\x00\x00PK\x03\x04\x14\x00\x08\x00\x08\x00V}\x17S\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x12\x00 \x00update-pipeline.shUT\x05\x00\x01\xf4\xc1#a\x9c\x92_k\xdb0\x10\xc0\xdf\xefS\xdc4\x8f4\x0f\xb2\xf2\x9c\xe1AX<(\x848\xc4a\x7fhK\x91\xed\xb3\xad\xc6\x91%\xf2\x9a\xf2\xa3\xe9\x01\x00\x00\x81\x02\x00\x00\x11\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\xed\x81\xd6\x07\x00\x00create-package.shUT\x05\x00\x01\x8d@\x06bPK\x01\x02\x14\x03\x14\x00\x08\x00\x08\x00V}\x17Shy\x98\xea\x84\x00\x00\x00\xa7\x00\x00\x00\x1b\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\xed\x81\\ \x00\x00enable-pack-experimental.shUT\x05\x00\x01\xf4\xc1#aPK\x01\x02\x14\x03\x14\x00\x08\x00\x08\x00D\x80fT\x85\"\x0ei\xfb\x00\x00\x00h\x01\x00\x00\x10\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\xed\x812\n\x00\x00install-crane.shUT\x05\x00\x01\x00\xdb$bPK\x01\x02\x14\x03\x14\x00\x08\x00\x08\x00rsKT&\x95T\xcd}\x00\x00\x00\x89\x00\x00\x00\x19\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\xed\x81t\x0b\x00\x00install-create-package.shUT\x05\x00\x01Yr\x06bPK\x01\x02\x14\x03\x14\x00\x08\x00\x08\x00rsKT\xc6\xd7y\xcb~\x00\x00\x00\x89\x00\x00\x00\x0f\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\xed\x81A\x0c\x00\x00install-octo.shUT\x05\x00\x01Yr\x06bPK\x01\x02\x14\x03\x14\x00\x08\x00\x08\x00V}\x17S\xdbZX\xfe\xeb\x00\x00\x00O\x01\x00\x00\x0f\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\xed\x81\x05\x0d\x00\x00install-pack.shUT\x05\x00\x01\xf4\xc1#aPK\x01\x02\x14\x03\x14\x00\x08\x00\x08\x00V}\x17S-\xdb\xfd\x81\xf6\x00\x00\x00a\x01\x00\x00\x11\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\xed\x816\x0e\x00\x00install-richgo.shUT\x05\x00\x01\xf4\xc1#aPK\x01\x02\x14\x03\x14\x00\x08\x00\x08\x00rsKT\x80\xfd\xc2u\x86\x00\x00\x00\x98\x00\x00\x00(\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\xed\x81t\x0f\x00\x00install-update-build-image-dependency.shUT\x05\x00\x01Yr\x06bPK\x01\x02\x14\x03\x14\x00\x08\x00\x08\x00\x97}fTD\x9aU\x15\x83\x00\x00\x00\x96\x00\x00\x00&\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\xed\x81Y\x10\x00\x00install-update-buildpack-dependency.shUT\x05\x00\x01\xee\xd6$bPK\x01\x02\x14\x03\x14\x00\x08\x00\x08\x00rsKT\x81i\"\xe9\x86\x00\x00\x00\x9e\x00\x00\x00$\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\xed\x819\x11\x00\x00install-update-buildpack-image-id.shUT\x05\x00\x01Yr\x06bPK\x01\x02\x14\x03\x14\x00\x08\x00\x08\x00rsKT[\xf5\xeb\xb7\x86\x00\x00\x00\x96\x00\x00\x00&\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\xed\x81\x1a\x12\x00\x00install-update-lifecycle-dependency.shUT\x05\x00\x01Yr\x06bPK\x01\x02\x14\x03\x14\x00\x08\x00\x08\x00rsKT(\x19B-\x84\x00\x00\x00\x94\x00\x00\x00$\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\xed\x81\xfd\x12\x00\x00install-update-package-dependency.shUT\x05\x00\x01Yr\x06bPK\x01\x02\x14\x03\x14\x00\x08\x00\x08\x00V}\x17SZ}\x1a\x0e\xe4\x00\x00\x00E\x01\x00\x00\x0d\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\xed\x81\xdc\x13\x00\x00install-yj.shUT\x05\x00\x01\xf4\xc1#aPK\x01\x02\x14\x03\x14\x00\x08\x00\x08\x00\x9bX~TJ\xed3\xf2\xc0\x01\x00\x00\x9c\x04\x00\x00\x14\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\xed\x81\x04\x15\x00\x00package-buildpack.shUT\x05\x00\x01V9DbPK\x01\x02\x14\x03\x14\x00\x08\x00\x08\x00\xe4VKT\xcd\x81\x9d\xa8\x08\x01\x00\x00M\x02\x00\x00\x12\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\xed\x81\x0f\x17\x00\x00republish-image.shUT\x05\x00\x01\x8d@\x06bPK\x01\x02\x14\x03\x14\x00\x08\x00\x08\x00\xceQ~Tt4b\x1aN\x00\x00\x00W\x00\x00\x00\x18\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\xed\x81`\x18\x00\x00run-integration-tests.shUT\x05\x00\x01\x84-DbPK\x01\x02\x14\x03\x14\x00\x08\x00\x08\x00V}\x17S\xa4\xd5!O?\x00\x00\x00:\x00\x00\x00\x0c\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\xed\x81\xfd\x18\x00\x00run-tests.shUT\x05\x00\x01\xf4\xc1#aPK\x01\x02\x14\x03\x14\x00\x08\x00\x08\x00\xceQ~T!\xdd\xeceF\x00\x00\x00D\x00\x00\x00\x11\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\xed\x81\x7f\x19\x00\x00run-unit-tests.shUT\x05\x00\x01\x84-DbPK\x01\x02\x14\x03\x14\x00\x08\x00\x08\x00\xe4VKTt\x02$\xb3\x98\x01\x00\x00_\x03\x00\x00 \x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\xed\x81\x0d\x1a\x00\x00update-build-image-dependency.shUT\x05\x00\x01\x8d@\x06bPK\x01\x02\x14\x03\x14\x00\x08\x00\x08\x00\xe4VKT\xe8/\xa4\xeb\xb5\x01\x00\x00\x04\x04\x00\x00\x1e\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\xed\x81\xfc\x1b\x00\x00update-buildpack-dependency.shUT\x05\x00\x01\x8d@\x06bPK\x01\x02\x14\x03\x14\x00\x08\x00\x08\x00V}\x17Sp\xe2\xc0a\x1a\x05\x00\x00\xb8\x10\x00\x00!\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\xed\x81\x06\x1e\x00\x00update-draft-release-buildpack.shUT\x05\x00\x01\xf4\xc1#aPK\x01\x02\x14\x03\x14\x00\x08\x00\x08\x00\xe4VKT\xd2/:\xe4d\x01\x00\x00\xf6\x02\x00\x00\x1e\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\xed\x81x#\x00\x00update-lifecycle-dependency.shUT\x05\x00\x01\x8d@\x06bPK\x01\x02\x14\x03\x14\x00\x08\x00\x08\x00V}\x17S\xab\xefq\n{\x00\x00\x00z\x00\x00\x00\x0f\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\xa4\x811%\x00\x00update-netrc.shUT\x05\x00\x01\xf4\xc1#aPK\x01\x02\x14\x03\x14\x00\x08\x00\x08\x00\xe4VKTd\xb7\xc2\xd1\xe7\x01\x00\x00w\x05\x00\x00\x1c\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\xed\x81\xf2%\x00\x00update-package-dependency.shUT\x05\x00\x01\x8d@\x06bPK\x01\x02\x14\x03\x14\x00\x08\x00\x08\x00V}\x17S\xddd\x12\xe6\x98\x01\x00\x00%\x03\x00\x00\x12\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\xed\x81,(\x00\x00update-pipeline.shUT\x05\x00\x01\xf4\xc1#aPK\x01\x02\x14\x03\x14\x00\x08\x00\x08\x00V}\x17S\xbc\xfb5Z\x1e\x01\x00\x00{\x02\x00\x00\x18\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\xed\x81\x0d*\x00\x00update-release-digest.shUT\x05\x00\x01\xf4\xc1#aPK\x05\x06\x00\x00\x00\x00\x1f\x00\x1f\x00\x88 \x00\x00z+\x00\x00\x00\x00" + data := "PK\x03\x04\x14\x00\x08\x00\x08\x00\xe6\xa9TT\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1a\x00 \x00check-republish-version.shUT\x05\x00\x01a\xaf\x12bt\x92Ao\x1a?\x10\xc5\xef\xf3)\xde\xdf\xe1\x00\x7fi\xa1\xe9q#\x0e(\"\x88C\x9a\nhT)\x8a*\xb3\x0c\x8b\xc5\xd6^ymT\x89\xf8\xbbW\xde5\xc9\xd2\xaa7\xdb\xf3f\xfc\xfc{\xbe\xf9o\xe2\x1b;\xd9*=a}\xc2V6\x07\xa2\x86\x1d2\xf6\x06\xb5\xaay/UET\x18\xed\xa4\xd2\xcdp\x843\x01\x95)d\x85\xcdl1\x15\x83\xf3m\x10\x84v38of\x8b\x9bSxW,\x1fg\x8b\xf9:\x8a>\x07A\x04\xec\x8d\xed\x0e\xa14\x06\xe7\xae\x1e\xee\xb03\x04\x00j\x8f\x97\x17\x88vN\x10\x98N\xe3\xba\x15\x05\x81\xd7\xd7;\xb8\x03\xebV pq0\x10y\xbe\xe3\xad/\xf3\xfc\xc1x\xbdC\xeaL\x12\xcb\xce[\x8dO\xedv\xaf\x08\xd8\x19\xcd\xd1G\xaa\xdcR J&\x07\xc3\xc2J\xcd\xa8\x9a\xce\xc0j1\xdf\x041\"\x8a\x9e7\xb3E\xebxX*\x07'KdU\xb2\xf9\xe3\xebj\xfe\xb0\xfc\x1e\xfe\x17xCc\xacC\xf6\x8c\xccb\x94\x1e\xf5<_\xad\x97O_\x12\x9b\xeb\x1e\x11\xae\x04i\x15\x01R\xcb\xe2B=^\x95\x8aA\xbc#Y\x07\xd1\x03\xd2\xe1\xe8S\x18c}Tu\xadt9\x16\xd4'\xd6\xb0\xcb\x8cw\xb5w\xd0\xf2'O\x9b\xa3\xaa\xf3\xdcY\xcfI\xf7K9j\x81\xd1GSi\x8d\xaf\xf3\xfc\xfe\xc0\xc5Q\xe9\x12\xc6\xbb+\xda\x11L\x11\x8b\xb1\x90e\x18\xff}*>\xf4\x97\xa9\xacwip\xff\xf4O\x83N\xda\x92]\x9e\xf7(\x10\xb0\xb5,\x8f\xd4%\xda\xfd\xab\x94Q?\xc7\xf5\xd3\xb7\xd5}\xfc=o(-\xd7\xc8N\x10\x95t\xdc\xb8\xeb\xbc.q\xfd\x93\x91\xf1\xb6\xe0ha\xf9\x98\x9e\x10)\xb5\xb7\xff\x0e\x00\x00\xff\xffPK\x07\x08\xe6=dt\xb0\x01\x00\x00E\x03\x00\x00PK\x03\x04\x14\x00\x08\x00\x08\x00\x91\x99IT\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x18\x00 \x00checkout-next-version.shUT\x05\x00\x01#\x12\x04bd\x91O\x8f\xda0\x10\xc5\xef\xf3)^\xbd\x1c\xa0R\xa0\xdb\xa3W\x1cP\xc5F\x1c\xfaG\x80V\x95V\xab*$&X\xa4v\xe4?\xa8\x12\xf5w\xafl\xbcK\xe8\xdef\xe6\xbd\x99\xbc\xfc|\xf7a\xe6\xad\x99\xed\xa4\x9a u\xc2\xae\xb2\x07\"+\x1c\n\xe15z\xd9\x8b}%;\xa2Z+WIe\xc7\x13\x9c \xe8t]u\xd8.\xca9\x1b\x9d\xef\x03#\xa4ft\xde.\xca\xbbSxs\xac\xbe.\xca\xe5&\x9a>\x07F\x04\xec\xb5\xb9\x0c!\x15F\xe7\x8b\x1e\x1e\xd0h\x02\x00\xb9\xc7\xf33X\xba\x13\x18\xe6\xf3X'S`xyy\x80;\x08\x95\x9c\x80\xa8\x0f\x1a\x8c\xf3F\xec|\xcb\xf9\xa3\xf6\xaaA\xde\xcc\x16#\x9c7\n\x9fR\xbb\x97\x044Z\x89\x98#+\xf7\x14\x88r\xc8\xd1\xb86\x95\x12\xe8\xec%\xc0\xba\\n\x03\x9b\x10\xc5\xcc\xdbE\x99\x12\x8f[\xe9\xe0\xaa\x16E\x97c\xfe\xfa\xb1^>\xae~\x86\x8f\x0c\x7fa\xb5q(\x9eP\x18L\xf2O=-\xd7\x9b\xd5\xf7o\x99\xcd\xcdJ\xb8\x91s\x15\xf1Q\"\xf1\xca<~(\x8b\x81\xbd\x01\xd9\x046\xc0q\x811d0\xc5\xe6(\xfb^\xaav\xcah\xc8\xcb\nWh\xefz\xef\xa0\xaa\xdfbn\x8f\xb2\xe7\xdc\x19/\xb2\xef\x8ft\x94p\xd1u\xa95\xda\xf7\x9c\x7f9\x88\xfa(U\x0b\xed\xdd\x0d\xeb\x88\xa5\x8eb\x14\x8a\x02\xd3\xf7Sv\xf5\xbf^\x15\xaa\xc9\x87\x87\xd3\xff\x03\x9e\x84\xb1R+\xce\x07\x18(\xe7L\xef\xf9/\x00\x00\xff\xffPK\x07\x08\x9f\xa1C{}\x01\x00\x00\xc5\x02\x00\x00PK\x03\x04\x14\x00\x08\x00\x08\x00A~|T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x12\x00 \x00compute-version.shUT\x05\x00\x01*\xd9Ab\x9c\x91\xcfn\xd3@\x18\xc4\xef\xfb\x14\xc3b) ecZ\xa9\x07\x0cAr!\xc5AJ+%\x85\x8b\xb1\"\xa7\xf9\\/8^kwm\xfe\x98\xe5\xd9\x91\x93B\x9c\x0bT\x9c,\x8dgF\xbfo\xf6\xf1#\xbf6\xda_\xcb\xd2\xa7\xb2\xc1:59c\x86,\x04\xd5\n\x95\xac(Ke\xc1\x98\xcc\x10C|\x07\xf7\xda\xb7\xb3\x9b\xe8\xfd\xc5j1\xbd<1d\x1dG\xf2\x026\xa7\x92\x01t\x9b+\xf0\x83\x01]\x93U\x88\xfb)\xf1\xb2.\x0d\xd9W.y\x8aumarU\x17\x1b\x94\xd4\x90\xc6\x9a@\xdb\xca~\x83\xd2\xd8\xd9xW\xfbUZ\x9c\x9d\x9f\xb3L\xeeIb\xf4\x0b\x1d&?\xa1)3\xbeM\xef\x8c\xdf\x0c\xe3g\xe2yr\xf2q|\xfc\x1d!9\x90~\x98.\x96\xb3\xeb\xab\x89\xd7^\x84\xcbh\xb5\x98\xce\xc3\x9b\xd7Q|\x9a8\xc6\x80y\xf8\xeez\xb1\xfa\xed\xe1\xdep\x7f\x98\xd7\xdeK\x8e\xe3\x07\xd2/\x9f!.1\x18\x0f0h+-K\x0b\xef\x14n0\xea\x90\xe7\xb3\xab\xffm\xe0c\x0e\xefl_\xf4g\xd3 0d\x85\xaamU[\x94\xe9\x96&\x0di#U)\xb6\xe9'\xa5\x83\xc0k\x8f\xa0\x1d\x7fHT\x96\xf7\xd1>\xad\xe3\x8c\x8a\xbf\xad\x9cS\xba1\xfep\xfc\xe0E\xa90\xd4w\x0c\xef\xa4\x85\xa6FT\xa96\x04!L\xae\xb4E4\x0d\xdf\x8cvo\xfc\x0f\xf0\x0e\xb9\x07\xbb3/\xa9\xa0[K\x1b\x1c~!\xd3j\xcb\x80'\x1dvp|\xccN6y\xda\x93\x97Q\xe8\x18g\xbf\x02\x00\x00\xff\xffPK\x07\x08jI\xb5)\x85\x01\x00\x00\x12\x03\x00\x00PK\x03\x04\x14\x00\x08\x00\x08\x00}t\xaeR\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00 \x00create-action.shUT\x05\x00\x01\xcf\x8a\x9e`|\x8f=O\x84@\x10\x86\xfb\xf9\x15\xaf+-\xd2c(\xfc j\xe3]\xe0\xce\xe6\xbc\x82\x8f\x01&G\x96\x0d\xcb\xda\x10\xfe\xbb\x01Or1j\xb7\xd9yf\xde\xe7\xbd\xbe\n\x9c\xed\x83\\t\xc0\xfa\x03yf\x1b\"\xcb\x03|v\x1d\x8c\x18\xae2i\x89\xb8h:\xa80\xac\xfb\xce\x990\xbcw\xd2\x96\xa2kx\xe3\xee.y\x8awS\xe8\x8doq\x92\xbel^'E@\xd9\x15'\xee\x91\xcf\x1c\xde \x00|\xbf\x92\x96\x91\x15\x83t\xda\x06\x8f\x0b\xb1|}\xcf\x17\xda\xcf\xfa\x1a*\xdd\xec\x93\x878\xf2\xc6\xaf\xc7\xa4Vh\xc8j\xa8_c\xcf\xc8\xcd*\xcb\xba<\xfb*\"\xa9p8\xcc\x9b\xdb}\xfa<)D\x11\xd4\xd0;V8\x1eo14\xac \xf8Qs\xebl\xf3_\xcb\xb5\xa7q\xb6\xf9\xc3\xea\xe2\xea\xa5\x0f\xb7\x96\xd7Qz\x12c\xe6\xa0\xf9\x8e\xa2J\xe83\x00\x00\xff\xffPK\x07\x08_n\x1bS\xe6\x00\x00\x00\x98\x01\x00\x00PK\x03\x04\x14\x00\x08\x00\x08\x00Gx\xaeR\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x11\x00 \x00create-builder.shUT\x05\x00\x01\xf6\x90\x9e`\xac\x8e\xcdJ\x031\x18E\xf7y\x8ak\x9c\x85\"q\xf6\x117\xc5\x82\x03E\xa5\xa5nj\x17\x99\xf4\x9b\xce\x87i\x12&\x89\x08\xc3\xbc\xbb\x0c\xfe\xec\xdcuy9\x1c\xee\xb9\xbc\xa8K\x1a\xea\x96}M\xfe\x03\xadI\xbd\x10\x892\x14\x95\x80\xc8\x91:\xc3N\x08\xee\xb0\xdbAy\xc8j|\xd9.V\xcd\xe6\xf1\xe6s\x92\xd8\xef\xef\x90{\xf2\x02\x88\xc6\xbe\xa3-\xec\x0e4\xc0\x0ed2\xe1M\x00\x98\x9d\xc5\xb6Y=,\xd7\x93\xae\xc6\xd7\xe5z\xd3\x01\x00\x00\x81\x02\x00\x00PK\x03\x04\x14\x00\x08\x00\x08\x00}t\xaeR\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1b\x00 \x00enable-pack-experimental.shUT\x05\x00\x01\xcf\x8a\x9e`\\\xccO\xaa\xc20\x10\x80\xf1\xfd\x9cb^\x9e\xdb6'\xb0\xbb\x82\x1b\xf1\x0c\xd38i\x87&\x93\x90?\"\x88w\x17\xc1\x8d\xee\xbf\xdf\xf7\xffg{-v\x11\xb5\xac7\\\xa8n\x00\x95\x1b\x0e\xdc\x13f\xc9\xecI\x02\x00\xbb-\xa1\x99\x95\x96 \xbab&\xb7#\xdf3\x17\x89\xac\x8d\x02z\xa6\xd6\x0bW\x03\x10\xf7\xab\x14\x1c2\x9a\xc3\xe3t9\xcfOc\xc77\xf8L\xbe\xd8\x11[\xe9lp\x9a~k\xeb\x92zY\xc7\x96b\x80W\x00\x00\x00\xff\xffPK\x07\x08hy\x98\xea\x84\x00\x00\x00\xa7\x00\x00\x00PK\x03\x04\x14\x00\x08\x00\x08\x00}t\xaeR\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00 \x00install-crane.shUT\x05\x00\x01\xcf\x8a\x9e`l\x90AO\x021\x10\x85\xef\xfd\x15c\xe5Zz1\xc4x AB\x84D\xc1 z\"\xd9\x942v\x1bKg3\xed\xc2\n\xf2\xdf\xcd\xeaz!\x1e\xdf\x97\xbc\x97|\xef\xfaJ\xd7\x89\xf5\xc6G\x8dq\x0f\x1b\x93J!\x12fPX\x13T\xbe\xc2w\xe3\x83\x10hK\x029\x8b)\x9b\x10|t`\xd9D\x84\xdei\xbc\x1c\xcd'\xc5\xdbd\xf92[\xcc\xcfR\x88\xdd\xc7\xd63\xa8\nd\xef4]`\xcc]\x08dM\xf6\x14\x7f\xa2,s\xae\xd2\x9d\xd6\xce\xe7\xb2\xde\xf4-\xed\xb4#r\x01\xb5#e)f\xe3#2\xa3\xf3)\xf3\xa7f\x0ch\x12&\xbd\xa5C\x0cd\xb6z\x7f\xa9\xf2o\xb1x\xf4\xb1n\x8a\xe6vP\x0cn\xfa\xd9p\xdf\x1d%\xac\xc5\x17d\xc3\xa0\xc6\x17\x86\xaa9\xfe\x1e%\xbe\x03\x00\x00\xff\xffPK\x07\x08\x85\"\x0ei\xfb\x00\x00\x00h\x01\x00\x00PK\x03\x04\x14\x00\x08\x00\x08\x00}t\xaeR\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x19\x00 \x00install-create-package.shUT\x05\x00\x01\xcf\x8a\x9e`\x14\xca\xc1\x0e\x820\x0c\x00\xd0\xfb\xbe\xa2\xe2\xb96|\x007\x8d\x17\x0d'?\xa0\x1be4\x0c\xb6\xd0M\x7f\xdfp}y\xd7\x0b5;\xc8\xebN\xb2\x7f\xc1\xb3-\xce\x99T@i\x19\x8a\x16\x99Y\x93s\xcf\xb1\xef\xfb\xf7x\xff\xbc\x1eC\xde!f\x88gj\x80i\x9a\x13G\x1b:4\xc0_\x07Q\xeb\xd2\xfc-\xe4\x8d\n\xafR3\xfa\xa6i*\x1cV\xa3\xa4\xbe\xf0Ja\x9b(\x1c\xc2U\xf0t\x8e\xe2\xfe\x01\x00\x00\xff\xffPK\x07\x08&\x95T\xcd}\x00\x00\x00\x89\x00\x00\x00PK\x03\x04\x14\x00\x08\x00\x08\x00}t\xaeR\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0f\x00 \x00install-octo.shUT\x05\x00\x01\xcf\x8a\x9e`$\xcc?\xae\xc20\x0c\x80\xf1=\xa7\xf0\xeb\x9b\x83\xd5\x03t\x03\xb1\x80:q\x80\xfcqS\xabi\x1c\xd5 \\\x1fU\xac\x9f>\xfd\xfe\xff\xb0\xeb\x81\x9e\x0bRy\x83w\xba\x1a\xa3\xd4\xc0R\x17\xa8\\iq\x9c\x8d\xb9\xcf\xe38>\xe7\xeb\xebq\x9b\xa4@\x12H\xe7\xd4\xc1\xe6\xb8d\x97t\x1a\xac\x82\xfd\x0c\x90\xb8\xad\xdd_\x82\xecX\xddFM\xac\xef\x9ccuaS<\xc1\xcc\x85~\x8d\x0e\x0c{D M\xcc7\x00\x00\xff\xffPK\x07\x08\xc6\xd7y\xcb~\x00\x00\x00\x89\x00\x00\x00PK\x03\x04\x14\x00\x08\x00\x08\x00}t\xaeR\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0f\x00 \x00install-pack.shUT\x05\x00\x01\xcf\x8a\x9e`\\\x90\xcfk\xfa@\x10\xc5\xef\xfbW\xccw\xbf^\xd7\xbd\xf7 X\x91&\x94VimO\x82l\x92i28\xee\x86\xfd\xa1\xa2\xf5\x7f/\x1b\xd2C\xbd\x0c\xbc\x0f\xf3\x867\xef\xff?\x9d\x82\xd7\x15Y\x8d\xf6\x08\x95 \x9d\x10\x01#(L\x0ez\xea\xf1\xcb\x10\x0b\x81u\xe7@\x966D\xc3L\xb6\x85\xde\xd4{\x98\\\xd7\xf3\xc5\xf3\xees\xf9\xf6^\xae^oR\x88\xc3\xbe!\x0f\xaa\x079\xb9\x16\xab\x97\xe5M\xe6\xdb\xa3}D\x99H\x98\xcd2x*7\xc5\xc7\xe3n=\xdf\x14\xd9^'\xcf\xb0\x15\x00J\xb1\xabM$gG\x19:wR\xe8\xbd\xf3\xbf\x80\x18m\x1c\x84\xecb\xec\xc3\x83\xd6-\xc5.U\xd3\xda\x1dt\x95\x88\x9b\x1c2\xe8<\xb5GF\x130\xe8\xc6\x9d,;\xd3\xe8\xe3]\xfaaO\xddS\xc5d\xd3y\x1a\xdb\x8b\x84\xad\xf8\x86h<\xa8\xc5\xdf\xf7@\x9d/C!\xe2'\x00\x00\xff\xffPK\x07\x08\xdbZX\xfe\xeb\x00\x00\x00O\x01\x00\x00PK\x03\x04\x14\x00\x08\x00\x08\x00}t\xaeR\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x11\x00 \x00install-richgo.shUT\x05\x00\x01\xcf\x8a\x9e`d\x901O\xc30\x10\x85w\xff\x8a\xc3tu\xbc\xa0\n1T\x82\xaaj2@P)L\x95\"'1\xb1U\xc7\x17\x9d\x9d\xb6\xb4\xf4\xbf\xa3@\x18\xaa\x8e\xef\xbb\xbb\xa7w\xef\xf6F\xf6\x81di\xbd\xd4~\x07\xa5\n\x86\xb1\xa0#\x08\xdd#t\xb6\xd3\x9f\xca:\xc6te\x10x\xe6CT\xceY\xdf\x00\xd9\xca4\x08\x93\xd3*\x9b\xa7\xcb\xbc\xf8X\xac\xde\xb2\xfc\xe5\xcc\x19k\xb7\xb5%\x10\x1d\xf0\xc9)\xcd\x9f\x17g>\xf8\x8f\x16#\x1a\x08\x87\xd9l\x00\xcbl\x9d\xbe?\x15\xaf\x8f\xebt8\xafzr\xb0a\x00B8\xacT\xb4\xe8G\x19\x0c\xee\x85&B\xfa\x07\xd6i\x1f\x7f\x0571v\xe1A\xca\xc6F\xd3\x97I\x85\xad\xdc~\xa1\xb9\x9f\xca\xbf\xa8\x92\xb4\xd3*\xe8 k\xdc{\x87\xaa\x96\xbb\xab\xf4\xe3nq5(\x9c\xf5\xfd\xa1Pm=\xbdK\xa2\xa2\xa49r\xd8\xb0o\x88\x8a@\xcc/_\x05q8\x8e\x05\xb1\x9f\x00\x00\x00\xff\xffPK\x07\x08-\xdb\xfd\x81\xf6\x00\x00\x00a\x01\x00\x00PK\x03\x04\x14\x00\x08\x00\x08\x00}t\xaeR\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00(\x00 \x00install-update-build-image-dependency.shUT\x05\x00\x01\xcf\x8a\x9e`$\xca\xb1\x0e\xc2 \x10\x00\xd0\x9d\xaf8\xeb\x8c\x97~@7\x8d\x8b\xa6\x93\x1fp\xc0\x95^J\xe1\"\xa0\xf1\xef\x8dq~\xefx\xc0^\x9f\xe8$#\xe7\x178\xaa\xab1\x95\x1bX\xee\x05T\x94\x17\x92d\xccu\x1e\xc7\xf1>\x9f\x1f\xb7\xcbT2\xc4\x02\xf1\x97:\xd8\x14\x96D\xb1N\x83\xad`\xdf\x03Dikw'_vT\xda\xb8\x15\xeb\xba\xa4\xa0\xe4\xb7\x8aI\x9c\xd2\x86~\x0f\xd85P\xe3?Z\xd9)\xb2\x0d\xac\x9c\x03g\xff1\xdf\x00\x00\x00\xff\xffPK\x07\x08\x80\xfd\xc2u\x86\x00\x00\x00\x98\x00\x00\x00PK\x03\x04\x14\x00\x08\x00\x08\x00}t\xaeR\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00&\x00 \x00install-update-buildpack-dependency.shUT\x05\x00\x01\xcf\x8a\x9e`D\xca\xb1\x0e\xc2 \x10\x00\xd0\x9d\xaf8\xeb\x8c\x97~@7\x8d\x8b\xa6\x93\x1fp\xc0\x95\x92R\xb8\x08\xa7\xf1\xef\x8d\x93\xf3{\xc7\x03j{\xa2K\x05\xb9\xbc\xc0Q[\x8di\xdc\xc1\xb2V\x90$\xbcP\xca\xc6\\\xe7q\x1c\xef\xf3\xf9q\xbbL\xb5@\xac\x10\x7fI\xc1\xe6\xb0d\x8am\x1al\x03\xfb\x1e \xa6\xbe\xaa;\xf9\xba\xa3\xd0\xc6\xbdZ\xa7)\x07!\xbf5\xcc\xc9 m\xe8\xf7\x80*\x81:\xff\xd1\x06\x16.\x81\x8b\xff\x98o\x00\x00\x00\xff\xffPK\x07\x08D\x9aU\x15\x83\x00\x00\x00\x96\x00\x00\x00PK\x03\x04\x14\x00\x08\x00\x08\x00H\xa2hS\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00$\x00 \x00install-update-buildpack-image-id.shUT\x05\x00\x01 \x86\x89aD\xcc1\x0e\xc20\x0c@\xd1=\xa70e6V\x0f\xd0\x0d\xc4\x02\xea\xc4\x01\x9c\xc6M\xad\xa6I\xd4$p}T1\xb0~=\xfd\xf3\x89Z\xd9\xc9j$\x89o\xb0\\\x16c\x8aT@i \xb2f\x99Y\x831\xf7\xb1\xef\xfb\xe7x}=nC\x8a\xe0\x13\xf8\x035\xc0\xe0\xe6\xc0\xbe\x0c\x1d\x16\xc0O\x07^\xeb\xd2\xeceJ\x1be^\xa5&\xb4M\x83\xcb<\xad\x85\x8ea\xd0(\xbf&;M\x9b\xa3\x96\x1dW\xf93\xd4\x8d\xbd\xa0:\xf3\x0d\x00\x00\xff\xffPK\x07\x08\x81i\"\xe9\x86\x00\x00\x00\x9e\x00\x00\x00PK\x03\x04\x14\x00\x08\x00\x08\x00}t\xaeR\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00&\x00 \x00install-update-lifecycle-dependency.shUT\x05\x00\x01\xcf\x8a\x9e`\x14\xca\xb1\x0e\xc2 \x10\x00\xd0\x9d\xaf8\xeb\x8c\xa4\x1f\xd0M\xe3\xa2\xe9\xe4\x07\x1cp\xa5\x97^\xe1\"\xa0\xe9\xdf\x1b\xf7w>\xb9^\xdf\xcesv\x94?\xe0\xb1\xae\xc6Tj`\xa9\x17PVZ\x90\xc5\x98\xfb<\x8e\xe3s\xbe\xbe\x1e\xb7\xa9dH\x05\xd2\x1fu\xb0\x12\x17\xc1T\xa7\xc1V\xb0\xdf\x01\x12\xb7\xb5\xfbK(\xbbS\xdc\xa8\x15\xeb;KT\x0c[u\xc2^qsa\x8f\xaek\xc4FVx\xa1p\x04!\x1bI)G\xca\xe10\xbf\x00\x00\x00\xff\xffPK\x07\x08[\xf5\xeb\xb7\x86\x00\x00\x00\x96\x00\x00\x00PK\x03\x04\x14\x00\x08\x00\x08\x00}t\xaeR\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00$\x00 \x00install-update-package-dependency.shUT\x05\x00\x01\xcf\x8a\x9e`\x14\xca\xb1\x0e\xc2 \x10\x00\xd0\x9d\xaf8\xeb|^\xfa\x01\xdd4.\x9aN~\xc0\x01WJJ\xe1\"\xa0\xf1\xefM\xd7\x97w>Q\xafo\xb21\x93\xe4\x0fX\xae\xab1U\x1a\xa0\xf4\x02\x1aU\x16\x8e\xc9\x98\xfb<\x8e\xe3s\xbe\xbe\x1e\xb7\xa9d\x08\x05\xc2\x91:`\xf2K\xe2P\xa7\x01+\xe0w\x80\x10\xdb\xda\xed\xc5\x95\x9d\x947i\x05m\x8f\xc9+\xbb\xadR\x8aVy#\xb7{\xea\xea\xb9 \x1e\xceA\xd0\x8bJ\xf6\x92\xdd\xcf\xfc\x03\x00\x00\xff\xffPK\x07\x08(\x19B-\x84\x00\x00\x00\x94\x00\x00\x00PK\x03\x04\x14\x00\x08\x00\x08\x00}t\xaeR\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0d\x00 \x00install-yj.shUT\x05\x00\x01\xcf\x8a\x9e`d\x8fMK\xc3@\x10\x86\xef\xfb+\xc6\xb57Y\xe7\xee\xa1\xa0PL\x04\xadh\x15\x04\xa1l\x92\xb1\xbbq\xb3\x13\xf6#m(\xfd\xef\x12\x89\x87\xe2\xf1}\x86w\x9e\x99\xcb\x0b\xcc1`e=\x92\x1f\xa0\xd2\xd1\x08\x11)\x81\xa2\xcc\xd0\xdb\x9e\xbe\xb4uBPm\x18d\xe9c\xd2\xceY\xbf\x83\xb1\x85\xc5\xf1\xe3a\xfb\xbezy-\xd7O')D\xf7\xdd\xd8\x00\xaa\x07\xb98\x16\xeb\xc7\xd5IN{\xe7\xea\x8c&\"a\xb9\x9c\xc0}\xb9)\xde\xee\xb6\xcf\xb7\x9bb\xaa\xd798\xf8\x14\x00J9\xaeu\xb2\xec\xe7\x18\x0d\xef\x15\x85\xc0\xe1\x0fXG>\xcd\x81s\xeas:\x97\xe2\xd8\xfeN\xa5I\xa9\x8f7\x88;\x9bL\xae\xaek\xee0\xd6\x8e\x06\xeb \xc7\x16\x039\xd2\x91\"6\xbc\xf7\x8eu\x83\xc3\xd9W8\xb6\xcaY\x9f\x0f\xd3}\xa6\xe3\x06\xae\x0e\xffL\xe2'\x00\x00\xff\xffPK\x07\x08Z}\x1a\x0e\xe4\x00\x00\x00E\x01\x00\x00PK\x03\x04\x14\x00\x08\x00\x08\x00\xe9{\x88T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x14\x00 \x00package-buildpack.shUT\x05\x00\x01GUPb\xbc\x93Qo\xd30\x14\x85\xdf\xfd+\xce\xbc\xa8j\x1fBy\x0e\x8aD\x81B\x0b\xebZ\xb5\x83\x97RMNr\x93ZK\xed\xc8v\xd0P\x95\xff\x8e\x92\xb4!\x9b4\x18 \xd1\x17\xd7\xb1\xcfwo\xce\xb9\xb9\xbc\x18\x97\xd6\x8c#\xa9\xc6\xa4\xbe!\x12v\xcf\x98%\x07\x9fJ\x8dB\x16\x94\n\x993\xc6V\x93\xb7\x9f&\x1f\xa6\xb7W\xf3\xcdM8\xf4N\xdb\xcd\x88]bz\xef\x8c\x88\x1dRi\xac\x83\xa1Bc\xf8N\xc7wd0+\xa3\x11\x84\x85\xdb\x13\x0eB*8\x8dB\xc4w\"#\x0c`(\x93\xd6\x919\xc3C\xef\xd8/\xb3}\xb9\xab\x18\x93)\xb6[p\xef\xb8\xfa\xfc\xe6j\xbe\x99\x05\xfe}\xc5\x11\x86\xe0\xce\x94\xc4\xb1\xdb\xbd\xaa\xf1\x8a\xa1!#*e\x9e4\xff\xce\x85\xbe2\x00\x0d\xa1\x85W\x81w\xfc2]o\xe6\xcb\xeb\x8a\x9fN}?\xd6*\x95Y}m\xb6\\L+>>\xc9_8}\xc8\xbb[E\x19\xe5\xb2\xf6\x08h\x1b\xf3\x15:\xda\xedb~\xbd\\\x07~\x85\xc1\xe0\xd1\xc1\xe4c{\xd0\xeb\x16\x88\x8dP\x04'\xb2'\x9b\xe3\x8f\xd8\x15\xff\x0ba]\xbb\x11\xa6\x92=G\x9b\x0bG\xd61\x80\xe2\xbd\x06\x0f\x02K\xce\xd7\xa5+J\x07%\x0e\x14&2#\xeb\x82\xc0\x1b\xb6\xb0v\xff\x14o\xc4k\xb7.\x11\xeb\xe2{\x9d\xbfv{2\xcd\x98X\xe9\xb4\x91da\x0b\x8ae*)\xa9\x9b\xd4\x06+H\xd5\xc3\xb5\xd3\xf0zwz\xfbD7K\x9b\x00\xb8\xb7\xe2\xb8\x08\xeb\xb5\xbd\xcd\xd1\xf7\xf8\xa7]M\xfd_\xf8\xb5z\xf0\xa4\x13\xff{\xcc\x0f\xba8\x1b\xff\xac\x9c\xffP\xd9\x05\xdd\xfe\x9a\xb8\x7fO\xe8\xe2\xeei\x12\xad\x881\xca-\xfd\x9f\xcf*\xd5\xe6 \x9a z\xbf\\/&7\x15g\xa9\xfc\x11\x00\x00\xff\xffPK\x07\x08J\xed3\xf2\xc0\x01\x00\x00\x9c\x04\x00\x00PK\x03\x04\x14\x00\x08\x00\x08\x00\x1a\x80kS\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x12\x00 \x00republish-image.shUT\x05\x00\x014>\x8datQ\xcdJ\xf3@\x14\xdd\xcfS\x9co>\x97\x0d\x01\xa1\x9b\x91.\xc4\x06\xe9\xc2\x16\xdaZ\x17*2\xed\xdc&\x17\xeb$d&\x8d\x8b>\xbc\x98\x98Q\x12\xb2\x0b\xe7\xef\xe6\x9c\xf9\xff/\xae\\\x19\xef\xd9\xc6d\xcf\xd8k\x97 \xe1\xc8#\xa2*G\xc1\x05\x1d5\x9f\x84\xe0#\x9e!\xaf6\xab\xc7\xf5]\"1\x9bAJ\xbc\xe2ri\xe0\xed\xed\xfa>\xd9\x0e\xe0V\xfd\xb6K\xd6\x9b\xc5j9\xe2\x1a\xa5\x97\xc9\xd3b\x1e\xd0\x1b\xf8\x8c\xac\x00\x00:d9\xe4\x03;\xc76\x85\xcb\xab\xf2@\x13x]\xa6\xe4'8S\xe98\xb7\xd0\xd6\xc4y K5\x1b%\xff\x18\xbf\xbf\xb0i\\\n]\xa3\x1e\xbfkC\x02\x1f~\xb2\x9f\xb3m\xae*t\x13\x8c\xe6\xf4\xca\xf6s\x96Tc1W\xf8i\xdd\xd2\x9f\xecq=\x9d\x8a#\x0bQ\x15F{\x8a\xf6\x15\x9fL\xa1\x0f\xef\x11\x7f\xe8\x94\"6xi\xc4Q\x0b\x84\xd5\xd5`\xfd\xa03\xbf\xe3vX7\xda\xf0Q:\x85\xa5:\\h5j\xd0\xe9+\x00\x00\xff\xffPK\x07\x08\xcd\x81\x9d\xa8\x08\x01\x00\x00M\x02\x00\x00PK\x03\x04\x14\x00\x08\x00\x08\x00V\x18kT\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x18\x00 \x00run-integration-tests.shUT\x05\x00\x01\xd4\xbb*bD\xc8\xc1\x0d\xc5 \x08\x00\xd0;S\xf0\xf3\xcf\xc2\x1c\x1dC\x1b\xaa$\x0d\x1a\xc0\xce\xdfc\xaf\xef\xff\xe3\x1d\xceM\x8d\xc5\x1el5\x06@Hb\x91=q\xe9\x92\xab\xea\x0d\xe0z\x8e>1%\x12\x89\xd5R\xba\xd7\xd4iLDX|\x1b\x1e\x1f\xc2\x1b\x00\x00\xff\xffPK\x07\x08t4b\x1aN\x00\x00\x00W\x00\x00\x00PK\x03\x04\x14\x00\x08\x00\x08\x00}t\xaeR\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0c\x00 \x00run-tests.shUT\x05\x00\x01\xcf\x8a\x9e`\x04\xc0A\x0e\x84 \x0c\x05\xd0}O\xf1'\xb3\xb6=\x13\x98\xaf41@h\xf1\xfc\xbe\xff\xcfv,\xab\xde\x8d\xfdE-\xd1D\x82\x89\x83{`\xfa\xe4U\xfc\x11Y~\xb6{ \x19 5U\x95/\x00\x00\xff\xffPK\x07\x08\xa4\xd5!O?\x00\x00\x00:\x00\x00\x00PK\x03\x04\x14\x00\x08\x00\x08\x00V\x18kT\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x11\x00 \x00run-unit-tests.shUT\x05\x00\x01\xd4\xbb*b\x04\xc0\xc1\x0d\xc5 \x08\x06\xe0;S\xfc/\xef,L\xd3\x01\xb4\xa1\x95\xa4A#\xd8\xf9\xfb\xfd\x7f\xb2cI3\x17\xf5\x17\xadF'\nM\x14\xdd\x03\xd3\xa6^\xd5\x1e\xa2eg\xbf\x07R#\xc1\xc2\xcc(k;\x0e\xb7\xa4/\x00\x00\xff\xffPK\x07\x08!\xdd\xeceF\x00\x00\x00D\x00\x00\x00PK\x03\x04\x14\x00\x08\x00\x08\x00z\x8eZS\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00 \x00 \x00update-build-image-dependency.shUT\x05\x00\x019@xa\x9c\x91Qk\xdb0\x14\x85\xdf\xf5+N5C\xe2\x0d9\xb4\x8f^\xb3\x91m\xee\x08d-4\xd0=\xccc(\xf6M\xac\xc4\x965IN)\x89\xff\xfbp\x92\x0d\x87\xd1\xc2\xf6\xaa\xc3w\xefwt_]\x8c\x1agG\x0b\xa5G\xa4\xb7XHW0\xe6\xc8CPS\xc3(CK\xa9J\xc6\xeef\x9f~<$\xf7\xf3\xe9\xdd\xed8\x18>\xad!\xfc\x1a\xd7X4\xaa\xcc\xc9F\xbe\xaeJ\xec\xb1\xfe a\xc1#\xe7e\xb6\x89R~\x88\x85\xaa\xe4\x8aR\x8e=2i|ci\x98\xf2`7\xfd2\xf9\x9c\xb4\xf1\xf0\xfd\xf5\x96\xacS\xb5~\x17\xbd\x11\xc1\xee\xe3l2\x9fOo\xa6\xc9}\x1b\xa6<\xc4\x1e\xd1)\xe7!\xbbM\xbe\xf6,2+5\xa1t\xf83\xad\xdb\xb1\xb2d\xc0\xa3\xd7\xe7\xb3\xba\xc4\xd5\xd6C<`\x0f/U \xa1q\x192\xd6\x98\\z\x12=U\x91\x93!\x9d\x93\xce\x9e\x902@\x88SMq\xa8y\xd6\xf9\x98\x9f\x0c;\x91\x9eb\xcb\x19[)\x0f\x99\xe7g\xd0\xe11+(\xdb\xd4\x8d\x87\x10\x88\x18SK|\x03\x0f\x86\x94\x155x\xd0\xfb\xee\xce\\>n n0\x88\x06\x18\xec\x8cU\xda#\xb8l\x07!\xc7\xc5\xb8G\xf5v\xbfL}\x7f\x0b_\x90f\xc0l\xf2!\x99\x8d\xb9\xa3jK6\xae\xe4\xba\xb6\x9cQ\xf9\xef:W\xff\xa5s\xf5\xb2\x8e\xd2G\x1dG\x7feF\xfa\xac\xe0l\xa9\x18;\xae\x8bcG^\xd4\x8d7\x8d\x87\x96\x15\x8d\xeb2\xff}\x998\x0ev\xbd\x12-\x7f\x16\xd2\xf4\xd8\x87\xce\xcf\xf9\x1ct\x02D)\x17Tv\xd8\xc1\xb5\xe5\xecW\x00\x00\x00\xff\xffPK\x07\x08t\x02$\xb3\x98\x01\x00\x00_\x03\x00\x00PK\x03\x04\x14\x00\x08\x00\x08\x00\n\x95\x83S\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1e\x00 \x00update-buildpack-dependency.shUT\x05\x00\x01\x95d\xaaa\x94\x92]o\xda0\x18\x85\xef\xfd+N\xbdH\xc0\x85\x83\x86\xd4^d\xcb\x05\x1bLCB-\xa2\xedn\xba\xaa2\xf1\xcbb\x08\x8e\x17;T\x15\xf0\xdf'>\xe5\xb1\xcf\xde\x9es\x9e\xf8q\xe47\x17\xed\xdaU\xed\x896m2KL\xa4\xcb\x19s\xe4!\xa8.a\xb5\xa5\xa9\xd4\x05c7\xc3\xde\xd3\x97\xfe\xf8vps\x9dF\xcd\x97\x19\x84\x9f\xe1=&\xb5.\x94\x95\xd9<\xf6\xe5\xa2\xc0\x1a\xb3\xef\x10\x158\x03\xe2\x05y\xa9\xa4\x97\xb1\"KF\x91\xc94\xb9\x87G\xac\x19\xe0\xa8\xa0\xcc7\x11k\x854\x05\x99e<\xe8\xa1\xf5s\xb7\xa4\xca\xe9\xd2`\x0dO\xce7w\xab\x83\xc3\xd3\xa8{w\xd7\x1f_\xa3u\x80\x8ec\xdeb\xac\xb6Jz\x12'7q\x12x\xc1W\x06\x88\xa0\xdai\x9f\xddb\xbf\xd1\nTI\xfc\xf8}\x9f\xe7\xfde\xab\x07/\x82\xb5\x14A\xc8x@\xf97\x08\xb1\\:\x8e\xa4\n|\xba\x8e!a \x9dc\x169\x0e\x9d-c@-\xf3\x83\xfe\xe0\xe2rp\xdc\xbb\x1e\xf4\xc1\x87\xcf\x92\x02\x11x\xae|A#\x8a%\x05'~\x8f\xc0\x87-(,\xe0\xfb\x1c|M6\x94q\xb4V\xd4\xe7xE\xa5\xa6/\x95`\x89?\x8bWI\xcc)W\x12~\x05\xdf\xbfc\x11\x99aA$\xa0`\xc6\xc3`G6h\x05\xad\xa0\\\x17\xc8\x01 1\xa7\xe5\x8c\xebe\xbc\xa0{\x19\xd7\x91\xd5\xdcz'\x834\xae&_\xd0-o\xd8\x9aH\x0bh\xb6 M('\x94\xcf\x18\xfdW\x91\xaa\x0f\x93e\xf1\xff\x05\x89\xec\x1aL\x16Ct\xb7d\x11\x85\xe1\xc7\xabC\x10z>\xf8Bc\x9bM\xf88<\x1b\xe4rj[\xe7\xd9E\xf9T\xfb\xa3\xc6\x0f\xed\xf1\x1e\xd5uO\x81\xfe\xcbC\x18\x15\xfa\x1f&M\xcf*\x86.t\xdd9\xe3%\xb5&\xb4\xd5\xb9\xe6'\x82q\xf5K::J\xa2\x9e!\xc8@\xe0rp6\xe8]\x0d\xa6\x9fz\x7f\x0c4\xa6\xf8n\x81M\x17$\x8d\xe8L\xb9\xf5=\xd9\xd6\xf4t\x11\xa1\xf1\xd3\xa8\xb1\xdb(\xba\xf1\x10x\x10\x04fk\xf9{\xd3\xf8?\xd2\xbcN\xcf5\x9f@\x1b\xf8Y\xa9\x1f\xce\xfb_\x8aR\xf5{&\xd5!t\x0e\x8c\xb8\xa1\xd7q \x93\x1d\x16\x140bT\xb6Z\xc3~\xab\xd5\x81\x9bqu\xf5\x069\xef\x9c\xd4\x0c\x9fEkB\xc94_\xc7\x0b*\xb5i\x189\x00\xe8\xe0\xe0\xe0\x00\x86\x16\x04\x1f\x8a\xa0\x0ez\xa5\x11\x9ft\xce\xb70\xd4\xb5\xf3'\x15\x92\xc5<]\xe8\xf8\xben\xc1N\xfa\xc7\xfc\xcc\x82\x0b!lA\xc6BM\xc3\x8d[ =\xdb\xb1\xf5npi|\xf2O7z\x08N\xf41\x1e3\xee\"@\x9e\xad\x06\x134\x80\x89\x0d`7(\x87g\x17P;mw\xd3\xc6MlH\x19q\x93l\x18\xa7VZ\xad>[P\xa9\xf4\x08\xeb\xbe\xf0}\xe8\x0fO\x06W\xd7pq\xd6;\x1e\x9c\x9e\x9b\x9b\xa1\xef\x97#kU$\x85CL\x0b\xa9\x99re\x98W1\x91\x9d\x0c\xe9\x90\xd0f\xec\xb8\xd8_\xaa\xdb\xba\xa2\n\x13\xacp\x1b\xd9\xb6\xf7\xb3^7\x97\x99\xc7f\xc13\x8d<\xe9\xb9\xd8\x9d\xa9\xcfB\xb7>\x89\xaf3o\x1aC\x9b\xabv\xc8\x1e\xa4j\xa1\x9c\x18\xa4\x0byo\xa2p*U1Y\xbb\xe3\xa8\xae\xef\xca'\\v\x82\x87\x0f\x1c\x03\x0f\xb6\xa49L\x1f\xa8\xa3p?\xf9aM\xd2\xc3\x9fI\xf6\x13\x9bk==\x9a\xdcZ\\\xd5\\m2\xc3R\x12Q6t\x10z\xa4\xcb\x0b7I\x9d\xb1\xfd\x86o\x97\xddW\nbT\xba\x7f\xfe\xf3k\xc2^\xe9\xb4==\xb2\n\xc9\xad\xc8h\x14oX\x8e\x1en\xf3\x08+Ey>\xe6\xc6\x1cyN\xb3t\xc3\x0bc\xb2q\x9c\xc5\x12p\xc2\xec\xe5mE\xd52&p\xd1\xbb>>5\x9fP h\x12\xcb\xa0\x13\xdfq*\x82\x8e~\x0b\xec\xff\nd\xb0\xbb\xd9\x0dw\x17\xc09\xa3\x11\x01\xa4\xf0b\xaaE\x1e\xee@\xd7\xbd\x93\xe2m7\x87\x1a\xd8o\x96\x97\xb9xV\x00\x9a\xe9\x0e\xa0\xdf\x90\xf3w\x00\x00\x00\xff\xffPK\x07\x08\xfc\x7f\x86\xd0D\x05\x00\x00\xfd\x10\x00\x00PK\x03\x04\x14\x00\x08\x00\x08\x00z\x8eZS\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1e\x00 \x00update-lifecycle-dependency.shUT\x05\x00\x019@xa\x94\x91Q\x8b\x131\x10\xc7\xdf\xe7S\xfc/.lKI\x16\xefq\xbd*\x8a'\x08\xc5\x03\x05_n\x0fIw\xa7nzi6f\x93\x1e\xa5\xedw\x17\xdbUz\x8az}\x0b\x99\xf9M~\xff\xcc\xb3\x8b\"\xf5\xa1\x98\x1bW\xb0[c\xae\xfb\x96\xa8\xe7\x08\xc9\xa9\x837\x9e\x17\xdaX\xa2\x9b\xd9\xdb/\x9f\xaf?~z\x7f\xf3a\x9a\x8d6K\xc8\xb8\xc4\x15\xe6\xc9\xd8\x86\x83\x8a\xdd\xcab\x87\xe57\xc8\x80\\Y\xb3\xe0zS[V)\x18\xecPk\x1fS\xe0\x91P\x93b=zu\xb5\xe6\xd0\x9b\xce\xbd\xbc\xad\xaa\xe6nRU\xea\xb7\xc3\xb8P\x131\xc6\x0ej\xe8\xcc\xc7D\xc97:\xb2\xfc5[6\xec\xd95\xec\xea\x0d*\x02\xa4\x1cl\xe4\xc1\xe6\x91\xda\xb1>\x0c\x83\xc8\xb6C\x96\xbd \xfaj\"t\xd3<\x02\x0e\x97u\xcb\xf5}\x97\"\xa4\x84\"2\x0b\xdcBd#\xae\xdb\x0e\";\xf9\x11\x81\x1d\xf4\xc3=\xe4;\xe4*G\xbe\xf5\xc1\xb8\x88\xec\xf9>\x1f\x0b\\LO\xa8'\x11w/\x10[v\x04\xcc^\xbf\xb9\x9eME\xcf\xab5\x87r\xa5\x97]\x10\xc4\xf6|\x95\xcb\xb3U.\xff\xadb\xdcQ\xa5\xe7?j^\xc7\xba\x15\xb40D\xc7\xa7\xca\xb2\xe7(\xbb\x14}\x8apz\xc5\xd3\xce6?\xb7Q\x96\xd9\xf6$\xc0^\xfc\x15r\xfcp\n\xfd\x1f\x18\x9a\xa5\xd5s\xb6?\x90\x83\xe7^\xd0\xf7\x00\x00\x00\xff\xffPK\x07\x08\xd2/:\xe4d\x01\x00\x00\xf6\x02\x00\x00PK\x03\x04\x14\x00\x08\x00\x08\x00}t\xaeR\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0f\x00 \x00update-netrc.shUT\x05\x00\x01\xcf\x8a\x9e`\x14\xcb1\xae\xc2 \x18\x07\xf0\x9dS\xfc\x1f\x8fU\xb9A\x93&\x92\xb8\xd4\x9a\xa2q\xa6\xf8)$\x15\x08\xb4:\x10\xeen<\xc0\xef\xffOn%\xcb\xd9\x07I\xe1\x8d\xd9\x14\xc7X\xa1\x15;\xda\"\x92O\xf40~a\x8c\xac\x8b\xe0/c\x9d\x0f\x04Q\x8f\xa3\xbe4,\xf1\xe9\x03D\xbdj5\x9d\xfaA5$S\xca'\xe6;D=\xf7Z\xdf\xc6\xe9\xd08\xba\x0e\xfcg\x06\xd5\xb8\xdc\x07Z\xb3e\xdf\x00\x00\x00\xff\xffPK\x07\x08\xab\xefq\n{\x00\x00\x00z\x00\x00\x00PK\x03\x04\x14\x00\x08\x00\x08\x00z\x8eZS\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1c\x00 \x00update-package-dependency.shUT\x05\x00\x019@xa\xbc\x93Qo\xda>\x14\xc5\xdf\xfd)N\xfd\x8f\x04\xfc'\xa7j\x1f\xb3\xb2i]\xb3i\x1a\xa2h\x93:M\x80*\x93\\\xc0\x10\x9c\xccv\xa8*\xc2w\x9f\x12`$\xea\xda\xad\x9b\xb4G|\xef\xf1\xf9\xf9\x1c\xf2\xdf\xc9in\xcd\xe9D\xe9S\xd2kL\xa4\x9d3f\xc9AP\x9e\"S\x19M\xa5J\x18\xeb\x87_no\xc2O\x9f?\\\xf7\xbb^;2R\x13\x12\x0b\xeem\xae\xc2A\xd8\xbf\n\xfbo\xbfn9\n\xcc\x0ce\x10k$\xd2\x91u(`S\xe3 nP\xc0I\x95@h\x9cu\x18SS\x0c\x87\x10\x84I\xae\x92\x98\x8c\xef\xd2U\x82\xf1\xf8%\xdc\x9c4\x03\xae{W5\xc3\xfb\x05\x84[\xe0\xa2\xb9^`\xf1\x0d\xc2\x80\xfb\xd5q&\xa3\xa5\x1d\x8e\xfd\xdc(\x14\x88d\xe6rC\xed\x11\xf7\xffoP\x06\xed\xd7\x17k2V\xa5\xfa\x95\xff\xa23\xe2\x1d\x14\xf0\xf7'\xbc\xc3\x18\x90g\xb1t$\xca\x0b\xe5\x8cDL\x19\xe9\x98tt\x8f\x11\x03\x00!\xf6\x1c\xa2\xe2h@\x1d6T\xfc \x9d\xc3h\xefU\xcek\xb9nyi=S\x0e2\x8e\x1bw\xb2\xa9\xaa%\xb6\xa7\xfa\xdd\xc4\x1a\xeb\xc7\xc4~\xbcI\xd1?\xcd\xac\x9c\xd7R+\x7f\xfe,\xb7\xcb\xc1\xed\xd1>\x10\xde\xb3s\xfc5\xceaT\xb97Rj\xa2\x0c>\xbe\xffK\x96F\xa7\xc7\x17\xd7=\xab\x8a\xcb\xbdhN\xd12\xcd\x1d\x84\x80\xbfk\x1d\xdckS4O\xc1\xbdZ\xc7\xe5\xc7&\xef\x96\x10\xef\xd0\xf2[hm2\xa3\xb4\x83w\xb6mu8N\xba5U\x0d\xe8i\xd5\xf1\xcf\xd4{s\x19\xf6\xba\xdc\xd2jM&X\xc9Ej8\xa3\xe4\xf98\xe7\x7f\x84s\xfe4\x8e\xd2;\x1cK\x0ff\x99t\xd1\x9cWq\xee\xec\x82\xc0\x92\x13i\xee\xb2\xdcA\xcb\x15u\xd3$>\xd4\x15\x04\xde\xa6\xf6\x88-\x7fT\xa4\xe9\xae.jv\xfc\x98h/\x10\x89\x9cPR\xca*\xd6-g\xdf\x03\x00\x00\xff\xffPK\x07\x08d\xb7\xc2\xd1\xe7\x01\x00\x00w\x05\x00\x00PK\x03\x04\x14\x00\x08\x00\x08\x00}t\xaeR\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x12\x00 \x00update-pipeline.shUT\x05\x00\x01\xcf\x8a\x9e`\x9c\x92_k\xdb0\x10\xc0\xdf\xefS\xdc4\x8f4\x0f\xb2\xf2\x9c\xe1AX<(\x848\xc4a\x7fhK\x91\xed\xb3\xad\xc6\x91%\xf2\x9a\xf2\xa3\xe9\x01\x00\x00\x81\x02\x00\x00\x11\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\xed\x81\xd6\x07\x00\x00create-package.shUT\x05\x00\x01\x19\xa2\x02bPK\x01\x02\x14\x03\x14\x00\x08\x00\x08\x00}t\xaeRhy\x98\xea\x84\x00\x00\x00\xa7\x00\x00\x00\x1b\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\xed\x81\\ \x00\x00enable-pack-experimental.shUT\x05\x00\x01\xcf\x8a\x9e`PK\x01\x02\x14\x03\x14\x00\x08\x00\x08\x00}t\xaeR\x85\"\x0ei\xfb\x00\x00\x00h\x01\x00\x00\x10\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\xed\x812\n\x00\x00install-crane.shUT\x05\x00\x01\xcf\x8a\x9e`PK\x01\x02\x14\x03\x14\x00\x08\x00\x08\x00}t\xaeR&\x95T\xcd}\x00\x00\x00\x89\x00\x00\x00\x19\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\xed\x81t\x0b\x00\x00install-create-package.shUT\x05\x00\x01\xcf\x8a\x9e`PK\x01\x02\x14\x03\x14\x00\x08\x00\x08\x00}t\xaeR\xc6\xd7y\xcb~\x00\x00\x00\x89\x00\x00\x00\x0f\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\xed\x81A\x0c\x00\x00install-octo.shUT\x05\x00\x01\xcf\x8a\x9e`PK\x01\x02\x14\x03\x14\x00\x08\x00\x08\x00}t\xaeR\xdbZX\xfe\xeb\x00\x00\x00O\x01\x00\x00\x0f\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\xed\x81\x05\x0d\x00\x00install-pack.shUT\x05\x00\x01\xcf\x8a\x9e`PK\x01\x02\x14\x03\x14\x00\x08\x00\x08\x00}t\xaeR-\xdb\xfd\x81\xf6\x00\x00\x00a\x01\x00\x00\x11\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\xed\x816\x0e\x00\x00install-richgo.shUT\x05\x00\x01\xcf\x8a\x9e`PK\x01\x02\x14\x03\x14\x00\x08\x00\x08\x00}t\xaeR\x80\xfd\xc2u\x86\x00\x00\x00\x98\x00\x00\x00(\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\xed\x81t\x0f\x00\x00install-update-build-image-dependency.shUT\x05\x00\x01\xcf\x8a\x9e`PK\x01\x02\x14\x03\x14\x00\x08\x00\x08\x00}t\xaeRD\x9aU\x15\x83\x00\x00\x00\x96\x00\x00\x00&\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\xed\x81Y\x10\x00\x00install-update-buildpack-dependency.shUT\x05\x00\x01\xcf\x8a\x9e`PK\x01\x02\x14\x03\x14\x00\x08\x00\x08\x00H\xa2hS\x81i\"\xe9\x86\x00\x00\x00\x9e\x00\x00\x00$\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\xed\x819\x11\x00\x00install-update-buildpack-image-id.shUT\x05\x00\x01 \x86\x89aPK\x01\x02\x14\x03\x14\x00\x08\x00\x08\x00}t\xaeR[\xf5\xeb\xb7\x86\x00\x00\x00\x96\x00\x00\x00&\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\xed\x81\x1a\x12\x00\x00install-update-lifecycle-dependency.shUT\x05\x00\x01\xcf\x8a\x9e`PK\x01\x02\x14\x03\x14\x00\x08\x00\x08\x00}t\xaeR(\x19B-\x84\x00\x00\x00\x94\x00\x00\x00$\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\xed\x81\xfd\x12\x00\x00install-update-package-dependency.shUT\x05\x00\x01\xcf\x8a\x9e`PK\x01\x02\x14\x03\x14\x00\x08\x00\x08\x00}t\xaeRZ}\x1a\x0e\xe4\x00\x00\x00E\x01\x00\x00\x0d\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\xed\x81\xdc\x13\x00\x00install-yj.shUT\x05\x00\x01\xcf\x8a\x9e`PK\x01\x02\x14\x03\x14\x00\x08\x00\x08\x00\xe9{\x88TJ\xed3\xf2\xc0\x01\x00\x00\x9c\x04\x00\x00\x14\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\xed\x81\x04\x15\x00\x00package-buildpack.shUT\x05\x00\x01GUPbPK\x01\x02\x14\x03\x14\x00\x08\x00\x08\x00\x1a\x80kS\xcd\x81\x9d\xa8\x08\x01\x00\x00M\x02\x00\x00\x12\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\xed\x81\x0f\x17\x00\x00republish-image.shUT\x05\x00\x014>\x8daPK\x01\x02\x14\x03\x14\x00\x08\x00\x08\x00V\x18kTt4b\x1aN\x00\x00\x00W\x00\x00\x00\x18\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\xed\x81`\x18\x00\x00run-integration-tests.shUT\x05\x00\x01\xd4\xbb*bPK\x01\x02\x14\x03\x14\x00\x08\x00\x08\x00}t\xaeR\xa4\xd5!O?\x00\x00\x00:\x00\x00\x00\x0c\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\xed\x81\xfd\x18\x00\x00run-tests.shUT\x05\x00\x01\xcf\x8a\x9e`PK\x01\x02\x14\x03\x14\x00\x08\x00\x08\x00V\x18kT!\xdd\xeceF\x00\x00\x00D\x00\x00\x00\x11\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\xed\x81\x7f\x19\x00\x00run-unit-tests.shUT\x05\x00\x01\xd4\xbb*bPK\x01\x02\x14\x03\x14\x00\x08\x00\x08\x00z\x8eZSt\x02$\xb3\x98\x01\x00\x00_\x03\x00\x00 \x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\xed\x81\x0d\x1a\x00\x00update-build-image-dependency.shUT\x05\x00\x019@xaPK\x01\x02\x14\x03\x14\x00\x08\x00\x08\x00\n\x95\x83S\xe8/\xa4\xeb\xb5\x01\x00\x00\x04\x04\x00\x00\x1e\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\xed\x81\xfc\x1b\x00\x00update-buildpack-dependency.shUT\x05\x00\x01\x95d\xaaaPK\x01\x02\x14\x03\x14\x00\x08\x00\x08\x00\xad\x9d\x8dT\xfc\x7f\x86\xd0D\x05\x00\x00\xfd\x10\x00\x00!\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\xed\x81\x06\x1e\x00\x00update-draft-release-buildpack.shUT\x05\x00\x01W(WbPK\x01\x02\x14\x03\x14\x00\x08\x00\x08\x00z\x8eZS\xd2/:\xe4d\x01\x00\x00\xf6\x02\x00\x00\x1e\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\xed\x81\xa2#\x00\x00update-lifecycle-dependency.shUT\x05\x00\x019@xaPK\x01\x02\x14\x03\x14\x00\x08\x00\x08\x00}t\xaeR\xab\xefq\n{\x00\x00\x00z\x00\x00\x00\x0f\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\xa4\x81[%\x00\x00update-netrc.shUT\x05\x00\x01\xcf\x8a\x9e`PK\x01\x02\x14\x03\x14\x00\x08\x00\x08\x00z\x8eZSd\xb7\xc2\xd1\xe7\x01\x00\x00w\x05\x00\x00\x1c\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\xed\x81\x1c&\x00\x00update-package-dependency.shUT\x05\x00\x019@xaPK\x01\x02\x14\x03\x14\x00\x08\x00\x08\x00}t\xaeR\xddd\x12\xe6\x98\x01\x00\x00%\x03\x00\x00\x12\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\xed\x81V(\x00\x00update-pipeline.shUT\x05\x00\x01\xcf\x8a\x9e`PK\x01\x02\x14\x03\x14\x00\x08\x00\x08\x00}t\xaeR\xbc\xfb5Z\x1e\x01\x00\x00{\x02\x00\x00\x18\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\xed\x817*\x00\x00update-release-digest.shUT\x05\x00\x01\xcf\x8a\x9e`PK\x05\x06\x00\x00\x00\x00\x1f\x00\x1f\x00\x88 \x00\x00\xa4+\x00\x00\x00\x00" fs.Register(data) } \ No newline at end of file diff --git a/octo/update-draft-release-buildpack.sh b/octo/update-draft-release-buildpack.sh index 21e72095..c8279e7d 100755 --- a/octo/update-draft-release-buildpack.sh +++ b/octo/update-draft-release-buildpack.sh @@ -2,6 +2,8 @@ set -euo pipefail +echo "****** DEPRECATED - Use draft-release action instead *******" + PAYLOAD="{}" if [[ -e buildpack.toml ]]; then