From 43ddf3e69980de81823a34b924632ae868bffa60 Mon Sep 17 00:00:00 2001 From: Pascal Zimmermann Date: Wed, 22 Apr 2026 08:48:41 +0200 Subject: [PATCH] feat: Add poetry-core support --- src/python/supply/supply.go | 9 +++++++++ src/python/supply/supply_test.go | 25 ++++++++++++++++++++++++- 2 files changed, 33 insertions(+), 1 deletion(-) diff --git a/src/python/supply/supply.go b/src/python/supply/supply.go index b36a48fd..1b1530c1 100644 --- a/src/python/supply/supply.go +++ b/src/python/supply/supply.go @@ -756,6 +756,15 @@ func (s *Supplier) InstallCommonBuildDependencies() error { return fmt.Errorf("could not install build-time dependency %s: %v", dep, err) } } + + if err := s.Installer.InstallOnlyVersion("poetry-core", tempPath); err != nil { + return fmt.Errorf("could not prepare build-time dependency poetry-core: %v", err) + } + s.Log.Info("Installing build-time dependency poetry-core (bootstrap)") + if err := s.runPipInstall(tempPath, "--no-build-isolation"); err != nil { + return fmt.Errorf("could not bootstrap-install poetry-core: %v", err) + } + return nil } diff --git a/src/python/supply/supply_test.go b/src/python/supply/supply_test.go index b7947dc3..a82603fd 100644 --- a/src/python/supply/supply_test.go +++ b/src/python/supply/supply_test.go @@ -633,10 +633,12 @@ MarkupSafe==2.0.1 Describe("InstallCommonBuildDependencies", func() { Context("successful installation", func() { - It("runs command to install wheel and setuptools", func() { + It("runs command to install wheel, setuptools and poetry-core", func() { mockInstaller.EXPECT().InstallOnlyVersion("pip", "/tmp/common_build_deps") mockCommand.EXPECT().Execute(buildDir, gomock.Any(), gomock.Any(), "python", "-m", "pip", "install", "wheel", "--no-index", "--upgrade-strategy=only-if-needed", "--find-links=/tmp/common_build_deps") mockCommand.EXPECT().Execute(buildDir, gomock.Any(), gomock.Any(), "python", "-m", "pip", "install", "setuptools", "--no-index", "--upgrade-strategy=only-if-needed", "--find-links=/tmp/common_build_deps") + mockInstaller.EXPECT().InstallOnlyVersion("poetry-core", "/tmp/common_build_deps") + mockCommand.EXPECT().Execute(buildDir, gomock.Any(), gomock.Any(), "python", "-m", "pip", "install", "/tmp/common_build_deps", "--no-build-isolation") Expect(supplier.InstallCommonBuildDependencies()).To(Succeed()) }) @@ -652,6 +654,27 @@ MarkupSafe==2.0.1 Expect(supplier.InstallCommonBuildDependencies()).To(MatchError("could not install build-time dependency wheel: some-pip-error")) }) }) + + Context("poetry-core preparation fails", func() { + It("returns a useful error message", func() { + mockInstaller.EXPECT().InstallOnlyVersion("pip", "/tmp/common_build_deps") + mockCommand.EXPECT().Execute(buildDir, gomock.Any(), gomock.Any(), "python", "-m", "pip", "install", "wheel", "--no-index", "--upgrade-strategy=only-if-needed", "--find-links=/tmp/common_build_deps") + mockCommand.EXPECT().Execute(buildDir, gomock.Any(), gomock.Any(), "python", "-m", "pip", "install", "setuptools", "--no-index", "--upgrade-strategy=only-if-needed", "--find-links=/tmp/common_build_deps") + mockInstaller.EXPECT().InstallOnlyVersion("poetry-core", "/tmp/common_build_deps").Return(fmt.Errorf("prepare-error")) + Expect(supplier.InstallCommonBuildDependencies()).To(MatchError("could not prepare build-time dependency poetry-core: prepare-error")) + }) + }) + + Context("poetry-core bootstrap fails", func() { + It("returns a useful error message", func() { + mockInstaller.EXPECT().InstallOnlyVersion("pip", "/tmp/common_build_deps") + mockCommand.EXPECT().Execute(buildDir, gomock.Any(), gomock.Any(), "python", "-m", "pip", "install", "wheel", "--no-index", "--upgrade-strategy=only-if-needed", "--find-links=/tmp/common_build_deps") + mockCommand.EXPECT().Execute(buildDir, gomock.Any(), gomock.Any(), "python", "-m", "pip", "install", "setuptools", "--no-index", "--upgrade-strategy=only-if-needed", "--find-links=/tmp/common_build_deps") + mockInstaller.EXPECT().InstallOnlyVersion("poetry-core", "/tmp/common_build_deps") + mockCommand.EXPECT().Execute(buildDir, gomock.Any(), gomock.Any(), "python", "-m", "pip", "install", "/tmp/common_build_deps", "--no-build-isolation").Return(fmt.Errorf("poetry-error")) + Expect(supplier.InstallCommonBuildDependencies()).To(MatchError("could not bootstrap-install poetry-core: poetry-error")) + }) + }) }) Describe("CreateDefaultEnv", func() {