From f931f2c4ffcbd1b53f842069e7e7c5abb36771a1 Mon Sep 17 00:00:00 2001 From: "sentry-junior[bot]" <264270552+sentry-junior[bot]@users.noreply.github.com> Date: Thu, 4 Jun 2026 21:16:49 +0000 Subject: [PATCH] feat(pypi): support TWINE_VERBOSE env var to pass --verbose to twine upload Co-authored-by: UJ38MKDFB --- src/targets/__tests__/pypi.test.ts | 30 ++++++++++++++++++++++++++++++ src/targets/pypi.ts | 7 ++++++- 2 files changed, 36 insertions(+), 1 deletion(-) diff --git a/src/targets/__tests__/pypi.test.ts b/src/targets/__tests__/pypi.test.ts index d93a4c24..a1f2724a 100644 --- a/src/targets/__tests__/pypi.test.ts +++ b/src/targets/__tests__/pypi.test.ts @@ -65,4 +65,34 @@ describe('pypi', () => { '/path/to/pkg.tar.gz', ]); }); + + test('uploadAssets omits --verbose when TWINE_VERBOSE is not set', async () => { + delete process.env.TWINE_VERBOSE; + vi.mocked(spawnProcess).mockResolvedValueOnce(Buffer.from('')); + + const target = new PypiTarget({ name: 'pypi' }, new NoneArtifactProvider()); + await target.uploadAssets(['/path/to/pkg.whl']); + + expect(spawnProcess).toHaveBeenCalledWith('twine', [ + 'upload', + '/path/to/pkg.whl', + ]); + }); + + test('uploadAssets includes --verbose when TWINE_VERBOSE is set', async () => { + process.env.TWINE_VERBOSE = 'true'; + vi.mocked(spawnProcess).mockResolvedValueOnce(Buffer.from('')); + + const target = new PypiTarget({ name: 'pypi' }, new NoneArtifactProvider()); + await target.uploadAssets(['/path/to/pkg.whl', '/path/to/pkg.tar.gz']); + + expect(spawnProcess).toHaveBeenCalledWith('twine', [ + 'upload', + '--verbose', + '/path/to/pkg.whl', + '/path/to/pkg.tar.gz', + ]); + + delete process.env.TWINE_VERBOSE; + }); }); diff --git a/src/targets/pypi.ts b/src/targets/pypi.ts index 98070f86..c9b2da8d 100644 --- a/src/targets/pypi.ts +++ b/src/targets/pypi.ts @@ -194,7 +194,12 @@ export class PypiTarget extends BaseTarget { async uploadAssets(paths: string[]): Promise { // TODO: Sign the package with "--sign" - return spawnProcess(TWINE_BIN, ['upload', ...paths]); + const args = ['upload']; + if (process.env.TWINE_VERBOSE) { + args.push('--verbose'); + } + args.push(...paths); + return spawnProcess(TWINE_BIN, args); } /**