diff --git a/.github/workflows/pmg-e2e.yml b/.github/workflows/pmg-e2e.yml index 22a7f2d..0f16a85 100644 --- a/.github/workflows/pmg-e2e.yml +++ b/.github/workflows/pmg-e2e.yml @@ -265,6 +265,15 @@ jobs: test -f bun.lock test -d node_modules/express test -d node_modules/lodash + + echo "Testing Bun frozen manifest installation with bun ci..." + rm -rf node_modules + pmg --proxy-mode=false bun ci + + # Verification: bun lockfile and modules exist after frozen manifest install + test -f bun.lock + test -d node_modules/express + test -d node_modules/lodash cd .. && rm -rf bun-test - name: Test Yarn - Single Package & Manifest diff --git a/packagemanager/npm.go b/packagemanager/npm.go index f8125de..0398fe5 100644 --- a/packagemanager/npm.go +++ b/packagemanager/npm.go @@ -48,7 +48,7 @@ func DefaultPnpmPackageManagerConfig() NpmPackageManagerConfig { func DefaultBunPackageManagerConfig() NpmPackageManagerConfig { return NpmPackageManagerConfig{ - InstallCommands: []string{"install", "i", "add"}, + InstallCommands: []string{"install", "i", "add", "ci"}, NonDownloadCommands: []string{ // Removal "remove", "rm", diff --git a/packagemanager/npm_test.go b/packagemanager/npm_test.go index 6f582b6..e0461dc 100644 --- a/packagemanager/npm_test.go +++ b/packagemanager/npm_test.go @@ -413,6 +413,26 @@ func TestBunParseCommand(t *testing.T) { assert.Equal(t, 0, len(parsedCommand.InstallTargets)) }, }, + { + name: "manifest installation with short form", + command: "bun i", + assert: func(t *testing.T, parsedCommand *ParsedCommand, err error) { + assert.NoError(t, err) + assert.Equal(t, true, parsedCommand.IsManifestInstall) + assert.Equal(t, 0, len(parsedCommand.InstallTargets)) + assert.True(t, parsedCommand.IsInstallationCommand()) + }, + }, + { + name: "manifest installation with ci", + command: "bun ci", + assert: func(t *testing.T, parsedCommand *ParsedCommand, err error) { + assert.NoError(t, err) + assert.Equal(t, true, parsedCommand.IsManifestInstall) + assert.Equal(t, 0, len(parsedCommand.InstallTargets)) + assert.True(t, parsedCommand.IsInstallationCommand()) + }, + }, { name: "multiple package installations", command: "bun add @types/node @types/react", @@ -475,6 +495,13 @@ func TestNpmProxyBehavior(t *testing.T) { isKnownNonDownloadCmd: false, isInstallationCommand: false, }, + { + name: "bun ci — manifest install", + pm: func() (*npmPackageManager, error) { return NewNpmPackageManager(DefaultBunPackageManagerConfig()) }, + command: "bun ci", + isKnownNonDownloadCmd: false, + isInstallationCommand: true, + }, { name: "npm exec — proxy runs (may download and run package)", pm: func() (*npmPackageManager, error) { return NewNpmPackageManager(DefaultNpmPackageManagerConfig()) },