diff --git a/.github/workflows/push-buildpackage.yml b/.github/workflows/push-buildpackage.yml index f96478e..dc8504c 100644 --- a/.github/workflows/push-buildpackage.yml +++ b/.github/workflows/push-buildpackage.yml @@ -39,16 +39,6 @@ jobs: exit 1 fi - - name: Push to GCR - env: - GCR_PUSH_BOT_JSON_KEY: ${{ secrets.GCR_PUSH_BOT_JSON_KEY }} - run: | - echo "${GCR_PUSH_BOT_JSON_KEY}" | sudo skopeo login --username _json_key --password-stdin gcr.io - sudo skopeo copy "oci-archive:${GITHUB_WORKSPACE}/buildpackage.cnb" "docker://gcr.io/${{ github.repository }}:${{ steps.event.outputs.tag_full }}" - sudo skopeo copy "oci-archive:${GITHUB_WORKSPACE}/buildpackage.cnb" "docker://gcr.io/${{ github.repository }}:${{ steps.event.outputs.tag_minor }}" - sudo skopeo copy "oci-archive:${GITHUB_WORKSPACE}/buildpackage.cnb" "docker://gcr.io/${{ github.repository }}:${{ steps.event.outputs.tag_major }}" - sudo skopeo copy "oci-archive:${GITHUB_WORKSPACE}/buildpackage.cnb" "docker://gcr.io/${{ github.repository }}:latest" - - name: Push to DockerHub id: push env: diff --git a/.github/workflows/test-pull-request.yml b/.github/workflows/test-pull-request.yml index 7e472bc..8e2ddbb 100644 --- a/.github/workflows/test-pull-request.yml +++ b/.github/workflows/test-pull-request.yml @@ -46,6 +46,19 @@ jobs: builder: ${{ fromJSON(needs.unit.outputs.builders) }} fail-fast: false # don't cancel all test jobs when one fails steps: + - name: Free Disk Space (Ubuntu) + uses: jlumbroso/free-disk-space@main + with: + # This might remove tools that are actually needed, + # if set to "true" but frees about 6 GB + tool-cache: false + # Default settings from documentation + android: true + dotnet: true + haskell: true + large-packages: true + docker-images: true + swap-storage: true - name: Setup Go uses: actions/setup-go@v3 with: diff --git a/REUSE.toml b/REUSE.toml index 5e350dc..0b874b3 100644 --- a/REUSE.toml +++ b/REUSE.toml @@ -24,7 +24,7 @@ SPDX-FileCopyrightText = "Copyright (c) 2013-Present CloudFoundry.org Foundation SPDX-License-Identifier = "Apache-2.0" [[annotations]] -path = "integration/**/integration.json" +path = "integration.json" precedence = "override" SPDX-FileCopyrightText = "Copyright (c) 2013-Present CloudFoundry.org Foundation, Inc. All Rights Reserved." SPDX-License-Identifier = "Apache-2.0" diff --git a/integration.json b/integration.json new file mode 100644 index 0000000..e332045 --- /dev/null +++ b/integration.json @@ -0,0 +1,12 @@ +{ + "builders": + [ + "index.docker.io/paketobuildpacks/builder:buildpackless-base", + "index.docker.io/paketobuildpacks/builder-jammy-buildpackless-base:latest", + "index.docker.io/jericop/amazonlinux-builder:base" + ], + + "build-plan": "github.com/paketo-community/build-plan", + "cpython": "github.com/paketo-buildpacks/cpython", + "pip": "github.com/paketo-buildpacks/pip" +} diff --git a/integration/helpers.go b/integration/helpers.go index d6708cd..1cb1978 100644 --- a/integration/helpers.go +++ b/integration/helpers.go @@ -5,37 +5,6 @@ package integration_helpers -import ( - "os" - "path/filepath" - - "github.com/ForestEckhardt/freezer" - "github.com/ForestEckhardt/freezer/github" - "github.com/paketo-buildpacks/occam" - "github.com/paketo-buildpacks/occam/packagers" -) - -func NewBuildpackStore(suffix string) occam.BuildpackStore { - gitToken := os.Getenv("GIT_TOKEN") - cacheManager := freezer.NewCacheManager(filepath.Join(os.Getenv("HOME"), ".freezer-cache", suffix)) - releaseService := github.NewReleaseService(github.NewConfig("https://api.github.com", gitToken)) - packager := packagers.NewJam() - namer := freezer.NewNameGenerator() - - return occam.NewBuildpackStore().WithLocalFetcher( - freezer.NewLocalFetcher( - &cacheManager, - packager, - namer, - )).WithRemoteFetcher( - freezer.NewRemoteFetcher( - &cacheManager, - releaseService, packager, - )).WithCacheManager( - &cacheManager, - ) -} - type Buildpack struct { ID string Name string @@ -55,6 +24,34 @@ type BuildpackInfo struct { Metadata Metadata } +type TestSettings struct { + Buildpacks struct { + // Dependency buildpacks + CPython struct { + Online string + Offline string + } + Pip struct { + Online string + Offline string + } + BuildPlan struct { + Online string + } + // This buildpack + PythonInstallers struct { + Online string + Offline string + } + } + + Config struct { + CPython string `json:"cpython"` + Pip string `json:"pip"` + BuildPlan string `json:"build-plan"` + } +} + func DependenciesForId(dependencies []Dependency, id string) []Dependency { output := []Dependency{} diff --git a/integration/installers/pip/init_test.go b/integration/installers/init_test.go similarity index 57% rename from integration/installers/pip/init_test.go rename to integration/installers/init_test.go index cc9a3e0..17e44cf 100644 --- a/integration/installers/pip/init_test.go +++ b/integration/installers/init_test.go @@ -28,77 +28,66 @@ var ( buildpackInfo integration_helpers.BuildpackInfo - settings struct { - Buildpacks struct { - CPython struct { - Online string - Offline string - } - Pip struct { - Online string - Offline string - } - BuildPlan struct { - Online string - } - } - - Config struct { - CPython string `json:"cpython"` - BuildPlan string `json:"build-plan"` - } - } + settings integration_helpers.TestSettings ) -func TestPipIntegration(t *testing.T) { +func TestIntegration(t *testing.T) { // Do not truncate Gomega matcher output // The buildpack output text can be large and we often want to see all of it. format.MaxLength = 0 Expect := NewWithT(t).Expect - file, err := os.Open("integration.json") + root, err := filepath.Abs("./../../") + Expect(err).NotTo(HaveOccurred()) + + file, err := os.Open(filepath.Join(root, "/integration.json")) Expect(err).NotTo(HaveOccurred()) - Expect(json.NewDecoder(file).Decode(&settings.Config)).To(Succeed()) + err = json.NewDecoder(file).Decode(&settings.Config) + Expect(err).NotTo(HaveOccurred()) Expect(file.Close()).To(Succeed()) - file, err = os.Open("./../../../buildpack.toml") + file, err = os.Open(filepath.Join(root, "buildpack.toml")) Expect(err).NotTo(HaveOccurred()) _, err = toml.NewDecoder(file).Decode(&buildpackInfo) Expect(err).NotTo(HaveOccurred()) Expect(file.Close()).To(Succeed()) - buildpackInfo.Metadata.Dependencies = integration_helpers.DependenciesForId(buildpackInfo.Metadata.Dependencies, "pip") + buildpackStore := occam.NewBuildpackStore() - root, err := filepath.Abs("./../../..") - Expect(err).ToNot(HaveOccurred()) + settings.Buildpacks.BuildPlan.Online, err = buildpackStore.Get. + Execute(settings.Config.BuildPlan) + Expect(err).NotTo(HaveOccurred()) + + settings.Buildpacks.CPython.Online, err = buildpackStore.Get. + Execute(settings.Config.CPython) + Expect(err).NotTo(HaveOccurred()) - buildpackStore := integration_helpers.NewBuildpackStore("pip") + settings.Buildpacks.CPython.Offline, err = buildpackStore.Get. + WithOfflineDependencies(). + Execute(settings.Config.CPython) + Expect(err).NotTo(HaveOccurred()) settings.Buildpacks.Pip.Online, err = buildpackStore.Get. - WithVersion("1.2.3"). - Execute(root) + Execute(settings.Config.Pip) Expect(err).NotTo(HaveOccurred()) settings.Buildpacks.Pip.Offline, err = buildpackStore.Get. - WithVersion("1.2.3"). WithOfflineDependencies(). - Execute(root) + Execute(settings.Config.Pip) Expect(err).NotTo(HaveOccurred()) - settings.Buildpacks.CPython.Online, err = buildpackStore.Get. - Execute(settings.Config.CPython) + settings.Buildpacks.PythonInstallers.Online, err = buildpackStore.Get. + WithVersion("1.2.3"). + Execute(root) Expect(err).NotTo(HaveOccurred()) - settings.Buildpacks.CPython.Offline, err = buildpackStore.Get. + settings.Buildpacks.PythonInstallers.Offline, err = buildpackStore.Get. + WithVersion("1.2.3"). WithOfflineDependencies(). - Execute(settings.Config.CPython) - Expect(err).NotTo(HaveOccurred()) - - settings.Buildpacks.BuildPlan.Online, err = buildpackStore.Get. - Execute(settings.Config.BuildPlan) + Execute(root) Expect(err).NotTo(HaveOccurred()) pack := occam.NewPack().WithVerbose() @@ -107,11 +96,30 @@ func TestPipIntegration(t *testing.T) { SetDefaultEventuallyTimeout(30 * time.Second) - suite := spec.New("Integration", spec.Report(report.Terminal{})) - suite("Default", testDefault, spec.Parallel()) - suite("LayerReuse", testLayerReuse, spec.Parallel()) + suite := spec.New("Integration", spec.Report(report.Terminal{}), spec.Parallel()) + + // miniconda + suite("Miniconda Default", minicondaTestDefault) + suite("Miniconda Logging", minicondaTestLogging) + suite("Miniconda LayerReuse", minicondaTestReusingLayerRebuild) + suite("Miniconda TestOffline", minicondaTestOffline) + + // pip + suite("Pip Default", pipTestDefault, spec.Parallel()) + suite("Pip LayerReuse", pipTestLayerReuse, spec.Parallel()) if strings.Contains(builder.LocalInfo.Stack.ID, "jammy") || strings.Contains(builder.LocalInfo.Stack.ID, "bionic") { - suite("Offline", testOffline, spec.Parallel()) + suite("Pip Offline", pipTestOffline, spec.Parallel()) } + + // pipenv + suite("Pipenv Default", pipenvTestDefault, spec.Parallel()) + suite("Pipenv LayerReuse", pipenvTestLayerReuse, spec.Parallel()) + suite("Pipenv Version", pipenvTestVersions, spec.Parallel()) + + // poetry + suite("Poetry Default", poetryTestDefault, spec.Parallel()) + suite("Poetry LayerReuse", poetryTestLayerReuse, spec.Parallel()) + suite("Poetry Versions", poetryTestVersions, spec.Parallel()) + suite.Run(t) } diff --git a/integration/installers/miniconda/init_test.go b/integration/installers/miniconda/init_test.go deleted file mode 100644 index 42e6c5c..0000000 --- a/integration/installers/miniconda/init_test.go +++ /dev/null @@ -1,91 +0,0 @@ -// SPDX-FileCopyrightText: Copyright (c) 2013-Present CloudFoundry.org Foundation, Inc. All Rights Reserved. -// -// SPDX-License-Identifier: Apache-2.0 - -package integration_test - -import ( - "encoding/json" - "os" - "path/filepath" - "testing" - "time" - - "github.com/BurntSushi/toml" - "github.com/sclevine/spec" - "github.com/sclevine/spec/report" - - . "github.com/onsi/gomega" - "github.com/onsi/gomega/format" - - integration_helpers "github.com/paketo-buildpacks/python-installers/integration" -) - -var settings struct { - Buildpacks struct { - BuildPlan struct { - Online string - } - Miniconda struct { - Online string - Offline string - } - } - Buildpack struct { - ID string - Name string - } - Config struct { - BuildPlan string `json:"build-plan"` - } -} - -func TestMinicondaIntegration(t *testing.T) { - // Do not truncate Gomega matcher output - // The buildpack output text can be large and we often want to see all of it. - format.MaxLength = 0 - - Expect := NewWithT(t).Expect - - file, err := os.Open("integration.json") - Expect(err).NotTo(HaveOccurred()) - - Expect(json.NewDecoder(file).Decode(&settings.Config)).To(Succeed()) - Expect(file.Close()).To(Succeed()) - - file, err = os.Open("./../../../buildpack.toml") - Expect(err).NotTo(HaveOccurred()) - - _, err = toml.NewDecoder(file).Decode(&settings) - Expect(err).NotTo(HaveOccurred()) - Expect(file.Close()).To(Succeed()) - - root, err := filepath.Abs("./../../..") - Expect(err).ToNot(HaveOccurred()) - - buildpackStore := integration_helpers.NewBuildpackStore("Miniconda") - - settings.Buildpacks.Miniconda.Online, err = buildpackStore.Get. - WithVersion("1.2.3"). - Execute(root) - Expect(err).ToNot(HaveOccurred()) - - settings.Buildpacks.Miniconda.Offline, err = buildpackStore.Get. - WithVersion("1.2.3"). - WithOfflineDependencies(). - Execute(root) - Expect(err).ToNot(HaveOccurred()) - - settings.Buildpacks.BuildPlan.Online, err = buildpackStore.Get. - Execute(settings.Config.BuildPlan) - Expect(err).ToNot(HaveOccurred()) - - SetDefaultEventuallyTimeout(30 * time.Second) - - suite := spec.New("Integration", spec.Report(report.Terminal{}), spec.Parallel()) - suite("Default", testDefault) - suite("Logging", testLogging) - suite("LayerReuse", testReusingLayerRebuild) - suite("TestOffline", testOffline) - suite.Run(t) -} diff --git a/integration/installers/miniconda/integration.json b/integration/installers/miniconda/integration.json deleted file mode 100644 index 5ef6078..0000000 --- a/integration/installers/miniconda/integration.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "builders": [ - "index.docker.io/paketobuildpacks/builder:buildpackless-base", - "index.docker.io/paketobuildpacks/builder-jammy-buildpackless-base:latest", - "index.docker.io/jericop/amazonlinux-builder:base" - ], - "build-plan": "github.com/paketo-community/build-plan" -} diff --git a/integration/installers/miniconda/default_test.go b/integration/installers/miniconda_default_test.go similarity index 85% rename from integration/installers/miniconda/default_test.go rename to integration/installers/miniconda_default_test.go index 8e29edb..63730b0 100644 --- a/integration/installers/miniconda/default_test.go +++ b/integration/installers/miniconda_default_test.go @@ -18,7 +18,7 @@ import ( . "github.com/paketo-buildpacks/occam/matchers" ) -func testDefault(t *testing.T, context spec.G, it spec.S) { +func minicondaTestDefault(t *testing.T, context spec.G, it spec.S) { var ( Expect = NewWithT(t).Expect Eventually = NewWithT(t).Eventually @@ -46,7 +46,7 @@ func testDefault(t *testing.T, context spec.G, it spec.S) { name, err = occam.RandomName() Expect(err).NotTo(HaveOccurred()) - source, err = occam.Source(filepath.Join("testdata", "default_app")) + source, err = occam.Source(filepath.Join("testdata", "miniconda_app")) Expect(err).NotTo(HaveOccurred()) }) @@ -64,10 +64,11 @@ func testDefault(t *testing.T, context spec.G, it spec.S) { err error ) + fmt.Printf("Settings are: %s", settings) image, logs, err = pack.WithNoColor().Build. WithPullPolicy("never"). WithBuildpacks( - settings.Buildpacks.Miniconda.Online, + settings.Buildpacks.PythonInstallers.Online, settings.Buildpacks.BuildPlan.Online, ). Execute(name, source) @@ -109,13 +110,13 @@ func testDefault(t *testing.T, context spec.G, it spec.S) { var err error var logs fmt.Stringer - source, err = occam.Source(filepath.Join("testdata", "default_app")) + source, err = occam.Source(filepath.Join("testdata", "miniconda_app")) Expect(err).NotTo(HaveOccurred()) image, logs, err = pack.WithNoColor().Build. WithPullPolicy("never"). WithBuildpacks( - settings.Buildpacks.Miniconda.Online, + settings.Buildpacks.PythonInstallers.Online, settings.Buildpacks.BuildPlan.Online, ). WithEnv(map[string]string{ @@ -139,7 +140,7 @@ func testDefault(t *testing.T, context spec.G, it spec.S) { }).Should(MatchRegexp(`conda version : \d+\.\d+\.\d+`)) Expect(logs).To(ContainLines( - fmt.Sprintf(" Generating SBOM for /layers/%s/conda", strings.ReplaceAll(settings.Buildpack.ID, "/", "_")), + fmt.Sprintf(" Generating SBOM for /layers/%s/conda", strings.ReplaceAll(buildpackInfo.Buildpack.ID, "/", "_")), MatchRegexp(` Completed in \d+(\.?\d+)*`), )) Expect(logs).To(ContainLines( @@ -162,12 +163,12 @@ func testDefault(t *testing.T, context spec.G, it spec.S) { }).Should(ContainSubstring(`"name":"Miniconda.sh"`)) // check that all required SBOM files are present - Expect(filepath.Join(sbomDir, "sbom", "launch", strings.ReplaceAll(settings.Buildpack.ID, "/", "_"), "conda", "sbom.cdx.json")).To(BeARegularFile()) - Expect(filepath.Join(sbomDir, "sbom", "launch", strings.ReplaceAll(settings.Buildpack.ID, "/", "_"), "conda", "sbom.spdx.json")).To(BeARegularFile()) - Expect(filepath.Join(sbomDir, "sbom", "launch", strings.ReplaceAll(settings.Buildpack.ID, "/", "_"), "conda", "sbom.syft.json")).To(BeARegularFile()) + Expect(filepath.Join(sbomDir, "sbom", "launch", strings.ReplaceAll(buildpackInfo.Buildpack.ID, "/", "_"), "conda", "sbom.cdx.json")).To(BeARegularFile()) + Expect(filepath.Join(sbomDir, "sbom", "launch", strings.ReplaceAll(buildpackInfo.Buildpack.ID, "/", "_"), "conda", "sbom.spdx.json")).To(BeARegularFile()) + Expect(filepath.Join(sbomDir, "sbom", "launch", strings.ReplaceAll(buildpackInfo.Buildpack.ID, "/", "_"), "conda", "sbom.syft.json")).To(BeARegularFile()) // check an SBOM file to make sure it has an entry for cpython - contents, err := os.ReadFile(filepath.Join(sbomDir, "sbom", "launch", strings.ReplaceAll(settings.Buildpack.ID, "/", "_"), "conda", "sbom.cdx.json")) + contents, err := os.ReadFile(filepath.Join(sbomDir, "sbom", "launch", strings.ReplaceAll(buildpackInfo.Buildpack.ID, "/", "_"), "conda", "sbom.cdx.json")) Expect(err).NotTo(HaveOccurred()) Expect(string(contents)).To(ContainSubstring(`"name": "Miniconda.sh"`)) }) diff --git a/integration/installers/miniconda/logging_test.go b/integration/installers/miniconda_logging_test.go similarity index 85% rename from integration/installers/miniconda/logging_test.go rename to integration/installers/miniconda_logging_test.go index 42d3e2a..3733739 100644 --- a/integration/installers/miniconda/logging_test.go +++ b/integration/installers/miniconda_logging_test.go @@ -17,7 +17,7 @@ import ( . "github.com/paketo-buildpacks/occam/matchers" ) -func testLogging(t *testing.T, context spec.G, it spec.S) { +func minicondaTestLogging(t *testing.T, context spec.G, it spec.S) { var ( Expect = NewWithT(t).Expect @@ -43,7 +43,7 @@ func testLogging(t *testing.T, context spec.G, it spec.S) { name, err = occam.RandomName() Expect(err).NotTo(HaveOccurred()) - source, err = occam.Source(filepath.Join("testdata", "default_app")) + source, err = occam.Source(filepath.Join("testdata", "miniconda_app")) Expect(err).NotTo(HaveOccurred()) }) @@ -63,14 +63,14 @@ func testLogging(t *testing.T, context spec.G, it spec.S) { image, logs, err = pack.WithNoColor().Build. WithPullPolicy("never"). WithBuildpacks( - settings.Buildpacks.Miniconda.Online, + settings.Buildpacks.PythonInstallers.Online, settings.Buildpacks.BuildPlan.Online, ). Execute(name, source) Expect(err).ToNot(HaveOccurred(), logs.String) Expect(logs).To(ContainLines( - MatchRegexp(fmt.Sprintf(`%s \d+\.\d+\.\d+`, settings.Buildpack.Name)), + MatchRegexp(fmt.Sprintf(`%s \d+\.\d+\.\d+`, buildpackInfo.Buildpack.Name)), " Executing build process", MatchRegexp(` Installing Miniconda \d+\.\d+\.\d+`), MatchRegexp(` Completed in ([0-9]*(\.[0-9]*)?[a-z]+)+`), @@ -87,14 +87,14 @@ func testLogging(t *testing.T, context spec.G, it spec.S) { WithEnv(map[string]string{"BP_CONDA_SOLVER": "mamba"}). WithPullPolicy("never"). WithBuildpacks( - settings.Buildpacks.Miniconda.Online, + settings.Buildpacks.PythonInstallers.Online, settings.Buildpacks.BuildPlan.Online, ). Execute(name, source) Expect(err).ToNot(HaveOccurred(), logs.String) Expect(logs).To(ContainLines( - MatchRegexp(fmt.Sprintf(`%s \d+\.\d+\.\d+`, settings.Buildpack.Name)), + MatchRegexp(fmt.Sprintf(`%s \d+\.\d+\.\d+`, buildpackInfo.Buildpack.Name)), " Executing build process", MatchRegexp(` Installing Miniconda \d+\.\d+\.\d+`), MatchRegexp(` Completed in ([0-9]*(\.[0-9]*)?[a-z]+)+`), diff --git a/integration/installers/miniconda/offline_test.go b/integration/installers/miniconda_offline_test.go similarity index 90% rename from integration/installers/miniconda/offline_test.go rename to integration/installers/miniconda_offline_test.go index 257cfa2..4bd2d4d 100644 --- a/integration/installers/miniconda/offline_test.go +++ b/integration/installers/miniconda_offline_test.go @@ -16,7 +16,7 @@ import ( . "github.com/onsi/gomega" ) -func testOffline(t *testing.T, context spec.G, it spec.S) { +func minicondaTestOffline(t *testing.T, context spec.G, it spec.S) { var ( Expect = NewWithT(t).Expect Eventually = NewWithT(t).Eventually @@ -43,7 +43,7 @@ func testOffline(t *testing.T, context spec.G, it spec.S) { name, err = occam.RandomName() Expect(err).NotTo(HaveOccurred()) - source, err = occam.Source(filepath.Join("testdata", "default_app")) + source, err = occam.Source(filepath.Join("testdata", "miniconda_app")) Expect(err).NotTo(HaveOccurred()) }) @@ -61,7 +61,7 @@ func testOffline(t *testing.T, context spec.G, it spec.S) { image, logs, err = pack.WithNoColor().Build. WithPullPolicy("never"). WithBuildpacks( - settings.Buildpacks.Miniconda.Offline, + settings.Buildpacks.PythonInstallers.Offline, settings.Buildpacks.BuildPlan.Online, ). WithNetwork("none"). diff --git a/integration/installers/miniconda/reuse_layer_test.go b/integration/installers/miniconda_reuse_layer_test.go similarity index 85% rename from integration/installers/miniconda/reuse_layer_test.go rename to integration/installers/miniconda_reuse_layer_test.go index b7b8b3f..79d885c 100644 --- a/integration/installers/miniconda/reuse_layer_test.go +++ b/integration/installers/miniconda_reuse_layer_test.go @@ -18,7 +18,7 @@ import ( . "github.com/paketo-buildpacks/occam/matchers" ) -func testReusingLayerRebuild(t *testing.T, context spec.G, it spec.S) { +func minicondaTestReusingLayerRebuild(t *testing.T, context spec.G, it spec.S) { var ( Expect = NewWithT(t).Expect Eventually = NewWithT(t).Eventually @@ -44,7 +44,7 @@ func testReusingLayerRebuild(t *testing.T, context spec.G, it spec.S) { imageIDs = map[string]struct{}{} containerIDs = map[string]struct{}{} - source, err = occam.Source(filepath.Join("testdata", "default_app")) + source, err = occam.Source(filepath.Join("testdata", "miniconda_app")) Expect(err).NotTo(HaveOccurred()) }) @@ -76,7 +76,7 @@ func testReusingLayerRebuild(t *testing.T, context spec.G, it spec.S) { build := pack.Build. WithPullPolicy("never"). WithBuildpacks( - settings.Buildpacks.Miniconda.Online, + settings.Buildpacks.PythonInstallers.Online, settings.Buildpacks.BuildPlan.Online, ) @@ -86,11 +86,11 @@ func testReusingLayerRebuild(t *testing.T, context spec.G, it spec.S) { imageIDs[firstImage.ID] = struct{}{} Expect(firstImage.Buildpacks).To(HaveLen(2)) - Expect(firstImage.Buildpacks[0].Key).To(Equal(settings.Buildpack.ID)) + Expect(firstImage.Buildpacks[0].Key).To(Equal(buildpackInfo.Buildpack.ID)) Expect(firstImage.Buildpacks[0].Layers).To(HaveKey("conda")) Expect(logs).To(ContainLines( - MatchRegexp(fmt.Sprintf(`%s \d+\.\d+\.\d+`, settings.Buildpack.Name)), + MatchRegexp(fmt.Sprintf(`%s \d+\.\d+\.\d+`, buildpackInfo.Buildpack.Name)), " Executing build process", MatchRegexp(` Installing Miniconda \d+\.\d+\.\d+`), MatchRegexp(` Completed in ([0-9]*(\.[0-9]*)?[a-z]+)+`), @@ -112,12 +112,12 @@ func testReusingLayerRebuild(t *testing.T, context spec.G, it spec.S) { imageIDs[secondImage.ID] = struct{}{} Expect(secondImage.Buildpacks).To(HaveLen(2)) - Expect(secondImage.Buildpacks[0].Key).To(Equal(settings.Buildpack.ID)) + Expect(secondImage.Buildpacks[0].Key).To(Equal(buildpackInfo.Buildpack.ID)) Expect(secondImage.Buildpacks[0].Layers).To(HaveKey("conda")) Expect(logs).To(ContainLines( - MatchRegexp(fmt.Sprintf(`%s \d+\.\d+\.\d+`, settings.Buildpack.Name)), - MatchRegexp(fmt.Sprintf(" Reusing cached layer /layers/%s/conda", strings.ReplaceAll(settings.Buildpack.ID, "/", "_"))), + MatchRegexp(fmt.Sprintf(`%s \d+\.\d+\.\d+`, buildpackInfo.Buildpack.Name)), + MatchRegexp(fmt.Sprintf(" Reusing cached layer /layers/%s/conda", strings.ReplaceAll(buildpackInfo.Buildpack.ID, "/", "_"))), )) secondContainer, err = docker.Container.Run. diff --git a/integration/installers/pip/integration.json b/integration/installers/pip/integration.json deleted file mode 100644 index 691fdec..0000000 --- a/integration/installers/pip/integration.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "builders": [ - "index.docker.io/paketobuildpacks/builder:buildpackless-base", - "index.docker.io/paketobuildpacks/builder-jammy-buildpackless-base:latest", - "index.docker.io/jericop/amazonlinux-builder:base" - ], - "cpython":"github.com/paketo-buildpacks/cpython", - "build-plan":"github.com/paketo-community/build-plan" -} diff --git a/integration/installers/pip/default_test.go b/integration/installers/pip_default_test.go similarity index 96% rename from integration/installers/pip/default_test.go rename to integration/installers/pip_default_test.go index 2e8d3de..1035eaa 100644 --- a/integration/installers/pip/default_test.go +++ b/integration/installers/pip_default_test.go @@ -18,7 +18,7 @@ import ( . "github.com/paketo-buildpacks/occam/matchers" ) -func testDefault(t *testing.T, context spec.G, it spec.S) { +func pipTestDefault(t *testing.T, context spec.G, it spec.S) { var ( Expect = NewWithT(t).Expect Eventually = NewWithT(t).Eventually @@ -33,7 +33,7 @@ func testDefault(t *testing.T, context spec.G, it spec.S) { docker = occam.NewDocker() var err error - source, err = occam.Source(filepath.Join("testdata", "default_app")) + source, err = occam.Source(filepath.Join("testdata", "pip_app")) Expect(err).NotTo(HaveOccurred()) }) @@ -68,7 +68,7 @@ func testDefault(t *testing.T, context spec.G, it spec.S) { WithPullPolicy("never"). WithBuildpacks( settings.Buildpacks.CPython.Online, - settings.Buildpacks.Pip.Online, + settings.Buildpacks.PythonInstallers.Online, settings.Buildpacks.BuildPlan.Online, ). Execute(name, source) @@ -137,7 +137,7 @@ func testDefault(t *testing.T, context spec.G, it spec.S) { WithPullPolicy("never"). WithBuildpacks( settings.Buildpacks.CPython.Online, - settings.Buildpacks.Pip.Online, + settings.Buildpacks.PythonInstallers.Online, settings.Buildpacks.BuildPlan.Online, ). WithEnv(map[string]string{ diff --git a/integration/installers/pip/layer_reuse_test.go b/integration/installers/pip_layer_reuse_test.go similarity index 88% rename from integration/installers/pip/layer_reuse_test.go rename to integration/installers/pip_layer_reuse_test.go index 29f75b7..4f03318 100644 --- a/integration/installers/pip/layer_reuse_test.go +++ b/integration/installers/pip_layer_reuse_test.go @@ -16,9 +16,11 @@ import ( . "github.com/onsi/gomega" . "github.com/paketo-buildpacks/occam/matchers" + + integration_helpers "github.com/paketo-buildpacks/python-installers/integration" ) -func testLayerReuse(t *testing.T, context spec.G, it spec.S) { +func pipTestLayerReuse(t *testing.T, context spec.G, it spec.S) { var ( Expect = NewWithT(t).Expect Eventually = NewWithT(t).Eventually @@ -44,7 +46,7 @@ func testLayerReuse(t *testing.T, context spec.G, it spec.S) { imageIDs = map[string]struct{}{} containerIDs = map[string]struct{}{} - source, err = occam.Source(filepath.Join("testdata", "default_app")) + source, err = occam.Source(filepath.Join("testdata", "pip_app")) Expect(err).NotTo(HaveOccurred()) }) @@ -79,7 +81,7 @@ func testLayerReuse(t *testing.T, context spec.G, it spec.S) { WithPullPolicy("never"). WithBuildpacks( settings.Buildpacks.CPython.Online, - settings.Buildpacks.Pip.Online, + settings.Buildpacks.PythonInstallers.Online, settings.Buildpacks.BuildPlan.Online, ). Execute(name, source) @@ -97,7 +99,7 @@ func testLayerReuse(t *testing.T, context spec.G, it spec.S) { WithPullPolicy("never"). WithBuildpacks( settings.Buildpacks.CPython.Online, - settings.Buildpacks.Pip.Online, + settings.Buildpacks.PythonInstallers.Online, settings.Buildpacks.BuildPlan.Online, ). Execute(name, source) @@ -149,14 +151,16 @@ func testLayerReuse(t *testing.T, context spec.G, it spec.S) { secondContainer occam.Container ) + dependencies := integration_helpers.DependenciesForId(buildpackInfo.Metadata.Dependencies, "pip") + firstImage, logs, err = pack.WithNoColor().Build. WithPullPolicy("never"). WithBuildpacks( settings.Buildpacks.CPython.Online, - settings.Buildpacks.Pip.Online, + settings.Buildpacks.PythonInstallers.Online, settings.Buildpacks.BuildPlan.Online, ). - WithEnv(map[string]string{"BP_PIP_VERSION": buildpackInfo.Metadata.Dependencies[0].Version}). + WithEnv(map[string]string{"BP_PIP_VERSION": dependencies[0].Version}). Execute(name, source) Expect(err).ToNot(HaveOccurred(), logs.String) @@ -172,10 +176,10 @@ func testLayerReuse(t *testing.T, context spec.G, it spec.S) { WithPullPolicy("never"). WithBuildpacks( settings.Buildpacks.CPython.Online, - settings.Buildpacks.Pip.Online, + settings.Buildpacks.PythonInstallers.Online, settings.Buildpacks.BuildPlan.Online, ). - WithEnv(map[string]string{"BP_PIP_VERSION": buildpackInfo.Metadata.Dependencies[1].Version}). + WithEnv(map[string]string{"BP_PIP_VERSION": dependencies[1].Version}). Execute(name, source) Expect(err).ToNot(HaveOccurred(), logs.String) @@ -215,7 +219,7 @@ func testLayerReuse(t *testing.T, context spec.G, it spec.S) { cLogs, err := docker.Container.Logs.Execute(secondContainer.ID) Expect(err).NotTo(HaveOccurred()) return cLogs.String() - }).Should(MatchRegexp(fmt.Sprintf(`pip %s from /layers/%s/pip/lib/python\d+.\d+/site-packages/pip`, strings.Replace(buildpackInfo.Metadata.Dependencies[1].Version, ".0", `(\.\d+)?`, 1), strings.ReplaceAll(buildpackInfo.Buildpack.ID, "/", "_")))) + }).Should(MatchRegexp(fmt.Sprintf(`pip %s from /layers/%s/pip/lib/python\d+.\d+/site-packages/pip`, strings.Replace(dependencies[1].Version, ".0", `(\.\d+)?`, 1), strings.ReplaceAll(buildpackInfo.Buildpack.ID, "/", "_")))) Expect(secondImage.Buildpacks[1].Key).To(Equal(buildpackInfo.Buildpack.ID)) Expect(secondImage.Buildpacks[1].Layers["pip"].SHA).ToNot(Equal(firstImage.Buildpacks[1].Layers["pip"].SHA)) diff --git a/integration/installers/pip/offline_test.go b/integration/installers/pip_offline_test.go similarity index 91% rename from integration/installers/pip/offline_test.go rename to integration/installers/pip_offline_test.go index b00a98d..0fb160f 100644 --- a/integration/installers/pip/offline_test.go +++ b/integration/installers/pip_offline_test.go @@ -17,7 +17,7 @@ import ( . "github.com/onsi/gomega" ) -func testOffline(t *testing.T, context spec.G, it spec.S) { +func pipTestOffline(t *testing.T, context spec.G, it spec.S) { var ( Expect = NewWithT(t).Expect Eventually = NewWithT(t).Eventually @@ -44,7 +44,7 @@ func testOffline(t *testing.T, context spec.G, it spec.S) { name, err = occam.RandomName() Expect(err).NotTo(HaveOccurred()) - source, err = occam.Source(filepath.Join("testdata", "default_app")) + source, err = occam.Source(filepath.Join("testdata", "pip_app")) Expect(err).NotTo(HaveOccurred()) }) @@ -63,7 +63,7 @@ func testOffline(t *testing.T, context spec.G, it spec.S) { WithNetwork("none"). WithBuildpacks( settings.Buildpacks.CPython.Offline, - settings.Buildpacks.Pip.Offline, + settings.Buildpacks.PythonInstallers.Offline, settings.Buildpacks.BuildPlan.Online, ). Execute(name, source) diff --git a/integration/installers/pipenv/init_test.go b/integration/installers/pipenv/init_test.go deleted file mode 100644 index 1a45ae9..0000000 --- a/integration/installers/pipenv/init_test.go +++ /dev/null @@ -1,92 +0,0 @@ -// SPDX-FileCopyrightText: Copyright (c) 2013-Present CloudFoundry.org Foundation, Inc. All Rights Reserved. -// -// SPDX-License-Identifier: Apache-2.0 - -package integration_test - -import ( - "encoding/json" - "os" - "path/filepath" - "testing" - "time" - - "github.com/BurntSushi/toml" - "github.com/sclevine/spec" - "github.com/sclevine/spec/report" - - . "github.com/onsi/gomega" - "github.com/onsi/gomega/format" - - integration_helpers "github.com/paketo-buildpacks/python-installers/integration" -) - -var buildpackInfo integration_helpers.BuildpackInfo - -var settings struct { - Buildpacks struct { - CPython string - Pip string - Pipenv string - BuildPlan string - } - - Config struct { - CPython string `json:"cpython"` - Pip string `json:"pip"` - BuildPlan string `json:"build-plan"` - } -} - -func TestPipenvIntegration(t *testing.T) { - // Do not truncate Gomega matcher output - // The buildpack output text can be large and we often want to see all of it. - format.MaxLength = 0 - - Expect := NewWithT(t).Expect - - file, err := os.Open("integration.json") - Expect(err).NotTo(HaveOccurred()) - - Expect(json.NewDecoder(file).Decode(&settings.Config)).To(Succeed()) - Expect(file.Close()).To(Succeed()) - - file, err = os.Open("./../../../buildpack.toml") - Expect(err).NotTo(HaveOccurred()) - - _, err = toml.NewDecoder(file).Decode(&buildpackInfo) - Expect(err).NotTo(HaveOccurred()) - Expect(file.Close()).To(Succeed()) - - buildpackInfo.Metadata.Dependencies = integration_helpers.DependenciesForId(buildpackInfo.Metadata.Dependencies, "pipenv") - - root, err := filepath.Abs("./../../..") - Expect(err).ToNot(HaveOccurred()) - - buildpackStore := integration_helpers.NewBuildpackStore("pipenv") - - settings.Buildpacks.Pipenv, err = buildpackStore.Get. - WithVersion("1.2.3"). - Execute(root) - Expect(err).NotTo(HaveOccurred()) - - settings.Buildpacks.Pip, err = buildpackStore.Get. - Execute(settings.Config.Pip) - Expect(err).NotTo(HaveOccurred()) - - settings.Buildpacks.CPython, err = buildpackStore.Get. - Execute(settings.Config.CPython) - Expect(err).NotTo(HaveOccurred()) - - settings.Buildpacks.BuildPlan, err = buildpackStore.Get. - Execute(settings.Config.BuildPlan) - Expect(err).NotTo(HaveOccurred()) - - SetDefaultEventuallyTimeout(30 * time.Second) - - suite := spec.New("Integration", spec.Report(report.Terminal{})) - suite("Default", testDefault, spec.Parallel()) - suite("LayerReuse", testLayerReuse, spec.Parallel()) - suite("Version", testVersions, spec.Parallel()) - suite.Run(t) -} diff --git a/integration/installers/pipenv/integration.json b/integration/installers/pipenv/integration.json deleted file mode 100644 index 40156a6..0000000 --- a/integration/installers/pipenv/integration.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "builders": [ - "index.docker.io/paketobuildpacks/builder:buildpackless-base", - "index.docker.io/paketobuildpacks/builder-jammy-buildpackless-base:latest", - "index.docker.io/jericop/amazonlinux-builder:base" - ], - "cpython":"github.com/paketo-buildpacks/cpython", - "pip":"github.com/paketo-buildpacks/pip", - "build-plan":"github.com/paketo-community/build-plan" -} diff --git a/integration/installers/pipenv/default_test.go b/integration/installers/pipenv_default_test.go similarity index 92% rename from integration/installers/pipenv/default_test.go rename to integration/installers/pipenv_default_test.go index eb422b5..d95133d 100644 --- a/integration/installers/pipenv/default_test.go +++ b/integration/installers/pipenv_default_test.go @@ -18,7 +18,7 @@ import ( . "github.com/paketo-buildpacks/occam/matchers" ) -func testDefault(t *testing.T, context spec.G, it spec.S) { +func pipenvTestDefault(t *testing.T, context spec.G, it spec.S) { var ( Expect = NewWithT(t).Expect Eventually = NewWithT(t).Eventually @@ -45,7 +45,7 @@ func testDefault(t *testing.T, context spec.G, it spec.S) { name, err = occam.RandomName() Expect(err).NotTo(HaveOccurred()) - source, err = occam.Source(filepath.Join("testdata", "default_app")) + source, err = occam.Source(filepath.Join("testdata", "pipenv_app")) Expect(err).NotTo(HaveOccurred()) }) @@ -63,10 +63,10 @@ func testDefault(t *testing.T, context spec.G, it spec.S) { image, logs, err = pack.WithNoColor().Build. WithPullPolicy("never"). WithBuildpacks( - settings.Buildpacks.CPython, - settings.Buildpacks.Pip, - settings.Buildpacks.Pipenv, - settings.Buildpacks.BuildPlan, + settings.Buildpacks.CPython.Online, + settings.Buildpacks.Pip.Online, + settings.Buildpacks.PythonInstallers.Online, + settings.Buildpacks.BuildPlan.Online, ). Execute(name, source) Expect(err).ToNot(HaveOccurred(), logs.String) @@ -126,10 +126,10 @@ func testDefault(t *testing.T, context spec.G, it spec.S) { image, logs, err = pack.WithNoColor().Build. WithPullPolicy("never"). WithBuildpacks( - settings.Buildpacks.CPython, - settings.Buildpacks.Pip, - settings.Buildpacks.Pipenv, - settings.Buildpacks.BuildPlan, + settings.Buildpacks.CPython.Online, + settings.Buildpacks.Pip.Online, + settings.Buildpacks.PythonInstallers.Online, + settings.Buildpacks.BuildPlan.Online, ). WithEnv(map[string]string{ "BP_LOG_LEVEL": "DEBUG", diff --git a/integration/installers/pipenv/layer_reuse_test.go b/integration/installers/pipenv_layer_reuse_test.go similarity index 81% rename from integration/installers/pipenv/layer_reuse_test.go rename to integration/installers/pipenv_layer_reuse_test.go index 1cdb16d..e6b5491 100644 --- a/integration/installers/pipenv/layer_reuse_test.go +++ b/integration/installers/pipenv_layer_reuse_test.go @@ -17,9 +17,11 @@ import ( . "github.com/onsi/gomega" . "github.com/paketo-buildpacks/occam/matchers" + + integration_helpers "github.com/paketo-buildpacks/python-installers/integration" ) -func testLayerReuse(t *testing.T, context spec.G, it spec.S) { +func pipenvTestLayerReuse(t *testing.T, context spec.G, it spec.S) { var ( Expect = NewWithT(t).Expect Eventually = NewWithT(t).Eventually @@ -45,7 +47,7 @@ func testLayerReuse(t *testing.T, context spec.G, it spec.S) { imageIDs = collections.NewSet() containerIDs = collections.NewSet() - source, err = occam.Source(filepath.Join("testdata", "default_app")) + source, err = occam.Source(filepath.Join("testdata", "pipenv_app")) Expect(err).ToNot(HaveOccurred()) }) @@ -77,10 +79,10 @@ func testLayerReuse(t *testing.T, context spec.G, it spec.S) { firstImage, logs, err = pack.WithNoColor().Build. WithPullPolicy("never"). WithBuildpacks( - settings.Buildpacks.CPython, - settings.Buildpacks.Pip, - settings.Buildpacks.Pipenv, - settings.Buildpacks.BuildPlan, + settings.Buildpacks.CPython.Online, + settings.Buildpacks.Pip.Online, + settings.Buildpacks.PythonInstallers.Online, + settings.Buildpacks.BuildPlan.Online, ). Execute(name, source) Expect(err).ToNot(HaveOccurred(), logs.String) @@ -90,10 +92,10 @@ func testLayerReuse(t *testing.T, context spec.G, it spec.S) { secondImage, logs, err = pack.WithNoColor().Build. WithPullPolicy("never"). WithBuildpacks( - settings.Buildpacks.CPython, - settings.Buildpacks.Pip, - settings.Buildpacks.Pipenv, - settings.Buildpacks.BuildPlan, + settings.Buildpacks.CPython.Online, + settings.Buildpacks.Pip.Online, + settings.Buildpacks.PythonInstallers.Online, + settings.Buildpacks.BuildPlan.Online, ). Execute(name, source) Expect(err).ToNot(HaveOccurred(), logs.String) @@ -134,27 +136,29 @@ func testLayerReuse(t *testing.T, context spec.G, it spec.S) { secondContainer occam.Container ) + dependencies := integration_helpers.DependenciesForId(buildpackInfo.Metadata.Dependencies, "pipenv") + firstImage, logs, err = pack.WithNoColor().Build. WithPullPolicy("never"). WithBuildpacks( - settings.Buildpacks.CPython, - settings.Buildpacks.Pip, - settings.Buildpacks.Pipenv, - settings.Buildpacks.BuildPlan, + settings.Buildpacks.CPython.Online, + settings.Buildpacks.Pip.Online, + settings.Buildpacks.PythonInstallers.Online, + settings.Buildpacks.BuildPlan.Online, ). - WithEnv(map[string]string{"BP_PIPENV_VERSION": buildpackInfo.Metadata.Dependencies[0].Version}). + WithEnv(map[string]string{"BP_PIPENV_VERSION": dependencies[0].Version}). Execute(name, source) Expect(err).ToNot(HaveOccurred(), logs.String) secondImage, logs, err = pack.WithNoColor().Build. WithPullPolicy("never"). WithBuildpacks( - settings.Buildpacks.CPython, - settings.Buildpacks.Pip, - settings.Buildpacks.Pipenv, - settings.Buildpacks.BuildPlan, + settings.Buildpacks.CPython.Online, + settings.Buildpacks.Pip.Online, + settings.Buildpacks.PythonInstallers.Online, + settings.Buildpacks.BuildPlan.Online, ). - WithEnv(map[string]string{"BP_PIPENV_VERSION": buildpackInfo.Metadata.Dependencies[1].Version}). + WithEnv(map[string]string{"BP_PIPENV_VERSION": dependencies[1].Version}). Execute(name, source) Expect(err).ToNot(HaveOccurred(), logs.String) @@ -168,7 +172,7 @@ func testLayerReuse(t *testing.T, context spec.G, it spec.S) { ` -> ""`, )) Expect(logs).To(ContainLines( - fmt.Sprintf(` Selected Pipenv version (using BP_PIPENV_VERSION): %s`, buildpackInfo.Metadata.Dependencies[1].Version), + fmt.Sprintf(` Selected Pipenv version (using BP_PIPENV_VERSION): %s`, dependencies[1].Version), )) Expect(logs).To(ContainLines( " Executing build process", diff --git a/integration/installers/pipenv/versions_test.go b/integration/installers/pipenv_versions_test.go similarity index 81% rename from integration/installers/pipenv/versions_test.go rename to integration/installers/pipenv_versions_test.go index 9ab473e..1ac3d2d 100644 --- a/integration/installers/pipenv/versions_test.go +++ b/integration/installers/pipenv_versions_test.go @@ -15,9 +15,11 @@ import ( . "github.com/onsi/gomega" . "github.com/paketo-buildpacks/occam/matchers" + + integration_helpers "github.com/paketo-buildpacks/python-installers/integration" ) -func testVersions(t *testing.T, context spec.G, it spec.S) { +func pipenvTestVersions(t *testing.T, context spec.G, it spec.S) { var ( Expect = NewWithT(t).Expect Eventually = NewWithT(t).Eventually @@ -63,21 +65,23 @@ func testVersions(t *testing.T, context spec.G, it spec.S) { it("builds and runs successfully with both provided dependency versions", func() { var err error - source, err = occam.Source(filepath.Join("testdata", "default_app")) + source, err = occam.Source(filepath.Join("testdata", "pipenv_app")) Expect(err).NotTo(HaveOccurred()) - firstPipenvVersion := buildpackInfo.Metadata.Dependencies[0].Version - secondPipenvVersion := buildpackInfo.Metadata.Dependencies[1].Version + dependencies := integration_helpers.DependenciesForId(buildpackInfo.Metadata.Dependencies, "pipenv") + + firstPipenvVersion := dependencies[0].Version + secondPipenvVersion := dependencies[1].Version Expect(firstPipenvVersion).NotTo(Equal(secondPipenvVersion)) firstImage, firstLogs, err := pack.WithNoColor().Build. WithPullPolicy("never"). WithBuildpacks( - settings.Buildpacks.CPython, - settings.Buildpacks.Pip, - settings.Buildpacks.Pipenv, - settings.Buildpacks.BuildPlan, + settings.Buildpacks.CPython.Online, + settings.Buildpacks.Pip.Online, + settings.Buildpacks.PythonInstallers.Online, + settings.Buildpacks.BuildPlan.Online, ). WithEnv(map[string]string{"BP_PIPENV_VERSION": firstPipenvVersion}). Execute(name, source) @@ -105,10 +109,10 @@ func testVersions(t *testing.T, context spec.G, it spec.S) { secondImage, secondLogs, err := pack.WithNoColor().Build. WithPullPolicy("never"). WithBuildpacks( - settings.Buildpacks.CPython, - settings.Buildpacks.Pip, - settings.Buildpacks.Pipenv, - settings.Buildpacks.BuildPlan, + settings.Buildpacks.CPython.Online, + settings.Buildpacks.Pip.Online, + settings.Buildpacks.PythonInstallers.Online, + settings.Buildpacks.BuildPlan.Online, ). WithEnv(map[string]string{"BP_PIPENV_VERSION": secondPipenvVersion}). Execute(name, source) diff --git a/integration/installers/poetry/init_test.go b/integration/installers/poetry/init_test.go deleted file mode 100644 index 65b486e..0000000 --- a/integration/installers/poetry/init_test.go +++ /dev/null @@ -1,119 +0,0 @@ -// SPDX-FileCopyrightText: Copyright (c) 2013-Present CloudFoundry.org Foundation, Inc. All Rights Reserved. -// -// SPDX-License-Identifier: Apache-2.0 - -package integration_test - -import ( - "encoding/json" - "os" - "path/filepath" - "testing" - "time" - - "github.com/BurntSushi/toml" - "github.com/sclevine/spec" - "github.com/sclevine/spec/report" - - . "github.com/onsi/gomega" - "github.com/onsi/gomega/format" - - integration_helpers "github.com/paketo-buildpacks/python-installers/integration" -) - -var buildpackInfo integration_helpers.BuildpackInfo - -var settings struct { - Buildpacks struct { - CPython struct { - Online string - Offline string - } - Pip struct { - Online string - Offline string - } - Poetry struct { - Online string - Offline string - } - BuildPlan struct { - Online string - } - } - - Config struct { - CPython string `json:"cpython"` - Pip string `json:"pip"` - BuildPlan string `json:"build-plan"` - } -} - -func TestPoetryIntegration(t *testing.T) { - // Do not truncate Gomega matcher output - // The buildpack output text can be large and we often want to see all of it. - format.MaxLength = 0 - - Expect := NewWithT(t).Expect - - file, err := os.Open("integration.json") - Expect(err).NotTo(HaveOccurred()) - - Expect(json.NewDecoder(file).Decode(&settings.Config)).To(Succeed()) - Expect(file.Close()).To(Succeed()) - - file, err = os.Open("./../../../buildpack.toml") - Expect(err).NotTo(HaveOccurred()) - - _, err = toml.NewDecoder(file).Decode(&buildpackInfo) - Expect(err).NotTo(HaveOccurred()) - Expect(file.Close()).To(Succeed()) - - buildpackInfo.Metadata.Dependencies = integration_helpers.DependenciesForId(buildpackInfo.Metadata.Dependencies, "poetry") - - root, err := filepath.Abs("./../../..") - Expect(err).ToNot(HaveOccurred()) - - buildpackStore := integration_helpers.NewBuildpackStore("poetry") - - settings.Buildpacks.Poetry.Online, err = buildpackStore.Get. - WithVersion("1.2.3"). - Execute(root) - Expect(err).NotTo(HaveOccurred()) - - settings.Buildpacks.Poetry.Offline, err = buildpackStore.Get. - WithVersion("1.2.3"). - WithOfflineDependencies(). - Execute(root) - Expect(err).NotTo(HaveOccurred()) - - settings.Buildpacks.Pip.Online, err = buildpackStore.Get. - Execute(settings.Config.Pip) - Expect(err).NotTo(HaveOccurred()) - - settings.Buildpacks.Pip.Offline, err = buildpackStore.Get. - WithOfflineDependencies(). - Execute(settings.Config.Pip) - Expect(err).NotTo(HaveOccurred()) - - settings.Buildpacks.CPython.Online, err = buildpackStore.Get. - Execute(settings.Config.CPython) - Expect(err).NotTo(HaveOccurred()) - - settings.Buildpacks.CPython.Offline, err = buildpackStore.Get. - WithOfflineDependencies(). - Execute(settings.Config.CPython) - Expect(err).NotTo(HaveOccurred()) - - settings.Buildpacks.BuildPlan.Online, err = buildpackStore.Get. - Execute(settings.Config.BuildPlan) - Expect(err).NotTo(HaveOccurred()) - - SetDefaultEventuallyTimeout(30 * time.Second) - - suite := spec.New("Integration", spec.Report(report.Terminal{})) - suite("Default", testDefault, spec.Parallel()) - suite("LayerReuse", testLayerReuse, spec.Parallel()) - suite("Versions", testVersions, spec.Parallel()) - suite.Run(t) -} diff --git a/integration/installers/poetry/integration.json b/integration/installers/poetry/integration.json deleted file mode 100644 index 40156a6..0000000 --- a/integration/installers/poetry/integration.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "builders": [ - "index.docker.io/paketobuildpacks/builder:buildpackless-base", - "index.docker.io/paketobuildpacks/builder-jammy-buildpackless-base:latest", - "index.docker.io/jericop/amazonlinux-builder:base" - ], - "cpython":"github.com/paketo-buildpacks/cpython", - "pip":"github.com/paketo-buildpacks/pip", - "build-plan":"github.com/paketo-community/build-plan" -} diff --git a/integration/installers/poetry/default_test.go b/integration/installers/poetry_default_test.go similarity index 96% rename from integration/installers/poetry/default_test.go rename to integration/installers/poetry_default_test.go index 66a98b6..c8ca301 100644 --- a/integration/installers/poetry/default_test.go +++ b/integration/installers/poetry_default_test.go @@ -18,7 +18,7 @@ import ( . "github.com/paketo-buildpacks/occam/matchers" ) -func testDefault(t *testing.T, context spec.G, it spec.S) { +func poetryTestDefault(t *testing.T, context spec.G, it spec.S) { var ( Expect = NewWithT(t).Expect Eventually = NewWithT(t).Eventually @@ -45,7 +45,7 @@ func testDefault(t *testing.T, context spec.G, it spec.S) { name, err = occam.RandomName() Expect(err).NotTo(HaveOccurred()) - source, err = occam.Source(filepath.Join("testdata", "default_app")) + source, err = occam.Source(filepath.Join("testdata", "poetry_app")) Expect(err).NotTo(HaveOccurred()) }) @@ -66,7 +66,7 @@ func testDefault(t *testing.T, context spec.G, it spec.S) { WithBuildpacks( settings.Buildpacks.CPython.Online, settings.Buildpacks.Pip.Online, - settings.Buildpacks.Poetry.Online, + settings.Buildpacks.PythonInstallers.Online, settings.Buildpacks.BuildPlan.Online, ). Execute(name, source) @@ -144,7 +144,7 @@ func testDefault(t *testing.T, context spec.G, it spec.S) { WithBuildpacks( settings.Buildpacks.CPython.Online, settings.Buildpacks.Pip.Online, - settings.Buildpacks.Poetry.Online, + settings.Buildpacks.PythonInstallers.Online, settings.Buildpacks.BuildPlan.Online, ). WithEnv(map[string]string{ diff --git a/integration/installers/poetry/layer_reuse_test.go b/integration/installers/poetry_layer_reuse_test.go similarity index 93% rename from integration/installers/poetry/layer_reuse_test.go rename to integration/installers/poetry_layer_reuse_test.go index 1973468..6219503 100644 --- a/integration/installers/poetry/layer_reuse_test.go +++ b/integration/installers/poetry_layer_reuse_test.go @@ -18,7 +18,7 @@ import ( . "github.com/paketo-buildpacks/occam/matchers" ) -func testLayerReuse(t *testing.T, context spec.G, it spec.S) { +func poetryTestLayerReuse(t *testing.T, context spec.G, it spec.S) { var ( Expect = NewWithT(t).Expect Eventually = NewWithT(t).Eventually @@ -40,7 +40,7 @@ func testLayerReuse(t *testing.T, context spec.G, it spec.S) { containerIDs = map[string]struct{}{} var err error - source, err = occam.Source(filepath.Join("testdata", "default_app")) + source, err = occam.Source(filepath.Join("testdata", "poetry_app")) Expect(err).NotTo(HaveOccurred()) }) @@ -78,7 +78,7 @@ func testLayerReuse(t *testing.T, context spec.G, it spec.S) { WithBuildpacks( settings.Buildpacks.CPython.Online, settings.Buildpacks.Pip.Online, - settings.Buildpacks.Poetry.Online, + settings.Buildpacks.PythonInstallers.Online, settings.Buildpacks.BuildPlan.Online, ). Execute(name, source) @@ -104,7 +104,7 @@ func testLayerReuse(t *testing.T, context spec.G, it spec.S) { WithBuildpacks( settings.Buildpacks.CPython.Online, settings.Buildpacks.Pip.Online, - settings.Buildpacks.Poetry.Online, + settings.Buildpacks.PythonInstallers.Online, settings.Buildpacks.BuildPlan.Online, ). Execute(name, source) diff --git a/integration/installers/poetry/versions_test.go b/integration/installers/poetry_versions_test.go similarity index 87% rename from integration/installers/poetry/versions_test.go rename to integration/installers/poetry_versions_test.go index 9a0f7bc..4c6f1de 100644 --- a/integration/installers/poetry/versions_test.go +++ b/integration/installers/poetry_versions_test.go @@ -15,9 +15,11 @@ import ( . "github.com/onsi/gomega" . "github.com/paketo-buildpacks/occam/matchers" + + integration_helpers "github.com/paketo-buildpacks/python-installers/integration" ) -func testVersions(t *testing.T, context spec.G, it spec.S) { +func poetryTestVersions(t *testing.T, context spec.G, it spec.S) { var ( Expect = NewWithT(t).Expect Eventually = NewWithT(t).Eventually @@ -48,7 +50,7 @@ func testVersions(t *testing.T, context spec.G, it spec.S) { containersMap = map[string]interface{}{} imagesMap = map[string]interface{}{} - source, err = occam.Source(filepath.Join("testdata", "default_app")) + source, err = occam.Source(filepath.Join("testdata", "poetry_app")) Expect(err).NotTo(HaveOccurred()) }) @@ -66,8 +68,10 @@ func testVersions(t *testing.T, context spec.G, it spec.S) { it("builds and runs successfully with multiple provided dependency versions", func() { var err error - firstPoetryVersion := buildpackInfo.Metadata.Dependencies[0].Version - secondPoetryVersion := buildpackInfo.Metadata.Dependencies[1].Version + dependencies := integration_helpers.DependenciesForId(buildpackInfo.Metadata.Dependencies, "poetry") + + firstPoetryVersion := dependencies[0].Version + secondPoetryVersion := dependencies[1].Version Expect(firstPoetryVersion).NotTo(Equal(secondPoetryVersion)) @@ -76,7 +80,7 @@ func testVersions(t *testing.T, context spec.G, it spec.S) { WithBuildpacks( settings.Buildpacks.CPython.Online, settings.Buildpacks.Pip.Online, - settings.Buildpacks.Poetry.Online, + settings.Buildpacks.PythonInstallers.Online, settings.Buildpacks.BuildPlan.Online, ). WithEnv(map[string]string{"BP_POETRY_VERSION": firstPoetryVersion}). @@ -107,7 +111,7 @@ func testVersions(t *testing.T, context spec.G, it spec.S) { WithBuildpacks( settings.Buildpacks.CPython.Online, settings.Buildpacks.Pip.Online, - settings.Buildpacks.Poetry.Online, + settings.Buildpacks.PythonInstallers.Online, settings.Buildpacks.BuildPlan.Online, ). WithEnv(map[string]string{"BP_POETRY_VERSION": secondPoetryVersion}). diff --git a/integration/installers/miniconda/testdata/default_app/plan.toml b/integration/installers/testdata/miniconda_app/plan.toml similarity index 79% rename from integration/installers/miniconda/testdata/default_app/plan.toml rename to integration/installers/testdata/miniconda_app/plan.toml index 278e837..744c80c 100644 --- a/integration/installers/miniconda/testdata/default_app/plan.toml +++ b/integration/installers/testdata/miniconda_app/plan.toml @@ -5,5 +5,5 @@ [[requires]] name = "conda" - [requires.metadata] - launch = true +[requires.metadata] + launch = true diff --git a/integration/installers/pip/testdata/default_app/plan.toml b/integration/installers/testdata/pip_app/plan.toml similarity index 100% rename from integration/installers/pip/testdata/default_app/plan.toml rename to integration/installers/testdata/pip_app/plan.toml diff --git a/integration/installers/pipenv/testdata/default_app/plan.toml b/integration/installers/testdata/pipenv_app/plan.toml similarity index 100% rename from integration/installers/pipenv/testdata/default_app/plan.toml rename to integration/installers/testdata/pipenv_app/plan.toml diff --git a/integration/installers/poetry/testdata/default_app/plan.toml b/integration/installers/testdata/poetry_app/plan.toml similarity index 100% rename from integration/installers/poetry/testdata/default_app/plan.toml rename to integration/installers/testdata/poetry_app/plan.toml diff --git a/integration/installers/poetry/testdata/default_app/pyproject.toml b/integration/installers/testdata/poetry_app/pyproject.toml similarity index 100% rename from integration/installers/poetry/testdata/default_app/pyproject.toml rename to integration/installers/testdata/poetry_app/pyproject.toml diff --git a/pkg/installers/pipenv/README.md b/pkg/installers/pipenv/README.md index 6a272d7..8ca67ae 100644 --- a/pkg/installers/pipenv/README.md +++ b/pkg/installers/pipenv/README.md @@ -45,7 +45,7 @@ file that looks like the following: # The Pipenv buildpack supports some non-required metadata options. [requires.metadata] - + # Use `version` to request a specific version of `pipenv`. # This buildpack supports specifying a semver constraint in the form of "2018.*", "2018.11.*", # or even "2018.11.26".