Skip to content

Commit 003a2af

Browse files
committed
RTECO-1021 - Refactor native mode handling in npm commands to improve clarity and maintain backward compatibility
1 parent c24f450 commit 003a2af

3 files changed

Lines changed: 45 additions & 33 deletions

File tree

artifactory/commands/npm/common.go

Lines changed: 7 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -50,20 +50,17 @@ func (ca *CommonArgs) SetUseNative(useNpmRc bool) *CommonArgs {
5050
// then falls back to the deprecated --run-native flag for backward compatibility.
5151
// Returns: useNative flag, filtered args (with --run-native removed if present), error
5252
func CheckIsNativeAndFetchFilteredArgs(args []string) (useNative bool, filteredArgs []string, err error) {
53-
filteredArgs = args
54-
// Check JFROG_RUN_NATIVE environment variable first (preferred method)
55-
useNative = flexpack.IsFlexPackEnabled()
56-
if useNative {
57-
log.Info("Running npm in native mode (JFROG_RUN_NATIVE=true)")
58-
return
59-
}
60-
61-
// Check deprecated --run-native flag for backward compatibility
53+
// Always strip --run-native from args so it never reaches the npm binary,
54+
// regardless of whether native mode is triggered by env var or flag.
6255
filteredArgs, useNativeFlag, err := coreutils.ExtractUseNativeFromArgs(args)
6356
if err != nil {
6457
return false, args, err
6558
}
66-
if useNativeFlag {
59+
60+
if flexpack.IsFlexPackEnabled() {
61+
log.Info("Running npm in native mode (JFROG_RUN_NATIVE=true)")
62+
useNative = true
63+
} else if useNativeFlag {
6764
log.Warn("The --run-native flag is deprecated. Please use JFROG_RUN_NATIVE=true environment variable instead.")
6865
log.Info("Running npm in native mode")
6966
useNative = true

artifactory/commands/npm/npmcommand.go

Lines changed: 25 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -129,17 +129,32 @@ func (nc *NpmCommand) SetDisableCVSCheck(disable bool) *NpmCommand {
129129
}
130130

131131
func (nc *NpmCommand) Init() error {
132-
// Read config file.
133-
log.Debug("Preparing to read the config file", nc.configFilePath)
134-
vConfig, err := project.ReadConfigFile(nc.configFilePath, project.YAML)
135-
if err != nil {
136-
return err
132+
if nc.configFilePath != "" {
133+
log.Debug("Preparing to read the config file", nc.configFilePath)
134+
vConfig, err := project.ReadConfigFile(nc.configFilePath, project.YAML)
135+
if err != nil {
136+
return err
137+
}
138+
139+
repoConfig, err := nc.getRepoConfig(vConfig)
140+
if err != nil {
141+
return err
142+
}
143+
nc.SetRepoConfig(repoConfig)
144+
} else if nc.UseNative() {
145+
// No config file + native mode — CLI layer set useNative and stripped --run-native already.
146+
// Only strip --server-id (not a valid npm flag) and resolve server details.
147+
filteredArgs, serverID, err := coreutils.ExtractServerIdFromCommand(nc.npmArgs)
148+
if err != nil {
149+
return err
150+
}
151+
nc.npmArgs = filteredArgs
152+
nc.serverDetails, err = config.GetSpecificConfig(serverID, true, false)
153+
if err != nil {
154+
return err
155+
}
137156
}
138157

139-
repoConfig, err := nc.getRepoConfig(vConfig)
140-
if err != nil {
141-
return err
142-
}
143158
_, _, _, filteredNpmArgs, buildConfiguration, err := commandUtils.ExtractNpmOptionsFromArgs(nc.npmArgs)
144159
if err != nil {
145160
return err
@@ -149,7 +164,7 @@ func (nc *NpmCommand) Init() error {
149164
if err != nil {
150165
return err
151166
}
152-
nc.SetRepoConfig(repoConfig).SetArgs(filteredNpmArgs).SetBuildConfiguration(buildConfiguration)
167+
nc.SetArgs(filteredNpmArgs).SetBuildConfiguration(buildConfiguration)
153168
nc.SetDisableCVSCheck(disableCVSCheck)
154169
return nil
155170
}
@@ -199,13 +214,6 @@ func (nc *NpmCommand) PreparePrerequisites(repo string) error {
199214
return err
200215
}
201216
log.Debug("Working directory set to:", nc.workingDirectory)
202-
203-
// Check for native mode (env var or deprecated flag)
204-
useNative, _, err := CheckIsNativeAndFetchFilteredArgs(nc.npmArgs)
205-
if err != nil {
206-
return err
207-
}
208-
nc.SetUseNative(useNative)
209217
nc.installHandler = NewNpmInstallStrategy(nc.UseNative(), nc)
210218

211219
return nc.installHandler.PrepareInstallPrerequisites(repo)

artifactory/commands/npm/publish.go

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -129,11 +129,6 @@ func (npc *NpmPublishCommand) Init() error {
129129
if err != nil {
130130
return err
131131
}
132-
// Check for native mode (env var or deprecated flag)
133-
useNative, filteredNpmArgs, err := CheckIsNativeAndFetchFilteredArgs(filteredNpmArgs)
134-
if err != nil {
135-
return err
136-
}
137132
filteredNpmArgs, tag, err := coreutils.ExtractTagFromArgs(filteredNpmArgs)
138133
if err != nil {
139134
return err
@@ -154,8 +149,20 @@ func (npc *NpmPublishCommand) Init() error {
154149
return errorutils.CheckError(err)
155150
}
156151
npc.SetBuildConfiguration(buildConfiguration).SetRepo(deployerParams.TargetRepo()).SetNpmArgs(filteredNpmArgs).SetServerDetails(rtDetails)
152+
} else if npc.UseNative() {
153+
// No config file + native mode: CLI layer already set useNative and stripped --run-native.
154+
// Extract --server-id for metrics reporting and strip it from args.
155+
filteredNpmArgs, serverID, err := coreutils.ExtractServerIdFromCommand(filteredNpmArgs)
156+
if err != nil {
157+
return err
158+
}
159+
rtDetails, err := config.GetSpecificConfig(serverID, true, false)
160+
if err != nil {
161+
return err
162+
}
163+
npc.SetBuildConfiguration(buildConfiguration).SetNpmArgs(filteredNpmArgs).SetServerDetails(rtDetails)
157164
}
158-
npc.SetDetailedSummary(detailedSummary).SetXrayScan(xrayScan).SetScanOutputFormat(scanOutputFormat).SetDistTag(tag).SetUseNative(useNative)
165+
npc.SetDetailedSummary(detailedSummary).SetXrayScan(xrayScan).SetScanOutputFormat(scanOutputFormat).SetDistTag(tag)
159166
return nil
160167
}
161168

0 commit comments

Comments
 (0)