Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package jfrog-cli for openSUSE:Factory 
checked in at 2026-11-13 18:34:49
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/jfrog-cli (Old)
 and      /work/SRC/openSUSE:Factory/.jfrog-cli.new.1251 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "jfrog-cli"

Fri Nov 13 18:34:49 2026 rev:59 rq:1397244 version:2.132.0

Changes:
--------
--- /work/SRC/openSUSE:Factory/jfrog-cli/jfrog-cli.changes      2026-11-05 
18:22:35.744401480 +0100
+++ /work/SRC/openSUSE:Factory/.jfrog-cli.new.1251/jfrog-cli.changes    
2026-11-13 18:38:49.194159342 +0100
@@ -1,0 +2,55 @@
+Fri Nov 13 05:49:46 UTC 2026 - Johannes Kastl 
<[email protected]>
+
+- Update to version 2.132.0:
+  No changes in: gofrog, jfrog-client-go
+  * New Features
+    - [jfrog-cli] feat: create package alias for helm and updated
+      integration tests #3591
+  * Bug Fixes
+    - [build-info-go] RTECO-2245 - Fail on a failed yarn info and
+      add entries for missing Yarn dependencies #432
+    - [jfrog-cli] RTECO-0000 - Move macOS test runners from retired
+      macos-14 to macos-latest #3761
+    - [jfrog-cli-artifactory] [Frogbot] Update version of
+      github.com/go-openapi/swag/jsonutils to 0.27.1 #588
+    - [jfrog-cli-artifactory] [Frogbot] Update version of
+      github.com/klauspost/compress to 1.18.7 #590
+    - [jfrog-cli-artifactory] [Frogbot] Update version of
+      github.com/grpc-ecosystem/grpc-gateway/v2 to 2.29.0 #591
+    - [jfrog-cli-artifactory] [Frogbot] Update version of
+      github.com/pelletier/go-toml/v2 to 2.4.3 #593
+    - [jfrog-cli-artifactory] [Frogbot] Update version of
+      github.com/in-toto/in-toto-golang to 0.11.0 #594
+    - [jfrog-cli-artifactory] [Frogbot] Update version of
+      oras.land/oras-go/v2 to 2.6.4 #598
+    - [jfrog-cli-artifactory] [Frogbot] Update version of
+      github.com/beevik/etree to 1.7.1 #600
+    - [jfrog-cli-artifactory] jf helm package fails to collect
+      build-info when Chart.yaml and packaged chart archive are in
+      different directories. #501
+    - [jfrog-cli-security] XRAY-159762 - Excludes patterns for
+      Static-SCA generating SBOM #931
+    - [jfrog-cli-security] XRAY-167698 - jf ca
+      include-cached-packages fail fixed #935
+    - [jfrog-cli-security] Fix: preserve dependencies across
+      repeated SBOM node occurrences #932
+    - [jfrog-cli-security] XRAY-167150 - Update Xspecter to 1.9.0
+      to resolve imported Maven BOMs #939
+    - [jfrog-cli-security] Fix release repo path construction #940
+    - [jfrog-cli-security] XRAY-163629 - Check .npmrc host matches
+      jf c server before sending credentials #943
+    - [jfrog-cli-security] XRAY-167694 - Keep scan results paths
+      valid on Windows when the Git URL has a port #942
+  * Internal Changes
+    - [jfrog-cli] RTECO-0000 - Upgrade Alpine packages in slim
+      image (zlib CVE-2026-4738) #3763
+    - [jfrog-cli-security] Update dependencies #944
+  * Other Changes
+    - [jfrog-cli] JFMIG-82 - Remove data-transfer plugin dependency
+      from transfer-files; deprecate transfer-plugin-install #3747
+    - [jfrog-cli-core] JFMIG-88 - Replace data-transfer plugin with
+      GET/PUT streaming in transfer-files #1629
+    - [jfrog-cli-core] JFMIG-145 - Batch Docker dir-content AQL in
+      transfer-files Files Diff phase #1630
+
+-------------------------------------------------------------------

Old:
----
  jfrog-cli-2.131.0.obscpio

New:
----
  jfrog-cli-2.132.0.obscpio

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ jfrog-cli.spec ++++++
--- /var/tmp/diff_new_pack.egadad/_old  2026-11-13 18:38:53.325334129 +0100
+++ /var/tmp/diff_new_pack.egadad/_new  2026-11-13 18:38:53.327334214 +0100
@@ -19,7 +19,7 @@
 %define executable_name jf
 
 Name:           jfrog-cli
-Version:        2.131.0
+Version:        2.132.0
 Release:        0
 Summary:        A client that automates access to JFrog products
 License:        Apache-2.0

++++++ _service ++++++
--- /var/tmp/diff_new_pack.egadad/_old  2026-11-13 18:38:53.363335737 +0100
+++ /var/tmp/diff_new_pack.egadad/_new  2026-11-13 18:38:53.366335864 +0100
@@ -4,7 +4,7 @@
     <param name="scm">git</param>
     <param name="submodules">disable</param>
     <param name="exclude">.git</param>
-    <param name="revision">refs/tags/v2.131.0</param>
+    <param name="revision">refs/tags/v2.132.0</param>
     <param name="versionformat">@PARENT_TAG@</param>
     <param name="versionrewrite-pattern">v(.*)</param>
     <param name="changesgenerate">enable</param>

++++++ _servicedata ++++++
--- /var/tmp/diff_new_pack.egadad/_old  2026-11-13 18:38:53.393337006 +0100
+++ /var/tmp/diff_new_pack.egadad/_new  2026-11-13 18:38:53.396337133 +0100
@@ -1,6 +1,6 @@
 <servicedata>
 <service name="tar_scm">
                 <param 
name="url">https://github.com/jfrog/jfrog-cli.git</param>
-              <param 
name="changesrevision">7cd517216cfb29dd957b6888b9082c1b1865acd3</param></service></servicedata>
+              <param 
name="changesrevision">14688e5950be88ca67c4a17a865e12dafab69ef0</param></service></servicedata>
 (No newline at EOF)
 

++++++ jfrog-cli-2.131.0.obscpio -> jfrog-cli-2.132.0.obscpio ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/jfrog-cli-2.131.0/CONTRIBUTING.md 
new/jfrog-cli-2.132.0/CONTRIBUTING.md
--- old/jfrog-cli-2.131.0/CONTRIBUTING.md       2026-11-03 12:10:32.000000000 
+0100
+++ new/jfrog-cli-2.132.0/CONTRIBUTING.md       2026-11-11 13:25:02.000000000 
+0100
@@ -189,7 +189,7 @@
 ##### Requirements
 
 - Make sure the `RTLIC` environment variable is configured with a valid 
license.
-- You can start an Artifactory container by running the `startArtifactory.sh` 
script located in the `testdata/docker/artifactory` directory. Before running 
the tests, wait for Artifactory to finish booting up in the container.
+- You can start an Artifactory container by running the `start.sh` script 
located in the `testdata/docker/artifactory` directory. Before running the 
tests, wait for Artifactory to finish booting up in the container.
 
 | Flag                      | Description                         |
 | ------------------------- | ----------------------------------- |
@@ -279,7 +279,6 @@
 | `-jfrog.targetUrl`                 | JFrog target platform URL.              
                                                                                
         |
 | `-jfrog.targetAdminToken`          | JFrog target platform admin token.      
                                                                                
         |
 | `-jfrog.jfrogHome`                 | The JFrog home directory of the local 
Artifactory installation.                                                       
           |
-| `-jfrog.installDataTransferPlugin` | Set this flag to `true` if you want the 
test to automatically install the data-transfer plugin in the source 
Artifactory server. |
 
 To run Transfer tests, execute the following command:
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/jfrog-cli-2.131.0/artifactory/cli.go 
new/jfrog-cli-2.132.0/artifactory/cli.go
--- old/jfrog-cli-2.131.0/artifactory/cli.go    2026-11-03 12:10:32.000000000 
+0100
+++ new/jfrog-cli-2.132.0/artifactory/cli.go    2026-11-11 13:25:02.000000000 
+0100
@@ -15,8 +15,6 @@
 
        "github.com/jfrog/jfrog-cli/utils/accesstoken"
 
-       "github.com/jfrog/gofrog/version"
-       
"github.com/jfrog/jfrog-cli-core/v2/artifactory/commands/transferinstall"
        "github.com/jfrog/jfrog-cli/docs/artifactory/transferplugininstall"
 
        "github.com/jfrog/jfrog-cli-artifactory/artifactory/commands/generic"
@@ -557,6 +555,7 @@
                        BashComplete: corecommon.CreateBashCompletionFunc(),
                        Action:       dataTransferPluginInstallCmd,
                        Category:     transferCategory,
+                       Hidden:       true,
                },
        })
 }
@@ -1245,38 +1244,10 @@
        }
 }
 
-func dataTransferPluginInstallCmd(c *cli.Context) error {
-       // Get the Artifactory serverID from the argument or use default if not 
exists
-       serverID := ""
-       if c.NArg() > 1 {
-               return cliutils.WrongNumberOfArgumentsHandler(c)
-       } else if c.NArg() == 1 {
-               serverID = c.Args()[0]
-       }
-       serverDetails, err := coreConfig.GetSpecificConfig(serverID, true, true)
-       if err != nil {
-               return err
-       }
-       installCmd := 
transferinstall.NewInstallDataTransferCommand(serverDetails)
-       // Optional flags
-       versionToInstall := c.String(cliutils.Version)
-       if versionToInstall != "" {
-               
installCmd.SetInstallVersion(version.NewVersion(versionToInstall))
-       }
-       sourceFilesPath := c.String(cliutils.InstallPluginSrcDir)
-       if sourceFilesPath != "" {
-               installCmd.SetLocalPluginFiles(sourceFilesPath)
-       }
-
-       if versionToInstall != "" && sourceFilesPath != "" {
-               return cliutils.PrintHelpAndReturnError("Only version or dir is 
allowed, not both.", c)
-       }
-
-       homePath := c.String(cliutils.InstallPluginHomeDir)
-       if homePath != "" {
-               installCmd.SetJFrogHomePath(homePath)
-       }
-       return commands.Exec(installCmd)
+func dataTransferPluginInstallCmd(_ *cli.Context) error {
+       log.Warn("The 'transfer-plugin-install' command is deprecated and no 
longer installs the data-transfer user plugin. " +
+               "'jf rt transfer-files' does not require the plugin on the 
source Artifactory. This command will be removed in a future release.")
+       return nil
 }
 
 func transferFilesCmd(c *cli.Context) error {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/jfrog-cli-2.131.0/artifactory/cli_test.go 
new/jfrog-cli-2.132.0/artifactory/cli_test.go
--- old/jfrog-cli-2.131.0/artifactory/cli_test.go       2026-11-03 
12:10:32.000000000 +0100
+++ new/jfrog-cli-2.132.0/artifactory/cli_test.go       2026-11-11 
13:25:02.000000000 +0100
@@ -222,6 +222,28 @@
        return cli.NewContext(app, fs, nil)
 }
 
+func TestTransferPluginInstallIsHiddenAndDeprecated(t *testing.T) {
+       var found bool
+       for _, cmd := range GetCommands() {
+               if cmd.Name != "transfer-plugin-install" {
+                       continue
+               }
+               found = true
+               assert.True(t, cmd.Hidden)
+               assert.Contains(t, cmd.Usage, "[DEPRECATED]")
+       }
+       assert.True(t, found, "transfer-plugin-install command should remain 
registered to inform users that the plugin is no longer required")
+}
+
+func TestTransferPluginInstallOnlyWarns(t *testing.T) {
+       // A non-existent server ID and conflicting flags would fail if the 
command still attempted an installation.
+       set := flag.NewFlagSet("transfer-plugin-install", flag.ContinueOnError)
+       set.String(cliutils.Version, "", "")
+       set.String(cliutils.InstallPluginSrcDir, "", "")
+       require.NoError(t, set.Parse([]string{"--version=1.0.0", 
"--dir=/non/existent", "no-such-server-id", "extra-arg"}))
+       assert.NoError(t, dataTransferPluginInstallCmd(cli.NewContext(nil, set, 
nil)))
+}
+
 // ---------------------------------------------------------------------------
 // GetOutputFormat (transfer-files) tests
 // ---------------------------------------------------------------------------
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/jfrog-cli-2.131.0/build/docker/slim/Dockerfile 
new/jfrog-cli-2.132.0/build/docker/slim/Dockerfile
--- old/jfrog-cli-2.131.0/build/docker/slim/Dockerfile  2026-11-03 
12:10:32.000000000 +0100
+++ new/jfrog-cli-2.132.0/build/docker/slim/Dockerfile  2026-11-11 
13:25:02.000000000 +0100
@@ -11,6 +11,8 @@
 ARG image_name=jfrog-cli
 ARG cli_executable_name
 ENV CI true
-RUN apk add --no-cache bash tzdata ca-certificates curl jq
+# Upgrade base packages first, so fixed versions (for example zlib 1.4-r0 for 
CVE-2026-4738)
+# replace the versions frozen in the base image snapshot.
+RUN apk upgrade --no-cache && apk add --no-cache bash tzdata ca-certificates 
curl jq
 COPY --from=builder /${image_name}/${cli_executable_name} 
/usr/local/bin/${cli_executable_name}
 RUN chmod +x /usr/local/bin/${cli_executable_name}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/jfrog-cli-2.131.0/build/npm/v2/package-lock.json 
new/jfrog-cli-2.132.0/build/npm/v2/package-lock.json
--- old/jfrog-cli-2.131.0/build/npm/v2/package-lock.json        2026-11-03 
12:10:32.000000000 +0100
+++ new/jfrog-cli-2.132.0/build/npm/v2/package-lock.json        2026-11-11 
13:25:02.000000000 +0100
@@ -1,5 +1,5 @@
 {
   "name": "jfrog-cli-v2",
-  "version": "2.131.0",
+  "version": "2.132.0",
   "lockfileVersion": 2
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/jfrog-cli-2.131.0/build/npm/v2/package.json 
new/jfrog-cli-2.132.0/build/npm/v2/package.json
--- old/jfrog-cli-2.131.0/build/npm/v2/package.json     2026-11-03 
12:10:32.000000000 +0100
+++ new/jfrog-cli-2.132.0/build/npm/v2/package.json     2026-11-11 
13:25:02.000000000 +0100
@@ -1,6 +1,6 @@
 {
   "name": "jfrog-cli-v2",
-  "version": "2.131.0",
+  "version": "2.132.0",
   "description": "🐸 Command-line interface for JFrog Artifactory, Xray, 
Distribution, Pipelines and Mission Control 🐸",
   "homepage": "https://github.com/jfrog/jfrog-cli";,
   "preferGlobal": true,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/jfrog-cli-2.131.0/build/npm/v2-jf/package-lock.json 
new/jfrog-cli-2.132.0/build/npm/v2-jf/package-lock.json
--- old/jfrog-cli-2.131.0/build/npm/v2-jf/package-lock.json     2026-11-03 
12:10:32.000000000 +0100
+++ new/jfrog-cli-2.132.0/build/npm/v2-jf/package-lock.json     2026-11-11 
13:25:02.000000000 +0100
@@ -1,5 +1,5 @@
 {
   "name": "jfrog-cli-v2-jf",
-  "version": "2.131.0",
+  "version": "2.132.0",
   "lockfileVersion": 1
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/jfrog-cli-2.131.0/build/npm/v2-jf/package.json 
new/jfrog-cli-2.132.0/build/npm/v2-jf/package.json
--- old/jfrog-cli-2.131.0/build/npm/v2-jf/package.json  2026-11-03 
12:10:32.000000000 +0100
+++ new/jfrog-cli-2.132.0/build/npm/v2-jf/package.json  2026-11-11 
13:25:02.000000000 +0100
@@ -1,6 +1,6 @@
 {
   "name": "jfrog-cli-v2-jf",
-  "version": "2.131.0",
+  "version": "2.132.0",
   "description": "🐸 Command-line interface for JFrog Artifactory, Xray, 
Distribution, Pipelines and Mission Control 🐸",
   "homepage": "https://github.com/jfrog/jfrog-cli";,
   "preferGlobal": true,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/jfrog-cli-2.131.0/docs/artifactory/transferfiles/help.go 
new/jfrog-cli-2.132.0/docs/artifactory/transferfiles/help.go
--- old/jfrog-cli-2.131.0/docs/artifactory/transferfiles/help.go        
2026-11-03 12:10:32.000000000 +0100
+++ new/jfrog-cli-2.132.0/docs/artifactory/transferfiles/help.go        
2026-11-11 13:25:02.000000000 +0100
@@ -24,7 +24,6 @@
 Prerequisites:
 - Both source and target server IDs configured with admin tokens.
 - 'jf rt transfer-config' (or transfer-config-merge) already run so repos 
exist on the target.
-- 'jf rt transfer-plugin-install' installed on the source server's primary 
node.
 - 'jf rt transfer-settings' tuned for throughput.
 
 Common patterns:
@@ -33,12 +32,12 @@
   $ jf rt transfer-files source-prod target-cloud --status   # check progress
 
 Gotchas:
-- Requires the data-transfer plugin on the source (install via 'jf rt 
transfer-plugin-install').
+- Does not require the data-transfer user plugin on the source; 'jf rt 
transfer-plugin-install' is deprecated.
 - Long-running; expect hours-to-days for large stores. Run inside a long-lived 
session (nohup, tmux, screen).
 - Throughput is governed by 'jf rt transfer-settings'; defaults are 
conservative.
 - Idempotent on file content but not on repo property changes; re-running 
after a target-side delete causes redelivery.
 
-Related: jf rt transfer-config, jf rt transfer-settings, jf rt 
transfer-plugin-install
+Related: jf rt transfer-config, jf rt transfer-settings
 
 QA:
 Q: What's the JFrog CLI command to transfer the configuration from my 
artifactory to the target artifactory?
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/jfrog-cli-2.131.0/docs/artifactory/transferplugininstall/help.go 
new/jfrog-cli-2.132.0/docs/artifactory/transferplugininstall/help.go
--- old/jfrog-cli-2.131.0/docs/artifactory/transferplugininstall/help.go        
2026-11-03 12:10:32.000000000 +0100
+++ new/jfrog-cli-2.132.0/docs/artifactory/transferplugininstall/help.go        
2026-11-11 13:25:02.000000000 +0100
@@ -3,38 +3,27 @@
 var Usage = []string{"rt transfer-plugin-install <server-id> [command 
options]"}
 
 func GetDescription() string {
-       return "Download and install the data-transfer user plugin on the 
primary node of Artifactory, which is running on this local machine."
+       return "[DEPRECATED] This command no longer installs the data-transfer 
user plugin and only prints a deprecation warning. 'jf rt transfer-files' does 
not require the plugin."
 }
 
 func GetArguments() string {
        return `        server-id
-               The ID of the source server, on which the plugin should be 
installed.`
+               Ignored.`
 }
 
 func GetAIDescription() string {
-       return `Download the data-transfer Artifactory user plugin and install 
it on the primary node of the source Artifactory. Required as a one-time prep 
before 'jf rt transfer-files'. The plugin handles the actual byte streaming on 
the server side.
+       return `[DEPRECATED] Informational command only. It no longer downloads 
or installs the data-transfer Artifactory user plugin; it only prints a 
deprecation warning and exits successfully. 'jf rt transfer-files' does not 
require the plugin on the source server. The command will be removed in a 
future release.
 
 When to use:
-- One-time setup on the source server before starting a self-hosted-to-cloud 
migration.
-
-Prerequisites:
-- Must be run on the same host as the source Artifactory's primary node (or 
with filesystem access to its etc/artifactory/plugins/ directory).
-- Admin privileges on the source server.
-- The source server ID is configured locally.
-
-Common patterns:
-  $ jf rt transfer-plugin-install source-prod
-  $ jf rt transfer-plugin-install source-prod 
--dir=/opt/jfrog/artifactory/var/etc/artifactory/plugins
+- Do not use. Run 'jf rt transfer-files' directly.
 
 Gotchas:
-- Must run as the user that owns the Artifactory installation; otherwise the 
file write fails.
-- The plugin requires a Groovy plugins admin restart (or wait for the 
scheduled reload).
-- This command only targets self-hosted instances; cloud-hosted sources need a 
different transfer mechanism.
+- All arguments and flags (--version, --dir, --home-dir) are accepted but 
ignored.
 
 Related: jf rt transfer-files, jf rt transfer-settings
 
 QA:
-Q: What's the JFrog CLI command to install the data-transfer user plugin in 
the primary node of the source instance?
-A: jf rt transfer-plugin-install source-server
+Q: Do I need to install the data-transfer user plugin before running 'jf rt 
transfer-files'?
+A: No. The plugin is no longer required, and 'jf rt transfer-plugin-install' 
is deprecated and does nothing.
 `
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/jfrog-cli-2.131.0/ghostfrog_test.go 
new/jfrog-cli-2.132.0/ghostfrog_test.go
--- old/jfrog-cli-2.131.0/ghostfrog_test.go     2026-11-03 12:10:32.000000000 
+0100
+++ new/jfrog-cli-2.132.0/ghostfrog_test.go     2026-11-11 13:25:02.000000000 
+0100
@@ -468,10 +468,11 @@
 // E2E-030: setup-jfrog-cli native integration
 func TestGhostFrogSetupJFrogCLINativeIntegration(t *testing.T) {
        homeDir := initGhostFrogTest(t)
-       installAliases(t, "npm,mvn,go,pip")
+       tools := []string{"npm", "mvn", "go", "pip", "helm"}
+       installAliases(t, strings.Join(tools, ","))
 
        binDir := aliasBinDir(homeDir)
-       for _, tool := range []string{"npm", "mvn", "go", "pip"} {
+       for _, tool := range tools {
                _, err := os.Stat(aliasToolPath(homeDir, tool))
                require.NoError(t, err, "alias for %s should exist", tool)
        }
@@ -484,7 +485,7 @@
        // Verify alias dir is populated
        entries, err := os.ReadDir(binDir)
        require.NoError(t, err)
-       assert.GreaterOrEqual(t, len(entries), 4, "should have at least 4 alias 
entries")
+       assert.GreaterOrEqual(t, len(entries), len(tools), fmt.Sprintf("should 
have at least %d alias entries", len(tools)))
 }
 
 // E2E-031: Auto build-info publish (requires Artifactory)
@@ -1156,9 +1157,115 @@
 }
 
 // ---------------------------------------------------------------------------
+// Section 15.10 - Helm Alias (E2E-070 to E2E-073)
+// ---------------------------------------------------------------------------
+
+// E2E-070: helm package through the alias runs jf helm and collects build info
+func TestGhostFrogHelmAliasPackageCollectsBuildInfo(t *testing.T) {
+       homeDir := initGhostFrogHelmTest(t)
+       chartDir := createGhostFrogHelmChart(t)
+       destination := t.TempDir()
+
+       out, err := runAliasedHelm(t, homeDir, nil,
+               "package", chartDir, "-d", destination,
+               "--build-name=ghostfrog-helm-package", "--build-number=1")
+
+       require.NoError(t, err, "aliased helm package should succeed: %s", out)
+       assert.Contains(t, out, "Transforming 'helm' to 'jf helm'",
+               "helm package should be routed through jf helm")
+       assert.FileExists(t, filepath.Join(destination, 
"ghostfrog-chart-0.1.0.tgz"),
+               "chart archive should be written to the --destination 
directory")
+       assert.Contains(t, out, "Build info saved locally",
+               "build info should be collected for the aliased helm package 
command")
+}
+
+// E2E-071: global flags before the subcommand reach native helm unchanged
+func TestGhostFrogHelmAliasGlobalFlagBeforeSubcommand(t *testing.T) {
+       homeDir := initGhostFrogHelmTest(t)
+       chartDir := createGhostFrogHelmChart(t)
+
+       out, err := runAliasedHelm(t, homeDir, nil,
+               "--namespace", "ghostfrog-ns", "template", "ghostfrog-release", 
chartDir)
+
+       require.NoError(t, err, "aliased helm with a global flag before the 
subcommand should succeed: %s", out)
+       assert.Contains(t, out, "namespace: ghostfrog-ns",
+               "--namespace placed before the subcommand should be passed to 
helm template")
+}
+
+// E2E-072: helm registry logout through the alias logs out instead of logging 
in
+func TestGhostFrogHelmAliasRegistryLogoutIsNotLogin(t *testing.T) {
+       homeDir := initGhostFrogHelmTest(t)
+
+       out, _ := runAliasedHelm(t, homeDir, nil, "registry", "logout", 
"ghostfrog.invalid")
+
+       assert.NotContains(t, out, "Performing helm registry login",
+               "helm registry logout must not be replaced by a login with the 
configured JFrog credentials")
+}
+
+// E2E-073: HELM_REPOSITORY_CACHE set in the environment is preserved through 
the alias
+func TestGhostFrogHelmAliasPreservesRepositoryCacheEnv(t *testing.T) {
+       homeDir := initGhostFrogHelmTest(t)
+       cacheDir := t.TempDir()
+
+       out, err := runAliasedHelm(t, homeDir, 
[]string{"HELM_REPOSITORY_CACHE=" + cacheDir}, "env")
+
+       require.NoError(t, err, "aliased helm env should succeed: %s", out)
+       assert.Contains(t, out, cacheDir,
+               "HELM_REPOSITORY_CACHE from the environment should be used by 
helm")
+}
+
+// ---------------------------------------------------------------------------
 // Test helpers
 // ---------------------------------------------------------------------------
 
+// initGhostFrogHelmTest installs the helm alias and configures an offline 
default server,
+// which jf helm requires even for commands that never contact Artifactory.
+func initGhostFrogHelmTest(t *testing.T) string {
+       t.Helper()
+       homeDir := initGhostFrogTest(t)
+       if _, err := exec.LookPath("helm"); err != nil {
+               t.Skip("helm not found in PATH, skipping Ghost Frog helm test")
+       }
+       installAliases(t, "helm")
+       out, err := runJfCommand(t, "config", "add", "ghostfrog-helm",
+               "--url=http://127.0.0.1:1";, "--user=ghostfrog", 
"--password=ghostfrog",
+               "--enc-password=false", "--interactive=false")
+       require.NoError(t, err, "config add failed: %s", out)
+       return homeDir
+}
+
+func runAliasedHelm(t *testing.T, homeDir string, extraEnv []string, args 
...string) (string, error) {
+       t.Helper()
+       binDir := aliasBinDir(homeDir)
+       cmd := exec.Command(aliasToolPath(homeDir, "helm"), args...)
+       cmd.Env = append(os.Environ(),
+               "PATH="+binDir+string(os.PathListSeparator)+os.Getenv("PATH"),
+               "JFROG_CLI_LOG_LEVEL=DEBUG",
+       )
+       cmd.Env = append(cmd.Env, extraEnv...)
+       out, err := cmd.CombinedOutput()
+       return string(out), err
+}
+
+// createGhostFrogHelmChart writes a dependency-free chart whose template 
renders the release namespace.
+func createGhostFrogHelmChart(t *testing.T) string {
+       t.Helper()
+       chartDir := filepath.Join(t.TempDir(), "ghostfrog-chart")
+       require.NoError(t, os.MkdirAll(filepath.Join(chartDir, "templates"), 
0755))
+       files := map[string]string{
+               "Chart.yaml": "apiVersion: v2\nname: ghostfrog-chart\nversion: 
0.1.0\n",
+               // Helm FlexPack requires a Chart.lock even when the chart has 
no dependencies.
+               "Chart.lock":  "dependencies: []\n",
+               "values.yaml": "replicaCount: 1\n",
+               filepath.Join("templates", "configmap.yaml"): "apiVersion: 
v1\nkind: ConfigMap\nmetadata:\n" +
+                       "  name: {{ .Release.Name }}\n  namespace: {{ 
.Release.Namespace }}\n",
+       }
+       for name, content := range files {
+               require.NoError(t, os.WriteFile(filepath.Join(chartDir, name), 
[]byte(content), 0644))
+       }
+       return chartDir
+}
+
 func timeAfter(t *testing.T, seconds int) <-chan struct{} {
        t.Helper()
        ch := make(chan struct{})
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/jfrog-cli-2.131.0/go.mod new/jfrog-cli-2.132.0/go.mod
--- old/jfrog-cli-2.131.0/go.mod        2026-11-03 12:10:32.000000000 +0100
+++ new/jfrog-cli-2.132.0/go.mod        2026-11-11 13:25:02.000000000 +0100
@@ -19,14 +19,14 @@
        github.com/buger/jsonparser v1.3.0
        github.com/gocarina/gocsv v0.0.0-20260607070740-0735908c6461
        github.com/jfrog/archiver/v3 v3.6.5
-       github.com/jfrog/build-info-go v1.13.1-0.20261028123549-f0cd26bfc2de
+       github.com/jfrog/build-info-go v1.13.1-0.20261104104131-29db5a20af18
        github.com/jfrog/gofrog v1.7.7
        github.com/jfrog/jfrog-cli-application 
v1.0.2-0.20260917110731-d7783acedd8c
-       github.com/jfrog/jfrog-cli-artifactory 
v0.8.1-0.20261103060251-30c80a7deec4
-       github.com/jfrog/jfrog-cli-core/v2 v2.60.1-0.20261102064148-e4c77ed13cc6
+       github.com/jfrog/jfrog-cli-artifactory 
v0.8.1-0.20261111060712-4b23175bf2f5
+       github.com/jfrog/jfrog-cli-core/v2 v2.60.1-0.20261110101257-1f307dd84e3f
        github.com/jfrog/jfrog-cli-evidence 
v0.11.1-0.20261102090321-5b0bce39abfe
-       github.com/jfrog/jfrog-cli-platform-services 
v1.10.1-0.20261030162302-b4948e3a2cb1
-       github.com/jfrog/jfrog-cli-security v1.41.2
+       github.com/jfrog/jfrog-cli-platform-services 
v1.10.1-0.20261104164219-1e5e778e49e0
+       github.com/jfrog/jfrog-cli-security v1.41.3
        github.com/jfrog/jfrog-client-go v1.55.1-0.20261102081622-45c51cfca4f7
        github.com/jszwec/csvutil v1.10.0
        github.com/moby/moby/api v1.55.0
@@ -51,7 +51,7 @@
        github.com/acarl005/stripansi v0.0.0-20180116102854-5a71ef0e047d // 
indirect
        github.com/andybalholm/brotli v1.2.7 // indirect
        github.com/asaskevich/govalidator v0.0.0-20230301143203-a9d515a09cc2 // 
indirect
-       github.com/beevik/etree v1.7.0 // indirect
+       github.com/beevik/etree v1.7.1 // indirect
        github.com/blang/semver v3.5.1+incompatible // indirect
        github.com/c-bata/go-prompt v0.2.6 // indirect
        github.com/cenkalti/backoff/v4 v4.3.0 // indirect
@@ -214,9 +214,10 @@
        github.com/yusufpapurcu/wmi v1.2.4 // indirect
        go.opentelemetry.io/auto/sdk v1.2.1 // indirect
        go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.70.0 
// indirect
-       go.opentelemetry.io/otel v1.45.0 // indirect
-       go.opentelemetry.io/otel/metric v1.45.0 // indirect
-       go.opentelemetry.io/otel/trace v1.45.0 // indirect
+       go.opentelemetry.io/otel v1.47.0 // indirect
+       go.opentelemetry.io/otel/log v1.47.0 // indirect
+       go.opentelemetry.io/otel/metric v1.47.0 // indirect
+       go.opentelemetry.io/otel/trace v1.47.0 // indirect
        go.yaml.in/yaml/v2 v2.4.4 // indirect
        go.yaml.in/yaml/v3 v3.0.5 // indirect
        golang.org/x/crypto v0.58.0 // indirect
@@ -230,14 +231,14 @@
        golang.org/x/time v0.15.0 // indirect
        google.golang.org/genproto/googleapis/api 
v0.0.0-20260803160001-6ac0973c030d // indirect
        google.golang.org/genproto/googleapis/rpc 
v0.0.0-20260803160001-6ac0973c030d // indirect
-       google.golang.org/grpc v1.83.1 // indirect
+       google.golang.org/grpc v1.83.2 // indirect
        google.golang.org/protobuf v1.36.12-0.20260120151049-f2248ac996af // 
indirect
        gopkg.in/ini.v1 v1.67.3 // indirect
        gopkg.in/warnings.v0 v0.1.2 // indirect
        helm.sh/helm/v3 v3.21.3 // indirect
        k8s.io/client-go v0.36.3 // indirect
        k8s.io/klog/v2 v2.140.0 // indirect
-       oras.land/oras-go/v2 v2.6.2 // indirect
+       oras.land/oras-go/v2 v2.6.4 // indirect
        sigs.k8s.io/yaml v1.6.0 // indirect
 )
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/jfrog-cli-2.131.0/go.sum new/jfrog-cli-2.132.0/go.sum
--- old/jfrog-cli-2.131.0/go.sum        2026-11-03 12:10:32.000000000 +0100
+++ new/jfrog-cli-2.132.0/go.sum        2026-11-11 13:25:02.000000000 +0100
@@ -97,8 +97,8 @@
 github.com/aws/aws-sdk-go-v2/service/sts v1.42.3/go.mod 
h1:ULe4HCzfKPiR6R3HEurE3b1upEkuk8AkMrOKtaOxKO8=
 github.com/aws/smithy-go v1.26.0 
h1:9ouqbi+NyKP7fV3Te7UElCwdAb6Y8uk7LGwPE5tVe/s=
 github.com/aws/smithy-go v1.26.0/go.mod 
h1:YE2RhdIuDbA5E5bTdciG9KrW3+TiEONeUWCqxX9i1Fc=
-github.com/beevik/etree v1.7.0 h1:xjBk9O4p4x7D1YajePjfLzdaFC4/uYUENA7P0pv6gXA=
-github.com/beevik/etree v1.7.0/go.mod 
h1:bh4zJxiIr62SOf9pRzN7UUYaEDa9HEKafK25+sLc0Gc=
+github.com/beevik/etree v1.7.1 h1:xBlSFAjlMfZkrCNKCEdZ2MSN9pfQYeRBaISDnAVi4Ek=
+github.com/beevik/etree v1.7.1/go.mod 
h1:bh4zJxiIr62SOf9pRzN7UUYaEDa9HEKafK25+sLc0Gc=
 github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM=
 github.com/beorn7/perks v1.0.1/go.mod 
h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw=
 github.com/blang/semver v3.5.1+incompatible 
h1:cQNTCjp13qL8KC3Nbxr/y2Bqb63oX6wdnnjpJbkM4JQ=
@@ -390,8 +390,8 @@
 github.com/jellydator/ttlcache/v3 v3.4.0/go.mod 
h1:Hw9EgjymziQD3yGsQdf1FqFdpp7YjFMd4Srg5EJlgD4=
 github.com/jfrog/archiver/v3 v3.6.5 
h1:AiNXJoe8jYDOtyykfVuwh26aM4rk/ei+YzBpfBukdzU=
 github.com/jfrog/archiver/v3 v3.6.5/go.mod 
h1:5V9l+Fte30Y4qe9dUOAd3yNTf8lmtVNuhKNrvI8PMhg=
-github.com/jfrog/build-info-go v1.13.1-0.20261028123549-f0cd26bfc2de 
h1:ycdUCYyOZ5TCcRIVT0EfjG/oRMk+QtY3u2XOUcjgt0s=
-github.com/jfrog/build-info-go v1.13.1-0.20261028123549-f0cd26bfc2de/go.mod 
h1:3sv87ey6WTxUckYkj0Iqu9aUaiygQMZKoXNmvT9lK5g=
+github.com/jfrog/build-info-go v1.13.1-0.20261104104131-29db5a20af18 
h1:W6pIW2CY72KWswE/q6N9xbqnESOzQfydUB1nLbe6qp0=
+github.com/jfrog/build-info-go v1.13.1-0.20261104104131-29db5a20af18/go.mod 
h1:3sv87ey6WTxUckYkj0Iqu9aUaiygQMZKoXNmvT9lK5g=
 github.com/jfrog/froggit-go v1.24.0 
h1:qSAywpxlPdQfIFIJPprFzfAkbNfKb/OXMo7YD3dVKrE=
 github.com/jfrog/froggit-go v1.24.0/go.mod 
h1:wRDryqyp3oe+eHgME2mpnEQmO8XBECIPagFwj0nHmdI=
 github.com/jfrog/go-mockhttp v0.3.1 
h1:/wac8v4GMZx62viZmv4wazB5GNKs+GxawuS1u3maJH8=
@@ -402,16 +402,16 @@
 github.com/jfrog/jfrog-apps-config v1.0.1/go.mod 
h1:8AIIr1oY9JuH5dylz2S6f8Ym2MaadPLR6noCBO4C22w=
 github.com/jfrog/jfrog-cli-application v1.0.2-0.20260917110731-d7783acedd8c 
h1:B/svbJcwCMHjeC+HqpzH9yEC7GEvOj3HPotYpG4Ga7A=
 github.com/jfrog/jfrog-cli-application 
v1.0.2-0.20260917110731-d7783acedd8c/go.mod 
h1:RHjDVsgfIE+6N49R1t1nBjbK2Je4VTN7CQm9OlwtFnQ=
-github.com/jfrog/jfrog-cli-artifactory v0.8.1-0.20261103060251-30c80a7deec4 
h1:Z4WqOlZZe3NA02ekqFrbSNlO8hkdGPHn/PuWq1sb+CA=
-github.com/jfrog/jfrog-cli-artifactory 
v0.8.1-0.20261103060251-30c80a7deec4/go.mod 
h1:94/aLloMSK6avu4umcJS3DJ6IuGM5K10PwZ6kDqgzSo=
-github.com/jfrog/jfrog-cli-core/v2 v2.60.1-0.20261102064148-e4c77ed13cc6 
h1:7Jdj+FiaMN5jiQ94+Xlehf9OSLqSbAqAvO44XB9d7E4=
-github.com/jfrog/jfrog-cli-core/v2 
v2.60.1-0.20261102064148-e4c77ed13cc6/go.mod 
h1:dxy3GflCOX9kGxcdEkCXWhV+EMUAGBWO+CY5fGjWcCQ=
+github.com/jfrog/jfrog-cli-artifactory v0.8.1-0.20261111060712-4b23175bf2f5 
h1:anpTUP2adzjBrT1EoCObwwvq3b0ykYmGdh4vZUy69WU=
+github.com/jfrog/jfrog-cli-artifactory 
v0.8.1-0.20261111060712-4b23175bf2f5/go.mod 
h1:0lDv8UDB8gZwddMYexT3QzcAbYt20KNyv3Is7xBQKfc=
+github.com/jfrog/jfrog-cli-core/v2 v2.60.1-0.20261110101257-1f307dd84e3f 
h1:MFlfjDXgUXknvY2u1KUyPdzgkn6dgb39EbgmxV3Aulg=
+github.com/jfrog/jfrog-cli-core/v2 
v2.60.1-0.20261110101257-1f307dd84e3f/go.mod 
h1:dxy3GflCOX9kGxcdEkCXWhV+EMUAGBWO+CY5fGjWcCQ=
 github.com/jfrog/jfrog-cli-evidence v0.11.1-0.20261102090321-5b0bce39abfe 
h1:BRaNdb6JIdGqGa79XwxIsZHDmZ26pQ5V1cPJ7zYLJoM=
 github.com/jfrog/jfrog-cli-evidence 
v0.11.1-0.20261102090321-5b0bce39abfe/go.mod 
h1:4OGLCLQjdHg9PpjFkxvn8bGflOZGEJsoBHAGys7gUio=
-github.com/jfrog/jfrog-cli-platform-services 
v1.10.1-0.20261030162302-b4948e3a2cb1 
h1:1NA6meQs1Nbe7B1AKcvLdX+hKpxyWVe+cNpTDJznZcs=
-github.com/jfrog/jfrog-cli-platform-services 
v1.10.1-0.20261030162302-b4948e3a2cb1/go.mod 
h1:aepFLIsqYJy1rFGkpY5CYwMRNViwjHtJcUaNzrWCCUo=
-github.com/jfrog/jfrog-cli-security v1.41.2 
h1:yLGCrg8T54y2HatjXSSawMVU8c03+dv2Tl8Y9Gz2G54=
-github.com/jfrog/jfrog-cli-security v1.41.2/go.mod 
h1:2LD9S9gqEGSvxUhVC+/DLIPzXFIg6jdCaw5pMdfnS7Y=
+github.com/jfrog/jfrog-cli-platform-services 
v1.10.1-0.20261104164219-1e5e778e49e0 
h1:V5+dkr1p9vl1XYbvVwmFG35tN+1xuwPCE01dZvIbkjs=
+github.com/jfrog/jfrog-cli-platform-services 
v1.10.1-0.20261104164219-1e5e778e49e0/go.mod 
h1:aepFLIsqYJy1rFGkpY5CYwMRNViwjHtJcUaNzrWCCUo=
+github.com/jfrog/jfrog-cli-security v1.41.3 
h1:+B4/SO9LWT5er0a5pqAnHeoEcI4KQnrqqoZznJqXrFM=
+github.com/jfrog/jfrog-cli-security v1.41.3/go.mod 
h1:k478V9VOvW3mwgmAJ0P/nIycqNullCse4dc967PJ7Is=
 github.com/jfrog/jfrog-client-go v1.55.1-0.20261102081622-45c51cfca4f7 
h1:gd1jzPoUxEsfL0N2qebHyemEHKqvob6d9Q8yOl0D5zE=
 github.com/jfrog/jfrog-client-go v1.55.1-0.20261102081622-45c51cfca4f7/go.mod 
h1:+WGudVz1kZofy4hfEidGdTXqF/E51IC65z4yTtt0TwE=
 github.com/jhump/protoreflect v1.17.0 
h1:qOEr613fac2lOuTgWN4tPAtLL7fUSbuJL5X5XumQh94=
@@ -700,8 +700,8 @@
 go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc 
v0.70.0/go.mod h1:DqEFwLumhzMBDQv9PcWbyoDxHI/4lAk6CM4nJBH39sc=
 go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.70.0 
h1:LMuyCAyfalSjDyjdC65nK6N0zoTT63+E/u95X0JovZI=
 go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.70.0/go.mod 
h1:085m8qbm4hgc8rZWGDEa4vmyyo2c3nPxUslYUKUIU04=
-go.opentelemetry.io/otel v1.45.0 
h1:pdrWmLHofpubmArBv1LgFSv1Z0Ie/ppdZzu+kUN5EeU=
-go.opentelemetry.io/otel v1.45.0/go.mod 
h1:XZxIqPapzEYnhNSScF5DIqXhm/rYi0FzCe2XddAwZfQ=
+go.opentelemetry.io/otel v1.47.0 
h1:j7ALJ/zgkS7Z6aeJW09p8VC9804bC+PpeTfCD4XPnOM=
+go.opentelemetry.io/otel v1.47.0/go.mod 
h1:8wS9O2qfXrYrzp6hIF/HOYJJf/wIhFPhR2xLuP+iXQU=
 go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc v0.19.0 
h1:Dn8rkudDzY6KV9dr/D/bTUuWgqDf9xe0rr4G2elrn0Y=
 go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc v0.19.0/go.mod 
h1:gMk9F0xDgyN9M/3Ed5Y1wKcx/9mlU91NXY2SNq7RQuU=
 go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp v0.19.0 
h1:HIBTQ3VO5aupLKjC90JgMqpezVXwFuq6Ryjn0/izoag=
@@ -724,18 +724,18 @@
 go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.43.0/go.mod 
h1:J/ZyF4vfPwsSr9xJSPyQ4LqtcTPULFR64KwTikGLe+A=
 go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.45.0 
h1:lsA/S1bxgdbyFGkTj+3meEdJ6ADVU7QoFstV6MXgE68=
 go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.45.0/go.mod 
h1:L7u+MirGoB1bjeLH66+xDykF4RC8C3RN7lIFpBiewUo=
-go.opentelemetry.io/otel/log v0.19.0 
h1:KUZs/GOsw79TBBMfDWsXS+KZ4g2Ckzksd1ymzsIEbo4=
-go.opentelemetry.io/otel/log v0.19.0/go.mod 
h1:5DQYeGmxVIr4n0/BcJvF4upsraHjg6vudJJpnkL6Ipk=
-go.opentelemetry.io/otel/metric v1.45.0 
h1:7Eg1uH7CJ5cXv9is6tnBe1FI6rj1nwUdbFypRm3br/M=
-go.opentelemetry.io/otel/metric v1.45.0/go.mod 
h1:HAPbm1nd3p1PmFH7v2dR+6BjXxw+Lq4a2+pndMAm08s=
+go.opentelemetry.io/otel/log v1.47.0 
h1:cOTS1CcLbSQeZKanGJ+0JpF/+t4PELi3O3bbl2lqCcI=
+go.opentelemetry.io/otel/log v1.47.0/go.mod 
h1:9byitSQ5pLC6PpqwGXjqdMKya6ZTswHRZh2vvXT33nw=
+go.opentelemetry.io/otel/metric v1.47.0 
h1:4PptaldXx3Eat1XjMZ68pPJEs5wrhlemctZE9a3UdWY=
+go.opentelemetry.io/otel/metric v1.47.0/go.mod 
h1:ADGSXxRrXM6bjbvLo535EstVFlPpPYZm4LBKixjDHwU=
 go.opentelemetry.io/otel/sdk v1.45.0 
h1:4VVSMgQ83dUgW2aoX5f6JgLvHwIvzcuLnF9lUdCSpCw=
 go.opentelemetry.io/otel/sdk v1.45.0/go.mod 
h1:Sr40LgXV7DsKMMJMKOhUWOgMWTfAaqvm2kF0g7ilwuA=
 go.opentelemetry.io/otel/sdk/log v0.19.0 
h1:scYVLqT22D2gqXItnWiocLUKGH9yvkkeql5dBDiXyko=
 go.opentelemetry.io/otel/sdk/log v0.19.0/go.mod 
h1:vFBowwXGLlW9AvpuF7bMgnNI95LiW10szrOdvzBHlAg=
 go.opentelemetry.io/otel/sdk/metric v1.45.0 
h1:oVFszMfyj1Am6s24Vtc7wBb8BKLcwepJjNEYILuiE3o=
 go.opentelemetry.io/otel/sdk/metric v1.45.0/go.mod 
h1:vUWUxDZvu1WVRj8JA8S0AdhsPrZoDpA2DdZauIh4mDA=
-go.opentelemetry.io/otel/trace v1.45.0 
h1:l/mP6Uv7oNO7/TblbhpbgMidxhq1uO/rPsikOyVhxag=
-go.opentelemetry.io/otel/trace v1.45.0/go.mod 
h1:qoJJA2xNMnxRrdISU/kLtfUH2wNeQbiv+jhs/CxI8bc=
+go.opentelemetry.io/otel/trace v1.47.0 
h1:JOjX/Oci8K94QHddo+bbfya/Ai/nf6/dt9ZfrFNWSrM=
+go.opentelemetry.io/otel/trace v1.47.0/go.mod 
h1:jNaSLa2PZEYFG6fRjJABAu+bw4FS08uDmPg28lTghu0=
 go.opentelemetry.io/proto/otlp v1.10.0 
h1:IQRWgT5srOCYfiWnpqUYz9CVmbO8bFmKcwYxpuCSL2g=
 go.opentelemetry.io/proto/otlp v1.10.0/go.mod 
h1:/CV4QoCR/S9yaPj8utp3lvQPoqMtxXdzn7ozvvozVqk=
 go.step.sm/crypto v0.77.7 h1:6azC+pD678Vjju8yXnMDHCZJ+HzFaEmL3sCryiezTIA=
@@ -858,8 +858,8 @@
 google.golang.org/genproto/googleapis/api 
v0.0.0-20260803160001-6ac0973c030d/go.mod 
h1:K/+WGbmBY7aNW1HDw1fJnKYo10i0DkAX6pows00dLig=
 google.golang.org/genproto/googleapis/rpc v0.0.0-20260803160001-6ac0973c030d 
h1:IL4hdHzcUv2l/gcg98/Rj3FbtE6axwqslOW8SW0C+S0=
 google.golang.org/genproto/googleapis/rpc 
v0.0.0-20260803160001-6ac0973c030d/go.mod 
h1:4Hqkh8ycfw05ld/3BWL7rJOSfebL2Q+DVDeRgYgxUU8=
-google.golang.org/grpc v1.83.1 h1:HIO0+BEtBP6soyqvqC8sNUjZ7bTs+0hFQuFF+RAy++Y=
-google.golang.org/grpc v1.83.1/go.mod 
h1:kDyl6SKsiHKt0uylY5gtn5cEjkrIOhQOGDgIc4JGwzQ=
+google.golang.org/grpc v1.83.2 h1:EManeRomTObA0BU7I8vXgg/78uE5MJ9M8B39EX2WscU=
+google.golang.org/grpc v1.83.2/go.mod 
h1:YPI1hK3kDked6iHvgX3tR0y+nX/qpMFKhPgFsokw1S8=
 google.golang.org/protobuf v1.36.12-0.20260120151049-f2248ac996af 
h1:+5/Sw3GsDNlEmu7TfklWKPdQ0Ykja5VEmq2i817+jbI=
 google.golang.org/protobuf v1.36.12-0.20260120151049-f2248ac996af/go.mod 
h1:HTf+CrKn2C3g5S8VImy6tdcUvCska2kB7j23XfzDpco=
 gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod 
h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
@@ -884,8 +884,8 @@
 k8s.io/client-go v0.36.3/go.mod h1:gcPwr0c87vjjG6HB6pWEqOeuYVoXSsREjzux2j6GF30=
 k8s.io/klog/v2 v2.140.0 h1:Tf+J3AH7xnUzZyVVXhTgGhEKnFqye14aadWv7bzXdzc=
 k8s.io/klog/v2 v2.140.0/go.mod h1:o+/RWfJ6PwpnFn7OyAG3QnO47BFsymfEfrz6XyYSSp0=
-oras.land/oras-go/v2 v2.6.2 h1:N04RXngAp1LJKTG6ifz3xHPipasEkWr+hFmInja5YKo=
-oras.land/oras-go/v2 v2.6.2/go.mod 
h1:PlTtg4JTDJkDe8yVHpM2wz7/YDc00GVas+i4jAW2TZ4=
+oras.land/oras-go/v2 v2.6.4 h1:l4uv+UT7QK4Hju+KOEZ/c8iOjq3iZH7cULoRpUnSDAU=
+oras.land/oras-go/v2 v2.6.4/go.mod 
h1:imXEFiYkTZUVVYkfv/r5GVmWeiLkGtNQA8FU4F/sjKs=
 pgregory.net/rapid v1.2.0 h1:keKAYRcjm+e1F0oAuU5F5+YPAWcyxNNRK2wud503Gnk=
 pgregory.net/rapid v1.2.0/go.mod 
h1:PY5XlDGj0+V1FCq0o192FdRhpKHGTRIWBgqjDBTrq04=
 sigs.k8s.io/yaml v1.6.0 h1:G8fkbMSAFqgEFgh4b1wmtzDnioxFCUgTZhlbj5P9QYs=
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/jfrog-cli-2.131.0/helm_test.go 
new/jfrog-cli-2.132.0/helm_test.go
--- old/jfrog-cli-2.131.0/helm_test.go  2026-11-03 12:10:32.000000000 +0100
+++ new/jfrog-cli-2.132.0/helm_test.go  2026-11-11 13:25:02.000000000 +0100
@@ -218,9 +218,14 @@
        err = helmCmd.Run()
        require.NoError(t, err, "helm dependency update should succeed")
 
+       chartArchiveDestinationDir := filepath.Join(chartDir, "target")
+       err = os.MkdirAll(chartArchiveDestinationDir, 0o755)
+       require.NoError(t, err, "Unable to create target directory for chart 
archive")
+
        jfrogCli := coreTests.NewJfrogCli(execMain, "jfrog", "")
        args := []string{
                "helm", "package", ".",
+               "--destination", chartArchiveDestinationDir,
                "--build-name=" + buildName,
                "--build-number=" + buildNumber,
        }
@@ -236,6 +241,51 @@
        validateHelmBuildInfo(t, publishedBuildInfo.BuildInfo, buildName, 
false, true)
 }
 
+func TestHelmPackageMultipleChartsWithBuildInfo(t *testing.T) {
+       initHelmTest(t)
+       defer cleanHelmTest(t)
+
+       buildName := tests.HelmBuildName + "-package-multi"
+       buildNumber := "1"
+
+       var chartDirs []string
+       for _, name := range []string{"test-chart-a", "test-chart-b"} {
+               chartDir := createTestHelmChartWithDependencies(t, name, 
"0.1.0")
+               defer func() {
+                       if err := os.RemoveAll(filepath.Dir(chartDir)); err != 
nil {
+                               t.Logf("Warning: Failed to remove test chart 
directory %s: %v", chartDir, err)
+                       }
+               }()
+               helmCmd := exec.Command("helm", "dependency", "update")
+               helmCmd.Dir = chartDir
+               require.NoError(t, helmCmd.Run(), "helm dependency update 
should succeed for %s", name)
+               chartDirs = append(chartDirs, chartDir)
+       }
+
+       jfrogCli := coreTests.NewJfrogCli(execMain, "jfrog", "")
+       args := append([]string{"helm", "package"}, chartDirs...)
+       args = append(args,
+               "-d", t.TempDir(),
+               "--build-name="+buildName,
+               "--build-number="+buildNumber,
+       )
+       require.NoError(t, jfrogCli.Exec(args...), "helm package should 
succeed")
+
+       assert.NoError(t, artifactoryCli.Exec("bp", buildName, buildNumber))
+
+       publishedBuildInfo, found, err := tests.GetBuildInfo(serverDetails, 
buildName, buildNumber)
+       require.NoError(t, err, "Failed to get build info")
+       require.True(t, found, "build info should be found")
+
+       validateHelmBuildInfo(t, publishedBuildInfo.BuildInfo, buildName, 
false, true)
+       moduleIds := make([]string, 0, 
len(publishedBuildInfo.BuildInfo.Modules))
+       for _, module := range publishedBuildInfo.BuildInfo.Modules {
+               moduleIds = append(moduleIds, module.Id)
+       }
+       assert.ElementsMatch(t, []string{"test-chart-a:0.1.0", 
"test-chart-b:0.1.0"}, moduleIds,
+               "build info should have one module per packaged chart")
+}
+
 func TestHelmDependencyUpdateWithBuildInfo(t *testing.T) {
        initHelmTest(t)
        defer cleanHelmTest(t)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/jfrog-cli-2.131.0/packagealias/config_utils.go 
new/jfrog-cli-2.132.0/packagealias/config_utils.go
--- old/jfrog-cli-2.131.0/packagealias/config_utils.go  2026-11-03 
12:10:32.000000000 +0100
+++ new/jfrog-cli-2.132.0/packagealias/config_utils.go  2026-11-11 
13:25:02.000000000 +0100
@@ -31,6 +31,34 @@
        "bundle": {},
 }
 
+// helmBuildInfoSubcommands lists the helm subcommands jf helm collects build 
info for.
+// Other helm subcommands always run natively, so commands like 'helm 
registry' keep their own behavior.
+var helmBuildInfoSubcommands = map[string]struct{}{
+       "package":    {},
+       "push":       {},
+       "dependency": {},
+}
+
+// helmGlobalFlagsWithValue lists helm global flags whose value can follow as 
a separate argument.
+var helmGlobalFlagsWithValue = map[string]struct{}{
+       "-n":                     {},
+       "--namespace":            {},
+       "--kube-context":         {},
+       "--kubeconfig":           {},
+       "--kube-apiserver":       {},
+       "--kube-as-user":         {},
+       "--kube-as-group":        {},
+       "--kube-ca-file":         {},
+       "--kube-token":           {},
+       "--kube-tls-server-name": {},
+       "--registry-config":      {},
+       "--repository-cache":     {},
+       "--repository-config":    {},
+       "--content-cache":        {},
+       "--burst-limit":          {},
+       "--qps":                  {},
+}
+
 func newDefaultConfig() *Config {
        return &Config{
                Enabled:         true,
@@ -267,6 +295,20 @@
        return keys
 }
 
+// getHelmSubcommand returns the first argument that is neither a flag nor the 
value of a global flag.
+func getHelmSubcommand(args []string) string {
+       for index := 0; index < len(args); index++ {
+               arg := args[index]
+               if !strings.HasPrefix(arg, "-") {
+                       return strings.ToLower(arg)
+               }
+               if _, takesValue := helmGlobalFlagsWithValue[arg]; takesValue {
+                       index++
+               }
+       }
+       return ""
+}
+
 func getModeForTool(config *Config, tool string, args []string) AliasMode {
        config = normalizeConfig(config)
        if tool == "go" {
@@ -290,6 +332,12 @@
                return ModeJF
        }
 
+       if tool == "helm" {
+               if _, collectsBuildInfo := 
helmBuildInfoSubcommands[getHelmSubcommand(args)]; !collectsBuildInfo {
+                       return ModePass
+               }
+       }
+
        mode, found := config.ToolModes[tool]
        if !found {
                if _, isDefaultPass := defaultPassTools[tool]; isDefaultPass {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/jfrog-cli-2.131.0/packagealias/config_utils_test.go 
new/jfrog-cli-2.132.0/packagealias/config_utils_test.go
--- old/jfrog-cli-2.131.0/packagealias/config_utils_test.go     2026-11-03 
12:10:32.000000000 +0100
+++ new/jfrog-cli-2.132.0/packagealias/config_utils_test.go     2026-11-11 
13:25:02.000000000 +0100
@@ -60,6 +60,49 @@
        require.Equal(t, ModeJF, mode)
 }
 
+func TestGetHelmSubcommand(t *testing.T) {
+       tests := []struct {
+               args     []string
+               expected string
+       }{
+               {[]string{"package", "./chart", "-d", "out"}, "package"},
+               {[]string{"-n", "prod", "upgrade", "release", "./chart"}, 
"upgrade"},
+               {[]string{"--kube-context", "ctx", "--debug", "push", 
"chart.tgz", "oci://repo"}, "push"},
+               {[]string{"--namespace=prod", "template", "release", 
"./chart"}, "template"},
+               {[]string{"--debug"}, ""},
+               {nil, ""},
+       }
+       for _, test := range tests {
+               require.Equal(t, test.expected, getHelmSubcommand(test.args), 
"args: %v", test.args)
+       }
+}
+
+func TestGetModeForToolRoutesOnlyHelmBuildInfoCommandsToJf(t *testing.T) {
+       config := &Config{}
+       for _, args := range [][]string{
+               {"package", "./chart"},
+               {"push", "chart.tgz", "oci://repo"},
+               {"dependency", "update"},
+               {"-n", "prod", "package", "./chart"},
+       } {
+               require.Equal(t, ModeJF, getModeForTool(config, "helm", args), 
"args: %v", args)
+       }
+       for _, args := range [][]string{
+               {"registry", "login", "ghcr.io"},
+               {"registry", "logout", "ghcr.io"},
+               {"-n", "prod", "template", "release", "./chart"},
+               {"env"},
+               {"version"},
+               {},
+       } {
+               require.Equal(t, ModePass, getModeForTool(config, "helm", 
args), "args: %v", args)
+       }
+
+       config.ToolModes = map[string]AliasMode{"helm": ModePass}
+       require.Equal(t, ModePass, getModeForTool(config, "helm", 
[]string{"package", "./chart"}),
+               "a configured pass mode should still apply to build-info 
commands")
+}
+
 func TestGetModeForToolFallsBackForInvalidModes(t *testing.T) {
        config := &Config{
                ToolModes: map[string]AliasMode{
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/jfrog-cli-2.131.0/packagealias/packagealias.go 
new/jfrog-cli-2.132.0/packagealias/packagealias.go
--- old/jfrog-cli-2.131.0/packagealias/packagealias.go  2026-11-03 
12:10:32.000000000 +0100
+++ new/jfrog-cli-2.132.0/packagealias/packagealias.go  2026-11-11 
13:25:02.000000000 +0100
@@ -34,6 +34,7 @@
        "gem",
        "bundle",
        "apk",
+       "helm",
 }
 
 // AliasMode represents how a tool should be handled
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/jfrog-cli-2.131.0/transfer_test.go 
new/jfrog-cli-2.132.0/transfer_test.go
--- old/jfrog-cli-2.131.0/transfer_test.go      2026-11-03 12:10:32.000000000 
+0100
+++ new/jfrog-cli-2.132.0/transfer_test.go      2026-11-11 13:25:02.000000000 
+0100
@@ -65,13 +65,6 @@
                t.Skip("Skipping transfer test. To run transfer test add the 
'-test.transfer=true' option.")
        }
        oldHomeDir, newHomeDir := prepareHomeDir(t)
-       if *tests.InstallDataTransferPlugin {
-               if *tests.JfrogHome != "" {
-                       
coreutils.ExitOnErr(artifactoryCli.WithoutCredentials().Exec("transfer-plugin-install",
 inttestutils.SourceServerId, "--home-dir="+*tests.JfrogHome))
-               } else {
-                       
coreutils.ExitOnErr(artifactoryCli.WithoutCredentials().Exec("transfer-plugin-install",
 inttestutils.SourceServerId))
-               }
-       }
 
        // Delete the target server if exist
        targetConfig, err := commands.GetConfig(inttestutils.TargetServerId, 
false)
@@ -83,9 +76,6 @@
        err = coretests.NewJfrogCli(execMain, "jfrog config", 
"--access-token="+*tests.JfrogTargetAccessToken).Exec("add", 
inttestutils.TargetServerId, "--interactive=false", 
"--url="+*tests.JfrogTargetUrl)
        assert.NoError(t, err)
 
-       if *tests.InstallDataTransferPlugin {
-               assert.NoError(t, 
artifactoryCli.WithoutCredentials().Exec("curl", "-XPOST", 
"/api/plugins/reload"))
-       }
        return func() {
                cleanArtifactory()
                inttestutils.CleanTargetRepos(targetArtifactoryCli)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/jfrog-cli-2.131.0/utils/cliutils/cli_consts.go 
new/jfrog-cli-2.132.0/utils/cliutils/cli_consts.go
--- old/jfrog-cli-2.131.0/utils/cliutils/cli_consts.go  2026-11-03 
12:10:32.000000000 +0100
+++ new/jfrog-cli-2.132.0/utils/cliutils/cli_consts.go  2026-11-11 
13:25:02.000000000 +0100
@@ -4,7 +4,7 @@
 
 const (
        // General CLI constants
-       CliVersion  = "2.131.0"
+       CliVersion  = "2.132.0"
        ClientAgent = "jfrog-cli-go"
 
        // CLI base commands constants:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/jfrog-cli-2.131.0/utils/cliutils/commandsflags.go 
new/jfrog-cli-2.132.0/utils/cliutils/commandsflags.go
--- old/jfrog-cli-2.131.0/utils/cliutils/commandsflags.go       2026-11-03 
12:10:32.000000000 +0100
+++ new/jfrog-cli-2.132.0/utils/cliutils/commandsflags.go       2026-11-11 
13:25:02.000000000 +0100
@@ -1969,15 +1969,15 @@
        },
        installPluginVersion: cli.StringFlag{
                Name:  Version,
-               Usage: "[Default: latest] The plugin version to download and 
install.` `",
+               Usage: "[DEPRECATED] Ignored.` `",
        },
        InstallPluginSrcDir: cli.StringFlag{
                Name:  InstallPluginSrcDir,
-               Usage: "[Optional] The local directory that contains the plugin 
files to install.` `",
+               Usage: "[DEPRECATED] Ignored.` `",
        },
        InstallPluginHomeDir: cli.StringFlag{
                Name:  InstallPluginHomeDir,
-               Usage: "[Default: /opt/jfrog] The local JFrog home directory to 
install the plugin in.` `",
+               Usage: "[DEPRECATED] Ignored.` `",
        },
        PreChecks: cli.BoolFlag{
                Name:  PreChecks,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/jfrog-cli-2.131.0/utils/tests/utils.go 
new/jfrog-cli-2.132.0/utils/tests/utils.go
--- old/jfrog-cli-2.131.0/utils/tests/utils.go  2026-11-03 12:10:32.000000000 
+0100
+++ new/jfrog-cli-2.132.0/utils/tests/utils.go  2026-11-11 13:25:02.000000000 
+0100
@@ -43,59 +43,58 @@
 )
 
 var (
-       JfrogUrl                  *string
-       JfrogUser                 *string
-       JfrogPassword             *string
-       JfrogSshKeyPath           *string
-       JfrogSshPassphrase        *string
-       JfrogAccessToken          *string
-       JfrogTargetUrl            *string
-       JfrogTargetAccessToken    *string
-       JfrogHome                 *string
-       TestArtifactoryProject    *bool
-       TestArtifactory           *bool
-       TestArtifactoryProxy      *bool
-       TestDistribution          *bool
-       TestDocker                *bool
-       TestPodman                *bool
-       TestDockerScan            *bool
-       ContainerRegistry         *string
-       TestGo                    *bool
-       TestNpm                   *bool
-       TestPnpm                  *bool
-       TestGradle                *bool
-       TestMaven                 *bool
-       TestNuget                 *bool
-       TestChoco                 *bool
-       TestPSResource            *bool
-       TestPip                   *bool
-       TestPipenv                *bool
-       TestPoetry                *bool
-       TestUv                    *bool
-       TestNix                   *bool
-       TestCargo                 *bool
-       TestAlpine                *bool
-       TestRuby                  *bool
-       TestApt                   *bool
-       TestAgentPlugins          *bool
-       TestAgentSkills           *bool
-       TestApm                   *bool
-       TestConan                 *bool
-       TestHelm                  *bool
-       TestHuggingFace           *bool
-       TestPlugins               *bool
-       TestXray                  *bool
-       TestAccess                *bool
-       TestTransfer              *bool
-       TestLifecycle             *bool
-       TestEvidence              *bool
-       TestApi                   *bool
-       TestGhostFrog             *bool
-       TestIde                   *bool
-       HideUnitTestLog           *bool
-       ciRunId                   *string
-       InstallDataTransferPlugin *bool
-       timestampAdded            bool
+       JfrogUrl               *string
+       JfrogUser              *string
+       JfrogPassword          *string
+       JfrogSshKeyPath        *string
+       JfrogSshPassphrase     *string
+       JfrogAccessToken       *string
+       JfrogTargetUrl         *string
+       JfrogTargetAccessToken *string
+       JfrogHome              *string
+       TestArtifactoryProject *bool
+       TestArtifactory        *bool
+       TestArtifactoryProxy   *bool
+       TestDistribution       *bool
+       TestDocker             *bool
+       TestPodman             *bool
+       TestDockerScan         *bool
+       ContainerRegistry      *string
+       TestGo                 *bool
+       TestNpm                *bool
+       TestPnpm               *bool
+       TestGradle             *bool
+       TestMaven              *bool
+       TestNuget              *bool
+       TestChoco              *bool
+       TestPSResource         *bool
+       TestPip                *bool
+       TestPipenv             *bool
+       TestPoetry             *bool
+       TestUv                 *bool
+       TestNix                *bool
+       TestCargo              *bool
+       TestAlpine             *bool
+       TestRuby               *bool
+       TestApt                *bool
+       TestAgentPlugins       *bool
+       TestAgentSkills        *bool
+       TestApm                *bool
+       TestConan              *bool
+       TestHelm               *bool
+       TestHuggingFace        *bool
+       TestPlugins            *bool
+       TestXray               *bool
+       TestAccess             *bool
+       TestTransfer           *bool
+       TestLifecycle          *bool
+       TestEvidence           *bool
+       TestApi                *bool
+       TestGhostFrog          *bool
+       TestIde                *bool
+       HideUnitTestLog        *bool
+       ciRunId                *string
+       timestampAdded         bool
 )
 
 // nonProjectKeyCharsRegex matches any character that isn't allowed in an 
Artifactory
@@ -171,8 +170,9 @@
        TestIde = flag.Bool("test.ide", false, "Test IDE (VS Code / Cursor / 
Windsurf / Kiro / JetBrains) setup commands")
        ContainerRegistry = flag.String("test.containerRegistry", 
"localhost:8082", "Container registry")
        HideUnitTestLog = flag.Bool("test.hideUnitTestLog", false, "Hide unit 
tests logs and print it in a file")
-       InstallDataTransferPlugin = flag.Bool("test.installDataTransferPlugin", 
false, "Install data-transfer plugin on the source Artifactory server")
        ciRunId = flag.String("ci.runId", "", "A unique identifier used as a 
suffix to create repositories and builds in the tests")
+       // Deprecated: ignored, kept so existing pipelines don't fail on an 
unknown flag.
+       _ = flag.Bool("test.installDataTransferPlugin", false, "[DEPRECATED] 
Ignored")
 }
 
 func CleanFileSystem() {

++++++ jfrog-cli.obsinfo ++++++
--- /var/tmp/diff_new_pack.egadad/_old  2026-11-13 18:38:54.276374367 +0100
+++ /var/tmp/diff_new_pack.egadad/_new  2026-11-13 18:38:54.279374494 +0100
@@ -1,5 +1,5 @@
 name: jfrog-cli
-version: 2.131.0
-mtime: 1793704232
-commit: 7cd517216cfb29dd957b6888b9082c1b1865acd3
+version: 2.132.0
+mtime: 1794399902
+commit: 14688e5950be88ca67c4a17a865e12dafab69ef0
 

++++++ vendor.tar.gz ++++++
/work/SRC/openSUSE:Factory/jfrog-cli/vendor.tar.gz 
/work/SRC/openSUSE:Factory/.jfrog-cli.new.1251/vendor.tar.gz differ: char 150, 
line 1

Reply via email to